From addfb4ee4859198d541231d1fb510c51e69d2618 Mon Sep 17 00:00:00 2001 From: Khoi Hoang <57012152+khoih-prog@users.noreply.github.com> Date: Tue, 10 Jan 2023 18:37:25 -0500 Subject: [PATCH] v2.1.0 for `ESP32_S2/S3/C3 & LwIP W6100 Ethernet` ### Releases v2.1.0 1. Initial coding to port [AsyncUDP](https://github.com/espressif/arduino-esp32/tree/master/libraries/AsyncUDP) to ESP32_S2/S3/C3 boards using `LwIP W6100 Ethernet` 2. Bump up to `v2.1.0` to sync with [AsyncUDP_ESP32_SC_W5500 v2.1.0](https://github.com/khoih-prog/AsyncUDP_ESP32_SC_W5500) --- .codespellrc | 7 + CONTRIBUTING.md | 81 + Images/ESP32S2_DEV.png | Bin 0 -> 360117 bytes Images/ESP32S3_DEV.png | Bin 0 -> 300581 bytes Images/ESP32_C3_DevKitC_02.png | Bin 0 -> 210355 bytes Images/W6100.png | Bin 0 -> 118672 bytes LICENSE | 8 +- LibraryPatches/esp32/cores/esp32/Server.h | 35 + changelog.md | 32 + examples/AsyncUDPClient/AsyncUDPClient.ino | 192 +++ .../AsyncUDPMulticastServer.ino | 190 +++ examples/AsyncUDPServer/AsyncUDPServer.ino | 181 +++ .../AsyncUdpNTPClient/AsyncUdpNTPClient.ino | 261 +++ .../AsyncUdpSendReceive.ino | 279 ++++ .../multiFileProject/multiFileProject.cpp | 12 + examples/multiFileProject/multiFileProject.h | 58 + .../multiFileProject/multiFileProject.ino | 75 + keywords.txt | 64 + library.json | 46 + library.properties | 13 + platformio/platformio.ini | 160 ++ src/AsyncUDP_ESP32_SC_W6100.h | 131 ++ src/AsyncUDP_ESP32_SC_W6100.hpp | 183 +++ src/AsyncUDP_ESP32_SC_W6100_Debug.h | 93 ++ src/AsyncUDP_ESP32_SC_W6100_Impl.h | 1444 +++++++++++++++++ utils/astyle_library.conf | 70 + utils/restyle.sh | 6 + 27 files changed, 3617 insertions(+), 4 deletions(-) create mode 100644 .codespellrc create mode 100644 CONTRIBUTING.md create mode 100644 Images/ESP32S2_DEV.png create mode 100644 Images/ESP32S3_DEV.png create mode 100644 Images/ESP32_C3_DevKitC_02.png create mode 100644 Images/W6100.png create mode 100644 LibraryPatches/esp32/cores/esp32/Server.h create mode 100644 changelog.md create mode 100644 examples/AsyncUDPClient/AsyncUDPClient.ino create mode 100644 examples/AsyncUDPMulticastServer/AsyncUDPMulticastServer.ino create mode 100644 examples/AsyncUDPServer/AsyncUDPServer.ino create mode 100644 examples/AsyncUdpNTPClient/AsyncUdpNTPClient.ino create mode 100644 examples/AsyncUdpSendReceive/AsyncUdpSendReceive.ino create mode 100644 examples/multiFileProject/multiFileProject.cpp create mode 100644 examples/multiFileProject/multiFileProject.h create mode 100644 examples/multiFileProject/multiFileProject.ino create mode 100644 keywords.txt create mode 100644 library.json create mode 100644 library.properties create mode 100644 platformio/platformio.ini create mode 100644 src/AsyncUDP_ESP32_SC_W6100.h create mode 100644 src/AsyncUDP_ESP32_SC_W6100.hpp create mode 100644 src/AsyncUDP_ESP32_SC_W6100_Debug.h create mode 100644 src/AsyncUDP_ESP32_SC_W6100_Impl.h create mode 100644 utils/astyle_library.conf create mode 100644 utils/restyle.sh diff --git a/.codespellrc b/.codespellrc new file mode 100644 index 0000000..00fe362 --- /dev/null +++ b/.codespellrc @@ -0,0 +1,7 @@ +# See: https://github.com/codespell-project/codespell#using-a-config-file +[codespell] +# In the event of a false positive, add the problematic word, in all lowercase, to a comma-separated list here: +ignore-words-list = , +check-filenames = +check-hidden = +skip = ./.git,./src,./examples,./Packages_Patches,./LibraryPatches diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..2e22348 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,81 @@ +## Contributing to AsyncUDP_ESP32_SC_W6100 + +### Reporting Bugs + +Please report bugs in AsyncUDP_ESP32_SC_W6100 if you find them. + +However, before reporting a bug please check through the following: + +* [Existing Open Issues](https://github.com/khoih-prog/AsyncUDP_ESP32_SC_W6100/issues) - someone might have already encountered this. + +If you don't find anything, please [open a new issue](https://github.com/khoih-prog/AsyncUDP_ESP32_SC_W6100/issues/new). + +### How to submit a bug report + +Please ensure to specify the following: + +* Arduino IDE version (e.g. 1.8.19) or Platform.io version +* Board Type (e.g. ESP32S3_DEV, ESP32S2_DEV, ESP32C3_DEV) +* Board Core Version (e.g. ESP32 core v2.0.6) +* Contextual information (e.g. what you were trying to achieve) +* Simplest possible steps to reproduce +* Anything that might be relevant in your opinion, such as: + * Operating system (Windows, Ubuntu, etc.) and the output of `uname -a` + * Network configuration + + +Please be educated, civilized and constructive as you've always been. Disrespective posts against [GitHub Code of Conduct](https://docs.github.com/en/site-policy/github-terms/github-event-code-of-conduct) will be ignored and deleted. + +--- + +### Example + +``` +Arduino IDE version: 1.8.19 +ESP32S3_DEV board +ESP32 core v2.0.6 +OS: Ubuntu 20.04 LTS +Linux xy-Inspiron-3593 5.15.0-57-generic #63~20.04.1-Ubuntu SMP Wed Nov 30 13:40:16 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux + +Context: +I encountered a crash while using this library +Steps to reproduce: +1. ... +2. ... +3. ... +4. ... +``` + +### Additional context + +Add any other context about the problem here. + +--- + +### Sending Feature Requests + +Feel free to post feature requests. It's helpful if you can explain exactly why the feature would be useful. + +There are usually some outstanding feature requests in the [existing issues list](https://github.com/khoih-prog/AsyncUDP_ESP32_SC_W6100/issues?q=is%3Aopen+is%3Aissue+label%3Aenhancement), feel free to add comments to them. + +--- + +### Sending Pull Requests + +Pull Requests with changes and fixes are also welcome! + +Please use the `astyle` to reformat the updated library code as follows (demo for Ubuntu Linux) + +1. Change directory to the library GitHub + +``` +xy@xy-Inspiron-3593:~$ cd Arduino/xy/AsyncUDP_ESP32_SC_W6100_GitHub/ +xy@xy-Inspiron-3593:~/Arduino/xy/AsyncUDP_ESP32_SC_W6100_GitHub$ +``` + +2. Issue astyle command + +``` +xy@xy-Inspiron-3593:~/Arduino/xy/AsyncUDP_ESP32_SC_W6100_GitHub$ bash utils/restyle.sh +``` + diff --git a/Images/ESP32S2_DEV.png b/Images/ESP32S2_DEV.png new file mode 100644 index 0000000000000000000000000000000000000000..b73e4d0996bd15a9706e3c8e0982753dd56f61a1 GIT binary patch literal 360117 zcmbTeWmuGL*EVdRA|VJ!cMhEblG5EhbV_%p1xUld&>=0|At_P<(%s!4-Sr-L-PirR z&$hjPzHk1_#&FIV$FX8x``Xt8DauQrBH<%Fc<=yKN>Wt$!2<;12M-<%AU*=0)Sgl% zg15&`!cwY;h=|jR3Jc&*bZ0S5XB9g$XE#Gf(+4W%F3!%Tj>aDco
Ff7Bt+>a;JVh4bE|a$Uld}O<@QC-a`SA3cnrjeLKB?U8~ zZ6!q)LT}Jx)@m5vbf$lEu1=00279HGm?K9$%tI_=LLxA*A|AP+7?0{>J(8H3nu ztDvY)9|s{HUfq;4 a*TQ)U}Pe`Py 9#4 z#C0cfuu6mFcP5qdP4T4U4vYR5Jk>iOm@?t}M+pCwSDtU?QcFZB8d0ov{YnK+^l89~ z-(7R9DUP;|Fp+h750dR~Rw%<7?_NViW229~{eC{0gtFOMUT*4TpIei0#bj(VFDvUo zHnY#>)~R?kqoAPRYNjQqH7ZACL;yA7<8xD2NE9tTPI5KT>3dS3Z(2SS$m)B0ac65g zS7$ZORE}=Vg4=WmXZE| +BCm@Z0cxx*o^mi0EP0QF| q%)zqQY;kg60{jWDpJ{YiI1SRvjg|F1Iqd0{+4ifiShB=9*1oy zZgUBU3gyru>gdV!Bfu003hG0liOS{SVPR2C9~gQHM?Qbfss&fI1w2g#B)V&4sJ!0X zw8Y4@x+p8_^R*((6&oO7Jb8ch0!9V~7JO7hV2dlR^;A+B7Imei_7`>upd{4khfzj7 zChHRBOzJgZdugGhsK~<3j){oi=;# zy1W33Dbc-orZY5(z3CLDHo-LPlp~}@`J2Q3&8i%ZjT28;pEPzz*Ae94S=W}1W6bF2 z=-ocr-G18LMH)yhvKAzm(F_Obc6NK`=d}P^B{}r7{J! PIulorl_fD;8lzbKmOs+9XnfpcNo|FC1c~jUC(nf8-&Av zfTy2YzA8e-tf@f@0Fy>OGInlqauR?5uJd=Qxx+83&=C<}x&TQYSB-~boJF-5obLw; zCNn&!ww?9-GxL3HOkE0=lbd^Wd5J;v#+tLB*DN6(w-Yy7eVaC0%+GHg{%`}}PnFwZ z55CmAyu906-{6d6Pahc>8B rZ*NlLWkP;6EbVd){8*0C477Pw? z$O%YRKfBLNoEwDfrXx#(v@6KUr#hp8zN`YQG(>*LVxTRqjrh^~y6BwZ4%6pud#AW) zW*Mz>J^8RC;wz;WQM0RZlQD^|UWf0>`|CKBL;pW*#oxG@n_OiNYN#rWcE!hmKV5Vw z__E3EeZUHo8h-uy_1z)!9UCBNd3fp?c0nDo-j`x!XQ!YE$Hc@$MMdqg`OeX^zEbwf zVWwEO{!jg06IDt#tV+nyKbz{MG_>fnk9W@- tVRM>@T$Nd!2%wMqhtF^MS8HC`jcA z?C(H*(A9~9jdT6bZ>?3OU=&T@d;wE|udG_eh`$m0U4QC5?d0JKb_6u>>Q`Jc2WyQx zU!<-B6Gae;PfPRK%#Pb}^-@t$(b7r~&(v~?0R`%cHQ8tG@SgsD1+4@b^v@OV`t@oD zs1YCaBWr}Z7w6=d?aeh71e*i)hPnBgO{xxr!g|+T=zJPMfFY;d+|JPj4-bz~nI>q* z`CK{!RuBN%jxYk?UDT-wRHB)K!?_Cmzke%Yf!qozUGL@XxTs>kHc{%E_AaH$nwt7q z+a&=W@AG|F%=04kdY5f=z>JQM;~*jcW8B{6a!CGY&XUBaojd&GQwwMfC@))e?Y-#l z3=EX`RiX_@YUxQlB!4EIS{6aU2v*>K08*3`6x8RB$o`=&3&@U&X@+gOP)Jou#$p49 z0A(yFmVA7C03 fws<_nN5)Z%qjP!y>B*^Ykv5TA^PInL`+`=G>+ zpxG7Q>jr`?F;tF@FV&Iq_*&x@kN>1Op+jya6Rl(Vnf=+ov{|AcWz%H$&SVRRZH6Vi z;u(5yW8)9XyIa)jHhq;~w{#@HIp-G_Q&(-qRTy`Mm-y^jfu_^*PmHT(S#Fck0nxo? z)1Y4oT28~7&iB9!G|PWteEHnk=;H$p1UJmkK+Tg|R1uoB32-Dl!`MU%TkIgh@0!A+ z4f$i~bqnAST!AZpvl`=?`|#)pjgWhP zOdHhonJos2SnU9CP)LNw%jWcgOV8A@($mv7Hp&boc4^TNSAw1e2L}jEFJA=G1_KTk z&|vhs*nIsGnPn@OIm&q`Pao5A#H5dt %nX$4O5 z6y|>w3Mb}tp)j~@nwTYlCZT%nxR*~8f#098VJkxxT;)D5e2Wk0<(dqD%_=M;+}qkp zO-e%c7d~*G** pqdZ3H#nucFmhBX z0c{CoNIOhi+JSI E?d|Q6(Zv)2fCk>}&c}rK6C41F9l2pp z^l)i^*cG)wP0TS*6h@pZuK@V=*Dn?+mAs<7!EF~H{*uB$7rXqO#qdn1?Nm-rix9BY zHxEY@6}IJu{N>HgIH%0S5S36`i5uYj?)1WvQ2TD0{-fq=Mj*< A8^+glH#`EU}@gTC4Hm;NW0*pGu++3yQX$o)Q$w37|U*3(MagBH(7n zw|!1VHAK=EPIr0Lr#=mD>db9~Wz9}lSL@chg4SZuO1XiSE2u-XtF2pbCCH;LE-up3 z)1#tZruFmg+9wM*1*kzdttTQo)=sayI~9^Qwzs2AwenPf(}TV$@6Bg1@~Gi=^7;+- ztl6k%K?>eKK}#E_96MwcIJu4G6dN};Hy>Yl=>n3!aJu5RqFrwmTx$!9uC6XA_BC@3 z&&{E1t_YGiQ>}D^o}M1N#*?vvVpN@4`$YhUXyy7Ne0Gdq!C#>?#){pDCcb<_v?5D2 zT^qh>kvp7lXfL@6sVq#P>2&aLz53F!aN-G&u#Z4mubGU_;}!#Rpy=6%1sDxZ-3`e0 zk&)khec=%i(fK+s%BsprEG(=URdG&>FCSpiw%WhVl6rYKIq9S@ddfX6F7U&!sZJcF zHZ{UT$(bAWg)=T~*g%#7tl#wE5ZL(#KQ5C@wYRbk$q(AJ+Hc&*3QU9A6_Sd6-<*{O z+J@aN&@46IV7%eCYv!sUZFJSS{PnP|?&D;Iob|43cq+^@Ky#d2S3S6#@k@I2JO=Y= z*)zMx7Eyp}odjW?+4le$qZuTv`N_%WLrdaPA(RAS1*18eYp!bMiA;dmgh1?>>zJ$b z@o{lUQTOCi`Aj*rEv>9ne5KPBDKp+nYCjKOu7uhM2?^QQ6oD=;rEs`=I8YEEf#8pX z1djh+Tf1S;eR+9VUQrQO*(ASkbRnO@H#t2`FNHDq3gF jJqU~YZWN-l3M7H~OiN4TT)QSSMd3a_V z2qpTAIWArI{D A28jVF(}60}}&Hs`aDx<%7-5&5s{Hwn-7
@iUkP?>E~i;i$Uq6wJ7o+ zM>JCyfiXi*UO%&_0?>5MK+KcE=BmUlZxynSQk+fSWY=Hs!)A%U`yqJwR8ESHtJ5{_ z*GR(J?v5~HHXbwfxVsB`R=}@TI^(D41{2{7e4usMuwmHEsi;OUFc|{bcilk1eiDDW zsvaw!3lwXcJ3FF?Pd*6+wgQeeOhM}At#rsXsS~4m&u+~;2(Ml{6Rgei%u>o$R#qUC zb&nbqj6yXuB=RX)Q8Jb3PC#Nrs1B%;0)b9d_59{`xicbqE1M~fesF>tuX)~Y?RP@z zoZb+L=Wvc3Fg$JQ?MakgkcDH^g1E!$^Un;P0~ugh87nXE)$!&qX!K=3!b3wrn VJRi)K-ZYiiiC&THpm%^%s#L9VdvDgHMSZ72Cabif*;@Ncc^b|wFSnWUq z^(2m-+2%~!ASJ8)L~Ae$lHb%cw|qb-=u2qaP+AJYhIKVocCRe8im`E~=M7t=DxI3V ze7Jf6D#9a>DR5Dk=BY7)fMV+8_;{bM-$4gZ3XC-~uyi`bJk^tv6IwaH;Eb_>%5Zlt zd;$VMCDXpy0u_5ra5QCJP0iWw1a`juVGdnAJ>P{NA2`H9;uLjt!H<S`&nIR83Bn zGXNdQ5Y?0k8`X+XMlzG!FrXD0x7uL&Lo#bwwYBah?(Vj}bE}TuXKf2cyUPL5Svb5I zW13((2_ypvC_^S}uerD=J_8=Rb#Z@SAQD88Dyz6IlR7*eh1?iyXp!r8%Z!p0Xx5Hb zzH*-J_f>3GxU;HbvTNhC);)zo-=eC<>b8s1bmw$X#kKL1kFEz&<@S8uCm`{R{BvY0 z?e$SJYfTl4Db;V0Gin)Rtgz(-kID6HYiv5^bs~iw4>Yg|9hF_ev{-TTLspZ_0v%)4 zI`GP`= L^i*3vk0add-ff=R40nj}Fu^{-tD8 L7x0 z4U}$FZ=M6b95e_u)m(G|Y#J@D@WDew03x1W*=b2hNs`sny>7o6qoSiL@+~KyA08c+ zJ2_%w4_JeYENKW9J|Us(ycD# W&P!%Ru&()LR`uf(3^Hu_xb~H=9Qnfc4 fQ8iCy=QOauN=n~)xYJlQGGch_3u?|1jgrazqvOUd%p3%wwtp}b9)u;_4% zgO(&a^MYh3XA*6Dc_$__xl~Sm@W!(jWVuOfTNBLu^6!f3)SIA1eZ9S-mQ`6V7Tem| zK)b@21$T%~4fSd3z4%mF+Sk_h4`4Q>^;OhhRB^-bZ`pb31%UIgvyY`{WdT{!vI>KD zZtskjP=#{#9_X4?^#1;h9&!LmfmVPIho&E&%{ZY&VFRrS&|?Dbce8nR{mg@Z?lY>Q zni@Qk>0Vw85Mc>uLt*1!2qC%F--ttfxLgpcrkCZh3%S;0jLRl|{(SV^ure|G1Jy@T zXE!%yCMKg$ATf2_oigRXw+r|YZ_Xi29`c1x*YO!(uloD?{%s_uG$D?nzOU^5v%O6L ztE;W$21-7|kZshb^|ODDE-0nQb$Q3uY9~q!A8+QZA6<2Jc6y}JoHzl#Q6{<}8BaLz z4Nx8fUwunzf3PG5iiWhbw8PGr3`n+e7YmAmcQ#6awh~reOjc+irPS?v{gUzA?>{6p zh>rW-e}k*bVT`lzRfFte>xfme8zuOf$$Jm)HZQI0u0Qj)2uZBo8|wN-)#?O(?=MA@ zUrg})$$R{^U-pnPWUl%fnj Oo6 z!^~J3q=}_L%rJ2YadFr-PflRQHvmph34-ms9|Fmj3h1w90qW%FNWR94m1|rN3atZr z8Gxsa=nwhQ=E49ECyDv)GrGkBCm&z(1q-OQwV_aqK~}KK1(&s5CR636J<{2y^L9f< zzP@@eN}w4T3c-32C?&%6IZ`=K)+AGp_ru%whVe1QPleEd$N^A4fSQGL8&xq3dSp4O z@)74k^2^E&0 !Qz=fyI|t~6{sH?8m?zYh08R5 zFWNghI|DwlyWE;B0R%Bvg#aYj(%d{gF%b#j5x6}X`Q(Xe8*L$>mcz7HMztj?{=d7s z>6n=AE6KoCN~~bWIq)y4K_k4|I-7~omfd2sry^NC(i$4MT`}3in;Ot;7F-m)5-#Eh zUc&G&0xoKKq|IGPBs7M*uY=|$@jYB?KYqNmmA5^dY{QL4NfYh%5{7087IFBz8Gn=o zD3~8!53-dHe%-ha(%fEqWEs68X^xvLmx3M-xYB!d`brmdl+}(5Hy NLC&!M=ct%oUe6Q<|k>Q!3YaQiO?B;7p$B&1J+%{??l71 zaj_%qVVHOYkYoa2L(TAG(?Y_wc-Dk%*7s`Hw&n^5KZ5?$jXySWpYgl90W`B!L9S87 z 2TfD)IS&yBrjBu-vJzvc8U4602T7wYIj(^x;M4kA<)E zd%!9H^aJJLWH&gSKw1O?;{eC(@NfkTRXUNN*icLm6-N18rx;-SAv0c#AfR8{ysxup zgERC><{LbmfC>Tz`2jTCplmo=2P)fv`FWro1l6HI6|@S<*i)XxZ^TUqv<*ONl9y*e zH7+D3);=(xNQprfPW?G@)Uv3sP$!906@mq5n&h-J(CEcMNG~bzYYl+GE#t} ivl|8rdmU#{-%@V<>fJ(Oyb5s?24V&Ff%-xxuOdAK500HAy!1E)RLEz z6Z>Gt-ab?j&x3J{i`3G=!NJ#89=&aaUH<7>ylbfj2Mn}T7#JGxgr9- ~1|0QKcINU4)8IEuggl^l6mjakuf4%pSbCy>rlQrBXk3=FwGA zG3M*jU!AakmW%@-`mU`--nT+o-@e$Gn4O95kI6(;oDTw)UQcYhxVR+J2kNNmRKk>i zGzaL3K>3Pc=1DG`S66o#B|%I}&rE=eyYJzX0V#6cK_rVc#26#(bTBo|7MLHCrGCTA zTmn`eNcg%q?Sa;JtVrXoRye&BS_Je>_nNJ0vDcQppm~7VNDgD{*qyGy#Ee_!#%Mfc zk_yQ>8XO;wo0Cw1LM=J O2`b@f>BOtP8;Qp82YU)x77=Z*ep;9;OecnzjRdV`<^ z+`!^b4Gac5fn&G5tgNk-9OlS#e;Z7!h-F$a$!RmCs;}Ry!$pS`45TGWSU|%j)i?b6 zcj%xw M z*oph->0gb7BqrC}vAAfMK?O)yu!rsC) T!>z@Nm5bM_xa#%G&^QLhfWSZy2f9K)MmJ!2UkNaVW=h?! z{`)Bg>0Ip8Te+D{b-n{quW=$QsRs4ZZ kEj4+fQ);PXZ9v5a*K r% zP|h3#AuO=f@Ne%^nYyQ76qw5v$Sy9S0pvCn0L@ZjNWC!ta~w6(pt>%|&yO8<0I2(U z53SDw{!WL4Kn%ST&R_lgfKisujpmq>_jnGL0OL(%+hg>w#@P={tM8(lAyKbgc8%5P z;8`ErV0qNipu1UGSy>5qVk)O$a}Ge413ezlf$|W(kb=ePQ=+sEa4;hB3Fl=$X=MSO zAYhASnkdHBW%1w!idpq4N=v^rG|T{jedZu&g8_;wMZRXnp@l_ON$CJc0-1E{aFP6@ zX+C5?q+&!Z+GqZNp#Of}uk1z{f*agvOgYJapcUOEN?y;>QO*z@Eu*B7#}v13@g?I6 zyKSGl+7chh{#9#_EmbIMR8-LPqPV&dupIZhZy^nYf9#0U51l@fT+5!{HPO_#u#+?< zO{$7)J9qaBGO4Lb`tdM@DJ;CfQPKIaGaZhe(ZdP3yM2B!P;@xJ-GQN^CC@cBY)Y^q zsmU`)*JLm1c|_QlEq<`kIq~=kLRC}!K?%#0GfBhhlO;#uXBJHY02`so;$3u>0osYO zIUK7TQoa}YO}godg{KtTUgw0JMI7%z)IKSDP{PUqs&F8XP{Qi+#c2Pfd~3*=1o}`x zZ84NxduIR`wzrFcb|)f2#^5(nL@Y5d6Va$=$C=c1%qW `*@o3UvH1qfnrJ2H3j0n_Nw&NZqR2{u)#TaXs)2nUs!rpho86 za%<#!uxKAII|8N^o(GXpiFTFBQLD(yzX*au^)lbP2mYGL5tLgYEE+lYR+EHr@bmAw z)_-a-V8EuJUu7s5Fy{b~iJrd4gl*Hgt^j)Rku Qel9_7q+NeJ<#1s_0Ha*n7doYQ7M~av^N1(o(f02uX+T=WEXtcF$~%k5{5bLk zDWP+jufL~U7HJj&m#%^~D&rZ$p2%Pe;RPr`G(UeEeZh+z5_O9viW5~9#Vlv+iS*Ha z)bs1}vZQj?-PcpwgXSFAAqRX4bid8mtd+3h;xgqjzl@cgmr+WY1axH$a uQBCF7`FaB9qPV!74whBW zY-L>+3?^Rh3@{5L#Y+s>=|OW?V=Ii3>Jpko@|0FZhUxK=BD6#$SyM~WZ!b4N0jwJ- z<_c|~d%BAE1;lpuYq`z0;^fKdgvrV%I{KV2Ei5srBoR&Y75^t52C7X1RQg*{&m>s= zCuVzh(zQ2tlPoGMP*>9*EY!*TXV841<2{vBYI4Wp%%#nmtRo!L+$1H7s4ht@SxCRI z)oUy N#!?B1M)WSxPF?uk`$$_#xC7{=mN8oKR2a)_Rc#|4zZbKYLUj zO7W5qDbt+r;1R4uRmfDcjW!Z028P|C{-ngO{%1)3hZmw^*+16=SG~_%|GfUa5wJ%8 zGg|-O`S=G9{xduY4vt)6Ru}tM3-F(@^Z#|K|GC(I2j+oh{NGXg|NB(`efffIh_;K~1Gc>cN24`&%s#q{u@A}6`%bg9daeu#b z{$O}=@Zvr}vY?F%`}*FFF>3#vJO1atZz+O}IPm>FYC%%R?Z92TCshAFOXQ>A3=U{- zzWNevFcj|J+j&udzsey;50?(kQ0Mg(LPrpi6oi8DCvc1_eULH>E&|#8m;dh0FRaA$ zUb71IOkH@fCcJL{!uwu&8e>L~t*oW0TKUvs5o!;ZgyT<2d8%(F- z4F)9lBP;O?Jy>F0nmM$I*Mf^V23nxkAH54it_;K!-3Xc4((iLDQq()kt=Ew6urknv z%NdUNm=T44vX) $a)IaJ zY%N$`0rbK?<>nXFZshrNtx<*KBU{}sN>pMI!L9wX@^3e!VIpg>JRP`7c)M Uu1 zW{>Db#f&OstDnW)`}jZ4u**Q(>iG)wtrDnn_P1j1Flk8&6e$YkZ}Uk$yoZ3p{%*n# zsLPX|T%Y*m(zjm)#OOfXhzkBn_5Rr$tMc5EXvCHR*@a&^FN!RGER=)q)%w2m2j72x zCTJxYq~~WN(tz#$%D74Xq3TyA@b6;Gg(~oN{&ruFqh3Qh=adItb$?fE2o3j+@s++< zN|yyC6NsvvmqZY0x!d9Cg+{+|jROq1!)4ehgEN3~?wUnN104I0Q;f;4wTM}vlYyaA zYt~#G0IdpJa=>onj?!w1O@*Q7F3g?CVt~W{+VziTlDdT@h*Fw&gg{pBmJ(0|2K4CE z0$Kz9uZKP{Rg+_6V;f)%K5|G*k83!0ZBSXVyACG>V2e^oy4g-E_K8p}AI8>}n$-b( zOXVZ!uX2>Sd;a_HChq@ itp$cqe(_QZ{8fQ(BG&{wO5=`*RfyaxA!fZhw-;w`YN@LrLkSFrqP^pkQ-pX=GZO zU76-w$TP8z{swusht`EnnDcV}3_YN`4a&_VP8%@h0kl*= H2=U$A&Psp^5*dfdK6z>H?iSf?&STwcDogK-aXzGQ>Vs1> znUu1&_H<42%`Q;HHdI%iZls0ZE?fzM8P--@@Y4!{#{(j1x5v4_=Vp5Tv!Cu~yPOf7 z%g#K@Ww^rTo}P7JyxiSgGf(yMrs=Fssxdst2R&yg2mS?&T!V3JbVM-2KD@c(;Ss@q z8sD?(xt8$G_wH&Q{LX_5C@Srl0V96zUJGkRK(3@9aItdFZ${H7_`ZE{(MZf3v-q${ zkdGb7-^i`!Pu&zxbQh4vxo?f+f#Ix@ab!1OvVU#emIvjjh=W7fpt*Mm38L6@T=oQl z`3)aBCihgD407U#X0(wfVoG3mZ+#g^&v-qLH?mJ ty~!7ECBxFp vrw1O+ETAuRA&a>D};lW2}syi~Cp9*(N3?#|8Q~Tl@R= z9v&Cq*D2sBDX8Oo4<77cD|!QeS-3%ob*S!2ANM%HZ+_j=!m>FvO8Y8`+$&8Uvm7@? zeE0tl^_O8)Z{PPnylEt)ySuxQlJ1g50cnu#F6jp8?vw`UP*Ra@ke2RlxR>Yi`~GjQ za~_;?iLy8Az1N&`yvCS69_)Edbzj3t0Q@Gg=w{?Cuxg4t95$%<-N*qF@$VNE(l>4> ztlt0cTI|Tgwcsa~MwA0&ct3vVI{&e+v!!pZ)?kO-KrtD9!@!-(=)R>Q2fOi>=i-*u zNL$j0N>#|2_p~7fiovljX^b>Oq&j2rUxy@lGk{C HT(I!J%0BVg88*C=rzRHgzP14;QBF>d8JCER>|}2*Jtrr&-*|ah*vxE) ziIK6sUh$*~hB$LNPHCTOffLhAC5wsQkC!aN=#LGc*jAj!!bp8DCzji9K>S4aI=|iK zKn!c@!76~V(_34|e73owkdbS;pWC!5eaVX8!Kdke2cr|Impvq;-=OBi{$<;qV*vCc zr|Z3-x}KVv61|^@dp_uXj %P6s>=Cq4)ItK0m? &ATL?6dU|bY20=gt#yFZq^nOv*R^w?foGukg(nX6gZnI;6GB{d58)&QZ@ z)ST&$!i!K>ubcs}wGbLX4)CH3T?mQGmQDfh*U^GSZm04pjU48{?Tf`pNAD(M^|SwW z%8^p#hpHmYlN8h8<(72=sLy*eVo0wj;?F~q_$YopJc}d6pO--LgYAqFdF@)<^}m_5 z4k;~HRMs!9xZ7v1l6@K$KYk65xqTsY-O%Pe{JWFOeawCPw*ZxNw8!~RIy@G=zWPH= z5@58StJYuI++|>928JESNsGAuVnse9pvfl!uQ-q2qX$T;AY}>^BcBWsBS(LpTJ!Y# zXF&0KJafrBY9sUkBM8ti1KCsQS2Xa#HI WZCNpV62TWLIiTXc>q7qdf zY*8kJe>eK~4cK?xnNz+X!v65bHznW$fBJj2pzmv7j{BQ|VeTtaVu^(l tXxCnv A+Wam#G)Hq@p}L-)63giuHlZj zKqGu_7FKCERV`EK=(^l8vVeZyt5Py&2ehx;gi6(CEjluwe+6%_1fCxV9lG)Y>;^gF z+!~J(g?yEoe%0*3Vk;snbOJ6cbl@pR5fomxiM`D*{Bs}2!X^R%3~2!+`u+UNj(rh* zktP>S$iBdZMigG1=UvbE&!#yr00*C)7al@*4J)AaYbai3-wP$O&jPA|d$yK#uWlTz zxAfni_QZUaYz@wvR!>VzQQr5i5Tk~Ljk?>)nyxm>i63I*w_|7`Y3v_=%-5MjG~W6c zH{W%?#7s$dI_xbk5--lZ= gH;Pw!)e&QolQ? zx;ZF_7?+DR ei_Bx^MgDj}l4L^2-C4 z>fZU*4&1JaCMZOrk%>Ic>f2}YJBp`_#gM)GH!T6qOJL(8&*FFn4$s$Qf<8e02NnGb zBMVDsb+RVA5tqcTEiJJYp)}zKt!@6%Bgf(TKZ}df@30}TkA54X7p);?u= qgOV!N1DQnZ$*LOc!yy{8qy6kznnd0s= z?vMPJT?51fpsRv>5gXp&`a`GIKX!Zr`~r9!?Cj{T!*o-Ce5go`X;7mLj55W=6Wk!q zWNhb?we=!UNG6w3L>~S$P!~V~#ftuWLJVu^sd?=pJFfNAwaK;evp6*cEO?W1LJ{7d zT@i(}VGY;|vxb-iTKLBZyhi7IUPEvq$M;&NxjJg*G?9j8dxa3&*KC{kM_B+fqUM84 z>B9X KBqT1w0a6u)Fy z>gTiLb}Ow 9YdChBlQKIGyv_}ce?)ko!+qGd$SBa zTGJIvWXOCQf%61>n^?4p9;e?C2tqNW>T0^}0X^`>{qTLeU6sJhBQOd*4*vZ{hmM#U zA{kDJj+hIT=uBQ`-#qR*peh|L&SL_fnHokd=Y8TEn)?V_OsJ+@ef`NW|B@DxS7o&? z(*;k6YCEF3+6MbG{M%B@%gIg#93RaXxy+Bc{e3F?Zf9U0`^ZY{)#-Qs_h*CoNCvNM zhIAFF0j3dL8@rjpX88OafeDb>AOk|w?{Uok`QjB8EjKSOkPN_)0M 0ksyu;edaSkIv$I5FAP`?C0-$QzhM(&8c=BXVPle+BF8ti;ME4 zNP(yQfxq?85rfCX^)9a?KJ2JZ{5+F&Sy)OOLpy`LIBvJmWl%52B;u>YWmVOPjXYT? z$r3@Ha5*fDyPcwg5xq|spD*ih{B~Y7H~-_$_b-x*f?oU_MR}vmjVqoOfK^X_ @Ku+ 6YHOJp(|8FVG6`gaCmC zMv?;q(hylWIo*2Gh#70&{qj IgZ1WOML@?Voa!vGLfOi7i=@F~OoEf*>oCZBcnh(?*?D&BG1Kn_`QYNj! zWJ;Aj$YhgS94n2JE+hc?|{*SQ+2Nqdo&T>=(>Z=LOqSJu WY*Pz8^aE?{3&MLt163V|MzL5eHst-hpQG&D$;5y{wKMN3HeWP zi*|>Ow;Y?&k;a ihD);C6ha4P{dy=IOmMjGJoWS)O9+Lyb)V+oS$ zpdgqLeO ao$IQH z Y9r)kZv`@ZJ_SdA|O7wPCx z{gP_TjEqRIk3ftkXqY* If?HW?{Y52ArK|J^LX$m^K2OHwNDVzP`fnyt>wAW~ z{?}9jYdhB06rpO-=|d^lXRb1TE#r-`qghC@vn$6<=hY+6(`03_`}61I<>c!0s=y4Y zq^zKTQVko}ltN>RfC31IjQa-!1A-3(AYy*1>2! OP9ErNBs@VVk{Hs_ceCdrP4gqNP1R{jINuJ|C z`dbGI4Zk28TbI}8`2`T@(#VahG!pp}3yY{(o`TF+mzGQ7CPv1QA0o)&a5i5tqoYhH zoaCmVxwjFru+$7536xGP@I7zzM=>$UOmI7cOAi==Za}<&3N_|uw?qLR*FP I z?e_CkQ=0&^ BUk9HHb7rIhck;GJl5Z}s#oWKtMEz^E zoUUMu*6w;#{N*jo5U-RV0a6KX8p)m&Cvb^yY4Y2XMP2wk#igtwfMIK3G?Pmq< 2 zYi?|ezrIK({}%v4oWi_OL4(wDH5>Xftri%X!M#PcI1TEVW2aW&?MZxe-len&R&{hd z10gVFa|b6~JIDSV4{_Di)uO;2*6w~X3NEi-72x#(`hIJ8m5VS2JZB(_1SI+ZN(b~8 z;G_X_*6Pdi7ci{EmdYJ-Kb)_7etrh>CfVa@Sg$$n|5xxwe8w)6Ch)s7VVogcJx%!Q zc)^2kx7dq_&x{P&=}5+0YDTRauAQG_^J{@tLow>n0Ryv1#zCcNzbB^sOkAtq+cXL( zz)u0pK>%N%8+=FdI;?lSMeG&&KUAg7W$*FsLNsi+aD;&&h Ryk9!skz2}EJs*q zEHxzs)9TEA^>V_sTO9oKCD4RTInzN!<11q5^a;Es;268}25u6-P=UzFY*3HXGr#PH ziOTboR=;np2c=JYd#0H#1Ra*5TmlgA2xwp&LGoL7VsdejliDAUmhVawJufF@Qkiwd zbNK)7X7PtnDA!QTG5!5}{Euh*^hzKM1+(F@18V`qY9?uU6g!oZMk?to8pN&L7a#!O zeLiw?L4f%lRh*n>`76;Hz %jBPqenJV!fLDokagpH{`9VeCt9UcjKxrieG#fk!t zMk1m(#SIA#`kuIfIq4*lOU>WE_j(|&`?uW(VVfWm5XJ_m0zhueSc8;QH-CSBZo 4OQ_`qjdV~0Z+}w$OtS~)Sp^j z!BVn-pXmA&$SoPh#^JoX z6ZHnP<4Q;av)*8>8v+?iu^$~9-n zTV~w8=`vYs1aaD^= sZ9bCeC9W=va6O*uUK4Y=v zgL51ae|>%zyg46BdVQhA7+FwltIq1VR?40)LyjKa2x=zS9~O{-wBRsMal`)DAxNB0 z1_K7f;Nc$j= ~QY^|Wwa`ic5t CpK3)9n=VD@wC(*=@RfVtuhOE)Kf?kxRVo*qqbA!DfmSxjBgoX_aQ!POR( zbc=8fQ}lST`l~x#(ipwh!8pQC=COsMUyK1Y0G?1FZP#fh$QJ`}Omy{3E`HOXiwYA> zR<><1s=lXW|01R_hMVYrZ{%rB1d^I~_hPKU3aSsR$fs2t$#?Nq{c)qxH!*?OI1p+N zs}b|L+2s{Woi?{Q!eAX-&7}Qf1LNW0S!%d}J)J3g!58;0_RZuMx#mq6 GtZlx zWtErnJusy*bS~kF{Ly-ST6N(y5QDPch)=;hJakZcGn?`4@TZekV-bR{T|PY{O@EfP zoMz=r00auUM 4gF$(XP`w`9AY=Iy2I z$UJyiozM3N02`O+9pywZY0?AQ7f}7J&5stFD)aN#(=Bp O_)VE|C^ zpE>?&e+DF1l(hk{9(c+RuAGSZT7>aYx&WgMymj4oS2ck+*H@3WpDtc#sbdG~zrw=7 zi;+k6pzeh;qtfz9z#^WJ%Hd99tD*$JihU*z6oX>w$zMV9>Oklg^vu@e2>SniJXakZ zc(zr63e*;5zXM;IvF#WUdic@9nqqdx^z*u~AV$ahx2yf^v{>&DzcuICccA$`K{z2W zW6Ph(aw9DXWiWTyyw_4c }GHXTm>$1hLU!c4&3b5=b&V69P3ZXXyaQ3@2kkH z=uXT{5++msnHuYCs5m*RDe>=qc&Msl#mME_Vh}6dKU__Dv;*Twq_S#{2eS4Y&(@dh zrKyxIkqsW4;)J^CLD$a3n_omv!<^XLJCV=hBUeu)7tJJRqv;G-ejiQ`EuSReIgaW| zWC**vL|yP M<0ka|Lq8Hl#!Q@Ts?UivG)U$ajsofV4?s186ov)Gn>F&!^YB6 z4|fBRd_>1}sch$>X%i~oOJV8fcDHX&b<5qNbNtqCCsd+FkgZhtf5?bfznoZk8j^f$ ziFuo0>Y^7s&hc{ZKmBJN+4ZZX$6==Cn~5tGEZP6vA k^Q`pQ%o 3hF$h!CKm^4YZ|-qBk%n*@BJ z>-D$);|$&WdIkrQXK~3S?H6Cp=u!7@6LXfLwwRzd01LrZeI;<6;69`Lk^{FbrLz6V zPv3uy;KmXD5gipmbw%@{ea?sc<^E;SpK#zTcT1?r?ecyCfytZy##w5NMY;1TPPp4J z!)xlGxQ3bk8#{SULl!kN*=y36nSmu0H&o{!Fu@cCVp$Yh7r*^V$C7<_C+Om ;K5aZ8?-^aIO2@@lU`oAiP*pf-xY+h8wkM{ZYCT z*l?b@b)HiQ&vp0r@=^aYyMW6+pU71(8_Z;$uIAd?+PZE!Pekr_3xQ3`uiM`ePP^JO zu9E@}6C(ji8lI3Ij=qg5>{{?StC&b&(e322Lq_UUW#m!1 lg&pW<|5eTLqqGwLUvs<87~cxZ!|ou}?)LEU z6U;tQK;1+q{BP+rpj#2}5rzw`mxoacD1VjA(jTe`G%!M!nV8u6uY$UgwpOa_>!? zMEA1%iy2yUZEr9VBHUj0Vdo)Fw*Jz_mxj9IXeEhvh!A3uGvS%8O}eyS@)9LV3yY+m zY~wUFcS{txxxY!x*}736+2z=ejA{9vPV|IU+1&|cA`RDWYDhH36Wz1sWBAq_eIp(T zUv+uhX#U_|fF5FWm#6moXGGih*__v^b(E_){gG$IS6bTi@Ay!8?aT`G*w-@pUC#;L zTx`f9-){!On@@&4PUAlKx6vIb)LeDnhmDGUlOpujKA+oTn3`+lLuFAct@+^MfaG^u z_5u!v@9ek25~a+PoCIZ((on+i0(uZ}q@2NRwW|iMJJ8rM4{K>^;^5#=1k);}sRI8e z(4S{!c<4cxGx6Yu->JgDOL`UXvnP&Zul@HyT3|wPAeIts>do&Ay%aMA1rTScz#eMJ z?6f8Z1{Ac=n_M6c4Fo*_eMqa6g@s|uGrzFV*TFo%>@NonMoR1S6vuvX0*zX+I!f5v zMC#a0Fs`99m cN z$OqQ |TlO|4DO6f1wB!b}NGRk1Ld 2nZ0D z_{1DJEpMwvo4JAEqsHKOUD2Yd|MP7J&*INvXviU|4MrXR47+&@t%Q`7pvi|I=ElLy zWZCq>Ml>cl@ipW3@1gMA=nLp88XJ=e%Bn}JKf;VfNNyx+8+fjV;Gv7lEn!e3$x?${ zL%=iwE3DIs(chs2;LHR_I!H*(;CG~yQiA~7`YBMBOM#`eoHaBD$|MU#BRMA_UqgO& zdYC8yH>ym1<2$tf*03QMz)tMDJX~v9m@nqu@4aK|d{mc_LD;j)6#?PAi;Y%x&6U^V z>vtF1+8Rj*F8BX5(xqk)tqUX8##5xJkm~mM7LnVUVg~!#Bdt&-4geCXz?Jnm#kW5F z>41zs79=C!F@64L8DQK$Jj4!OAI@bTSeNa~gGvxAWQB 1U`_;IPHJaiT5np$BJK# zDWqUJV6EW?wtE6eAt(htqv?@@0Z YM@SC{3Sf2p|D>rks<^oix5bmG-Q0G*^iY z+Wo>sXBH~PxeExWhXdG-cSHUnYrG#UV_!?ls;&FBiu2s1DB8uac-wRz2G!G7B$9J= z6vox{ReJI1`|=y#H^CI&tua(7Q^s{2spN$Q#3(|gkRWSs`yd@zm&}DV+v|D%%c3O{ z@o8yq_nxPQ8Q>?4LvwvCaFM4`0pbRLn)Wvr;PIY!p2UMQb8};0Vq;tf=>cj8Xvbj! z1GFlISM!0#UM`V+02_J>2R2Q!7TT4UHg3ec(DHs^CkJ2!R?N5`I?YEet)`@72&Ibp zEiO!cvg4bmB_W+(fQ+<#o=?e0Qs&a3T9r!j$i?CviS7_7layqro}CMU?9qcd#J9!j z=_A|7w3Ft#*WZep7mluXa{Wa>c0^t&L>v;0f*&Xe1;H+5_VH27PMp1xjw5mHI(XfD z64kL6bEPtR_X~eG+oa09>eKW3#B*|i!?q1G8ZmOC$MXSD2mc$#S8v?BcP!pFR^am4 z5f+1fd^8vOguUoRC}U!&h+A}!9|Dcyp&_WwInBV=*hVq>?oJ@jC;;zmao*$+`g;Dd z|I7~=sr-w}p_HTJ>%hLb<56qN7_TS1@HNmttk)LJah2o3DN*STFe}J`r&uw7KKZit z5f|S +m^{+Hqcog%MpM^-mTn;4$ksJO=`=KX@=dx5p3)fH+MupaXPwuNv14)pvjt ze$br$lYxLXwnO9$=J#}>cdtU?$@5i{fJ*s=lAKr#aU*@F@1jG#_}9=7aEtxph$QU| z{Ud*Zd7_;5gJQTOWj(Xmjwv24?mZClRt&sLNYHd&VMWqQ?w#910xgU=cmgyG47wcF z#WRn-s64N^2%?b+%}-5n*|e*dXMrUylS_6W$Y(VW24OU}Neq!8xx)E65Ee3yJMUfe zvdnN@ hW8y;Bpz1)hAcOI5tjrjv&7^# zbVSL2`c!4` @B=zRJy`(Ik8kHOSZwAHaTcOu)^iMA_8!fpd`Qy=r*x}#{RF_{H z@U6@SAAb$jq{^RpwRy3gg4t2=I;2BeU+9TDlT$MyIF4os-@(bd^2uZvwV@>KX6Alr zX%mc&zm3jMN0i8!#E_Dap(?bt?#EVpq*BFh6`jTWYB)q?&ct`pd!>-sd5~KxdUo{n z ~VilBa?6 z8QWMiGmQC_BZP6d+%QnpaW!y&xM47`{g+tKLxu<^;lAt`wtC`!bTubu2!8&9n@2|^ zVD*RzfjK~Z{JKSfBMlu9MLOpS_L3FtliYfF)EEO2rPBlUN&q2wVs^IgPPRKP4vz1J z6v(gw8N|IsfYnX|shQ1PS5=afb>LW<)(@%DbGNu4P!vt=DMWECEgxV6h(U!wL4I_U z+8Ko;@Tk;^s@t`eE8kjp4k)3}x5LP68YkiPzM`Q1__kzJNhKUxm2(^uf*NklGN3-` zhxp$(?Z-?Y`VTZ^asPQ21Nq1}UEH--y|=`-!@@da& KvZZu=Js@+d41Al@GPzPx?c7j$@~G< zlcT`O*iBe*+z1h(j>{Qo?iyZQOK 6N(Ay0uMqGM_#jjMvz;-lc%_4pn-WVU}iQ-TI=| z*1gspKfYbmAoTi$Nl?o<(5SR_bohX~9#nb%@;pJ;kiqlm{@x4d?f(K1x~lQz$@@q} ztkU=wYt#%IJzF{zeHG;So$NNuz1Z+Q+s_Nss NZ4~SngdIZZ+EEKc3c$&+oIx=IWA)g^W{2cLXotR{{XNSKy zm4~LaJ+W8>7AxwfGlPW^zBAK>#@+bium5R83BpIE_JZT6Kz|F{gGisJ{#(j(kw|uv z;(zl=?J;-r-fJ!X2`C9%G@s}|2=fv`J0TQ1H9!AWa0(PU93-HWuYjaVH3RH@d)*|i zz=kO29xT$bY47k3$FdO}@yE5-Y0ihdz1QC}y~WTW ^tXV-hpOs%%n8Rux@r{%Ac0ckebo<{$VR5G?TMo`MN zrHoA0j;WZD+{aYb`k3GB{t9PJt8UNv!YjURTXYVbFHR>*2thnwVy0rgRtva!HT&0O z-qa=Buev_fG0gHe1}LvwNWbW-32fs*bB2QdYp9gx7UYN$wPtiWpVI^NN&!+k+sVM% zKe#uT73*%}Vvk?KB)$L3zM1)hks-?KMG(-{x$>5&1JpiXqty58r{_4OPau~F1d!7S z3qQ%{)XEoU05v2>*juZ{z_wulFg{qXWk@~N0)g_ZK$f B?Wh~Sp>}l0VF>pC*$Bt=<5>=*8} *HpX6BukU`m4V~0^pYgusR=o`;hdwM^`-XY9w^Ye#OxI~;ibuag4PO!ck#&H zet~(c<62zfI`{)&gjaWE?}GK?M_`-`6h|%X{lwcQ*oL`YMz1h8e}f^;NMpv)z*U-I zp)5CJWrYz{b0z$e<7{T}10&&wLqzkhyoG4CMvQ9ah`YQ*aWN`Am4m3Jeze6d7n#Lu zB>5w!R$%0<^}ewKwkcU^*6T w%NwS{zU-Qjnxs3=%GmSPr6&d22R06mx%nMWg~N W=Tl-Nv zW!O39?i?7Uz>o)MkH`=ZQt=*eIFp+p4m1EedEQg;hlUhR@Poe?B*|oT$AOP~5Lc?~ z#tRR4O`$ N_V@+> M;)1TS&qUQkCkv{w;Fc8u$toN4pTo z$jJD- krzi{~h!(6OC@ooFl&_Wbv}y-5G_M=~)M)CGQQw^- z2D4$C&IXCyN*>+S>DC^8?C8R1;-~mwn2jl$F^|^>L5J>f(A0xa*r?^7GpA*sm1q3@ zc24O#sy#Ef-zyA5Jf^@-ZN4SYK#Izt0!bujUq3{E6`M#}7}CN%I3!>UeGBO!-&T9L zG0)sSd_}su 2~67*0GdFKMCT@YR4^|9<`7@~O$me*u*La2{^% z+o$I!8h()GW?UCdz(p%6`cgq!XHfI9NEJsO{F+3>rcNivV 3|Y^Ou@T0=Q}8d(0 xdJm&=37R>xKeWlV87w&}m)`*DvR!Cnjz<@B_g+RLW6_x{Tz3%k6NConQkg zCC>SmgXGmhN2Fp2NcRVX&0U2zdKC-D2tCILd0h7YnhhU=7IVIUC=%I6BoWavjS3L) z^GW1=iW+rAq@?Cw<>z+vs6p_Dzh}kEy1Ivg07Gybk`g@D zNFT0lm7HRu>4m{Vz5I0zOQ -h9`j^unHvSDb&n)cN*l5?c5;z7ajyQ zeE@LMh#kGAgXw#o3ig&X3xlIH#Rc)vx#glacS892J636aVh{wjdvc;c-4aCzg#r?( ze+>_ZZ70TE)D0Ym@@jiaBKlfq6F^z&*mlwQOKP Prihu{lW4NsUVH{klw=%0A3!z&P{AEwAe){a z0kwdbpK0HvTiiClgGt!LU%||7mPN<*#+sKFA5gLbo9~+4tSixU^%hY(9F{-C!M?Qw z!FQE2Aaeplpp}-=wIZb#l>G&JZ~#*eFn*vZOzok7!LS%PVGO7Y0BZw6ANMi$O1e+U zgYEIT9C~&9KPvyRiJtoU`yzU-)Ov6F@J*IiJ;RmZSSntOv_NcoV_!c$*q~zr)~tXj zw~ NNbjX>2y}JoD*=?W}aO zspIr>vA22@QWN9+5c|W=PgUb20l|>mJxf$e-67?`pJum#XO^ad=;=!TrVqD#c(|N9 zd&jG%; 3bF@_b fv& zprM3_RbEAlXd SofP-@&KP~FKIJ2w5z;3GC zToldAFXH58chp@wq&80Q<=usS1C!#{8_7IhP5Uw~Bs;`LnU2ArEE)W}h5`uk%lpl* z0@#1~b!#l-k(&^q2KW==+aItd!c7|(4++S)GCKY8+v#FCik7eibgd)BmxUd7AUkds z*~@3gIk52fhGu_=-=9^Eu1<%j$lbp0x02kdI5N4~Y)q=)TJhxe5n}G=O4`$Go8TVD zl!f~4Ea 6+*vxFrdim ?g5`rWnn zpYa4yvt1Lgs_LdVhxq7Afaluw?)--M_28Nh+;BaR-+ no`?i5Z zCR7NRnB6?KgN(R;$^?L~6mx|7O*ui-=>@>B*qE3qzkcoD{lMY*^`^RC_)b7=I}0>a zlOgp#92}KR@7fMGV;F)wd}l&>*Tbc$(ytZYqJz&ygsIM-^~5pY+yi3h>c2f;)=l^* zp#b{@i7s!^6JKC@@ZNnG=dJ>)edI8u>S}ApbF6L lACcFT*!KnmWxBx0+x0B*8K95MiT@_-iJ z4j8_HSq1R-fYJvQG_Y@%^8t^-m!}Qy)rTCt8ZXDqT!Tu#O3{rHh_36bqo)a1wAD)d zP55RS)p%xs9K#5`(o8Y5Sdc>F>&8pC2Ps|RWZ_BkM$P8Ks0&BP5U=TqD)&MW4?oQ4 zQz@Fq=1ye38PCFiBGiTNTkZFX5U~tio>e^vzTUF!NcGg9_x^i|oiBVZ)Nd@s#_WP| z!c@5(;Y>)eP17mnP)1 OK`ck{L*(oc 5a@*DAY zZp=QX{%`z58}A(%>iBfN2%q}R6D`z!Gy!LMoMVyUT?w;ZW4M_vcqT6Hp6?$Gy@`c? zlCTdP9UXxc6gHQ;9N>WW9$Py*UjR{Sa&ofkvX~7A8ynm(%kBRflOnKX%Nmb#9Gms` zt5w%8h5T%8&&`Z9q?)9$7oDWt6%8`(Pl5@nC+>pTpxC4>WDq!KiG&_J17HO^R5*R4 zNG=;@M6mex--_OTeqHM2hkJYL{G&S;AT(5!K3aMc@93#es}cYl68Z7eazIT%Bxf2{ zR&(+76&}oX n7!Q>u5Fiq3$4^p zUE6_J8<-|+m#*{M0E7jcpdYAYw4ehFYD7Iw{~4*^d$-Spz#X2QY|EDM{`6*_FB=0* zNv)9cSGVv@#QC8bQnZKMpM{Ri J5#$h0Y(;tGu|BnUG60Y&NE^O#t z__Orbd{o2johh><<7c+mTj(?Zv{IJ#mH8XDuu|u{?`X8!Dh6$DOLe_bswIKJc(^B+ zvc;RZqxK-Hu{Q1W^Skj4d31)a`4a(T&-EnMO96O}2DFbiKKRLS2Cs|h^Qwuup3nlA zhMWme3N^z{TbPqlp&5-OG5!sOpKTLbbn@)5QfMIY#(ppBuJQ`s>a1gb*xbz6#@;j` zeT=KKuKw6}sVd=G^b{^w$!zvpoC6ozy-Tj#Wj~ryIyDIW2c&VJ=qKS@rs;6=cXX>( z6&X9CjjW4~Nwb6; zmoxRW<496wW3{Hr3zh1lNrnLsQIgIS^VF2{S9`@IFtpn}&8=lnSUbntIkaImQ}9PT z2VK)$adk $y9xOs(IEcKoOe-b-=#MjkGMG_K!99WYTT}Di0~gOF~04U3%~jB zxX1O`;f!3nyZR(AB4Tjt(ZPD!5Pvmu{&aaX@WIukA-tF(2x+T~)8F7!0jKz> zaPvhdXso1G@D2*X&QapyI_fnR+LUuOr8I?G#A>JDLj3xeNdvDwN&PKD3I3p{^^3U< zis *-@_Zxp(jV%qHEb*Q=~7}77g2JJ8HMkt%#fI8}ToyhYnxci|x}+!j_I! zT0dFzkd;+bv^`X}OUHsT-JKR;4N5F!3+!P6z(T9DD6b<%+@MOfpr)arKcI-mvIMwT zSZseKF@(J)1EK4H%e aHO3Y|E$n$&rKJlSPCkiZ6L)lL4m!NR!%u=7p5 z{L#46pZce99f(KKO`%GVeP>b#!mE{(W-PfsPa04BHfWD&Ps>E )a4hzN&~t<=MIe01qByDMgdr3-(mVQ5m+Z*j|_dkc)V94 zIxH9=ID?3lP&{RFb@4X2+#?`pPrH#S^A+`DCOA+U^X=d)L<)Vp`6a>B^mSj~x!d<8 z$vg7{%fj~IudfM6()oF5r71!@pZc ~*N@%OsM9~{mpiuO<7i$i^DYis$66~8 z!Et!!;k+Snzl{IL*Owe4W+`a#anEfFP7Kssk+f5nibI+tbs~`uL 65?2`#~3uW&zeuG?dFb~`{NNfkoxGw1|R{JDQcP6_bz&= z@^uz|!&{R49!~9?EczcwyRPT_YbkJ<5pL58!^Ou+;#5%GB_FJp)A{tP_=-^Ekx|Hz z3Q7ggZ6Zv^8p>@Vrz2?P-(HcO_Vp6O6Yq;`T4L-XPgN^;s*a15E6J;h&Ep`q8>^}O z(X!Io6XpH7(mG6*Wz#31< zof#XfOd6Nv)wR zJ0_3C2u7%C`Jq(S6|VA4M? z+cCVg*y>y=UrY!LAt1M}mmTC=kBtqBy6mcIYtN}#O)M@FqQJB54(GTyBS1dKlId=D zHWDT1(WK(^#b%+i(Xu3BAu1^;&CQ1W0NX?{8CY0A1Q|La$R*Ta4n+sM76r3e!3+Ro zAz&i`zQ 4V0?q}wL@?nXM+Amn8(#e?LuPyQ*iEo7+0KqNr7qg+ z^F&%s4p;%O=B!;AqGrYs+M489F(WH=$59oE97chUGMg*-4?6N)28bkhlE6N?>#OXE z-}TJR&CS5&a%mg}c9ej&5am-m*xtL;tb!h#l!P69c2~*9K44c<+0+FEK^JqA-|nc$ zd=0Ss;p?3b7|j`)T;Z{&30x;wDuc73wsktDKU<1JQpBsyv+S*lt8C2gvPcH`y6ax5 zTF^x&oPE9z!STg(ZjEKWs1&VT*EO4$njd}oW5;U_Bc`Ue-WL=R_U1L)>Wi}C+J-pg zkK74N+psvvZ0@1^PyXh(Fp8`Js>J>dh)1^2G*RbM>(!3&=Kblojd>`uIRWn1pV`11 z;Vqm4&hXf20A7$9>^~*+e-~c}Yzo`eeyJ-%^eC}_ug)nNWWcy@(34~_s4i*4ctQxh zvY}R5p)6ky#S;RF62kSA&xeD|nl_C34GCGjD$orP;Mxb#0nD$&dl;l(0>V-yPifbL zHr374i &LtA&`N2cD9JRb?_T?9XkV)J%}9q8`q!9kGZbqg4}e%3qWdj_U+pq(DK{6;n4 zk qPu{o9<5URGEVNog!lxVa0dj_>`{J>dPRY;X@Z2$$^zU|L~3p?zBk&S z`T}QpZVpZG1tk`k;G6A6GI)9we*%shMC<{b!1VV5$UX!_1#m}zW22J69bvXmWOoNv zv-s4xAP9|t1+HHYZHm?Fby-j563pewG%S9VXfT4AdZPAseDoj?4*&$Vk;xyMXCS+< zN(=12nOj&Oh>@03lSJeI%T1$!UqFW$Y (=FD>2f}vhaRs)j+T7u~VTFi&Z05lG5?vs2PZLZ@^OA7`~O; zdBy}&lDfkv*Z{Z`V=foBD*4sv<)NqueHoT4RUZj@-1(JSrdA6(`IWEr>29B^hO{(3 zbPH$j1OF0Vl~}RrOe1ORD-OtMAGB*H9iA4;sQd`8_3x+(yG0+T&(WvcCcF?GRIN%@ zsdUY&L4@Z5HEXRIzm|>Nu;Vg3h=-xh_Dho(NjYJywHmlSe94E=ck*Ul$-@#zo6ZGF z2lDbs(7(Q*6PF?!!cQTCPCbxUVT~Y<`rlaeaVe {q$JLL6NydvPI23J zj&^SmBkQhV3lexWkIaJ3XM*h$#c(APFwv2@QL%@|DQQrzRNLmCnCQogEXr-o`=6=0 zSe82RYJ<^L5!pi(!byB6XaMhML|{r&OkBuBW|p?U@znn04JD>Rlv1)R+{;Zz3%5e% z;a+I*CB--l8)HJkT+B2W>U%AMBvjj?IVK`382N%|P2j=Q?I zFyf%VgMF?*@&U0ghK7dKI=q=Aq@?EfCBPS$IRYM#|8~Bt;xs`5OgTM)DHQ~IrkG_b zTW}Lz-TB-FN~$rw5BBC2Pos8-Jv$fj&oN!WHwji{$InuQH(`$4Sm;~3q(GMAMB%b3 z=nV`E1O{Gy;@GX>)RXx-D*IoWI(PiT }z?3}`lpK`_n|39M6GAhfh3)e3xAV@bzNO!k%cXvyNNT<>% zozmSP-3 g`@SyAIva*u9($MYbbn09ZK7!Y z+8unaH0j33&7{}#`wF?Hnc73{&K+Nt^WnDlkJxjzG&vB`+yQPluJ_#6c_n8ew0IgD zjQ97C9b%%WVil$9bZxcE@l?#!43z%&G_D(wxu2q$jA 7V8H|aJL6w((xT23hBWEf#~;f z(mu}@*)KE2f=RDs^`sfWsRAssp Q(|h11147nd%tzEFU8oAQ!Jvf) zlm;!rs&^BrzRc;A5(`Ie3D$oEivbf84FL#sqa>X_&}MCMT=jOm8&c=XhfxO6FYsu6 z{$5tL|F}IkF!1GW*r@YtfY6hmyY_JY?bG7EM)|m_9B4icGj{=EujjS+F8De*!Id~; z&%Tof!;qB@@7J6j2 V# zJ$sNQhr`E Sm|p;w260?~Q?G!~`Id12%YG#i^E3^e({Y;B2VyZRD8 z)`Z #jK2KZJ4(hv!fsI 6TZ`B)^CKbWZMHs (!XYDV!+wGuDUE1Tq3$T-b(^~{$U$-*(|T&T0=Kg$UVj-;(tjjnUZ)02(iHMr(* zH<=?rJ34cQM-=#pilx)V1bR#HB*b!b=N=Mr<>}run(EWVF^o0WHoK$D8jqV=Wt{`) zUR_(|GqYLAj+~zAc)am^50}JHIrF0F4xd)8wU0I_>*=HJq{=&)to9WASE0I-=I$C= zy^`1T?G|(ge|^}yW@Xj)@GWd`vRRl>@v4~c3ZfVS*>Pe>G>Op4#6-7a22BJetZiD+ z4me5KFV??))7Rp>GdDkfveZ-s++hQe_+YteXKOpnVGnX;V7tWkkn!7!<8SmeyN;Lf zZ*?PVUf(B}d^ se3laVDi9iGX3)6~7Y`r}1G`-x z43~da EQvcG!4Q)}x3)Z*mV7U;rd4 1uENEkKhQ8TD$EyJrwM|71zi%fpLoQ@J#Cu;dHBUC5<*a^M?8!)P|g5+ zJD`eR2sPEzID)Kn6X?&mcV1+I9JFa9Vn7K^mDR_Og7b{ iT|#k|ck3($wL4^oX+BdbhO1->9` dK0Sld6*TvplOdmh>z)8#jm@4Ozk=Qs @?Wh`xWXSCa?a_LSBGF8`Gy_(ipdN@Hft(hG~D{MesMpu zlNOw%=B9LoYrvJ;SPeQ;lsAnU*k-y$(Vc}iqSlZrVtFdbklp`Ej@P(x+Ezo<)oR`E z^pNRr7>;Qu2$NoHFcq67-m0;DP<-wD#rmdrsg_I-my6Deyk;kti{S$+&GDTnp?SWe z?zWmKRgWAkez~@W jN(bx7xVh@{VafwA6FsQ`iUq#AFB3Qz`{9_`HgpN^s z@ct6n6|mzI%GwYxecJ)Cbh_lQbMK{h0#%u`jy8IYAvoi8cG?HWhq7NcQrmb!Fqik{ zR}k&=cb+dt%^_C52TyqM#ve2}xbTlZc3L-`aEGea_?+q>dx+z;RUJG#%nLn7EmC90 z*4g|GUULqd`h=N5{SFqsdr;M274J4>u>9p|=}JgAOqzE6f&b)aGZZbyxAN{D`oih8 zdA7aoV@C+d`^B5_4;v&%u (gKFa*Ic9qTe0 0?iPL)^DZ!!e&&?|EHhNP!e#DIJO=w_| zHBhPpwJ9jD#0+AF2Q7cx;bC%r@2~r9)Z%Nus7fN}73fw1N^?ZsRw*20>-@$#O>)`= zq^!s8vP`}ivq+-_&Dv;Sfj3I=v~@%t68*ReaD<4fBu-kjtJ}m4S-^+F)0fl1^sGHU zJpkky4+{$bZ=~9?LMAvakKL5imUFWBEg{p!LCdZaUu1MHXd*y8Yq{E_4_izBY)X## zGblH_kD*n61B6T9aR=z1A;+vUsGJh2ggww&9zm}LH4V=B%3#=sdsjjWL(ZeZ{B#eA zbE?5Fm!U7+$bV{Y8-1J4-6WFSvwqKUc_e;dUejVMJx?*ZJ68&S@$q s