From 0cf866037d21d276be6910e698e07f4652b39508 Mon Sep 17 00:00:00 2001 From: Zhang Xingtao Date: Tue, 6 Aug 2024 02:00:01 +0800 Subject: [PATCH] boards: xtensa: add M5Stack CoreS3 support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Initial support for M5Statck CoreS3 development board. Signed-off-by: Zhang Xingtao Co-authored-by: Benjamin Cabé Co-authored-by: TOKITA Hiroshi --- boards/m5stack/m5stack_cores3/Kconfig | 21 ++++ .../m5stack_cores3/Kconfig.m5stack_cores3 | 9 ++ boards/m5stack/m5stack_cores3/board.cmake | 9 ++ boards/m5stack/m5stack_cores3/board.yml | 6 + .../doc/img/m5stack_cores3.webp | Bin 0 -> 74066 bytes boards/m5stack/m5stack_cores3/doc/index.rst | 117 +++++++++++++++++ .../m5stack_cores3-pinctrl.dtsi | 43 +++++++ .../m5stack_cores3/m5stack_cores3_appcpu.dts | 66 ++++++++++ .../m5stack_cores3/m5stack_cores3_appcpu.yaml | 27 ++++ .../m5stack_cores3_appcpu_defconfig | 4 + .../m5stack_cores3/m5stack_cores3_procpu.dts | 118 ++++++++++++++++++ .../m5stack_cores3/m5stack_cores3_procpu.yaml | 21 ++++ .../m5stack_cores3_procpu_defconfig | 7 ++ .../m5stack_cores3/support/openocd.cfg | 7 ++ 14 files changed, 455 insertions(+) create mode 100644 boards/m5stack/m5stack_cores3/Kconfig create mode 100644 boards/m5stack/m5stack_cores3/Kconfig.m5stack_cores3 create mode 100644 boards/m5stack/m5stack_cores3/board.cmake create mode 100644 boards/m5stack/m5stack_cores3/board.yml create mode 100644 boards/m5stack/m5stack_cores3/doc/img/m5stack_cores3.webp create mode 100644 boards/m5stack/m5stack_cores3/doc/index.rst create mode 100644 boards/m5stack/m5stack_cores3/m5stack_cores3-pinctrl.dtsi create mode 100644 boards/m5stack/m5stack_cores3/m5stack_cores3_appcpu.dts create mode 100644 boards/m5stack/m5stack_cores3/m5stack_cores3_appcpu.yaml create mode 100644 boards/m5stack/m5stack_cores3/m5stack_cores3_appcpu_defconfig create mode 100644 boards/m5stack/m5stack_cores3/m5stack_cores3_procpu.dts create mode 100644 boards/m5stack/m5stack_cores3/m5stack_cores3_procpu.yaml create mode 100644 boards/m5stack/m5stack_cores3/m5stack_cores3_procpu_defconfig create mode 100644 boards/m5stack/m5stack_cores3/support/openocd.cfg diff --git a/boards/m5stack/m5stack_cores3/Kconfig b/boards/m5stack/m5stack_cores3/Kconfig new file mode 100644 index 00000000000..0fa82611253 --- /dev/null +++ b/boards/m5stack/m5stack_cores3/Kconfig @@ -0,0 +1,21 @@ +# Copyright (c) 2024 Zhang Xingtao +# SPDX-License-Identifier: Apache-2.0 + +if BOARD_M5STACK_CORES3_ESP32S3_PROCPU + +config HEAP_MEM_POOL_ADD_SIZE_BOARD + int + default $(UINT16_MAX) if WIFI && BT + default 51200 if WIFI + default 40960 if BT + default 4096 + +endif # BOARD_M5STACK_CORES3_ESP32S3_PROCPU + +if BOARD_M5STACK_CORES3_ESP32S3_APPCPU + +config HEAP_MEM_POOL_ADD_SIZE_BOARD + int + default 256 + +endif # BOARD_M5STACK_CORES3_ESP32S3_APPCPU diff --git a/boards/m5stack/m5stack_cores3/Kconfig.m5stack_cores3 b/boards/m5stack/m5stack_cores3/Kconfig.m5stack_cores3 new file mode 100644 index 00000000000..990925a96bb --- /dev/null +++ b/boards/m5stack/m5stack_cores3/Kconfig.m5stack_cores3 @@ -0,0 +1,9 @@ +# M5Stack CoreS3 board configuration + +# Copyright (c) 2024 Zhang Xingtao +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_M5STACK_CORES3 + select SOC_ESP32S3 + select SOC_ESP32S3_PROCPU if BOARD_M5STACK_CORES3_ESP32S3_PROCPU + select SOC_ESP32S3_APPCPU if BOARD_M5STACK_CORES3_ESP32S3_APPCPU diff --git a/boards/m5stack/m5stack_cores3/board.cmake b/boards/m5stack/m5stack_cores3/board.cmake new file mode 100644 index 00000000000..2f04d1fe886 --- /dev/null +++ b/boards/m5stack/m5stack_cores3/board.cmake @@ -0,0 +1,9 @@ +# SPDX-License-Identifier: Apache-2.0 + +if(NOT "${OPENOCD}" MATCHES "^${ESPRESSIF_TOOLCHAIN_PATH}/.*") + set(OPENOCD OPENOCD-NOTFOUND) +endif() +find_program(OPENOCD openocd PATHS ${ESPRESSIF_TOOLCHAIN_PATH}/openocd-esp32/bin NO_DEFAULT_PATH) + +include(${ZEPHYR_BASE}/boards/common/esp32.board.cmake) +include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake) diff --git a/boards/m5stack/m5stack_cores3/board.yml b/boards/m5stack/m5stack_cores3/board.yml new file mode 100644 index 00000000000..64479891d23 --- /dev/null +++ b/boards/m5stack/m5stack_cores3/board.yml @@ -0,0 +1,6 @@ +board: + name: m5stack_cores3 + full_name: CoreS3 + vendor: m5stack + socs: + - name: esp32s3 diff --git a/boards/m5stack/m5stack_cores3/doc/img/m5stack_cores3.webp b/boards/m5stack/m5stack_cores3/doc/img/m5stack_cores3.webp new file mode 100644 index 0000000000000000000000000000000000000000..37ee8f6b8ee7fdd34926c16c1f517f5997d3c397 GIT binary patch literal 74066 zcmV)8K*qmPNk&FWAprnaMM6+kP&gnyAprnz;RBrkDj)+O13sNZol7hxq$;QKOZc!8 ziDhp52kN2FMLFj_$}#31Zf$bu$ue>O$JV*@pWA&b>)+*ny?(&{`|n@Bk30X7<}c-6 z$a%~EQ~OWuEA+SQSHKtaKk^^0-`xGN{Y(Fe|IO+n`d|J}-2Znk`ro_W_?Y|TLW&20?zwZC%f7Snm z^%wG=r~f1U>-_io-|zo1-;@8n{#(hvT>s+#RqB`Wuf6}O{?q<5{-5~YpMTVUtp6eV zyZ%?vznNd-|C0UL|7G$E`5*J&@;})>$o|3l&;O_Xo4Z4F|Ed3D{U@+5u-{$(i~Z01 z*ZyzwUmpKI|3CZx?`OIHv;U?4h5i5iAO9cqUtmAZKe~Up{`>hk^mqM_+P@{Q#(&NK z+5Y$73;BomFZ-Y6KhOTz{XhSk|Fivv`j6aSY+t5-y#Lw$qy0bb57kBRX3;>Q*^vBi!oabt@dSl}!xx{+aB z)Qbx4q*rKaH@Prn5NY6303-fH{E7J!@+ag^$e)ovB7M`8&(gD4TfZRC5IKB%sTLK) zo}ju@T4i_I-j-U{RYs#O{p6r?Qp1g_CswE%Ff)QCg*_6s1+eNjLq_&~uKdKFaZcI* z^1i?Q=lR6UXfcT$^o#5vBS9vSxFwvwsEZoe?Hzm6Rkz}*sB0L#gc-OU1n1;P3aFN? zneg(c9o9Cq4g2pE_2FS%)Qbx4I6fNMw|s^ReQAgMVVDa)R$dF7em!1Nu2BP4+tBw0 z_!L6$y8r*L02lY-Y;5AK8wb5Q$u)XPA#!qqV{lZ#`^q5N83KS^tt`McZbZHP#(>v! zVcIwlt?KX1)QaQfk=_)KNrf;({$4&OlPs`alh$@{2<`dE-O0gy+*10+5vfvHq1%7? z=^27yCZG{fX=R(jcDgeHW79meJN{bsYXun2bVtb&ewZPp3ptXGOTXY2$7bF^yUq#JHucJkN%#zvyMsTLT`-lS1YMeV&~ zw%L^gK&Ht#OK(tMvt?g-&)Z~WletM9>7&yIUpHK#b*_vI)2{M*5U5-{tqk%z3HO?A zf%v=y^V@YVx3j^u)utQeoKt&!4w#zM&$-t!0NP8b%5KCZ+Q3=_%#T4-zP404ACGlQ z`>8uqX3c`0@Caw*)Y1}y=LrfE?_BUyDn_fwYl-eBea#s8A&~3Cqe8T@xvj<2z|K*u z)3*jG1o%09Nwr9^VuZ^prHeoypLe;Pdxgow5O7!WB57HPynL$Hb@0WV4E;E#9VIRY zTcuSHx~4BIsDy!5X2nSX;m$O^oF*S|6jo6Ywxbt&cKYBj{}ozaM%#PxY2f>=cMk26 zZadfiQk(WBH!YAzU~z7SrBWCXhk=-5R-^7*@-aJWa3Y;IsQ_pMg&m1?dDZ~K+?YR$ z_@kdGf0={Hf6eG+?0H6X>(@n4%ZkV6-@10IM)rQF83N_kIox4mTpS#$Em|?i=FeMF zGm_b5x>h<-y3^EB8 zJ06MioCpiQKaBldIJSDR*13P67xI}U()}r&*8gu!@T37YMOdCWHXy!UOS5vQWqDC= zu&z5%)ZzLv6uetWOogm-&n5;A5~)X*cWyKP@RoPC4Yds~`4?$AYf$+J4;*mCOWLb5 z6L-(gfdU${;pVa&zCF~73N4$aZ~)Z*?1m*K5oziTci&9)G7gox{-KT zDZ#u{GM@02;xD0v4N`f?WBKEslP3L_o)t@k9^UG8NbJ~d{~z`PY_P8CnBXFdh!_Rq zN|BKy!o0_#!?x?4^C6@8ymg4MuIfdFcTgGs|Mhj)4=6&}OYq-I;#pzwLY~6=t?=+y z8ApzF-Pd`GKnX^rmTQ$6l(XDn|FBNREiJBlp%sFQjofbq+Q(%okR)dKu1tr5=*wX@@_1z(i%VG7fvRF`Q(3-7%=du(Fv!oh}QMY|4 zY#zFZ7Jt2uO(;DB`89;GmArr`*ekbl#MKQng1Lm!VZr;c2jXi~*gzG&EV@eoE;GTZ zirOCJYCw$KE!%1`+?J)jvn?Bz7`A@m1XOznXvdc^TzG5D8uoM+vxHa40-~dHekDCn z5@WjGNJ`wF(a^gWM=tj>951Mc!(t8>-}VGpGH`~wd3hA#U4`|m=bfUP2v zS8)Nd2Qqu63i^XhX;ns1l1=e=&pDNBzUz^ZwKlVkqvprb51q&f{j^7tqPOddkvzHaQzUKlFL^AoKD5ksd+>;z^K0Kp~F^&=z|PDU%h`8=nWS5S^N$ej`H(fqP8GY#=oOOJ{!3R;Dz zIQ?pNL0YAT@bYq5i)d9)Dze-Ah*>(`F9fR132GGgtV1Gp7XySEh=ri3n)HRn9mzv; z5h{ry|7AK*92Y!{E~%)^!+G!su+D_~Ph0#9@%_QQJ8S#X=f#63u6w-cP6@wDu`l!H zb?uD|Co(SZ93n~MAmUwYCm%*oM0)n9@lh4J4v^}IwV8yQ1J_Gfg_k|jEY9BKkN=HFPZTRN28 zbtht7aFH59EvD9oGwkFR+!?h$|Mk@P({K2j4#=p+J^@*g#{k){J85s&Hk3CswrBTR9rEGTjh0Xesx=%a3CEi*Y3N)u0c~PVO{0fFd^=wSXXr- zzL(4bei^oJKmXV|372D<&B>PfmU5NjFOw4OxWV@S;J_#R#3UEASr&*CE7MEr_M^cL z_8_WvlQ9CvN8e~x;?Q*=YOy@gq%KAo!2k3MQ;M(66Fy?9p#8)(3-={?O0a#LWuGRV z<`XCLX|KmP?vGbpQ0eV9JNGGpT(A3)i_fcKj@aT)>c4F55 zF&fV^CDX8CN=W@SGbn`Y>xJ!AAOEORWp~&G?SK>{+)b6b+CgJdJk?xd0Ck~>>Sh;5 z@a(@;BSedRDg}wBT=c!%_W6nz4K*xUYM7QoX$HZ!_?@b*R!e&S60kSEbt4}By|PHr z87HW_J)EF9*f$_weI{YdtC!W}1eR62ioq@(X=%Ol<6bR7pcr_WpPx%o;juD4sgyNuX>~IV1K9H{2nBM6ogAHuk{LEF|F zJ~jt~3Ui!GfWnK1`ci-Lqt=^e{VXg#kBwm%gwtVb;HTfh?4Q0PVAmmc_nm)xyL`P3 z#yGhNyUg8h)P=ur6K{?UpeXXjz-+Wm%@aw1 zn~xXPDr*66yP*Mo@G-A&ssVT>kK&=v;gGO>*qtkceC$p>k|u?)xdoFk&ubyKuRgkm36wP)OmKT$ly?R?c=el<4nd=#WCw|`t!Q0e^VNPwnlQPU|RC7zj$R1S2LKGYW1?JR zCouUgYRrq3_EgdZJ+2#5bTWgYZy!k8UM-j+g+MSEhf&X(C`R@7tI!TzbU59vmK*X_ZI7)r!4q0^ij13)UAP!z}!%=TJs7 zI2X>~(*_!{J9Gk2$=xN-^|4BY^t~8$JmblkNNQiY!dkM+}kpI?Gt7HL{n_z}2DM z--DuQ7x#IKtKu5cQw{WWDi&{8l#O+gj&i-`IM7q*whx0;?W}UhW*z&5gD&)Ws2D0V zyRd)3ORPILKmEtB_#CKzh)^kM_4~0SJ39(FSwu9B)JPovD*bolHNHQE9zTZA*s!3= z_or7Sdg7lMEE%#e_+>$>Isb>Yb;4K3xfQSzc_(nSh*B#@SbP#;PM`C!wdSs=6CVD( zJZJAy*%pm&%?wNGR9ehgdtR(0$oaOq786|5V_g}WzJ0jKueNjBo5#lY)byr(I=~Oj z?UYJjjU-d>JRJvQ@7jZkEAkDs@rza1x17UGNN-m|=HV>3;_&wyDvYJ+`yo>?+_RO-}pjK^j(=B zn;N&*|3yCue$NW2`g-A)uh^C|ue{dOL16#4Xu3pIB`9YXt)c@w-1cRfATt0(89Lkxjth_@V#lCg}c!^RKNZSVj2>nYW*Q}R%p?)C=R z)R<+z?;a1EQ@SWk0OXq8iZV3}z4xW)1eJn4jn{{m8}^#$nay4QJGd;Su>8P;1F#JY z#G=O_4$r?hI(H(A2G8)CM!Ccc>RA$eTF6IvrPf|RO4Og0AmE;b)s#bdjaDlSE47*Ax@85xmPT>|60*hFY0iU_chD`IWGU zqczP$yH2@d`9_TAmzqtMMsfd#hB^2lIBh>OyjsSxKJ0n{V{**>1LxhuaBm*9=?%_X z0H^}y3r7&$d^(%#8f@G#9HSw$L{khnL&ya=eeA8Q$%v)b1wY?EA`2*NxS|_d22C53K;G9 z!kR~F_lRud3&a%Z>si$6U8@Ry=RKCFMPE%}pDgX*%O7WQ9hm=0Dar6EGz#D)DZw-x zzfNA5{}Iylmy)r<6VZ_5cq#16G!=aUz`cHyksxM~GJmumR4=#!#^4hWc>^jKRYNC( zUrg8JXNW&5A`9l&6s4puEM*;Sfnn$oxDxijjBC}^_O`J zMu)J+Ei1g-Aa(xAR3&;q3E|-Mt0|raL*(`GzV}r37f)n$zEw_7vNQL^H7m9BKp@5S z^>#}F9*uscBi|bwr4i6#xShj&4r`9#$hJ#)r0bSANLGPvmL28q%r&pWaIq{g@HA)X zh`)Q2#{L|Z0f}~Y;T6J4dtB(K->0gpOf|%TgEcXTbFi$BwrOTaEWhF28f4)_DMp?! zbn^%;8ac-sH{peypExu&UDKfTWnKG_9gNwpiFm9FBB8q}^H{0k{jfyN6=29SblL9L z8tj|2utuLANnM=wed~Uoo|!?0gFWwf0YZ_#JXDtR-8)hrySr=u4uzoagHm@{qkNk@ z^KEF0e5uZ~%Tb<^Q!?`SL)KlDbJ;&x1tiUA-PekxE#HX^^5=RtqkOix_mS6-qbWe7gAe`nt8TjR4wU~Y4Izpu|I^=1 zKo*`8U}5MnsaDOk&qkqV08sdc*x7SK63HkFQC{cjK&|ChW`9D3K6rB5z>^E;<#zlsmkfMLW6Tx}* zzH|>#Uz%b;!rNI{WGJv0N&C^V6aixbGZAK*NYhp&G|u*$y%|y%?mrXTgM+m@ zo)d&C(5L)dn`eiCqXMY_R!lwACjKgEA7K+beXNejQkK5Dj!B9SEHyB@E59;Y@Hg|u zrF2lOY-8TxY@B)z*~n`%?oHTQkbz~j(f%}b5Ha5GAuXS1Bq!-0r~w$`xZ{>_!}qeE zb8J+u)v*x4ZXA55HiDSj3Ark46B99e5n=ij&45uWg zTSg^TEc(OIpS8#x5cN^I_8guRqFUZja5wK&5Ubg5`< zvTrf^4XinxZ9fj+}8<1sg{? zQ&EH;5n7m9*@XYUz$DVUW5ZPPqaVY8*6E1WNq`n1eqbJ_icGOi1?Xh4n;H01ZDO&h zL2n$?_6$nUHHAQk{J1a)of5K|qw=iJindEG zWn3Y^^0d$HW)D&|DS7O0ASr&Q`gXar;nGQoP8RH|FUy$%>@Q7Hb*>@aK;CT4%?7A+l(uoHqLnPai0H` zNVc*}Fj{1NMeB>|$Wy4gaiKT83u^o%-Yrh&_j0Dq;?KVkXO6JyxGJk3<9&t0KJvJH z)^~|mfF9jb6E!5ehPr+%xxxGRvdp<%VtfD+ZePyv#^_Lk1FT4agMxqIa;^0Hdt@9^ z<{cWI>z#Ahc2=$Y%dFPa_hdnjr~7!}r{(_YJH|!QS*QJ;em1W-UG6@Y2?R2&6nk&@ zL4XMtFl|ZtK>b*5Q}J!1EheXYoEiO2vebROh3f3cJb3*e)o_G3|5~@XfQ?4KiBs=F zJSWv(h?x3qvGQs7S~z*^e1vi&s$acyn-J8FVU5RSmYj!s0JSg zF~F0&2hO}^@~vWzCNAitwrfUl)>*cNd2LW5R2yvDjDkcY9PEc(#kHI417{FU68FtdW$yOTP;6ZGYM<+P%FR#t((aOa+QR;v|1*)_08 ztVKt?e+wvE1=8-5XD;z|X?@s8#ZJqT{`AR-kNLaxxe!=}Gb&3=sS$2amA#Y{hLaU` z2h_)^{56^*!)%>ZDk9s$2KzSW1T>tmzn-^j$HYHorVUgG<`@P%SNEFf5=EdBM+_wNCpEjwVrZr=>v{q9Q?e{Ea8QCU*Ps^6$gaid#Rh)2F8JxVY8?$G zumDiNBC|%BGtGajbuT_kl?R2dY(ZnVn)z@Dw$eW0^kkp&2e8|JdFd8DtYQUh8!0gr zO+cONK9kXQo}@-+jgBYH3(fbfyv6`(b{*n`c>!3p7qD-jc!ozJ-m~qK#BmYVxcm2KUWv zdMN0yR8PSekkT{!+3K2ke~Y;gRdA02_`NNbcb6*|=?Yq)_J;sb@;&jM{MbWa-lJ+j z_qtKpC-PYph6OI~Y!F|9YzQ5P*dttdFz4i$TDLDhM4+ng$v z)5_9=jgaA2w&WdGmp!?{sck&1C^*>;6?<+$)p>KwJ3~iSSMqPq& zgXQ_ESOj4^C;8hv3kXe{!%Nw~3pdz|mW|FPlq!~+q-|h2zT_yqor$8g_w=UxszZd9 zbAS&}^LuV=l%Be2Z%^p3>bkU(O(4gBXOW$3hiU}u2#U+qo7PYHD3tTRUXqh)hfzgG zx{;;O5n)pvI5PM^(rhp*F(*YDE>v8!{WB+$@e6SRl&xHKYhThHV9>8K7bUcS-ZBI) z8R!rR6;Vk`)r<1~(6l*fya&KQGG3xI%`F7*DD{~mW6bsDl+SL;WB*W(yBeh>G^RiG z2>Wor3MMEg&8XSOFjvnb(z;Q49m_MM1;GTi0z(3N>nT+rgVP!m2IKD zp?~zD0@Yz_7Kmtg&+~B#7C&e!0>)i{PpSp4xUd7mF6)y9iA={50)pBo!6M`D`mY*$ zQe5BD_Gr!$uVL~87UgF|19pe1AI|`&OI&NYpt1~*4@^n7f$DO=e41;RslK7E@ZVlF z!yUUdSCBKy`pgrRQ>1yHhe?jlG!VC=SnwW{h=DKpS(%j5h!qS!RBXR9L9}cvraB5d zZ>IAj1x;|e`PAoF+b)#)ayDNO%d7c2B>ZBOFn@SQN($LNIlhHD5ah57Iz)S5tb_O65QX~3o zW|h2dBHjmMSop8WJ3vJ;rVYPImeQFT6krF6&I9r4!Wm+N$L2(JQ6iGb*=X!fv*?wO zLPQ-6CS#N4l59C_{J)Ewh#NRVdm2}3hoSs-u9Berwz3P=Oq&9!G?8JoZqVDZc+lPu z>K#{XT)!!kP&4M6gq!yhNSeV7aY0~@H9NEWqHBmbM)aDqklC)koNIjL{)zZ1&CrPt zi-0SWDASZRZxQk~-MU|qZyST!aLubCWZHc2J)s?3V@Li&xPs>U`bRqSqpe;Axm{Fr zF+0;5zi)E+-fF_9@`vBL_M(ev7k(ylB2?)2CO!r2;oKx>HQb0jlxce?M;<=9 zgkV5wLXzV{6Ca=kt3HQ%0$L#Lnz&HV2~&+;S=zU17r*G{VfWw=3oJZf%*K#?IDA3fTzsuW1KXYQ zY=f8UBe#GUNPNR7T~KYklIa3n)toWh1iY&M?knAT@4F`&V}ydEbpz2y&pIRe`2x!| z7m)4P`=KAXuQEevk%Q&dXW*}yPif}-v&is><|4H?OKn#LySDLIq$X4K7d^tJo%$+7 z9*s-`;Hu2DXr^Xe)PeON>wyK{4iu`Or3Z8&40o{(*dr}z>1d^6jBJ@!zW@Kwl}FBw zw*BOxbvx#f>Ii+=i5CMwWqhYVzbM{0*wt_A_A>-nYvEF2zZsW|P0}xJ$c2Xu8tO1+ zkpFY>Z1AH!Q1gH)dxKfJY4wO0e<^rQ^_f)|!gg^^W}UwXwg>v!gTat3qgjs+v`la1 zv0}``ka1{{lJ%O*-4PpRiMvR!|H)3xoMINnc(v*W_^l1bs85!{B4odJ>i>HOcsggA z;Tv;jqiF@=mEE+ftWZppwLO|7FruoUXOV7uK}_v@L48GD3mZNJxw|G4jiqO|$Mf}s z%>D#!)~9wG4!_uH=~%r-5ew%Qi~ zC;UK}Rp>gq7Q$fMc7laTVqyB=TSEav-pEB90p%pi8U4)(KeiNw-c_nA4Y#Mea+|Z< z^kwS!hNCtKe$B#u zoMwQB5xD+G_n`7QDWMsk#yRc8r`@x@FE5~Gx!_@wf~|V3dLZx)ts}KE^_(&^Zx!cCoJnsed_FG2P zlufkt&?>N{Sm)@jF5=)X49i9C@D`lY)UyMRLB_u?YhI z-QT4vPRd?leC2IxNSizn0(Yv;n5RDXCvWCL?m0zO_o0g3L-%lK?S+RKI@jgDvi&Rg zKt2+`gXfJ2#@(o1HJ&<4yAtvsYh4~|>Btt7YQNA{-SG+buyzi5H(w_uDe*eWb}wsW zO10|JCWdM@>+bu&Rrt#O|IPuyu_=iSTD$}^SefIY4!~VW2`BBb_xxwVT)gh$f4g%o zrp;%@j5w;%-X?>bCIFOgRpaUTY8nBPFF3XA} z*0F}lMl=4buh)v>k0URkXyV^dikS=Bbm|uD^+*0l@~bMK53GyVsb70>-)=xL#sTNF zLqziiU2uM1MH%~1KfuUa%d^pY zg5(L7sJ2+VxW4qRQvhtuyMDl6uBT=bi(B6!Q1*LVD6=-jUal8`E)7*fVQ?;DU=a02 z&>3g;r=BCur#bI=^*F~==EUkqDGF%s(CmE54HoVuVQj}ICfY!ILreqc%4wCXtl23ZTWej5@FoyiV+(xUU2 z`3E-%U$Ke)bDMZyd{UJIO{N534RNmDT4Uz|E3H_ zX*VNbQhkM7`;+Z{PH_h9K}1a^D(%VlpMbuAF^aD$lH!SV7ZbEbPm&3?&sWG2 zua@H%D`P6iw6-O6jCTiL28N%cfqfj;zm^T@g1P=*mHb)E0en)x_g?$=Ph|6attCgu zjMTgI(Vage8Jc(edOIX$yie?bW_CXQ3IhYbH!oq^1r3Mf5~@+0O&WA~Z7<@ntVqr<-RIY4CfYEM+gGVcRaUDKF@l1Gtbe{aQIBmpMpoj--n&LefXVaU~| z;tJqmqg}!{+9-k9#i<6$`!Tg!hl_)bOSp^n+rj|gz!PufWlOFN$G<5O!oX7u2hFKh z!iu?0B!t=Xaj`mal;_xeI6|`Qs1&hmlyh5AB3aofW8s2= zE@b!JMXXlTVe&PBK?{O>Z?@uA zly#OgPt?zSu%+ASUHYrpq(fYj=fL*!kv8!7p)uA8t4lE71<~6$B|nELe>2{%2#7n+ zNm?)6?UNbtR_2ZL`$Qt8goZ4UrdP%oq zOwv`r^y;}RQF(W~P&?wG@4G)luwV{|eYgKsc`R!)MiKn}SXU1fiIfN1h0FaRkdZ58 zuNkW5o2K`V#WT3CC@IOksu7dCsN+Trym(jF$4~p!XT1@C)Nk00j3+Sy_a-)9V*#tJ%7h|Mr){S_1y$e_cPZ|Du|VS{Xh=YSMV$ZPr$vmUjR<-ph%};k{}knu{k^$97A~_0}EOGUN%U(?2 zH|0Plc+CIu%HfSUIjR}#gxbk3aIxo>l~k%AmK51>R_^q)m>P|cnrUX7xlxfWNcil? z(R;>@&{za5^%XXskTkL^Xj~oIJ9ks|lGAXGQxXNPHp)G!D2W(B(@#G#q~1_ZHd=LK z#+_y)L%e`#TU48qxA1RviR-E`uFA}1iXDS@{cIW-7Mc8qhhEQ{w-r_+;YD^6VE6(4 zS`(fXgNeSB`kd-gM?JeU>eOy!X)6o@*@)XH<% zQOIC#WKJW3FfizLe4CWyIv_5`DUjV+K~xOAP>%m@twovdgRWbm>BEZF}%FnHIQ8T5i{LUWy8qw0aPp!ra4S#O*X z;xW}*e@RZb(i~aA@ggR7a*1b>wJWleKP}G4*4aqXgwY19-zkt2Nt@>Oq7oNrTe6b= z_T)!mC|!^ULW(_b6L#Xlj_1Sbxi#vH07cK9iZyNk8QUr6&iPb0S^E~J%scUmzgReL z)i40H#fBX=ov{l>xP8<(iS@Z=cSoEg#u0|#H^V_J(|^DlY(+Ry!z>>5tVim1lhAD+ z0v3rL-|9aIz~Qde>z2>WL)2xKdw8Z^QQnf{A@dl|ri!y7!)X`ZKhTYbjO=rLkPq#X z^Y%T|C4bm?35s#o5u35J!wRIYv^T^7OKK>Nr@)B~9G(o20A%)5zZ0ZeNbhfko@}~+ zybExBIULpog_i|z-k(vAzZ89sWlz8|Wm+#N?Gjau789EKoJsG5&a2vkCZMJ?*k5-9 z^5~4OvcNs1A;|BNKx962%&=G04$2!rs&htW>H+5H7(V^k2C=()UQw34_Olj+edpZ~ z5I8VL{Z%F{`VvHzFed@_+YMM!v1Tj)Z{j@f3psHkSbpI(h;B@8niebf59U1CutFk1 zjimuj7awN9{wca>n*7UK9WOpL`nE~K?Su0gC_8^PK-qn=D=#on}H@%oU#NT{8WQt zVA@b?=1TergVjhTX48ap>%5HUnQwA?AF%2K}DkTjTWr+PFe=d3aC*!uLh)Y^Wfa97~qa5oZ9W}%v5Bw z)WO1t7%;3_lu}z(JPcw{91<=5pl)4dV720pnGrKZ!Wl*A7X48ynnT9UYtv$Y_UuZ& z(__}sD2Hdje$$bryTw-X@+b%SRGzBo{6mm^xuSv?j%U9pz`Q*5H#-`k6Iw$)39hC# zZMWqGagGK6z51K=LKG4ak@MhEY1@>8{{&X^%q5RZZpE%!-g&bOL!T=fA_{niV~9WP zMGAz9Q!#})=A-cg`BfUhfB1i@roaeI;)Nocm3XhhMFPYd!xZF4L1gGN(A#Orn-&IB zMqEfp$g|AEo~G3L zmeLFKFKM|PGR0mA)exQ|`z|7gi#Y>+ZcG%EM$Zm&=z!L9hmgU&UXW$8Vg2Pzb3L*+k^HdniIBU-Orz)Lb#u$&u^Y&|Fd1u@SDYPyS zo%*8nOPbt7f|sv*$Yg36GM_+4HLbAa0e<(w(Y(q5`m{ZYn(Bio0z$#J^xS%V`+P5tJjDmO*qgP(s)9Bv%iO_Dt51&Ppo+dSPaeNk`dhEcHt@iNp&K2h*a zWl}_+lb=b@^40RhE88oCF;Ka+gisk5A_Q=KhZ2K^6z4&W_Ug9xyO=cqQ#ow6J_I$-%{eoSTe0b$T4?b6LL<%x-^2{dE<0~xi>Gfi^+;!DU* zlypJKDZ(PZqRnb&>e&3JixKY}XgUC*1QRBg;o~TB`~a_Q7UE`p3XynCVI^TGD{d7T z@BrL21Q~-T)PpaX*6%1}NcH6a8O$I)-{0xA0$#ZA4pE0lc)>@UeG*#&o|9~K>!kGH zp6>fTXd)s5{Fru^I|aQTlC4w`V;T-T?rJ9!S=N2bXZ*RTX+?XX&8cf>cR&NpB3%Yc z1^5q)x-ojcU3CCsvoKREuk4HR+^S7XmQ~mZleH#DWWZ|;Z)oOSYL0TW=5rA z%7r$a9$N|7?ky+c^0Ez*`5~8{%ZCT}DJT-?PbmJ-Sh3YU+CfSA2Pil$)C72>98~z7 z2yd-8#<5@a<|H!qNkqP1z&*?XkicPpJ$inwrI*IP5#$UcjlH&UeO95|05d}`bIjv32&Dz0z#h2-_ zRNp=E>de?BpCO^%{vc6%kNAv5DNA8zyK{{+qe6N8q=;er;zQ~07ay5BY&1(=%{ZSo zQWc}GwIHt)4?}E?zNRo2Az}DF;q<`DUc2eT+)H!o39#9J%yr45V1|5B(`j@7-UBUnE9yVIjq_`2%BAR~ z1mNapBYO3ka)cqqwZ1Vo&&P`J>7@L%nay45HdK{TTvn1}PPqWX9df)=hA*W2f>tS4 zy&Z&{U7X_{R3DBS_(`F(jPjG<#zs>ncZ-R#L6*8ILML?{?Re8$<;^8*>?0T<9bXgV zxZ8ho*6UraDGlh9&jT4H?P-hvDe=%J zQART1S3P9lJNqonm)}7EE|{emsd4aZMqFmH-pIzIY4sE$R;%5^?5k>tp4Pmw)N)6l z-2;F=vPYw8y42Rg6o1KDyUkz}!l~49alP{_(D^>j;wX_NVEol&r@iLa4wN<}l8Xu2 zS&rqebzyfHVG3vjJG)XYY~bxe`3&?5({!B%Ii8~J3@E=!*q0G-n2pq|%fr)wYfp2# zCT_mVc^pIp8p4GBP7e;5k0hpJVHiJ8$g{aCI$SHmjBkKF`=wsCyyg2^MpgZl47nWc!Y9_oScUZcY6DC*=NDrpJCmzoZpMZ#}Ba z(JBt}c!wSwP(h>m|K;xJJ7`#7LP0LJID@2JvwT3x*P6nB6;OPUSv!mtD1BZJi4e@C zCJBv&oY`I-LU0;?2F%6L1<#)JLf4~2aBB$4XOf^SwDJqVfG`H>K39?ZVaCck7eG0x zQ$H16m1tpbSUr-Ec?7%)069R$zd?*u$z)6*&(r{kx&-S}f?eS{!A<$TMijD*>tnf= z15MxHGuHdp^Vfd~bto_}%vsunaTYF8i3xPond(9R^ehb>JaEle2(I!q{TSfQL>vJT z0w}Yu0IsV4QZu?oj4w*3cj)L$xM=W06e=UmHgyle1{<^rWd^w)^^Q1Flc84ohk}wD z4Jz~AcUxuj8=`X$=?^=)Ypy?%2Z2|a;bZ0+2Sz-lk5yul^rQ@2rtFtDiT zP@45Fi?ln7jd)Eht>D3iUU|^#)H@giNIP~nEQ|gK_Au;jy+aXKK|vnVEixB&voQdW ztiwDlKVC0)B*By+ToOP5{t<4c@@68x@Ki5nJDnVOyTEt5jKtv=+FgH07Iyy%iXFTU zW4i~fIf4y(!`t<69M@B_-!8;l;^avDIId-mrPV`uyo_!?$&o}o5eV@HPbhrDhGtCP&_o#Hl0{C72Zx~e1j_fwHjkY5zFG5f zw9@F|@Zf3)v>k?o14hp!&OHPa=?w~7tc5orHJpRHB;r)2mUO{u@fYd&H_D=!ow9Z5 zhHOV2Ieu`t$(zGcv8W$(j)o5FHQCmHQZS)Q%!f9oz$ehE_rOHDf>r@>|6!V?84pw_ zg$f(EF?X*cmk%eCp&4s;_Xoz%2ADA?+H3&_nSnI$d=MqaM(`B~D=hq|eegP~EM5oB z0TxbL;!i*JyeJ#$BO1eJXy7E7EhTA1;jft;x_!vTsX3a6i z5w`Pgm3#YA5yGf6V~t26_p+>ilKV?;(`N!QXtHM;%u!3;aaDA<%Z8D))u3Bj6M19fhsyWLhT~bk{^+0LS+fR;gZ6Wrc-i3Xtig zk7v_N$_2r2YD;=Y^_vILvke24VC-9!j9ZJ^7WN2>H-4r z&A`))%Kbpj9n-WggEnP=cwdNR*NpCC%L9FOvkJqpO|v8%2f5HEP?kHpWC#@dT-!V% zE9!V0xYbpuUjl%^*n`#p;JVd_rK2eT3+t25_ptw}GK1Fut5EgZJQqA-E114(25vQNnR`RWQj3`}$NO)-YiydvX=!$ui-^JG?JC zUt))gp#clg>z)_=;_4}(E#~CjEMcugeId(jY#O2Wzyv!+j?slVss2Jc67;J*?BjLG(AqFU`#MLD zfu=s^)pDg(pf$XuPcACt2qIQCtqGO!F7N2FQT_NSgNMuapa+&A%)qDT>`w*$qlw^c z7~sEf&`UV$Fp2wbPFzMV-N6A|#mN*>`e>!5IBoD14pub-dPMRP z!f;@SI;#*5*5o@da0z=~P&d{yUwx4RFX$79E}-1QB;A1!s4s^Cb=ru*5!0juVjLc_ zf7ZFb3QlE}Xn$y0*pwuL$aG}o9%iNkY3pSuC=SzaHF)r;DIXE<-2C?&(~ZHmS4_34mr|m;|=1mP9Ny|=G>TAUCcB# zq5S1}ct`7yOiX z;Qbx@FsZcl54w-u%zs9K;*Jy3P~wg*sH#mBl~`+%4NE4Q2cZ|odll-2?9+b0k?*Ro zoQ!ZZS5m&Z1l?}8el?9OhWO^ATx+6(+(M2(z;aJ<)bb>mZDfC2kK2Kt~YU1f#Q)KAYfG90wU`B^WhOInUTKmAMXaF(j(2IN8s#4I9p~vd!eW#GaorTKT3 zuI@)lvBp8R$3WIRf)kP5SrU)UY`!$q{CIOOrhS}*SNuQ8|Do-9d;5jVm1=VYm{v(x zi!?P{t?rK$;W0r!qcWH{uxTGSPW><#GC-xe*<>+ehE6i_1Fo8b5yjx>?dfFs%`^UHG-5-y{rnEsU(>l$k{1IK{!G*d zAte!XDbzzl^$gFIP0pj)%F6>5Nh$#<5#L?YoPKjshakGJyo5VJS=vgkZA*#T@GkB$ zidf8URn0sR8qvIok{7J7_$_TDgz2zYYIyUk7}!uT7}T)9q+~=aoaZ!vFmr0A8Xo92 zGfJqTh-5HI&J2O4sLtP1YLT>;qt;i;JTC!_@0wo-2~ zr>(Y1F2Evjjoi16!F|DR0YxkU)yljfOr7Gg^WK_EUmIklJ$q--qLh;L0%><7eNFNI znZr>g6mh4u859xec30A4Pq@p9KE&BKCmUe>H3=?yURMgXWtEIa`c#!wTDE+`+2tYL z^?KL9D8!15=GYSb5>u4&e|k|3IgGKN^oJ9?=z>#T;w>>^ieWnbEjxk76YnDGxA>ZVtgZ`K1`M2q+*1~ z!+^!l?@Cit!z(QwS;;1q~Jijkg>g2glTV=racViiEPn{|w zxVJ8nR4h-J(Fc{_T90fdz2R~QMFM0OA#4#S_%T=@;!v0)5K4w?%a#AHdhjkNbpF`) zk7z!&^%)8jN4I{EkS%P}q8kxo2>o+Ail&J&M^hlo~R>{(> z@26y22~N-qgOGukNa^e$CFh3<&f5h?^46|o+aK*`=waKA`=N==1OBCC1NjrE1(Ep_ zhUyXuZs)@mfWi-}urefayEt0$V2Pqc^qhjCPln|&*3c>DC_UP1gqR`cH zGZ8=mf~q#51=4p~LW|^%BPV$WXinjFzi!9V(+1jHt&ZWK zqNozI?6EDB#0$Yi9xX;-%@6td0R|T#OKU+|8f3r_a3pslS|%9$4O9(2 zOh^G68mJtOPN7o9aW}Qksj}=!UCQW4$$1Ec((jc9v;khxXnXYhxbN;odCnV-297$j z=w!6OO-LW;}$1p#uk|HpwU5ro6*?Jo7MybXKKIwa?!E}i2IZ;VarBQe}$2@wRYX7XVq(p_~%CmJD(m6%Z_335oJ)G zQxa1oWi=O66%U_lj4Fx+Ubd6=vr4AQ)&|jM7_potaBBb4(slD+vtZZ;=! zH0eEzzwXJblrG>#l;RmR04Ya)1RE+{a>*hL+7}~ z_2}+YSz~FHk<2|E9C3##VBAXi&v7+C*I5kHI2lLiRwEvi2e71Mkzqv<37I(g98#P0 zuf<6>MQVC4zaFP8Z~@YmEt(-ow!oSMQZ;Z)^0!OPW9*8OKwH(qA%9m#)Psbkfe>G< z+d$7|C9D&Ci4ztE^seP03XO8oC3s){5jKP`HU?sF4-zEVO!cVsO(1aEiA(sgs#cwX z>FTC)&daRi?pH$bYYaIx86Dt8au1^{i+_Y1NEZ{}pJu-lA{~>9=KZGK z-2RoHe1{pSzB;-sAz||4fLDB)g{t2&kT67JJ2)?{HwrV96ExpF%m?)rQBEY;{=VL& z3>QO^hq(+}Fe31PM7))I>d_W|;3B(E11z9>tH*>2FZj(qAMWnj5M=1c*7x0^)s6Z) zkplK=nI?0xEB_&Ka6}4P38oYkoPT{-g#TLw48*z1nJcmzwhriB&_x6szqf!nHPIeE zDWJjEH7Jaw04QP}N8RS?{V>2>$^q7DQYTx#LMOZ0?n=1y9M}e3@WV1L#%91bK z#>n6P`I6-gwx%GGkdy*`8|9mS@6u`CGN6jYzj^9{uA%NKFZ5v&2dxjXEc?xw>Px7h zHgJXO5qzb;;%djUmr6=j(W%+)70UsCNQ)l{Pvh7;(x z6I%2D764pUggz!bg63=-2f>B+*%rCIv#Mt%qqpV(y>=fi1*=}xoV+^VScndVOXp1m z`RgeXgM+-3;%&p4VaSVS3a0VAxCpadN$FTRvEt;hfF!3HG?6A|ggtv6F1>lZRt@!O|g!2Eh|$Mo3KVPu=)3>GoPrQYypTWgv*5-u#`Nu`zRZM zqI_6H@D$r_O9%1ISw46~hs?xwZaM@F(_Bls;roT_ESdpA3TmUM^A7CK_vOgpmR}h5 zk*BAG<@e>1`tBm}uQjn4C;j@NR4 z67cz1!mX?hfJHMNfS>GqE&%mmWR^#_$yKeLm%ji7nrFXcZFb8W!GVOd0!=vEHx5&^ z(ZKr8UL+^1^LLL}LC}2vPJXHCYW|1fc{Lp3Ti`?Ic^JlpZP7h~q*2VtXpc*8iGmSL zTZdJbp_IMK-V-!1Z9EUoj#sxOVC_!8k<0y5MBjC_46eb-WGOj1wz0C&1l~0w@D(pt zoI_f1ey1PKE5J&fAzpJUp36<}$WWkXW;jAmOAPT>pz;}1{y{t%2qe-whExt1Z(650 zaX+dy@iePw|90i3OPH;b(=1;9ETg-4zi#wL0bbSbN>JTs=d5b2n+xcajes&03jBeowet}%**;n=EvRT_~;{FJa$l9MpfOu?#Kb*cI zzc$7=){-#RK>nZ2@bUl!O%#rekL1qkCuIJVONtE z%EkSInhj(pJ1iE)o-ECnbcd2BKbhZS>e5jvpA1&au=r(75r*T2TDvSt)t+zP)cMUr zE~>BP@r9%$bUyd|$lWCvhyOrQ|77%M*^WbaW3g)C#C58&%0(kx0Cd^XfmXF%98LbIMskrIB-_4}l?!H#p={-k@l~ z!nXixfJA~WZJwVV`%t@}4%ATu&rfyfy`{d_U~^++lEtU3Eg%#qjC<)TwFItleS-Cd zybp@MxG5>6wB=an?jwaIPJj(l3C!G3x#-P1pF`RVzesxgJc&=%^1mfgdC`LR#+zf1 z9f0&m;$0-H{25^&>{QVd&uWZnFXwhtTQt9x49Q~qN_>YZx%KF^GeA=N^4icgJL-#s zMk);J$1F7=>2jHIXwxe33VKLB=JZ|w1&(HwW-Rr+IhLR~_uMV7`~&u9J^=il1!_2w zmkJ=kmnUn)s|s~A;*z_V?E}W;cBVGmtWNzHYSzJTG28m$d|055@Fep?zp%`jE8Qzv zf2MA-oL4^>RXR|G-Uc(YdEC3M; zkg7WJz`bA?G6h!~yBDWP8DVq){J{sF)Eyyu%$C3>&C}0SD2(ZEB~0GY+iuE*=o1KF zn3H^EByOXV<^}^W2v%YX`-Uk4Xq0)w%4~1l5mrl`bRjI$zlCX~W7cIh3u&RcFCo_3 z1u}Y+z#?d*ot=IPAl8m>BrHz~35+oX$4>T?#z;>u*HD0cEna%EUYB`K&~}xCsUy4A z8_)4=sggL;5z>y3`3N?QoWZHo*Mh_*$>kXt`f<5i{?6Q-!gu}eEu2Tw7-LUJ^*33J zJ~rmyaDv=_gSh9uiH%F^w^;USob4qRv~>%QPX{@r?A_ZlMJUEC`?Mc?0Z`q$2%<#3QTB$iP5<_mlM!br zV6e>Lh5&v)rRkUHClqJq`lywedh%qn1s1Ak1!h?q1STgpU7I)VuRV@7)B=tQua6M& z{517r6)Uoo*<}cEVK<;g!7@Uh+_%Q;2)#h{tC1Jbq6}LOcl(h1CwokcnX&N)dT)BT z6wOC>MkI^CV~5vGtu z7jcb}@Y>l?ys}lK4Q2T6XT3xoXuwQ?ogsm1TLGAOYDkKT{Q0BcI+6JK&dET1I3HnY0ZhWjO!ShsE-#7$SLN<*i<^EEg{1mE3?ET!gopwG2d z)%Z$oJs>k;R1dGPB~m>uC!0+cy1AKZN^&F&BBcsVV0*m;g%L~)5hU%oFo=aU^>!e} z^p1~>-t?KoWxGuiucyfu=*|py6&D=cuGMMOMXX2TwNhUzIc8>^e)$vE3QlTuht@0w; z?1$>K`(OE5$1cr()xRuruZ;znw1A`m5~L4nwvKGK9=kcm0rFEL)7jefR-XCdJ)|qn zyNP`VSh=qTP}^r8_RMu)pd^`*<_cPWXq^+W5$Wmfr53r#A4C`d!3oNh?TJ_mxAPd6 zfWtbq@c85R854kx_%qZJHXd_9~QE5!Buv^?06%yTwCJGoI zUzvV_UKk~PIC&nlid6+1G&1{diK!DhOB$A7v;vj`E2&X)DO1YVyq=w8s%X2I0^{+q zP+L2$a<2v5hMG}rv2x5?s1piuengwvQ$JpL`N+YXsZ{k1$(L#p?RM5viPPW^s$jLu z7s5%&GA=3rnf(Uc={bwM9^Rf|+AnO!klx{U?(A-dKL+E$&a3 zPJHpjo?d;%D9(*+go98V1w?dXo+i;}ow3gGKqzOw?dLEd0{VpGWJdvICn0w2*alZU7d&dFbpy>{+Y;s*Ke#5< zUQGpHRYLpjtg`zyDb{XU0_J}cLzQItCdQrfJ%7j;SrA)UgC#>*>%7C1muT99ps=m? znowz<4*?b4-_+qyk$o-6>RScS;bQ+7|SyKF=`FgGn?MF^FkF`76>aw zGn~+Fk{mNxI@Q?NMY41newG{JZV7hNP^JG}Kt0Thyan8O<5N(L%9yO`7Joy%A(JnE zO&~sAAf)B5ZPxc z2>ZFfvc~<48@^o%8V*S-Wm-3@n*3Bs>bnhsA;U2y^D>qb!*C|W{N%D1c2Q&`W>yfY z0#A(hE}t+EtjIWC=_6j>{MU{O+w{-^du;)%Y7mY$-oCqv-_OCOt`Rt0n1KQn4p0!S zbp2>)d8!Nk5f19lw&pN8X~8}R0?yep;G+`EqRuV-H?g}$F{0@t#Wa5jcZjhhqgvit z54cIc;f@CalZBuuKudGV9tJsoG(gN<3s4SRk-k75v?A=M! z=dHAC(W$_3O@mO~;oZZE4_cDJFWLwICU*dsS(?KwWHu4M`UVX!TAyW8Z3tP? zy`=|029?n^`llRYEIknfHL>qCPC9eCnHtL(v6Eu zEU#CEb#%j8GMfY4n8``Y&K2|@_4hdHaIYC*>67c-vqm9#@2bix(j5qQn-Ev+Iu)P% zxl*OGy<>L6-U1kTkuNK{t9Eoh(DgUGx#0}5T1sUx0WNz8zU($!o&gbZqn5%*E{gWZcu)x zyorQ2Qj4C7g!G77Pl7ocIOCnUnYL}?pF9ALE2aK>OMu<8_`C1^51+*q1z*2B=Y{mA zL==qX^>cKk(UOHqqu4St@I_HpECY+~BEPT?^y-ilDe9{b?xRdyh!XJWq{Os~4LVOV z9&iN}XE+=hK_n4#{R+OZ#AMjaW`Y&|7O8Z*wEO|vTR}|Y93UF~Mwm$g3@b}a;mPjS zT?*?g@f?Ytu{s5k|ZSXhlCQtcdmXsdB5!l z%o3?Xz(*L-R$B!41)WMC09at(3%y-=X;a3W(q(7{q=h?SYH z@Q|%T-uO-XDC$v#C(oddeyb4O=H3AJq06&F?TDeXX3I}RTy(tyx#l8=BqUc0R5bBqTRpQl2=yaH{ zrcXYF9=`$TS^NwaB9%PX3i<{_@Os0&E1PkC@!s9eDJk%yP^h(JvKTZ1h-W8XU1u_Z z-291@y54@euv{Z71zhTqbyN3;O{P!keHtboNASRxj=qCQ7D@mB44gz_|B zwi72nlS{|Bq+UzE;9T{B`9L_S#?KJi?c3nBK{bp$>lE=kY40u-`>va>VwfN!=sFyG zleY8Tg|v6PZ2SyA-&P3WuNx!&^hX9>=J?o9-3g?)tId?3rE=CAR!Z0y0;=A0Yq>VcRjVwp@GFse z5FUCFKpi9PAl(pgokpc*aJT%)^I*G!ss}DP5@SFkJqjH;>*pkFfa`_GXK#h|6wodD z1p+%@!090&+Hl~MP1tg?pdDK#O8Cc8-CKe;$h zO&_)WP-I%2W@?DjC7!*z$a19cc0Or4#Pr5XIMza(?Ul(I=3r*9jh>JM!8jymWKR-n zhPV-Az$qP(58eIxc{^d}=~k3NNUdsR6=jKd8fugMMRJwl|Hj(A`Z(b;6~mt4Z-&7x zM8mi3lk~k(qK>-bV=LPB_*X+d9@M~Ob5j7bUQ*VLbvgyAxjDpcLNPQEm5pvi**x6^ z5~c6CICuS4<%z#o6!;*~1&AuJ0;nY)vLX6#4TfbDOS`)(<*^k>rHWr`L$%H{ol?KRRH+)l>K?aar>L?8ZLV+(`@@vncv426_Py6c8k+Q@YKqk__cJTz)D z#~tUQvR3c;^RQjCWC|lAS5a`43rQ=}bZH%l% zp`B&Ba}MBgh`FS)jj`a<;6a3_&1P2@#G*2DFe{F9_TV&8m;ORuRrxdBw{nyKixfHD z2;#0(5qIH$dxwu`)gwwUWw-_*R(VtA9po7V+HAMBOdRxQ{SjcomW6Nab~zs|7Q}X; z+6El{BmZStq?=d9s{w%k9Egey$tm_PGY^OyAtBK62Tx;D<3L*2V6*r`s_3vAAS#A( zb+gp3@#9b3j~NLLo~KH!&M;Q1shVJQ`NEv+U{Y)2uO_zf@*7Tn-Pm-Y%(C>vwf8?r zVH(VgMj=U=BUyEu_*4TzV(dW_lO?b$FAd)pw5yKQ-}ib zC-Gz$lEA2GfEW?3B>e5KNTkfhWAJ;t#leMFfnNsll8`!fXBSwRQg(Ocb=#jQZO@Dqu~OzlASR8BO3OyG{f6u9hzh{SR%}s7t^~pI&%&V?-oh`;Dt8 zV1_z)OjShelQijfPfXuZ@V~B6r^gR4oM8ZbcWi85*gV+%rNl_+$htBhsP&)Ckj$e$ zoVy$mS1Y6uYlmhyD;=a#gr88cFPej=Q49OiskCT!d z^MIITRQ7!8lWd`l!C=#p03`H-K~RBq&K5eXxl-R_yx{kU^_jMEhY>>P^N}Dj7<_sw zxN!rETPS4)m3*m#n+iAaa^MUXX6vq6{acl1W$TgCH-;di1y99TB&7P1-ImXLq-BYq zv$lGQhfY`?+vl>5Ag|H0a=^pd^jRNkR-P9r3^TSPB4i{X1gH)1XQV&?YjTGBe6toQqQ-bkc}-skV-@m^20ARYvh;Ag99(4an}xmt$x z>OI~|oBx###&`pK|2CRSxZDSRHA%lsQh}~?pU0N?fEq%fT8pFy{fJ7NiWnV{>WZmF z>NKNw7;89nS@D2AVaW&FIUCw~*I(El2H2ei1YD+0FnJccQDS)?%tXjdIGZ2uHYTbQ z%~uyyMHTUbw;`$#`9&sX6LcMhwb^E?9&)Ma5&T5_dI)~$xUtXsHEn{E5skdSz)cp| z@mMXnA_KOpBEK!X__3OiC1(<(l7P#X|3vVa5y2lZIm9&_X}v%m0QOpIs4-CAh%af3 zUTEH&i;eCtJvZSDdNptw@FSYk<&_S3B(e^~kRYim(2P%Cz<0)m1X62Yr#+wl@F=;h zGVxal{NmcR7TwkkQvw)awjbXBjVluFB;nM7@WQkX%ew|U6ZvzRDt_Gz@)$m8hEf41 zH8E(yUq&sKQOhj}k`5_}6y^f9lB#cLth}r@TDMy-q}Y}?1|~uxNyn0SWc(A3l+(*_ zRN7Cs?1Jq@46uuZ$fGG(Yz{}oD46^^3*)bg#$G^VrDRx-#CtV5f1@%gUjOJps6iPq zkiXblZsx+II__v4Ukd;r;Q0fgm+ZAH{s#9IiWlm5#){kbL~~>Q# zZwg=E`7Uf3q5ye{RL^`lX>ag}jw{Evr(fn4m1I zV2l+^a)R2>aj+C3n!u=ukSB41=>fR(!5dynt4=J!bv|l2Lf4bwLkk*j9e4Y#I z2g&{06HU_wLiglOjXq3(55p!X1*I?QIU)!jv z3II?NJ2=boXQQ$!es5;7(;{FPhhh1;3$AXs+w8xqE}hkWX0e^2^rrPGrJ;UucSwkL z?6Q~_#cw`{@yc*E>xV$x%G2yyOsCne%kd0ST1DRg2ib!(W@KwI?d6q12){4*n}?Bn zOGb_%;riZu6yKprKW~5-%$ut#qpuNA;x{DdPC)tDEx@QgF~tYvE(XlasD%@bll^A~X_6!nyF9grrubdP zcUk9FV@gel@yM^sHXzlpzuACS!OOfV{ixiK;6S3qg+HiQT>ApmV)S3;cBY5mKVwh5 zO5lSqo1H2*e!aY2iF|OP`@-fK2AZ>hyQq3-|MvB+2L?t%@AQoV)XCy&I7-gpV#I3X zETX%M9A+vh{d+!bhihP2V*Usd!dgBEwVvRIbpjy)f?$Q`P7AZ=Z@cY``-F;;Jk>&! z7R#0I>s^PS*5KzIupk!1%UlTQIByW93<}&cKsc!dHoZh*#5WTvlw2c>@z}JnE>!R5E3Jl0>f)+md^rS|_$OT&#nC9; zIRj~UK*>W-B_jB8MQ7TopbP8{M5hVmO?8kT`nK+8UXr z3!TGp_s(f~ucj*7Y$&DW!+gH#Xq$!gd|mXdr-!z{#Jv&#J@sG{s(+}!!MXlW{MJYl zbmhPaZIDpNT5td$T`&|)F>bmAveJH9$*7ck;PBwZ!0T&4E(3U!hP)L;^n%MIUZn_g zM6s^@mf^+2`m#gs66JIetpG=}k0AwT=Tp5pQiwvCObST>;y(&XsVjIln|F9x4#Qex ztcZ6$1q;`$pR*gZjho2JM%DC@1X%gSHoR6FKqMc{i<+`711Xy)K{3@;CYGHR7d z@9x4suD^i~=3CYnIC#bwtxKx)O}i6#)x-F`&mTbOfuHEpb1F2h<1i-y-G*FwERh-3 zfv^zbG@4-Gdc4zkTEEu?$Dw929s`nf7r+Q*Fvq5`SCNHU1Lb&pH2=f2{ot-a;oaLU z2mEN}E&b-ahn=X35kQ1+v2n#zU|9HB;VaEg$e7LXHQlwgijPhED-{^8in` z(Y#3zL7IGDeG{7|1Pm{QPZIn8i6pZCGd|kCOf+(=k5s_7?I`Lo2A3+O$>;eK3pTs@ zd^6HXk2Y1dUP`8|Ts`eTN?Oi2?0B;6ZD}UOMp?Acw+i=ICCzn~w;V=iV{vTH7{(#R ztnluKj+56J;!rR|8_F0QE2-er->*vjn>3i95=6t+k@{0x#vYe{m!2V-J# zjE``*iMLN?-|Z|55slQzZja0P>zOy80V*7;_>kbPVwvs{oiJ}^P9xkw7SC_ne+8x` z2zN$RCjib@SBKpJA`EtRh%&@;h+Imcerc)1%_TL?Xjp+Kja# z`+Mu@bgdjT4bSx`T$QLbY=Sw8ATW$5+bi;zAXWpif>Qj5^hNusqJ){YR+M8_AObBk zQ`C)S2?c{5NP3oLLv^aQSpZ$!9}BDXee*-!pT|a7H1VjE77}VT30B{~Qkf$6J75qs zX11Dnzc2+4U2|sKI0)?WXia&XDFE7C9XlFUFIc9u2_K(F>t!xJSdRC&tqbt9c)*lbk8en(_I23_KD?GY7KriNTi*oa3Wl8OUff{(IM^ z&{8&z2(;7S=wZG8BJi+j=HbKvDL3i9bDIzvsZ0TKTE6gTx zF$N}4oLqZ!GRO5MuYC4|U~8jPoqiu8*n{QC6cm03t0YbgXJMjBN<@qXD?CG^9#G)0 zhDe#oVC{Da(`UdA*XlOD8MJH8S9aFNxyQCZ z12L9?CYbWUY-IM2aulBL%BGAv7>Fj@Zsnw{{3&`T#7aU1n?f%|M;`42@vb$M`TkO_n`DfR$SGkUVeLvj%p@fraf zR(b@*y^Dyw3+bTCa9mR!0Ex^T_rp6@6PT=lgccpYPs@E+Go}9z_!^U!6VW+!WV{Z> zJrk${tKuwo(a`GAwh%lbmXZzp8eTDX6^2~^4CsFzXzaC%dB^C-cEpl(Q< z7`aL1ws`pZ=Fc6~Kfr%%y*;D=g(xq@5NXb` z2@ZmW(Lz)V8kpf;=t?(WPB)??{~4FWp10xIW5+-{(|5Et-7>(QA{Ika>mw2U;IZ=w ztQJY@=TlNKmQP7!TSL(mYMZP%ZL?5k%S=EJS&F8tLfbx3AL(?@4MKUca>ztg)8B`C zIfGgKxOAKT3`pWv;JB?&G>plor|3lqXz0e+m$b(#IlPSmW|>%mOCb9~AwCjtd9gJw z_GO)-0ARmW;Y}ey(Ykel`O+IKSgoaty7AofzPT}nLK+DW)_2g>cNLjJ#-%8tWn0=I!Qg&{Ve!wB=*vS zDl)NU{}9p4C7v+rQ5Gc8;H`=7)F5T6QbO$jNA> zHPgWhlh@(&#G9l2pYT?XfkAtW6Dyx;cx9*C0#Ijyz@pRxi$Fm$rz}|;PD8)*l0Crm zgCz{OxQvV5Jfkr<+S*nDp#25_1-}N?Uu^deS))^KU)iK7do??htt}``i}G#+0%5{H zP@r2S6_<#Uh`gTNr=_htCp==LM%;d=gl%7fcV5ARYqoJ2=Ff@N{M1Wm@rJbDP;MFw z0kgV!{OHOjsQS^p06c4a1+bhDBGjL?4xX86{cNwG=&fOpV9M|t6NLP@h$)Dq>z0c? zilC;m1#VLZL;nbrE?7g$Y7-+2X$r38G9?*Xf`0%%K)}D0KwO?|H~?3lR-q4#i_NI~ zI#(BNy1eu!4*MrGo)+Df2Zago5PthpNZ<3_ZB*3^9=6DUxR;?^-2Q*jfBx@KS-MBb*u8nRfD+H0+Dz@&-!Gn7RF@8 zPGpm-Fs#lk@M9(?W{nM}Hz{M+90`H^LR}Ww(F_f4FOb8r;(sTT-#LxRnikvX^dJ^# zK>`5aTu9E@3PYuf)j5x5)$r6Z)zw_uhxsW)R5SZe)G8U)8xza%oBOpqJewkTul0 z{?;##>e)&4U~2Ntj}&}%t?G_&zs2{G5h(-{(KKAtxf{O~#S-3J1}FS5~a^H!voXBM%`p)Q&S!MCZya?1QSg=vPllTi~dKXwl*+o3^u@O&;!+-vt=tqp~$ z$(kjN40=LL>-JZPQ-FlR8u!iVMA+m|aaAPr%^G9sVq+INre8kqJ0`l3REy>i$QL~y2<&DT30m9Jdny5U zNMOb@O$N&eL>9dMJ%=S`25e=9Vke5sb!^C`)2O}q9)|wDWPanepj+T_&~4)ZG2%x` z6xs2Z`<^0+_r)RyxQoo^Wz86JcsZH&JBx}-J8>I1#uJ7OYZLa3z9I7Mi92*kD*p4^ zN0O*wpyN|B(fXkXNz&v3^*8IYI3L*ec4`swNnf8i>vN#n(;*7uon*FbA(9|Qh=TL$ zBA(z>Btb16kQ6z2Ob^5H>M`CuC#4^i}|*5f?r=)4~|W>DQvHDZ_2c)x`b-G z!2oz2(dmw~rm=-qXW3dh!+M~D3|0t)3$U{FTpM*!)B1f1^oX~$U~{#Z0q?{GE1dOa zsH+5qc8w=nZ%)7`997&DK2Ga(yt9K-pl~ zTG?0tTh}GjAIMz5cNdzMKY4OLA`H5f4m%B9-5?fgQRpWpzc~WVdcDgldR9Z&5ce{z zViMT;w{%ie=UZi+-HWA$wL^6h0Kd#=>})(&;4=Yy;q#+f+2S#d0S}mXXbujnOiLN=|5VSg9~!uxrHsZ`^b6C zY=+yTXi0F&Vds5jNP}iH%=j%>>uD{@$>yM*^}{GGH7!UEr$K*73-TtGaPQBe-Dg!8 z>XIC(Fx^2YYQ^ryG|*CYCdOd3)oXA)dj4PASnE^Qnbei2zY;g^9vstBeg~>73ptW@ z8{Kv_FgrtfDEYn9gHAKf$vWI~L+eKuTs{#^=wKYuLWayT?2F<&a{=edbrqAp7~~9- zBDaS3rUE(;phUcli*Pnj{Q!dlghp=UM)&+b0e;XusE9K;*P9zmHkp`ngC6<`Dwyf8OnQl(m%hz@Z8 zcLzQ($s!ZNDR(if0|HHvSZCW%c*zYc)$f;Zi} zxkaRFGQSmA-o$gG@U^UfaCl+WdGaCQHw zi^D1?07Ocjc0R;I@#A6zq&E=Q!47E8dLlPj%X=L0XSw z(M3;w)L|s+=)C)zuuk_$^8pk0aZ^%3f}6)Y#~?_UgLa2M%FF^$0U69JV@xEn-x2r( zUZGg`-;JFNrSqh?ZOR}L2QmN!WnqDZYiXVc!09LCe$T`#+#`A*eD?cWad0Jl*Z|j_ z@e?Y#oa#qY3IvbF+sJp6NV%rY^^+V_4mydJV#Lw8c7H*MfcxH9bg;71_{~-g&fWbK zqQX-;bU?Vpn8lK_1A4oI$$xJt=i79LofzeHHMw*%A|QuYxvJY%pssGGj-h;h?VB#_ z$K;|Ea`DFl)RB^XdmWs;r;YC}^&K_<)M6QQz_mXVXg`23v!4Jm0{QOQ!D%VIiP{m^ z_vtu$?Ll-kjF?HYOSe3vSeK&NsNqiDuo^L}?lZaW2F9)K49TM`djc|p2Gn@q0(AW=?mD-a4@`Q~XPFH1vt zg+ztx(=Oqo&hD5U@+AV;*2~1M9hxj%O7*~)fLo^p_VNQ$E;J%M(vz(!sAiv!OvqPY zy@1yEqeU*hmyQx*W(n1t7D%+>C34G;uNYCh&kR)o)28?ZIa`@nT%LR<#lCbd7$!}A zeAuJ_x>33mD-p}&1H;|v7NxDf69&i!&w)Z{q|XuEcIf`a2~i`3S4f+jg`S^SMV!p- zP$4#i4G1!fVjx<~U1Qy5vN=>bXaX)1FLK_xGG>`pM7U5EaF1SABZi!$xlD!dS5s<6 zP^mPyTDgnIfiP0iPr=w#TL_kn%QmBf*RglYt@J7pL%OP&t&(I=G_rxw7p+5!tw&HZ zL<&nX8J0FVN!;I7uQqWU`{T99|59+EuK^${coLx*i)fKJ8j5jGfMwT%It7xUUwK1o zWiNO-Nn~XMLcTKjy;FT?+R#P|S>qzd0XYQnR?>iM#33n?arnbuCj=Z&K?5HAf3F#n zn<72x9M9(^z4jlGST9H8*OSxl+gUf3Md#_#5ca%?=)K_7k!&zCgn=ZlaEkBBjCvex zWRtAjfF*XRYyipuL#KeroQa&8djs=?p{0PhKEX8q->=WK@#sMSVg2V4=`^0%V2SR~ zEOEg?^&qHe?gkN#ZC<;>se%g+^HvxF`qr_S@D4S8kF9X{sa}E%Bng!mTlHuhV8`af zD4Zpqj=*Tu1iR}aHjsD;a8SJSeJ9T7J$18>v9B7GjNb zfWrCU{1VDdaR9IIx}(?Wob^fdU@^OQb!Y_scnQc^TQ|_vLRB_e*!vIz$}}#dLTtX|Bax*c(ZvHWf$s&J zaFY9IPVPquN@-c%SI9Uw(iG|wyk6AAV$HBxa{+fO*1r#LtJk?ZG2o!83 z2HNgi0hJlxJEr50<=aHhOk3|B8fDB%8d^I5;}FTkcGnJh)MG)lVe$!fahv<50P4I& zqH`q}FsTF7Ek;?MeLThvEPXyP>R*X(rhxwxz}8>4uungjTDS-SBCeoEX1sRHJBron zFfK2dw=Bdver>$q08w)+oO-^l0N0cKw0bsKtZVJ%a-*SlSbm0BrAf=6TemFk0j;;n{!LujhKdxEBrC+4Pc=l= zKYCBHb8RAN&aMy2Hp;&r7+qb;mcV+~w266eHyIL4QM*W2FBWOHBTof}(`e3W(;PQV zx-7T4_U3Dk?bPH)Z175GcS2!ixm%G`9?v7EQgCL$=0i!@z5N+tgd3wl7F{&cX2@nF z#E)mJVJ=Y)GZn6!R&3?I=uvmJEN zLe^c@14CSN&F1BhtsEtGsLR$QoQZku?Q4~uAFsYeNF^WW7&G)9rLbUkQK{LDltKQg zN8|_Bn7U=hhR0M-!t{OV+EM`uqy~(Dd|-X#XvT-m*^y{C_06yZrnaa5z!bl3*WKZg z0x6JFNJ3Hb%a_`!Gpk%|Kb)g{Np29Q%%7h0*(n|`!{$mOY4p;DAvP?zti&ge+98!L zvDS{FbgJqAV(MBC1;Lh{q{D?l1n7ytV-j|y ziHx=xa_lct;D=!zN-v1+f$IQjs3a-0rSOlHG!@jHI!^(rj@xb!g|R5ug%z(iGfa9R z`(ne;3}sHQHys#=Jf!+?&b5`N7J(SQrzp?4$GbVaSqJb$M_#~;QY3p(!Ju1>HOpnr zytAsbi8se`449WI z-NSR@?W7!lWboYn0^@s2$jGplBcqX)0ipj6qfffu$)y6k`r^0IS)WT7E)zh zU^pp$6fcM2+&M%OC4u(FP4imVJF}>}weTy1V;SGy;#3UiSG3En?oS{(2|(51*>YNT zmX4ZOLev)iqO4GqFei^zR`?%I3Kt=%#{j%@REl!MF5I`|-|Rq8r(3o;G%|P%0iU}q zU>SNt)>R?vjEa&mHbk~nG%-$JqF1b+OK0@?6qFD*TQN6ZE(KHiwY5yv$Svs%r%%>} z_ovlkti|-ric%r)BK!2;(>5uB_SoF!djLHfs7w<~$$hmk@Chy1dL%4|8l0!zIvTGj z*8_Epdcb7`r@`;L09mSQ#8A8dsP{=bYRNHRQIw}7!#sU>AbMWO9>VLe7N{-Y1RPnz z2G=Fi97!0=zL&BuT@A<@+(XEkPmV)lLBlE;hyVp(G3=q zzl81fKR9?<%h@yHzt8)XLA>e+c2<1Y?Clg)gG{gY3q7LpEZzL!WB}fyfIEFhwq zCNV!VpJ4|bOoOK3_+Zooy`wqld8u^jh62W|RYJ^WZ8Zt*&PJ`k>WwofKr3+la(z^A zfFg_?S+}^rE7Db+{~X0@+EK&HNs`|ayclt;viX0ZvRnyAcM=kLI;PH< zQ^e6&IhUE&Pii$3^AXE@cnSg zw1d`vS2O=sex?VxH*F{sBL?bQ-m$)gSSIXKoHlrj`eVlH!)C?SFJqy7N^{r7a>K~u zsD+(z%43Q5mKyj=H*4yzPC5Xy)eYdiQU+Pykc*502UN|rd*Nc#7ZKJF-t|6vcPKde7|m1 zDn?a?Km0%j(O;s-JNhDzdoyt^itd*@T=$Q>;*cuU@_dIc+-;_iR9*fXZ_Tf@xgeE- z=;`h3X_}am^}h8o{#{a(jkGbHWg69As$8?LFBaCvywp7%g!|e~ ze(Snk!wzh{=6>A$2j}N0yX$CxJ$sqdIn<+?6px4YxStpAb3m5fgQB>>NnIUShGs=5 zPp0oK7TOu7DOPoEoLqvsOA(b3B z<##rgFXgVa#n>P)T0L~*W`z0Jp)Trx>9=B1EDXEnmq+G{{6-O3HJRMAR9q=+KT?RT(&+3p_uUyflsV#}G~Qo4@D= z0Ipg#m5$kP1U=^}TUlK5mX=}Udp(gtRG7|akJPcC`9miPx2l=njp>6;37H^*SJ~xEQqr z3?aqaU>eu}H&I^oK?Vh=5s}`As^$T9l0=U>6Q*!NhGnOOTmAN%eW}=PJ z^m+zJK6IULaYKMMqS`aq4J-KJjqu^z85Tk8pnrKFhX~QTlh)sj5x3GB0`9yM6a6!4 z^ZB_%^%w99A=5DU7eM??v&C@}n4+cx^axGiWs-Dz&Zfs6ipFfJ%m2UmE;fGIJ}=`J zVPeIvtC{oQlh0HpY4%hs=G(7+c`AV2!1n({MM!eC7h=J!h^T1nJF5;lPL|eE>rus<`2azz`|~`BfYj z8Elc~@CDh{>v>?ON`RK(2Tu`aik~e@Y&_anWuf-q8e~2S=zr(WM)FbS9DV5o%SnD; zArwR;fbRJX5(5Nmpv#!FZp0J)tv!DJDX1@kv)z9}RxEtqG8rJYoO6n#tPwhGsuh0N0Jt1EDZe(E&KBQc8`N@#MQJ4bh zeXz!RgWg=U#4TE>x_9Ev46bLxhUv9~F8B@H9PGkM!}>+g1$Dtiyzs#8hfHoXMj61n zyq&KFc~+*Q)y5zq*C-Umv}u8P9r7!3VP~>|g5Vh+%n#cE zHA=@t-TTo9fzFY?e*p=xzyWF)bKgo!1qz!+b8OENxVp=+aJ#7EZ((wDtL1k3tx+`fVW(Ia0Zd*VcdYv&;MlxBx6CC3^oC# zTNatIdCivI4Vf|C%nlPE9tR7BfD@APfi_7h zS{i%*8>@j=rZdq0ujYye`{n!|hrmGf2lUA_Mi~%YgqJR~Dq6&fK09vzak15paW_Jg z0{GV2_ado!@R7)Hlr-&Af3Vt?!e$Y2CC}04or@%qW$H!*XHlytOLvN0ZIxJ121Y&6 zJail>o4n6K6PCL*Uk+%3k-cO6%VEN}C)63(b87?Q>bqMNt1}7H260MxY|b)Iv4)Hz ziRn(rwQW!=XH>EkS#l||k?SAR_d=nt3XYg`h0INT6=HWwY~s%VIJdkDviWuA90GMM z)mK-gugS z>T7S7ZM~WjQtq7+ow*n}tz~@Bx-O<|x((aRU|N?m7aUUQ0GQc1u5*NcWb96L10U^3 zgw3}0Iu`sFCDSR>=bE1Y!JBvuT6$zN43JOGMy>CyU6HXgp;qQnjd7}8YHvrY!xH-h z&|hKwiaJMf#{F&2M#-GJ;+q#!RV;mjp}<}cB273&e6RtRVv|{dd6g|SbHkZR0O`5d z|Ml-(eYUVXlk7I7!*7Px5bRycRU=2Bz^K}bvqSz}=*k7Y-HD<{Iqv%{W_&hPL6{+c#&Yu*j!tb`RTk?hZd z#BWgUm@Biq>C1a*r9hb-wjw&5-FthogCQj9e0U4%*r0*&rB0G_#9y(FN+HFwjtSbE z5G4my-d9!L%aN*^GQSZ2DQ;d9c~Nyl`HnWKW-}dWvZnLfhd^!d+Dx{G9cm;%3>e#3 zMt7xMur3oWkkv|>F&aqot%e92l&E&4BPzM%(S?czkXt!i*;Ua^aVS8~woy1rthkH+ z(l=VzejLa;?gN?bP3oVc3txr1oSV1ahj7s&pkVt9?r8UcjHsb)?Q;igPENFazlI0k za^Wla6myp3WF##NCeJ=m@&9`8%y^T{>40Pk+n^#41a=l}@0gn3Vl%yFaX#N34vhyYUFg5cqyo4`b#B|zu?Sz*066TUbz zuB~N|8iePnuD+7E1Eqsic;8o329KjfF8Sc|1{j4lmc#AaA(z&?dn8cuYgn<OBlK?bN3$)7uZ7SoN=F7irD$G@E1ugDB#*9cCPE* z>UFK}XMh|6%I_?{Tx;DAAuI+M)M5>#)9b4r6g3MQpgac}xfw5CGb8yt&$A7^B|Fi$ zxdqK;dbE9a9`}5b^;2TP73qU3F9ajP2Tr5g?wB@0ubHnHD^gYcJx(UhR061xNQS&u z+2l>2!k_J~@h{MY@wPi6i_Skr9^>Hl6kqaj#-#G)_o318qVut{(-kN6HqOO)rmLc` zH|^B-hKso}#5eBGNJU0au=Xq?F1TTBMK+hA%;>^Cko9QdtrYRHrmd`_G27O=4f6AD zyhpv2;KzKDw8e86%B&1uOHKt@+C~4z=9pnE$M}4t=sL6W^s*_|MNKM0bQrFG5S!qk zU;t3!_3C-0Y2jPxA1Iy{;xX`DHb&CNF&S4T%y&W&B5hxnQbNtKTB6gsPf{$7m81P| zyVVfY48Gzk9(Mv?RA9r)YzS?c@Sw0hliqbYZ|=|RW8x=GRun69krro#1MxSAGg>Ry zLwA-e1o-8s+yKmSs}2ufn-G_PEaJ*_n;E{1U|f6IA~mF4vIr1`R30(6esGK=8~6TR_&zzu7hNxO=LdyF6))4vEB zAE7FGl}7>AT;K7!trgAw0QpOb95LYt{OTc^p}_-?VS1)sF=)tSl7+cfV_>{-vlE}J zEkNzN(hv$(2DAJV!1k>NL^F24DYn7HAoZmR{mO5Yq>fZRN4v`~0U>eSjyM(f4|kwn z!vx^gI1IY(f%t=?zU7qnJUv(L-5!?~z~ktbeF#C_ABKs~$_$luM#~)H*6`fq3i`II zl1Yyna^8UmL9S(_`c%=E|CiRd3V@lxFP+;_{xeZrRJ+I#`>n1J?tETmh@eTF>#ais z1AtAyhNu=X4q*!{vfE~*pad5;uv!uz`xMs!8y>>vArDR6Ub(jX=V@vW*OQe@#^SOef$()xkuliU#7#)Fwkkf}*qwU>Nsj*Y zaGbQ5<6UDum5ju|W#dYhhP12Ph(HvLYG?ZPWGIoqnSWrUW|hB#uxewVS9yCPUkqYV z)cTLOzjI~RtQS2qYz%EJl5nVuejil1J0)MK$$;@nf2GoP{O$vsS2yq)CjFX1)A&k$ zkcwJTos7w*Gp>@`1kuj+573~En?K<>1HvFfGhUsB7T$>*LXASUft5W%$l3>hF!_9x-m8dQ~|`2k+s|Q_()Cwd<@FE$iB!zy+gG-gY+ZTl4 z8~$~e9$*Es=eb~wOFwwBEkcl7+G%&T&9}l1O!zd}S}76G1XG~FlJ^mvBJQ;Tz=^rj z+!BInZ(0wzT#?o*usTjJUsR4M2Oz&(vz#6Z&)gpOejML)rHW(SwJ$=i4k9Q<)#_!~ zX5oW_Cm{J|0Pzn$g>)~9pq0u{57@fy#FJw@lQVgQB7L&*zxEytnsl#~jKxwJ=qPIr zsLLA>nE#<9yGDX=)onpJ_tIqSK}s}!4M^z`?u8^OMX zR9U7+;7;#Z287a*FfY<8gw2g-OV)Pn2sWqkD#R!GRC(Htj3@|7QK<`mtFfq0u%*0- zIL*P9_suAKkE%b#uYCX;hu4H6d#1H)s$@968!8hICT4mFI_z^E{(J#Q;f@D1!V~b} z0dP=b8o3~vq}9CbZ^#rcn;7`%3qeE>##pv%F(x>o;e(_eL8j z?u8Np#sFg0T0r@PP&BysHHr3mj-7aiXFp5=grPm0-=~*P257?qd+`ySEn+TvJ9g%ZSGwApBnIHucmdOra zK8t(e_D3sVkLh>l==%WbLS6OcTfg9aeEMoF4!-wVy{C`KIr7nXV>|m!L+1AW=v<9b zf1xrtNwt=xYi z5jIc23~HqCl=oloJ$@`m>`IPy*iTQV_Y%fVD)#n{ePqu68*`>6r!kcdLdbw)qQz4a zs|0ps5%@=^ur<9mjoFy4A778&a{H)8<2!10uRo(1|6)wke!ApWvH&5jSB(ayk1CHU z2T?KPZ=+D_ewpjDO(QMFim|b3QS5BcACRx7>ts>Z*TU7YNxS(J)E>Hl(xne}Vum0V zQd+Zp=~bl1ElFcX{ah8TZeuLOPI&Hp_goYY;qZstV1zA$fGmboZ40JVlhgL5YUR63 z1~OM!H>Y1b+9WS9z>*i$ac{If`48IVffHxoM5}SxtE2QS?9K!gO;;c}0gSngQA`=x= z0ySx;KgJVjcWZ922{|>V4~F*HrjjZ9qT%Bx{fb_u`ful~Q(+&prll&YY>a~UA=W&T zq2(8?m8Zm@Wm#QmK7w15C|}i9w`add+4caq@hNaH&FV#S8|t|8)gDAZT-&EULcXF$ zG$c(y^QtRp@HJa7qK`QV%Q|?SVt8M>cEE$Bg}h@>=^M?$xv%x>q-K%5Fdffi9PCXn zus;WWE8~nlEl7oS{f6w-jo+uoF7(pX`W30M-j7wVA)I8LIf%3}Zh9X57 z$po_LMKf?a#&m6UbMUy%tET#zIg!H z>%q|IK2|QHC6IYpT{VOHi+}3gA@2JDOiRZ#A6mWJOyAmLwL2rNBsOv{sImEIX5fxE4~EOq4+MQy$CTJazD&Ed3-e>wp)Y0W8fOxU^$2`QJEeYb zBUiY^>~Ms{;M|A$n1kb#_-`#2=XmV_W6>D+W(efUuPy7bl+AC9WZccf^4_pxQ4iXq~JO;>?REdXZ-sXWaM@}SY&YU(H_mvgN6Lp|Rk1#C(rkS))LDZilvb43k z3r0X_+o3(E)$3?ChB@>QTQ`XH!dsxYLRfm%ff$w&ogMFI9c(@e8?*OrmY~XNNvD-- zgg+<2tWIEbHUiN+-c#Qfc|<*_VA6SI*~(3h*2Qr=lK9-!$Pn4^2l^{d+9-b7$M|^D ze;?)&iNLHVA-u*729p?jXVY3%NcMhXO#BXifOl90&EHBYTxBDsK*~e;dbHDBB3UL_ zF1OSzVo36Unp}ySXh26g0{?@E=r0-A$0SscVo~xp03TlT<9`rhk>vRf3Q4z+iYK7n zaF0Z1K}8jfk~TY!QuDwT8lB7v^{fh>AzS5{+DA#uu5)WtLz@4<^MGL_O1CgJS0dt^Zx8P? zlM83=d)PEfJKXVNTY$}T+*Hhj4pXc8?e+gVv|qspXWIZK^Q>gbc{JT?OO=vf@3RWX zbjY$eJJZKNjAhRG9m%d>T|{}T=A?6F!;VcTl2qq9)>=RE;^l|CNl%fe12DwOHK*NyO+M71Z@tvfE~! z{2#Pf)Oki|QRhK5BlgE2guZl(NfneISD_XwZ8rwMhhcnk(p>p{+qg`+KZ_@JAAF7E z988Hvbr2gqf(>-8Jc{jI{t6&x4k<`jof&1?Z!2&AyrS=rya_QFF$0z2+}PS0J3guW z3cil;BZ#j-K(ORiM*jDz4G#9UX1o0}_2S={;J&<*kIW7Yv}hJRC*aGljv34|R-_dLrc$E%0+=6_bUMx-sa3P3M~9pUQzW+9^9Ev?tJV7oeENjfg{{i6P9q*rD8=C`CT!-?K5)!aV_&j^ zX>~aNelB%LvYdc!37SlXmX&}ANL4e^%hKafRj)7ia0TJ~V?>Wxzke8U{u*Y}_U4EW zGz^=;CYIuYw^0K)8KXAVqcr&NT;G>-J=G$Q!Z(~k#C<;knxbFNJJC4IN5YP*rA7@m z;K5km8HCl|I{xtUKOiVo$S7G04|=ZjCrF3x+=g_{UhDpE7MZGtk2BFiL|YT`r5q6I zGSgZOZYs&@z+uGnVbGyBvXfM_w{^t~H0-VN*wii*Uf`9zB~ix%k|}^tY$*J&l^Vs$2wulz4Z0u2n2T2uy0xi$p(VblCAb8{O624GV_Jji-@#E+n=D2 zk486fER)cBj9AXl0xc48$8Gvxw4+valL~4t7f-VX`G_62x%}$krDB`kM>rwAa=Ipc zo7ap5m_bw(RCM)H53#sSxBFFuw_;{@pc9RAITt%^LwK;{OVR!{SqRAY%(xDLgSn(% z;*>7}r|RItTt?B|?g|1YXm$Ni#$9wF>4v41wRR;LRlZ$K|Ivv;kySQrvwbknDYo_e zBB+VOIC93hmP*kqYcp^44@3teNw)46EqdV8`pCRz34%?91#aergk!Kju8vA3Qk40n z?Alp@rDj7Sf`H#=Y0Pap@)=IrNnGGu?!yM~gW1y9(nkU!g>Ne@!n+8H<;OvtLq zyJXh}938!GdHG}h5|~F?^HL?Hrg!?uh2vG`2)TDWOwgK&SiLVB1euL`WJ`mC_R4S( zf8w2N-N*CKL=CwFY3F)(7qQ1;pqv!D4(@Z8LzbL=rn31AkdHL!E)K=%c8O)sdkmy< zCKiYJ@YJgp&)JVXe|W%yiBC;nW6y7A#2>cEUSRXT@8w&QPc0Ve17kzWciFCYdxh=$ z=GJ@{-MWOBT-VU57r>+oMOG?5?LL!Mlpu`~+l8sEy+RszXPXFnU7|84uz>St{`rST zfYMOtZkTfMe0L^xhBZ$Ac0u|76>Lk1YSmsI3I&%uyFVQ3cn@L^%o?KMZXMPWR32#T zxe7E=R zOm3qwYHZx(GQp&ySUmRMHgjb;Ssykl;|1dNaOJV4WWa2uruhey@axNJS9s@8&eD?9 z9*Jnm^!gFL_#lXpwJIqC$-iAXHPb=3XTvZM()x=t41edtF)89KcJRvI!3|1vGyv)j zg@xR)uRzC_yf}`4q6S_c6ws}4wb|CwO{FSFdtB-%FF?>8Vs?^v$$H1Xaurp#Rkz-@ zI7VB)rDn_h_-pFBIgmFmAf|2l4(TAY^)Xnj&yFYj;guni zVq^C9(=`$fRcM+BT>}I;J7v-jylR$_t^B9(t^<6WNylRt6gGXa`@}WC4L9RJ;=@(E zOd3B%X@8yJZ(F`8DRZE{pikAPQB~#SvsfHH(tNn+Xyv93$GCQyfq!yc2@)Q4I)F+G zE7mlqQr?;MATirr;09<1!+dA+{%yIXy@#R&h&IWaWzti`?{#ZlNndGN*f75EQO1^Z zkXT0?fkAV!^ozxC;^>+eUROu~%6b0i9jeMbL;{_%)|*56;HU2`@`G_xSC#+uc|+fV+T=!eixR>wr`0 z!XT`L_znOL2e?xt6Me(Vsa6$gA%)DpOD2rVg>h&uZrMA$++kXddh(!^=4sz?b+V-yvFuMes&nC0vGs?yLK?!!{xvx;=ZeRD9|4NMBU*Y z9m`ndPEd$yc%QXCG{5ZSoVG+Xx+ zOkfp-@W0m^77mCEF%keM5r+J+AYXETEn1bSHe)6c@cjem8yw&pB^6;Qgj z>*lz&WO`_|xlB(fn6g~%2`Cf2M?HtM|!Qt{M8&(5w)|Ao`fQ1xxmYM-*sjgHktYI_V znHDNatv@`Ie8&s}bK(^3UqPenW^y7IoxR;zbq{Y&=AVTRm=iP!Cc-XbtQvfPTNrbGjYheL3X3eS5H1sVr~7 z;a#^Mj)YtiET>`&JRp3UpsYlomzA2a5H7?17c6LR!(lS>o|?s4_v>fyf8%Yu2+4LA-CqFQq^He~A4yW4j_9i2T=7q7m8iNB85H&6is)kK0L-bReg41B8OnV(z>P{S=K_owN#Mni`Sq9+mncDHWa9r^tEbvc2R?( zytl?TQRGmWUAF)FyfnTs8O(Wml(J-U;S9OKa0K?Cw;Bi*(7vs=8 zjwfy?8c<5j9%zUnDKK+B(Bkh0Q7Hj%mjFYr=9#Y;ULV8P8`$!QC&ScPVaB; zT`v2d@QllEwH;5XL?W2HCEwP81|sDkf*G;GCaQ+Nmzk?;Kv-&6mf zM5$fs{dwv?%5m%YWwncFKdLYm7ke6ns#NYK`*xImBpaLth8wXCT*(>ff~@t{7ip%@ z?l;OXj3gy55VzZ?@A>QC|#lh*X!bU*4)> z=xKC^iQG+c2B!>+XNq(=(cH&z_yv!_`qGbZYfoDo`X;)r*w=E1PG$O$kN>;|(`E45 zcKt|oNHEQ;OrDveWob9%)j_S9{5JfGiffRLaYTRd-v$RPu}QJ+?%LHxyvEucq!jDb zu^D?a7zIp9VNX+t$!q!HAs?wtTt zK&ro>lIIilU{b={wWt)%y#VfxzzZr>KY}$rGuA}X^s`wole1^3_O zPS}g`!TZu;b`qbO*8LUB-^ByY9IMZ*A}Is+ z-lG|OiBl>D-^ofL`OWTUAOUy5QWH~#N(WDK$<>LKEpHJ`eindWC{{YMp6H5F-CIVm zVw;Kpg!vsER+N8{r_?v35b*r zUBf}`G(O2L&Z1wwXOkP?bM&lS2w-XobQWyom@G3jCvj8dgXImVkWzb37a;&RpM312 z$|ZU^9Iv^5F6NZGRPC&MR+WXjIXt`e7;K?#Xv#pl0R2l!Mqc7JR=6|id#J;A~bh<{cQjrqT>2m3iDD08ymiuZK{~L_+xF2el_TWZ~k)k zTmDi;amfV>CL6u+Ac{s%5u=swmUKa0>23^L z&v6azKf-z%p7kZNYE5{|8`biNQ4XG&ct=j!6zm`LZ<@_D9@i)yW&mnSIwDwL9=`q1 z%%iI*G#s=Iw&I-S+?g6+39LMZOynU}_nN~e1+d=TU@s@PsQ9?T%M$6q>Q3~jzzX~{ z$M(J;E4+_9p`FEuqo%uM7$ca>Uq_~bG`2``pk4QPuac>;$J-Pvtui|5I2e*Z-R9bvb`t!j&Ma+wiJr|7%PJcthDbUHZ*m&`CLa(m@RKyEnA zK?b1y2{CB4oZ_q_P@I_t(E=lXoK9wkSyHJ!SYQ#*pi0pVF;9|$fmi?`=m5>soS(Db zZlozpK|v*di^b@|?>g7$$d0&X0KGU9i0uW>eqwJ)@WsV!`^}_!QmUM-km-W>XNsU# z;AlC&@zSaH9FwMb(Aq`IWPhHb#}<089xb9xS4O@ z_w`e{VOxKmjGEO@+Io^cNTt#o;-OAPe&d10WbGvg<2%o;iilJnWf^oB+<|qz#YhQ3 z!59H_JbekoUc)7|Vox!I7NBeCa{om3=fMnu-7l5G&gL7si!J(bBU}@*Y>LZ){|ydy z5&vj`RhDA#&luWe2AgO|Am)%^J%1n4gIc|D8RHe1rV(oJ8azCq5OJrxDy>@(`qePk zY(ecjmP+yG%N6eXr8|B)vNIxZSOI6t@Y$gy4?{5aV?~;h-hO_)V&FoqwEOAcDXs-s zRx+oBRY1F~a?Ox|p*E*i5|>Zd?qdwTO}^O`#FwU&?ai=DI!Mup|J5k^);j_qY!PvQ-01L1s!-GG~JTCU~xT zG}W>5Hg;YY?R+r~mm>>D9x;F`_DyHSd)5*);f2^$^yDh4%->7hcXZU{!z7t`xjx#9 zl#aM@9DS!GJ8{)=oFHLu~h?e4ttysw7{+%LQcc`r4Vy zrvLb&USBQz*b5CA&&A877Sd!z>OGsM*9wpE+5T{3CNQxE9WfVmnE#)>s5yM*jCT>H zl_+47ripKsVS9b3I_qE3`-!oW#pgZ{bwl0_Aavu z{($62N?L6Jy)Yx)jk;jH{$*F%=g!bY(UsQvVTt;BXL{nq|Hnh7T>-?kpEPPu)1Fw^R{E)aPNIkZQ^6vAAH6S^b6v3J z{WEups6G4%>wX!z^s*QMm$*3-H>0E;7|*KGl^Y2H_u_Z(RPB*tW+l{?n)Lgnp?VFJ z^HdPTMHg|SEj|`wL7%xnGDz}K*q99)IEi%SiizxzmBaC)=qeAW7)j9uY?SOldI~NE(Hv7M!##I^alYk|qRovw9(KPu^)KsU%$X!=F^6d<+ zM13!X-NR@l-+b)gJk2{Yom`8W7GP!y)U2u{Yar5SBVUOQ@itn${@r|0s?-AV{6pN+ zN-C0?mL>oWbUFT0__7G3DZ0i+WD*pUyqU8n-eQmUj_Q`{J?zDE|9SeNJ3WsJPpQJi z62jtG5}Oi2(;HpLDdH&1z3wPbl$%{2(R{^*M9W2k&aL54Pu2e=@Az^-OG6QS2%|Iy zy1S8qe~YT&Qdrr`vF|~E@}DXedK>sSbs0H~)$qoUf$Rjae486ktIzK_4=$!J5|_FI z8f4_>eA)h!$rJk@coa^m5}|2a#Qp|C*epJBB8^AgEj>hHrz5b*_5yk6#Jw_XmGK;kF!av&t znLNuPO`{YVYhhbmw5@qA62S`cZqUdRHQrT1DiLx*W4-aecM^Qf2yrc^ZcQuoJU&o) ze_AwQuAXnD!Lsxjbx5~|@s^n`5#mhv>~+XON=x5~<3UQu=Yhf>qXTvO>wh79hp?l7 z9kGentZwZve)+D+kt`1PTO)|fK6O;lfSS}R+kaYKTzeLf7a~^0DaQ`mGFOa`pXA_) zs~Ai4J$$?TqJQe_b#5ezMIB{EjdN~Io*vQ=tE_3>NMnzZD6e`NT^2l6mp1 z25TbU&4GSRtT-d#_cND${j=ct2oL!Y=_ax4b|(&GI?2Uo2_U_BQ=JG|TcN9y4Y&W8 ztRT@t7fOrsOlQr&-GTI}Cj9psd2klWQyrrQohw63!4RxMl4mVJ{-U&45 zPOOS~hCZ{g&3q?V$0rzV0KRFBYQakV04bD67x0>p?v?e#rQBVczn{HW?`yFdMUc!d z)W&j1+^*uM1xWITEcDRSQ~V2;=U#Q95aq9R%P(N}N?kf=%_hbvjKIs&=da41kUCV}&6= z)x&Bb9@!)8eTq%JxspG#3BXf>84t?%G1@^}VBiU#xLhciP=*oK8(8p+*Azj|IkIx8 zFc2{Xt#Ml*EjBHI2;RHrOHiGff$(_J&c|Rv$+97k6~UVl)}`QE2TKh;LkLes z57&xwbJ&JINP*sSc;_E3?)LjIiH~)Rk!<&jtnzzK6PnZGa*q$`Bo0!2ORdONNV1LR z4P!`}tj4gvqBop(z~R&!zukyn5Y97?Tto%+)eV0p1PNZgttS9GZYX%Aw|mWDtWc(w zPwO8mW&+n{&{oU)DlOlEB_`A8IY z+qEW*qAsf`N^hA3Z;h$61ea|;`i@04>J&o*!Shc=O(UER4l83TCQu8$n@m&*v<_4f zexnM#HW&VWlMN1iOBlx1bk}fV`^E_yT<4^iLUV*RT3#^=#ZDJuBywI^-J4ha%bNG{ zSUuQ~X2r+3P4&&kp_7$&r1&NTga=&c_0zV*el1gvtC*yVb) zZMydJAbWg!wVe1y)_>-C~ z76FG@wlct}Ww!dB_`lk}^x5$5(Y?ybx2LZSoyMf>Jb@902_Aw>VkwJzy6&#>x&%{* z4$qZeS3A*z)q-jX77w_Ib;n|Ashb~lFf}3yQCYEKW6NGgvj{xC3@;#B%CYd@)a2=G zc)Q;d-*F^WQyg(6r`)II`r-E62a(2H+At^iYqga+=nU-EvUI_JtL6nC#pgNtohduz zljyCNm4IDdH@^$zGCV=4D*>a&o0dN*-I(*+sx|U%=wnWh$mNOj8kPZ7kgaiqLTcpl zxAB4?}n_Zl2vnJ+A(`W&4>(KfTp8Nxr^!>8Ud8lTX0 zu$&L`6>-iF84Qj;<;_AyrRmXz>sYZhrJwVRM6hrG1^On zBVd+1BrJ;Ea5O!@^kXO7 zY#Mcp>%rEy=OMm$3$qOWo^Opd|1})Yx?1O@TCeBX!L~PmlVinGG2~@&uC3}|q3VAt z--vPsEiM;xcx&VlO<;X1oOSWV*xrUWwBGUH3ie-8)P<1%uxSSehO$RL;@GE0WsBQ4 z+2DOpXOw%-g_^<+xuQRo;2mkVjjJg>TXk9SFTcFt4k~ZUCu~CgKB4$l|y6 zMRd6Y32QD0p{u@|oD->zr<^`tI0s!gJR(R55dqJ`#{T-Hp7G5EgKIr5dfO3zg6BSV zRol=Q*Rplr{bi8RLX`O`hJw@O(ZlNgaiRQ<7>~G0uZ4Yvi%$N=+ILMAyTsr)JlTp7Q_zyQY68Ate#9P9SlFL3 zVbz|1b?>O&O+1g$ARpkA=(OZM3ZSK|D~?I=aQCLI4cKR^c|S!KJz80Tm!0iyT?k;Z zNo9eL?5IVm9iYvEo~Y!OgnLw+;?+jX6TA?6MpSKXAgk7e&`s7*Ab=FAQXz{NPl*p(~l;!2Y-Wt8nEs8WQ6L3Yh(C))^pMK zXXc1jV!+zqy^P{iRqfzLCkOD)9zMcx%uh``RzC!*N?gFMgd`6xsqf1#ymghtEIx_g z<|b10{;)mo@d)sP(H)RwO-xRH6qc3wSFmZw)56jUw5G36t!W&bi|Nd7PT>V9f2AN` zBMP{$CYYHkg61MSp9M^n8O{FbXZR8P^_k6^!zLMDnC1JJp*+3H7BQ7WqHQ-4rEasA zcXTT7>x1daUgQXWIlskA;yprX2IJSoFio-_?zRa{t6rMF!9i||O^|Tn5hhw zH!ZXZv~u1xzujNuc9$V`BwXX?=&C69*+rUQ*0-x|;f< zOhn)P-mYc-2ySv8@=Zz@ck6YvazYaPaTpIyVg2(NPYRfEm6EhGhzaC=k;BW(jKGUB z&a;&!qM9!e;ty1wcVDKI^o5_No|4ov8XxqFd#oRi10hIV*~Rh8U*SEd!6j~ zbS5F^VfTvu0JLCu?fQu^LHb;zA{Danf>qKnwO@LeqQDgwckuquDak!o?X;OJ<*=^_ z0n_bHe8C?`kW^CtW}v?H&o80KaQ#9YsCb2Yg+J@Zy|S>#|K{V$e`6&x07Nnl=vL*! zVXMtUVm#;j6;hGI_f{IHjI<7JU}KV^yz_8WSh|6$366cV@3`7c1ctge>_W6ERdo*2 zCpO@6J~!k4O2S+u0LDQYUyYr=yHU+h|bTz5FYba34C!x*= zyJR+CU#*LXNZXK=QNy9MsKkxjF$6HZ0eLL$2x+nG42Sd?#CHh0XdRzl0`J67@yWLc zPxErS+LQg6uWzXfTM zQpq;gQ9Ax`?PZ*AdMVt#RHWNR6*E)((1>vE5#mCwVRT8OhV*Yt2E!$cg$+>Nv;8fOxn!|-l_YBjw!Og^RwcJt07Y>f#0f|L*6%|0zS zOI1z8S>bT4uz#EfRxG?<$lvY8pIUFU^$=ljX zz7J!(o$YG6*pM|hJ^zeJLG022efaFbm=8@XzB7X+pR&C6eAEo@uPH26f~lDt9*~Bf z>%eGA61`WE7(Zht6-W|uI-K*SGuGGC)W3#&6x;>}=n(f)N&HZJDF?#SAtW~pTH-oQ zPrs!f@`C>G=)=tgsQP7pwx=H}N?1V#*D<>bnItc|qgepr_J@MM0$93Ai6kke@^!@S zNpZ-&?A2Lf#p)d&RCkL4a;LNQp%~(+n3B?ERL8XP{-?Mwhf4O(h8`cUkt!xl#4OcF ztDuZ>c=*3f$3eAg7$;Gl8)I-z~ z2GfHG=|AHkWI{pf2BI%5qsC^-oZl_{AsT5z{RS;F$!S`LHm zbGi>FBTn%d;kD?db1zb6-fT7=tw(QzTavs;5^T%BG5!Nmg4i5*h zh@n$(QW>mVVK(F+WwK`rUWv%utXbTO#t?gHyMpd@#Sv_Nn5LHfTOSt_g#k__v zueiV^f_aW4TxJkGsOpDTzG#PhdoBqtlOEy!7~|OY?x@xEX=xpzFh;A}f1nrCBZRqM zffOO#c8hlr$e}xlNH--tAaCHkI5>@&4LK;e4`?WY7~HeBTjx;hwq~k*32z6p>KKaS z+Kea_L$1*az~Yi$u7cein(Y(g#k_~YhaR$yRUMck1i3}7+h6XwNoG@@vCwaMewz?u z@FcC@nGC;{Hu#+h*m<6C`?!>NnLjpwU{U?L)r*@&J@*&Bfp6I$Ot;D~sjySJapS%1 z!hb!zh=meqK_J4RZTm!t<$cZPj&9f^Ip*xecL=y1ai-zSE-?lBIu>Lud({T|ovYx2 zVOAq&frVK)tiq>xtn&9#>%*p!GAH@y6L;~byIGR7s%8Ug>Q1dvKzFVcWbu?stzR03cqY)M67Ibf4`sZQE7St=cIK#Yw+ zb&RZ*4EqTCadq`d2t7upR=+E~q)w6-v$ts)K0V!MREof^Gq+&uEGuEN9j)Ib{ha5 z8NOPf(y~?LY*M2-E0+Xp_@gZ&7=(&cBb{9JAL(25#)l|Xc66i%1;klbaSsFB;98e8 zJldMkS*uq}v3Ah7HvmYe2dO1J_?x0AD8D{4vlUlxc(t_6^X!TAwTomuu^-~aN@wj~ ztN}AypNitY~?52E9e4%92XBq~yy{qEqe zYj+{dM14!huuh4&o(Z%dIFnBYtR%fDS9TeKL(czLrgrW{J80tqTt4Wmn8 zh#V#-JHE4MR#P4hD!Uob7A#TJDOn;nU??$a5a0UC4qvQNNY(KljV44xS=?XF`Lx<^vaqM!O*E#>7dN!>u=V#k-*E zXE^n+hT$eerer4Fx=qZ(!gDVE|$RJu<&DgqoJ?nXH17Sn;iuMpk9pCQNX{BbAa^zO7r+6dRPpPVt!HOHG=!ZYYO~8A#;atLr&;uR<*bJBCU;rpZ*J7fyQT&18d2hu@EJGz05NDCH?DdN7mMDp#m>)6cQll=^9XmrmzKuEg z8a6d4B7D&ght^r4v@VoF;+V-j-WSN6)-6g{^~aGlG{>%WxU#asG&Oa;!u6oMu#Hc) zx}SS-wXd~&gvV@_;Nycj?~4+Z4yBrU7@`*pEdf{sVSUL(`LMj#gm6u|B528D1?uGE zm;l_(Yh-SqKDh2{_qOT*WiGDc&e zSL8}k5&=oX^Drd(7=x=EA))w5`x8x#*iGo(Eo0xqo{q_1JyqEc(l@H(gMVOFe` zsm>dASSyxZ*UroReh_oluGbydy1U&D^?oR3QK`y zpa>d@&uFw;75!+1_EV`7?0W+OOIur&vGQ0)wRRfGFi0GFHOJhFD6%QpgY#kVvF8

