From dfd12de3ac4252fd617ac73dfa4df4c4dd5b2f4b Mon Sep 17 00:00:00 2001 From: andy <1414772332@qq.com> Date: Sat, 12 Oct 2024 05:45:51 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BC=96=E8=AF=91ram.bin?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + mfgtool/Makefile | 8 ++++---- mfgtool/ram/Makefile | 9 ++++++--- mfgtool/ram/src/ram.c | 4 +++- mfgtool/ram/src/ram_printf.c | 1 + tools/ram/smoke/kl_ram.bin | Bin 46064 -> 0 bytes tools/ram/smoke/kl_ram.md5 | 1 - 7 files changed, 15 insertions(+), 9 deletions(-) delete mode 100755 tools/ram/smoke/kl_ram.bin delete mode 100644 tools/ram/smoke/kl_ram.md5 diff --git a/.gitignore b/.gitignore index 9118122..cacc45f 100644 --- a/.gitignore +++ b/.gitignore @@ -36,6 +36,7 @@ tools/gen_img/*.out tools/gen_img/*.bin tools/gen_img/*.bin.fw tools/gen_img/lib_sdk_source/ +tools/ram/ mfgtool/ah/ah mfgtool/lzma/elzma mfgtool/oem_tool/oem_tool diff --git a/mfgtool/Makefile b/mfgtool/Makefile index 925b258..154f4f2 100644 --- a/mfgtool/Makefile +++ b/mfgtool/Makefile @@ -6,12 +6,12 @@ OUTPUT_TYPE = 0 OUTPUT_NAME = mfgtool -SUB_DIRS = ah oem_tool lzma clzma bootram +SUB_DIRS = ah oem_tool lzma clzma bootram ram # Kl3 compiles ram.bin separately to improve compilation speed. -ifneq ($(target), kunlun3) - SUB_DIRS += ram -endif +# ifneq ($(target), kunlun3) +# SUB_DIRS += ram +# endif # .h files dir ADD_INCLUDE += $(TOPDIR)/inc $(TOPDIR)/inc/compiler/gcc $(TOPDIR)/inc/utils $(TOPDIR)/inc/os_shim diff --git a/mfgtool/ram/Makefile b/mfgtool/ram/Makefile index 8c0e5e3..8a19787 100644 --- a/mfgtool/ram/Makefile +++ b/mfgtool/ram/Makefile @@ -70,14 +70,16 @@ else ifeq ($(ram_build_type), ram_type_chipburn) endif else RAM_TYPE = smoke - OUTPUT_NAME = kl_ram ifeq ($(target), kunlun2) + OUTPUT_NAME = kl2_ram OUTPUT_DIR = $(TOPDIR)/mfgtool/ram/.output/lib TARGET_DIR = .output/lib else ifeq ($(target), kunlun3) + OUTPUT_NAME = kl3_ram OUTPUT_DIR = $(TOPDIR)/mfgtool/ram/.output/plc/lib TARGET_DIR = .output/plc/lib else + OUTPUT_NAME = kl1_ram OUTPUT_DIR = $(TOPDIR)/mfgtool/ram/.output/lib TARGET_DIR = .output/lib endif @@ -102,6 +104,7 @@ PRE_MARCO += IOT_BUILD_TYPE=IOT_BUILD_TYPE_RAM SUB_DIRS = ../ram/src ../ram/src/$(hw_dep) $(TOPDIR)/mfgtool/clzma $(TOPDIR)/mfgtool/io_lib +ADD_INCLUDE += inc inc/$(hw_dep) ADD_INCLUDE += $(TOPDIR)/inc/os_shim $(TOPDIR)/inc/compiler/gcc $(TOPDIR)/inc/utils ADD_INCLUDE += $(TOPDIR)/mfgtool/ram/inc $(TOPDIR)/mfgtool/ram/inc/$(hw_dep) $(TOPDIR)/inc $(TOPDIR)/driver/inc $(TOPDIR)/inc/driver $(TOPDIR)/inc/pib $(TOPDIR)/mfgtool/clzma ADD_INCLUDE += $(TOPDIR)/driver/src/$(hw_dep)/inc @@ -188,7 +191,7 @@ ADD_LIB = clzma io_lib ##################################################### .PHONY: TARGET -TARGET: $(TARGET_DIR)/$(OUTPUT_NAME).out ram_copy_check +TARGET: ram_copy_check ifdef TOPDIR include $(TOPDIR)/build/makefile.cfg @@ -198,7 +201,7 @@ TOPDIR = $(CURDIR) export TOPDIR endif -ram_copy_check: +ram_copy_check: $(TARGET_DIR)/$(OUTPUT_NAME).out @mkdir -p $(TOPDIR)/tools/ram/$(RAM_TYPE) @cp $(OUTPUT_DIR)/$(OUTPUT_NAME).bin $(TOPDIR)/tools/ram/$(RAM_TYPE)/$(OUTPUT_NAME).bin @md5sum $(TOPDIR)/tools/ram/$(RAM_TYPE)/$(OUTPUT_NAME).bin | cut -d " " -f1 > $(TOPDIR)/tools/ram/$(RAM_TYPE)/$(OUTPUT_NAME).md5 diff --git a/mfgtool/ram/src/ram.c b/mfgtool/ram/src/ram.c index c224f1a..5fb90a7 100644 --- a/mfgtool/ram/src/ram.c +++ b/mfgtool/ram/src/ram.c @@ -18,7 +18,7 @@ Information is free from patent or copyright infringement. #include "chip_reg_base.h" #include "uart.h" #include "uart_e.h" -#include "sha256.h" +#include "../inc/sha256.h" #include "clk.h" #include "gd25q32xx.h" #include "sfc.h" @@ -2353,6 +2353,7 @@ static void ramHwInit(void) { RAM_SYSCLK_SET_AS_150M(); + // 初始化串口0 ram_printf_init(); iot_delay_us(10000); @@ -2404,6 +2405,7 @@ void ramStart(void) ramModuleInfoPrint(); + // 擦除指定区域, layout是写死在程序中的, 需要和fw中的保持一致,所以fw中修改了layout,ram需要同步重新编译 ram_error_no |= ramFlashEraseParam(gFlashSize); ram_error_no |= ramFlashEraseFw(gFlashSize); diff --git a/mfgtool/ram/src/ram_printf.c b/mfgtool/ram/src/ram_printf.c index 51160f3..c1fda22 100644 --- a/mfgtool/ram/src/ram_printf.c +++ b/mfgtool/ram/src/ram_printf.c @@ -69,6 +69,7 @@ void ram_print_config(bool_t enable) int ram_printf_init(void) { + // 字符串格式化函数,在rom.addrs.ld中定义 format_str_v_fn = RAM_FORMAT_STR_V; p_log_ctxt = &RAM_LOG_CTXT; p_log_ctxt->write_str = ram_uart_printf; diff --git a/tools/ram/smoke/kl_ram.bin b/tools/ram/smoke/kl_ram.bin deleted file mode 100755 index 7b05179d4c2e1e80c7d8ae751f669de1dd616402..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46064 zcmc$`dteh~_BZ}aCX;CjEveJea?{c&EmZ9S5woH|0!h=Bi|BG!5f}k4>xErWaTm8` zIt}4g>QKt1XthA0>#|COtSGiXFMxoEKv4^Vfff)*!Cq)-()aTut)Q#l@9+2i^Zt>{ z%yT`@dCob{dCob{lOMqlHIvyD&9FpZGTZZa5~5~jGx;3S6~!N|V~C*39xAm~5cz!_ z5ep}hTwN~bxm@ATN1mEp`N#ZC8kDtdk(zfRUx$3p)t!E?;guOop(P@&(zLUUkdTt> zOuL|~%rQDPo23*t8EhS{SeQi_ijLji)Gkyz$oss}&NDiGa6UVkC!gf(<@d-3N@)x3 zKnuwZ^!9HT?>0*nRj5yE%XXd!QxwASTXWRr=59;)o%sc$jJBKPT%aZiaYy@zT+9y_ z@=buYxjpz@HEdVDRIMY7eXw^>^QY{Yk`|RS<$yHJO~n2jVQfK&#_ze{o?_{Gz@>8&>3lUwwOnvV zT9WfU%j*0XYh_cr!WZRK`7279h`2)u2Z=#JDzYX{pjO|CLNr%e|n|v@EPdqY?V}l+4L#mJPrNVFASUG+$X#Opz7b-=pa?PE5+No>7}Qs}dY66& zNpcE0Vo*8lwFKpp5$gPwZh>!Jdo65*(5kQhJa6H|VZ+oct>Jb_>7bQ;T;WCtO)cGM z&2(kZFgbQl1RI|jA)|eE023h(*kfRmG7W;Qu{{c~Bq)rjv!`@rp<7^>Lx65DU>OVu z2LnDM;4=a~qZs#?QH-5w6qDx-LYYCxA0+mFZ;+Vq(Vz^S(=M@%n&ozP=m;W_MvZAl z8&SEHa|DhXo?p+l*JZ?hxo~337I)}9pnMXda)qG+r#<8yzj8qEdpw8l$9E0B z6YnU0e)kL9pS|P9CuFA4IZ>B(DHFPOEu*uMX`7_f*o{lxWHPOb@|Tb8J63IuB!}w+ zz4nllr6+jS99t$G-#}blmoT&jW6w;fc^a)7YL#?lQ9gakv;m4M-thxtX^CK7!P80# zO%0YfsC1O*!?h?{AvDzBDcIN|<>)oQwh`Di0^3Gl+X!qA2DS&wNtVIvz06?w-aUg@ zU{1czGKjsO86@AoXCN^C0Jt@6SSf|ilc8^-@V-}y^zX&^%vdolH&#rDh!tb|_9b0Q zvcT;;C_|_H{`1vhMiWtZ&$>GQAfu@V=sZymEF>reqZj30eTaTBcBNy4n<>=a-!Vq7 zcYJ-sSAkM=l$!%|j56L}85M7|hIjmj;b9e&yH$sM_?l6|Twc3oA7{f@V=>lPj5QWx zjRm}Y7iBy)=uQ}Z#wYq3*kw~7FE53r7Caq*2YqGQRb72IIwnD<^$uUnrs#+idXn7P zqn#{pW1K7N{ETfTrO_JDUmR#t1Z|39yhY5=f@0%9k#V3>5mYLIO8cTz-=rnp@r5xZ zPL*$MH|Y%|B1Pq5S%E9BG4^O7-WeZu=dQB$h8mS$*-eUW4$v)Vc9=J|Fqul$!qyIa zpQiY(?7(+sy0V2*xWFkWN$wMP?P--_n^9iOO`13{)6UogzPKbeRnSeED4kF21{xAULn3HM1PzJcmpJfC9QY*;{1OL# z=?i}8iy4n!l(F0{b#D#Nvr-A<=}t^JgcqkH1Akv9!56)?!!YVhpK#N z#)W3@j2Vx62hR8d9Z_sQU?K^l>W|;O_zixq)TKPb+-`SePoYZ}!`PvosHN@P3%|@e z8bkA@BJXeQ=-sS3v>Beo{1s;O{8Hrwz}S_TA)CwJu#Adyfa?u zgI_FuiBosqKTnwp`VOok;DleSBIGXB!Pj5PDalH94qoDhWY}G$g2N=XRpYH6u|h6} zoVb$@uTegfj@Ws~o@?IvdzR4>x25CefOMoB$rkg1VwWPDb>8|?=WmtDwD;KJt#5Y( z`sk2FzR77{VXl93B^s{Kb;zY_A#$aTfRC;X&!>E&@Jgxom6c;HzJ(n+16yTdC;BoeG|zn-AL9rXAa)yli+hUi3_BR-@{fa zMAXuBmet5G-Xlz*Z@Y*!2Qot11|_@&v{|QukO6TiM9a{|ihUzNQ>zt9XhtT~SW0-_!G^ zKf=xKiz0D43bSaS@btqNhIFPx&=lM6j*yPx_9!=z;D{8AC@;`LcSek)E&RV7Be%m6 zp{tB5PuNRB^s^y#=6T1Ty@yIlaL>JJmUVbUMS10UUPjv!*rE?B+$h{=O`iT7E0iAj(368q2WB__=4g%Z6`qL&!^UN15EqaIl4 zd%L06$i-cTy9f9J5>?2bON`7pb4-YsaQ@;mZW-NdAZTHj>k)~b#! z!^Qg=&eO4p@ef==$q4t>^BaXQh7sem7tu?t7>nn9foCn!YQ=c`6126MW0^6TR@J%S zJ+yb8O|7Ne$^wX+TNecRUOe~c`u;f^Xk$UCSh&Dh{`W{ z>mU8R#3AXq-k(ET$!Zk)H=K_c#3q(E$%)zvQiRDar##SPu}jNpt?cBiMmeGUg4Dg* zif5yVFC@~8YAc(Vbs=VyRC#p*9Z67U$(=JXXU#reAzHc2_Oo7=+KP2@Le^zAq5P6_ zMQ+Z{{M&AuJm2Nl--f|CXGf{@Y9n#xJXY#?r}!Ez=UK<&nROZP zU&_nbQ7RVlbmqzO6onTHZv}K9wvwmt5b2(iS~&r*k1N&ylc&mJxJb+NWY^`hRg)RH!p_9; zV{_z+xy)XUK3`{k;J#Tdts1g`wQVJ!=AIYk$SHb4Ygtl_*>j0(@6NDx9rHf_O%7{M zU`7U>4?^-kl>`3h!OfOaPZBn@5-W-8VhF>g){>DSu4iNL)@yB}$9ksnZdKe41px{4W$ZO|t0p*F~eUn)YjwrxAO5Y&}We%@RE z?<}_X3qM*0FKj$tqAZ+9`NDg)^cJvtf$k?IrdWG>W|TSeKEjADxO8(ZLzT~0FB=&s zAN!$}mXF}&&7<3|uk$=w-L`otD7N5M%_pvDj;rnf|1JIE5f*&lo;(J$-|UjUue)PE zpv+OTbs3bS#lkM6@2B2ZVxR9(LHQ=gHP5+dI@NbJFO`nx6S{xLymoSBh-J?Ex^GsnRdt{kT|H(3@6BWu zKQTv*axm&72XlCZI?+L{FOTC*x^{A6x$Ctma(IPDeQl3iX+j%`#4?+i~_)J(aAND#HB6Zr<3~5%Rs|*BG0$_Tj*I_Shw%S;N{^UG<)Q_sgiS zq<0^NEus9X(A>=Q_(IhY4YgwpDr6^ayxLNVJ&%1?zTn`sLklufXd76;uAz+$O*%Pc z)zzRJy_~;lA97bAHzDg9d#{Zg-zRRI%LG#5%deJK1?#fGx{*ypPSIZLtSc_ACjXV6 zVD$#`#klxOO4zO}F70yu@h>)fCQsUU^*OhS9V&2B8^p7HnC~@TcWRCMCUJq-vld@|L1&1SoRwPNYeIJIYeQEHuQfFf*sEqY{i9{Y z?(WjxPe99#<)n~mJgcwmUbkT{s7sVcHMq+VCoQ`GJ>M`;T6}?=aM8YA<2-j)-yFW= z<@%gtz zP5t!eQaZ!H`RhG=bt`SZyXLT)<^<{5#y74zPp?b&3;AX{Yg<6}*x7rR5C-%*gq6o_C3|ers?RlaRdHcOkt@z%A993wpZjV#TX~Hc zsiRLnGfOvih1}12F{zBMmxIfv?R_a5dTNUp`^-hJp{xg$9IU9lI9z4ze**W7!n%kZ zoLyq}2A+Rqe!w~>y=`J;dthA*a^{=hOxps+?Z%p|*ooH=8zm=(5-Iof$#TDgkP_*z z!gSH9&5ew+it?Y!(PaKS57O@YwuYriL|c=dDz{JN^g)!SIy11$dgOlB&RO1U&M z#rK~H&{VQ6Lb4gK#?`8dLw-;ZV~?Yq?>7W;pp(*6Z+*9X7Pi4^hR z)3OcPX^OP2B85#^)#zDYb(2kjmI|x8C#vZt#^1OzUs$R$xUy?tJD$TxHFIqp?OqSI zo0E%DH&mso7T8|}Ihjy?J)j9EmqYvh7wc@3LFcaPBSU_tk+tM*eU zsLTsU>Kl+((an!Q=3V!meLADZ0V<)mxzqAp*?+bK#?fo;!>nk%I5Skx>$TE`7q9Jk zj!9FUQ_D=d+KB1XHnMiK>9aOyIAKImOiYwr%B|DUk+c1lV1T#{*4*C`oNvdlHKVA7RM0yg;k=w3m}$J<1`XmqZG+crek=$}R->R> zX$Z{3*?;@x>SbNo>JPf^1yzc%uut^U2lrzf#{<4UTV60h4`k9|!R)fMjE+yxFL;kF z25stIXH?yHWm1pot^#)`1n@j37pGI(k~Y&OZ(V{BVRv(1!$sKc?(q)%a9qjSl4Y=T zb4LRE9`D(Eu44w8q<0brVGV8CV;8c4S8a0=;J!4-CV~^a=Cd|=K-MK%4wP_Fb?UXX zYsLE>xP-M}RU%fB@iPq)~`@p$P z;}qBe#{t7lppckEy52QO+I*~U)@CWDvA<&HLeGVI-W_{glKEt`I0_@uWZIIJ(DA^Y zCb)Zo20?Xto8VkB64rYpztkeVplTNo+h zb!zEHd+CbT9NXXh3FUZaH_T6em2Yexke0MWdbULyEEDL_T-NXLY!zjKU$J7aj^5xk zlYRo~9Iz*4OV{ea7kXF=txdpMtjZr{iwYTbrik9bAhNy~J!ibWX!~v3El~#eibh z+r+SjdNEvEkI~#qN380yt^<0rpa2&G2M!7DD=H#DA9jJ!dSD~#ouI%X+8Y+p-mr-F zhDEd&ETX+&5$y$wXfIeqd%_~x6CQ+~@F4Vr2cgFT*w5HW8yh`p)pmALR-@(fX#oqU zn0y>E12lHl`xUiTf+C>3X)jLQ3Ekv+pHJ>AMP=nZpLUj_GPB=D0zanAqtxyF-=%D~ zuLDxHTk+>um&yWE8Kgd^z74qenF0-W^|{(f;q7|^l(;OB%d}wv=Gn=KUhdY}V$VO}!uf!i|OtqUP9*FTym_bYFtD?&vz)#qJ& zvw1-&+WQgmNrT-4Sk*Q^wIlYuJ?W?_14!=T@+f(cd!YS>)_|4kjcf4evEBV zKD8=Qos#-jgFedi{o^WiM~H!1tW-x<{AchGs##g_i}I74zNrg)NIf26f}YBeY1`8{ z%yU61ZRxbT&%Ep-?;qNHFvDd7teQFBK7Yz!=*8!Ve_tchqe*fbeJHr|GK2Ogac8~VV33EuJK zUigAcuo3nLW{f6YJ1ekeIvk4x9UrOc_^6nX5xQKS?&ri6b^f9iZofK_XJ*P`j@w_9 zQ|I>>PWlBd>y`;}j@s3|1IY_QX!=mq=^Q$-Lbhk!5@TEM7?&_NnylI99a#Sqm5kz+ zl1Hf561W;5CjIk~5+yiZ#RzzLwqKeiKnbv0!jC*m=rVekq~Y!htSEXuNtvr=N3+n4 zhf1E>p=vgK=elYu-utWBCL)DbKcZ&CH_lfNS9n-W`m3)uwn>ZX%*tHh^+q4+YNamK z!(n;jU))TgffTa98!}TKjq!9b5Ha>m#yjxrEIA>R2+;~+4z`ksSotnPTW@SP_WF^8 z*`>b~-!VG3&VUk}+Z_e^&8irtDiy<^pQTf(7YmDrOV&bCU_SSq1v4?R%zO0Rw#W9Q zTHNtePsx($x*uHgy^hZBg%eS#iCPoD53(>>F^h6>*CM&Dt1y|f%*-sxD(*^gCT1ap zQxd(z{3* zR3m8oi|l|byErlcSvFEQ zTauR)K7S`dy{A>;1**ZpjwlPJ`;5~}j!L!{hWA@HG)mT2kE%{sPfmnA?O ze5{t*wWXM5ZE#Fna%Mkvlb(3bzMK`bc54IHZZ`1%ZB5q<4cSRN_cWgjmRANd_hTdh zJs9yD0Ux5`3g+4VaN^!zTi&e`OFP;hSRrOw-Ju5JX@2Hb0<`Fy)hAb-C^cQ^1{{Oa z&gSGjRtgGaU_~%US8Ky7c!@L{sNJ0~)b0*HI@#c1H-(Y_ohSP8sOqqi;Mh>&atJj(n;gBs2I6D~m}ZMOAA(cU`D|u29W> zo%3|5_5&xdMMP^oT(uu~(xMcL9qpA%6l*$9Xmy)(0VN#Kx^p{Fj`uLtZ79QI&R`{N zyqsC6z6MTSUaJZ6u}KRar+x8<-IC@)AoVaWg*B4^r{6-W8b}5rI80hkp9^giQ)}yh z^I5>}OfmMKpolaLP4%$NwE^sF-rMa7yU^AlCm0W3P2bT{w1z?>H~@X*h0mTU^%`bO z$1dV2+KR{d&-20BxjX2NjLJi3e65H%V#M(Cc=DE_z|&zCyPa<>>ekT8*s<%l1!-xq zq`0y#kyRrjc*xrm*^IczP1F-QrYP{th7a5w@PT{!RJF}a!3uqga^UwL2RM+fF;f)A zGS_wSCZrQzPuH539QqZj7q@ii@X8lhp6HtbOL7KXbrmZ#sUJMO@@g1zx>RrXtf});YIR@e zPS^N^pG!Y@pp+rLjyS2oR_YB}l=0NO_sbuzne=UT<>tKy%f_9Vc53>`S;yxbd;aK4 zM>0Ybd(x6^OQh~iIzgY&)tQDJCf1pO*bhDWty^m*zQ_&xy=VV$YW8Vw{mZRX8>UfN zC0Wwh7ESKx%rW}WVPm+lQqD7aY4&=ZRIri5svMHGWnm9bFMX?tY9WdC;c6Xk5aXJM zFPyj*K3Z>c4;$J)9+kE{E!cl;`;+E>+Zacmm zd^Yj|X=pXRQ%9y{U;)dn8y@7G+hcvae9~SDsp&u)DRFLFvTzzAE%bVyR6PMB*0Z#Q z9tS8q3ChT{W7h3yap`ZTQ@vSIAOQ~QiK0h2<`_J*;AibQ_nmFuZaH~LXS-Ik>(tQF z5x;7ewhAm0ibu~feVdrE6|J|pfz6tPZ_`grJ39TytV6mp<4!()eA2Nw2cO^nQe{TK zyT}%g9%1SY9f&_v7uR--$UL45|;-6Lwp2k&v4cf0{{Ipse1quUfjwOQN5goZZk zSgD5HmS=~Dq)m)J?-w-F{K?!Pf-{v~BRIw}JB8#QqQX#AK^a z)K2i-KP1WdR7<}Rdgs^{U*x5mFS@7B%Rc%3@y*9FVh$cXa^%>dlLx=uf2Q(>^4h(Z z%Q&06ybXH;Gu$I$9~U2s&f^K%eU7Ykl!YsrD{u+^Q?jkv4Y zpwUz@@N>n(x6}Gj3cNk7c`0K5Gp%ww~XwRq4;%0*~n*Zv5+Q0sJ0cmDUHZ(Y?Z6D zh-+(TWh)}l@>x>E(X>b+qBXW6p1@P|4>5$M#gn2Cn)U$FUU{o1l%_oZ&Cc2?qDQa! z=vxZt#EO>7G%VI;xj5}-3Z!ebTpmrJi<&=tvqYiKS6-v30$1OS`n3_~wJ=x<{MkXb zowQfp3TqVFH9t!=5sGoe4hn2tZl|jV=&=Q9pam=5>s!PmD^?V`x|Htib56FGw+K`> z&p-qQpV3uX2CpCwye_8Cvz(MwN0iW+JJ2HfpslL>D{Y|lR?t-|A}Crr+goc4jIRFa z-O@c=xO;$~L_M5o%^i)nF$1(CdHERAXz15r@W*!WOgUgCPj$kqR%e0dU%eG*FPV-5 zv}#y&OJp!_jJ8z`?GpdoAYnlikvM&bucv2SsGrJjx&pd&=70`#A_toEsK82C-~R6X zww>b>Caj*Io7$8%C;eo4%IKY=6UM9_qZ>OL{KDyTc`14;2YNPaor^WUsbj}50`X)8 zjO{CT$F~LF>u>i&Lc(k(K-bN~$GU?f9-5i~gyZ!&y(`@Axu2?z$rqoj za5um7i0Vi*^*-Qkesq)SDE`xv2i%jxAH%ww*!!^ib#A@ts9OBwVRxN;kLqx*>-`lX zc&g7np*r%v5@R{|@j3G3S5$KwFi%X*yemVahG0*8U+!IEQeQ#rKS&T0EP@#Sm>|Z@ z6vWthg4#`c1$$DB-;pA-SpOo}TwdG;n?cVaznoNlmF=g!Dko=Ml|}1SHbHxZO}1W< zN#$2erLc8&`_d|eXs=~jcc%$@qLr?!HLz72R^%ws8S^%T(3rP=H2!W_sUo^Pn7=FESoJmY zT#nIR&FsoQnXh)QWrWEI*vA`}!kawlBoTT($hc}#m`_#+)8;Tj^k!n5YiEY!xaJ%o z#y5`;SJNay^J!ZVA-P=BlI}~ScjGzO8?TD}pSddD_v#ffY2y`0@+*ioxgx@YDJD#~ zA{PUW;%+22B)8kHd~w@Nzb9H~XXEz>a(t%14zLLF07hVw_S_{WW!}Z!Yq?9lm$_>Y zsPD$2cUBBuQ6dkAul_3b8jIW6#MCz7yJ$vT-AvT)On?`VuCFG>7yib$D(5g;<=rdT zdqc4IN%gBwBr@OTf4*AimCvY?Unj1*xs1@OE?Bl|E)ynyf(Rfn_9hv-dqKx(fN@7A z9n_tC{1816Kw^4ZO0u>&)z)Tqdw%adgPl@i6?xL4@K5fM9HAP-oNA4s(=5`=G*(!e zr8%NJo^9lwV7%iqgl{38_858rWDf|8|)o3MR+=Q#p;ieOUSv2@$am&X@|{r3q28?Y7R z7^aeP3s)NCnV_CS4C(uIM+}xHF&<&^NoEB+8|q01=J-LxF&_7;CwZm_&mx?aKsr$; zV<)G>`(&gCp0JDY4StbB8UDNWzrEY#{~K_hgZw&m#QGRSk%arn%=4A>Bf1Xf8{iMfk_sz=&F! z8xQzUCl$FIeHP(gu6h+v(%feNCF;;zo<584kA4|3gywE!itsELgIqm*7U3WLGGZvr zJ7U3WLYQ%7w`;4Xt&l;NBjXsO;->G*~ zJrS7UPw!YTPj`}@H6bzSM+c?Ai@;_1ys;nl7?eU!6lD3F&v;{3@{q9e@C@TF4N9T9 zlGX2x&G^S4y4q8{$R`=}8gJ|?QN|&Kq;vl1tV1hl2($UzXi*S`M3EEjr{-l>zF)q1 zZ$=2+Z_>RdyjvRVGtsm4RwgXMhBut)J#0mx6K>&Mx7I3l+1R>p>f=gLmsMEf<8Kvp z#WRfN4%8NfZEP(HkH59S9+nnm6T`7CVn1KhEgre!HF@?T($JP`7sb-FexMlH&<4-XTZm%jHp1R9x3G_`h{Gz@9kqB`>+Ih_ zTdx%Hs1*}fk#GIWF6xmRx(XUX;os>f6pZ3S^2>ea%%6Ece~IoTVAp=QU{8<_INOE5 z9wlKfwazQ{ZCO%}Mh&$~Va?Itv{j_3pC5XJqIzS^Z@ClwsO?Y-%KF);_5STZJg5^f zWQ_q^7V5B|^X}K(h)utprbRnFXCs=Ao?bfVzH{Ek9Vu}RR+6)iC?>4=(9PPsu?CI6 zIaRc!#hkk*CZR5Pv2Rd*fa0wN{@UdY69pJEl`THt3Z_rbCq`wG|N zs+#`*G1W0`2lElTP_||tyeK|Jt2Q)rJGGCN3#096I?HjtTP}jOM>@-~zgw;^%AH*} z^_;Xw9}?_a^UJa+=+_ZRsFgyhe~@3nyK6&H0_54j`VnW8!#2-Z@* z(a_xRwp?wn9vuy>yF%-(3u`;LiejXo>{MAN7u-m@E&cKiEQq4M7R4@IDAsh&qXiap zhgRSd%S?zwl25>EuU;TW_u-5MeBMC{>C`vsyGhwih#-G3+rkXnP4k|@OvWA8og^{z zyx6!SkZryJHj(ZW0`qwG&k+YqoZ)A#48lXPKY(KE<&vxyud@l|KDl3(FQ_e5OhM$? zV!C@*o`dbeC!KEq#q2>erryk=RHm(9bV45XwC9ejs&GfxehUKq9T1c~^Lr4${}Wp_ z_rD=fo`$U_;hx!S9rS|_aq_-oBzAq*b@;pDoLpn4bBXmiI-!KCfxb;N+J`XJ3>$W zjjNe z@>CTdPs9&9ZusNxsi5Ao`g=A>f{pVctkrZ$;bQM=gw}@b4sRs@UQK z1Z@mF8bP7OZqrIVc0XGmn29`29cfHlEWu9VT`Ahe1Y6aoz37&-6FHSLYfYRPx!-TN zog0xh&n@v2S(VEOF>x8lZC`&ow{O~Rx2N~S#=dEr+)P@YTc4)5Bho$!=)@#suvO(g z)YzyNUH|U8o!F|tit?d`rak>mXByRUJKuvAm(H)>%XtLnct`|2^(j4Dt)24N_%u0L z(X3q#PaP}$@YEv_`Xa%wG24$1Q@$+U0J_vg#>d;?B5H2DvdPMz1e^Ugl` z>%I3&XB5!6nEWyJT;;8T6H3Xyv@Baxt~owlzQ6pI)GG{Hh0$@^>~hRCOAU3zwY-`v zvo4${Z_zTYs2xPDXlxhbKW;r_hX0@>OGDEHCG{ETw5{B1L|C_Ceb}6mCyQEm`!=>B zZ;qI}@n&C}k(+NmI)&Yq#mfIKXW4&iwetH`E&ER^vu2FEt(++sA87l&jW-3ZwOx$+ zxRptDW0641H^J|%YR?qnS}>cqwpE3W)2<63r#ks=Xi)0Nf8$<|g1rR%M)8JGGNQCBpzul)h3 zE#JN)9|?i5t`%=-nhMsAlRQU4mXF%LLi%YRSw7CFJ84n7)OSywd>hlA&yNxO8JOAb!XKh}Q~Z+Sz2WaV`C)nc`n%bzK3+vNwqQMAzS+z2@Tk zj3Emw!jvgw?|Qa>dCO{9H2j@uT{KAdR?dwac6vw<>T#V=`zh4Z0riR_taQB^v~~b6 zzpYPtCs!{T_A`6eGO6#4=4?97xNIw7r=#zd&pSr_ez>bHFzRnV$EXjo(#^?sSNMSd z?Y#DmXgI{2T;X|UzRwu)h9zmu{Wj?@6@Lk{3E^a%G>2n^yWb!}c=&@U@30e-gRKVU zp0*m8`)|;yb1R+uQLgZ%^5$Fn89%7=EL-sjSp$8sQ2@ElU6YRqJ>Ax>Y^w|Dvxp)5E{+ zE9o71TKNAoDu4Aucl2bKPNTfr!p2Dpw&~QVQABtvitI=imbJ7CF9ECPN``{ol8kq+ z0M!?nZ>-JM|3$&EyD{0JuBB6%%Ju9SibG&yR8SVU>VBdW@ilNS?}IdW{ee4XbmbS! zJ1Z9U&hF}o=-MWP!wS?rY=ZRWY+ag7dahzZpA>zFB%ju~oTtswU;oJLb-LtA3uB|4 z_PA1_x|S>;<5XkFA1y}iJ0i`R_9vJ8wb>OqggLU>rJqma1Mrq{Mcsz9d)Aitxlew@ z1)yU{AdPevtKojvs&wP2*;vzsWipde@IP|O_2STgoLdswjn4IvbxrHDLn*IRuKQUQ z{RWr3rICEqzmP>n<+e1LmUnlaJc@%P{f=;~Nam9sHb|zIE3Exel%2vUDvMalTZ@g{ z3CoQfm!mo$mqxDWkt)sH-?eYbYMF&KuXWL1a@PK8^y(6p4MNABf~5RS>CJ(9i-{{- zALPI_;>u8HmmOG~IE5HPwwP5}*3$G!l|A))s{q>Z{jwdFd24ZN&d8kiO4Vt!ohcS) zj<}L#jLJ6iTZ>ocv@SZ~zCVRZv=fkM)fRR7bYcuYW1$j+o!*ymN47(okGnt$f+g4_8<>9&b8tj%hfy5Q9hWC8ht@}bh4U@Q^Dh`B)HpkjnfS@o9>1PT^~~Lb;!qbZoM^Ui z;YsiKdKeqGk&=ARdVQM^HIA@no_!|3v%ew14zN+{;u3?GDZASmIeEK?SGSJH>ch7le5!GfWp5zXV>mOFk_-29A2`~X2)+ZtH0@H{8J zKS6u+lqCH`3Ql21Kx0hm|NTwPcsZf`)_<(ht!mh6@ZKslRl|;8h>&j9!3!H3!Pq=E z>UMorzTk7UgRTN}1Uw3}qk^ExD zq{Y1->zQu?R+CrL*hA^oX6z6pU&Uayf}=X2?m&*h2`6?EBY#07HP_um&pTAsKB&U# z%dY)F(sk3a{Zi?f#Xp1)*Xqp#Um9O`S5qzHTHVCR$*GJQ(%8;ikozyz_+pyYuoWTX zy;RrYn-=55C`-v|frDn4y;<|1x;90stK^gvcL-sGkos=fIwSWrG!2eOZ$>lHjf$io zOmTbwripIwb_FZ_SWNUe&KyPOdE-a5{>(vYS{PC$)lN_TOwbz7fMb=YUv zwdS7hApVe9o5N1VivG7#6vJ&5y*t_r3AXtkv{?%bS4RpVqvq&s%%i4o!myK}r`@V# zq@OB!vPXh5;+pFxn3FSfPOfRB#=6+ILvlk>)?}u`)V>Ht@v1BPq@{AT8Up=n_9^m?PF<{f z5c2|fgz$P6^AhqkNm;`_4cPuxP1`rH`-Av#&Amxsn}YU3F0zuB?`7n9w9i{GKd+u? zgU7KAeY|z*yl|>J88S`{x!EqgbS6f)*_{Z__9w=e7|g&aGtT-XW$PYPxm1b;U5HD^ zGV&QZA5{#fGvvSL<0LCxsE!F>Kg1W~$q#8e{i%^ZWzNf?xM!!VU;rz{e0zoVziaDQ zsl8e&IKsQ>_@4Rf6rPwsN7AiYTBE5#L;WO_8@{33P)#wIqV2cf@SLx1yIp#Pwxe`IMeA>t zzFK`VFUO^;Hd{*9uAsQ0REBjHG~;QhX!;$Rxmicv4pA4U8dBE0mvYIqHb)3ajiu+x z)No?hlk(!He{mfCbfn{x9WTaEZlwI@xlwWBP6#;Jm0f4{E%J45S+OuCFUNCtNSnZp zdL}pZqa6=AcJJ=oG-4^c za{9?&)KW>-@FntA9b!FoBzfsz=gwtf^7+ZPv# zM!)s0y8N)2*uNNo*rE7nlVOxvgM_G7hi0l^Ar&r_gxD z^a6@W;1n2;Vqj6xA%>_w>=tk9Z_-H6=at`z1>GKq1_gJO2Yn1BSv8hqWm#%4{vWi_ zajOIaJ1X_YQJW<(uvJ1O@bAQdO`g@v`naFNewmVC*=9_3ttQyq= zR+UBhi}#Bq@to5hu_x2s>1*1aHe3l>N`tpzq?h4-INSlV9JiIFVbt`FtH9kBC0e3M zdplrj3(A39yHs06B0A(F3lB5(ItR|@RShA5^LbS^LeJ-MbETgUe){R?v|rxHWCg7Y|QWv$y*(3$0^T^;I7KB z0WbfN-Ku90m)TPv@Bntkq0w1MSMo;aabD{Hkye|SgHFV2G3QEgH$%sbb=0bEq8=xn zUt4Z37?t^Brj^cY0<6ijKH^;0_O>@x8+AK0`U>O3%^HtkhhKgDL9$)RtWxJ!w&!v! z$7{@z->uCWbGlSa;2C8Lz4K;ser9*~e=z>VQ#Kvnw<=XEjAq`-c=hS>pwSy#Xr{q?xs7;FBe35tH$f=h_w_G4b7o4c|}2mE5Z-YleBE%BwotAaQ`4aW37uZx&{<(o9YnX~%%mrqu`ZPldRY5PxBEKDBm+M$s+gRS&y?G8FmlncgHy5s#M z;1P0I*VT+-A+?hsuW(9X9la}YxDzL(5P6-Rjl0A&1?GeK1!XnZWhYu{%IK)X!U0SW zGmMQ=c`yQl`p9)B1Lx_IKW;;8nxFPE*eMEHzZi*M6n@?Di-!Mc;D>h$=)1Sw-Q7o~ z*yYWYBWUj~oF9gr*(Y5&LDCVcLZgz{M8^o}nP$WqX#J|r>QB$Ul;9m`xTnTSCCS13 zn(}mo##-0_NyNPOPjCK?XpU5W`_-8*e>hzGMfUdxzd3f|<2+Pand7K8FXuE$CK%{&b# z%M0|j45_xEJ8*ZGsh^MRnGK%?&NYAkZE!61`*A|Nf3VS0)4EVK8 zVyw0a-mLcnY4O?{2bUtE`P-Arn9-*D{UqXf_lw}%#H<_A%DIr_7<0V!Cqb759E@F0 zaj+=ABx~#?W;87WUyKFOpEq!aPDD$%^lnm^*x&jSPS)ziuK#wm5Q3U~`3>9<_>-yx zYB$1j+J;kyKS4{o0qekZ1If~PlpffM(B#En66f9w|%Hu@t>1!ft3W;VgSM_!b_Ff%9>snpYv1Yg{8-n@RwY0u_SDuPQdLKia6hcHlt+Bt zgY=YDpJtuu1IXZ8xG}b&u^Zwx4Qkgh>m_R}EF1qSb#>VQJNp9W;8MA=2aSR@e2a*m zG3$N92Kh46UHmk93k+5DY|(@$Kj6Pc^aaAxqI+@C#@Vp}ptclPB{-eip2-x$je6;smx2zMGVMkl>mY6bFgo(dw2s^NJgaZ{k0_Ir>40GTC{IuBa;9}$HofuI z$gL;dSVNk}z+I;Cpq{*}cB6iQp0(+ImXqdCM9VZvEf zs&xm~#3j7ISIydmTZ^}4B{>&4n2rdZ;L6rXvjz6Gpq0~znlcReIc>DBI?lS?ycybN za3y>>cA&8{x5j?h-TA(MG>x>H?WWXr=ekAn5nXyWrE8py4@7#2g$-u0H{yK^XCIVp zSw7sR;G?H+ar?qEI29GRLy~`HPzt*rR+M}G6T** z3)av!L{Jo%85_MXtY9*I|Iec}e`0Nkh|i}{FFh_4m=U8@n8*ZkY0UCxkJ4L#C}iRy z-mGTX%~Bptlp#6=d%itAa0lutKX$epP8Mod`$j(^nsCnz_Ujo9KS#7+S4?@0U#`Qc ztcEq_N50(cMohF1x4CfAhPqJJe%yyOoAtyrx5@VNNJo3?>NIjn11+PKR@LG?(l79_ ztn^MTXf7V_D_Lm`eSZM&8LY=qd-M0}&A6l9D|gfz&w7^DHqd&w4YvXJxl%ZAW~~|b zw9x*L|4!YFV1KW$o;9^MaJPXU`8OV-ce-$%ckAlql;adi*0Z*@o(1$26BKgVlJs^H zZU~5k&H!i&s&T7UJl+9K_mct0J;VkY;s?PaGE@iWVyB!Q4a#YISww%yNInGv5 z`pZbcBdcfrZXqgWen;>9SGDENRh~h=88{ak=vNGX;8w858L!H=a-12= z`eVAnrQp2b-){GWdwbDW=ZXX9UW(X*-5bVA*PMqs&W9|YtIURuJsvlt)3)2hyD?%N zM${j_Q2c1DRV*|{Vbka z4Sw3^uk~B3v9V=Sf~#3zb&5SZ;m)s&*}<1hs(s$o|?yPuvZ#0^H>q*@&#ZO}3I+XieoI!cW(!QPXCyN^?dCt|Z- z%sBD0tuol&Ry%e%y5%YVvP<5bS`)aqsB7_1r(NLlAC|HkiL~?t;$)nKnf5+cBYse9 zB5{+7(zRHxiv7XE~X{tYI|@tIwQewhfhF%fF2RI(cfZnYs(&E`&s?a zm|{XXDkarszWzXtS{DubWkU?Lu4rTEE|qE+@5v%*Ld)gRRL3aTbNjCN+wp%zVW37t z{`IZg?o5V#=3gevQg#E$EQj8h+oE;z=&{%lEq-8%7E2PNx0*~ykrVltC4tCH+W+Zg z>iGw-XULBkV)~_~Cg?u)sgTYI$}kh4^3m3eX$g#R!9$EO?EqQWads^j(@l96HTg8M+pC9-=dmFe_+9MznHxD4uKWr(ATgFc26K{{yT zejli$15hw-x0#j0m(_T_4iXZp`hnx9y01ZCI&mGcRrmwET9*Dgm8fRRgh@8r`rH<87?z zFpWlD)qvOw%>NJ2uYUU1?1huQ;t<DZ_rQaj>IxUIlxfqNFgkCod=!5Hk*3hFQ+yHPARFns)sWn+o~SUwXv1ZgQ9etusWIy zUCr8bM3`j5{n_2wVa|widK*0_%h{y`&F~;dT^cnQQCK75(WP#U8vO;6vXDXCO%~+< zO6>~o)OqsVt>@gP`EO{Ev+OiZE|t?a^Yu~_7s27J0k^|Ve2TtpIrsCf%#GVZFpGxa zc_EhIjMJ33N}2{MYyQend){E|LP}FR_oyjEJIfcd=Vf?nG%nnD;%ah}t(DhvKG}!! zC`3?SC!Qx++_8oC=_X=)X&VuK;xp7}oVaM_Uvbq{F`(6d;G7ChA>G6tI+eJZqZwCS zGj8I&iIu|Bz4}(?x$+KK2w2!nlr#Ef4s+h7ehOnSeb6t`>D?!Cq66j6K_)b!51ik? ziH{<@i_8f^PlBA2i|{6DXf7X7gePtHwtU5`-7LwPIU>+UaaF`!oSL6SAWpsuO%WdXfYwtwtr?dATxJoV2&oAiH^ zW2)A+3%ujLUHN0@;%T7P8&x|nmdg)#*_E!B5A5y$F%vn&xc>oOz%Mnr1An|!+A}E zxTWr{JFy(-IdZU7KUXXa)QuuMrM#V#nw3?t+n z@s_4IT*OdRK-5PPf)Pgr#0izKLeW$zQ&C4vMN}j#^M0W;B_y++5(^}3fcLx3nZtmW zo_?R_&-dZOo_)^Q_r2F%d+oK>UR$J{nx`)0pOsNM@UL$>Q;OE70Wx$2?Q1Qdt-NY2 zz?BUJPM~){-%!0kl`4>zn<3msj?-JGB4X9>qN`GNrpBy z3rpRqbHV8cV+O1mn(f3ayQ(C-prakMX>0!ir|bdf%x6+{wSOV^2X*z{mvY5LmvYFu z1y<_1j`|0;F?u!&93ChqsjFwM_oQ60X%XVkzI#za$0C^JuKK#xQY6o1NxCXsy@lt- zf^P$=xMmpD1h;3vriI*f;4(mlTl;`c@=h|f*S;oD@8|(LoXJ|pykV!#E4?Va+D~8J zQ$nezj}YHgDU-Xc8k#N7mZ^7`n_%S+Gg*i6Hr>W3_o{c^RV)dlQ+squQJq}M3Od#` z8KhG|jp={8q7Z0ZIwMY}mQC{etRxSsE#RQQ4scLk3Vw901sLqkmG(UCmfo;Jc4X~_ zq3@=Dro-7RZnWBt6pfQ~7N`)TNxA~GbDCv$8tgzVft~L~5>LBElWfJHj}6|kazE?? zR7X1#%}jd%;Z(G@G~bUXXuyQTR)R_aI|lNdGTRr0VjfoYoqyTBz@}K8yqWR42Y!D>H5O)9hRz38M`(7LaK%$YmhuX;c@pb8R%H1DYhh|< zT+hG>Dvn-MtM*`b4Se)dnHc?GKTn;CC4VgG`&Of}7aP;Y^{b_14f=CQPtu=HkNNWx)-w-LhZ)t_E*qgeh6l(PFB z=VkSXgcaxfF?>83Q>k~9xvBH7bfY*lw#r0#jWTM2obtgabW?A>(v9!6KH6xUVBRSi zL%*`a#rSQvg?>9^6!SQpx#7GThfR6BPJ08wshEdzskSu697d1u!Kf3|+s3%YALBfP zMwrLl{3=T_Mv@OpaT1W*$JQ*p$w8xH=Ok022Rl%ugf5#w$K6upppfWsqR~Z*IX_{O zUHK}U2MNOS%;06*?!RW~B??oFml`7)`CLYaIv5vSrUU z+fn_)yP6%T_T#!rwx-cM7MYCDFG%ze;W-kgk~iN{P>7Es!+krVChtTY^#16ZMv>H2 z8RY|cJ^$vN*i%H$=%1I=$d~d=rId1(TU76Zlg#SPwF>%DR8M)(vqoXMO*!z--VKz4 zdne3~7j3PeQ#WE*(j$70<|i+6_B`Kuwe4lxeh2k!S!I2!c*rDYEvqp292}2>=3q@v zjE_f~^;U7VPuuktRA_cJ?Uuq!^0ru!!%T8j!&GzC+PVjPjJCLukKxxa#zt>qhaoA| zakQq5W>9;bu;6qHFi1grZaoV&!6F!~-~?UNA_2m9ylR86vrkd&A$e6OT+m-`;0A?K z{fSc{)q$SzTVsVi8#McIIU6{tfrsYJfaaY6)}CvD=7-Co5=M8%xQ?FQ~T#V*$QWf1@<8(1?+6wT=u{^wAwqPCE)c1s)gioklyi#qYw} z2JC)|$L=IE-H{HdbD&h4dt511NU$3zp!sjZ>>_YLNY0P5CA6<#eM+#uYF}r^!x_O= ziN>G>?E>nycmwE`Chz)nZ1x|eSp_&Djau}RXlt7cz*WV6Qu{z7D5}1Z;|rf=X)dLy z&Z_<{$!vl;MriRyjTV^1My-wfhQE`p6C`gc3HV{))ZX|--wD;__?x(|>Z$q;uovZM za##%vKHY(vrPP1tmydPk$ zZ_;2+tL6yvOSnOg$Bjyd(K3@mK5RlHJHFEDbS+Qaf_DL{Eua=?jy!f=VE(khy{cKl z%$TkR*D{hXl`o55YtfgZoplCq$A||KnqgmNqy2?23hA#Q4o1Qw;R5%hJagRfDd192 ztfUNq%fPR7+>X0}>=A% zeQ=xObn-hk{=_B+cM89m1b20RnbD@JIxbaW{U2A$uIiLgWjMn~d5D-bmkqZ$-Vs5& zttYTow5N2~qt?Kp7-+M4d-_(A$5Fs|Yg>;tJ1(TV7U-Xt)TJQ{-=iwBuHoQ`kUPJp zjjg%y6JJ_?4K$x6ws7?IjP4i(lxp9-?HJJfQh_fdW677u-iV4cN`!pTR@&#ODAa_T zA`@sgr;==y_n;De^ML(S563Q3kxhKs6@sexm|~Y9f9(De>&aq|LiiSzr;O^!_&0fv z9(a?B9+Te|s$Eiwt(3O=_qK0T-_(!ORcJ44Mq_oYKM5&=i>SZm2iR)|O@i8_Q)`+V zGA9PnjS!$$@J*+ZMw%9sHBa<+T8VF58>!VI+`QQU3-eMo6c*D>d%Eb;8$4Bu9|(ACTYU@GO6y*uddR3iSiL$6?k$| ze!dLgdAN1Bqd{@@U$&ZIZdhY@a51oUC$!n@$d?5ywg%0@u8}rC%I9l zmsi7PYK2ZOsm85j0&iWI*XKZu?Q}48@et{+$QjLi$RTb%`!$v9qvfn?x(lNrNHun( zWrGsL3MiwyEqg7?E;HaRC3&)UWF2@%?$BZ~L`}^!)obvijC94fH10{JGS%COa*uE1 zLZO3I2CfZ5%vw9U+@s1!nSHP!8}(V;nMx=52tQ^btb&4;B57kKP12u~iurve6YIOe z7KLJZ5>eMbcAS?Xjg-oQGEGt@CTY`ICt53QXQ2s;K=QL#xuCjPh_kxgJ?%(?*-p_6 zx#+@1XYa*1&~5~M|EtMa%Zg68OMGNC_;TLv-m0Qo8WG-_@2x`kFWy=Ygeh2(>piU~ zC^}P{NoB5<&9m~w1>4F#2bvgJa|`+;JIJ)oot;{@D!^3l!i;5x6w-Hn_IHC_)q5{D z+vrE0a-^2?`b~n>IjZ&y}(lxnrW8RV()S<6V}hxy5n8{!2`Q<@r}+A znY+TZnGNyxqHsz)U9O7A)L+zzj2OF-27(&ZLbDlC_H{3S2d(?$;5u;kyL4l`hS{26 zvN?Pnw9s?GyMxvrCvCGERjALp2aL~qV|b{!k}GAARWc*=6{HBp-Dz8@P4b!{`io`Y zv(*f#)WQO~LN(1tmeQOA-r7<&FGIQ3PLz}xl*xzr#hRpkGKzI{iqA3&Vr{ZBr%PCL zX5%U?pn(s&8ACmck>pOs6D*)k@7LKqTGsT5;L`u8yk9F9N>D`$x#W-ck+I*CT%$8j zLB7H|v@YRjWJ=IH+?1iuuCvz%9OZhSYBfECn`2+g8Eg@(HS1s@E?w^K9a<+Yvda=s%bow);b>JB|; zV1V_HYuVA@Fm4~Zk>+d-mm{X?rO^MGPQE<3&o9-%1QsOMZ19@m^6F0 zpMj(Jvo@V zIkxT0uhb&HAwqs+`Ss>tAzcHvLl^X$OG*ePnQzj9Bv(UJbmr7dDhsJc&@AWX*dFVb zSAAqhIVkc2bO`ZaB~NY1dbG7<6)0w|WQA%HUoxzHb0rHgm`2Doxt~yGbW2I9q1KWVs?bTaCZXSH&rp~a zS_uoOrI@YzPL_iny&FG3{PpH*?KHY;V*JEZVs-MGa2A5w0~V+HLNS}zQ`PTH!B zT4)HmXse91wHdmk(5md(CSPr~b)7QFnMD8NRx#!U^C8d-c(9ZpvMH!9x7kzT?ck?sp^LBW3X7XA4%oZhzf=5fvNfkWw_(=@ zd^~&FOYvG=WW|egx=8bU{3+b-y|S0lWaq*}!A984H4IPHIWYaG2Q7Lo!hU1-8>BC$ z1+Jo6q?Ws5NB%NPJ*8p#lthVsWx7becAaSQvTra3e$i6L9J{H-{M+=Iq&tOip8u;^ zphBq^aW}vPz!P8z*zcxw1WIB1O{%q!bbi~LL#6&He19i}a<+>2xRsB_Jti$l`Sd%1 z*G92l;cSl*_f+;hVF#sP>(MgiMH8$%LXXx$^g{h8*n5QiCAIvbrBSf=Xeq!O>^)k* zu_Jqr(p%8Efa`kE0(*}Z2SAZNdYu@3yP;NmT}Qm?N*%0$SxPypOw~Gy6%769)nb!W zV}X_1pG8{Qi4%{Rc*|95ZZ$>g)ONQlvteKImL&)pthX%lbOr5hSqfm;Qw`p3f&4v` zT5E~0QiABEA0BP_PXSITO05f%8u^~GT6KD2ul^L^kn-5LkIh^9ARiK9X)vElk5IV&O2_ zgVwl}c-$@UTD4UskfMS4Y?*9cUT9X)z@y;AuD@_~lxcyydA-&b zdy%VW)^l%H{poG}nLk4!^17CgT&(Lc+CTkyp*0-yToC@W2zmf#<&!4SuH2@Z4I3cf zrJt~P85_@C^Z)e%SN|FbSy%E*YwYwh^mlPfnOzg@Nx?5vL9Prf9Hm?b{=7Rh|Ca}( zdN{B#3m1l()@fmX#(SY0=WWwP$K+w@CF#$}cg@_M?w#00)Y!!v`?)o8Wui|F_PgNc zE3bI4ek&`o+=kxE%P=Yz^u#)AO6DNa{JcC$L zmKnMLSoc>Im6eH)$xBizvR*&EBuH5=Z>BRLhmq%!^4G2JM(+Lfa^ug?w1y@uug^gm z>-!8eO3gp^GC~*fH*Q_HaS616Pfw{)UzF+=2~ ztnSB!UN!{w(N^VMYBEOtYF!ihYiP$Dd-mCzwBFHb2fWJh5cpM=F+G!sf&Ilejq0Z# zUc-u{HGWDtW1M{)shmY6Gv?i;lojQaGEi5nsCo}aTUHAD6Q#g$jEj>Bj4vsZ zLhJfAq-?kSD4kO3!b}Diir-jNwgvkZ$i?MIw^okxFnyW+RvF4hnwV-nkCReRab37H z1zA^`s(!lNMERH!2QZxE18)f7*a<6_$(r={%j{DNAd%aoWvQPVnB?b6o5v>e2srNxqMkiP9mw5anZG^sb$H)CJjtp4~)vwB-uv$`;|KQhh(jQa1Z-y?? zo~FBJ@0!48!^s?pM_Nuu?-=_;W+U)pNV$4e|Yt#ZocgwBsF>yzewf1|;UZeM{^C0U z$_wn;G$o`|mti9t)|5YZS!CM_ww5IrG?nJ=+G_zHl<}<-c1@&d=w-xd2IB^BI<5u0 zyN+xc=_9u@*sC{_Zm=yses9TRRB9zS{C?mnT6OOQiiPL=$}Ug-lDU!PQ4y?E*Yw*M zEacy7s}XjTSXUZ#YJhbdCwGs3!yEi42E_4Q+3UF_toF=km#KcFnz=TNs)Yj zzxM#(4uglk{=F@%s-~9XKniE4cx&!sbBcVlqRTl)a_a6?HE({Vbp!Rn{O)Ekjx34QzWBVel2uQrr;WU3#CpJ%Wi5(Q;WlF$h^lOmdf$Ee7<#2ig zYEO4)MUvzQ+8mtJ1KKjtsI^tL%4-6Y4+!%G-hpKU;~-I>QW|e@@=4XjTW~V*D|NEF zNT5)6PZDW~N~JQ@+vI-gWINbUwe>yqBylzeuPw~cx8iE1>SW+*N@b+wQQb-!!Alzr zoNf;%`6s;|NKs8(O>5l@5vV(ATH7K8?%~_$E!lFynV+Aep-MXsTMhba)cIQ>l{Q1Z zPNT%j>8QStJY!8>A0SAarSkR1`SQ_|^2bR*ggzoY>$Jv2ujRZ(rSdY5w)v(%A>aIe zkZ-Pczenc(i7xk+coWN-Z^W#JFhjw_L-;TVT%p8LBvnyo#(r_X`(2=ooZye*BasoRE zV=X8EewI-0I&6cqnA7i3$`wzR7F!k#q!}~P;4*O6V5cDjVNy;)Y}?Q6=5};Rp{1O} zlB}W9xo*$%Gy-M^;JNKVP;*?w^vPT8u#;b8Z2n+*(Jgn8i-)=}w=>03%995}H@Q(C zUC(S5uC-yOKcTO%_yC=_hflAy%mqlUdZhZUoZSqmjJAU+^=fS#ot5f-W-pk*xrL?UH!p_ahup2QO)b2ao9MH*UF`MQzy0h82E+{-v(2&bU} zvOn0sucyyJHY1&@&9GS^csR}BA^rwiDg(DRyFQYNU%$(_^;qd4RS;Le+FRU8U7~$@ z2yYpG0PcL#kHgvmIgT>Xg>^kn(n@8bR7Fqeu$?az@!{ABcDcl?&tlZmzH14|IjMK} zwm;N6Wciuvoz>RSv-M3Kc)?Y!bzINbs8phhq0I@Z*muaCab2siZ*3|}qkB)M`tY=_ zpq($WN+Ea|1X+qGgr=MKic;>rA9sKKa*c@Y^cin3*p2W>x*_DYm#{U zcgB$=g^VFpPC2cpE8@wcWn8~0?}IybQcBuV$)@Hyfh29k&`rQJ6Envmem?A&uI(O`n{%Hl+&z?jAq0E zA25I1BPJeVrd-S=rlZIc#jeK z?AI_0c^X4JsV%3IKN(By5%trjj+5xi-e)Oa^EVq+n)MmsqN?}bYgYFv6xEs4y(WvU z<9C**6u&D(cTn@$R(k1=o@{@d2iqA3pYBAVXGrZs>--PqJPwx;9*t8-`?kh?aS3*9 z-a$9Pf|QjP_z=(fLyqH2I1DR5{li@6zf1YPHKo)JDgSynCC2pMW=7VY2|FioS_`{z zpK1G6SeinK2iM(y6Mx3!jHyoAm*Uu3%GKa!TTal>sA-!E@oo5W?15nke)!ZlgP`EK zI*$u|?xd}B^e@^kke@?==}0?&?m?iaHRt@)`;))pI>oFM^l5NjF}J#&@m_25J~ zupP#RETFT@b*k7fBI^Z;=#HO-cz)fe96Ye(4cP&o`&7r*`iKX z&bQFELXs;$)1I^{)*m-whLw;^3u6zeM5_O7E9idI6#ay@q)Qcr24zl9VDlc+p1*vfhAu zR!sF;+@yIAZyxXs#_JiM9^)aj4QKwxhqiy;z;$i`ZWE{l*6-_j+P=R@Wjy+QBED-M_kBXCQKZFHQsAA^d1{@7 z_RiNr9@7gndZ>Xc~ z1e!p_aRUG+IP-QMa3YsBWd{;Z_2AmoL#4W+F7+&<{9M+CV^j{6!j~b{VQl}@udWuO z9L#^AoWk^!z;d&xtiJhP);*M>CGA-8KNb`hQ><;9(ZXK@8+sH*I0Xp_iAvq3>U z+M4WguGYyF(3=uUNlH}8>z6iUH3IKGnxc;uyk);mWyaFa(hVy&pa%r}%EzU7Ni8AD z73YQwQtP>)$AvmP6xzCp5aZLJ>Tfu-XKznAwda9qU`AvK#H;7dSU+`hnE-roRflE%H6y{le0!xBl2AUfubR=g#*Z zFw}W$;*9b0f8P7mmTfsk!<@QN)x9q{mHzPZarb=Z6uZcHUAX%=sph+_56rpg``1mo z{Z9SUWv^ek;Q9N&Y}roN36TpHxCFjDet5;~@(v9z-T5;2j&a3-Pqu3&MhufJ>^bwO zTc!QGg9@Hc`fAE|Lw z7am^u*-syoXLv4=$AnMO4&U^8YVVufOWHqscX0F6GfQsdeSWaGBJ0nOy385)PUy(^ zw@hBU2cPRu^9(`2+P?C{-eDbnJ2=K6x9f@7@~qlfa|dkE-zmrm|FHk^?>cPWe{In- zcP`yrUU7cii^KOh9A2{P9eJPqx3ixvULCG5KmEIE=d5A#4*c=G|Bf7JkxQ@;r$=(7e8;mTsm!c zMf;QPciQbrUlRLLr{Oave)4o!iEp3CeXISiEs)LoPIO3hetj>+rMpJMu6fVy-6z{} ztN0`Di~E1tR4!lmas%s_xy@m%+xiZbUpUQL+Q)ac{koX&Y|#{0EaqQZL{F8}+P^#DM8~?56+0tF-!XUodH<1>OO_w7+<5x>jG#W>y8N-^ z!m5bj7yp_VwtK`kWA?rp&khy*(D#dr{#$MYU&*=ZJNv}B&41NizA)=fbbzH|&dY(z zqdq&kfBLs^ee5*VPfNU~4RlJ@(F=P-KWzIb4i9 z@X@WXZ#p!5|JM5QiWi<+e|G1dZCA>=_!dn{aoXec+LXiQ&teW9Ri*C#bzf2O`|W?& zCwc$;uJ~7Umwx^{@%#rap5NJ}x?YRx+)iJW_FDLRgJ;cl+BSLC;&x{`-1?x|!PIjH zbKLczJV|5fSaZI>K7HozqGy_p$)cxDm{I>#R7CQ;fiYcg%if-|;HisEH($J9oV@s3 z#n-{tqhfCyXlS^5Bs1WMxyz-@ozs6RxP18?)47c&j$Iuz_V*j3?nQlZE^5M|kFU%2 z4tZnX?qT1)=yY}XQ;whC50(s^zSz$H_}%F@LT^NEyPG+u-=ZVYfvbwbzUr15c_{yU ztjE9~W{%BCZ2z@H*Y1l0uHxrj@|1=idF^27^X(4rUNd>mi*~b$rfhA#a;)E(vwK&5 zSke3G9pAsX^H_ME=kNM|Zz!0R;AomH-Y#?4Fl1ndUkp+5`N|1Q`fhM>j`QOEKkRsM z*S`imwXc0%=J_>FM=n*H?_OKd z6L-cY>dbCGPPSh@cUH&dQ?JP)r?eAwYW^@HD|*L_KQA=D9i}}Kr&y�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