From 3ead6f020975c53dd83e88a7c3e632fbd00fdbb9 Mon Sep 17 00:00:00 2001 From: KubaPro010 Date: Wed, 25 Oct 2023 16:58:55 +0200 Subject: [PATCH] audio gain, the best update since the rds upgrade --- src/Makefile | 2 +- src/pifmrds/fm_mpx.c | 5 ++--- src/pifmrds/fm_mpx.h | 2 +- src/pifmrds/pi_fm_rds.cpp | 14 +++++++++----- src/pifmrds/rds_wav | Bin 48384 -> 0 bytes src/pift8/pift8 | Bin 0 -> 55528 bytes 6 files changed, 13 insertions(+), 10 deletions(-) delete mode 100755 src/pifmrds/rds_wav create mode 100755 src/pift8/pift8 diff --git a/src/Makefile b/src/Makefile index 51ad9bc..70b0068 100644 --- a/src/Makefile +++ b/src/Makefile @@ -62,7 +62,7 @@ LDFLAGS_Pissb = $(LDFLAGS) -lsndfile -lliquid $(CC) $(CFLAGS) -c -o pifmrds/waveforms.o pifmrds/waveforms.c # $(CC) $(CFLAGS) -c -o pifmrds/rds_wav.o pifmrds/rds_wav.c $(CC) $(CFLAGS) -c -o pifmrds/fm_mpx.o pifmrds/fm_mpx.c - $(CC) -o pifmrds/rds_wav pifmrds/rds_wav.o pifmrds/rds.o pifmrds/waveforms.o pifmrds/fm_mpx.o -lm -lsndfile + #$(CC) -o pifmrds/rds_wav pifmrds/rds_wav.o pifmrds/rds.o pifmrds/waveforms.o pifmrds/fm_mpx.o -lm -lsndfile $(CXX) $(CXXFLAGS) -Wno-write-strings -o ../pifmrds pifmrds/rds.o pifmrds/waveforms.o pifmrds/pi_fm_rds.cpp pifmrds/fm_mpx.o pifmrds/control_pipe.o -lm -lsndfile -lrt -lpthread -L/opt/vc/lib -lrpitx ../rpitx: rpitxv1/rpitx.cpp diff --git a/src/pifmrds/fm_mpx.c b/src/pifmrds/fm_mpx.c index 2f41caf..598b628 100644 --- a/src/pifmrds/fm_mpx.c +++ b/src/pifmrds/fm_mpx.c @@ -81,7 +81,7 @@ float *alloc_empty_buffer(size_t length) { } -int fm_mpx_open(char *filename, size_t len, int raw, double preemphasis, int rawSampleRate, int rawChannels, float cutoff_freq) { +int fm_mpx_open(char *filename, size_t len, int raw, double preemphasis, int rawSampleRate, int rawChannels, float cutoff_freq, float gain) { length = len; raw_ = raw; @@ -131,7 +131,6 @@ int fm_mpx_open(char *filename, size_t len, int raw, double preemphasis, int raw // Create the low-pass FIR filter, with pre-emphasis double window, firlowpass, firpreemph , sincpos; - double gain=FIR_PHASES/25.0; // Why??? Maybe gain adjustment for preemphais // IIR pre-emphasis filter // Reference material: http://jontio.zapto.org/hda1/preempiir.pdf @@ -166,7 +165,7 @@ int fm_mpx_open(char *filename, size_t len, int raw, double preemphasis, int raw } } - printf("Created low-pass FIR filter for audio channels, with cutoff at %.1f Hz\n", cutoff_freq); + printf("Created low-pass FIR filter for audio channels, with cutoff at %.1f Hz (gain: %.f\n", cutoff_freq, gain); if( 0 ) { diff --git a/src/pifmrds/fm_mpx.h b/src/pifmrds/fm_mpx.h index 7825375..211b069 100644 --- a/src/pifmrds/fm_mpx.h +++ b/src/pifmrds/fm_mpx.h @@ -21,6 +21,6 @@ along with this program. If not, see . */ -extern int fm_mpx_open(char *filename, size_t len, int raw, double preemphasis, int rawSampleRate, int rawChannels, float cutoff_freq); +extern int fm_mpx_open(char *filename, size_t len, int raw, double preemphasis, int rawSampleRate, int rawChannels, float cutoff_freq, float gain); extern int fm_mpx_get_samples(float *mpx_buffer, int drds); extern int fm_mpx_close(); diff --git a/src/pifmrds/pi_fm_rds.cpp b/src/pifmrds/pi_fm_rds.cpp index 96e87cf..e0bda2a 100644 --- a/src/pifmrds/pi_fm_rds.cpp +++ b/src/pifmrds/pi_fm_rds.cpp @@ -87,7 +87,7 @@ static volatile void *map_peripheral(uint32_t base, uint32_t len) return vaddr; } -int tx(uint32_t carrier_freq, char *audio_file, uint16_t pi, char *ps, char *rt, float ppm, char *control_pipe, int pty, int *af_array, int raw, int drds, double preemp, int power, int rawSampleRate, int rawChannels, int deviation, int ta, int tp, float cutoff_freq) { +int tx(uint32_t carrier_freq, char *audio_file, uint16_t pi, char *ps, char *rt, float ppm, char *control_pipe, int pty, int *af_array, int raw, int drds, double preemp, int power, int rawSampleRate, int rawChannels, int deviation, int ta, int tp, float cutoff_freq, float gaim) { // Catch all signals possible - it is vital we kill the DMA engine // on process exit! for (int i = 0; i < 64; i++) { @@ -110,7 +110,7 @@ int tx(uint32_t carrier_freq, char *audio_file, uint16_t pi, char *ps, char *rt, int data_index = 0; // Initialize the baseband generator - if(fm_mpx_open(audio_file, DATA_SIZE, raw, preemp, rawSampleRate, rawChannels, cutoff_freq) < 0) return 1; + if(fm_mpx_open(audio_file, DATA_SIZE, raw, preemp, rawSampleRate, rawChannels, cutoff_freq, gaim) < 0) return 1; // Initialize the RDS modulator char myps[9] = {0}; @@ -222,6 +222,7 @@ int main(int argc, char **argv) { int raw = 0; int drds = 0; int power = 7; + float gain = 1; int rawSampleRate = 44100; int rawChannels = 2; double preemp = 50e-6; //eu @@ -298,9 +299,12 @@ int main(int argc, char **argv) { } else if(strcmp("-rawsamplerate", arg)==0 && param != NULL) { i++; rawSampleRate = atoi(param); - } else if(strcmp("-cutofffreq", arg)==0 && param != NULL) { + } else if(strcmp("-cutofffreq", arg)==0 && param != NULL) { + i++; + cutofffreq = atoi(param); + } else if(strcmp("-audiogain", arg)==0 && param != NULL) { i++; - cutofffreq = atoi(param); + gain = atoi(param); } else if(strcmp("-power", arg)==0 && param != NULL) { i++; int tpower = atoi(param); @@ -343,6 +347,6 @@ int main(int argc, char **argv) { alternative_freq[0] = af_size; int FifoSize=DATA_SIZE*2; fmmod=new ngfmdmasync(carrier_freq,228000,14,FifoSize, false, gpiopin); - int errcode = tx(carrier_freq, audio_file, pi, ps, rt, ppm, control_pipe, pty, alternative_freq, raw, drds, preemp, power, rawSampleRate, rawChannels, deviation, ta, tp, cutofffreq); + int errcode = tx(carrier_freq, audio_file, pi, ps, rt, ppm, control_pipe, pty, alternative_freq, raw, drds, preemp, power, rawSampleRate, rawChannels, deviation, ta, tp, cutofffreq, gain); terminate(errcode); } diff --git a/src/pifmrds/rds_wav b/src/pifmrds/rds_wav deleted file mode 100755 index 920b01d2183c6ff7c54ebeabd84dee958d73dcae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48384 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 diff --git a/src/pift8/pift8 b/src/pift8/pift8 new file mode 100755 index 0000000000000000000000000000000000000000..1407025528a0aa28ab7559460d2066043cd392ea GIT binary patch literal 55528 zcmeFa4Oo;_`agc=g|`89R8&ON2L(k19S{{sa}ZQi)Df^qZ3P8|M3@CMQa48-^Nl2> zva*=UEi-GWZ(DBJMrqs2TI+7^ZrfHn1CAOh*{<8VW%2)fo)>u-X}ACXdtLwQ_q(p9 zj_2I>ea?OEbD#U%=RW6oX4o_%Yo@_q5ZcEm;sl|6Jq;omdCDpLV-^9)LJ}dM4H1J$ zckZtfVt<`MPTPz^Fq!45LIfgb+ho*alF)!jqnkj>1)Ph1nFa!8A{}TsAyZ2R5mztd z6hM?!prxHzNJQAg3#UnMl`UaH5S9eKTbM&!o{7`l<>6 zUiV>puou~&>-#r@mz+SO{NqYXmX9kfOeifWTU(t_P_d?X<=D#dvExCK`v^x)9n6}) zNTgN`xN+;6y-$Bu@tbGrvRXg2jvcasaX=`yb%(1KYN9}7~b zToNJ-c~7K1NR+!D(f}mRR}|6^B<&-i5REh(X#~<}q%lYdNaK(ak&=+~AKHobnSjDX zq)AA(|M}sKpRVlv&m%R5H{bomTazX%c-^Zt#tBU^fm`Mm$S`n6knWbcZLzGL?4mm1!hJLs$7 zA4tj5{*m(bkyBZZH9p9%!+P4`f%?J`!^0~TlbwdHZ4D<6_8V>>IBJH3I86JOUgf_(+0GUghIRqASb+9 zSAq2(Lef5jKh^-`groiHzvl2CN8jl;-mm@WgSADZ>LbICPCuc2sILKj_0Ra#rytWktWUq9eF)#D z0muno@S~siqZ|GDyWOw;PyFit+mF7~5AN#+SNgU8haY_>;Bz|te&$CX?kC@ae)K>2 z!Sv1AhvT>UwSUx)e$)@1i8i~i7xBaPf7l6* zCRna0t`KEa&SeFKx5*4kDxDQ2WmRHL(V7)&(DjPa@=A15w5GDCN|cnZs45lfR?1aY z%5|J~h?TcjlvEW_KDk9@QPFBqu)MqiOej4>K(8ytjNwi_k>IKokcm(tp%n^#R@Ut4 z>C2MFj!za^v9mOOyn@WjTQ+`dvPjR%OPfA>St2%mwV0MYk021U($i6g8yFdvCnmN^2RJmv^^mNG}gm(Ls;E@X}%sF*ndtWxHY*e{s(f*zS8 z2&-leyV%GaGvQ($CqymtK?wDjBS6~49D!Cn^PxgCFdv1uojE3VKl2zN+{`0{IKbQ{ z#6jj`5oa(TCPWi+1e7l_M}T&Od2b<(GDon{%pCJ@oOypC-eHcQE!dv$`IADN4|ctF z&g@C>nLUlZo}S&F;7h;u9ex56`D`)A-8M^WmT{&4-j@OlAbmb^rIb2r`)0NG-^3}h0>fy4kd_h+} ztt)?`E1%MpPw2|Wb>*YF@{79iVO{xvuDoAYZqSu?>B_ab@?t`l?!#{rMhyi zuAHSSXXwgPbme50o7}C!<8C!uA35Daa(m4ZY)mBhqTG$X2;1%!lY56p*g&@>_`*b^ z50UTLEgc=_>yY9f6XFC+Fx=MY3zr&wCfjb0QQCVJC%4ui9pen2b#%0aqs}SRi9p*3 z)Dt4dOPWgSs)K+tNKx40U_cdvErUi%?%2Wt6~MI_8sPdH4FF02{3C)^LoWO66ldIk$zpJm5us)fJt* ztl(t@uW)Oq5ALun%r>`$GHgd%tsIXs`wO-W!r1outkyxYoDSeIHm?cu77m&bx`hk0 zeBI04S_oQ{EYpXwF3xpyzzd2td0gP%MW)%%8+7rvzs+lLnL>TFeM8ZYyEVoZ>dTna zh;fGc?8xJhPeE=&PI{tkuAHX;jst#*ink+=8rcXwgM2R2AYX6DB0+u$G8#l>E8JXU z499{wf(wf*1}_P1I8W?TtA{g|MJqQ5@e0e8XmhU+@3A}$<$F~8G+TO0GGNn}jSpR}DE9Z=~9Rr*1d{ut;TNF3jd$gis98<2Bt zU`@$uq>Ag%>h{{iAm9DrLhd^kwwbHiE&4c=XKwV3N4s3>AfE%}1oEmgnpG2vYfEfrc=w?XzifTXw;h z39Gx6{TV@bjc@c-j}P^cM!!e-v!I_u(6UtCY|k>+=0(U~i1FtEw*dK4LFe|vkqWkCA}-$Hki+e`np)H=wQhkjoD-CX$HI-l8E z=j#c%1afQSpo27+(=f^B-6=x9;>acMF3Zf ze#p~-93gQV=hgw;%JyUZ&{r(M?o?Rr3;PgZ&N17t%sDm*vExJ{*P5~yT)$6f@!;c9#d1WgqmAV>_TKw`;8>#k#u5Qo;|;x88gzT;ThN;(+X=`Pd{VIi z)N9l5zX5&~`lkF5*!M4Of9)KidAktnGcGmVG?)3l3TQ?=oUtGIIW;CYjPg;W%Yfe@ z9x1%iAmWiykTQ`RNK289_hS2Z?2IS!0XvbZk^JM6Fsl+Xa6aLGBEvAZaZ;lkCj5O8U9sqqScGNg0T(jG5!*;^|YSi zd_L?p#a8Px7#yurM6D10(qclHzB`6}*y2NAIOHr7z)ve{{N9B3v#XU3i!0GR73Z^_=Q%9d;9P$6Z*%@Ezb20G{OaU8p!809uNz0k(@i zM!Q=BtZwf-^ntbHHG@C#b%29WCe37MZtVe>GTG2>>vET;Pj7c?80g_hcBIVwT3;df z8^dePp27S@IU0O+YXjnVw>KaMdssgDf;@*IYk*l6F*0o&P{MtFYI**j|Pmu3z z?0+`kf+YHdP96OYv|oZo{oaQ)`W*UkU~YnuVvq`N!QDX~V8+H$z3ijSwnuPgsD}@M z?+`8z`{dk3fo{W`I$-8~W46r4GdCOVanFD74Cv58b`e)pHKii`%bsdO)$e*&+cOzGx zPA>RqZ$RQ!c?@@v2ij}0YVyglLdKtgF3Tend8h~KKsemqKZEBH>9rros&B*03Kz}yqk!z0p>GP?3Q{tYpX4oBdPan*6hqIlJ{2u`CaL8p6c6lzi zzJ&0!euH_{bYe8`Jqu6LWuAzW476bd&pr*{7Yx2;tkW>|CBb$j%mwzaU@O)xV98qB z5(aut_6s}Z8epFsuOZ*<&9q`&LuMn+cP8-T_)VyrDf_5g?yp{4%~+;`Yaz z0-8Z`_l`i{)Cpq&VaK|)y1gHvE&HIIQAbwPy^OJ$ZPJ|)&C;F0cr2JH0+5X6OX&%p zhoSGi#t=`O>k*%keM6>w#vo6K#621EK&I2!4|36WA=X$v)_bw5))xX=0P1M#LpbYv zL71a_%vC0A2Xf<#V=p&44t_Jrwplyb%pMHaV^Cmpo!_U{?IQs464rPSk4@{^9ue5X)p9>#s*|F&WRPUJDjshd=^ zWzM$6&GnG0-WNWs-d75H*>5s=f=0jD8k(5iVi>ih_0p__&tw$Icj(XYN z_nqE=A`bOU;?nd7!7wk44@eSw(r{eGT z1R6cGA@ZZ`aJ&(3o_O2e#oev*TGWXy+oXTn9=vB^ol#Px_Z z?s9vlV9na=;VU4U(^1>C7_-$RZEi^cJ%2}2d)h-y?fua&*Y_W3BktN3 zoP)gIq8zxU7GrjM`_QJ*u69T5MS~T31y0&i>x)UM^}Q7+&QDqYw~N7&vW`g`xg)Oq zogJ^Wiyd_r{{?zdXyZlVA49xmR@+|=66d$AKXs9O4U)T+{(n{Ek#_bMk#yV_5*gk8 zM&!}NAvYpQ5(wj606X_1h>-2MV| zDkU}eN}C&G8{Atw+(Y|W9OJ?o+$F~!+Yxt$i2(EonH)^L&Qr5?Pghne6VoL}cV3p-$c9Ov8XkF-Atn;3z<&Mtnr{cW6S-=6bw zyI4|paU1aAV{$HRz3uJxyVp+y?d5j!hPsQl!ydR^Ilt3&x-p5Hysvk3q*50K*EXDg zv%LoA-7OE|ED{B|S%0EhpXH}eh7q(C!afKG!&YF=u#X%$mVv!QhBf!|ZG%mI5mM={Vr((6MI&u-!E5KTzwT(`oKF1@dZNxLyFACop{qBx$a8Gfje~v)cg8zT zz+Uxx)8r7*77lxz;=nVN1)ckY6?-3JZUgKf9KP)ib-i#;VC!;{9 zx7F7CsV~|7NWh(9VQZr2Q(sd4r@rydPkjl}r@pbaPkrMA=nGyyW5hmfa&7SjyXw7o zY-2Gv>dsAS{?z9ZjlQe-?|UWq)ro+G*zJizc>>B2$di$WBX?6ayW+pTMVWJ!!Z?Ak zIe4($L%{zNdNUexTc??G`(hurd}q#WZN*$(0zL}$xIeM(F4S!Ut{%FqMT$Y1f^--c zgN(ZvV?9jYX?J@cWS$Qni+n%qAyC2`(iWg2?%jWY|6xBI7j=SrTde&*LZ+P7P>h?h zIx!!GXv;F&zJ)eIA%*L>lH%YDyhb| zgY$>7R%dbe=2k;$O$&7$9l5!c`j&dvDCaZCb0_LsZTI;WXVl8|*jAceBcDsOGcEVe zlcr{`{o$r|){k@YdB)AH5us@pLUyLK<8i4ae09Ucc^eup&VRV^B4a?|IE6hXr*+oD zf$bmR{D4P{7W$~O8{nUIj%+WLR zA331CBj%0PUL)RYjgEAC-=z-V3n(XT@}%*&_ZILN}JzsdH_*f0rwsC*X>Xb(q>cmQ+FHK^Gd_r(; z%MIuk^0({d{{VKum?j8gp#8*xmk&5RvGo|Nk9o$TjlTYyGR^I+yZB4@zkbt%>u!E7 zO;d7Pnvyr!zw0H$=`7qmU~`ezjos~y6DNIvjBVgAa6fH1X*%w;?`&%ChdxF>(|9p_ zL&L?<(2IUPWQI!vN5Kvq7OF&UkMl?Dbt0UILi$4fojNsDC@^UwI63xe|7Ody=)!G|I79%xzn} zX2&8=csd4Alo~yLmoHc0Qh=VV9Pw?Qd%G_aIx>jGtwF1|wbvgC8ZvW3V-KvwA)M0)>{+z?{)hu;v%+2H zGa?39hxm@`EDHWVjQj6yoE0%{L;dU)j@uw^Y2_Ux?m{tt*{zhx|8ZHw!o-K{w*NmL@Rc{zrZ}`huJFTqf{fk^z&7q6`q^>Vzz19Bt zDH(Rvj#cr(-hqKQ=HR*VY#i2+7a~tait|4o!$xtZY57PrdnaICqA;%h>k*qlZ*Rlr z(dGlNmV!dJw$nGCG&Xz3pdQBV6_VS_wHq-e{lW;~da*6)(;vRQ;V9y`0qwKEgLf*{ z)WG(jx!c-juEseabXz<5XN20?141R4FUNuy+gmS--iB7ej7{Yo{*_*ih5yGa*Mu%rV&)4^M?oM+eC<=2^(X zF`737wgWUco!#c#`D&iR_;|!+ZLbG zy2U4-+neisHM~p0`y`hzjx8f=yx~~;Q*8Tvn@4T&hGC7Qpj?W%4@Nl|Wn1%p-*=Ob zwf3BP3}?74@*NKCgtoz$(k#{ant2|x;||A(d*A%J7OQk0VzY_zp13%C>wRmebS1(?{ENY5qmE0b0q6t z?3KGcbHIzV29-u!3}_iD-lfCG0e_>4FV*4WflpEKc{;oe_#_pdp~EKwAFtwVI(!Q7 zBUF5p4nGBWNyP{2@KVHHU!;n^jOT+Kn=C)@;VRyv!^Z*NQ^lXq;p2f1R`Ex4cq{rf zs`vvsd^qsoIHNXHHToKI8-2q@!WJZB%fG%-bXlvb8-coCs(7ak9|in*6~7etASe7A zaFpK+-ltU>pO0RBsPSU3N(%$+QX|+ToRuQ{A((n&r3OH#7_bKWfk89yj{g-0ROy--w%AI ziq8W685O?`c!!G51^(wMz6$s}6~7etMirkAe7=e=1pYx4p9OreiZ2CzuZm9r-l^iN zfUi^WF~C==_>I8dt>Ue~yHtEF@S9cqRbwO0gUWb!0lz`Tp98*L#Ww)IR>hwJexHip z4}7_bZwB72;tv2{qT&w&e^A9A27ZN#-v@k?ihmLKTUC55@JCeqQQ&V@@lN2IRs3<_ z7pnNBz`vv7PXIqx#b*M4QpKMFeuj!q2L2-z{|WHZRJ;VdN5!88ezJ-W1OA+fzX1Gr z6@LZKA}^`<%fKh7_|w2&QSn!SAF1L`0$<--(Q`xeUSG6|KMK4}#Yd^Q!@%XKxTUDu zU&ZeOK3~Nb0&i9EwZIpv_)_34D&7gaS;YsaxP0J(Rh&?94&cI6+&BMJ*1H`ztBU(d z#WBuq2JSfe__7<^g>G>avp-PKeEkOKbh>1ss0DZBV`1kZed2(&-GmSB|tFDLmA5QF~Uzduhbv z@_kJ`VmPZ{j9BLj!#D)a+I)t|vx#=zh&PM#_2{3mIOE;G+djS6A8X4l9`W&9at3GX z`qcjIoTqT!o2v0>5YE}gopl$Z(Egp(O*q#zUVMACayG@C+2TyR6U4g^K7-Zs?~JD} zsd0XZeG0}9hs5WIl;7ZhT_7gqS($ex2HOlio5A~tyX#Zo^QI#49Xh;H-UcRZa0zV% zNF6vYabAP-v0fR&I`O>e4a{jDWp2ZMi@Qvud(Uk1+CAK~JiQ6BG4@#sjo3*ntnKE_{kJ#Ob_ZKjxa4UR<{C)(^o6xDI&-d_t1<%}geu8nUcgA?W z34OJGlz-eSfd2&JqwnWEBcCnsoasMaf$<8Am%dONFYjsm>q!ChjgD5F=Pi-}ej%{Q zJDO#*m(X5{RodTsX1hn)j98p{dtg)-orOSW)R!^(%~tAb6!e92`*nTU!P9O;QhC;& z+3c~aJnNzR{ejz+d3Ye+WANh{9eLOj0bRzySIGVW{e%O?oju=~;&b@6uJh)S0fVJA-Tbz7XYaq^)#FIw`d0-DBzCZAIJ^-4_ z$8~Ooe8(Uk=QjiWvwm=Njc*d#2@@w2Q^KS6ti+_XeYlVzI!b3v7OIT=PjE*Cy8_pQmzN+9VgwtS%qcoke&~!j^u* zcY-4M+>!4RPUG`*2kufKqXGA82q!Fju0eV4#PgI0XI+bXA#`#t&NVLHy(sUW1my2M zYj(_N34;8FlHcH6t3_UOew>fzSUy)bz-IAy!%~R0g$0PmY?JVQ1a(s*Ka&Z-`B&KP z_L0X||KR(pi@dn+kDME-+|5>_Z;ts3(AZ~qBAz3L_HCu@Yj;UplXw^**Ylws-+_rh zUG{Uu(dgTpT;mO})p&W{C$CTZ>iE-7fzEZzb6&hXKziWL{ai_Q_a7{O(SW$KAU3jT(;?_bgBFT~9-e z$Ax#=OoshuH(T*uo1xj;C)$NE;CVQolU{n{^!q1HoG{~^Q_3|&-A{(VU&SKv9ckD= z8ytKazADugfrRI?ZFpYO)(;8mqK&?d-z&gZjoP4xHY}62o=C%y!jM9dEJ(OZYYRpS zLc)IA7Jy_%G9ej}*e7%=w=+m?FMWeHmzkIgzRySf%=`!5w~_EX2J0pT?~?Gji$u8B;J4vM-($Pk%v|%cZ&knTyhJ&^X8!y*0``Zs2p|7KV z75RAI2J;}`Q+baVjdxtf;l6J(Xr}1>XNTC$Ex7-d?XP#to51Zl>x6v>huhnbzsq+& z#u|z_hktG5eOBLOx0kqmu!R8N>9aYH`|_1%JM^`bL$fadU%L-71tTwj%=ngl3%|2L zJA4gygPJ`GTedv+)H&uWvJd<>=F}309CL07L(XUNwYvE@jc2u*4qE=+(Z=UOUt@ia zLS68%V7%}3K$+w2iyZG*MN;>aCr78h579OObl5^9=alrhI{I%x*FVes4f@6RZQ9~+ z$ou35Mel5LBiA|d|M|89HirENx`1EBewMB1LvkOh#ydq@!Z-h(YmfJm8{w?u@Oc&HJ8h)n*<@Qabc}t^_m7>JZ^rr5A=jUz)8T0J@i*uJG}Z4b&+X!&4+%+IYqY&O>@l>T zGr0F;&iNp|r)rbk*(2?gHc5N5S{0kz2b-wIo<%#Quh;ZR`7~SPb6np4U(>x4YZqe* zOhY^fzaMCC@Qj#N<2Biy@|aN`{BYyNAjN=K9#pRZt^V0X4?e}~5&PR~r=bo>7 z<>6g>yvqsM8IxT3QhBb&XBOJCEqq^OvG&Xh_VaN(bj4U+o0HG*JyJd+2nG*6%hl@* ztCb)7VH{Gv?zK>{BaAT`>&9SBYcVWR;vGY@V*gw(zl996QQCR1qsI3(VRbzTJZp&H z{*5_(L#^jfW4&;+J?dB2I7O-Zl8UE3$-}Jj;M|An=KdLeC)Uv@Khr`CXupJmmDt}) zQ1`TbV?O*i^v<>L5a$VFaf!RI9^UdkjXoNJf;`8k!Dm;F^zfNX1I|?j>)oEmL5s#Z z;2O~T)Brvk(ya&DdY9+hSPNVOcR?|KyvuwHIzIFrZ2KYFUO-!6lSDA)oZo*H zLeXvbD%?X7CmPRE*8*@)k??sQaCzX*x{L`q*ZfW&-;u<=;e}2P$?pPs9y!fB7PgH? z8{CJq@L8J4cJJ9Ro># zJ#{|5m$h8&53%km;kZYth3*-D$Dpo39nU@JTTjC{5tEtZ-)<6x=H^_;!~Q7~zXwdY z*tY?);f|zLcn}9z>wJ_UQzt_NWZ=7CY2PD*e$QLuCqpmvkG%pH=;r2={Rd zCeKqc&I!2v;=gtHOyK#O3LNiJq$s502)wTQqc*a$jf9xrUGf_8$GCFuKw@BXGp&!dw;EdCiyO3E)eNlGK)n&j21HS)<{mI5S#DVW%0pCu%Slc?G*Xw6+?`YBJ z=Z4|8XvV@Gn-YAY3GbCDdlK#f=i>R*65nv#dsIqaoMG8$8;B^{c!LD~_?|Oy@^{|Ahvk0Yfiv>Q^j9GmLnv|!a`t6K9bEmjvD{n5 zMF5AhYg>e0pO-LKR`q+&H5jYWR^u`8u1<1!SXcY*KE~@A2wnrBH;(y9_XLo24drBiEOV^*-qpvfL!I%ifU%SXur@|v{m`d}LnO?NwAovMdE(eZP?z(-ak5Mv z&|l;x{PqBGY|B15eyiF)b-;2q>K;Y^^u7KI;pK zbG_8vOEx7B120XlFfZIw4Dto3W8obYzh@kw&7%#!bAWfsDka#ZZ3*-_+*4_L{S0}r z9_1vzmq<%h^Z|cmAx!8G3G3cnPa1UVr|OynW>Eh^AeBm;M3k{2j6Fl{Otyu-98?Uc?hx{ zYvuRhhhr|tcbJ+-Bag@LIb>UL*Nb^*RPCoJX|8uT=DR6riT8;Kip*?}{vf}?N2YOo zVm!o=Cvhy-a6Ka@{|v~=K8#k_CHfeo^nv^GP#^DessAi>Y*~G9Hb5D6<`L2#5UU@< z_d2oeFh8{EER?wxV!o$dreD3QcwX2YKW)Cro6ko-g`R?-7uqN7SHC`~uPESgoN42n z4n}>$UYMedtrxpb567{1yS)Sq5W1c%Q)fq;n0iKbE;JdDpx6I(UxQ(H)NPiP_PyD|@7x-t-=C!|5YM@z&N&w> zb8c9k4Bg$|jZd+{r$iuWze`}p8na`KEyZuM$iMe9LHWHO2Y#EyE(ZB7<9Ral55J`T zb_C`&#DL%OQRx@_=$Nlo1LzSd{j?vQ_pASg?Og4v@c%?dH(_pRJ8`NF#UuY{IDf;4 zzdf<%9MAEvm6j&!G1>RgAJFgk?>lzQH^9$HkUIc;Sx1lOc;F8rH>z^HqLYI*#`;0Z znBU`=OdvJRSYN$-}*BA!I}UvaVC;#z7Ijk9I{Q&)xmt&7hwF%S5dXh2S*^1X zb#77Xgrg3B%ZqjTqE3ohCl7TTY8@?>U>(fIE0feZ$*40+t)s0?)`4zc@wY1+K`k6p zGWtvA{9)bIU{C3ccX-}Xe7?R8VDl3y?-$Xya^~yL7di|I_gmymGiaiYVV$^!7-en(yV?f&&l^)d%eGupg zDm}a#I_#irno1ArhOWgaTt|qVJ|3smHFQ&#x}q&`Eor*a{IeFLmnJnL9-HgsZ>*`~ zh+GQX9<Iw$Hdsf~^{)EiH_txCV&xZ)5DHjnS`-&99&C+TeQ^UHZ|t ziPh^A_7RTwNz)&En5^Hs)NzNazK607hhAR7_+G;J?wnGCd-WQe?-*~sex@eH<9z~& zW#X`>w2>F>qC(}R`9qD@uVGKWMl7!9rMJQQJB7Fx=@i!C9^@Y(-;3OXyaBmpqj88K z;t)f`Tk$)A=##(QHS0XTOWx^!F?W#yv80RkhB>C+r7xq+aEx51f8lcs%oTlUIN(33 zF#RTDJK8<=`&Ss>sB7R5d9DUejTigp7)GLh?e`5?m+vcH(=q5H)YzVD3UNmp&Rwn1 zIvnkc@jCmZ{ZJFtO%w7ad-zXzyxL%lLS zq`x;{9n$yHp1A%c%rks#qy}@|zeJ4J86zt7*;ciQk2OAVlCmFad~nw$?-N`z;3?Zz zyjBN(P&rOdok?_W93;LzZ=p@8`ADKuJK~LM_+|RU)AZirYn96 z`hJ1_3^ekgEop6Eh+cB-{(*Id<9!#c4t1lCNpQb$h<7L)FVErd4~G~h=*P|Y=_>A8 z2H_b#*CEdXTrB#>O?lcbtf)ZgKZ(pQa{cb)4|hTe9t zEMd--Ge4e3GnU3&>&O0m{KkO?&Py^so`EqRJLt=0dr|$)58-1+Tg-{fXEDmqja;U@ z8h^_B|CPVQwmRGSA>%`RZy@$0o(qDI2jFfXP}WVh7xJYN4pQO&CYS#l%Jz-9OH%EJ zen_+5`6^CyBeOQY-SSh{OUe&uugxdF+sfZw=2*3RC$0y^GqhX!k=__5eHg|VNjrma zDmISw%)0(Qfo&)|>{yOL{B^C#uB{{f?lb*1ZIp37b$7jpga7>u&yVy|T0BRYIG5z1>a{QWG$}SO-$%=LYT6p@ZvF8+5$#Tx@^b9lAILia zGQv(HY5Tl?W=81_!%JFcH z7%Q;d_vs`|?Thu4cs0Exj5@)%5zD;7_#xN|U5G)x8_y}eUfcUiWg}W8AE3R@!svxVA`R zJC0+Vx^|W!_xCTS5l?9Pp?`xN;Jt=WUk})vwrd?*HVAwS`xK6^TNO5!N1|bzd^%S((OpNw~=!^2bJ>?YCb{D5ueC- z#4K_SS>+tE$vJc==do(uN6q8Z+^FXGUVvN=zDCY59yv!Qe^T);?o`DBr00;9Amt#z zF2&6wmA^}eqOjpl^jMrFE2~nZgxE^UqRN6*MX4%6T9U9vnpadw+^tIzR!TD~ihjDb zsBFa@fSi)kxdwT;RK9X0{&WzEl~QGCISUoHqG|E1k_GM8DD9=Ha;d7KpsaFDNtG0r zI9^&&P=P;*gunhY$^y98Cn51;VDitL~6;kH@09Nt|G_N%Jz- zkBYZI26Qap4;ZajO=+Z(GW=btfj&XK9g?Dpjs6ESJ|+oa^8i55SLhOo> zV_BhlI{%E7JcCmH((2f1r7C1AD=V*(oCOt?McUj)gGY9{G*wdja}=ytT~sI)7E~3a zN}$EslB$`{%$W;imlah48(RoFEr6|*6;)%Xkk%q{tD|LkXOziPoLdcOkt%d{L8Ws! z{_xcuQUU(r75-Y)imJ60MHW%Gra*GcPL|eILOT*CBuCn; z89C@%E-cHLy?BNq$n>=0k?j+t^P$Bb9l~z=gS5`{P%h#3_7QmdZxh>2magqa$p|ZSmt-MHA!W~_! zA;l(-O_1y& z$T?SKO6&%g)D3QYS6te%uJXvRB9G*(D1s(cM~Qx9T2kj&WLT4J*8J?*=~8-bmQ0sm z9#dmeswD{`iklpZuo3vvEF$NYoNn++8^?_7*@&6^_+bu!pM4!(X_J{WF}b^bX6HD* zx1XEFXLLiei1f61w(EH*{eYHuJq>Nr9ZA>Yl{OhUvu!i3lN;*@c*k{kwT)wTx3bN0 zK(y~^Gs^+duA^DREQ)p=Ue#O9yl!X~u^{*R_2x+LzK!GN?(j-KIa#woynaq|=5;qt zwaq*SjO6+@x#{zBug5EGa%ZG>JD%K(@7G&yM)!Kl&6zPj=eqvYerC^`k$oKvel;!o zdu6-ndt`Gg%F4OkK9qj2_Wb!xQ$Mobg$*TsUt7|yw=auGyJ1I z8O*WfWf02?xe^D0-}L{)4}UU~ZE_qkryK`-8lh_p&_4Y?wP)X~EDIqw)}#P|JRt@( z!HxDm3`<_$8XM*+7fy@91Ud$v%>TqBZBZVZW~ZmYyMo1R8O+JeQ8}plXR0(G3w8zm zp6v39f~q2Er5u()qqECamZy@o5`P|6J+er#rG@e)C>Na0%Be))ATd>mf3V53ue|cg z6^tfIOV`RLAPKTcW#x#I6r?;~j?z+TW=XY_q3pXd4xyx6*CB5r7BLSo8}?CI?O8ap zF#gc?{b)%~Ww5E#kT+v+TjeZak5X|#CHr1cx*CE1wJkd?IX=l2KRzjbd@{l#zq-!b z*L10ym=vFw5}$071F8R3cYJ)}Uo8rqV}(-&gbRfuR9Fsi*(tSytE)r#`+s#QGr-ZWxVy{>y5Xv9%)iBDLO8!H-%W#lfwx)8GYK92L*j(VxCgZ?b$pgo=GZB`M zBLBJ-CFQ8INItKu!5IRTC7E7;&Ax)k+*oWbrXqw^86i zxp_A+d_i@|xOFR*L4V`$cbqBb54l5-Y>7$ZlP64^lrlMOdV0o;nX@uy&zYMwZ~g+u z!t9*fMK|4?cgx~231i3MW$hnS7ybSamXxov9(aF$?;>LczCE73SYjI-u923B@fm5b zFoE1A#^<5E{J|L^I~!@zc+&W>J*E#q_d_LV*vaf|VrksAxGkGJ^B=d~|6$WR$2=`T`%WkJyf|{( zoX^GWOZNw#>p9}n=Wa@LH67_~+%@Lk4@4*5-5lY5clglXSpK&3Cr?Q0W(}z^x+{hl zo*(1tIQm=Hdo^iae>3X^&&sDp_uIWU_VL$O4G_m;CT{=kuIJzCyW%ldkB-WQ@ZUf7 zKXao-iheI{v#luI`QY~16`oNC_xG53Zt%+7?MCx%UtTzH-A&Q2E*Rnp`D>p)Cw|=?y7h0XU75R&O}#wrwe|yT-`KZQ4R5!< zwDw;&onPj8#{0nW+TT{K{b|P2?lF#@bDJ+LUNh#epNivEhjRXGj9AydWTLp|mB_w- z9bf<2s)!Go*QR8wN*!4pe_ZP03GAqOY{oI?grC1L!ga$W=<@{hdF(6cp*f53BS`P< zPs*I$e00?1BHR84?%ZBrv5#2s+?v1bT-x&Ls7%+)zbAfi`esvBM0lEO+6y1t^~~o@ zZ;uW9#`D?TnM32^`%V6-`*F|JKcD#fl#;I>eD$$3>C%YsS)b1iJ9xV4gXRot@4SeC z<@de+XM+^H``F;iufNv9aUJ>Y%a?4okNUgJF9ZqI?Q-mzQX^leSqb!7BZ*IL&X$p<3vtHph% zzHnaLxj!s7Y4QGkHDy9f-0Q3O{kNyzzjVjB{MTRj;H_u87-P^ko;$r;Y;V<^IC1l- zCYO8VZ^vEy#k>C;QP?N{)!`M3kIp)=EbI9D(r179>l42|9d^qv^B=bVMV9}}XYapj z%75t8Z5Nk0H^o_gdDZUQ6LtHR*t-+g{A`M}ApGMk(+?h5^IqiyY3EMI`ctb;Weon8 z(=)6lYX6u08&*AQe#sSmL(T4%=W>tTb2dWUx@Yy8KMxIFxcPurTKUW!r(SsU%$fT_ zeEIin&MZ!-+L7{U@hk2l9~i?fl^h#gk@~#-^7z4PX7&&I{O0Vc{56l?a3JPaw-k*3 z-G0}T6OSIk+*JL+gEJ(pPl0jTTiV_ zf9`&1M8^4N&u9E<=Ff&sZ_eNK&ds;X{pOdqmgHlt8%fWV;O5KHK=FsVn+Ue?}y zVg`@t8$P;U+>qG*C^(V{n3zo0I_2jDJlG|37t|=>b{uK8yYuDXgeaHF@ z8-I4^CfDXIHMMtby?fjC9Xof`-Lt#?-aUI8?z{hieGfkL@cu_0ZFE2O_!9?y{^U~! zpFZ@=;b-xkp`kY{S(^V~fHdXS$~_`5V(L%UKOlmlZ(NqYTLcfBmUC-fbFv(uN<*{dj z$If!z{-o#=lXc5aD|YuCF|WAl2@yVS=F%NM7e?EhpSs+lU&8#HwRb$we_ZOiO$UT^ z&xn-629uz@I3s=-WD+WwT zUv~I85jkq!nz{yI95ia`jg@x|ic7)Vh(3vvHr72Q0;3m|R_(_(=w>b|+5Bk8#A!8q zAI9G)&scNEbHdcaHhMCog~E=Z8hV*x5VwJuR%`vbJo0 zNSGpqWESrfA#sau+xmd$l{#fk`TbAy8NHx>&pt75MB0k=n8wj_Hy=98z0sO5d*JvR zqf_S_;uDNPQ%!*r&BJX0J^BTwEC{jBu=JfC8Z#v)B1dHnnmluGVw!2h{D6_!W0Pi&Po6VrR%U#9=9rB62I&T4;4HIsVo+Lo@Q~3V z{fAomWQ7jM4vU)FBY8p3r18BL=JXysrEj!7JaTrwVQ~?I<_(;bI()+P7+Xf{*tsJT z#*LgjV^qqG;fWK*CQnP4Id{--hoRRHV}`>NGu|9EK454{V0dg$Tz2r386lR$(D=z= zBX8&tF{x+2H0!MSy@zD=8R+OcHK+fGc>_iz1x2O~mKH|G&F(YI)?>6iAacyO8JQC& z%}ls4!!j+s=k(0}Q|1gGxxg^iZitv}447#enr2Q+HNYWENe`0d2HUbjhL5t0yfL)r z)Ua7|dJLE!I($+u>w=&VYwwBE`Xo*6J7iqA-O(>|kTxf%&%Dr-8+wkMXpNn2iJH`F%FNyav%`lB4NK1$FxN3ix-nwL+`j#04Vy4^ z_}FpLH)O?)$r&|zTH@TC@Oazk#K}Sg1qKEN;XnC*4N!6!r~DH{OrZL&+(P|Fu8DtS zx{CWh?s=O1VZ-L8CRZ(O|NF|xTRJw?&Uo0+)YOEpei{0_W7>wtd{;vn%*T6*lReGy zx3YUq*%bP)KIz*Z{$MUmAmV3m3=rC^-wTLhIIRV<{cMa_4 zInak@%Jkz#vDAFYD2mM&jHudVc*iKt8QJ39V9Ndr7u(j$eH@hgcsEeS-$nepMwXx1 zESHC~e9$GA9cOqLG?kWWN7I!QLW48mb`8_<8PLF}ifF>-x*JXY3;!e8mL znX@1!e#^I$SC|!WgxMxikk=Z}chBe9_4n%e`}D8JUv+hCGJwYg^po*j$EFDA9p7o* zv=n(3au0F`a`z6UUc^r7{-CQEIonks&jsCFr@#_&%#ADVo{mj@wI%sh1N6z}q zgwg&A^Fsz#)$Wc>Q&8^;a?&p&C;e2t0$)Ym^qj$UU{A*;8|uY0D11-d4;cYpLf&+^ zhfCVWc86Rk4=U}Qa(>8l5c%QF@48YRR`^BjSNI%$RDpxtsQ--Fbr5+B_!S;f@XRH^ zQO_v&{AU&Z2cARzY@q8%lhV%#E^8u(EIKWgAd4g9EqA2sl!27c7Qj~e(<1OGQ`U{^2v-a>>y z6e8z2H;#`zkxx?d8OZsrc}kc;@SS$yG>C!7u0CfFgOKB$d;SpOP-;vKZ83Z4iH-cX%a=us3_uBd4yY!-oZ{G`n+b6+y>G2x@0^b=D zNARm~EY~CFJM?^izAqB{{jQ^<{1SeIrUN;7;CEcgU4Z}Jeu5#p_Q}9F|8GwFt({}h z#$=e4o}Mbj$*)$I6qHGcNn?}7+7c3z$Kb7l#8E0N(#E1eK~cf-5@CozF<_zy3=B4e z7%av<=Dvn-LqEd+Q-oolA<`IS7u0@I3MAL{&?1isyZ59gmBlWY-+ohUHBQK8t60?V&#$abv2v_ky-FU&VT z>MzBLeLXc;wszUx6?#v(UNG!mfqTjMg`FBqi^k7f*J&`V7I&xh8cgd|)(vx$Y{kmD zQD9m<>{_)&leRjrF8DDC{@60_@idsL1HZ|84dypVIzJ|PmFnS0bw(7NS$x^SHKff4 zd!R-LOUMm?xjr?02&{hAKc(tNgSGK;#geY+2fuzV!&U48lG5Veh_kFaa>UgAd3G}wUg$o>j`Qu*`{ z4i;2clULHwSwCI}XX{|Cex8m_{e7a&C-uel^vlYphbYp)TKjD}`UcRipgmjQ*S%!@ z(=RKZaB(*Z8f<`d_V`o<%@$lxIf^-I+#AFNe7Pw{GtxF13m(no`?PMj}INy z(aQig14bs(x1(^iNrM&r5mr7CvcBqd`r`PH_`#Y#;0{On0o5OHeNf-Wb@lgwHQ_Aa zHGP|{T7Ny{`c@rGe*1JV`E~kxWqmq(cWs~1rxRxTs{=Y=*}ky%E1w?XDHIDC3jm?X zb3{jHeZ~q}{Xe5f7~l1~R^Owevp?|*t$tt8t`&jS?4!0)Ln`a*v|sy_ff`*I-w8i` zPVu9kitJiHd6x!TWqqFWqi-Cn(G`8y>tM1|M}N8VufF|-*}yV^r+ZQekNs02A58M8K0r{GV>|1U?$W`e+sAdKXX#+l!zOg4i;0~u>7JBMnEb7i zJ7LnBbuj54>0r{WQ#$LD9;1Uv&zstn?$p7g7f{jd%ued(;O^kN-MdP-(jdX^5B>9f1i z?K+tBPjoPT)9l(ui$^>F*o!K9zl z!KCM9b@oSku@08o>tMOP4wl=`^J}kzNx!0l+1@(8vp(rA9ZY(?4kkT#L1%r^B^^xq zM>?4FD>|6;(~hp~uj*i1H}j+SzvL$tcD5(KOMdXF-5Oo7uPc7^>THePLrmj>(+&LX=LDLI5nDN{t9n7ujvJR$ey`qEdfUg3kSXw+MHh1>V@w;^L z%lg!fm#{k*OyrNUeh%nh(l6(A($l&bzx+86@v;3uzxq-^XM57^I+*+- zR(7RF>ENA^Py1;8Yom_N_EGg(dnJC!T%*B?Kj3d(C?92fS$_25GL5dxN2v~O@av!b zUC{BP{SnsN-z6PP`@5`zX@6IAFzxTE4wgfuEuH*me`XzQ2OJETVrljlrlWUvo?N;U zjpUDVp44Er=XkXH0fF1C$H7>GmD?`0DKhH633Tm#zyNFc6$NQh_#1FPKz<$-*3OUG z{RVIGNY4$^9azIREYfo%?G(VDj4!nDN{`$Uzvt)hzEH z^(y^1VC}>H{s`Es>ca|tp8%#mcY((CX8{M_W)Mv(d=)Uy2Qexf0mI^X1YawW>yHJ@ z_3dk; zsn}z0*vn&pqoNEVS*1S)q9&-MW(g@bT=-o!zUQ zSLPw@inJ(gshvhGN-Bs8YN~{g_z&A5RMe(PK%t>|kP_1-ty79=!QendaZ|T-TmR9| z_dI6Kj8y1Bvva@q{Lb_DIKOl5+@GHFDiRe#TbU}aE0&A?gWzzU^6vZImwXs3f4Ju9&w)cyd%NK8F~29d zR{2kWwf_k6{KukS8u9z3iSpk9-(-BD{NIDM9}N6@3%rYdgz+C?UbNpj=G%KO_y*$* z^EnOPco=#2<2eZqN&P)DfvezKzjr9nnZ5YeQF+D_>iYzEY&>B3_hEc5faCsr6|DW^ zOVp?Ncm=HUf29ZSdsp(RuutmG|A4h03gdYYem?W-%r|mglcP0`Qils zmnZNRSm&LHG2?qE$-pJ-&)2}J|FAwk%`SpW|@~?yC ze_rwB-vDcUeA45e;fPuL!)H8x1g!N96JhJ01uM?Jrb+xbPWgEJtK{oEDagm;;E*&Q zJK(3Q#Mt%y{rE)wr@%TNx(cnv|9S9rB9T%iv?jNAh$Bd>H+C($m`qH28yW zdHe`R=C_gmz)yp{3g^M9f5{!GL#_5$Tfh%t4{uw1fAUfA)%;NMF^_*A+}Ih(u+^c46;Bp>>{xAuRxJpB#wf6V^sipO69Yd?O};}^jpX*}Ntzq!YH z>gVHi@MwL0DEW7=&NEhh|KEeW-Nb%{{u~D%fuCoo%gPHlB-MWo9M)5<_jPc*UjHWe zHu}2{t;&BI9P8s}z}Kfs<%{Uj*yCgMYUC_rYJl-aYH-{}p_T{yyaK5gr*G z#vZ=_mi`|F>pbiSKL1zUBPEdPLw~^fzkc|?GAw-#j{T_vaO@vEHBtV?1b!Z@^U9!K z--$M^DK7tru@#WtQ)_(n($L|MgzZAw-1cxMk zoB?Y;a^3U03XbKYH$neL;ICodK0;Zw|HX;?7s0Xr_KgX9_Ltjm(W=oe~e>%Rhy z{l{zIBkX53$(KBT795i5|2kObZDBqBAz0@#SIE-Kr=vtBP$6XoVaj?1%}sc+}~UP7FwY$sQ23Da*H!r>7@jhbt1v(spAR~n|)Z+Cm9 zGT2Y5ZN;1;@>OB#-V}!T7`Y+vUgf|jOw>VASNtba8#J2-6p4_5vOh*@1H~1polauT zuNR3axH`SQT#mqI4Aw^=jjtbz?yrrm=N>bQ=eEjG73s{9v)G)e-Hy zGJa!adFvy(x7lA!=R0{;%`WA=%v9Ti3G5E4eV0`-CU0vfz}0ys(ZkDfuOT!VKK6Prdyk)i)7FWw; zpI=YYovfwcX&TpZTD~a3)-OT~F*fpx&35f1za=rn!U<8&Z`*)(Ow3YR&M#cJpqq1q zDN*Tks+RW@h74R56UeF5lmqdoUV^*q=lzpQXU{Gyt{5WSn6ywV6fHe5L&jbp?q-(Z5i~lMHsz$x_po)1jjJwU%Q$#iIvEpR#z66cyGK&!Qt%U6BsV)|-7|fRs0?8;@1(O$MIMs;bWJLC^Ht=3?IMm+dSRl{fWh)<4t9 z6|zPnKEGZHva>W@KB(83vU)tw+0Cp^)S7ZF8MFvZq6jF&`^)x*-J2P!WO>@vI^!o* z^S^Q$L9gX4L)1a65z@lN1%R`x9Q6B!yDPHc&K7HStO zt!h>yaL$^FY};0uuX!iv>D)|tBty~PboKDe!CAnl!US!tba$c~%s}8J8Z|ViaB-VRnd5|G<~yBYDmw$LT)pm%5`8LZ z&6%4ssT9U3WndRZ>0)xR-s$G8em$yK7OqZo&>-%!u8OFFU}$HNwKG{I5;kXpX!nFT z-I8#7mZs_6Qk%)`1xs*Zp!mcWv3-raHDU9tx=*QHEp&5pzHJ+vDe9@r$t8l#8XLaX zwG~EpFGWxQsIlUsHDlaF4u>(1s^fRzU07W&rrXt~*<~CCnKYx|qoz`;b%~ffX42B4 zG`O)xY_VXBCs zS(5iGPoq|ds!R_rOvoZD2hp%1GS4cMy_@$BN@Z)qhtepyw-M3Y@-7pF2(hS%#lvYI zpGdi(M0Or;V@zzV6xz;9Glr{uZEUq?&hDBv&CGnQrgazr*1Y72m}0|9<3~H!&{X#; zRu`*{tkN2Eg6DzPp>9WpuY@qWD7ygL@c};zwQamA6 z8mCq{w=TQ+an6u0I6XTiNWB`)`j`w^hr&7=axyeXIUVJV$E}3fW?A)ZNZxW4iICEw zNdzd1x#3##4pe@(M`!1d*;D;B`d`g+)^lsWoE;orVDGWENMsNM^u+tkPHcnF+`S|a z{hH|0*zs5de!}*sm72;ev|EOzneGBHkN_j;=Hx2s)nW23X_#a=addtC~vX6 zMFlw-4&_q0V#N1z-h<-jV!52@(gKv`JtFwJ$jgyh7O`lJL9=DrT{7)@WmlYZ4pCA- zV;7iMQH`x6dCyvWi2Ya%E1lYV)OzCV_-sXC!3`sFPT#ck&?0^g>#1KtW#ffrT)4+Q z6NIJOIfxnHxyUS(E4_oey^eH-d0+?DY_e%$*NV=Mq(m&!Ad1y)l?63V*k3iqRyhbZ z`=z|ygLA!XW`$jw)@av*vuD|0%=l=0QKtsIMwZ3)x^B%|L?KRxwW!FPJN8*yYsDhc z?x~GIZ+Fv1Zg(D0yyAr|#-K4hw&BsB?CLkIwcVLr=HZ0Z4Op7(XI1tYhRs8mgSqPN zo(=*;F98kPsn#XTw_%HoVMvEu^AmTXB?Di^fJGy6PK?>v-`6_RYZEgbqiiltO_(rs zQXXlIfZ=@>0w%xOjHgYF(CgS_%@V4=BJXGDM2ljkhn2PR?VM$-sdbhyIV)Rh?3=@J z1tw946-R4=7de12p3wPs%IS86g5`v`7s1Mc%PI$k8(L=7x+O^0nj7D+aoei7RNOgQn zBa=e!pxLi%^WE>d@7-|4qLFnwNr4FDSz)I&C~Ob%M(qQ6&EH~o{{bD3**v`E-K0=E zXi=a0?sr`d;p}^?1!KUF*UcKDcNd*TKPlMdydZZlDOi8K&~4kDdx1lQ0=LyqcbV7r zlR~!Z&b(YnciiPlhHL7tH1jHLx2ev?xNFYosS+piB9inJ<0QjD|~odZTl@69W_7BhufA;?{)nX1bUw< zB&xRQ3I6JxEM@6^ohzK5cDN4h>b^dEeDn^NuJs`e+Ay3qy-OqYDHKpHw9D(jN36W2M z?u%fxD>}V*aOac5p95LSK=&0#*ZFO}^}f!HKj67Cg?L$pz+qOQ@y~-!>T)%HR0^M8w9$%JD z^}o(X{ZoDRM;YMTzqWeXEtuN*2qd(LIw_N(!&+&h31i-hY@!#TENG0eJUVc*BJdU$tcz|ok gvK=emN~PQA3C|!x3ia_AWsL6l-=eP}le}>Gzfw