EqPRP@CJdfxmBcjt}38u|4W<>VkD3apyhP( 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 z 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 literal 0 HcmV?d00001 diff --git a/boards/m5stack/m5stack_cores3/doc/index.rst b/boards/m5stack/m5stack_cores3/doc/index.rst new file mode 100644 index 00000000000..f1b1290d16c --- /dev/null +++ b/boards/m5stack/m5stack_cores3/doc/index.rst @@ -0,0 +1,117 @@ +.. _m5stack_cores3: + +M5Stack CoreS3 +############## + +Overview +******** + +M5Stack CoreS3 is an ESP32-based development board from M5Stack. It is the third generation of the M5Stack Core series. + +M5Stack CoreS3 features consist of: + +- ESP32-S3 chip (dual-core Xtensa LX7 processor @240MHz, WIFI, OTG and CDC functions) +- PSRAM 8MB +- Flash 16MB +- LCD ISP 2", 320x240 pixel ILI9342C +- Capacitive multi touch FT6336U +- Camera 30W pixel GC0308 +- Speaker 1W AW88298 +- Dual Microphones ES7210 Audio decoder +- RTC BM8563 +- USB-C +- SD-Card slot +- Geomagnetic sensor BMM150 +- Proximity sensor LTR-553ALS-WA +- 6-Axis IMU BMI270 +- PMIC AXP2101 +- Battery 500mAh 3.7 V + +.. figure:: img/m5stack_cores3.webp + :align: center + :alt: M5Stack-CoreS3 + :width: 400 px + + M5Stack CoreS3 module + +Start Application Development +***************************** + +Before powering up your M5Stack CoreS3, please make sure that the board is in good +condition with no obvious signs of damage. + +System requirements +=================== + +Prerequisites +------------- + +Espressif HAL requires WiFi and Bluetooth binary blobs in order work. Run the command +below to retrieve those files. + +.. code-block:: console + + west blobs fetch hal_espressif + +.. note:: + + It is recommended running the command above after :file:`west update`. + +Building & Flashing +------------------- + +Build and flash applications as usual (see :ref:`build_an_application` and +:ref:`application_run` for more details). + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: m5stack_cores3/esp32s3/procpu + :goals: build + +The usual ``flash`` target will work with the ``m5stack_cores3/esp32s3/procpu`` board +configuration. Here is an example for the :zephyr:code-sample:`hello_world` +application. + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: m5stack_cores3/esp32s3/procpu + :goals: flash + +The baud rate of 921600bps is set by default. If experiencing issues when flashing, +try using different values by using ``--esp-baud-rate `` option during +``west flash`` (e.g. ``west flash --esp-baud-rate 115200``). + +You can also open the serial monitor using the following command: + +.. code-block:: shell + + west espressif monitor + +After the board has automatically reset and booted, you should see the following +message in the monitor: + +.. code-block:: console + + *** Booting Zephyr OS build vx.x.x-xxx-gxxxxxxxxxxxx *** + Hello World! m5stack_cores3/esp32s3/procpu + + +Debugging +--------- + +ESP32-S3 support on OpenOCD is available upstream as of version 0.12.0. +Download and install OpenOCD from `OpenOCD`_. + +ESP32-S3 has a built-in JTAG circuitry and can be debugged without any additional chip. Only an USB cable connected to the D+/D- pins is necessary. + +Further documentation can be obtained from the SoC vendor in `JTAG debugging for ESP32-S3`_. + +.. _`OpenOCD`: https://github.com/openocd-org/openocd +.. _`JTAG debugging for ESP32-S3`: https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/api-guides/jtag-debugging/ + + +Related Documents +***************** + +- `M5Stack CoreS3 official docs `_ +- `M5Stack CoreS3 schematic `_ (PDF) diff --git a/boards/m5stack/m5stack_cores3/m5stack_cores3-pinctrl.dtsi b/boards/m5stack/m5stack_cores3/m5stack_cores3-pinctrl.dtsi new file mode 100644 index 00000000000..a759fbc3c77 --- /dev/null +++ b/boards/m5stack/m5stack_cores3/m5stack_cores3-pinctrl.dtsi @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2024 Zhang Xingtao + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include + +&pinctrl { + uart0_default: uart0_default { + group1 { + pinmux = ; + output-high; + }; + group2 { + pinmux = ; + bias-pull-up; + }; + }; + + spim2_default: spim2_default { + group1 { + pinmux = , + ; + }; + group2 { + pinmux = ; + output-low; + }; + }; + + i2c0_default: i2c0_default { + group1 { + pinmux = , + ; + bias-pull-up; + drive-open-drain; + output-high; + }; + }; +}; diff --git a/boards/m5stack/m5stack_cores3/m5stack_cores3_appcpu.dts b/boards/m5stack/m5stack_cores3/m5stack_cores3_appcpu.dts new file mode 100644 index 00000000000..02b85a69342 --- /dev/null +++ b/boards/m5stack/m5stack_cores3/m5stack_cores3_appcpu.dts @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2023 Espressif Systems (Shanghai) Co., Ltd. + * + * SPDX-License-Identifier: Apache-2.0 + */ +/dts-v1/; + +#include + +/ { + model = "M5Stack CoreS3 APPCPU"; + compatible = "espressif,esp32s3"; + + chosen { + zephyr,sram = &sram0; + zephyr,ipc_shm = &shm0; + zephyr,ipc = &ipm0; + }; +}; + +&ipm0 { + status = "okay"; +}; + +&trng0 { + status = "okay"; +}; + +&flash0 { + status = "okay"; + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + /* Reserve 60kB for the bootloader */ + boot_partition: partition@1000 { + label = "mcuboot"; + reg = <0x00001000 0x0000F000>; + read-only; + }; + + /* Reserve 1024kB for the application in slot 0 */ + slot0_partition: partition@10000 { + label = "image-0"; + reg = <0x00010000 0x00100000>; + }; + + /* Reserve 1024kB for the application in slot 1 */ + slot1_partition: partition@110000 { + label = "image-1"; + reg = <0x00110000 0x00100000>; + }; + + /* Reserve 256kB for the scratch partition */ + scratch_partition: partition@210000 { + label = "image-scratch"; + reg = <0x00210000 0x00040000>; + }; + + storage_partition: partition@250000 { + label = "storage"; + reg = <0x00250000 0x00006000>; + }; + }; +}; diff --git a/boards/m5stack/m5stack_cores3/m5stack_cores3_appcpu.yaml b/boards/m5stack/m5stack_cores3/m5stack_cores3_appcpu.yaml new file mode 100644 index 00000000000..19e6b770c68 --- /dev/null +++ b/boards/m5stack/m5stack_cores3/m5stack_cores3_appcpu.yaml @@ -0,0 +1,27 @@ +identifier: m5stack_cores3/esp32s3/appcpu +name: M5Stack CoreS3 APPCPU +type: mcu +arch: xtensa +toolchain: + - zephyr +supported: + - uart +testing: + ignore_tags: + - net + - bluetooth + - flash + - cpp + - posix + - watchdog + - logging + - kernel + - pm + - gpio + - crypto + - eeprom + - heap + - cmsis_rtos + - jwt + - zdsp +vendor: m5stack diff --git a/boards/m5stack/m5stack_cores3/m5stack_cores3_appcpu_defconfig b/boards/m5stack/m5stack_cores3/m5stack_cores3_appcpu_defconfig new file mode 100644 index 00000000000..9abf2ff0430 --- /dev/null +++ b/boards/m5stack/m5stack_cores3/m5stack_cores3_appcpu_defconfig @@ -0,0 +1,4 @@ +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_MAIN_STACK_SIZE=2048 +CONFIG_CLOCK_CONTROL=y diff --git a/boards/m5stack/m5stack_cores3/m5stack_cores3_procpu.dts b/boards/m5stack/m5stack_cores3/m5stack_cores3_procpu.dts new file mode 100644 index 00000000000..9ac36cb8a86 --- /dev/null +++ b/boards/m5stack/m5stack_cores3/m5stack_cores3_procpu.dts @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2024 Zhang Xingtao + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; + +#include +#include "m5stack_cores3-pinctrl.dtsi" + +/ { + model = "M5Stack CoreS3 PROCPU"; + compatible = "m5stack,cores3"; + + chosen { + zephyr,sram = &sram0; + zephyr,console = &usb_serial; + zephyr,shell-uart = &usb_serial; + zephyr,flash = &flash0; + zephyr,code-partition = &slot0_partition; + zephyr,bt-hci = &esp32_bt_hci; + }; + + aliases { + i2c-0 = &i2c0; + watchdog0 = &wdt0; + accel0 = &bmi270; + magn0 = &bmm150; + }; +}; + +&usb_serial { + status = "okay"; +}; + +&uart0 { + status = "okay"; + current-speed = <115200>; + pinctrl-0 = <&uart0_default>; + pinctrl-names = "default"; +}; + +&i2c0 { + status = "okay"; + clock-frequency = ; + pinctrl-0 = <&i2c0_default>; + pinctrl-names = "default"; + + bmi270: bmi270@69 { + compatible = "bosch,bmi270"; + reg = <0x69>; + }; + + bmm150: bmm150@10 { + compatible = "bosch,bmm150"; + status = "okay"; + reg = <0x10>; + }; +}; + +&spi2 { + #address-cells = <1>; + #size-cells = <0>; + status = "okay"; + pinctrl-0 = <&spim2_default>; + pinctrl-names = "default"; +}; + +&wdt0 { + status = "okay"; +}; + +&psram0 { + reg = <0x3c000000 DT_SIZE_M(8)>; + status = "okay"; +}; + +&flash0 { + status = "okay"; + reg = <0x0 DT_SIZE_M(16)>; + + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + boot_partition: partition@0 { + label = "mcuboot"; + reg = <0x00000000 0x0000F000>; + read-only; + }; + + slot0_partition: partition@10000 { + label = "image-0"; + reg = <0x00010000 0x00100000>; + }; + + slot1_partition: partition@110000 { + label = "image-1"; + reg = <0x00110000 0x00100000>; + }; + + scratch_partition: partition@210000 { + label = "image-scratch"; + reg = <0x00210000 0x00040000>; + }; + + storage_partition: partition@250000 { + label = "storage"; + reg = <0x00250000 0x00006000>; + }; + }; +}; + +&esp32_bt_hci { + status = "okay"; +}; diff --git a/boards/m5stack/m5stack_cores3/m5stack_cores3_procpu.yaml b/boards/m5stack/m5stack_cores3/m5stack_cores3_procpu.yaml new file mode 100644 index 00000000000..e0e1f9c32cb --- /dev/null +++ b/boards/m5stack/m5stack_cores3/m5stack_cores3_procpu.yaml @@ -0,0 +1,21 @@ +identifier: m5stack_cores3/esp32s3/procpu +name: M5Stack CoreS3 PROCPU +type: mcu +arch: xtensa +toolchain: + - zephyr +supported: + - dma + - i2c + - spi + - uart + - watchdog +testing: + ignore_tags: + - bluetooth + - gpio + - net + - pinmux + - pwm + - regulator +vendor: m5stack diff --git a/boards/m5stack/m5stack_cores3/m5stack_cores3_procpu_defconfig b/boards/m5stack/m5stack_cores3/m5stack_cores3_procpu_defconfig new file mode 100644 index 00000000000..6539bd42e59 --- /dev/null +++ b/boards/m5stack/m5stack_cores3/m5stack_cores3_procpu_defconfig @@ -0,0 +1,7 @@ +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_MAIN_STACK_SIZE=2048 +CONFIG_CONSOLE=y +CONFIG_SERIAL=y +CONFIG_UART_CONSOLE=y +CONFIG_GPIO=y diff --git a/boards/m5stack/m5stack_cores3/support/openocd.cfg b/boards/m5stack/m5stack_cores3/support/openocd.cfg new file mode 100644 index 00000000000..2f740b4a36a --- /dev/null +++ b/boards/m5stack/m5stack_cores3/support/openocd.cfg @@ -0,0 +1,7 @@ +set ESP_RTOS none +set ESP32_ONLYCPU 1 + +# Source the JTAG interface configuration file +source [find interface/esp_usb_jtag.cfg] +# Source the ESP32-S3 configuration file +source [find target/esp32s3.cfg]