From 5d0b06155a2c29d6ef2ff9ff5c4f2a94158b89c0 Mon Sep 17 00:00:00 2001 From: "remi.greub" <remi.greub@hes-so.ch> Date: Thu, 10 Apr 2025 20:36:10 +0200 Subject: [PATCH] =?UTF-8?q?code=20fonctionnel=20(non=20structur=C3=A9)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + .vscode/settings.json | 7 + G17_bykes/.vscode/settings.json | 5 + G17_bykes/Makefile | 14 ++ G17_bykes/bykes | Bin 0 -> 177168 bytes G17_bykes/main.c | 329 ++++++++++++++++++++++++++++++++ 6 files changed, 356 insertions(+) create mode 100644 .gitignore create mode 100644 .vscode/settings.json create mode 100644 G17_bykes/.vscode/settings.json create mode 100644 G17_bykes/Makefile create mode 100755 G17_bykes/bykes create mode 100644 G17_bykes/main.c diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1530978 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.o \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..a2c02db --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,7 @@ +{ + "files.associations": { + "stdlib.h": "c", + "threads.h": "c", + "unistd.h": "c" + } +} \ No newline at end of file diff --git a/G17_bykes/.vscode/settings.json b/G17_bykes/.vscode/settings.json new file mode 100644 index 0000000..5a51a28 --- /dev/null +++ b/G17_bykes/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "files.associations": { + "threads.h": "c" + } +} \ No newline at end of file diff --git a/G17_bykes/Makefile b/G17_bykes/Makefile new file mode 100644 index 0000000..a12c3ef --- /dev/null +++ b/G17_bykes/Makefile @@ -0,0 +1,14 @@ +CC:=gcc +CFLAGS:=-Wall -Wextra -pedantic -g -fsanitize=address,undefined -fsanitize-recover=address +LDFLAGS:=-lpthread -lm +EXEC:=bykes +ARGS:=10 100 10 10 + +$(EXEC): main.c + $(CC) $(CFLAGS) $^ -o $(EXEC) $(LDFLAGS) + +clean: + rm -rf *.o $(EXEC) + +run: $(EXEC) + ./$< $(ARGS) diff --git a/G17_bykes/bykes b/G17_bykes/bykes new file mode 100755 index 0000000000000000000000000000000000000000..1fafd7cc7285dadb5a8a7f53b320f9d91b29224a GIT binary patch literal 177168 zcmb<-^>JfjWMqH=W(GS35HH~>M8p9?F-%y+1Z6QWI51c+@G>|ss4=KAurV+&urPqc zAkr}PF!}~m8;s_FC}UuT>XQI57#JAPX&I<G7!7h0NC-rO>;ti}VTEH5Q5el20O5o5 zv4WTvKm-E=0~%dh2oZ<T$ojzc1%OOoU|>L_Jyan2U^KEmP}m66K=cXppwbr}L-bWV zh0rj4px^@Ovw-Tefa-(M4j=`f@P^W`@C3OLge{=qiB20pt%1?#`ZA#U&}kQ_J{S$M z10)puv?K+@Mz;sXhuH(8VfF<;^@S8c!ULU70U6G~zyPB`c7TKepO&P6!Ue=821BEr zAqZ+8u6XzW^*4-$xQc;6KPNNE%tSvYMK>oiue3t9!op0~%tWs^U(X0^J;+@O3=9mQ zH0ACW%D}|HZ~!C*HI9L)0m6rw2a*$EU;w9kkb0~5WBawTKVJJ1KBd>xyU=2bnno~4 z4anUfJs>q8i$LZ<qZ-5o*~6g6zyQvppzvs5Yy^vg#Pk^$7%rxs%ViguC=3?FLVRFg zU=YG0zJ(FH_-h>MRhhA?|Bgfbavb6jIPA^Cp}qu%dQ~Ru?s3DRejX0<&)`shABXw` z9QOXjA)bOG+!o+azYT}IDmcvX!69ym!(Wv+#Fyi6j~fp6xZqG<j6?kn9O|#&5U;{v zjz13fgK`D7bbc0x`LA$@TjB`MARO-D$DzIfhxwCnxc?mvaZvdHDtFMc@Fg7X0hJ}# z)ax)XFklns#NkdYW(Ec&bW0f+7<d^O7z7!l86M<AN-0no238gypPrka7hhbGSX2@p z&k*k!;v1imT9lfeSzMA@6yocglb@Fwl9-f}3X#Ju6Q5X|m=~X!ms!FP4`COj7UUO| z#OLHErdY)1<tHZP7nLw1mgHwL<R<3i<R>#ELnu_`#U=SgsU~ps#i_XvLkmhWic%9( z;**O~6H8LD*n!XkQ<{~Zna2P!ASJc9q$t0VA+0Dim7$<0Gp{5KW<YUCVsdso#6j@} zFwy*ilFa<P_>|O=)Z`LS$RuaSmlmhSC#IF87R48(mXsDjOioWNDND>LO$A$1o|stz zW)$QXV+#dCxUULIONwE3mFB?$G(J5iKPfQ>E>o6TR19)PZf0?AVo7pFd~!x=a&~-~ z1xzazjipJTXvj#+OUX$E2Yq~IURh#JW=cH7o$>J~D)RF4@=9}Z;uDL~8PKE>Q&Qsd z%TkNda`Ma3<x(=sic)iNN*9+V;gl=L&&&e_A}*s#DhpEM;XW=iWGF~2D#|Znh=)c) zaz=K1T4H7n11y%45{rs5Q;Xukp<h~@lbTupm&+|JNv(*7ML$djL^LNqIh!FqJ|{CN z8Dw-(NqlZ%W*%HC%vf-WE-p&UOJRtQPp(LePs_|p%*m`ug{y=Z2UZ8O0j3$d&82x@ zyK^#=KzRn#Qn6sj$xO-xvCKd$a1?=fh9F)th-Jp$?&Im?9B-s&0%sW`m_~Z0puEh; z0D??l62wBq%nVEnAUP%mX0QqtFv-XO5{IY+$%9lt<RM}Z5+n+;0o0yhW|+s!0BZ&_ zh-7B+f_fG!pkiAlPGbYLo;E@GrBa!k3=B*RdqE8(Q2zniPKLEJJsd$L9|MB|nz+L? zh<zGp;#yGk25908Q1u)WAm+i$hw&dwL={(n_76Uwi$nD*Ov0`{0f%@2ns@@#oCRp& zFnb^15dVNC4l_pqQ~@zCFu?o;GbaIucmbL?%$x;i;xKa_;1K_SCJr-4VG54$!69CN zCcXd`K4{`__uvr!fF=$zM`0=s_uvpOKof_Vvj9yT=AI2`;t!zie}E<qQ?D=$yL$}K z#9`(npozoGS%5=)1DZI@oCj#)Fmn{9<8Tj}ILw>`G;x?Y1!&?h^$XC%Vd@{?5LcLi z-8~67#24TYe}F^$1G+dgpDWD7VJ{Bx1vtbvpo>Gze}FCyEoT&F;jkBncmcXN)cghL z;!yJ+;1E}sjon@YbaANp3FzWb^B3R{-+(R-HRl1kIMf`4IoREkfJ3|hT^wru0(5bx z`44c2E6l}iuK~I^)cgc=aj5wVaEL#^A+9hFyS)iG#0${G6QJ%{fF=&lUpT}+pozoG zQJ9azJvhV{;1GX+LtJ42cJmF;#9`%a0-89?Uj^vm(DHTxx;QjmHlT|`)jvQNhpPX8 zE)G?%un>p)(Z!+a6VSz><`<xgL)9-p7l*3ffG!SI{{USas{RAII8?pDA{_2V7l*1( zKo^IaUw|$SRlfjT9IAc;x;Rw*19Wky`VZ*hQ1uFnakw8{9I8G6T^wqD0lGLWAEApw z)jz-?uCN5VdlGPn7ods5()j{3aacNkfJ6KPx;WJR3QKXg2Z#6q9O4_$#9{7yfF=%e z=Ld9gn0uDta1Rdg0(5bxISbImq4BZ-T^y?Z0lGL;y~1)F?!h5mfG!R-e*wBU)cglH z#1&Rxx7Pq&9BO_7x;WJQ1vtbX;1K_SCJu{7g_StmgDwtp54t$aJvhW4;1K_SCJuMc zDje=X7l*kAT^!~f9O4_$#i8arKo^Ia^8sBPs$O9=c6TP=5MO{pd;_{T)cgnN;!yV} ztifR~4)FpsaacGnKof`M-v>CvKcI_4-Knq^hkI~{FTf$b0Zkm{&If4XFn21f!)~tu zx;WIG3FzX`@LYgH`~eQ}59s1h^A*-(cTWNi@dY@<H=v6{&3}L{4t2l61|0U{5HCO% zhnl|tT^wru103QC8?oDKfF=%$#{@KSSUfJkA-(}!9O}*o=;Ba!Dr~~;o&+4?1!&?h zcP>B^hq?0s4)G7@;!t-gY{uap9O4Ubh;Kj>hq?0snmEjzAJD~N?g32*VjCC2A-({I z_y#m_xO>pV;qE~fhq-4fj_|=Dz5s{#26S<#`47;=Vd-QW4tsHk7odwn&0l~n4mJM) z4)G7@;!txGwqtjX0lGL;eFC~T)ZPU+#5bUeL(O@BE)F$EVFz~iB;XKVfJ1x(nm9b2 zpozoMiNa1C_TmsPKof_VzW_}fX8s0raacH@i^IZU7Y_H}5MO{pd;^*|%$*O=#9{9I zfG!Sor^0R=?!h6x0EhSnG;z3l(8S^HK^KR)XAchd;1FMcLwp08INUvG;xP9p?8RX( z4)FpsahUlF(8OWpKfocbun&j5IK&s=5PyI}`~#Xe%$*ARaoCGPd;t#e4QS#p^B<sz z!@@z~01kU`h!>!V!^~fRCJr<I0S@sGXyPz)6b|BW4-WAKIK(%gi$l}%19Wj{Iq(5p z9I9U75Dxd?5HCO%hnlkhT^wrf103QX(8ZzVC>+M&9vtEY=;Baw7NCp6+=D~>1G+fW z9EBq|+=D~B09_nv&H{9Cn0s)DD;&jcuK~I^)cgc=aj5wVaEL#^A^rhf96Ii#a14ig z(8ZzZ6VSz>?kPYQhpJzIE)G?{0bLxb{sFo;RQ(5Zaj1HQ<2c-pE)G?nfG!R-zW`kv zs(t~wI8^-xbaANq2k7EZ^&im1q3RV*;BY^hIBb3@0ZklMUM;{Oz5z`fX3hgNahN#@ zC$YOH0f%@2nmDXHT!1DHGk*h`INUvG;xP3Jr*OCjhxh^<;v3M!;r615!|gqd-ChGU zahN#?XyPz)7T^$nfJ6KPnm8;x6+jCGvGtE|h!>!V!^~NLCJuAw103QCXK{oBnm9Zh z(8OWpFTf%G0EhSoG;x^w70%&s51KgKJ!s-^_uvqJfJ6KPnmEjSh4a|mlYm2f0S@sE zXyP#cK0p(PxnJP|4tsHk7ods5%wK>e4l{oPnmEkA575M6>J={Ha1Rdg1vtbvpozoW z`2bBEX72|yahN+5F5z$w4)FpsahN#^(8OW(KENTaa2bcaIK&Ik#Nqa$iNo#1A^rhP z9A=Kf6&&utA-({I_y#m_c)XyA!`!KG6}!C#XyPz)641n9<}AP={s4!#!ZjTBqKU)p zMH7eFTYx4G3(o~;;xP3OaEL2h$Kf6{ahUlDXyP#Q7vK<ofJ6KPnmEkA3OBI3Cjp1} z0vzHS(8OWpKR^?Qx&H&2ILyBaH*vTJhxh^<;v3M!Vdg(T6NkA+;TCp#4ba44<|Lqr z!^~NLLwp08ILw>}XyPz)6mH{i51KeEoD<N*VdfN|iNow&fF=%8{{V;h2Q+b*ISO~M zyE6fYcmbL?%>4_{#9{8)fF=%8{{T%Krv3w(INY6gakvwQcmbL?%-#iP;xKzRpozom zeSjtoQ?GCjyL$}K#9{U(pozoGS%5=)1DZI@oCj#)FmpbjiNoBla38xn6L5$ZpozoG zS%4-Ev-bfG@egR?Fmn_h;BXHP@d7k)m^lm3#NqD2A^rhP92TAm53#$)08JdGJ^@V} zW^VzSINY6R;xP3OaEO0E6Nj0j@Cds*6L5$ZpozoWzW_}f?j9WCAJD{M<|sVI?j8d) zahUrP(8OW(F2Eta0bLy0zkYx&4(pGji$m2bJi*~kbaANq1axtz`330WQ1uJY#i8mq zpo>G*KR_3Us{ep44pp!46o>oK#i8mG(8ZzV7odwn)h|F7hpOLzE)G@y09_oa{sX!= zRK3D89PURKhpJCN7l)c(fG!SIzW`kvs(u5yI8^-ubaANq59s1h^$O2%xF1~{sy+c- z9BO_6x;Rw*0(5bx`VHvfQ1uVc#i8mQUSN0U0vzHDFR`mnz#)DBhq%Hk?B+D!5PyI} z+~GBLa~9wbXLy5MeF6^g131JL-eNbW0f+bl9O4e34R=_^a~9wbXLyg@-UJ-t2XKfh ze86r_0}k;AIK&-3VmD_24snK0*wrWC5I=xJT;Vfza~g1nKfodG@CCa$3vh@te8sLl z0f+bj9O4S!u$$9>L;L{_afk2N%~^m$oZ$y{^$9q{58x12_=(+|1{~rKaELqn!fwt2 z9O4YWv8zwOA$|adxWXUo<}~0Ce}F^W;V*V`7T^$P_=jD60uJ#5IK&nHV>hP(hxh{= z;tt@Q{h0f(7T^%yfF`~GIzROQO&r!vb6|w*&qd$o6@WuL0f%@24)F#Y;uCO)FF+HA z)uTJm#1q0G;d=m09OkbFXyUN?`v;nMA=DfOChXy$fG!TLr!COLo1o@6pozoWlYk}; zYp+zGiBE=_(|{%pGiL#sIINwt15JDh)SLro;xKa_pozoUXFt%yw?fTfV8#(X=;F}! zmIa#lF{n8XXyP#UB%q1I+M^X{;@6?(G@yyY%vpdY4r>SRKofrfHRk}DILw>}XyUN; z_YXAjpHOocSa5_7x;V5wZGk4v6%I+y4rt;q_avZ+!}=Q)XyVdPa~jaZVdgAA6NmM4 zcA$ytK+QRTCJr;_0h&0hfAs@R+!ksM11pa3K^KSimn_i4{h;PJpozoWlYk};>rYmo ziN{0DX+RT)nX>>*9M+HBfhJx6HRk}DILw>}XyUMb@((oeMyNRqY&gOPT^!mUwm=h~ z1U1J2O&sQ)1T^sn(Efh~n)qU<ISpvyFmo25iNnSncA$xGftqswO&n&<12l2ic*hSk z@uN_47}#-y54t$iUlwTM*P!M&pozoWlYk};8^@_Y6MqghrvXhIX3hdM@deOvpB-r8 zKcMCuKof_V^8ig8Ha_(OO`H>SP!4G8ItPyMK^KR*#{x}U3Tlo6nmEio325REpyO^8 zXyV#Xa~jaZVdgAA6NioW?LZT^ftqswO&n&<12pjjsC#~(iTgs$VE`Rqf~6m)fG!R- z#{x|}4r-1AnmEio325T5@zV-4@qDN`4QS#pa~7b9!^UTKpoup?%{hQ34m0NgnmBA+ z_y?N!M5s9oTsYDXx;S+F*8)v^5!4(9G;x@F641n9<J}c#;+vu7G@yyY%vpdY4jX6R zfhK+gYR&;PahN#|(8OWm_&?CZuR_gX;KmU?=;F}vdJ8o1XHat-(8OWxNk9{a%}-RI ziGPQh(|{%pGiL#sIBZ^I2bwrXB&5A@08Jcb&I2^@1n7Lp4>WN}s5uNgIKl^A9BPgQ znz$C!90xRUn0pe?#9{MH6=>qtP;(m4#9`(vKof_}Z|y)6_ko&o08Jcb&I2@Y*u2^g zH1SxdISjlw!UtU(I!|VSCY}d1#{o?o=AHyJaoBue1)6w0)SL!1ahN#^(8OW$kvq`D zCqT_PfF=$z=K-2HY##Inn)pJfIShO_!UtU(I^Su5CcX)3jsu!F%smNc;;{MM3N-P< zP;(m4#9`(vKof_}EAK!PzXCPq0Gc?=oCj#)uzBkrXyQ+y<}mQ%2p@ED=)AQBn)o-U zISy#zF!v;&iNogOE6~K*qafu*1DZI@oCRp&uyp`C(8ML6<{Us1hne#LO*{d*KHvwM zxF*yb1_2!5gDws=#{x~<3Tlo6nmEio325T5^%E6n;@(hm8qmaH<}5%HhppS#fhHaU zHRk}DILw>}XyUMSAwST>bD`!i2;vAIbaCkV4+}K$I;c4gXyP#UB%q1I*1J@oiT6Xz zX+RT)nX>>*9JZcj2f8@aoC9d$FmoQDiNn_G{6G`m2sMX62uJv!i$mAzSfGg?f|}!i zCJu8?0-88%9a06F_+_X$4QS#pa~7b9!`3<NKofrgHRk}DILw>}XyOUbbx}Xi#J@t# zVGza<KIr05b1cxr*`gukh69>7%smNc;;?mN6=>q(P;(m4#9`(vKof_pOWT1at^qaY z0Gc?=oCj#)uyt=g(8MjF<}irh2p@ED=z2H{G;uGeISy#zF!v;&i9dj@=c_;ykA|Al zfF=$zX91cxY#reaH1Qm$IS0_hVdgwQ6HkD;=Led2Ez}$aQ5@leE)F%v0!_RRYK{Y% zILti>XyOl`>ntnK#OFiJX+RT)nX>>*d;!#)9cbbkpynJv6Nj1e08KmrYR(Td@q<uv z7{qXd54t$i91Aq@OHgwh(8OWxNk9{at&6Qd6MqafrvXhIX3hdMaoD=s9cbcTpynJv z6Nj1e08Kmrx=!~8nmB6=q}*T-#}Pj0;!txe(8R@{<~X2<!`zdACJtN2T!AL84mGC% zO&n&<0yJ^h`sp2L;ucVI4xov{%z1z&o&a4x{R2(h6KW2F1di}Q7l)c-fhHaWHOB!> z9Oj+`G;!Ga@(MKZY^XU6XyPz)7NCj4*0t|I6R&}qa{x^oX3hgN@dW64_aA8Dy-;%) zByoffx;WGv3pDY0P;(s6#9{79Kof`U2dF?3Uk^2>0Zklc&H^-X*gk|EXyON;<{Us1 zhne#LO&qq*;Rl-dMW{IpQaHi~T^zd4!2(VE5!4(9G;x@F641n9`!_1k#6LsLX+RT) znX>>*d;xU7#||`cmRLx+aR5ymX3hgN@dT(jKhVTQq2@41;|L#gai}>KXyR&6a~#mb zVeUyl6Nl}$sX!AqhnmxXCJr-a0h%~$KhF*{aSy0D2hhY}<~%?XPk`?8`GF=L2{ng7 z21odyi$l$^Koie`n&W^b4s%ZenmBA9R0W!NHPoC2G;x?Y3(&-2`>b}LiT6OwIe;b( zGv@)Ccmi}^)(<rCxlnT$WO0NKx;WGv3pDX{P;(s6#9{79Kof`UTdP15-w!pX0Zklc z&H^-X*uJ<OXyO;3<{Us1hne#LO&qrG?gyIqL#R0nayY^VT^zda&H_#R6Vx0BG;x@F z641mSK=%_?poufbLCTE=G;x?Y3(&-2`xtkiiHktZIe;b(Gv@)CcmmWtKhVTgq2@5i z;|L#gai}>KXyRs2a~#mbVeUyl6Mq2R=UIU!?hZAl0Zklc&H^-X*#6QTXyOr2a}J=1 z!_0YrCJx)z`U6co6KW2F0*>%O7l-=G0!_RMYK{Y%ILti>XyUMaxfN*Q-B5EH(8OWp zEI<>7?FZh0CO!vh&H*%Wm^ly7#9{l5f1ru4g_^^lh$DQ^#i9F+EzrdGLCtYM6NkAc z0ZkmXzq$fV{5;g01~hS)ISbIlVf(swpou?#nsWe69A?e~G;!E|@*im8AED+jDB%bn zbaCkZa0@hXrg%uX;eaL%b58=AIBfrX1)8`p)SL!1ahN#^(8OW;_IIF(t3b^;fF=$z z=K-2H?7V;<XyT?&a~PCygb%tnbpO8vnz$R(90xRUn0pe?#9`+nRG^86L(OSG6Nj0z z08Jcr{=yD4@eHUr2hhY}<~%?Xhn?^615LaVY7T=6j_^Sjho0|XfhOJsHOB!>9Oj+` zH1P+}b1N#)#AidzX+RT)nX>>*9Cj|o4m9yKP;(BTiNnl!fF_;*b<Ynp@x4%U7(f^C zV4HtO7l)c-fhK+qYK{Y%ILti>XyOl`=ZRFHiQk8s(|{%pGiL#sIP4sg9cbbopynJv z6Nj1e08Kmr>Yg8H;*1H9a)Ut)NBTh*hni!7CN2au#{o?o=AHyJaoD*q6=>qhP;(m4 z#9`(vKof_ZJF^2#+yrXQ0W@)#IS<gp6QJkO{6G_Tg_^^ljw5`~#i8a{poxb;&2c~z zhq)&KO&oTPPX(HII@Fv7G;x?Y3(&-2=LhXT6R&`pa{x^oX3hgN@dW7kK|j#MJE7(< zXy6DRbaALT7HHzLpyoKBiNoBJfF=$*cc}tRd^OaZ1~hS)ISbIlVdpySKoj2sHRk}D zILw>}XyOUb^PYa7iJyg<!=Q;He9*<A=2)PK--DXtfF=%ePXd}a>^!UrH1YRPa~jaZ zVdgAA6NjC{wF6C@ArVq;96%F?nezZmJOO$>*AFytL8v(lS~$W7T^wqT1)8`L)Eoyi zahQ7&(8OWqmsOyN8$-=$Kof_Vvj9yTc0Sq;G;tTGIS0_hVdgwQ6HkDioAv`uJQQjU zgEo%vK^KRbV}T}~1~tb4O&sQ)1T=Bj`EeC!;^k0t8qmaH<}5%Hhn-Ki15LaGYR&;P zahN#|(8Lp<=h^*06Q2n+hd~EN_@IkJ&9OieUj;SC0Zkm{o&+@U2hel<D$vAtL(OSG z6Nj0z08Jcrp5P8N@iS0!4xov{%z1z&o&a^v4>a++P;(e`afA=LIMf^qH1T&(a~#mb zVeUyl6Mq0bZ?OVR{6Ey31~hS)ISbIlVdp>YKob{8f|fsM;xKa_pou3y-SY!YToGyx zgC36XK^KRbV}T}a1U1J2O&sQ)1T=BjxtSGc;?7WW8qmaH<}5%Hhn?5C15G>xYR&;P zahN#|(8Lp<=XL%-6HkSj!=R5Ne9*<A=2)PKmqE>OKof_#Cjm|T0rWi63N-O{s5uR2 z;xKa-pozoIQQd(iJ_Bmb0W@)#IS<gp6QJ(-fhN8ZY7T<|j_^Sjhni!7CcX=5jsu!F z%smNc;t!zb&sLy`pN5*#fF=$zX91cx?A+TOXySLE<{Us1hne#LO&oTv?hiEaw@`B! z3~_`Hx;WHd7HH!CpyoKBiNoBJfF=$*7q|jVoIe>-ZZx2Y!^~NLCJsA~cn6xe0@R!X z=;F|Q(+|+ZVdowHKod8Fn!{j(BYe=sq30c2pou#{&2c~zhxsc3O&oT<a|N1sFw~p| zG;x?Y3(&-2=SS~A6HkGfa{x^oX3hgN@dW6((m&9|OQGg47~=>ZbaALT7HHyaP;(s6 z#9{79Kof_ZyIp}MJ{@XK1DZI@oCRp&u=Bompoy=5nsWe69A?e~H1P!JIp9Cg#CJl? zVKBiFKIr05b1cxrPeILbKof_#Cjm|T0rWid3N-QCP;(m4#9`(vKof_Z&%Ogq{0-Ec z18Cwfa~`0HCqUiv15Nxd)Eov=9N~j54mHODO`I<UQf@e)iNoBJfF=$**S-QxTpnsp z1DZI@oCRp&u=DhHpotqm%{hQ34m0Ngns@^AJpCVN;*L;r7|d{l54t$i91Aq@AgDPG zXyP#UB%q1I?jfi^6HkVk(|{%pGiL#sIP9K-9cbbuP;(BTiNnl!fF=&RU*QLucq`N# z26G(YgDwueN5KM3d>Ygo2Q+b*dlJyZVfRB+pouSsn$v(L4l`!~nmFuUiXCX;JD}zq zKof_V^8ig8cJIXxH1U&Aa~Ldegb%tn^xg{#H1S(da~#mbVeUyl6NlaBQGq7@8fs1h znmEjy1!&^1`$Bf0iT{C`a{x^oX3hgN@dW7oB0tc?c~c?f27@Jz@Ie=cnqz?`E(bNo z0Zkm{o&+>;*gY#1XyW=%a~jaZVdgAA6NlaJvI9-r0cy?xG;x?Y575M6_s9G|6Ay%% z!(fFYe9*<A_s3YEi6=qLaX=G?xhDZl9Cj~G1)6v<)SL!1ahN#^(8OW)?(9GlZ-JU~ z08Jcb&I2@Y*u6eK(8Q-g&0(;{5kBbR(0hF>(8QNP&2c~zhq)&KO&oS#Q3aa#cBnZG zXyPz)7NCj4?n&B#CVm2H&H*%Wm^ly7#1o+RC;dPZzX>&m!3Ib8po>Gzu|N}l1vSS3 zO&sQ)1T=Bj{ZbWZ;=iHhG@yyY%vpdY4!gf<2bwrf8l>DffF=$z=K-2{0`y+1A86vT zP;(e;afA=LIMf^qG;uwsISy#zF!v;&iNo&wsz4LBhnmxXCJr-a0h&1MzOfx>;sH=| z4xov{%z1z&4!h6n2by>y)Eovo9N~j54!zIJ0!_RKYK{Y%ILti>XyUMY+A7e*o1x}3 zpozoGS%4<K0D7<64m9y8P;(BTiNnl!fF_;*HRlJK_)@4j4E8v}2VER$js=?dHmErc zXyP#UB%q1I?%S(C6F&|$rvXhIX3hdM@deQP`F5a*-+-EP08Jcb&I2^@1gJSb(8OOt z&0%oB5kBbRP;)HM#D77}aX=G?xhDZl9Cklq1)4Z_I;7laKof_Vvj9yTcK_lIG;tZI zIS0_hVdgwQ6NlaJ_ybK`7itcJBaZMv7l+>OXn`hf2Q|k5O&sQ)1T=Bjy_FSc;{H%` z8qmaH<}5%Hhuw?015G>uYR&;PahN#|(8Lp<_h|k=6EB3C!{CG?e9*<A=2)PKH$lyD zKof_#Cjm_ycAsbkn)qa>ISpvyFmo25iNo$O-GL^)1ZvI!G;x?Y575LDp!b{pKoj2z zHHX0&NBE$NL(Q>36F&wu#{o?o=AHyJaoD}E6=>quq2@H8iNnlUfF=&Rk9G%|_zS2x z2hhY}<~%?XPk`P>`vXn<C)6AU7aZY(E)F%v0!^GN15$1{pozoWlYk};yT`WzO<Wpk zP6L`a%$x;i;;?&ycc6*uK+QRTCJr;_0h&1Me&Qc!;<iw87+i6L54t$?9%2hLaX+Xz z4rt;q_avZ+!|qqEKogILn$v(L4l`!~n)m|fJ<U7N#0#M296%F?nezZm9CmN?4>a*c zs5uO7IKl@_9Cp981)BIIs5uU3;xP9lpozoo)viDjUko*;0Zklc&H^-X*nQqR(8RYu z%{hQ34m0Ngx;XTH?jLC4N1^60xZ?;PG;!Gd<rZk-*P!M&pozoWlYk};yEnZ8P5e33 zoCY*;m^lm3#9{Zf??4m(0X63UnmEjy2k7F^``3S<iF0N`$_)k&9N~i|4!fV;0!>^B zYK{Y%ILti>XyOZ?_t{sViEBg6X+RT)nX>>*JOOIX4m5Eas5uAF#9`(<Ko^Ia^8-!X z7itcJCywwz6Mrxt5}p=l;&D)O9MHsJ?nyusUjQ|y0!=(0YEA>1ILw>{XyOS_b9SJK zH$crffF=$z=K;Dn)SMq^;uE3fFnHkzA2jg?^Pu5_CcX%2jsu!F%smNc;tQbWRG^7( zhMLoWCJr-a0h)LM)SMk?;zyw796%F?nezZmJOO%6<_|RSt59<oym5pNx;WH57HHy6 zpyoKBiNoBJfF}N6E+m{Q(8Rw&&1parhncegO?&~=oE>Q5Y*`TV51@&|%z1z&o&YuH z2b#Dz)EovM9N~j54mHODO<V(Njsu!F%smNc;t%FP++TqvZV5G~0Zklc&H^;?1yFN# zpox1y%{hQ34m0Ngns@@#oF8c7(NJ?3d~t*ix;WGv3pDW@s5uU3;xP9lpou@24GkYO z@mi=k4QS#pa~7b9FMyh}15LaSYR&;PahN#|(8Lp<=KMetpAR*M!4F6Hpo>Gzu|N~w z05!(}O&sQ)1T^snv!LOFCVmiVP6L`a%$x;i;tQbW>_8L01U2UXnmEjy2Wa96P;-8u zi9d##!{Co2e9*<A=2)PKe}S6gfF=%ePXe0wgPG9qK@(@qhKM(yiNnlUfF`~GYR(Qc zaWSYl2hhY}<~%?XPk@^915I2VY7RpHj_^Sjhni!7CT;;W#{o?o=AHyJ@dq;?;ZT7l z?g=%g0Zklc&H{9CXuY!oO*{%}&H*%Wm^ly7#1}x_^8-yh6KW1aAdc`s6HkDeV}T}K z1vSS3O&sQ)1axtzITdK)-B5EH(8OWpEI<=~FdY)kJJ7`EK+QRTCJr;_0h;&%s5w8- z#MeU2VF<zzK4{_zP;)HM#P>qYaX=G?xhDZ#9BNJln)q3$ISpvyFmo25i9eVI4Ieb| zyHIlupozoGd4MLq0BX(;H1W4ka~Ohggb$i{0@NG}H1WSsa~#mbVeUyl7l)ctfhNwI z1MzPInmEjy1!&?Arb5*3KoggRnsWe69A?e~H1P#cbAF(S>q5<82*D9PXyUMYb1cxr zZK38kpozoWlYl0k0Ci6Vnz#?toCY*;m^lm3#i8cxKogIFnsWe69A?e~H1P*hAmRK2 zO*{u`4nru8@Iez_05!(~O}qwbjsu!F%smNc;t5c5D$vAxpyo87iNnlUfF=&R7ikBY z_#CJ?2hhY}<~%?bhq~tnn)qs{ISgSq!Us+K!DL7{TcC;WhMMDmCJu8?0-E>&s5upA z;-{hJG@yyY%vpdYo&Ysx2b%b8s5uAF#9`(<Ko^Ia^8-!%HPjr2a2(--CjMX&G<?v+ ze?!f2Kof_#Cjm`-0o0rdG;!`+i1`g@;xKa-pou3y&Dnt_E)6y30Gc?=oCj#)3DA3j zexQkKL(O4`z!5&^;!yWkpov>S&2c~zhq)&KO&oTgL<O3-7u1{vG;x?Y3(&-2_gL&e z6OV$La{x^oX3hgNao9Z<KhVUppyn_{;s_r!aoBwu7HHy?P;(s6#9{79Kof`E=TU(s z-U&6Q0Zklc&H^-X*nJ^8(8Om#%{hQ34m0Ngx;XTHksoN{E1~8vMBxY@G;!E{Cl+Yp zJE7({pozoWlYk};yHBM8P5dO(oCY*;m^lm3#9{Zf>_8L02{q>cnmEjy2WaB3`(S>c ziNA!J!w`)le9**U_sv+KiT{L}<A5d(b58=AIP5-~3N&%fJZSlYCJr-a0h&1MzMLIs z;*wBv4xov{%z1z=4!vLJ2b#Dh)EtHw9N~i|4!iHi0!`c!YK{Y%ILti>XyUN@geuU) zJ)!0_pozoGS%4-EyRT>mns_ACoC9d$FmoQDiNo$g`hg~%2{nfy7DxD?iNo$&vOp8B zgqq`kCJu8?0-8ANKBo#a@lL2Y4QS#pa~7b9!|sdPfhIl^YR&;PahN#|(8ZzmOZ`9- zUkNpbAr43QpozooyRtwN-w8Fx0Zkm{o&+>;*nL_RXyPZK<}{#*!^~NLCJwu=YX_S6 zO{h5s(8OWpJU|nN-3RsqP5dR)9ENxt;e#d)yKl?_P5dX+90xRUn0pe?#9{ZDRiKG; z=0nRLG;x?Y3(&-2_oeMX6PJXVa{x^oX3hh2ap?VOKhVTAq2@3o;0PZyaoBxt7HHy@ zP;(s6#9{79Kof`ECs%<c?g=%g0Zklc&H^-X*nM?7(8MF5<{Us1hne#LO&oR~-VZeK zOsF{wi8#UsO&oULo&}nCCDa@TG;x@F641n9_xV+ziFZQHX+RT)nX>>*9Clye4m9zZ zP;(BTiNnl!fG!TbU+@Q-_)4fb3`sb`2TdGy-=PJX_)e%f4rt;q_avZ+!|qe8KodU+ zHKzeh9A?e}G;!E{jXTi9Z$iyEfF=$z=K-2H>^{gJXyPxS<}f7V2p=?Y*nN{0XyQMi z<~X2<!`zdACJwvLvI0$<vjAHDpozoGS%4-EyDxJGnz$s?oC9d$FmoQDi$m|%{DCH} z2{nfy1xNUxiNo&uv_KQLgqq`kCJu8?0-8ANKG6y^aZji@4QS#pa~7b9!|p5HfhHaa zHRk}DILw>}XyUN@P=BC_XF|<kNW~F8XyUN@RxQxPE1~8%pozoWlYk};yU(=(O}rCo zP6L`a%$x;i;;{Q-cc6*Sgqm{zO&n&<19Wld{jxvM#8*PiVMxOfK4{{w`))1J#CJl? zaX=G?xhDZl9Cn{>1)BIts5uR2;xKa-pozoo>)nASeiLfW0W@)#IS<gpVfO+5Kofrn zHHRS`NBE$L!|oflKokE7HOB!>9Oj+`G;!E{#uaGdoQ2Tx2TdGi&H^-X*nP=6(8ML7 z<{Us1hne#LT^xG9@((m|O{h5x892fRO&oULvjv*CCDa@TG;x@F641n9_eocviF-iJ zX+RT)nX>>*9Clyz4m9y_s5uAF#9`(<Kof`Ehy4RhJPm3NLne;!K@*4Fw{3wYUJ5nG z0Zkm{o&+>;*nQp=XyPqUa~jaZVdgAA7l*AsL=&G3HRk}DILw>}XyOl`^Nc^x#1}!$ zVaUP}KIr1maYzd^@r_V(9MHsJ?nyuscPNC|SAiye0BTMHnmEjy325T5`)g;Qi8nya zUw|gg02SYXCVmWR?*TM%n7tR!#9{a2-ar#?gqr^VP5eLs#J@k##7{x(Wyprequ;|T zfF=&Re^&xcya{Tr0-AUO)LsiT@iS0+9ni#K{tZAAhu!ZRfhOJzwKoAx+yQED1)BIJ zsJ#tn;xKzBpozoo51xT0-U79E0h%}i)ZQIv;`gEU9zYX^*?R#^9CknP4K(pqsJ#!+ z#1%py^}-J{@wZTW8FH}4uL7EQ0`&X}3pDXBP;(s6#9{7FKodU@3~^5dn)olMISpvy zFmo25i$m|X-GL^~SOhWu0Gc?=oCj#)3!wh`fhNuYHHRS=NBE$LHv~cKwLlZ+gPP-j zCJu8?0-E>(sCz2V#6_UyG@yyY%vpdg9td&I4m5Eos5uAF#9`(<z#;wvT^wo-LmrOs zK@(p9O@|g};%ZQH9MHsJ?nyusUl0oMR|T55F4UX`G;x?Y3(&=(@wEd@+yrXQ0W@)# zIS<gp7eK@L2b#DQ)EtI<9N~j54)vD>nz#eh90xRUn0pe?#1mlo3r*Y|YEA>1ILw>{ zXyOlG;e#gb2Q}vanmEiHfgVWwfJjNu{jX4bqaP%~z`(}9z@P^e15po<#05YCQ2YW( zToWn=qCOyrYl8%!_y>}>4pa<8J%GBCm4SglA0z<96Z#<TVP{}qfUqDEGmyj~F$WP} zfF#Zg5dxDdki=QQA`oH&k~qk2h$sWY4kU3<Sir;&Ac=$A1QS1jBo3>CL2?(6#5q9% zP<#VPoC_)jq8=cLbAtq+_yv+U4^#|9eLxcD1qnd$4<vCus2G@nhCj&d{9pkH!GR<$ z2oVC40!ZRQU=au*fg~;r5dxD6Na7-35eT7yBrXaO0+R+v;$mPC2w{OFE)Ed_lMYDY z5?~Ps;ejNMoSp-a#HAog!DIxIxHMP<LL?xG%Rq#{WCoJBELa3W6d;MqL4?3$1(LWt zSOh{eAc-qLgurA6lDHyR1VT(e5?6u<fyo(2;>utV2(bW3Tm>QoCRZSdtAa%!#0DgB zHHZ+H+<_#n4i<qB2av=yAVOgB1d_NGSOh{`KoZx52#u1XAut*OqaiRF0;3@?8Umvs zFd72GFa$pH%l-0be#7C>&H8XZ1A|BFffA<w7d)Dea2y8v_P=S=J_d&WsxkW*82IHK z7(nVXKr$~M{r~?zZ337N>hQh1gy4fZdM^(l_@EBn%S{MAsAKnX5rPlu(7l|5;Db7H zFPjj2P$%eR5rPluxV=n5@If86mq7?VsH67M3Bd<-&|VrL_@Iv2OC<y!)FFE*gy4fZ zVlSBxd{77M<)?pe|AIQ!FCQWJppMwfO9(!w1NQO|f)DC=z1)Q0gF0L<7a{ndj@HXb z2tKHT^|A@U2X(Ao79sec4%N#f1RvCqdKrY^gE~+zoe+Fb$LXaJf)DC2y;MT*K^>)+ zLI^&ngY=RK!3TAWUVi!u_dlpZ^zspc59$cLyoBI`IzTTEA^4z<&&y2+KB&X<auI?L z>gc?jgy4fZI4_$Jd{D>cWf6i8>d?GQg7g2Y^6h0{NaL4xVF0Jk|Ek+|qw?3G@t2|T z=b`bZq4E3B_-$zXIy8P68b1$>pN7VdL*s{`@%_;FZfJZvG`<-cUk{D1hQ^me<BOs3 z`Ox@mX#9V>P{aEh8vh*{{}~$p9vc4|8vh&`{}>v79~yrf8h;%ce;FEo9vXid8ov*X z--gDoL*tjB@D1O3c3zD0=zQeS{NzJGh^yfN!;>Dpwx<{v82*b!?_yy1lBUNm-vTOC z89aJzJ!dg8c=WP5fhfx#C88ePtaiH~MKkCB2mJC4Accpav`4S4BuHVesSt?L{O8g6 z!Q<dNdyj)Zm^~Ped0hNgBI41_$_q7s<NpIlK7r{6mER4vH$l54OSMBinr#p5WME+M z=zLnj<I!#VY$pT5i<y7^|9_G4|NsAEtQ%)CGBCy-=9gzc*8j5n|Ns9WgF-zzpE`y* zh6H;wzscyV?eXX=ZD_9TVX0$luI*v1ll16ieNzcC{rHQJzyJS(k05_JSB!zdquaH? zqc?!Vqxr{=A~7(p^O#33D=1%ibRK`f_V@pPuxM`theziPkJj5I+#a2Wnjf)yv|cI^ z@&GHIxEo@$<-h;`L5eyLc^rJj?9q6Lq2Yf$|2CnPOC=m2!+wGdllEx6UCQs#%X&+I zkpUzODi1w6@4wLc^Z$RR>jsE*0RkS)KRzHkDI01_@gKO81VFZ7brQ_|%Rp9k-tfTX zq%@FxH{40fp-$=t33uLqG5t5lNn4;!lJIE$@dDXN5l|;R_zicG1WqTx+%F6^8@H1# zgZ&40QVG;ae?Y>W_g}DpowNh$Bn6M=9}ke7<O+3?FTzO*IGqG@e*@TT+)i=;$s<C^ z5$dE&kZ|Yy7lpq-p|oc|D0{pR`ThTYx9b*<86F28FoUAE803;p*8}@OjfWSh5Z;My z*9{&s_JM>zYU;tFtQs>I8Nhn?fht;%L>gGa^}>Eo&HX|H!n<+Ybppt)m!PYbe7aRX zP6uh5;4#CaSLP^4!l(0*M=y(%N9RqC){_-79+nr1Wjs0$`E)+>=w)3D%8{MNUuggO z|Nk|shvlK7Cq9giyIuD*zhH9gJW?pr?YhTf#x77(3X;4x9fKtAS-&938=l~pk@7$< z)KpWj6R`!Q1OL=x9-Rl9AF?+eWVX1-KlhO0Cs@vy|LgyMmriA$ZdFy1{1OheHU1~E zUr^#3*^wDg<rBa@x#iL8#NyHX>ras=D1UU`^XO#-m9L<1=ll8pzele#3rGSjFXQva z^`HO$A9n_|G8wvECo~^m>^uw#&j}tgz_(^V!gJA4NO*dIl1=P{Zr2Ict{eD!j6tPG zx2(!EP^o}a(ja?49qNJeAm?Gt*7#g!3345%Nen9XZg@1;-e7>1X2^ChL+!{0+0pHK z1EqMp0r7%7RL%46;EaF6qxk>_i9xmI2Sn>}2T&%!>!Oc4Apv$1s>P!>fW@Qv#~*OM zhq?${&vYJt5sGjTsgWlIHU78*3pnwE{Ej1x?n7PV4%On(i&S1iUGy8O=I}R&M?IPk z2#^>?9Z=77hwkYN5b(g`pmR{mwn24}XpuZrTX*P|PQ3OkgWBT<)!@+^z~j;U;|p?B zfGToO9y;|E?r|Ox-O~>Zv+mFhodG=HveM(=16Gi!Dj=y&*1r=$W!?sGF$)&wfru}K ziYH(2=)B-@@BxztBZvZ*#4kY(>SSe_#K>^mbqc7Ud|AxMz~IxZx*n`+3e2>_cneS^ zXc)Zuf>P)}YxNc`Q2sss!spxn|GPj*dmqRmQ2pNZ<^O-5ZdGPd?E1C?lJx7a+EoFy z>%rIm|G@<|+%CB<ps<$}huVc68lIg;JUVZA^|C1WbUs9>BRs&x;C`sJ>{zW$gj$>V z_5XjkjXYmL_1+YCnKuQc%zJkL;*YSe|NnQ!PU&`?0xt6!|A91Z={y86rk8cu1W4%J z1G&Gs_5=gCr4#_Q@CQh=JM@M}x9bUy&Wj$sqWi5G7$AB(kH0wi>Hq)M10|r=o?QXN zzO>J<*4}y^28QFVGeD8?@-RCCL$~V;4@j^u9)PEj!yetC7m%t>1yI$g;L+`S0hE9{ z&w2E+KG_a2`OPO->_716cD>-ico=83^AV~=66E|&P_@J1(fsQNQnkYm4e#lnz|{_^ zWog1^P%!T3bmkz}SLdKk6eHeOx1m~`KZBYDAYX}iH2->o<g1@h6$d|peI)`4LlP>} zu1_Fe?dfzDA=g(spbl{ONOW8sg=)zK#RNF61U#C5eL(WnW2lPPAHcpMwM^gg5#*~4 zoz4Q}`f3r>0a+i2_SJf*mg%6FAi3SZ2zK&}PG)jlTmZFx$9tk(Tnp9m6cozfctCHe z&4#K-eh-cZQfqsi4@gZl@`{2;s0$vxBidVOP%V6LZ=olz7O0AzcVKUkn!H-y{r}(X zEYNwl`88vqBuW{)3feWg^zQ$E$Id%1s^0$p-+9=z^$Gu!Lyf-~7#JG(ryO)_{_~%I z$^pd_oEKUSlt_3cU-3vj3~BUft$~z$i$MBr%yj(z$FcJYxk=*gHi%(M-=c?|Yv)tP z=A(>-Ql802kXp?;P}hsR|Nq~$^9|0z_6XGAHK6bVCmbG+=3ifsGVmj)3az)`5GJ*4 z^7$>OuaeB;(Ji~96VwQSB_2d$gHZLl0P2DjZ(yDWb-`fc0*9C(bs*O}r0R9;TTrn9 zvx>ATs}O3PCEPl2mF3f`0?yI!Zlgzc=mBh%-vLm;4X*ssp(ee54RbiiqywPJ58C`m zg*x8%?f?IvwnZ<iBP%GTp*4Kx{TIrw;kERP43O0E7YAO$YH3bZaLo*FMa)1+!5Pq& zmjEaQ#?I(=onh^|g}=uT(h5J}0ctQndo;-7Gat7?teN=+)F=Wq9dHcLM8FhuBN`P` z-oTx!33aX@+__OKphm?UaHHZ01IX!f5WR51!8rr!um!I$f)m$R(^9CGv#&w5F1CI) zWUQ$dB;U;pZySNsL)%74>5$;?dIbyh$;@D<!$W-zN~jw_8z-|~gW7I$x?SghLtWti z|NqBb7l8f#mI2(1&S(SWhXuqnqotufS^N^_dE`t`%LvH?tRR1M-hYw%65Mz`)=Gj6 zKes?U>WI~bYN!p1Ux7mM{tNDxpd7XU9taCi0wEV#EKhv}3WNpSt_#2oSaxtAECC0? zG|>2Ex9noD6PG|6m&6we-B8y~et|7KbfK>O`V!(=Td-@Fz+Jlp#kK#T`SkfqkZYH8 zyKb>|UBcfR_a9W^u{yRw!nX1SI6oW!b*o~ZgV`rQ>_9M^byf>RnG=NT4dog`xO<>n zmFJ*jumThU$6eQesF$B1sUZp+5Ni+_0&lPC%w|YrO?i&uedK(AJW6pFs{AO(4<xr} z;-CNj-_6_|x}x(k<KaRnkK_y8t}8rdK<YUrXyC1S0Sdeo-L7lkp}YnqlqI1G8^H?K zbi1wrrwPXYpoFvnJTz>U0`}DoP`JFf`4k++7eHbB7Q(&(Vm}14S+$@cdg<x^|6mOs z%||k#9b+70V-Ldzxx*d9AOqcvZ$Nz+kIuaj;7FZY0HQkQdi?+YzuC5~iIIV!L}<SQ z0|Ud0MIhr_50o%_bRPETbxr`)PRE%ycWrg_=w<zy4050|het2#46q5#0-l}sJP*EO zc0Aq&8o&Pd@#9Cw<83Sr|La*kfBu}}(aoX?ng;XebUk5sz@xhrY=38K1}G=Af=25> zetqeq1u7AAr!_G$cyxm$J(~A|)L<KO3V;>`Kc0aC2%@?dI<O!K(+&>LG^olvke^`Y z9w4;}PeADIcHqI1Q;+*}zVhm2vGVEsiPAgv>3rwW%c=-<#LFk}r0UD~*SGa8xU>5B zFDOKhzwmwrssZ1>c>MJLf6rbQ6-X_5!Q<cyW)D_S$ntMvXgR<?^`H$i|GWc=Ct41G zO780~4nO(--?7_8<v?d^$bV3wXDism$j}WAT8|k%y*kh#-d|q5ELuLDFVP(M&!d<1 z0JJFaKyjc?=L_G~x6t|#IWJv=DzAJBa`7vaVNr;W-$PY=e+=@AE2(Ym5061!a%Jgk z4S@K_zLA(@u@h?R!zYB2#d)a8@W%+1%_JuaPlRqzvLG(3r$DW~^9VUH;0)`fQ02T& zKw<p?)UqO>OT7Hi|NpMtwM1m8TBtos5q^S?)uCpo$xxNjkKkeF(w)Hr%XYYP?JTH9 zCnPH{=b7*gNZ)t}x3ZhTrMnlD-d(!EiNvMzr%UH6aGo!U2WKd7k@#Zj15lRGwW}j0 z0a-v@xB%fb9D(2mRVjvWkq7Ashy$S;lz<?^OUNw%{N)NK)DaUOASWeQx#Il`91Jf$ zKLn+m_b;l!Az{0vhM16e2dyrrAzX+fBv_!1;CTR#8!|%T-+j1lP)L9#!&p5#kNR}t zDYZ^P-8kt!Ht(<b3Gx1y2cRMdT$~>B>3sj<$bC?PuzgEZFf4~!(U0Ug>=n&ks7h9Z zN5}|<@ApuHfvD2E32JrMJ>+n}S)xpaD&GwXh)z;Vl+b(NqM4!f0Du2i@L;&@qH1DN zR1DNw7o-5f9+X8;mAmee5g4UV&9!%l3XC?W@^$w>nS|89@VHBC@fruU#|;s|IPy~o zROOyKaNiSGyjDXsK1Ku^iM2%~!pd$2qylwe6gVqE3RIWdp!}ozwt|>QSBJXEAIVMF zBi$CN^5|{2x5>yq+Y!1!#R#bd>W@uekG^oYjhuL31!~ndi0q;}ptSP-g%ybIwp~nA zNZf@Q?TQFv90}kvRORkll!U}ugl<qs5Z5-@0kzuU7P9|wmLw;k$_qhBq7z#?@Hte) z`<tLbnB;cgi<{uWh6UcTH7_S7)op~@dJ_=_IKuikRHgq-cvur3TBo3zg>E8;RyVj6 z?$~+UvH3Xqh^oYCND6AW1xi6UTGyMQ#!7<~VGGrZP!%(8kQJ&)H$fw!wJbi}y6UCG zgy%x2eVvF<!V#X^p(_7hM+r|-^Wg@lF*~j!hb$}~27QKvqSQ@LD87HO=sKuGvXw3& z#xGN$M(@1=cOeeHtcI#IM)-w{5=j-I8=SI0)6#?*Hib}|cV5Hh{mq{s-j}`s@qX|% zkoR?Ciiz=l7}V%}2xsB&ehyTn$u&ekk>0{pL+A#1pVWk)4t2!(tJp$<6B-hNpajtQ z{>4ggNZ1My6%ss9qqiVjh$AGFpenVlQW6p}2;HENAg(}uz7Z1F>#rdDA7_F51FHPN zRZ!BvR&<C#{StSDtfC|Q3R;1@tdN*g_W<fH4@4N?2<vZ9mHRHk!<zWe`U%zCco{jg zkP77Y=mqj|=+dh9mq7uBqd<NHHMZ*tND;PBWq^h%$7QlY_2Ok%fovOAKumaEfV$`h zB9w51=QF6vyh~(+=S!$&!%N8Fi8J;6f+|mf1SW}%&p#KzNs9qq*L&v^6BI|GmcB)J z5JynlhN?`yNJdcHgKAd0h#VC7lGd8TkgPl9A}H11NLt6C#_C@JD<Uz-W?lrR8wQ_l z-MCz00&51;x&w$Hz!6yMpeoHSpad4F<@a)^G4IbK2OF#+U-<?SM1kNSdjI0)c~DJe zE0jZwUwWWMe?hnqhhG*!Rc4)s`-O~(JO-f~Tp|%uk!L_{{%{VP_qm|n54r$~{P!<* zA#A`i_8kH>^AD10>|LrXsLG;ql=wRZp_{mVs4>*qXe0-cHq7_&EZo7Mekf#Auf_+Q zSRkFy{b%4R@C4P%4PY%VE+V`DUwDZ+ruiSL(j8$l8Otv%5xTn_1ROh$IyS#WuW_z| z_O5jve^GlDly~31P(1@$TyfO3^*{fVLynDq;ma!iqb{qs?wNcPGTkIR2jVO5GoW<^ zFJ?M^|KE85Y}rwC%T_=w6F3J_x)wCqLU@?g7#bF{5x&8Zu{@zF1(9Qe<WY2Hgzjz! z9!v1N1%Hd&Kj@^^i+l?PhR)+J_M8C~4!Wfo@VO0A3!_`>Apw_k8e49(c?pp{0<x#` z{fn40pt>A9Zg>d1G?c(JjLm6K{e?UY(}i#<ajm^dr~?n4LUtg|`nC(I{L^Vr`GKun zvI452;1tL&BzM0vPl3FIG!3&O9Ul0^`6wOgfcGbf@=*m;xdPZnq>jezItdz$%Ozs6 zBLHg8j#G$YgtQ{c?<8DjH$(SSP|iZ1k9Y~5j8OFeCo4#?#c=|hhBv0dgOSuUd~F@r zxEJ$IAO|R{LbZ4fk!3gqN)hj0bb#%%WklFV)WG^is3n$IEir~#GW#SbQGqiEcwjvn zV%ZcV%ZM7jZid=+`Z%(eaHjexQ00F>){#7XJ?%KLX(R_~&y*AJnD*!m5b<dK@ump1 z@@Rsp<T{Q}*?fT1)vJGw!F6{#h&Wmv<?peCjITSTz>^Dcxy}&kpvq%Jg{Tu$`Ksff zR6}a6b2&zAh)O~2aY70w(sJF6qlhqq<+@HtKC^WNCw)jhTW|!N&peah0Y_>+TelW$ z+zYd#$Uz9pX8}(kvNMi>LhStu0}$P9I}>3aaS_!4wdKMQWLt11{h3hZj3Dc<j<;@y zs;EB#%9|t?_!UQB1wLqI)u-F`cp^LmiStnz)B*nvBl`%cpM)_c>H=LTm2(snmN@!J z@la#g!HTd|b+u3xt%u3-x!(~`a|}EtDx3iKGpVV@0_q3`6yL*AP1R#as!0N+&d&EQ zUL69ZQd{MCxP3&G&caYjW*<ThVwfeRP)q(E1_kH)7p7oKbnOt9km{+&&}F>ZSnW%N z+Sd!UPZdOW+x8*sBQD|Wh1zoTAhNG;W`%Q5<=;Tw!<rS|Kvk3+Br8GW9z@Fud*Tq$ zL{z=D8tQ=02atV)loc>Wqbi|O>4^tHafc%-Oo1Bv2doHNR@ekpQFVYUpF1CfWd++4 zu_XGr9BTFd{m6dC8H*iI<pyBCkXrMc+7FH*#E6k3sm}F)+8==8T%;(%D6Pbx)0F!T z;E5tbsIid{MI?^u9NrHOf6%B-M>IVANzJuyS3?S$(tXG=0V^f=A3$WU?+1C~{fqd0 z;G*b86x=?dilP%xO9Zf5!UeUY2x`f#eel{FPp5qg)J&QE2-T#u5;pCH>x8w<!A<ch zTd=1gO@!J#u>K{#7Px;ILzL^npsuS!QjLA|B?qeV%O1FE$QX6nhU6D;FQYSnh?Q0b zP`hs+bi?<+qPAV#pep@PTuJJBJqLvDZU+|ZV-YgY!GabfH{o6@_HGq8u3m^CsfO+1 zMfCv-)CWDg;o<DknZZJMoP!&xaWlg4I08u#s!|hSg-7!NQUggEq1&aK7ze(BhJg@@ z10hFGpoReh)PWtl;9)?<4(lp}?rsMTa1SKw3U~pyLpWq*_lsSiVnX#}7%>C1tD(*h zM)(`YIMP9=%9A^holoi_-Q5V?paELU0`sU(=OgTEU_r+m)Ic5KvJ<JmeB;~t1iVN$ z?hYh9E(3)?=kphKyFjOmq=zvwF#2?>J_scyK%$^FI3dCrM}QPSRqoh9Nr0?E=q4vX zw4shL-hnMZ*4~B$$kd&n8szy4*&WdG6ja+;f|r$-D0&=c<}-WX>apW16nJ)m*NA&` zJ6jxMV0g{#30X4^S^*B)qnqNP4OuK+!urAn<oeDF9*svp>(-+|%i0~|9OIFewnG=T zH@{Kv=&U^f((lpfdgJAGWzZg*3*e)^d?81+;5@tFI5gv|2U!N%E)OeXKu5bk_vJr^ zs?pvKiVRoK*#)F#eFdo2ZU>f5*DLt;<!^&pCWmkk;$Ro3gDyeU%-RNb5UIQV`k`98 z9kA~FGk~7pabp{3aQd!Kx9YxN&_0?AMDEQffV%L<R(R6!VSJ2p3tl5sxh5!>NZy-q zcq?dc2B^5|zs?Chp$BJlM?ft)0QEk+yhn=e5~v!Rt&q^|c3^4#!OY)Z&B?&<l7|Jf zOF?x*AS^V%hYaA~{+|pr@bwmyz<}<5J9-0>k9<K+>b(D=bqmN^**>TZn57v0jre9z z%j&RNwgYO}1CZZ3@4u)3(V%3H<JbxfsA&^m>ab)F7pNK@u*1p99*j_}pzLwD`7rt{ z#v|xVsu#=^I9&S+T3|hb8iy@*#h|W@+YAb3*BhM?ETHl`02ZIb9Ec+XHA8AMN`&It zd87<g?hSGl$*KG4rvLw4y0v|}Rjo;K<XdQ9lx{+Hq-*CJ$L2TSy|PD<_R1bO1WAN1 zHi0&a;W$g?Hq^vsP|%U=kGCLybSisv%Wn3A1U9Kjdp6Ym#T$`*1lt5_dkx|RR<P^t zzv$fvZmJyfg;)me&Ukd<	GA8yvCPU=6ilF*uO!zu*SZcrs5m)U;rjIxJ_tv_sXL z-vCLDWK239fojE3l&c<ugbVLRSW*5N9wfvhc2%egbvK}dI<CZS22~!n5t5Qf>$&|{ z4=>86GvF`Ed7&14g?b-bX4izODO?W^T~cfAG^kc+EztKLe8`dPdv8dxA~g+PUkQng z`|D6b6IvHoUV+Fug8bBZ|HVzH<+x5>ItexHBTOBZ;`u35P3}6f!ypN&)up=tR9J3? z`W?Ov9Pc*GrBM6du0`=NuJp4Fs$34_CGc*1^kW>ZKvm3H3+kGXeB##BwV?7e8|0B! zUXVy6&LeZ6_Nox)k+o3ep`gGcxwL%0=Kue0X?zXEUa0wBLBRkjg|Ni^N~oH`HITRm z_sx&EXs2E&l<E$>;*op_wuRMxFC^tXUjtew@T}YQf@|kT*UlH6H#-k`^s+9{0ZT(h zPMlYROp|@%0SP@)vp@*cQFm6OBnW60_;wL&(+fM0w>s~?IJWx#|Ce!G;8vHFC&WhL z;!6i=PYJ3$xDuW%RQXa+SdkoG_Nze!SMv`>{{D@e_zNx(s6{p)i*Q7o0aVS7RiL0I zt4*~Qs<qpJrS$-RpELni{aXPE_hsP71s~#uab%hl)Ky9dqdQ%%z}mzyZm`%PqD{;X zHR}3GY>6Q70>m+vAjg2tOI!&G2H7g84Wy>HM^L|IVYSQ!YS|f(uR8C)NCDBHc)`)i zyaF|?2Br>6#`^$O^J4|b;bg_%Tc}n@n;7G47TEc1X5gR!*?|3UzGYCCoP(*u;@U${ zHC|9FA#LI_uCVwdrkSu0Y6ja1lnBL@+s;Fkn}eK1a&Ei098`vb+QjN4IdUe{*2Lw= zjs&-fk6^Tk*FaCPxB?0lT>fZ>nwSq&L|Sv_CdeP)Ht~FCNMMtiwB4ch_b)^C5v)yo z@+>4DeOwM|jNN}xxeVMU{^SI)jHouTD%1vDtTr5n+RzWR;XA~J2~h74S5h-UtvIz5 z#S^%~To|hS_cD;Lu$^dvZwv9%rSOt^8i6L}tL2d3n*_25R3c!>J8V$L@GT`fr!zyf zLQ3lXji9qeyJdSFA(2FCir5NubnOz9z=T$><!2yXx(~9m^Ztu+5DoGgj>2v^)U<w> zIxInO7^;SQ3E4rw0M!a@VFp6|PF(V7hT7k~7{$l9lFt;V@;x9sv9>TbK~-2SCaZ;M zyckqEfm@gz4v<JB&LdS&dk-xl$|K!S<)1;$B)JUjT|}sbnGH36GRS;T8o?6x?NBxR ziy(2|?ZDC<dPVb)W9Jp<DJfTAP0TsanbVd<Seux8mB1+z(!_kQ0A!qOryV5tNX-L= zP*+thL<vY}9xy%yw&}%fkefU2zeryA|9`jZ1^AgQ7f{Y@QH47D>>|+NE*J1M$$u?_ z7@Pz$7!qI@XPt^copulGLr}eafYf=8%TTSL#j>s!_<LkPC;Wh{!;yy{L!EVcAt+F> zH|_pI)wn~=CS!Wb2C5a*V8K7eeF<ur6&?q@gR0p!AL3|m|C^D&pOp>Nx|Y?q1x-ld z7^wOL)q4x%B9b#k$$U@+0ctbHax*ZzG-3i-2#P4|4XmS3%W^@MfnotmE_n!5^Ku@< zGh~GBJ*ZYt=wcZn-4C5yRfo9(M_QN;b;*8cuwolE*$h=<4Yjf}g2kg-_OBHq1FT&U zcpQ?@XM#-Wy#K-wM0d;1vc?lBbD^fXg4B{6Dfj1sBE_Ry*36ob!LjoQcn}lyw8B5o zHN7ezXX7gT!=bL&4^>23drfm5sOSQXVZOISgvMg%WJx#J%=<5d=fYwcdx{Z;x&aox z*y2DRs%HBfm{}xGH?M(eh2)(29FK0<pCDJ`3YtGlA(6TS<b0AN$ZifOf<T8toCh6p z-z|IA0ue$Fp}Xud!A9SI!3d&3c?Cx*-3WDxBupKaJarbTX6kIRL#PX?6*3zydmH3p zT%j`$YF!&BRI#=i_CQszfJ`O*B>2CxK&^&kP*w}V=a8vTYyN_)Avv0+&mvUomqN{- z3o;)RM_9ssB2<m!EJ)ac$CZw`XqRG)D=mkvgz5+RuJeOy=S$bl2c0)}fhK&xYjWJA z!Kn^X?Z2D>GEa7r86xSV9RbU~&;vQA^Ztu%Gyng8c?5JqB*<+z(vKn3eK(=*!<NH* zp=v^Bg6ss9?<D6iFQ`^<4rAi)(`6;1z7U1lYm3KiF!%2ShX+}1TL;w&sV^{w5B#BX zQs1G<aE&lOUjhmKeyCTmg(Nf7N8C`eAoayr6GS93LMQMtL8f%xf58Z%yJfRX@zfV@ zp*D+x)RLUe*G~r(M;_g>Y^Koq;t2YzVh?n3;0wsvxU&6ns4M!Rib$(3eolwg7yFG7 zp%Dz7Y>Nh)dH==ZX|NQCy}n3>x&aox*y5lbs-_)o7Rjl(2C5aBn)}T`*RFKSvLd<s zCv+}p;dD^X`~C|{5RE4vYC>HV2vdipEOCXZIXe{=3M9My5L7F)92W+;7*~XfL9N>d z@-5bK+ytt^24pJf<+$locsbr>geQITLai|cJA~9xjPp|nmE&(0Lvrp_kT*bageB}b zp>7DA0ttIW@9i3T?`<Bm-*RjUC`n@}$p4Ch?SmBL3X?$w%APbpr21Ouf&Qr=_jKNW z@pdwFz0iw~4B+*bcR-Hll@&FF1R7>e<DYuaqw`qvGj<1yYoN<uPQfmN5t{t}KmRuA zhTn{3qWs&Shfn81?F*g!|9|I=<_C<;9~fH>@V7n!oe<Q^dJf{;7vCm9o#D}ZL;<?U z2(iQnbUhTui>68c|AWqa%)F$?YSQd+@Rb7Np@Y9TI}aZGDX)1d^VD-@1_sR&orgLv zHy(b$%)kH&yF<G`EXan<MbO4v*A$RbJi23loP?jx39&%|ZUghyx}`81*q}CKpGt-p z-+VX)Vs;8><O*DWwn5F-!(#Tnos0~i`?->!L2+x+|NjWTy?8z8|Nj@qCjb8rQ)dNL zS2Pi(4t(Dt{DwtPr9FyALtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%%EwjsdC z0J>xow;j2OnR$B2xaA4Sq!tyWmKG_bs3#Vsm*%GCl@u$asHf(Y6dhif%0);s0|P@z zMp0^Fib8TxYGO%dex5>VQBi&o5&B?Cp!&1&GfCGAG9xcZAthCzEHx*;SRpk}AuTfx z#4jkyPcKT$%}rHMO(Dh?Ad|3TLj_|a1rr5xg|fsPD?>9QbX6Met|6KV1*t{F`FRSe zDGJ3UiA5#F3TZ|8xe6tzMY)-Ii8&x~4b>Edq{{5nVjU0<qP|$6JTbE*GcR37p*S@+ zEHOvHN<lS6lOzX2OahsiS*#Eo66)-&kXV9jvz0<oVsf@ZYHmSEr9ydTNe0*wg`~{v z)M6rRLYSYEnpl=vjBK<*QYF|NB8))~HaK4+AQUD15{rs5LDrypLV;Gn$AIu3{_smH z&4EM@*vG_#9K?$V^Rb6tT7G^BCE-_6RGOTvP?VaR4+=F<A_GM%S{i@^A4mdw>QhZo z$Vp8rQOL|w0Gmfb5(KMPNK8p72Bkr8s-mCe3=9k!F0KLoA({|(E2O8E(AgcR_NSy4 z<QHd_&@m`d^HLO&6LT~3^C0PsR8mXNr!=WJF)uzPu_V#N(1HO?z#Lt`3|+t!UBCog zz!+V?2wlJsUBCcMz`zn+0Nteq=q@!tcc}roOAXLnYJl!i19X=fpu5xn&85bcXf8Fj zM02UJC7Mf(Ezw+RY>DPlV@oub8e5{d)YuZurN)+ME;Y79cc}%sOD)h{YJu)j3v`!S zpu5xp-K7@jF10{+sRg=AEzn(Rj_y)(beEc=yVM-rrRL}^HAi=;Il4>D(Oqhe?oxAf zmztrw)C}FFX6P<8LwBhex=YQ_U22BzQZsaynxVVY4Be%s=q@!ycd045OHI*TYKrbs zQ*@V_qPx@--KD1JE;U7WsR_DEP0(Fxg6>iibeEc-yVL~Tr6%YuH9>c&3A#&7&|PYb z?owlPml~tH)EM2R#^^3JMt7+(x=W4GU22T(Qe$+N8lk(?2;HSd=q@!vcc~G&OO4Q7 zYJ~1mBXpM<p}W)w-KB=;E=8}Sj1AFUYKZPqLv)uKqPx@(-KB=;E;U4VsUf;c(d#H< z1N1OOucM67>nLONI?5Qmjxt8Cqm0q(C}Z?G${4+lGD5GTjL_>SBlJ4T2)&LnLa(EY z(Ca88^g7B2y^b<MucM66>nJ1iI?4#Wjxs{8qm0n&C?oVb$_TxVGD5GTjL_>SBlJ4T z2)&LnLa(EY(Ca88^g7B2y^b<MucM66>nJ1iI?4#Wjxs{8qm0n&C?oVb$_TxVGD5GT zjL_>SBlJ4T2)&LnLa(EY(Ca88^g7B2y^b<MucM66>nJ1iI?4#Wjxs{8qm0n&C?oVb z$_TxVGD5GTjL_>SBlJ4T2)&LnLa(EY(Ca88^g7B2y^b<MucM66>nJ1iI?4#Wjxs{8 zqm0n&C?oVb$_TxVGD5GTjL_>SBlJ4T2)&LnLa(EY(Ca88^g7B2y^b<MucM66>nJ1i zI?4#Wjxs{8qm0n&C?oVb$_TxVGD5GTjL_>SBlJ4T2)&LnLa(EY(Ca88^g7B2y^b<M zucM66>nJ1iI?4#Wjxs{8qm0n&C?oVb$_TxVGD5GTjL_>SBlJ4T2)&LnM6aU^(d#Hf z^g7BAy^b<OucHjn>nKC?I?52ejxt2AqYTmOC`0r*$`HMdGDNSV4AJW-L-abz5WS8v zM6aU^(d#Hf^g7BAy^b<OucHjn>nKC?I?52ejxt2AqYTmOC`0r*$`HMdGDNSV4AJW- zL-abz5WS8vM6aU^(d#Hf^g7BAy^b<OucJWYyC~xyhUj&aA$lEUh+an-qSsM|=yjAK zdL3nmUPl?C*HMP(b(A4`9c74KM;W5mQHJPslp%T@Wr$u!8KT!whUj&aA$lEUh+an- zqSsM|=yjAKdL3nmUPl?C*HMP(b(A4`9c74KM;W5mQHJPslp%T@Wr$u!8KT!whUj&a zA$lEUh+an-BG*wRl?AD2ofSj$D$5YP$}&W+vJBCyEJO4v%MiWFGDNSk4AHABL-Z=k z5WUJWM6a?8(W@*&^eW2`y~;8~ud)o$t1LtGD$5YP$}&W+vJBCyEJO4v%MiKB0!0E^ z2hk9{1~Wvj!3@!BFhlej47~zFufNc%FZ9|Az4Ah@yU?pH^qLE~;sSXQt;>sEjiJ|K z=#?0H9fn+mfs9A%K%-Y^==B+Tb%tJ>p;u<;bs2h9hFp_@oP*YVN3Yk=t2N|W4Wu2d zvyWcKp;vL}H5_^chhD#-S8wRG8+zr2UbmrFZRj-{dc}s`_d>7M&}%jHN)5eEL$A`% zYc%u<4ZS`?ug=hGGxW*~y)Hwq%Ft^v^ok6<9z(Cj&}%XDN({XYL$AWnYcTW*488tB zufEW0FZ9X_z3xJ<y3lJb^ok3;-a@ao&}%L9N(;Hp0!<X5*HP$I6nYJXQ9+>%>S0tq zXhV7!H4R!}hEc7cjm@E1hc+&UW*J(Aj8-+E+l)Fdg=8<N7%^Zd&MZkSW=PFTVMt=g zEiFl{U?@(_jd#k-PIW6vO@(msi}D~mEj=G+h*zA!1&}kOc65f+yw2b<%^B=?XK-=r z40en&*ivUmUF!@9Drc~toWWjkhE&VWkeb!ml7Ug0**bxNfq|QWf#FQ-|Nm1M7#MOA z{{P>@z`#(G@c;i61_lP6<p2L`7#JA7CjbBchJk_MR@MLiB8&_STUY-7@4(2wAaU;h z{|rV3hN^S_|MxI5FkCzL|NjO?28J)^{{IIZLMsBDh-9n^VqmNgV3g)z=a|6AzyK1L zVPIhBNc#U@4W!0}T>wO>FfcHfFfcF}#Qy)k0JP+VPr!{&!i%4~oTGukUdmF-SVak> z4x~SZfq`K~{Qv)8jUYh=h`A*U3=9k6|Nox=(hn5}ncKs_z`&UN|Nm1l1_lOKK7lqS zXI?hXUgjQ_W>)6QVm#~|3=A3!3=CTs7#Q|d{{Mel4@q4>KXV^TFKZ85GduGkJ+NAk znGYBk7;;zq|DO!vz|8dSWA0_?VQpq(_E+Iy=TKl^VBlb6U|4bH|NkVAdtmBZo0*wH zz(z5E)aWoWFg!c+|3AoIaQA`K_(9Zw!YhE0fkE!<|NnBx=7b{T3m6#~WX}Ho5Ap}x zjChDVNXsZ54S~@R7!85Z5Eu=C(GVE=A>iQ%I_aN*!QmRjFIrGO1C$SuWnidehRDPC zZD{-nX#9ClJ`Y421H%OfgBL<E6hQ3(wOc?!0-(kp0|SF1hy!ZxKxs)REdiC6hVo%; zHYq4y11b+{<A8)<@?Zb`&j;~0K;6R%;xI5UL~uYDY!Hg!22>ulhVmqo4{F<jlt_RG z1_lOEC=H{a$`~s8ARz;5GQ!LQwKG9#*+B#Y1A{n}_BaG#z{F2L0}ARahK8*Wc}@t$ z0J9(5ZbJ&6-~S>0V`N|eYyAi1cR<bi59LE#$H4Fb%2$HQ|Ag{8VGe=XM=i<%8ZYSP z89>v61C$Pc(g{$y07^GN=?PGJ0hHbVr4K;q3sCw2l>Pvv87@L>7J$+UP}%@WJ3#3G zD4hVM3!roZl%4>k7eMI^Q2GFrz5t~kK<N)qn&A@EekiQ~r46981C$Pc(g{$y07^GN z=?PGJ0hHbVr6HyhPl7v7Se0`#sAuMtsAH8QEcpLF1A}^UMq-hI7FkAs^%sLy0hcI% z`nseVf~+61jy1KUB$aqmko9LICS{f+k`@+V{RJi9T@3MLg(4e+dc0G9eh%?&MvfH) zP{$6`mxPv~3ZPChvH}8Zn0^}u1_oFeN<a&WG_rnS1_p)%sQs|=5k)Z;4otr-0|NuB zjK`u3rx3D!AqwobV_;x_m9aQ2!y*B*AEX~tN094(dkVuJq@R-T_hMjR;KSlSLP9YA zgY<*y@CDHLXCg8I!1Q}lXg^55JZSue0{cPw3HcXY9_D^u1_lOM3heiXjzK*j)BQ00 z=<XxLhq*t1Li=I*3E77(53@fI+QuT+|1kaN<`d$>><?mK0JpWswLh3b_rvrPaxc0( z%>AITKUkX)T@5}yOn)o`0|O=c<0#ah!N9-(>m%TEFS;De{UH6I{HHJx(&8nx{DJ95 zH=ht6W`8Dy?g!}y^?As3KTJO%_oB<g+@D3E`$76CaX(Byy88(6VeZeS(ET9&p!N^B z;h#gH{UH6I_75fYgY**$FLZfW_~kM%Fp$#%Mb@vyz`#JR`$6`D^rO3v5FgooO3DwA z{h+=!CGH35C*)pqd6@e_+wUkTe?fyC&gg~{!H3xo(hnUPAVL>H2~2+(bZjC4TK*E* z{9}OW2h9~KBa9`Qg{&Xsesb+^p|JjHrBHtdh59EkFff4H|3n8IR3R+<K>9(`o8-3N zLG6D~{w25n=?N-3Kp5Kog*uNQ1#^Ei0|Nu7{Z6j^p!{!4f&C!;78K}DhxQ-Hb$>O5 z`kSHsUvlklr!f3M=?|2D$+dqXh3-EFZU2*N|8fQf2GDv0a_bM6eu4=eO#v+ZgY;8U zf2?3&U|5f4HZfe7{UH4y`^haoVET!%6Il(i{S!d>4_g0_+WrUG57LipHZg2u`$6kO zh|z<r23bEf!jIha2l7A2eq^^1!$x;Mx%RIFoy9;w{K51S<7Q+vF!zJ>Q{w+M6uKX# zAK7ihuwm{8>8Hf~YoX&8<i;ONKQV4bRs(ZCNWUPm1d(iH{h;w%a?77}3=9l)6r?|x zej=R>R|a!GNPiVvlz0ZReo+61690qrlN<ja_k;8k?{bJrboY~M|3(VyUzmP~tB5CI z?g#0oB>!z<U|;~vUy$p6n11424p9knKS)0%<NqN2pz#NC(;rMf#8t$T$nGEN;ipN# z`~fKZK>CRfIfzPF_-&@J{(|X;m`Xf}Y(FLWXBz_p18Dq!-24O6PrS<^Dq-#i>8Hf~ z+bJx+VEQ4hBA$e~AEciW_k(UQpd|mn^b_xLh)S6ILHa2vzd-saDZgO)A+92xM0WpB z4?j@(LvHyG3O|s3;zJIi5*B_tDXc$X`XQzgPa@k-N%{lXPf7X%>8B+9!1NREbBIc6 z`d^!Z`fo3V^%qP(#8<?VF#m(}Q&N8JV_;waZ3Q8>{(|Wz-sKRLF!zJ>Q{w&u(D7?> z-4D|baTW0-%>6L^<k}A!|D$C77^a_imqS#-+<%;bfdMrBPOkf5`XQzgPr~d!3ynYG zbwX6a^q*s3V3-9FB8f!S4@!UJ)*m4ILHbFu9Ms>3uAc+xZzNSSntqV|l)9hX_&-l! z{DGF0g4|DP5WwQ^G6MqxCF3_B{h&3|<c1$eKWOh7x#0)XPp<z#dmce+7%0&X8b2Y| z{~-H8`pNbGbqdqZ4GP!qf%JpY54rw_=_fb*LHa3azk&3F<{v3>KS)2h?!QT4{N15Y z|6L08-={GBfb>(6eqj2^4S$e+O41KVKPdjmO+PUG<hmcUADI&OgY;7p{viF7+E2;) z<A)Tc-$xYce*)D{Zu$L+!ucDResa^#YtWv5P<x2X`B#{JO6&)%zalsMK=y<5lWYGH zX!%91{V@HM*bgc{D6t=;pIrMtF)%QI4p<=9ewcnr?1$~~BgG6@`}GTj{co6lQtSq) zMYf+3_ru2j$z8t!8-F8LKWO|2G=4*_eo+4zwEmP5{rsTvhs^b3u=X3d_QUF5a`l7i zKT!Qeu6|hgMXr8EMg|7Z`fYOeKfv^Z(ljX;mj0O-85j&17#PU4AEuuayFqG^?Fa4O z0*R4=k@bV>4|3aYAosgd=zoxYQrr$w3v)jUBjz4wkUSv_)6Ytwel|wP{y%c#AEuv> zd(q`#?g!}yjlWW2KS)2i`Goi|``H;87+`za3F$$WN7fG-za%&PQNw;+3dZk2=NwUz z|2Qd3f6R;w450P9<i<ZtKXTj<!-mBlNIz)*2{C$*)gbE!wcp5%e~|rt6qG+O{m5=3 zh7EH+4<lvchrCez<i;ONKQV4bRs(ZCNIz%|5V9OGY-IhE^q)cYgY*+)C$bu3`)43a z5XnZ?53--!^apZ3X#E={@dwgRq_g45VD9IGrXRQjkqnrAAqvZHkbX+aZ;*b_9t?8B z52l|;Z^M<r{4dN1+5b$g{V@G-gNbCo>=&i5{1>B8zc_{M7npt`y$x3e^FK&GsQp21 z_`~$W4JMKSvtNS3^bgWcN%{xrr=<M^(oaeIMUukwBSoQp(Ak=lv>!nFDQQ1|^!rfI zet_vGGTFhE!P1{Bh2^&#R6n`-2c{qHFd`W+_k;9<)=(3v4XzAXKPB}q$bOK1xWPm+ zknNvJq#k5t$ofI{liPj(xgWHLjgt5S=|^@OF>ILo<)P_^7(K{pVEX?-_pg!bewcn_ zvx#BD>{o`CKjhjE(@%_@$ZBBrt1v>=zmsb}Oh2;O#IRxZtAftIrJ(<+PGS8I(@%_> zk=4N557JLb{SVWRY&J1$nEjfJkTd+q&A%Z1pz%L)^{Y|X{)Fi##?Q!VVEzZ`2c1Dg zuKRVN<p;UxAEqDKZN#u)?uY58)cwTRiL8d2_SaL;{s8$Oq#xOB#IRxRHw2w&PJ#U} z{lwUbtOjPkF(c%RNpjN<Oh2;O#ITX=2c79jiTxn`#Mp_f24=r0H2;&EenI*vY5yBh zIDZ1ukL)*M*f9TFGD6NzA~*bD`iZd<Sq-}V<c9xXu)m9f{0nkFNI!De5W|LrA87su zynd0)`AgXR1-bKopz(iD`X^UEX#7{7g85g__#deKPp<v2@e6YG!}|Z^>Id~dC~-fi z{Z7gGDX{h%x$cLxzsS`Osy`|5KdAlzmH*`04=caP)ep+Q;Pta)=06u`{ZFp_9?<%m zT>YT)Td|%0133+kn34#)8d&)RI-eD^zX)9wwakZ|pGqt9VdtaL%6wesFH$RfaGlRc zE%R}m-$*U<lcDE>(JK6Lou5W6_v1Prjaug8I)98>=Hoh_j9TX7I=_rs=Hoiwh+5|3 zI{$`R=HohFhFa$1I{$^%=ELqiK+o62@?rH0XzUwQ|Dx-omis|-^Vs$`QOkVL`3JN# zAJ_Q;)N((r{r}W5AJ_g^YMGB~|0=c2hwU$=Rr<uW|B_nn2kmd9W%|Um|Bzbl$F)C^ z*5*^Ie1q-JqgDFBwSSLV;e%^`8MVyEwf~G-=HuF*MlJJk?H{6+`MCBMQOkVT{v%qY z&-V-r4A}NJP|N+G{UfwAAGE)NmgeJHe@(6M!L>e{TIS<gze_FiajoyAmif5WpHj<w z*!U)`@)xf4i_~&IuJv`)G9TCaJ8GGaYkd~A%*VBUi(2O6THi!1^I_xHv`U}2*2hrG z{Tk5qE3|UI7LCmZ-Qf%xKc|)ZVdL|(GG7n6et}lzo6y*NGa8$30iB<vRrtW>FKA`H z6^-5h2YR3U0_gs6bbsLD!^V&78EM<T1l=tUI-dY$ALu?$&>f;MK4|X}X#NGp2c2aD znlFLzL2{srI$?Z}9EiW*Iiv&x?HvU9(E&t&?y(Dlh{M!Fg)yiE9Qq51)USX;e-n}V zA3TG&6W#rjiPXOUhyEo*>QBI-e=Cvt6>#W3Mx_1+PqF*|I+6Mp;L!hqNc{;o^#3GM zzXA^ZT;ULZ5lVj#o<P*0$G<d@`WN8PuS2B%1RVNpiPW!vL%$!9`X4;T?*Diq^)JAo zzko>n2~hp8dyiq|M<bE?6`=Y-bMK(S1*U%zk@_Dzg7_a@|6(HbFM#StcmEb5^(R2} zquYO!Nc{>>{pj{zBU1l^huHo9oJjo(p!(76|3Rew1gL&=|8qt_-32}04ivZ8umTSK zQbg*1@BnHL)Nok((I!&=0;qm;|Jx9$KLM&A-T%Hs>Q{j3N4GzYNc|7)WA}ePk@^=v z^`qP0K&1WzsD5<+Pb5;m0#rY`{fmgy|KJ{W|8FKz{{kHPj}WOp0jeL}{a1<9uK?AL z9)8b=)c@cv#Q*5_e<xD^0;qm;`#B;Z<`SxZ6L9F4BvQWuR6n}=wTRUJ;11NCX!+lo zNc{_N==UK~e*zBuu|(=ufa*v0e;$$gAKb?7|9T?zFM#Stw|@eW`V*k~(bLaDBK0fa z(7%aD{SR(I{EzPb!$j&|0M(D~{wqZ4Pk`!2xBn@T`W2x1(e3|6r2YptvHPDr3L;J@ z|1N;)N4H;sNc{;={pkMJBvQWu4*ga{>VI$p>QA)%?@grs1vvD_5UD=_svq6|xkTz$ zz@fj6Nc|74WA}eQk@^=v^`pCg0g?I>aOmGiq<#gce)RNrh)Depu0i~d?*7X}>R*6E z{}UqhCqVV1yZ<YZ`W0~KXN!jTi%|Z3a228s-T&f5>R*6EzXp-|6L9FaBvQWuR6lz7 zc@e4q!4>TOk0w(80;qm;`*VoYp8(a59{#mN>Q}&_zmG`$4=zLekM92YMCxAv)sOD} z4Mgfsfa*uL{~(e26`=aj?Y~5%{s)&J{zupUm`ME#aOnR+r2Yh`esuq{#z5RfDE}%z z^`pCAj7a?tE<)`=tN+xA)V~0SehVV?CqVV1yWf*Y{R%krM-i$2!3Bu_(e2MBQvU*| ze)RaOAyR(=4*k7E>Q{j3M|b}`BK1EwkKO<4iPXOUsvq6|2Z+?40M(D~{)<HFSHPkF z5s~^IoP+ou-Tj}5)V~0#AKm>du~2gfj9(?-&@W1)eg&w0boZ+fssF)Qs5{Z}zd4cm z7eMu+``?2|{RueqM-r)D0jeL}|5-%pe{crke{}a(6RCdz4*fku>Q8{`M|b~RBK0dk z^`pCg9g+GUoQC)x-TwVV>R$lWk8b}3BK0TW(EpG~{R&Y1=<feSr2Yq|ApS>pKXV*J zoKXF{0IDC|ei0(|CqVV1+pkKbegz!*&4|?h;3UMK==Qr4seb`fKf3=Th}55eLw_cb z`W2x1(cND~r2Ypdu=~H8Nc{_-`qBMAhe-ViQ2prcUrVHZ1*m>>`}Yy4|G{yH|Iz0^ z&l9PC0S^5Sh}55eL;pu2^()}e&lC^w7oq(7;21<5y8nfV)V~0Seib71C*aU;N~C@T z9Qxge)c@cpcK?SHseb`fKYIGjAX0w<4*iux>Q{j3M^FD<MCyNV1mb^m_s=F${{kHP z*AS^c0jeL}{d<YjuK?AL?*4N`>VI$;;(v7e?-Qwi0aQP_{U3<bp8(a5Za-rJ)LjJH z&k9ie==KW{ssF(ts6A-yUu7coFM#Stx8H<F{RvS0=>B&lQojOJKf3*4MCyNV5WD}= ziPXOUhyDs8^(R2}qr1P8Nc{>p^v@zv|APbA{lA(>{R^P_(cQm?Nc{;={pj(3mPq{y zQ2prk-y>50gZ&Wyqw9Z9r2Yj^{pjvzNQ9V6sQyiW>PNR<kVyRsIP@zKssF(~s5{Z} zzcG>e7eMu+yWfRK{RueqhZ3n@0f+uHBK1Gm3-Ld?`^$;czW|5+4kGm@K=q@ipP5AJ zSAgnAcmFCP^*`8y-T%9Z)V~0#AKm?Dh}53|)sOD}yF}_&z@h&gk@_F(hWH=d{r`#7 zzW|4Rfh4H81nTbusD5<+D-x++0f&AgBK1Gm1$8G{{&yx){{kHPLx|L$0M(D~|5PIN zE8x&yMx_1+J0bo@x4)f8{R^P_(bLZiBK0TW(7%#M{R&Y1=<eS|r2Ypxu>1csk@^=v z^`ra$4w3p3p!(6>|CUJo3OMxtBU1l^?b!X#p9~QvRDUmk>PPp#0+IR?p!(7MZ%Cwm z1*m>>`<;l?|6m)`pJ@3%m`ME#p!(6>pF*Vm1gL&=_m>i>UjeEg-TpQr^*`7O@jtr$ z=|t*Z0M(D~{uM;(Pk`!2w|^&*`W0~KKSiYe2U{TiM|b~iBK0r8q5ln$`V*k~(f$9I zNc{>p^z)@a{Y9YueXtp-4lVu56RCdz4*dp1>Q8{`NB6%Yk@^*I=no=N|AS4~{hv&v z{smC|=<Y8eQhx$eKYIFWB~rfvR6n}?(}>jnU?ar;==zrvseb`fKf3#O5UD=_svq6{ zlSJxQfa*uL{}z$@A8f$x|JOw7Uw}jZA0qW9K=q@$pEniaE<*LM0#rYG_{kBe|G|2Q zJ?Q%NiPXOUsvq6`4n*otfa*uLKafcM3OMv95vl*dI*9+#-Cs<k{smC|=<aVJQhx#t z{Zon5uK?AL?*3&&>VL2n;(v7aZzod!0;qm;`%e(5KLM&A-Ts?I>Q}&_{}qw?AFP4+ zAKm@GiPXOUsvq6`JZVsK3Dmy{Q2prk%Mz(y0jeL}emx@fKUfWMC%S%nBK0qT>PL5f z0Fn9=p!(76Pb5;m0uKE}MCyOA3gUls_cs%%e*q5tQ;5``0M(D~|D{CgSAgnAcmFmb z^*>mN-T%jl)V~0#AKm>oh}55eL;p)6^(#R2qx=6Ck@_F3!0vzUbf`Fi{JQ|EAKm{l zMCwn#p<kCs{R&Y1=>E4OQvZYH5Pzb(-=9eR3vlR9AX0w<R6n}=3yIXP0M(D~{w5;z zKUjv{|C5Q-zW}Nq-Th05)SrMu|5hUPD?s(5`~Mh``X4NX_#fT<*NN1>0Ehk;MCwm~ z>PL6~Pa^dz;Ly*N0reMw{QF=DR2^FXSDHxu3!wVZ-LFHW{sgFg^zgSOQojOJKf3*X zMCyOA7~+3){qaQVUw}h@0g?I>p!(7M-$<nX2a6!?M_<1)iAenmaOhu5r2YgP`nM3N zUjc{yqeSX|un@cduMw$#0S^7oiPWEfL;nvV^()}e&zTAF7oq;|g9Q+E=<zQ_r2Yjs z^lKBTKLLk+8zS{9K=q@ie_tZ?KbQ~kKYIR+BU1kY9QyN#)SrMue*=;F6>#XENTmJ; z^C13555Gl3>R$lWj~;%TiPWC})sJrf5n}a2&x=C0|0<FC6`=N`>wiL|{s(g*;fJpO zE0Ova;Ly*O1u>UU{!PH4Uz|w&3Q+y%;jclY{s(g)?nL*$C6W3U;Lz_yr2Yh`esuRo z6RBSTsvq6`IYjDzFdMu7Yl+mq0IDC|{e490Pk`!2cmI4M^(#R2qualMNc|6HVfX(* zBK0r8q5l$*`V*k~(cS-;Nc{>>{pjKMg-HDmW@7h0Yc@ojQ2t#2)sOCeF(UORK=q@$ zU!6$(3OMvz5UKyc45&ZR+W($J>Q{i4-(qO`qlnbM0BS$F|1*iypMXPu6_NTCaOm$Q zQvZYLknlry{~RLqFTkOHEs^>Yp!(6%-(Dj1E8x(7mPq{%reXL0T_W`_fa*tg|63yU zCqVV1hyPz9^(#R2qubA$1MwH3{QqDoL>;>QvP9}%0M(Cfzb=vbVfRI%xBqR4)SrOE zejg(BD?s(5`#*+A{ST%<!Vlg5IYjDT0M(Cfe+`lP6QKIh?e8H{KkU9t(0QPsA`o_d z+8iSFD?sf>cmHZ4^*@-5J^XePseb`fKf3*=iPWC})sG&2w~5rR0M(Cf|7#-kKbVBw z|G$aUzW}Nq-G1&|sJR5j&k~^e(fuz?tbXWyg|NGmVChGjNc{>>`_bKRMWp@*43HaA zKzEmd(r*HYU|?YIB2xbXsDAYFCyH48(Dnll)LxkXvxwC10JR_8{gp)OfAAj?&*=I) ziPYbKL;p-7^()}ezmiD(2mWDq|4t(HC*aV3l1TjwIP~8nQvZU#*xmn<Nc|2t^#3GM z|ARl+?dQych!d*+8*u2CBvQWu4*i-$>Ob%s;!gDRYe}U31RVN3iPX=4Lw_WZ`WO7d z?*2?7^*i9uUrD6?2S2gf-$|tY1|0fl5~*JShyImB>Ob%UyZd(%sXqaS{*y%NXTYKV zCXxCVe8=womqhA!z@h&qk@_Ee!)`xkK17^g{>PzTl1TjuIP_~0ssF%Nh&wUzKau(q zaOn3WQa=L@{gFiKU+@LH`!k8u?|?&pC6W3ce8z5nCz1LaaOj^&q<#e)`d1RE|G+2g z?%zqI{sbKQPZFu00f+vZMCxDg5xe_e5~<$-hyI^L>VNP7yZxL65OIR}ABTQPBK0fa z(633P{sZqJ?!?IdMCwn#q2H58{R}wtM-r)j!8`2k&m>a60}lO_MCyO=7Q6kOMCxzA zp?@Zk`W0~KUrD6?18=aqe<zXp6L9E1Nu+)T9Qtn(sei$1?CyU_q<#k+`hOCs|G_Kl z_H!0O#0lnq9Qq}R)USX;zb29T54?o96C?i<sXqaSeh(t`GvLr4PNe<?FR;5mjY$0t zIP{kiss91={v7o1Yavp<0(AWj`uN9WBK1Fjj(?!*UqqyS1?cz@7uxvAMk4h)6hg*- zKzA8|jDU^59KfO9ff1s<0jiGyN<(6ifdQuf7!LgbQ2mWieFq94=An<Dox-6%0jj?V zs=ooMAKm?DaOf|9>TibXcfg_l5)S<hQ2i}X{R}wt-^ZbU0#tu1RKG$9B;+DMfzQCe z&;X_1;?NJ3hEoa9@ku$T2rT@+5UKw_FvNZ}sD9Y^-!CHdD?sll;)d#n+0R%6F_%#J zxd7^Z^!Y;$BK0=}LF_?yKOd3$A3*I#AHNqNQolkV#C{d1|6$=LMXY|P{p?Wvu<%nL zQvU*I`U!>Vhov7iV)chY+z)d%OusIX`W2wzZx6K}W{wGw`WHaM58eG%MCw<7x<3|b zKg|6OMCwm~rhiMQewh2+iPZl9>i-a^ewh7!MCx~UcD7Q`2u&)@D=AelG}bfLGtf0F z1#^w+j7;<lOf;dw3^EK1(7|q4VF$GnO6h>*UvV)oK;%8IK_t|(Av8Mqj0<$-9wS(> zj6X92gQ5?T64?c;3=E9z+@0(U400ivDGZG37<p|N7#KLT7#J9YN{x*e=8J(OIY5G< z8GH;3jO!Ws%^4UN{{R2~UmoOt#tjew289}S1_s8>Py;~j5iS9VY+>ZD0NJV7#mK<G z*e|}6lYxPw8)Sa5u@S>!k(nU=91y?M%!FZq%q|dr4FdxMOBX)_1CuJxbdZBsPO&mD zFsXq#4lG7&3=B*f5ROtACj$eM7MQ~zz?Z<yz`&#f;W02c@cDrB=|TC749cw_)kfUg zK~92T0g+p*3=CfwZ!t44u!eFoFnnj^0F5}gFfuUsgWUX*lYxO5<YETah5QT*e;GNJ zu`n=zHZOw~kTHU!8Q3^E85sUCvQ1)QV0g#Lz|hFZz|e!L8LWhfiARlxf#EYJ0|RJP zGiYZY;}3-SA6OU|*qAsjurV-z4*dchd<!<88Ki-M?JEld10NIHDh7xppnLH^ZF8^^ z2G)bD3=Bd{96v#KU^9WtVPJsBu$>fQU=U;C_{hY-0P=?%69a<^69WU-W(KwkLJSO& zOgu(>3=AEd3=B3*3=B@FvNB9;_Zb)%o^UcSL@_ZiB!FZg-Zo@pV323xn8pS%xq^v- zp$;Sq@)HAVFgpW-0ux6Z8v_F<VCI5kK>DDe8P3MQpvuJI&Beg5k%@s}51O<q7XyPX z6Gtj91H%O-28L@eX$Ce09tH+ICXRka28KpX28MS`3=CgDvS3@;cJnbX7%=fj@k9K> z!_2@S#0>W>NY<E%Z7n;*KU&NT3<e-skh>VfQu9(6%$RsexFLEym>C%SK(b(y!LpW2 zY$bdUy=lx03^^cKuwK>`><kRHOdPyi3=9p-3=G{c8Roy73=9k^pjv>*g^6Pu7X!lr zW(J1UaCuOiFz_$uU|<MfVgm&-1Ai?C14AGaIG=Fvx3DuX1VK0g;vo#ZAmcbx85tNv zjF}i1l9?{EFfgcs_zaA!sjLhPsZ7kypu5~z7#O%&7#J9tKrKf#kPK5A6L=PmQIUm# zK?f!WjgAyn28JvqW_eBq1_u@f25*=&BPfe9NPzU`FiqiPV2ER3V912YGP8qBmpsJ5 zz>v#ypND~g2jqVi28M1_6=3~&Okx}i4D(nR7*@h%1>yShnF9GC`VX)$Fq}qJ0r&WQ zW(Ee4NgNCeMNIQq85meW%n~N%*}M!4-&q(K{(`iLgUn=8=4N0hW8wfE9|;O#QC0>9 zX;6tL1CnJ0C9iTO4jy&}27Oir22+p>SRbo8GXq046Gu4%1A`|k14AfGh8dJS)FBzB zhKc_OCnS;NvNA9fgVcb{1!t#PCQerlNFwQGWnh>Hk_DU1AIQtV(7+@E@&p3|#|;(+ z2GIy61_q`_Oah>Sj)8$eK$r_u@X0WP3oQlVryyxr2v0zR6I8ybv2ZVEU|^_csb*wg zU=|m02bIX0p!;71n6)^{*clk4Ua>GRX!HAnd@2RX{yOZSGMq!JBr%<VSr^RV5%6JR zV9?j%W?)zVN>T#F91IKw6|4|0qd+7t1B0PACxpu+;L6CrVARP2;im9_Y%^g#!o<Lk z%f`S^%*MdL7y_~lEMdyLo11~5jg5f;R5E}im_cq~204NOti+6YGY<p9N;U?DeK5TU zB~Wz<JPZt0963x33>VoL7_NiVMS|^M<YZv5<2b>`!0?KVf#EAmf*Bmf+8|kG7Y=@2 zNTI~b&cGlGs)|5*nL+srlHjFRax*Zv@iXv2N)a=51_owOal)W8g`a_e*^j@I3u1tD zG&=)>zu0qb2sa+25R{-8bklek7?=b2&u~CwAm%b~ykTWvU=aZo>&t{eu`0m8&B8vD zg@J(yRQ)o68Zu0^3=9mM2l*Hnb}+8wU|?Y1$p~uS3$oaNHG|4~mL6_Uy!>K$$Hl<F z(hKJNWqHcWz`)W6=6qxU-C)Mj59WMgDQ00{V3`2sd}jI0&cMJj5zP6@(gos70&~8x z2!R|o8O-_4qQ}g@z%m8Q`NJZ@$iTod70mg;@(X0zG%)8U3#i?}G9AqM$KuGwz`!yC z%vr;77UZ0nV9suqwHyo#EVICzQ!Hj6duD?<r}->F%I1OtV{_M5M?Pzii{^p(d}a?^ z891A`7#Mal?g53w9&ku7aON{GFzjPI4-(oB6#`|{gN%<rLWiJ2H+UErjxc@&2_1zB zePU-|IL^q=$-uyV0xZOS3rsO^9^++TIK`+0k~s|(V&rCEILl}X5;_MJy3ftPaDmYS zBy<rf6v@NDaG5b0By<HT^q8H2;TmHeNa#9LsDYn>;SM7x4YA*a2yrtq^>Q#UaDj?V zZbr5i9tH*uQ2DLL!kU>^!oUG4TDdvcr+|uTMviJ81_o{>_7!{#4BQ;-{h$Q12h`#_ z2_isEJ*LMX)<+P*$jHFJB*@6Xzy&go3sn5`f>^vDtGGao8D5YW7pSD+1=SF|AeKG{ zh~xs5J6xdBlW7U4eY6!s90m~=Ss54vStUTJTaZ-})C?13l>%j2ru(c63|yeZ%mqrI zT%baRshXXE!GJ57i-Cb@2Rj1;(@_v{2}Iln5pO`mPY}Vz!N9;I3?dXjgf57%0uk;Y zA_PPvf`~j2Q4JzGK*S6V1_nbme!=<d3=BqVSQ!}D#JN(q7#KL21wf4}1_lP>dn^nL ztnz9M>70<3ZZR_hgVbjM1_s%BMg|63Mg|7-HgY(qJ^30`#9kA(Vqjokg9JYtB!^0K zaC?9RA(6obi3~PIwpt!gi;DFjKLdjdB<|QaSZ@h3FmOB-VqjoiDCfw)z`)!E)(Vbh zeh^y#L@Z-qU=Re^#LU1v5u|{F^{OD)UQi74stGVK2(TCnJOssRkpKe&i>We*&A{{q z#4!VNI2f3Bg513tBxDX|^I8cpFlexfae%fVG5r@}U|^MC2erEym?{Mr7+56*Ku%&| z3KM2vV3h*Pa4_8gDU$)q@GzYdWME)b0Lut4HG=dgai%aZFo-ZIfb=MXIbuvlK^zs4 zXABGs5)2%hg&7#wq@_Xr;bUO~uMK25F2umVro=G~)N0=gl2-;B%D^EHl2BnTVPs(7 z2dyHM?H6WXuwb)b2Oa4T(PqT~W`ng^^Av&F<ls;PUHS(OHFE|IkS;bmInX{(evmky z2Ai`K69WUwIgt6TGM_*egB{_<0Tu_F=8j~V785iM)EPLE1Q;0DJeWbF@_Y(xIpH9K zz?$<oz-+MQd?d~3FwOD|9Bd%(6)>AIF);A4uoX>#Yc4_Zeks)ZlR?faV=iW5VBiO- zWNu|(VBk|=S3V8X#;%I6lU)sBC&y2I1_pL@=2c7#3_?Ca3=BdXZ<s)d9ySog4ARaG z5)(2LW?&G8O2fvvgboTZFo*~#FoX2K2G5v5As~{(ASw*<4JR{fP)-EY;uUA}1uKS) z^szBA{S;zg;QcSiz#zdW$+3Z%fq`j(00RS~6elEwEf!{AV3Y=PSeTkY92qc&gUMKk zfq_vL%;8~j2Fb{QIRZ?+AOqyV91#XyZ(#-o5k@7B|8TRF!BPxN#UM>8U=9n!I8`u* z17e&Sn8O1xP94k<VBj?sVqoB4)Z$PF6`JB8o3z1F3{0UQjt-c^!XR{;pMk-I&xQpQ zHn4$FW{?}$H}W$uaC~6l0eLV2)QAKT49uY5;s!C<ukbT4a6VuJE2so1s01ZeE-@hn z2Cj6Fu0D_;C|Ve}s)QLBxXeL<ixGm81sE8(vOt1+L4u&}7~>%pP`LpT;|2+`?*tVo z&dgv-KxG>vC>j~qZwfFla7aOfzk)PFggJy57`U?`PT~bMGC^gH9E0#YVFm`C^-S_0 zAy9F~!2TcPyEhQufof((ke3+PYeBTohaq#A54*GiC|z=H}&AVG+q9)p~A8|2g) zkRYhoVFa-lm_b&^uLId>%LH~g*9VZ=Qy{gQKx(&x2vGl&@fe8Z1qwK3kOABvX=cy> zKldJ11_tKStPBhaAmc!Naz+q?fjv%`fq~;0#Oc35+G9ZhzyNCWfl4?A<^@a)4BQ|Y z_C26r;)Qre5u^a*9Yzp~ff=+5lj}4;0|S>b$X%`=X^_VlK|DsVN$j757#MgKGx32e zP6R2?V_;xl1Q87EpFn++1rWIkm>h%fT9CKxnYutCU_-c~K!#+3Oq~xB1VsshFh3}! z@|ZWmMMNcp85rEbmY;Kg4A8}Zf(2yZ9MP*n3=Ga-$sDL;5?oSjs}KXj50Dc%Wgr@p zp+l35b3)k}7{n8c(iwh;fD|xK+)>Y&Cd9z-QvxKzG|_`oOPGP-7dSUCO>~jag_`gI zIylRk$?#7Q<aDNq4h#&;po}l(EWp4pA7q-|TZkKOg9C(tfpN|jn052TK?;~Bo~UEZ zNK9f_AO@0Qo_M2<HH%>(*f!>gSL#^H5_1?9fw@dI4h+m8pb;rMQ2sP$1z8HKs-Hq# z!#GE>LWqHZ4<yGt@lT!P9w7z>>7`5z49pWh)Nz7J7aOo?%o7*XbH)oXFxW!5OX@k# z3otO)LAfjHIal&CFxW%6Yw9_3K>;iPPJI(M)N^(UFfh14xjX7PkMT1wxPkq^G|>SZ zfbOsWWGybuWtadpXhuDc%}q$4KriWJn9ae!z?#M2$qR9GLp=je-93nsZb)n~>;oyO zV2Fk)X{l%6DR}@<avM5G{1BuhlOY|dq@$jJ=j02Bl0OiNfd$m!$z-U8D(R_b;5qsd zBF74~NFAc28LDJLJp<3FR}dxZAQXcaL`geT$&`8qiOa7ca@<f;STh+WLZ#=_gOVpJ zgQu{GBm)DJ34^;Z0|PUN&%nT9!obXD#cj=P$?Yj@BPqkpz`&}<XfMgkXQjww&1%V= z$7iI-Xd{^-%m}JO(WE?uktErz7_1Z-tywJ<1wpxlLyf^xn1O-Qk`ZJUSezSV1{XgA zw;~5fid%(&o7;|?nU8^i2WBuc$R&AvFbjDFV2b(B9LmPPz|RYEJH(lu!WP^N3<6+9 ziXcN2Me_JOh3zFFeiGzh0DDqV1mrX!F$QK1kXymNW?&EoYvTra7ZwO2OpMHY+=>#A zP*7wCxm*-Y8C#Ad1A`dY<s1-o+#oxVf<#=Off?*o39u??m?|<u1GS408m^Kk(&BJa z;0mN5UIlrK8{$=Im=>@YNQaFi$dNLFjH-OX+|2UQ@&e)v46@+h2gff+Ru1fQs81Of z<k5V@4f2tK7${ibY80VdXjmyhwSc)ck}|9e49aLi><kPlP}hM?K}4sj3<JpZM%)Yx zYN#rVxNRhpp`oD;nse2F8p;Yyn7j-On!=zs;RZ(}I4NoIg5nYEIgqgo4BBu*xj`ux z6q%5OtE0yNPSaqukicSK(8W~Ez@P_BlpG8U`c4eo+@OSNAj-hNU}yzNLfoJfWCV2` zI27z9nIsq(jFGLdk%VPA1_mZ@+<|R|xRM#316Yuy7#LVhK>kr=1myuwVUVG0P}lG= zFtF=EvL!f3)g?iG1H~u@YV>e|9foWK7hE5=r6LbPBeyv?fAVlM3Ni|T(>E`A`0|M} zazlb!krQMWKO{>FFfw|AivvML22WvqZUzP+6k8$TAq=;d)l!jHT@sQ!MNqs5Q7H-y zIY{Bb>M0Czkb^`GJa_Ry@~R>`$n`Kukb}fo(F05Z;vEJCNmfuQR%EnRGzX<1P+&?S zvIfWyQ1+1KXW-^$V32_ZGY12MtT<XClLMtjd8iYS0-u3FL6i~XAdo{8;hyET<OT_X zEP!}{As95O%fP|l4N4M>jKBGK85kKs0|5-6sRl+yd1g?_4JxA-f;y9o@=W~fc_6jt zL0nMfzyzv2n1n&fl|ckp)*Ms^FmN#Bf|O!2mIc(0ZewI%0L@o`ZsTME8O;moVKab< z`yjJG%Uqd2O*tmeh5;sC(72@xh|mC4*hU}%#AUVyv7A8!s{#Wj6Rgr_He+Pv;3#Dk zVqjunOk?FtXBBwLDzku9m`O*7RhlVXm{kbGk^`|sK`a>%3oOeDV#zLKmErJa<-N|z z4Kjg4fmODYRgoi-mG=fKYY8h~B&!yayAZ1)le!QqA5)w#t2~ISz`(@9%+$&#z$yyT z#iS|3%C(PGwuDuLDN%%J5~DDyD43LBnh0iR2(yYXO=J{>IFmz&RkV~<7^IU!h?Tbt zYV{frleL7EGm=%lgq3p_Q=~Af0*s+l!pg~!#wriCIE0^71f&~eFY5tT4vrR9b}-*m zh?UbD6au^pK(6PFWR+zK5@O|LYGD*+mBh-Ffrusuvr2<l>P)SS!mL^#rZH0^BPa}& zg;*s(rkAiPf+&s?AUCjal(6!G853A7Kr~1PNEtJenh+}|Qxl^wE7Z*%Od-Oo&Kwb} zYD~65tUM<m-et-XV&(N_6?w`k%fQ6K#9THH5+Wc!aWM1mg8C>H?xTeuA1Oz&@-TS{ zL5&DSF=95t0Nz6&#hj5~C+uSK7iLuk1thB+*romgNGkV1RjMKfu)iQe1?%3YyLUf* z%F6kamA4e6SU8eZ43r3Xm|}&XCaR&R=V;lzo0aDUD`O<9^g5<aMj=+Qr>vaUS-BRn zaz?YNm9Q!?EoKyA<>U|oxokZnlQk&Byo6YL7@0a4g;*yrmVlUxKx&w*g_!O#3A1XH zu&N+*i9+~b6(y{KOyR<;q9v??OdtU{ka65h@j|Rs&8&4LtW``YpcDYM<2;iniv6s7 zAQuRgu<|i20LQg0D3ycU02WIUV$}r287I>!MyL}~q3#w1g{VB(Le3J9A;{h$(pWyQ zu`rvYK{oL*r3$gaM6^L7oJ{SEVi51b>=tHKDPdKB+bzN>%e0zFf>j;t2O%a^Ay$4+ zLT!R1TaIg>NC%}?kSH_T1XeL7O<`6+uxf$btehaV^D4nfg<}H9E3*(W(g=wWP9`rQ zroW6}i#b7xz~1M40ttE%CNCjY4N!=4gAL7^$jS>6;$(WyC<-+f5+s5kVLosq%Y&GZ zfK>q{y$MYIqTuZQ1mpy8)|mj(B*KcW2@-5j(Ns{`<ONDU?MTiO2A3dDnEXXp1(<pn z#h{*K6)j`sVOqv0%qjtPC?E6AdZt!JMpk*Ig^WV1QeZ(==F<!lo`ak%2TpLT93a#E zg;`lkA>j^6yC6XxkVB=JSJgMMGBRIhU@~Q7m0;2o;YerYYGoCSV&yDhm5gRJ1Q&rC zOnr<(tfEYyvILZO_(6Hc9Tf5tSnWU*Q?L-L*hE&*NLK9<R#9-4)hl5Y<w#?d23ey5 z)-T0WEX*nk(l5mnC&a1?Vu>;}G77UAfYpLj>VUMfS}<2J`7^TWgSE+ktOb|bt{`ju zK=w^wbp=sic|m5*39MQrtb!bAAQLt+GW9bGu?m7rpTWq~1Y=i$Gz&5X3o*G1v+97A zvq~|Ah(TN=0+RItnK^;g5k!HFmThJgV+s=n`3vkYkon~K3mh!0G7x`(J>v|r(FbJJ z1XgDd1-4O;nX?JWGwYB%GZo1*&5R)3VBdJaeWL{~iQ_>b2P!EUL1nQx++<N^)d{RZ z;OOKAMVIJAR+$o3a7>Cdvr0#@LLx~N6iHG{%EGLQC9F~)TMSEBMVT5HK~bm7$7%z1 zrVGf}2v%<pRl;fmqCiRoJ3t!uK^<Mfx)AE*64rXKG$`~vLCIG`lvNOHkkCX{@kmw$ zFk290wHU|**%DSUkOo~)sR*)Kl1Z75RSB$$cN$2=UWgsMC9De|cJP+4c7X$h7i5W- zFslHQvM4O$a5L|(FJWb6KFq+B&dAF16jZkJo;nGxC72_?1r0NkiV!O!lbSFqUj{2L zTnZF^%p9Ls8JU!Y(>P8rX)rJ{#z*-X8pg*LC+20AWLBjX8CrPem82HsCFc0%CKiOH zCYR(Fc_zC$o4DpOWIGlo=E0;rQWFb&6Vo%38HhKcj3GWgC9OCy4?~ZU0nFUs<otrv zl;D!0%)E57#Dap<ycE{}@8l{>EhaE62$%ZhJ44)Sl9ZU7?OH~nrj*2zMAtHiKZ8pW zle0sMQytSvQj5Tjg7`K$u^=%yv!s#%tRSQ)F*%hX#L+$8IW#!L-<KgMH8CeAKN-mk z-^`St)Re0Hyi|w**}jRHd7#Bg*$5MS6Dt@>3rdPW?)65A4<mfOG)>JdD5->a6HOcT z@XSfgOE1ZQXdvDiLjzAx>PXDVtV(swWxxz}o8*kdB0F#}g!*~=`G@;4WV@uMC6?xt zxMk*~`X*KcXI7<Rdd|=Q5d@|IMVWaeq&h9L!ZjCUE{bQ6jdeBwMJUJxsp)=+xmX;5 zH-t@!L4Gb{fFwjntUBlCm1L%u=9d<OSc#c=sYU+&PLRlT_X|~U*48#Ofi8$s(9JE* zC@#rX(9JC=%}cdSPt8j$%1l<!%}p#y&akbpFw-?NQP53S(DgS`&@C=Wu}#k_1?$&M z3-EMS&`rzB*G($T%qhvtgK$zSl2Z#xGV}9_A^f6}l1v5Nw9>rt%)AuclEkE(RFF(r zW^raxW=>{FrENxLN=hnJcV<DNZf0_tf^J%Jnr=Z+eo1OF$Sm8m(wrQKdHK1SCAw)v ziMgq|1^JnvvOqyMEwQ*VFFB(qKQF(uSQp)@Vo*+j8J1t9TU=6<pO>znn+B0c&PgoJ zfJtZO=RpDy9PvS!=@}&`nIi|J6HJum6=$aBrKTu=rkT-;7`$<2?ve^}0ytm9Cl)8> z#b@SamN1lnvuZ(UaYj6-aDX_&JtsdYF$cv7;8HHMIJGDsKeISLFEzzCH8;Pg5)!}h z@j0O43#`Twl+hExet<}3yA~DY7x|_Z7bm8tI+doSr51tHeH~_w!JB3+LFI{~kB`5z zD+5x|%n%=+lb@WJ1MyQqQ7YJ51^ER~|AglkrGV`7%yY^tDaMjbA*CZUvyv2~7BE{t znaMdZIV064GcOfn86+4Ti;5B}o%8dvGogiCQ7S0oVE7V$ycMMurxulgikSE)KeX}; zUomI_E0akrJuKm=!8OPmvm(P@DVZkcq$U=D0wO52B(n%qS0yHAyMb~HBpE=x!Qh@+ z5>S*{mYH8#?3q_wQdA1gY5~a%*`9f2i8+}m;5^{z!T<`Yct}9P3))0bw)8JbNiBjH zT3nu3Kw5B`CZ(ol=7EAF9-NJ##Rfxsd`3AaS3oQTy8&Fs1*Mjh7Ue-~Lr)yITLu2X zhVhv0!dm;7K&w}H>Sln&TYOSwNosLCLsEWz4m{n0>s)9<fB~cx8bpw6=aZUN0 zL26NANq&(nhBJ`s0V4zV)DpkciV~ElaLr`^S34p33@~G&V;LZk2~OQa280W!mcdYq zRJ$1(f_&}b3eDBozKIn9i6t36;QE*$+qDAH<_d6j$}GY32hKKGkT*2=(Q*sk@CO%O zpynGW3{i?cbRXc&t|p))=^6xb060frI2*5SGe`*ms=eb=Kt(FL-N=z=Xyl$+;#^u( zl$uu(kPJ%FXsuSfR+&TFWUv-2$m?!JsnC)tKE61)G$o%QJ18|LHL*A~B;P+6Twa$Y z=J=(Sr4}(j8ci79LvbKDdZBF}R|a@4PGtbabVx=~Y9b`J!x9x*eBmqIj6p5nGKTQX zoSe|&RJX+9l2CA6kJmxYCawYAxmgVH@uf+GLf6OyS4riX%K&a+f~+FJ#gIl>d__@W zB_w-+ib9OM#{jS4L9IuS6*wDlh6bSA18HHq;#CRtH^}3;SpAJXD<uZI;>b$Kv1|@4 zD_jGTa~ZOs=@DFjB9;D0;CeqE+!%)DcMKQfO|J0z1wBV#ua3YC-1ztskZ-{`+cU4E zDA7MDD>WI`v_dNB31)d@{~DTOBs$k5kY`9p3$Q{TR_B2_J{TS&BKa3*<QJ7Fz>^H9 zQ3$Tz7~;XrAxu{xdjt`2e!=nBgVB{C+c!U@G$%DQ)YFBGT#Be|(TXM<RcB(bE2Qd- z&rQuOD9TS`$cDAwK)D5)xB`+Hpp99Eyd<amqP$dwf)a3P5}%Y<RFs)o6knd0S;CN! zm{iPAoSF-1>6RAfq^1@y6la#C7BfHs4isMCW=07^E~JABQeA>!S_-7;%#fE9pOl%M zS{#sAl%1Nw5FZb-7TlD`OU#MS$t(t$m6->!JhLP*ucVkEFA3yC5FH-?c35U!I^2rf z(vsAQ_!5v=MX8{XfaLtrJP^0IATzI+0pcy^#9XjH(o;*y5_3vZ8S+YV;~`QYjSv>t z?s$abAtr-c!+A*|MTuFdCB<mg=Hw@5GsMT|rB;+Mfct2M=7=5|fu0#?zydrtVw;$f zQj}U;tW%nolA4wY>YV7pC3TBZlk>|`i(rbV+-pMbv7z~|G!N>-?999r25<)oOn~AY z7Ij(qnR#$+$wjG&C8_YZV<-UizS9^AQbAo9a1<2e7o!DnVo6C+d<jElJSb%$MF%AO zAqfziNI|tLLt;sOCPQA52PkPKC+32Bevs$`izF7MC&L{BF#wkKVD5#caHy@I^a@kq z3^6XTD7}mUtQXWx0*^4ngBpqqMTvPS@h+hFE-g+iDhAbp#i_~pc`3#5B@D@s^dIj8 zYHWhLRM~KcK&^}~ff|v_5FekKlUWRQd~QK}UXl|iSAfF@!~%OXFDV$D(;%KqEh$N5 zh>y=N&r2=BFc*?W<HJ&O^1)_+GjDEUMSKZbs)c$wttd4Wlouh=48<Ui!3_oFoy45X z^gK|<5R@DBK?4OT`svBZx`xKOY3}BxL76ZfWZNE8MTLb~yqSq^PG(+dg>HIYseVo- zsFeUt<VE`6&VinuJ{%PnC1a`pD~pHrLiLgh3K-z(_4M?yYQe7pJ_H$`oS&PUpT~d@ zfEPL`scFS}8Avh^r6@w+Q3r5mUoV3J<QGWyCoeGvg`bv~oQf=?pOK%Ns$ZF(lBl1Y zUs_bGUr>~v9-o|_mt0z;pKfR#pH!KhS{#og3Tlm}>bt|F7;+Oc^YoG#^h=A2K*0qH zd3}tKHZ<1H%uCKGO-Y3)gmN$yCV~3!V6&h~7>Y|$Qc~0OGN47JZgECpQEG~ANo7GQ zI8eYn%y@8q(93|O61Z$?Zel@3eo-nyN-u+<G%vHbBn1?FB`KNt5IQF_NiPF54UZFp zmQ}GZeEg5D0JH~(k%5Jw2Rw_<zyRAXFAQ4Uj72?YzX%h90K<f<s3w8*fy57>i5r6! z0Wb(KFo1RvAZhUgP5U!QGd#(M?9&Ii4<rrRugl0F&R_stYY!3w;Totp4ru0dfXxwO zP(V`;+Ny-jzdLaFYd_R{Ek}q;K>h^Tdk!k@0TqXx=YT7G?t<MT!r%g0ehxAK31f55 zYp}d9LkMVJE0_%-{(;SrV6Z^*7dvRt1A`<(MIXeS5Y-F}vWyH2f(+6Ou=5jOvU-dR z3_>tPNVF*qabFzbpzX*43{ngapz#GWN)fct5ynBHBXO9M!2(KSQVa~x^Ce(fK*uTx zf?NvPu?UVMh)f+0b9$lvg`Kwm^DpSy25kNXUFVKXd_N-tgA&9l6!I3>UI7O5WwMXJ z;wVbN9MEwe*vw}Gt*2)YfNuzatuo~Xi-WbI5F(&u|4dR09BARAh(rBDka`Ab2G}xv z@UCkH1_sc|dm#n^2K1G@hB(X##vvY$L%bd&&LqfC0L>RLPqc!>VH_lS5f1UgIK;0( z{RKPE0v5mTaj55JW?&Fx5@mqx(Sd~nXe~Cjc*$V_<qH9Z1Za5$JLka&WDbKg1MD0S zn7#Hm(s>dN@q8TOojAmoK<$N{{{gcXv}IZdw14&jQeZMLFzmr$&Iyn?Oqluf3J&$4 zW9q@>2HJTeA8@Gujze4=9G<9d1o13!h=Vr!Vv83~9O~0p7#Kk14|=%)+J7j(AkEML zJ@*7;CkR*IFbA|j7@NJTaHv1Y0x4G;q2|Nl1+<wBWG{Mo_ymVJwxD=nkY<2wfdSQ* zAa^o=_RoVEsDuIzaR<;|IR<HXISks#0n(X+L;V$~`(e9mVD9h5p?(EuF9gUyG<*by zdeGiIP&tFXE8qqWbDrZ6XJiBAM>I<r7#K95<veWL3@l%-hlVF?{}D`F7Hp0H1NycB zhT!C)5<|Uw(AYy#W;|#|a&l2gaY<=fnqD$PN@`JRdS-D+YEgViZhUf1eqJi52a=K> zpAMdEiccxYFDi~tEUjQj&d)8#Ni9iD(K7(ejAN>ZPs_~9j86p3uEeM2l@wJnfM@37 zQ%ZAlD;eVBk$B*)KZ;Ut+ZVZk4sD>u7ndf*yTlt97+6}y8!&*mo=~nKLwvkjkfX0_ zysMu}d^|&Zyt`j$ysHOP(8DE&A>Jj@&(YV@nIYcY$KT1(C*I%9E!Z_AKE%<<#}%X_ zKcxsfCZh-HCKkhbmXL9pczD=A0;8A#+{KAc1^3&aYQQb{c*r;f$bp{z@x>)6nR)T0 z#i=Q<hHX5w2OA#`w-4O(1w{&I&aWu7Ait<2J|{mh#V|fEKQSr4s07j{jgL>RNCbr} zctYF3-N)0(Io?RmNY51B>nkWN0mT`3>@+?jF)t-2H9jS?tSB`%9@NKA%gHYXH}?^p zxcK;#;(Vx5uqe2z2kNhZJEABif!q|I37G?mhYWKd_imwMwot?3p|h|Ei$PA$1o!!p zlH-d@5{pXWK`{&Wh_MMgjKCoh4;dVQ%Y!@$>F1*eAq6DJHHeNpG**xT)C3-&;QllE zlq9&Dip%UIxZ_}*ZD_9^uEE#@9Dwj4AgKMNc^GLY9_0Px?D*u2?D(|A%pAB8CZHZT zJQ=3u#=|@7P{Y8n6CWSq>kLomC{YB;B1ka}n(4)GH>mRtw-F=I(R~F9b?DFoD0so6 zD^SNkL$<gizbF+sXhC@b<iny8hIr5}N65Gy+)9v%u(1+IM1#hF@JNF^jUtT{<skFp z<CBVuVHSe3a6Hs$pcHEXk93%&un0sk*BBJ`C}9ceg2v}&7Uw3GBxl5zfr=P#(UcEf z#t@&93R;8!vNkyzl*8i_K`U<Ji@?*7u-sghS_B$|K^T*qk(!(xUuFRs+X0PTz;a7o zeqLT_PEI^%3t7Bph;KZiI1cf31{KC3pd}LU$OI3HLC2Hg<I{8V^FS^sDgl*!AnmX; zhoTuRhbE?^AaZ9$ViI&TltHh!GPfi#i9xTpqzFQ1z*yiBjRFR}y!?_>z4W|Ny@Ddp z1Y}7ik`Q<_M>jJCD&*+osSB!Vz{)cci!&JXQY!O`D{~=qNf85B1{zW*ocJOJy`t2d zM34q3t01R@K@Svh40;7QC3@-kB@jk&YBGaf322y94^;Os=oRIIk|Bd$Y6i5n$w(<e z@EG)<6%3^2ffxy6gA9PNQ!4Wkb2F0}^dP1s6&Ew;fd+3<^GX=>Qc{yj)8iA167$ki zi(%Z%ytI56J25E<G-eD{n3I{83X>@Y`5U4iBpeUoW7hnniAaO{%dms27#Jj=;~6j- zbjTI5iLiDMOiY=9fq@;|*N2E$K=s3D1Bfu3gta$d0%mCXGobomG<35hOgRIr-3Ai? zjfWuH4;znx(eU;nR0Fzx&;bMA{{M&f&Ow_fK}umXY}|qkBnaBn52ayLA_D^hH<JHv zK-~|c8=w|~+z1LgnExf924sSE6eH=6fGU8|C!yv+m4o(<z?fjV5OkUhlKYjwM+Px4 zz-ZX{X)yOgMvV~hUB|${@DE9U2UI_dhMj+h?tZZ43=9mt&@l&?xhJ6dVRXY*h)S6K zQ13Co{0};$0u)3}5M>M=hae0X4GTw*e$eJBbp4>cGoWw<$%A#m`g>3sl)k~@Py%EZ zlnJIlhnXSkSAgn+(V*?hV1-aZ0F4HXmm%vva0#LSM#I!YL_vKq2n!~@0h<3{?!N%l z52Gi*0v4hTG$IIQ!SsU;nn1Q6)-Q+A0y$viZ~~?eCIA}0L)H%)mw?f{FojSWJ^YSB z-4AyrbR3ESN{65g5~1hEvuOHZ<9RR|bi@VJYA}Uv|7|q=JD}r%FdA(*2znGB*eEdZ z6m*CaG!KFVVB;VHHK0&|9o+|#fnZqrgVA3=heROhmw=8tN<j6ahc`?gj0R<BekA=G zQ2iQ2>gQo(0Bx>kfE5$4aZd}Veg|m8fbuWM2QYhK?ph5EKbU^l_-F-a0Fi-#p#u^O zAgy2w(+{IX!Q-k7aQoro3=I&C4?t(pfptO%^!S%%goH87e%QFc1JD2(0|Ubfh%pe& z44^SkI1|iJfZC5<&%pF+gH<62m~k*#6RIDf0>a`3otwwNzz_i8!bzAun1BTi{n1eU zp&~Gq5E@-S=-@(hF_6j)C6I`#0v!+t5`bcKwV?53bTN=pttyEANuY@ekN^~;tBr%Y zA3gl`G(+^C0S(wg^@1pvei#itRgr;#0bPH`bclY?sbwI2Fbva&OhZ({R6yt(Ga;f9 zQ1^q{0if-;uyhBjKS0v3v;)xzAwPfyP8k>&)L{iHL>QFapezU_h?MsrA`nu1CB*(p Km_s4L82SN)jfLm{ literal 0 HcmV?d00001 diff --git a/G17_bykes/main.c b/G17_bykes/main.c new file mode 100644 index 0000000..72610ca --- /dev/null +++ b/G17_bykes/main.c @@ -0,0 +1,329 @@ +#include <stdio.h> +#include <stdbool.h> +#include <stdint.h> +#include <stdlib.h> +#include <unistd.h> +#include <pthread.h> +#include <time.h> +#include <semaphore.h> + +#define CAMION_CAPACITE_MAX 4 +#define CAMION_CAPACITE_TYP 2 +#define SITE_CAPACITE_MIN 2 + +//#define NUM_THREAD 5 + +#define DEPOT 0 + +sem_t *sem_BorneFree; +sem_t *sem_BikeFree; +pthread_mutex_t *mutex; +pthread_barrier_t b; + +bool end = false; + +struct habitant{ + int num_thread; + int nb_trajet; + int max_trajets; + int i_site; + int nbSites; + int nbornes; +}; + +struct camionette{ + int num_thread; + int n_Velo; + int i_site; + int nbSites; + int nbornes; +}; + +struct site{ + int nb_bikesParked; + int nb_P_waiting; +}; + +int rand_Dc(); +int rand_D(); +//void habitants_PassiveMode(void *arg); +void *Camion(void *arg); +void *habitants(void *arg); +struct site *sites; //this table is the size of the number of sites, each sites has NParkinglot and each numbers represents a free parkinglot + + +int main(int argc, char **argv){ + if (argc < 5 || argc > 5){ + perror("erreur d'arguments d'entrée\n"); + return EXIT_FAILURE; + } + int nbSites = atoi(argv[1]); //S 10 + int nbHabs = atoi(argv[2]); //H 100 + int nbTrajets = atoi(argv[3]); //M 10 + int nbBorne = atoi(argv[4]); //N 10 + srand(0); + + + pthread_t *threadHabs = malloc(sizeof(pthread_t)*nbHabs); + pthread_t *threadCam = malloc(sizeof(pthread_t)); + sites = calloc(nbSites, sizeof(struct site)); + struct habitant *habs = calloc(nbHabs, sizeof(struct habitant)); + struct camionette *camion = malloc(sizeof(struct camionette)); + + for(int j = 0; j<nbSites; j++){ + sites[j].nb_bikesParked = nbBorne-2; + sites[j].nb_P_waiting = 0; + } + sites[0].nb_bikesParked = 0; //depot avec 0 velos au depart + + camion->i_site = 0; + camion->n_Velo = CAMION_CAPACITE_TYP; + camion->nbornes = nbBorne; + camion->num_thread = nbHabs; + camion->nbSites = nbSites; + + + sem_BikeFree = malloc(sizeof(sem_t)*nbSites); + sem_BorneFree = malloc(sizeof(sem_t)*nbSites); + //mutex = malloc(sizeof(pthread_mutex_t)*(nbHabs+1)); + mutex = malloc(sizeof(pthread_mutex_t)*nbSites); + + for(int x =0; x<nbSites; x++){ + sem_init(&sem_BikeFree[x], 0, 8); + sem_init(&sem_BorneFree[x], 0, 2); + pthread_mutex_init(&mutex[x], NULL); //mutex du camion + } + + pthread_barrier_init(&b, NULL, nbHabs); + + if(pthread_create(threadCam, NULL, Camion, (void*)camion)!=0){ + perror("thread creation error"); + return EXIT_FAILURE; + } + for(int i=0; i<nbHabs; i++){ + habs[i].max_trajets = nbTrajets; + habs[i].nbornes = nbBorne; + habs[i].nbSites = nbSites; + habs[i].num_thread = i; + habs[i].nb_trajet = 0; + habs[i].i_site = (rand()%(habs[i].nbSites - 1))+1; + pthread_mutex_init(&mutex[i], NULL); //mutex par habitants + if(pthread_create(&threadHabs[i], NULL, habitants, (void*)&habs[i])!=0){ + perror("thread creation error"); + return EXIT_FAILURE; + } + } + + //pthread_barrier_wait(&b); + if(pthread_join(*threadCam, NULL)){ // va retourner un truc après + perror("thread join error"); + return EXIT_FAILURE; + } + //thread join + for(int i=0; i<nbHabs; i++){ + if(pthread_join(threadHabs[i], NULL)){ //va retourner un truc après + perror("thread join error"); + return EXIT_FAILURE; + } + } + + //free the memory + for(int i=0; i<nbSites; i++){ + sem_destroy(&sem_BikeFree[i]); + sem_destroy(&sem_BorneFree[i]); + } + for(int i=0; i<nbHabs+1; i++){ + pthread_mutex_destroy(&mutex[i]); + } + pthread_barrier_destroy(&b); + free(threadHabs); + free(threadCam); + free(sem_BikeFree); + free(sem_BorneFree); + free(mutex); + int sum=0; + for(int i=0; i<nbSites; i++){ + sum+=sites[i].nb_bikesParked; + } + printf("nb de velos en fin de programme %d\n", sum); + + free(habs); + free(camion); + free(sites); + + //srand(time(NULL)); + //nb sites, nb habs, nb de voyaegs par habitants, nb de bornes par sites + return EXIT_SUCCESS; +} + +void *habitants(void *arg){ + struct habitant *hab = (struct habitant*)arg; + int j=0; + int val; + // inside a Mtrajets loop for each habitants + while(hab->nb_trajet < hab->max_trajets){ + //waits for a bike in site i + //if(hab->i_site==4){ + pthread_mutex_lock(&mutex[hab->i_site]); + printf("(GET) person %d starts from terminal %d (%d bykes, %d persons waiting, semVal : %d)\n", hab->num_thread, hab->i_site, sites[hab->i_site].nb_bikesParked, sites[j].nb_P_waiting, val);//sites[hab->i_site].nb_P_waiting); + pthread_mutex_unlock(&mutex[hab->i_site]); + //} + + sem_getvalue(&sem_BorneFree[hab->i_site],&val); + if(sites[hab->i_site].nb_bikesParked<=0){// && hab->i_site == 4){ + printf("person %d is STUCK at terminal %d: rack empty with : %d bikes\n", hab->num_thread, hab->i_site, sites[hab->i_site].nb_bikesParked); + } + + pthread_mutex_lock(&mutex[hab->i_site]); + sites[hab->i_site].nb_P_waiting += 1; + pthread_mutex_unlock(&mutex[hab->i_site]); + + + sem_wait(&sem_BikeFree[hab->i_site]); + pthread_mutex_lock(&mutex[hab->i_site]); + sites[hab->i_site].nb_P_waiting -= 1; + sites[hab->i_site].nb_bikesParked -= 1; //critical section + //if(hab->i_site==4){ + //printf("person %d leaves terminal %d by bike\n", hab->num_thread, hab->i_site); + //} + pthread_mutex_unlock(&mutex[hab->i_site]); + sem_post(&sem_BorneFree[hab->i_site]); + //if(hab->i_site==4){ + printf("person %d leaves terminal %d by bike\n", hab->num_thread, hab->i_site); + //} + + + //go to place j = rand()%nsites and j != i + do{ + j = (rand()%(hab->nbSites - 1))+1; + }while(j==hab->i_site); + usleep(rand_D()); + + + //waits for a parkinglot to be freed and deposit his bycycle + //if(j==4){ + pthread_mutex_lock(&mutex[j]); + printf("(PUT) person %d arrives at terminal %d (%d bykes, %d persons waiting, semVal : %d)\n", hab->num_thread, j, sites[j].nb_bikesParked, sites[j].nb_P_waiting, val);//sites[j].nb_P_waiting); + pthread_mutex_unlock(&mutex[j]); + //} + + sem_getvalue(&sem_BikeFree[j],&val); + if(sites[j].nb_bikesParked>=hab->nbornes){//} && j == 4){ + printf("person %d is STUCK at terminal %d: rack full : %d bikes\n", hab->num_thread, j, sites[j].nb_bikesParked); + } + + pthread_mutex_lock(&mutex[j]); + sites[j].nb_P_waiting += 1; + pthread_mutex_unlock(&mutex[j]); + + + sem_wait(&sem_BorneFree[j]); + pthread_mutex_lock(&mutex[j]); + //deposit his bycycle + sites[j].nb_P_waiting -= 1; + sites[j].nb_bikesParked += 1; //critical section + pthread_mutex_unlock(&mutex[j]); + sem_post(&sem_BikeFree[j]); + //if(j==4){ + printf("person %d leaves terminal %d by foot\n", hab->num_thread, j); + //} + + //does whatever he has to do for a D delay time (waits for rand() 1000->1999us) + usleep(rand_D()); + //changes his position from site i = j (j is the new site) + hab->i_site = j; + hab->nb_trajet += 1; + } + //printf("machin bidule finished : %d, tot_trajets = %d\n", hab->num_thread, hab->nb_trajet); + + pthread_barrier_wait(&b); + //printf("machin bidule a passé la barriere !!!! : %d, tot_trajets = %d\n", hab->num_thread, hab->nb_trajet); + + pthread_mutex_lock(&mutex[hab->i_site]); + end = true; + pthread_mutex_unlock(&mutex[hab->i_site]); + return NULL; +} + +void *Camion(void *arg){ + struct camionette *camion = (struct camionette*)arg; + int tmp_nbBikes; + + while(!end){ + //1 : for each sites from 1 to S (0 is the depot) + for(int i=1; i<camion->nbSites; i++){ + //spreads the bikes evenly + //too many bikes in this site + tmp_nbBikes = camion->n_Velo; + if(sites[i].nb_bikesParked > (camion->nbornes-2) && camion->n_Velo < CAMION_CAPACITE_MAX){ + while(sites[i].nb_bikesParked > (camion->nbornes-2) && camion->n_Velo < CAMION_CAPACITE_MAX){ + sem_wait(&sem_BikeFree[i]); + pthread_mutex_lock(&mutex[i]); + camion->n_Velo += 1; + sites[i].nb_bikesParked -= 1; + pthread_mutex_unlock(&mutex[i]); + sem_post(&sem_BorneFree[i]); + } + + pthread_mutex_lock(&mutex[i]); + printf("truck removes %d bikes at terminal %d (%d bikes, %d persons waiting, %d left in truck)\n", camion->n_Velo-tmp_nbBikes, i, sites[i].nb_bikesParked, sites[i].nb_P_waiting, camion->n_Velo); + pthread_mutex_unlock(&mutex[i]); + } + // not enough bikes in this site + // until he gets at least 2 bikes (or the camion is empty) + else if(sites[i].nb_bikesParked < SITE_CAPACITE_MIN && camion->n_Velo > 0){ + tmp_nbBikes = camion->n_Velo; + while(sites[i].nb_bikesParked < SITE_CAPACITE_MIN && camion->n_Velo > 0){ + sem_wait(&sem_BorneFree[i]); + pthread_mutex_lock(&mutex[i]); + camion->n_Velo -= 1; + sites[i].nb_bikesParked += 1; + pthread_mutex_unlock(&mutex[i]); + sem_post(&sem_BikeFree[i]); + } + + pthread_mutex_lock(&mutex[i]); + printf("truck adds %d bikes at terminal %d (%d bikes, %d persons waiting, %d left in truck)\n", tmp_nbBikes-camion->n_Velo, i, sites[i].nb_bikesParked, sites[i].nb_P_waiting, camion->n_Velo); + pthread_mutex_unlock(&mutex[i]); + } + } + //2: goes to the depot to rebalance the truck's content to 2 bycycles + tmp_nbBikes = camion->n_Velo; + if(camion->n_Velo < CAMION_CAPACITE_TYP){ + if(sites[DEPOT].nb_bikesParked > 0){ + while(camion->n_Velo < CAMION_CAPACITE_TYP && sites[DEPOT].nb_bikesParked > 0){ + camion->n_Velo += 1; + pthread_mutex_lock(&mutex[DEPOT]); + sites[DEPOT].nb_bikesParked -= 1; + pthread_mutex_unlock(&mutex[DEPOT]); + } + pthread_mutex_lock(&mutex[DEPOT]); + printf("(DEPOT) truck gets %d bikes at terminal %d (%d bikes, %d persons waiting, %d left in truck)\n", camion->n_Velo-tmp_nbBikes, DEPOT, sites[DEPOT].nb_bikesParked, sites[DEPOT].nb_P_waiting, camion->n_Velo); + pthread_mutex_unlock(&mutex[DEPOT]); + } + } + else if (camion->n_Velo > CAMION_CAPACITE_TYP){ + while(camion->n_Velo > CAMION_CAPACITE_TYP){ + camion->n_Velo -= 1; + pthread_mutex_lock(&mutex[DEPOT]); + sites[DEPOT].nb_bikesParked += 1; + pthread_mutex_unlock(&mutex[DEPOT]); + } + pthread_mutex_lock(&mutex[DEPOT]); + printf("(DEPOT) truck deposit %d bikes at terminal %d (%d bikes, %d persons waiting, %d left in truck)\n", tmp_nbBikes-camion->n_Velo, DEPOT, sites[DEPOT].nb_bikesParked, sites[DEPOT].nb_P_waiting, camion->n_Velo); + pthread_mutex_unlock(&mutex[DEPOT]); + } + //3: pause betweem 100us up to 199us + usleep(rand_Dc()); + } + printf("end camion\n"); + return NULL; +} + +int rand_D(){ + return (rand()%999)+1000; +} + +int rand_Dc(){ + return (rand()%99)+100; +} \ No newline at end of file -- GitLab