From 60d26f98d3d3e6fc89b1e3e166bdb40593526130 Mon Sep 17 00:00:00 2001 From: Liz Date: Mon, 14 Oct 2024 14:32:19 -0400 Subject: [PATCH] code for ch32v203 eink calendar clock Arduino code for the CH32V203 QT Py eInk calendar clock --- CH32V203_eInk_Calendar_Clock/.none.test.only | 0 .../CH32V203-eInk-Calendar-Clock.bin | Bin 0 -> 63832 bytes .../CH32V203_eInk_Calendar_Clock.ino | 100 ++++++++++++++++++ 3 files changed, 100 insertions(+) create mode 100644 CH32V203_eInk_Calendar_Clock/.none.test.only create mode 100644 CH32V203_eInk_Calendar_Clock/CH32V203-eInk-Calendar-Clock.bin create mode 100644 CH32V203_eInk_Calendar_Clock/CH32V203_eInk_Calendar_Clock.ino diff --git a/CH32V203_eInk_Calendar_Clock/.none.test.only b/CH32V203_eInk_Calendar_Clock/.none.test.only new file mode 100644 index 000000000..e69de29bb diff --git a/CH32V203_eInk_Calendar_Clock/CH32V203-eInk-Calendar-Clock.bin b/CH32V203_eInk_Calendar_Clock/CH32V203-eInk-Calendar-Clock.bin new file mode 100644 index 0000000000000000000000000000000000000000..459c7c8de1051ee809f124c023f6644b45a85ba2 GIT binary patch literal 63832 zcmb5W3s@6Z+Bkk@lF1|p5*!e8V+o96r7lHiv2`mXmLx!}(u-odwrZ!YZMR+Q#ag?y zCM1&>6afbac;(`)d|RtfjaoH?a`7&@Rn*mrMr7?}0~Ux_k^g%pU@zZ(&+qy3JcrDj z>wDhw-p+g8Gug&A34;*&|C8QFN@(H#3$!AngoOV>2Y>PN2zb7<0zdixo;Ue_za7kL zgWv0rZa}&T>EDpPgY?)2gi;~B2fBH}&aQ8~6U#q_EV74tYOs7e15?OwBz|68QD>uLGN>H*0CnUt8~o zT+cDq%D&d*${Zv@B_)fD+Yn1TQI*VzSV&bA{6ead!Y`yM3H(B;BH7Hsu27_ z$}tK(J;6c=kIv-@B@}TkZ-G-N8ISzETXQ;$*1IJ}clen65} z5s8#fBP{6&F1(dv)SBJq2k+N%jLcGBu;B9r+Ue2L zYo39pXVzv!XVj#_Q~KJ}=+qjGmdG*Uv2%>x+mSyz+YuV`uE6X5#_*;xZ-H@+z?*W? z6BCrRHsUniAT*Z8khdI4PtS_(md^K3pu1 z@D`~5YSt|vCg|V5&+nOaT6o@p`&{lVD1RT1Vtma>LmL~7gs^ewaPbkjx1es(bftex z^$hW;0P;TM9->AwyxZp0#4qO!3|%J?WX3>3Z_;ptxw|HRzEH5ZZ7^mY zuE$nOk$1j&*m<2Gk0Ka3K@fU@zJ@+RCcW6td^G+`(>|jB{oB(Sg)y)=KaswrscoJt zIU&b25)G3jdmV>&tlI%|O1(YHy@;oO>Fe^5j}Y!}s5f=Azqj&$U;62iy&duUo{T8~ zCr_>R!=NVWXASjf(hos62;Z24#(k#1h+4W&go>ek5?pd%$0mRX{b}2Snc+G4+xlD1 zA9c|94}_nG+HTq*(3t^;p`8)qiKkYHH8bOvt$i^5?|VUE2aR}D027KnO=9|!5`m5n zJiLP~9ZSIYi9_qrCVQ}U&yHEhP}B=vW5GPUzU3)9khegSf~le{8Pka|8PkwDdE5fi zSKiz6{;3TSY}!Hw)-AcNe~uz;c~-HWfz>WF2$V6<52I$$=ZlEgdB$T{k+ER?{8EJ^w+jscE(Uk_mGn9 z=_uB+&2iyhlI=&)g{zY7c2s&*(ySm@V}}&5^1ntb2=kBF83oWwyGcAwOp#e{kz~%D zK4(@89&y1z@9mUrL`aK`(8t0Yl5(qp3H0t%7`b;llIXe!YC-WqbGTGqZ4nfy2#?~2 zX9i#CFgMvGE%Q$Nxgw5Lj#U5*0exr=p7lr{GKsT}9}TrFFg8#E54_Mt2viq>wngS< zsq|vh9)o9i-yPoI`NQ2ixTPoDcgGKP!N_!{_x6enM9AU?u(6Q@A|40WdbXn-Hfq7G z1OG3`mQTcx0SvZoveL0(URm=~Hm22vD(Q>)pVO;JN8-4e|T>TI)9_F8GOp$8t=l?wTV4QolLf6G(&mHsL-ke`!$9UdpIgp!_ zJLXS$hFClI!*&^-1v3n=yQX^(yD$F=yFbRV$|5<8o7??hM3XKCXev_*E34=ug^>XS zhS!}l!+MH;nU5|r8x+#5G0-Nj8^gNp*RbN2yHIxLfIY{Uep-9#B0v_&W5|+M4Z-&2 zlfQ;d7=le#OYI?FCa-7-EvV%K3@7lM9YO2 z=CoX%srsfrYwkDMonPF85q@-%lf$QiW}|?aDf#l*3{4kMY35QIai#mv+Nuj*vs-9_ z-A1D`w5PcBKJK$e4mP3BFJG`sz}s5cg5)Q-HGzR#Afx~)F!aUcStbKlbQAE0)SqqJwPoz!vLtTf`G6x|>@)t#D7Z_>2+K`sp?C4(F(&c16XYj;-xUEh2Jys+ zwL&1bQ)SZO-^EZ1|HeniH3F3ic#a<<*MRm~T%gYG^j;LQ#v!h~8&wz{+EL~dvK~j= zjc(*NoOB6UI`R3M;R@u>5^KS{$!k!uaPZAY-g1sHL9WEpwdEdYH_1CLkxtJXuy1Ul zQmNxug4X0Fua;`T5>1F*m9dUUH9f0jvu|eFRDE8u{K0Wqj`X-#k*J? zUrR64CO+PSxOH2l+?~mk9dp9s#o0$xs}UdI zUEKD_P#=l>Rt;D5KgiQQxsOU+;G|NQxS)K(|0@4}^3PQ2JFbYRY8$m`j3*+B&?(H+ zs!`rjmRd!?fBZ{thVkpY!f`7Ll&RIH8A+0Fc_!s9BI(7|tq3hMm0UIjIBjB_W= ziL&dlgneQXXx0@$t2nZiTq!* zaNy|!)jZfX>o2m|oijndo!)QKEuZC87bL+uSXig`nH$_WL@K8!LeV@W^`g!vm=C&x z8(mNi7S^MC#=Kjdn_%YxWTAqMSZ{7<4ly6?2w`kv5xb^CDQRvEVWi=Rk&Q>pTeO^c zU3!PHjY3sxnw7X8Hors3$kbAk?hScTlehDWwG5?}a!8@9(F?Rv3OKmiI$Y9}0h&dv z=KsRV+$1B@kSy&cC(Ed@j7&Bn;R2;+1Ms_yVwJn0Tpuk^1t1+l5w=zsn{^jEVmFy^ zS)i0^X#HAHT8QqBl?~lZDh$Osc32n5KIA5=g1eyY;>;?7pujFFj7qDLc1b@oR0Usy zUGg=uO17J<8dgEFO1G3H35sRTNLguxw2HbWWo2DbHo`5fQe2Y?umWswA?&0JN%$pM zLQAoVNfaB z`-@U-2&MOzw=n%#A?^*fWFEJjS=OJ0?YqI+a&i1(FKQW?-I?$BZT`$6FN%+X@k%fx zbNmnw_d)-`g|YUX_8LoqWz-3Y?j-`+%R-Lgr)bcD&}x)ob#86 z$6+cfP62$Z>|6TeyC**atyDLai~cs|a>k_@7oI;q`)79p5C%fe z&lE^au&`2Y6eOK1wAss2lbZx7A{hk=6ck9V$jHmk{@poDi5SUGE11B}r9vPY&IF<0 z+To2zvT`^wHxEY~As;SSX{pfL8_e}ym2)?4%Q>A~DwNoWYgX>0OvdXISB4YZ9SNOO z!d>qe#--f|sI_%ymwhUX1fIOG9Wld)8+VqxSIQR1h=erYmJ|hD?>Jn!z$Nt3!?}$y zlKxeS8MvQskt9uygyr%;u3)NU9nE}nN5ac$7u`Xg5#QeDO7s$DC4I;9QD7e>`wX`Z z=88**L#u*j9CZr4wqQ^3wtAb_yT0AjfDnP+@;GaDM~) z`6OctN36U(l(E^Q0rZsOKsTmLli^2~_xk1^h>*|0DoWRbMPved!dUR=+bCTh4SKvY z&Pgj^f9X&s*MXO!9M(>mTrbdS$y|#-TZmkKoIV-qEuILa#8#S}*sTOQP_hqoD|tiO z5jMCRe^3Vex~fW_xg&a-_~?B19fgUnF(Fl*OEqB=6|~geWuidSBp%f+sR~yWCBfcBNb?J zANau)3ga&&sV~@XIJ<#Qh$8)$VG0oIPOGwIM^zE;1De;#t;L4!km*c1Behv+N$8IV){DPZL*jJtvT<}D`k z?mEV9G7A7F-b=??4i{ZcGd1TpSo;>z56unIJYIn*p<%ql{sZ{IWaSdO4thrgpTzJ$ zUrtkMyNgdf=fYShJTA7P+R19ig{)0~Ds?|piARg9#Vrw8tn(t}vgNa~+fu&7^^3ob zv(@m74DduXLYvDoDP198IdWH$bqbGH!nKQac&4x!_-ng3KIj&4X1^{6C`|yRYb&m? zdAlD%Lg$S)lJ6sR{FM~^zft_}y*{rBAk}%*NKNQIj~(SEbYT-={#&4Zg=D+isfm`T0;2X+^VCBjwop*l0bY3@^GJ@YT^Utsj%FH=e zoC;mLGso!k4Ma+|+dhqOOSU(EI>&9^POnfkP6GT*1zUs9!7H(19r)qQl82=T_Ao(m zDP`DcnBos}d(O&iZ<<(#{06&&QB!F}!J&f<}QwdK*W6KxshpGbZ zAgHx8LNj;f(blv-n0G<{I46O(z$7m2FFaUai3SpigjHEbFvi)>^hBEtOpCUc}fs2DlHv z&bRsorpdH9UZrtGtR;q5Ookm#TcjD}7q)bM*X#ThAdgJm>yP$VWB4a4+KE(LKYIZ1 zHF-%NBZU?g3&~itUo!RvBDxIxYD)DxZ(gYdOWxc#0bv|;zW(Mp!D5N2EZPSAhNQSo z`BKnEP_8&yZH=+wS}lKhrHd@kIRQ7XzX=jN--mlol=39_x#$K0kC9yTzh{E!Q2qB< zJN`8;1dSx&y0@bk{7ObzBh`3Qz;AYlBLv)g9=2lFJr z|GlJ{0F9vil2uc1&P5?=6=NYRM2D7wIg%kQ6Dl!F|>w^E1FcUQXej=m%5F~ zMXGqNxI^mssN{Y`Jos26eB_+?&kSHylI9HX56}}3LqCb^dWF80dQqhA%v7pzzx2G= zUc^JE>lEgN(`{h}&!&#Mq6}9qPA1yP0#oW0=Tqt`82gtI7r4j*H>}#DmnBbwj}~_6 z%=;1v+rIytJ8)!rOQ2#^O{UUE)$zy`c3Q<612>`CR^&6|iL z7fDS9(+)wVCb_^?nIMZNJrS+g6TGrR7KCv^f}I5R6pi?1%-@8rlCEv2^x!7ZG^6B)f6#pCfEIKNVB=QHSn_zJ~gD= zlqxww0j(*?xKfEB0s)VZf}$?4*8Z3z&Yq{&TdQ*uhfN{avBL;Vc>;I@7~2GN*73Zf z9%QC63{x|ay1QIrcoX|%!AEX3EQ9mtpP^Ui2Rzi2;jH6MmBcUs6&e1)mR6O8Ie$C@I?6TJ(a+~%($Ws@D|hs zCMu4SGs+|}b~Ni!XmlkHlsUW_vEvTN*3SG3LoH&hGs?`f(@`b1 z%+$tVZm5SyPgzH=Dq(`5KOFllJg@nBr!LB+8QNgQKGYl=Z{SlsLeE_R#;uiIBqsvp zf26LYuH=0Z&z$EGKAo?mcgyycUChVxPquO0y&zGLbQ-NS7dP^Hcqf;KPoo9vD8w4~ zBdwWF#gIMP5>qUUqzHFT;Z3sO$33U4V8JQO|c16Nbjj;AfP)T?2gZPfs9qU4&H`|9&A@o}Pl@e-G6f z1N-0^B`+O<+~VS!L%E}5Kf;VW)}DJJ%%wdyCPojHW$-m+ta(53cCI)%=8*S#_DZmi zzOA-Atd5B1&>oUo(~cyD8-ZrSH-VhoNpe;viM?>3AHCp&-SYbqhIBjkR_8qL7m~KXb`MHTUzDA?s%Z zE>pji-7?URpXM*R;_{vyxXVZziE0aIH?;V#gEmCV)t^_3b`;_kUS#Z+k;nLG(K-O% z-;!9%>UeA!WQdl5df|dTvfvh22J>G#18@!WfE2w0(qy!#v+sCYT<5Tk9@NlsQF@}5 z1w-#p79h$mR4_lgWnQ2%c{W>9t~+Mq!{psE7i~k*5~Ck)bH}1o%h4# zNuUvc7e!sH@&(+Rbn<&+lmI?LAzVth&2dGrW~x@ieb5Ws{?d*J^#Mmc?KV#-YIhdu zL4S{EmA@DdeQdfZ`#_C#*iG3-@l!hltM*Q5!k5v)D(#(F`OkTtP}k(fu40YfBS|{g z$?3(@Yc1mmtkt8-sOi)WGe{z)bt&S;*d$fPpFv(J5U&vW`ho{_KR#zdL(g;7+z)+l zPOrTK)awCh(URg}O+TYsPS4GC_sxb;$W!L%KL+PhFjvhiu)hkOWWhDj@8vxUyL>yw z(NpTZ7S8CDf>lxGl=*wRdi}{C{W#5>G3nN4M?{@)BQPFlLfNJRo!}0P$2tMOtJA}F zVBJ=27quJMN}%0P=e+->Z~VQlxFG7pmVpbRwc!c@OUw=OaD4eC7n@I$5Ge!iN<-*8 zh%X}Tx?0(JO=v3%JR&hPOK{zg4#lD{+FzThFFWNuyZP*e@ng)Rn$3+JB*0|IZgKt7 z+~_0E;q!vCt`_HbQH!sx1|98A$oo3&F>mM09f}|AF!s{L*vJ3sK{i-Q0=M1)`aZ3i z8=ATi%O^G0-HPd7ZPs;@m>(Iddj#gG@+TMclLcph15%D+ct3sQy+^bmm2_0jnS4we zv398ek7Y_PYp!kWCWSJZ5H2bRRa)A^73SBdSMuOg;d$j;JVv6eLBn--U>T;aos}dJ zV2s2MlO)x}7|!4l?#~p+5!a96xo79R|A6PPC9=`1yFrFsV?znF(Jz6`e!h&{$ADB4?SuqxOJpg~?0#6Ey}!5QF%m$gHP{-Ka37o@;4gggcBPrduaajlAB^bg$9_Lyc^~-pT;YV+t$eloo+#P%Zjy7`vqJ(qQyMH zg63!>>D^c#kaJpCnUrMZ-;iwVV-j|vlw>}>7|hT><)Pof{@a}ZTz9gXS2RL@omcl3 zI=OsB3^ykIas0lyF3iPQ73AEp8_mTYSQU^JlL=l299Nh#0~3<;M&Ja02^eV>ZpMW?i;~{DM+x`+vc6%RFv9mXpoq^F!D~tjy?mY=nLRH z<0U`h`f^-$abWfnX^-LF1*#i)+peDG=20q$qNL+V4)p~QGcoho(XRqP2&=J9%9 z*^zc(Na_W-{BqQ0;#Sfl1Jh>k!uetX>@kARrED(jW z{0p&vh$0{&aPlNwq04C_$;lJcYVduM(zYzI`oRxQ>jAI!mye(gx`9Qf? zK3zV8&o~d*`X4yGBmKR>NpK=VX~;>=A^iaUw`RN&o10WTqYFb1QD8;WujHli(FP}N zL?ODqe4%49N^W4cb&WW42(O1(|BVDJISJXMoqcE(#2p;Tw9d7q>pvTWxk}N6$Ybn7 zAeRHrpsK)Ya7teO$Pkv&!7mBYPc6Xge!&#`5YQ#)BTpLD2J~}NmFg*?FWC*4#+UE^ zBH|mOl16`kL<@Ku@+RDb(dt| zESGsX;5V8`{Z{R{bV-Iy0IFhEf%fT5_iLZF$lcsa6jIJj5XbO#&f}l_id!;{N>qHN z2|1~n%Y;*e7S4lfssBM4aE|33p}Gub@eiAUYuN|_jWNKvEMmi9_M-@tYQ13fuMAk1 zW6m8`&Ye5Q-?QhvzT23q=J9=p=Z^KyXrsBz`&(L%tl(x-{xkW`)BO?9+Vi3BKV-o> zd(DO$q-U-307N)N_U-dyh%>|f3gZJL8(dr^N}_o}SqN-Z<3u>5wIz4`;Aw1@^|(h4{U3 z?j*)86}@qVG4Brg;znVg1d5;dF8Jaaf`0ME^~YdO+^AnXaVS0x?*(Q#VZ29{!Fb-o zpgWUb*AgOXxDTr^>MB_ntky7j#3CD)9;Mak-N&=I=iZd!3dq_Hj$QQK&kpC^X)){wBo! zz%Cvj)sC2xG@w>Cyj@v&Km1N=UPNbT|RHH(h6GDxHb3MNw>eoIK|Jae&snos)J{3G8`*ERIMz~GC^R9RnfOkbfycxTo zZ`n5xtsq&@ZPty#ejAh-5^H%D>=Kv**wQ#>ap>m|b%8y&GKzbBFXD9DkYWvfPvCQm zwe)#S?8yC9~f^=5cbQm+5k9txe?KV()w<$Lr$22Ku7BYz?jpaUU=itk?QP%T3KRsWv1w zcc)Dsr8ROsh)gODMR7%tYn*U`>$jjpTM1aMCGh(V!u|m^>^l@=skCzMTTzXbDFUCD zk^96!N?v*k)!J`p%;N%(UctOHil~*1m((k;MZC9|^MbUOjg^2Oe7^GKXdYWe!44`P z_juGv!m+iX<)N!&D;+is7$oq zlX&i@R?vdeD6I+X+>((fk-n)p;5g@eXk6^LM1H%5c{~haV}95EyP@{A&Q`=UhC>ae z7`JVQw(ZW*>iz3|253){6FN@O}Z#VtlQr*4C?GieV;$W7g8W(5?}z;cUx@ zaY^Igq@mMwHEt|eR-lH5bD4Yl^khOCk3sx3NY?G^S~mn}Ql&Rmbq$k{r;FQmPt*Lmv|JnDsG&4f(}hn z)Kk^D%u8SwnetT#vSHPC+x`CVC z`V}{lf0cjrP%PxHXdemm^n6r3?AzQqZgV0~4+m7wgpWjH@{=5xf4EOT4%nK2OPc^6 z=Mkp00M66XiX)lz`YNw620Jq|h~2p~xAH z&XD|C8K%pUio+Ev8~r>0Pz>@=t+fN7=zu7Uk*I9V;S$k{^+OZ--FRYOp8n?h+=}0f zcdtX_iA~~|XIvqo6zFn|SyP<9c5pnP+B1h;Qg(&x;Qro?B-^zXA^b&jz+w8HEC8&YuBE#* zCG9D1wlWb%D zC>$A7zvAo33Z#}8>|;eu8t#(;=RcU=WGPa6>s(cEnhz&epnq2q!1*bc*li}uknUm> z_ObTkfDOw7+orO@a_CLKo!$Nm?&jLyRELnJW4le2lvUZ@nZ-4fYz>? zcgT;SQ;y3|_qPsVXck~##Xi-f5ZF8SiQZ=%M*=dA^n0LbyWazi=Ud7yTMzzrb_x8i zGSaA&eP_L5hgkA7wQADWrK~>!Qu3MGV!weS1ps4?N}i$8!4q=z%WAtn7kI`2d$8d# z*1&kVdQ#<354xYROuAabecTu5U*DHteG8i}&onhp*T~g54obl+>kA&D9nakH{kZLh zry*`34aZu3b{zZKM2`x1SbkiOPvcZ-(YrE|Ky!174VQDURcrP`xZMxobl9a}2wl~& zxd0*LiV%hb$jAb-;Yq}=+S&@eU_Xu6OCIzxSA+XWZjfwoTTC}p8az|z2UBck%C=ZL z&J%kHg*{HeI48c9Q$n9|gt=f9;Vy`M?H^sMbL2TO;2%!8^yY)-6&HIBF*br%vHlwu zs;XxX9gGruHrfQo@0bF;^^u!Jif*utjRQNeA`QH_Esy>SpPXdZZQhJ`_&^VtaOuI7nXG4lD_pgA3wp$!xLEmItO}Ud_A;`7C^QfC_Y>) zY1EN^KHZ!<)JGhgrI)`TEa|2NM;O92#~2S6Lj-@b4#pdg*c`B9#b+2Bp0n#B?cVy$ z)?c@uKl{J8?^!?88sHP#&f~>)Ady7*K>A+w)}OwQ=MA(Gf@wntNF^W+9`+&|G(cBy zHx1L(qd#xZ#M(uw3Q$P#oxCxFCq@t*JZJF4DA&)g5?E8vc{{vF{mym6Q{~UP{5e;* z!_MSwSlwEkQvf;xo?Yq-R&pi&b$bE=lWcvqGG zH$0mSF9PnXMBKj!xW`Y$f0P(Z1o&5E*!zW}C&_|0E8$(rF+OtgIIz*_#!_xIJ(8gs zOUuT^%f*=OmVxu0P^y!!ybdS%{j0c@tx1PY+x4Ect@q42HzD|Vx^V#R7(hfbbAAcf z%H61@L~>M5n43%%?!${y%-gh?Q0HJ|-u*dZE9^}h9ci`$Kwf7{5xJQQ0X{!s&n3ELif%ib2BSImUs&2e^12_lbq5A*me_B4czO#z)Hsn z7E2(mzXzE?3zbk1QGGOCeulz5q^vhNMZGrDDc_h^LY*qU;`A_drx{=wXYl;Z_n*Oa zTJ2w_hvlY6%(@CZx>6IXQe$dUm51z6#k1gn;PrW1B zQ#pSue!@}rK>zHr+K(nVAAyw#Dn>$9ID%MCLZzn6u!1Cv9C$AOV!o7Sk3pXss5CAdPH&rokmSfzba*4qEfm+F zR`!(^+ZRNJj?1>J!qqzgNk)Tiayd1AgcZGRG(gPWX^er1|&!i&8nE7b((koEhw8OJou~^l{cY zo7XqMU4lHbAqZ8b71B)`J!cI)Kki9X#A-(>W|XD7%*}s9dmR|hc%40^jX&@*Hpf8V zSlfkgRy!IoANztUoDi`-K)81BPa1^TJe*_q0#!o9Iba-4Z@=@eaq}Ag8hcyvdt$9e z^`2nr6vmNz?4+;!a2iTItLU5HQ{NtI^~k83PfdC(s*=94=9UZAYeO&cw#>Zkky0mc zeykOjxbeuog?&>G{lg0KwG-L}P}f7F7DB$a=cH>N4`-VpzU!EhY(PnS_J}zVzBZNm z%KAnZ#JIF(Av@ezu&=t9f6s((Z$%Lpsy~ih2L2dK<(>t;Zy!*3H$-a=Qn`nxE)UW9 z7e9EE6x0VEhtqOTDSZi3IAypP4)edXaU$lu&kS%=?ORqspmASep77|L7yLZ&j*H>- zh|`V>PE=gfV9a|0=mtL@zO&y$D9)dARXS?mHkpCsffp-WK;K&n_nUPvUT+Ub>5*{e zwggo=4mc!GXBkM=4iZ1TBR-kFyRDb#3kgi!#Kcz)UVcP^Ikpq(;JLtUB+p8E*M^zD z)B;=YpdbSnPxS6A%g37fq*J8?j@ z_fHyHV_ygE(*=9F>@sit%wlZ_#C~Me*kkSf);ld2hJu&au@K!69)Rw}-%;0y_glcv zl$B)TJiV|t6kxyq@)mav$gpFaL-D}&$QR(0tJCGB+;BqfGTY#sRmU~Jy>WnG@XWH) z+kX;HLXYAzsw}pghJ6mCEs(ZB+ChU2&TgxigYBc>JUnJK?}yBr8J{^cBfv+Vw?5kr zF&|mj&f93xhHM1-sXVh%yh{+i@~hcUGP*hR<=Fbm9KZ zv=qT!^dyZ`sf6xUYm!xfl}P3>9+c@d`cKD3r0#Vj!A>@!;bXPi{OJ}><^!z6d5I>6@cV`LB{)|<_kkqIp9peJl0L7>0x$twB6R*gM z%Y9B}_7WsmiC2V=dT7D`TKyG%1|xy})69`5YDVJ9CWzpF7$UOamhLb)NaK-+8@W#^ zIU+;chzKgj$gMj^FcITXa_PsVxF#1ahch`SmA-+vkO+y`;ty}20N@+e7*4FNr3^KW zeQ=M-L+`s!(S_@)wpzaH=;D;|PaHEVu~> zw&AGy4N(tOR+}-V@K=%;EW>GqWE(gyI zDOjWU+-L^u$7<2fu&I(;g6$LS!sTJWsdO0P#rg`vQJ1$S<=+?@wuElLn1y>6S$BZ|=c3(;BByO=Rc69PX!X zw9SUcPqcMwzBEtC6Fnb4-9$-w(}EaZ#{lz65K+5&I{}`zK&@Hm2aDu#AaUIga(oK- zS)#$anA`xkzL;RBG)xiwo455`UJ!}TERr1&>>U#~EC^zXmXDbhgilrPnQ)K1ESgt< zq>LhxpmoYQg|t#H!bb<8w;*;Lc2k{K|9KPN`)rH6Va}>X-jUe3;3iOq@)59< zTsOeh-nHWEb1m2x8e@&-!Kd4~`NVTTZS&krIN%Vz(Sqq_t?Y0~ob`touwwsk9w;Xq zjeyu;fDa^6_O7dSm~I#vR;*|o?3YHW-(AYkzB^b$EckFF1?SiDYR8iN=km{v-!xvt z?)$x{25>I)%I3rQmBwveOL3)5Qb7j1a=(}Cr~RD5>x=WN>BF*fqQ9rmQ?bbT7o^!+ z{B6azTM1p>>-$&3d@d3?SvkPcTI}L!KgXE#*PLQsKmEV^dgWKG`dpI@q{cj+Hj29~ zwGTWj-kQz3;9l@ChF%y}_2l1?@0@dR8W7+uiJK! z-nN0OQ81r*>xA$r1b3O1itx134Y(Din|IdZ{}}TU$i>gEJjhwTba^-)2}a2jq57{Q zT)ilSXAoTLZ~JBz+0an0*ms1Vmtz`UG1#N#|L)QC4a`=VcUsb{LonJH=I2v$l6at6UB_9!TiFqQ&-bt=Ew@#PB z>e#pwV1tB@COl_oIIrwl+7C0mCxsK_i_@hL;e~{v3Fu~#`CrmO@3Y_-MnJ1Gw5;Ax z>-!n~*ep2G(IrRy_%-9fADM#v=8A@B>l;eoo5D@%5r)3}1xp1PE%(#d^6#D{5X zQ~4$}(2Pc;w_YD&dg=L0@odD6x=AM5s?p*U;*tR0YbY~U1w-8SDhB-X2OMkYOO8t{ zUSrtz)#2YuRkcw2z@wWUx2)bq6Xngdtsk>0}0LH;G+TQ{$PB`MFU#L;x^2NEYK*qgyeGr znnr{7F9p2gC@6GF9Vb=Dr$@Yn&;12+mR3Rcg%Lxycl@RC$3&m`-tFANTWHgG?mxY-f*@79 zI|7!|VSr0tFnj@kZq`)O$ufVm8J4RI(8tS;SGU7zFUG4~X<&hW@QTmgAkseO)xa(? z3D$k{R(5P43fXgje?zIz`ytH!F~{&cz?itwNtm|JZsJG&8jf7BfH4m zm-dBNLx^bGSC*upkXnk{d!hiSOeZ!zWN%Lqw-f)=PjDL z8dF0~`P8q5bOvEK>cn#fN?k16l);xx1|=1qIY>5$zYwY3Rh+kb19(DxbfLF&Qn7*i zgAW~ynhdfIBO~_^Aw~o#IDL)#o0O# z+(LkR7|dG%^MSYFE-_HWg^fn08E&74{{c8@nrI8J0jpVSk|}blV#-D+uvSklV@KNI zdu-tBGZeN>GT05Z4mjsJW+0dk?%uICEc{@3XyOOCh|o;~jg#%s8o_cXu!9W|e2voW z294o8j86+sU&GQ4Tcs34G|1}uXGQ6Rk>kN52Ko)1s5(*0n!!ee1U5SDVYc7LFrK~) zm=0viu355oeR0rR^XLKWn-#$7*l616U>pX7VLad{_?m?sR>^j@n1+$_d$V_)-tVoM z>BM^#y#D~(_Fnd`{C(b<;JpI);vlY@wo-eGMY{!jVmHPOVK!HKxM-c)PXm4$;lG=- z2wN(B`GA4zlMGa9V(1N+?^IZy>~H+>yPL{!jDYt{_O6*V<8bYtu{A#Pi~sjno74+F zV5Cx@H%x04^;;J)V21&RNiXIvU(J9Ff@ck<@FD-`e*8~eJ&5lUm_G5?j~;{hRqw{F z?-VXNi{bBFy3Kh|BDakd#=^!+%ty9T+Rny#pLg z4GT)+hEv197d8s4{nYM(=#n^#5C$;^JoDjFq-a{OJ_0efLTHV?3i22lz96Ky zMr%4OJ_k9V?zJacMRh7BfLYbQs zsPJT=x5AM4dN;YzV9Lj<+>K_f#wT+VcC`C`UxG(pvYIv8fzPCJ{y3hal4UFwDW1Ds z?=}JbBJ?4~i3EDL58?#pmVZEj1rwZ)`93&rnyjAEhG?yB9!|(D$@U~T)zH_&E_$K( zC7g|_xbOj7aF<;`i&p& zn!Sq+3ze{_NX`O716m z3(o&52kysOBw-6l?pX?Sg*QI_O-b16;?v?K@D(skoeaN&-ynYR2jV;Rp!|LDU7B4! zaIf%3vw@PEj+?W1nvLv{v4M?Xojx_|lZ#j2&V{F}2jbD8yxE+!m2Px?G7IA7f8FAt z9$D33i>Ln27T(H~Zrn?(W#ehHfu{s1FE!6nO@yRf>(s|2QoPK!Dk~6s7;$P)Po`PtG%Bw$A1BQ4% zc3x*J&+#gCVe^p}A$B%|1rIpP{|9g7iti|WoZY0u(sZ7e(2Mu|II5G)BsBI6fFuvbC0FlI(kr5u zDdl^B;vztCPEhbTy2vsE?xDkXe3~l8@`gNJG+&k51#r1~gjsfRu8}>$lD=RJ+lp?L zrUp*b4?eS(C(?5qu}vbxy)`-kRwbI}=ycchgM!E3>wUbyI#)X#lPl;D$T!vb_Pn-Geuvx8oCE6np#OS=Za*)4U(x)VFwPjPoA6ScG*t!Cj1RZ@VzyUFg}yDB6Mr1^561kTj6xOylU#L_svD0QUP8_uIQ`-IDh9r6;?)?#Kvu*nr~T+M8MsTW2)==e9*$DV zlS|~4Jl*e9%E5C{ghzKf7c2m*IlYzh_NcTq);Q}1!yfR8!+iJhhPaB%MiqGbfZu9k zEor(vI`6J8_DRCVLQJSPJ~I|tehHB8e)3)TvKUyaPWT#Gst#=xPg}32*8_($j z_~c9EWp+40dNu0zH)sN^5Xb&B9s~D-vD-2(3Sij$1>pB{EFH&*y%&UIjBdW8Qs*5{ zOWmVWY2iMd1LsBd<)y0B8zC2Vk04V3@7?{O{oP{y9-zEx;A}sH3~;viv}=S)-Sy9f zuBddJ17A!U1@J#KRBzXqp?b`vzTHk2#C{~0=La;a+6lUs&&=q*x_*cmMXOJ znyTRt86CVE*{26h|3tpcVLlGtWHo;p!}Kk{nDRXrwvOPXp0$<%XyL&3nz+72luB(n zUTa$iG>2_W@aQ|qSpN#qQACPBVz`a+TSXxA746X^3DM8=)S8TCVaum)x!(K-+#cK-S!9a*o z*CsCf46Q8pL(J_SlrcszS?9dohYuto=w z-LQVYp1UbE?-{&~5^)_jit~dwG`P79YgqIFtRct02s7U;mYju>$dkMj-z97R-RiY{ zRJ-)It5>(wKPS9;Xz9@EE&N@(`Ace-PWcVaG#~uZ&iMXNJO8{RoAJDZfA&_M?!&TW zx^*$Exj?l^#c0I+i^0YM-jGJ~uY;6{+=p?I-RG_J_G&|}WbyjNa6+SoFNMs7(v-cJ zj}VFRIj~!ltRP{`;h^!(W3RU{*&DA}j(eEd1LNH`hi@gZe+BdE782(4zTzmBH|Xz; zE{4)XdgJGRoL!!O+glmjX%1gVYD2g>n&d%(FGg-19x?I@s3-Hrw=KoJdcBnXsHn*! ztA|E!2Z{9P4~4hzjzxp-iR}=-Mp6FgkCed#_sZMvS@6hg%T-PE3FJTuYw5!p7?^TUd&Kou8}JJaP-F zFpM5s+tf=EdVD)qYc_$V!afBzj%5|KkGB=*;%s6-vnF}9kabs!_p`ORdo_sxcQr!m zU2W~LEO@`GiOq|%)PVfp&Sww@>p@Epp zte>?wt~2rYB7!M{-(f#%U}vPY8xr9T7C)W)`UdKs%Qe}h=J7%3x^=@$?n;Iv+PaN@ zi%(R%sm*Z+;Sj$%w4>5;FDt-fmuUYP;j;|41@}cs@or~{E5=&M-*N&!K*S%c&k@iS z&tM%k^BB-;GrY~iZ`ns-o=qz4W$`Wl2&_+&r7l7n*ObsO z=b5DXSPSWZSSo#lrbgF45+YU}wvjmo#sQJmww=~!o-D=dayd(kI4qy}HH=sH-+HLg zMQEb+{Udh{_E0ZNu(|(td(bYV1>Tqswv}r5f(lv4rGdnyds{ zWw!0Cbq46sX#ls@a?Uw73!gXwy&iz^_o=iJ*wvaxHX_LmT1x15+Dtlee*3+ZGxr>} zW1B24_cGX$2jD9T*fN`8+h)D|LWcD$SS9$KvECiXD7pN?G#M_zxmx(160UdNy5U## z1ipLVZ1IK{>M2~30lPMTdp|}1p55Yld@;qMgf`E2z(|duQjgbT zggyuC`Dhzix~%RcAO!$W5re_0YbzZYE-bb728@bGh#S{3YPH8fRhJ4(DDs6hUApMcuVeDnR!^FPm@(e%0{9UykWI(k}?;cUH`0QOkw%@Y{*zh zsFvrFD!PAGWlLaE&)CZY(JG*QE&^i;Tk0{2XgeaG7W1dYtIfkx?+D06SH_{xroTFw-}p`A*JjV&a4QQd zuqAJR9zHU10gE-(qL~4yht-QZRqEd@Pj?3^I<5X)eZKRzKX{d% z#^}D+>CyXbV)TBc5;bZM*gqXVrOLmY5%*`)6E=#R&X#(F8U2lIs8Lw(gPdx|qpP|j zj(@Ox<4W*W~}6J-)d07XAMl@WE#H8x{qCJ44E=2`wiV8}_s`hBH+-Hrup#*&EMX0-Z6fxX^*ql~cv3Om0X+ZH zBBneofkIVf>yZ2>h_ud&v5`+6bZCCNvCh(xI&dSOxcAf&&Q-I6Imy5b zL8%N9KA1&xK{7zf8c$+3q($;x{DJZhKPog2%Me!1iexiZ5#fhfkwxQn5#h=gkyX}N z239vt)Cy8GZXdIX8*DEcuOmgH^n@LsL5jE+2+ImYSfP{@WmuW2Rc&~dNQ$uV|KW#4 zYLwve*9^_EXxw^+9e0xGSDj>wF3HH-AL>@u!^O(TM{bC(;=Yg+y&@xec9!I>xH@V7 zkYntZl<9hIl4Q8u9?mi~g=)KuQNO^ZSE;($#bG-)uwkMMQ%RS$Tci%*>@Jk9kzvbu zB208+4{#1Cih$Pnvktg_PKwIudn4SNh+cVvjfqeFP#09sKyIbH7cZ;$u6@9TZI=AW zk=8oJQ&Hnsl%mR7$Feapa%;WtQk957#YpyR8Ck`>w|><}EK0sHi~W$oUnMCDlaax8 z#mL3#Rot!hY>b?Ag$Wb?h*+-?wgM1L{2UMf8iZpb0qNHqqx_gH2aYzt_5#jZe5`q@ zhr&=hqNcmGmk)(}oLbtv08+hJ8Px?{Af3gXR^4i(K4s^!!Nnt%9V)FaHrf7E(pl1J z(*?<)?-*wny&F&1<;}Rk0urzM7A9H#CjuSo1UhXzmoMF`E{dpO*a!!HpOyE5u0OZ zCAsF+;?Q_i8({~kPol@vc&u;?Pp{+jmtsr@;w9J8%L} zF!f`P7!U&^wJKXF@Ha}j^y75Qr)XU5E=X>n4AXb+EFBCu_Af(>{C;c^ZU?B6mKucH z<>ZUvDt@Eke2MVZ9h~V)D5>I>(UX2y{bK48)*Y=DxzG;aYuo~d|M{=A&hbJD6+>SBL>gp|} z#_Qml-VZTrf(lLCBH-UfS0-YE{8%oOp>GqyCepD zTS9XhT*4VQJxkYOumZE%yZ&OPb?nAkXs(rS%1nZU9`<5F^b?`y;Y$wO>m2rh^$+GU z>fiJsyGoPp6PJ4N9TnXZs7f-EzAHY0Oy#}%MJN2o>{82^uHOlgK!5g$Wu)kdV`M~A z>NjkHKU0)2hEXeULNDn!8IDuTHfUrrr&_Xc-Y}_{)pNz{7wfV19X)FDnaM+qLoW`$ zWWg#SI{>K+I7UV_Wq&hs>aD4xUO4lDa6=s?tjj0D8*JF9sb{8s_sW~o^=wnRKJ_)6 zJiC@2y;Lu&Pfx9=O76hE+9BJhsr4JqOdWMG`;z;I{r52vCGIQR?r$1kZ*NoytNC!& z`ZV*>3L#)Vqwjo*(WjUhft$;GXKjsjzROyDH4yvm&&qT<^~}RE1<*2m`EO-<6=ix= zEK_2jWb#^CrnAG(|Ex@>v(Lm&-8)tC!rB*vYw7^8Os}#5lBsK_e)P)F|5_#q%CvUs zsI%GUA1@PY&13|>`3$r(F7&IbdgDdLe*eCTmcf!Wb2-ZM$08d-6fa zTqd5+aYy)lZ}sbcaOMlQUO4oMUN+b8{B(Wlaq!s%20dGgQ)=fK{qQ5;8g3?g!=!!j zFYJAx5aE7r2tl|n|Cex<>WBE7^E3P%Nj>%ufBz><#4a3_eI^_DJ3jp6&+vC7``FB! zTREdL&SVJJ)x3zm*I9m4&Y7I=#=SZIztThwXd-9S@$8d7$KTV8Ae+xrwLJwKx_;-w zTx+ZWZ<&l+GXFYoD7cl}kG;6fIyf`qR>q-mBF4u5?-+a0fwQ;tAG7Jh34p|-WaIowiyb|O9qBNHOMA(G?LKKUu>}QOXHXP znd%WQG`}-2<|*OrcA^=5pnR#$=O%v++I#(>jdg9=*`g=1{B^;c1o}oX!p&R#**V(t zsJ<>TW??<&xNT7Jp4tSe8^&Oj3P;POF+&7zIiY=(aOV!OONk_B?5BXaa)jTBoa3_H z!xN{Ct*~)f`^zgnPECZA)$XY6Or@{<$U}l2N=17U$}3w>GFex^`^%2e+~~T_jxT+A z?Oi8)NAucMDs+`YKJ=HlIrUr(%`G)CXY3gCN07KnbOod)9xG4X4Gos7KRd!ywt1M* z=c=i6i7($o`Qop-92%+#cCD&zr!_EJEN?xPC#BlT#g!zfrsm)r%mn3_144%fKdfmA z?IH4OHcd%EpKLXja5_nw5)U*QD07`l43URAbE}*SO?q|Jt6hmQv1$;m?wolv?B)9<%N}+2lAXTkW(&ZTVqcz zp<#4=q(rCb$Be1p=!RQf(G!_|bFo@iEEm@zR+k-^`dl!|bjlGj#F90_+PYd*f&3uR z4$SUnjs4|T;~J{tM>5zpe8`07o_uN$B-pKzt-6)ey=5D*+tLenmKPQCSY5&z`vYAt zc0(o5+R}DMmAAU=Z-9DtQ6^0%J(w9Se0WEO`7mTVX^joXO6%p;p+=ncg+8rkYITxz z5?$ca3{7LD(f%h$G@}PwnQ8a;sJcQSlc^F`PQ?C(ef`sxrSgP zlVxwrA_tcXueXyVNFj@w{({khG7gqnjaBO%gzof1k4}uxmx~;bndDDmfBP(Y_VKhw z&h=mOtlED}FgMn5hq(HWelqi6dRHEhW&9a2ovN^Z_M}4kR%Bkxr2XRvXX>Gf9O!h; zw);hpsslfeFW#%-USzA1o z1$UENggEbrY}B|j<0y~+ZxD|H#ONQ;J3J2Y;y&)a0oMj(Vx*LWdJIZ@lbZqBwbAlR z##NR0rLP^Quew00mPV)ROX``brLP(E$>+)4ioGS-6?F&2o<$6I=D&pdE4bBo3q66@ z6=vTThT9n1BsylF{9~q0u9KXT(={aBARpD~0y#3EMmHEXtS9Lt95@`>_l2VDi4yEm zOPXf|&$e5+HxjIWg>IsL^3qnve7d*S|5Ac=pw9PR*Op+tJ}}Qby|cCO^1Z<&7VLk6 zcH8sJX%AWpt2@;6?lVu?-(bHFd%L=r$@B3sv>rd)$L2}fLpcR{p51w7Z@b{fg|`-N zzK!|9b0go_Rczv|KLUz2nbghdW}YRbT=_1r-ur#o}ypE;x_x%?bI}9=9hk#+FPw4bI4F&g%X$!-^Yke3D#dA*x-B zYe3w}r)XUIMxLT^MYjRaP|DJ{u{7?k8CE&&*rAYl{OG+qWBi~c+D~qn0jVSYjU49z zn=r3jlJtZOk~REx*xo58Nk$d5^~27nP!74c8FMs;b>UL#_Qsky!mH(E&z!D^C7%F3 zLn?Fxe!}S@!MCC@0&IOHZt4VUHl)@}uWYeTnF0>UOZ6MBqU|O@Zl6kC1x>V1nJl_5 zFS3KOj!Z&Slik;m6XH-nIIzd^X2$5;c&^JarWQBdGs3Rwmow2bnM8Sz<38 zC=c|7A&CV;PJG~W_>mxcsh|As|3dgAhmhZz5=j}YR_BbdPw@x886erbi$m2~v#HDFZm;?V~ z@Nal5bwD%0o^A+PThxuFIzOmm0eji!V)D95Pe4}Nvirf#gIJrV66 zHn*X@9F|iEU!zhj?%aEw)cmMiw_+PkFc)*a)89J99qA+owbM1IX=il`sdU;zVX}v4 z9#8EKP7V~N{bQ#{2T6W1)ZK)>JD1U0WYm76<)zOGvoe`+);x2;KdboV*fl<4;G}fM zg|bgSVmM|+_!;xMV2h%4AYA`5Sqj)pGiIDi0JPOV(*Lv@7pm8fei=Cx?8BPfvc0AI zq4Vf;_#lzqlKd%6B~Ir2DZOB4lO#@ytD!S|F5Bl9^pcB;)GriRJD6Kd2Y`}le zWa}8UzrU2mT>rg@@fVmZhSE=vp6j3P&j0g$N;7GDkRNVhg-h4Y`&|xU{Y1<~5dV2! zsuQL}A=R!>s~<4_{2}SbWjnfS%=0O|D8yKc|J>=LmI=?{?D~a5^H@C4++f9-GIK@7 zyfBWhs738GzXgr`7`MQUx=7J2|*M z@I+)fZtbd_n!b2a@R!)L>C;Fmuvg2AX9u~gTLx|h&Y(fMFZAOIBWk*#DPwU&Q|-47 zE_*JxX3(6Q)eGmvpG`P3?&R~wCm)lYA9MPpBhak0Y$!A;K-NM6*-r_T!zjYpt`FS8 z`C^H1=6gxh3VVA3q5hVJC^t;jx{MiZ{V~3D$abr=rkYz(=U_5#LMY&QjB_!@Y#VA^ z9OWJz>y0lJUXT)Iv|idTUHI~Q$+2SW1f-uYFS7DvOEY{kVmUEHrk-0z_D+bOxOSrC z#ap9ijyW@C)U#PAO_j9Vkgy#4@a*%}#eG1_t?uZ6?u3mmS3}>lr}~Cfy4XSUML&Oi zaa30I%kw@x^!&w=`i~ADbB?<-`5WxPF8iRF_Nt8W4E8;qly_oWak+KBAt7@^rfl@B z7iYe7=A{|PX;A6#;`(K4j_ojFO)UcJf9J5e!|gV3nIBWBIsT?(YqpwutyAA#ClS8B zN(PmqZ)86%!(D-;?OuH&Tp!d){f__rhw68EK@J1rT5Q{KSG_d|0qnqM%6tgJ;( zEu*CwV->U=*umfY9a<7UhQi+^#SWi+dPMwKP~yV?1yfu zF{Q-|EhirDCB)<|h?>UeI^{F-UOJuhfROl$3Ezxq8h8Hrvy;!fa&qQz*`?XXuv&V|`bd9k3!mSB2Ct?Tn#WNH4z8L?~+Lt81 zyY=kMv1i7{0Yk#l`QW-JPoq`J`F-Um;<0z4h{FAK3mELzOQ_%Gb5`l>(i4tzje>0o zCmgwt5d<_s7Pmm(K37RgAuMZw8)3y;78TI4W{j(}!^9e%O+f?}v1)#l*rAbM2xyed z#toHQvxaS_Ar@ED|24+uYP$^S_%+fq#H?G}*hx=W4XLy$tVW!ZY%vn6qS=8xFqZQh zzJbLFV4O(lQn%ezx$kc6hBSy|W3~_jU7mgxq)q)%lU?F@(zdOV;mgDrT%}B49R5Ph z6^Wg5N`(Liv?`co0&&PKSx;3~mC)1=Y`~pRoPmeFebj0t4;|VvHRqIJB{Fmy(qH3C zorBg0d5}!Vyh30~)tpHt7_K1X1eq{t8}0!zNrmTVJ`<$E%Z?C~UFr^M{4vsCS7efp zWek~GLf2{MlJrWJgQm7Dci5Htetwf2oZoujB2nfJXzUc~uR_k$%n59xWaU1%@&eN+ z6^>j5EA?W$GlGLS)aj&f=dn9f|n7|8!-iTo4 zU#|8+@QpRN_JH+y+ZQFYhPD5EYWw<{pU1}eS=)~6)9EYH#So1<*VR=~*v~AbvPT26 z6$a{FP``8C?BWYm8;|}xHq9G&>Dga7EdK%4E!m?V3l*2Wu-ca< zEzM9Hh2+rEan{tO`vDjF`jZD8&&(ToHual9^@%}U&|D`wIsE*HCc5q^Ih1;s>W4`? ze#=0qoT>c(?_0jctF>FUR7Py^YSqk^cOx*TQFB{gFSo+oy7j)g#8N2SuOmfRRnb*W zBI4cbKh||ao)H`2G|a3gga!NPoC$vJKkV!78uiv{$v;=(f0WrSG0Weolq8lHdcF3- zQTOcM4JB`_em*e*+Dg=1mJ9Q~>39T;9s|nbF`FtZJoDD-kf-0m_yBi$+}I{|!1HE+!)SIfG(ui~DRN{a2muJ5mX{@NF zr-&C%(Ur8|M2)VJo-0QA%F!D<$TO=ps%_~OO@Zt%ioi&y$IXHi~EeRVtOTH~fHbvw>JbhHzu z0juz@T_Z{8`9pt)brRM5vgdxXX6uT-DoKjKt*~KN$a`_air(9@Dh?WcusRf(jv4H@ zk>l+uvjlZ1#o6}_mq=9y_A`USS$jnS(W|wLI^(uizranZA|n}n%QYgDxAPN@T4nC{ z>boLq)Y!QZ<~yVl)8l@YR{FTA3haZnhcUw1YZ7%t0%0Qb>Q+Kit9tuuqK~)+Err7R zc2+kijNxSNsQRvnHHBshsXOS(UFe@EiMwp6c5j-}5p;BPwR`iFPThbo=0dfDmL(jz zWDsIa?LLb<>kmDc`K6EIC@}Sl&||3^uqRC6q!-7lr*I53U=ylmFo{nj>4p0IE7%|B zWJ1I>DNeOAE3>OG)3n#$_2OLlQT3EbObD-!xJoXR36nTk5>lFW3Q&tUznIa3^>%e* z1iAP2Nq&CW3FsVuy;>cyj|h`_oPeqdZzRuEKT1b!Z1>(Pd)Xm`T$3cp8ADM*4qfBA zNl!M;FVn?eBVVHu~bIw-h1>vymDQ-@cKDv ziL9!zQL-jmUCvW2xHjRfM)Z<&9D9gQFRUpF+5O62Vq(9E+uxt+Jc_A|iJjDQu5wEC zg|e8+_xfMz5A&0(8F{A7*M5u}GJ7#@ovo7uW>fu~G;MlD#=gPGZ2XR? z_kUO!&&62+SNb$(_PSEHLUVes0^0nvu@* z((+zojis5t?x5!j=qz9ya-bZ^*LOG~B!;F8hs@yZ3ZGxrRNIvC68GZDBcPEa_)N=K zlf7rTU~ME@vW3D%nIqyIx;7H4sYwcl?UR zbMgj3afKvBU{z1Xn+4f9iW#R6euW&M=Qukql-;N1DH@YPaw+bWeILff?4x&E1A3<$;|3GJfo|;YNjD-5Q4T>`oP^lO`eK!L#9=?9 zP}UNUTVhtV#A8*&))HT1Os(JYi6yJ1+M4B;brbtb*YOsdb+qR#E^8KaEm5~54q6R4 zj-BQ3y{B^vsgG!b)F#I%7Cw5Hjz;_|qCJxOC9V`x5Z_}zc;p_m18Ll(eqqrxoO6eR zzFD*IZXO9gng%y3tQUr?zN9~mJ*zL_Xby-OH!G^w7whaC7YBEo`~$qPG)2jkgO;pw zJ@yZJ;`I2*Z$9Sd$KBiaC}uEM^O!A;dk!IcQ;m9O{9N^CZMe;=;^* zAG#6qyoYfT%{xR~CYoufeQ}1GOU1ZD&BGqXdD{G~n9kGY9mvBMZn(KibQ^BA08XD< zve`;u=aS9qABKxH4-?D#mGQzqnvF;QanpFO3bX_L_8S{Yvjq!A1Go|35C4$VkA=jM zE(A9u;65(wL7K|GTVs5#YEALVr3fK)fAD?hZ~q~-ioR_GZDQj#()#9SmsWt1r=Q9* zjdzJHWPM9FQ@MD`Cdfy(_}b38ZRALLp?MG2=0Ho4C#qA?e zHI^$otyF(FrPg_2w1u@cMW*+1;X%dFl}NZ*KFUJuwb*H)JU+Y~)F!qjyUztYyT=vh z?>y6KILiBN;QeCQV7Pi$KXgS;KvRf=>*lgNQ|s5QZ{~gV@A*cD zD}J7@1?>>ClVuNc5c9R5O(J&bLsv0hizJA)dJZHkl*X>+sEM~($?llTl zUO92>;wgic3%FrUSS3}2P5>vP?@I#|6MNq!0g6;B_DVd{uU)drF_XUBB6reLLepWs zT+`df2*GXs;3u+EBFPF9Gr_SjfI8+3gJcEdm)hpmS&*l%0wwg)2Y88{hd9bq`wSRy}}nNZzt$-YZA0JQyD~P0kqlq zVl~^)011Ra%hb|hweUlWlm%`nMyZZ8+UMApSr*QV!mgK89bifoS10eicwN5?GC?ad zv6=~r?D#_$tr4rVsP2w;84rnj5xVNad(|lOpZVdGw)_TThtxCuFmA#fjU61*_)1C# zE1#w5)7ZlO2f$kOb(%jkoOZR`ZLapEwXsD^ou|0I0F80Jl&Y&~NUBGT=C>)s{o%Gw z_pP7q%&*3d!~H5gD_uXV4X5h1cDUbuaA%$)_zIQt!5z(}){VeJId*=q9z6ZW#cee8 zU*asUeQ70=g_E*x{@RW{SvAB6=@Xex8zw&tH(6(>=X0j6DWg{i@;h?-lzzm1uYm>L z-Z=?q)bHFOyNatCjSO_rlv>_d*&v=!3Z}K*+RfC#B%ZJ;{uyRn28TJLk)d-&I&OhB zkn82rgR_=NK?%?AS_iGUHuVBdffYQ3pl-xiEKx!A_5&ui2b!m;Zq5%JYecD#*89Nh z@|EcAn!(SpZYjAA&i$?9gRBz{rV{)CskN#07zdXKS6ZavC}WsEpIWXF%X73$-Do5u zm#@iYvV@?Os~HI{*gKtYAzzgGL(fDhuKkgZ&^ zzZ2_^3itJ^_k9pzocuI2yH+E8-x&P4K0}+)`;YFMQf|=gC zfTA%kx4MI?X`QLPOLw-s=XVyjnpJ0TBhqG_r!?lKjISL3EnUt3 zhjan|_vpcU<-aCsY7|GQ#MgSC#(~>D>YLs%b)se>)sc+TLub3DXqu)qp+3HAomt>= zWP!(8IfL3-^DcP!gS^~=X5jyl1}Rv+49wn%9pzr_mbh^tck|`mep?7=6X#-9qrm%S zW7xHmV1Cv!AH!W%0lpa-)-GjNNDbr_aDyvu<;4hK=H({ZBcetgKu0K7jFHLolB6)m zDq%Igu3y4>=&pc#UM7`fqxaIYf~}a;gkqogv=?)eyj*Q#>&(q(>CR@&tAnjrwFyN( zg){$xdOgPLnz3tYF>1%cDovB7n7ZE1XEK@^>^#Y*oyEUY)1){~b2c1-ehjSGLTW68 z-t{;BF0`z(=rvnmN&y!&K|7akz?8vGO^o+1Uzd+Xte@Q@39TE1rY1d2dp6bk=uL5J z4*DcJrN+x&qP~torbePm;G{625rl(w4m?lNyZp4b>58bDC$Ut^A~%Q5YIPqq22q>e z9Qq$D{^#YUHK2VSj?9X3w-WO^)3P87nCq<_C1`q$fS-0+Oe{(!X^1 znx9_jzh?QymRI_3S#H69&GHW#N|Dd6S3wtjU1=8XJn*!xvS!k}K5Lezua!b_gH2ek z$=ZmOVr?7R<3CcZYY;=VTw{o;TO-CewY(I!=A>G;z`d-Lx^EHP$1hu%`EqrQ_^w(y z=^T}OSd$4{F3ocM9NOwO3T=9De0@?VYFm1^Uygw}O3R^b%`u4Oxjhsb#(x<~p6Lr! z{V#bY4V8BDKZVNa2{rx495K}88@-{>e*QvF3}QDvb7;K~c$icee3}{}GZL(la;A=x z4$b}+C%|d#d;h#1ylnaoO0$$=Arlb~%@tXLN_>*CBEQ-}N6lz|pK8)qXRQ!VGUVk> z-;VaO)u%flYchIcv{LOh(Elgkh@R%4^gODdJS^%9*LDh{IRcFn*;O_xS^6;t z4FWz)On)C#TFzvCaA-edFb6NAcXrVIC~t=_h9iPJi=kMgG2H8mp;HQ_DhE94<>~Wu z$Pe${b(AK9Yxez0Y=KmtFm7`NeXU2zcIvmQ*vdic%VJ33I5V9%p^)pfGnjv9($_Rh zOBcR(5OJEoB{F?edRRkg zt0oKDI2+_TNHO4zt6i$obCuXdX`Okh^9w7ab#p&!$;%zzef>72+d^|>)+Vf6wG;T? zM_C_;Bi!8aIA=rm@!;Bi@OAXY)>7Ob1zxcU(7#XHvO20iu@^V=JGQREpoSUfreUZQ z!DsIcs#kLc`NDpCvvvY6+P`cv=qi&yA^n(58RiV;h*%@<+Yu(-IZRM>l)g}CUsyiusUiE$Ij~S&)^*?l8S$$9BDb)T=I<$B z&FY;cOb)#(d;#Y2gKYwjyVJ3!ueODebz6k|HqsSArF1@4HFlql!SqJEbm6>3%nZG{UdiruLs0cI8IUSY;Cacx->k9M)#DS+Zce+(A zef6Hb_|^NZxu?!XIa^KR%e$IdO|9T^_9;|OI@l=8ruWg%k+8+6e!ESzFI$lzl-EJ0 zHD@|nMn^1GKA3lJXzV^$z0X(&Jvs4*W#9_I%^Yg0EjIW{@POdvuvp3Z6V-bS@u<^6 zb1-hMsVP~Sp&}j?-N}&E2gly5Ob?FAlGQg42DOpZ!8@&VcFANtwIw~ce2!Rx!uZ1x zuVOz~npxO)MZzIjyiqU&v`L_-GZklk_mjIMG4bOzLUbstTEhW2(w_h}2G+uq3Nb~Z4&zsw=JT@eiMA<^yP zz4INb)7S88INh!WKmkauwqVX6+}sMylXXN`d`@D|y6d$VyCMWTUHigqS%79(JV{-*v-sO5 zfgRhXjEz50UaZ@0DWUb3V5K#9^Dn{@+-_*l^Jj^$p@mdrT+G1kkaL=|x%z;uDI==Z zz4-g?bs72++$*9j!M(P7H>|6rHfTY=AB4RlYHzAt>=5Q3CVPyVoRb_uhAP=%B4DpH zRP+yZPIWqK=Q+T2gAu=IQr91jjSSvC{ z6c2IPZRvn|O^YRKj5RA(w{uI$r;vPlaX{CLLc}nBk5LzUkBqSnd~#r=`;4@6k5N;@ zK+0`q=9$buI>-e;P1hV2 z;oL<0amewNpoeWxm-mMhbVWwgPx0vQKNzsn8gHGMIW(Kf@b%qpr894NBk7tfL^aYB zFruL4rX@yy3uy<8_OiM}_$YLFo&xB*@xiy(2jO3MDLBBdeg>cP=kR^IWv8v8r_Ho< zFMd#H-f6S)Y(u;E4_>`>n?ckbZ?m9=2Ce$Q9f2~c`8n;nzciOb%<_66r*is$4da;f zi21-sd|NlAro}mnCke)DQk?Uau-k2Nfssq?(8YhKLRWc&usV4Vm#q)KO7uc4=0L9n z=_;F`|3!$nM6k0SG-;JC{z#Br76IM-XKN3XuK;%~G?&kT{EDsN=*ET!j!Ld<{ac=A za~19X(Jrp+wdQ#)H~DazaEwwMB;9VHe>lO6rZ^j8eMBw0ig%XwjZG+Z|H<0@k(G`C z)6NYlef?XUdBw=4`oO26TlLXq2W@F;YlBxf2Z`|Yo6=L)gP(+38T%9~bFQprwt9-y z067uQeC#>Kb4k3HEL{2W%0lyg+uo&viUuzg-j{_69d-WcbA;btjmG*iBjnzF+CI62 zX*NcHf2w(76y2kxE0#pkw=C*QeZ>{rjN1k|4q)dR&*;^V7CSFz^plQA>>K1vO`&}X z%jg#zkyKefm5k!`ueB55ozDrRX8AU+@M&v=Y>>mO?TUfgKGPDj~QZm*o5ynX^tbRcYTO~Wkj)E3ldV60z z$_XgHk6?r=jR_;H>&qbP!1`dsej;0?Y-A7dRV{Of@Su@_>@VbYgewsgMt37KT!ayP zwE3L0W{%K&S1Lm1z8j-%EMaEk_T2>i>KOf$D@6Yq&)BB|&hUCh z|CXDrvUY6*>QMD8_(|C;?C08R>RmU|}Uvxuq zNM3bCju^AZ{`G1(Vq8BbhfTgPV*h$bmgHS1Q}bSL)!i0iZ{nGGW$A@gtFD4NXBnv6 zh`I?Fv0alK*l=irzT}8RxP6tp14(Te&d3Vi)ky?v9mb2aPSWQj=-qiojd)RG?# z9b83%JY;c)v(D|wHa2)Bdq zydTWn#6LhOxl6u4I9}oUqcyHlbFQNjElNkE7a<{g9& zfqx_$DEbd)B_TZAf5ZBPP<%~bm0~(3)?W;7V}n9M;s0lZ4}p1<4GvKwoQGA2;R2+= zYHEL4>dS8;%plnRBt^b3%cQ=1{wh_4r~v0FX?RFDOomg5aO*f9{6;QN3_pvLMo@U> zaXvg-s2%C7aq$Wt=l5q2Cb2;q?5XqhxZ2Dm1{Ujg?&Qg@hd$$|sb2wx`i7t^Vf z`O@1fQ=tCukmE91-*?FOGFhM;<_(0S`Fmwt5YOBse!MSUG_MF$kUL~B9~>AAa||C4 z7yxq`9}q&#`3OhjmGC}#T+d4)WPs~^YKOU#_vaMMU6Jl_nMY2ki_ghoY3uHm*i){lodfRV>3*cLLHnoJ9MgYoxQN?OPQ zCMYOWa+8!JoIl$|-e=^j0`1^KhL!rkUdi}J`;!(@!vsaCku;(g*qeJ0e0Xy~oLcvGVbj~S)`cQj7An=IrDS>RX9AmB3BSDP})g;k_1SDB)7;-iIh{oen%3h z3nZ7xQ*3yAG}2kl2E;{kF3@Rs9JPl^BjTfx-`mm%z~Lh2q`q)^&S$RS!o+abdhFS< zFfpA#N|an8mGYQ) zEpwT~`bEWSrI*QazrOwA;I8!V6CVe=#XmAW24;(Yc)SK?R)Dr&KlpzY5FH;6yFnq1 z59BVB-zwC)C|Z6+pZHj~M+O2em~RHg#t(pbKhPKcb!A+?{)peLj1=>GRTY;&?MzU# zn4c-APd_c}Kf)e^^j-{(##H|@`7*d~d<@_;h75{-66XDoz9QUjt7GD0VZW>H6W!I=|15q#QLw$HYN$oUzXh=vn@T&{cNTR(w85HKvD^S1su*g2qpy%SSa9uRwT?q^8 z6AAm1;SsuM#9I>{-iPvmi{bw9G#x%7ydMq!Mua*(3gQ0|A&vKkc|1b?WB}^5BO)w5 z687gKeeObJY;*$X@5@MEyH-R+i0Qo)Me}PR|A?abw2;_nMRXAC#^}&Kln*VB_Kyu@ zz9Uu9G~P9GCpsc3f?Ojhed43yVQ%Xa9u*GrUwy)L)O=0@z6}1iLK7g;<53O!qyl*R zrpF%97iSD4*NNBb^>|LD++G$dOB}*RMmBh>J0F@%WTdkmhjQ3v@0)XtOKXuu;x_e_#dNoFLK^yPii+`jnQ~3bNH{o4r9@ksu*<>zBB)P=Nm|2XvWw2gkW0cwsmD5|~UBM?Roqfn6j0t^( zWSv?vm)))Ly1lfdP6hG(ysh1j-r)fx&`LrDc`rZceRW0>9(%GWF(z3q>mpA2Ex;E= z$z^l-L{*Ab`+#qD0?B+2s4P-?WPy*9rtM+O&fLUEV3WS2#Hjd&0xfa=hB>ZGG}RVq z6fV8_5_?gZoS0iv%dU_mYMj3zxjwoTiTB|j(sJ=GOuRj+)2gOE^m|-Szx4wB){38+ zBA1qQ@~)AV8>+;Gwe>NPo|dANzOFn5SW0D_tV`9Y;!8+9(UU%eH?vOElZWJ!;c$p_ zM&_qzJJ}B6E$ep9Wt}Pb@!raCRaEFMH2S4BlGradx*1buyRPtw1e2 zvQbBq%2iNXw299RG|NZ~Ni(N8Rc1TVyu5$aokRNRhY_`nbqnN%Jb6q{=h zU%mR?Pnt)e3g>Z!yP-A3)LUa6mrp5Oi+nZ7 zy7H8lk9TNQEq#i71eTnn>DH1Snol|Ppv=`lIU#TE_)S@wa9rdoAOLSS5)Z7^HhX^4 zRA2BfA9o}%bGjNlizwG&os0T5Y~FK~I8&7c4K82W`V$WtT%HulRK&kTPZ}r~Dk*yk zlIC(oitMo{u|Dy5pCZo!#f(*nR~0o)kwBBzb4r_cxih~rGDQ(1Q?b0I$XVmc^(5xQ zA@WpGtG1{oU7EO4g!BuSAsCoB@okGiFnR=Fte30UF&6efPq0yePR76=k;IT?lQ?t9d z$#ne5*~5ptA9OU!kmd#rVM8!WDWy|vWvc#9Wn$osepWA@(t#!1~h#F-c= zL#KeAmNDmwY(6(q#y)f=yi3)AE+{2G#-ubUUEuxy_Ek}z{Fsy!Z3imB#j?CA&Fk%j z@iEgy``bmSCUhP&5kkKzu-z2W!J_-u;w71w(7C!OE5e8O@ZG%ER#a=gZGOh70aeoo z1tg7VU8u|$SXmENgu2NB@|LT^+mY4*lp~R3_;!#E4BkFxllf$2GI(NgaN8dCR;Fgf%lxWNsqQc+$GH-m)T0Y5^3@R`lw`s>oZYFq)5xc0v?2G07;t z4{EoowZq%lnd(vcO6cNqc@xl+lA6}3MU8b%bTObVih)kj{ul;$AEr}GN{`Yd>!~o6NtK_L=GC_I z4TL9v0Z?o5Q_^UqIY9}8@LqF|x&J&NW;$L%dowQ~ouF_RNLlMdR%w*1m!KX%M&ieX zsAw-fi`k4qrGn@IlGce{JdN;Xl~ZdjKq{zaAlOXMj0>8*?%GyHbmLLnWQ<`z0gH%> z_Kg%j;)iiktSA9n2O((~FMh`Mqm^76sS<9R9 zRlLij^gS+^E)9K@z9(7ZG3BS2@;meM(=L0GwJK){aziIXRAyx5QDW5CO-KPAEfCW| zF#1wCL3qqX!sn9|7jc`}G7_U9CKFTRQlbk*kBUwT=c7@{MNXxXq~w#EE(WOnCyDWp z-q}#-vBqN>d=b%}o3kkkujwt~3-Sm2sQHe?sab_%|0>u=6?cPqWSL-zs zFHvC(+0DBarILIPX)&_^#za^%MNcw81wHoK*NNm=%!N}(eg|9Ap=G@tte2+e?NCt| zmEc4GMB~E31M;NfTjcnQKhz@i#hOHlOI7CectMM(^lERb_kkH1CL?QP+VetLcD47$ zV=j-pMB)Iaqn}R1;t`5*BBlw6XuYSrE#BLY95g=Jp@BW_=i@1Wk)AI{D!9KJN6(P@0}F zv>2#<#>xL@Lu+2bpv7yQ?Y7O`=(C6qi~K6$am6TEmurzyWp4H;V~E?STtpx(bdq#< zRJ<8;K-P&M2#1~`pH@-|jf)#OoW8c80m@8B?|-)zP#`-y(4UFFPLk&P-5?8mzZTNs z`?)O*zF%{#&G&P)@IAjJyvz4X;X&Kz<7gu+aPpm`z{O*E-Nd(;m!$B`&LuIt%e4dz zE`JGYbEPa{T3pH{q}|1LlQb9G4Q9E!~%qhaSos0_u=TtCVv7Sj9T100W8qRHVstd7~AQtaJbuNKd3>{IF zd27uej-L~$&jl3q-+)0X{{a}j7no<RfC-IYm9Iu0_w8+kDz=kQE>h%Ll#Hbm;HHJ3vcc+72}L3>3hH#hhMtKR zo2&-|4do)%P1y_PFFo{WHlYnMPL!S}#045<%}D3}bn0mczoh#A+*~M0#CZ74%uVFo z4U3C5RJ02h(_%)$Gr4%1IYq-b!GO(Rz{Hiz7nwB}Zn@A7G$!IU1E+nRC_IV+_S+#s ziK(**Pd=&|k20C3k0&ODH_=CfnGT-h6#B%(Bqu91^wH2KUzMUUp}T+dV90`@#iIwk z3!Qz@$3xzA@?|7BAEcPVTb$@eZo1f2lv{&1uw-FIZv?XcjTwA2C7-Er#)vC41XT~- zZzAnxnn(&Jt{x2dSc?m@G!52qkRFPOFuaCxAXGDwLg_RFwSh_iniwZ7DNj%#51k9Z zRlB@ibQBnJsLYrWizA#KJHc?&XNLy{mDKJ58DL^WKjK1x-#WntxXA3fHi{5Og#qQ zplwg{rljR#NaX{(_a8$n)uObtc5RC|$im2lj*NYvx*liP^Ez6(E6{iX1nYJ-Z%T~oH)bW; zT>-%W$BY>Uy6;YHL5H`dlc3&DdA*w+R)2GCON05}>#L{w*iKbvTEPwPrX|TH%sw_T z4a9A3cA7BTOx9?4CA$hP3xI;YPTom}v1mFT4g0y4y{NLB+ic!TMh*D=F zqaLbIGsbDWA%eXF%n7g9WalxP+^0lZ&$Fsp@!_o?26xX0b zJ7iqjMSIVNS{&u2o~paWf*ZMX&}`pSesK404B+Hk!<()p?%BG3^xUtmJ<`8j#-IW2 zWHu0d+2QNgiokHpPm<;rgR1pCta_R+`kpUNrRLX31^TrE7An43TbkbtgM|ipflYOV zYp^e{XNu033dKyJlF!FupN*okCqwkTGbPTK#QnLkxYSk;>;$Vdu-%}`m5j?SGaU1R z$fw)X;g@Xtc$ZVm6umVyFNxUMIA-y)=Pe1kG++i*g!MkMuzHLUEY4JzkwPlO2uua! z*gE65Gg3h&i=j|q#Xl8c93&@0u)uO~>Z~$0lqInGh!uK5X;zvpP?Q3w;<0fB1B+$l zaM&f#g3YJRxbXmCYGzq40~gPzxCuyMP3CoD6p0(4u{6p+;S_ofrIv+lB4HENy4i&MR@-Y1fuk5x$B$@F?mF6`|S7USDK8=lOTHZvUmf9e_kixdYykmtGc5Wy=E2?CP z%&$nLN|u)6e3r6NKC=MovnTJDaL4=T`xFxBS|^ z3kI^6dNodg04Z$*;7q}anP+AB0hnRYHuI@yS z#O_q+a`;qG+|?8ltRfT{^?Y&J^29+} zhBGZw2%8P==J2Ry=oMi>C?SuEgUjj@n4r^}14eAw)7qEsNP^?{qs7_>HACqiV&efe$sHKF> zNWd_ghh#qclA3!YHe7(YsxvFFpf=G+oo+aO!^3J!osW@A`?lewQ4=+LB%Ul{ z=G&*$%zr3IJ*#Yx=*HHIcy-RLTCdi;(@Dc?#K}y+^vq&^4E6%8qMM4891&YFI918e z48-O?s6?BLjBaam_pFTNp~sb%SQ$uUPN5c*fyEjE8af(yQj;Pjr@-Q~q1}<2KucBKoy627y>+3DR+vj82Ak@|PeNh|Lu3I58CX*nR9c@TQ@2LgkXnRRi55sM zI^vx@bvAMvl|sdSF|l93YY@H`R&oAS$g^I;O&EG1ZeANFpo?24M6jZYRP4GwUtpOJ zv$R#Qk8w<9okt&rg@SXq=1d)~`KU*?fj`MgT>KGEz+{4`QFGv7qBXsG0T(8x%A%!v zGc-EsC^eE@Eddc3f(}QiZN_^c6yBmxorLcV&jk}Y6`&ZH2sV@fltZ9#Wq}{EQk81! zM3DBCNN70hrPzhyxUY^td$x}?IPn~$n`T~_v?5)-28%@0@e>ZU@K&>QI@1A;5_vUJ zRfzPk2S-Jquu{{3jX;eZhl!>ehf%RH~>6hTnpawJJ zqCk>JXOn3ZEPpi`VTLJ$AM_X}ooUZ1>SzX)Z{;v}$fQ6IQXutHWj9FC)nhoERqZLc3-qK{0lYAHnD4 zaSjur!VT|P=R>Jh;9jv$Miz>PlVDd5HL@0)rm9rfP1&LKBHo=zv5!Z>J0$P1 z6qsMX4G0bMF3AP{coMx};CyJEJ|CtG;5R$UqG}+H9cLCQSto7-$~SI9w&KJJT|oPz zFO}F)6ZB{en~yF-b$GJYa(Kbfg?MMgQKGS6WyQk?V9!u5N}_84^^2)GXIT<^VUdQ8 zpxP5DGHXX;>wH~`@a_*`W2{hCA9S3yj-wBq#}y{_(D172eDu2?B&8svBWt120gfQbjs%@nOkf<+hIp);SzsZi4>M#WYg0VNL{<3|YFM1v;z1Ie&zQ z%Tc|dj_<8C^!#FnA~nCAl8S*)X)8g`^XO$>)itQd@|#P|O=~Arup->$wZrd?b+`-GJ_p zUTiv>Z6mA|U@C)UUGYS%AE$JR9U%B|HpRAA&WBhag%~G_Q?TL+TDRij-_K%>RrF0w ztha)51Z@Lw>>Oj*RSFnE*({|v@TgR*b5WKZVl8!APeD{ks#Ww_=&;++PUwsmOHlt2 zcd*2UM8Uz_W(OZ~XRuXx8EHStSc@3k;Ae-;6Y{E3i8M70i%qle1x5_r+h z%n3W&WU?@&l!q}osR=FhbxW6yXjao|bQDUJK2d3ot^vP=sxy%qV^VcR?L3_oOjUe~ z%#0IM1+S3s?y1zOW`(j(2WoJtMrBw!6djYYu`o-@$I8x^_2_XXVH8<{j8KUgbg3E% zW{VL!#z`_gKr*POlBQ*Xc9|l{lp&ciTD4hb(v;Dvv_mIz0lkUZyo{jbB3pXZKhwH| z>U(Kk7HEu%)xPwr-)8orm7U87S`K1W7#=4WHN3P30$%3G*i(nqXPvjZtm)uj*oA{x z#>}G$Lfh-*1Sf=4=Q!tr65FnQLwdIsy69h z@cUlFbL*ZR!C2Tyj!}E_qm!v=ya@HREI9W0nteKSo)av=&qW}B(m-{1A&X!;isa#D z$kydG%Etc3lG;pi>L@bFY+zZjCuAFQD)wB=NCXBmo=Gbx&(JmO8!8tW3n#1U{z8c8 znr%KuP@%_qEr!nuW~9akL>0KrvFcf;QSg!qhI7rE3EdaOeNNQ{jH=o`07--qJdsPV zX1wSJ{6ZH(o6@Hv4s9RoC2Au6hRnqzIwhAwAd+e86`vHxnR zv$2Ou0)6kAVW&>Tb>B6fMvq$RsKn=ZsY?JGyEXp#F;d|jsn={qe@2JkNAoB=KZ^H; z0#%_bgPu-aauQz8ig{sC$$1cmAWpu3Wm3H=;OYmLvWFX4@9gR1bBX>6jm^FxbZSsa ztzh~>Z)&|+!}y}40`deS&I^X|nI-w%65u9{28_tmU268-0@~GeP|R-XWSn*7Tx=hg zwV34*?k~TJ^T@SB4zq$1TCcyZvsAwJu1>NAPkcq#c|qv6!N zx}H9&5en!^^mc$u@|O5a@_f>G$%X~$2n4Gl!ip_)Sr=H3Nx(+M?^*Mv=KP-Q+}@m# zvD4MT$)XnNy9sa~bkbF#kviJw^6Lmvq?qJ(92(QgPh(6E-Et#GZ^@clx*?Tl(8N)o_0OOKh+%qi)R}q=U!8H@0Q&2Ei z_lOp`=Ito63bR}^=Ob_@?U|(E;WlBD!HJL&&7<(o^reK9G=Zbb;?E{9Li8nP9Pg~h74<$N2zYz2eXx1dyFaG7 z)D3k_Wc^diDYB1oo;(wHG{>9w(9vj?Bm{H=-QChzC1#h3DOYi@;8f`3 ze1vU{reJ-Bq}T|k0}LLuhVY+Ps+dlct*D)4PARCeHc}DATg~udq?eIburl`3*J7eyHlJYrT7aQ&W~)?+GZ3w9tKI?^XAlhHnkmfq|T0hwwYEW zMi=Xg+HY))S4fJOxmdZJQ@x=;mTE8v<9cU;^;~s+8(>355ADkB+_N*cXJWC)_^#2N zx$%h|s%o$6U%B&Uy%66uw101I{ph}3`*)6x=a%Kx@4J7;-rPfbChp6v-+0r?Pps^} zNp8P&D0g6DbbMmhPWj}X@m;eI)HmsS_TNiS2gde|9{h0bGkfm6Zz4A_x_4J@G*h{)QgdwooKydlqx(b#c8=~Ie_+pq z=8x>(yZ`=&_RE&h0|#=qPuxE~dhaexzw!Ehxx!f^9lhOGNd9~2RsXo~#K*t*+Y=8y z`tI-T;s*k(4Cyay|Bs)3VQ_l$SN?6+SC8#{>^KJQg728$5s=l;{jMe81U#C1BYc+(}&1+RvA|r^(ll%kb~)fQNw}0AueL`HO5bPp{wkU^D(B z?q`6_eIidRpUXet(hu+$@C;DNac9i!@RJXSyl1J%dw~r={yOYRpdHFL&>!#!@HFuF zwa~4-M`21w|^&cDHzEPy7e9T=r;EkCx9sIz zg=#U=TbL~LX830bnao}OUA)9z=#^yV)J!71OEvcIGfDr(n-_E~TYhl)vXXzr6*iaa zygLgsg**LXCX-HQGDW{x5FXS)ekW%=~yi~0TqUB#{it&!i&-R9Hd^I5vWU$N)|?@I5yXZ6r0a<@v_ zPN7tm44?&;WMoCg*T#zJv;<@QlGcDcZ5O)g>?qzgG+2~%eo4lMhK4pQ9vIqkQ*X~A zzx#uOgM(`dn}&vN99VqyLVGp2t2Yb{Ek`c+IXNk<;*#!JGSH)ej(XA^)*TBM6bJt7 zj;+;2S1+piTBA5HFtEhuQq;!*f8oM~7HPK~@WH~D0e?Vpr2)_KwJER#v7g-%5Fu_1s)3=X#}l$=lJB?%9#*taPSE?-<&$UbN2+ zrKk|`J3Fk7PHnv;DLXB>;o(Zj?<<${`Et43$EDBD4-XIbN_ui(NAK6a{*{WK?(D2c z`A`Y`N^8aM?khu1$W*0|N>y{UZob~TbZM_bUDMJVX=Q0=r&nHDD3x;64ESXVrT$W( z+(!$WpLpVlYI*1I=CY($Gd;YAM5C+IqUd!LmVIDZA^WwjjV`*Gx(|cU$Q_GEMh*@v z0o`?rN5DBZJaVvfRd(C>qBSEUBX_K!w>#F13=e-wWUx9Q9fOC~i8WX)9by6w#eLWH z#ns`FK^<>(xO(M6e`uxB?`9CcdF7^!8~bk_7+C!9&Ff0JihT9Ni9>7Gty{NtEmT@t zSeh(dx^Z%7{q7IlP`}|r$-?EYgP z?Tv?)Enj{^AD89J`ZsPV{?Ri(xS_jm)o*ZEDdVi@S+ayndPMkqOFzj7 zALxrXxI5;tPTB>s`6fL*{3oiOo@=_@ZoV$Lu2#eMAwrTS>SMRI zr!f-}^9c9SfEK$3Pf6#?+R8QB-piVCfu=NEFtKZT+ReXA3^cTwt9_^p)VYublHDNG zlTgHDl4uMb<5_8~(YQLz4iKivm+PB0ZCW+S56Ud)nB=o#WN2Uq8HLW$WG=w0i041Lh!9T}&p9?XA)~E=s@RP13dgrOInEq4bWw#5LEBw|*F@nQjSaYbd>AQHL0O zI*C7}3YVbqcUz*YWa3X*{1!z!y`xEoG-dv}HC~NhV>M}F(k(G#H|ZUMDi--LyJl z{9PK~+>Fns`Bj=uU2VhAin)SW9YT;&hPvf+Yd0@t<_`Fx+Ej(AW<5VOEuNW8S3c7=luwjD6c-(@(ztK`1N-(Z7x{I-!(r+J?*&!>Cms{|G4K=M zXTTZY7r-xp{|0^yG=TIM`5R847g!4P0jq!#uo<`&_*39MU>`6JJP1qzj{uJWPXJE> z$AG7SZv)=}egHfN{0s0r@KfODz<&b&1-uN@0C^l%2d)BofE>^Vd>B{-sR{1S)(3$%1@ zl>RD1IyX6>1O&ia6?g*q{|ayd_&V?{;M+huyz*D5+|9Gz+xqXFSGG(4 z5${$(Pb3Qp(mf?*fvSHhh+&(ZYTSqo;-ZZdPHVm$lEd$$R;MQ&2?~qN@*)+0Q21Y(E zw-4Sbx2&h^EuWC`;QFTCHCx=YVWDrrUCL)C&~z#Jkh~dH9dtra`Ihk_Tmv z?BG5m`(=Xrxa^iulk#zFoFU49uH1_GvqnBDe>ir+Taz|%)~ zT1R}4*p0H18tY|%v;lJUvxYKK a6xAv7Azmc8j?M*XDL<9|rGfD^5>>?j literal 0 HcmV?d00001 diff --git a/CH32V203_eInk_Calendar_Clock/CH32V203_eInk_Calendar_Clock.ino b/CH32V203_eInk_Calendar_Clock/CH32V203_eInk_Calendar_Clock.ino new file mode 100644 index 000000000..cb84a6a90 --- /dev/null +++ b/CH32V203_eInk_Calendar_Clock/CH32V203_eInk_Calendar_Clock.ino @@ -0,0 +1,100 @@ +// SPDX-FileCopyrightText: 2024 Liz Clark for Adafruit Industries +// +// SPDX-License-Identifier: MIT + +#include +#include +#include "Adafruit_TinyUSB.h" +#include "Adafruit_ThinkInk.h" +#include "RTClib.h" +#include +#include +#include +#include + +#define EPD_DC PA3 +#define EPD_CS PA2 +#define EPD_BUSY -1 // can set to -1 to not use a pin (will wait a fixed delay) +#define SRAM_CS PA1 +#define EPD_RESET -1 // can set to -1 and share with microcontroller Reset! +#define EPD_SPI &SPI // primary SPI + +// 1.54" Monochrome displays with 200x200 pixels and SSD1681 chipset +ThinkInk_154_Mono_D67 display(EPD_DC, EPD_RESET, EPD_CS, SRAM_CS, EPD_BUSY, EPD_SPI); + +RTC_DS3231 rtc; + +char daysOfTheWeek[7][4] = {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"}; +char monthsOfYear[13][4] = {"NULL", "JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"}; + +bool start = true; + +String lastTimeStr = "00:00"; + +void setup() { + Serial.begin(115200); + + /*while (!Serial) { + delay(10); + }*/ + Serial.println("eInk Calendar & Clock with CH32V203"); + SPI.begin(); + Serial.println("SPI started"); + pinMode(EPD_CS, OUTPUT); + digitalWrite(EPD_CS, HIGH); + + Wire.begin(); + Serial.println("Wire started"); + Serial.println("starting display, might take a bit.."); + display.begin(THINKINK_MONO); + Serial.println("display started"); + + while (! rtc.begin()) { + Serial.println("Couldn't find RTC"); + delay(10); + } +} + +void loop() { + Serial.println("we did it!"); + DateTime now = rtc.now(); + Serial.println("read rtc"); + char timeChar[6]; + sprintf(timeChar, "%02d:%02d", now.hour(), now.minute()); + String timeStr = String(timeChar); + String monthStr = monthsOfYear[now.month()]; + String dateStr = String(now.day()); + String yearStr = String(now.year()); + String dayOfWeekStr = daysOfTheWeek[now.dayOfTheWeek()]; + Serial.println(timeStr); + int16_t x1, y1; + uint16_t w, h; + if (lastTimeStr != timeStr) { + display.clearBuffer(); + display.fillRect(0, 0, 200, 60, EPD_BLACK); + display.drawRect(0, 0, 200, 170, EPD_BLACK); + display.setTextColor(EPD_WHITE); + display.setFont(&FreeSans24pt7b); + display.getTextBounds(dayOfWeekStr.c_str(), 0, 0, &x1, &y1, &w, &h); + display.setCursor((200 - w) / 2, (60 - h) / 2 + h); + display.println(dayOfWeekStr); + display.setTextColor(EPD_BLACK); + display.getTextBounds(dateStr.c_str(), 0, 0, &x1, &y1, &w, &h); + display.setCursor((200 - w) / 2, (170 - h) / 2 + h + 28); + display.println(dateStr); + display.setFont(&FreeSans18pt7b); + display.getTextBounds(monthStr.c_str(), 0, 0, &x1, &y1, &w, &h); + display.setCursor((200 - w) / 2, (60 + h) + 3); + display.println(monthStr); + display.getTextBounds(yearStr.c_str(), 0, 0, &x1, &y1, &w, &h); + display.setCursor((200 - w) / 2, (170 - h) - 5 + h); + display.println(yearStr); + display.setFont(&FreeSans12pt7b); + display.getTextBounds(timeStr.c_str(), 0, 0, &x1, &y1, &w, &h); + display.setCursor((200 - w) / 2, (200 - h) - 5 + h); + display.println(timeStr); + display.display(); + lastTimeStr = timeStr; + } + delay(30000); +}