From d45cc44ee2307ff8f0a524df7a07a0cd76e980f3 Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 27 Dec 2024 12:53:53 +0100 Subject: [PATCH] Display example #40 --- README.md | 26 +- victron_ble_display_wt32-sc01.jpg | Bin 0 -> 91457 bytes victron_ble_display_wt32-sc01.yaml | 474 +++++++++++++++++++++++++++++ 3 files changed, 499 insertions(+), 1 deletion(-) create mode 100644 victron_ble_display_wt32-sc01.jpg create mode 100644 victron_ble_display_wt32-sc01.yaml diff --git a/README.md b/README.md index 41f4d36..9d436ff 100644 --- a/README.md +++ b/README.md @@ -299,7 +299,31 @@ The following `type` are supported by the `text_sensor` component: | `ALARM` | | | | | | | | | | | X | | | | `BALANCER_STATUS` | | | | | X | | | | | | | | | -### Your support + +## Display + +Example using this library standalone without HomeAssistant to display SmartShunt and (multiple) SmartSolar values. + +As this uses Bluetooth advertisement packages you can have multiple device (displays) receive the same information without issues. + +The [config WT32-SC01](victron_ble_display_wt32-sc01.yaml) displays the following information: + +1. SmartShunt AUX Voltage +2. SmartShunt Battery Voltage +3. SmartShunt State of Charge in % +4. SmartShunt Battery time remaining +5. SmartShunt Consumed Ah +6. SmartShunt Battery Current +7. SmartSolar Yield Today +8. SmartSolar PV Power +9. SmartSolar Device State (Off, Bulk, Absorption, Float ...) +10. SmartSolar Load output + +![Display WT32-SC01](victron_ble_display_wt32-sc01.jpg) + +Any [Display supported by ESPHome](https://esphome.io/#display-hardware-platforms) can be used / adopted. + +## Your support I don't have access to all Victron devices. Please provide feedback if the component is working and all values are correct and match the reading within the Victron app. Only after I got feedback for all devices I can try to get this merged into ESP Home. Given the size of this component I don't expect this soon or be a quick process. diff --git a/victron_ble_display_wt32-sc01.jpg b/victron_ble_display_wt32-sc01.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bd834ab93e62123a4a842c87beae40d167a3c7b5 GIT binary patch literal 91457 zcmb5VX;_lm7dCEXg+nETV@@C_qGEc=G&K!D8Js|z!r`QN$^qvz&FW;DfTn;TIW#E_ zXxh;naO{_1DmEO41{EvE($Z2ZOS4|j`~UEM{%=0O#a_>P*523J!@AeKe!u$tR!)WB zjCYpXwr!i-pIaZf-{W#la=YYr?%FB8YuCisDsti zv~=KlS_cfY)ztJ&^$iS-jFHBgdS(aB5C`E1W5j<-w(Z`%TM?kRUr}*CLQ72x@&CL1 z{+}EWApc^A=Z z`Mi5mK&vAdEbX(AcSe~7>EVjcmP*a7srj${zxT;)y+kK`w{MgG&!Yb; zvV8{#YPoH{JP?c~Tl@hr2ss|-MEX4@r@UiJ61W2>=O8yfmf2?9Bv0wmj>kjhg4AzK z`7PoXoNr0UJlZ8j8H+?3X;{6ynk=7P9$9pN%~86Vdy|6SCCeb^L#agg9itlT6U#y9 ztQ3hxE^F>N#JFgMGn?;vwWw~7G&{8m?Z#&1MC#>Io++e~-jsbh5KDZF*!zXVQO1#8 zD?E`&N!7G$!GdV#BbiPu7a*bL5)2EY0@%5Pf#@SBimkXz%5td+;>>#ztMXMia3;~L z=HL*>af#;@-fW9uaI`~J9lyePIFd2;5PqB4tExbH?=Az?P{^0^;|G+R4cHuY(H|e1 zXTpHdo^1Jo2>u`fcqkjV8QSP)^H?-LjB{DK~3D>XkX}fM0abbwr z?pkaX!4-(2)k3Fr$c{5JD?&PM7AZbL7SBtmNuvqhd| z!OEbu18Ra4XFOV$#yp+xCgqL!P8lpX zW75?C%#LCvh|RJ9KSVqtqlD!HQq13H9spUSs_-WghdY2{9_bDfEPgT1BC9tM}k|t9E_vjH0C}&AJ>2NkE0cGROm7usuTr zOIiSso1bJ$p;`9ea>A+F_#sWT*&W~3IR#fE& zmk$7!+ET%F)_&~f!bbzKTrvof(}0EMH}p9l6L!B{1(Wk()Dq{McvBveV8P}d_h96X zgi0>~F!?NK5dzF4iFB;KGP@aHYQ)p9Dd^>QowvTX7}7u41)hkcJ@D>$S{BtXkYOkN zc~J-}wX1@L3vj~KGPqH4gunH>7aqEl`jH;b(+#gAnCuZA3*HicQlm%y?~xvmDS4KA zvX3qAPLy7w38XkZ@=jhrkK6or-p<^S6$lsvZsWy0!b*!hL%9mLK&v$X%WoAhBOGr6 zJ#u=SURF9cr0u<}dN8)>fW&9Ae_y$$Xjq%siYE+tQLN_NxYw?rtDDhJkCIgX49Guk zj{q=QK$>vFai|1`#~UNQgaoY+GUyF%9pw0cK_37v3q)#$p@3>ms)lnRNK9%xl>65> zP(n!^#bEL+NL4c-XcEPA3ga|%iSZSvPb}Qg4m%zpRa=t%>Ftw<2RKZs0rM6g>X_MmvC8GcBXW?ta9Fmz@O4f zC9s`!ktaFLbE&0BoI;dRWWe3S&|a+w|Zvt3_kEqct=1=y*b%e zv%*Lzp*t|3#@**Y?2E{J+SbW(;4frR6=)a&Q8g?(Pq?Ri&%9 z6~pFWL@qmHro(kCih(E0$&^yW zk^P-a>Zpg1K7h+A&_Zqqm~08vC9@9miBG1|2b?`*)zq*q|7dfZ*B7I%*%nR-PqW>cdB%+|9x>`ByJPBx|DqvToP7aFf{CPCLRrS6MUo9 zEP5@a?pUtLy1&M9_ym3^QS;q>pj`9fX_HG9F-D5Vw29$LVH-%J`E!N)V~&7yD?)Dm zb?!#GNl%@%tZI7wq)St6{i9iz&Chp_{g&IEgA-!cEgUxvb&kic^mvT@mK*AP=5+PU zHs`}%e#^a9Ebbz!{~U05t+-m|I%LyY(EG7+=}WiY{5sQjbW8U9Gpy2MHS`92*=Xcc zbj?Nol>Tq8{&K2zP*5XmtBR`s1bdY$V|r|f4lboqN%x=bdqIjk{A2D{!)l>Q4)K0L z@DK<(eszA0!%>@x&HwmY?){p*!JXcB)b)N$5ij$>`oNP^g8{FvK@jrZszp)n`hyEY zcklg{E0cZU><@d4=#_T7g?(@NkplQF=LbKSU5a*!g_wVkul)a1sR>*KH>q`Zqe2%6 zdCT(YZQfhYQmTJ%#V}nj@)G_fK{2=xG2l%N?jpb1K>}%??JZdJ{slR<)p;M&%639| z|Bvt^KEXWFC(T?xMu3|>TledS$JkKk)1U7L_@)85)^)1iADopPA@t>Wb>BiEJ0e`h z_?h#u7sEWp2A7fp)!W$i?@lwO#3$ptSNsD_y8ihkJvlY-dQj|h{^TZaOMG(D8o8Tc4*%&($Jl1-&k8JO z_-S$Rv1v!|*J6K_d!8Lzf75=Rqjwl`Vd#AAma=px(6gOl01PNzbLscF}wdp{bPmhP+iFgIBdSkeAMGV;h`pNP(L>hMR4=jr#97kafy>u;4`MN zfI9?z>l9xZ)$6Wg?jar(@J%5#J>4;~FUEu5w3wK+`-?!|2$tQ?=Q z=gxB=+R0Fi0S6UjUttG3TF|1jaT4z}mavj-b@R^W>Wy<-G8n%KD0g=0TOn1OZu(n} zLHafS5=9L(|DN}y^8XqQMMy|f*!Zm-%yRZgWcja+O@!_+s^mqR<(HBFJ1ln)#25r^ zJ^QUNR=}i}ZLL5dYPcqa-uPQ?zx2Wz$kxD7*Lr~S0UhUD#l1hQc=vw*bcgE}cQjZhk!z&$@9xY{~C_YqeK*|h-XfxC7kDS(7IB{r)Za4){ zh1|f!2@Y)v*uUjmEj(K8jhf%*>@$YHfJ8B<(C@wv4v)pTNSfH|LExuJC0n);&vv>i zp6|TTe_s57-T$b+-izRu3vC@fFS2$&`yv^Tc2}|MO*n6F$k*oj`&aPuP3Pd>E*tH_ zHu5s8r`!2y)a&IZE*AM*Ou93ibTup$>O>h$DfF5z8#S*vO^htgrw5yT-wa3AT7)!U z+g#bTJw_@gmiGL7U0V;4WIo25=->~VWtVGHbsn~&Dhjdn<`#w{y`Xhb*ofbqU)5HP z3@QY%3je$oE_iVqTt9{Y>hv^vx)|bwZUg03*>KJgPD;K)g3Az(W}`N1qGg&lScait z-0}p{BC>>q0BVME<+5}{XAGE%T=?S;H_dg80ZlXw((!TZselFVn_( z%*H1Th@Z-5XEWC>8WFwbiCSjyYTjZoDHz?Jmq zv6$IlY;&p{@zoAzGOfB3+Cbh~m+(8oEH{hqeCu)5h2l8>`Q`t%Gx9zlIpQMp59n_> z@zy?c*DI#9QtfN?>-?)sWq-nR6ZG3wqK|>@srutzf?g!u5O|8i#Y_E zTnvMPzR_dXBM$U_tUcp)0PgWRoMyHdOXTrSM*A^tz21nBVt=UixqNvd{KjXIk&!JD zH}0@f2pptwC%od(-PIE%kkAUJ2UmbKV+A~jy9R!yr3JRNt z_`X}7k-50fBUx|kgxg^*_{$y&L;{pZt~^snp6<)`|xqyJK71yWTW*`4#I@ zicTM^uM}hIK~>PztvM6<{W8vv<0za-jt|y)HQx#$iOsG%rgEs0 zQwcx(LV~}!o0kk9x2g>F9j+&a#D*NX;__rd+vh~n=m32sC;JI*ZPA=p@mUIQiW;NO zh4*}$F)OeHkG@!LcPqK^>qJX|?YZ{uYVUD+?UXO^oIUKss9ET5xg)^X?D!YrY5rb( zw`nRnX1RH4j~7J|rHCUBBcskwOuhO1LUd)!i9J!(M@)?DNvmKT zN~w3tdU*~dB)H0qLxR`n{rHc*21a^DN&`V--#dZ7<-Q;Wqip~cPb1c+8afQ#E(s1t zMhu>KJ*>MlFn0N|cNF_>=F;M?D6c)XcHPipywR7Vwx`5)b8bLj;&UrwLT{X2g6moj zrQiJOAid$UBy|3`mA!>q*0@*f#KPN|@b}e98-Gz^K7Udf>IB_7dmc0P{TrY-;o+G_ zzvY}K6}64v`Onlv-EJk%zjpO@al-JFV_drX^D7^nAR)IxpI3C5OU#7{A3!J7*COmU zCk>x=wT|ojdt+JiPM%ldRPn2?wPKh->~A^6E=)k;h3lU(yFHMd4i~-khCxxs?%YW> zQba$G+xL}H9@%PTsTO&^Tk%JAWX}*UqfqR#@0+AFX)J#dRh;Z{!i9=TVdPLYt#5x!B_H$2VKGP z7x^^~9puA3>ffYpuWPcNR2A=GH@sas@VCGt-t#PX!tYo$+FL2xI-|r$ahZbs{7Xun zikysYwF?ry3eI6+He=Vr9focjWe|>j&0MI=Td3O2yjyB53tBI|xm>yqgTLwPbYoq= ze&lRam{H_0HSg%p*f0FSO~rPvN4~u!Q1zbr`C$;@rA9Dy{Dgyy6*V33zFvIgEq0E6 zyz13-Wk9f^?1D}34E*(I?=KnU;UmGanOkbS`C;pdht7w=vL`Z&c_8^JwzDH68Xd%; zT26gss~;P(oski zjoi!?xV5R>|D1l=&)bJ{N^3l$<8k#EPrK<1XH)BqLy!8lr~qUnF+K3mg5INQ?tqxO zX+NP8j+gFxcX;P!QP5Xc>#LCuH;dj}uyW9w84q4VIy}nCI#cl?_*Esa{DtsW>au!a z(;wb$;j_VCi>Y@Xy@OgdoFHyk5mU>RuAEV5^@ZtSlH`YR{{T*Li0gQ7Yq=J(t$~I!FRHA*v4u{)kr0 z<-R#328Vx03^pqxvG(*7v&^-RP+b3g*^=0@_l3;7jac(pphi8*xnJB`>2qx5`jdwn z#PpZ`k@UORxxSQ)HeMo}JmGlX19HA2^U<2(>dg05HzUKlZu@Ee`_qjTS`_Xp3wmSK zwT`6fPR3^^JNG7=JRIqI>kKa#4AQ!O&i+8u<#xdz8Rf%F7xO#mXU{`<5%MX#J7X{` z(-6pvCVe165W>V#OZK{_{~$;&MOD*MMjPjP?|d*9=X@9|GCP^)N_yh8AL_1L4xX53 zQ6z5#32RpXnGF{(6(J&S0=8vm_e$N-lIVx1m}>r51<~v!gp%m zTB{zzJ9+07YFs}+g5#iU$7UzTK1?SqkbgAk_dgo~{a~TPdW((Z8O7S=j|u8qKuKHE z52F86!Z(Vt%37+JSI%1Zd*`1L(Oe#xN%Hk|@bZ)e#MaLP=fS1Ok@^00Z&Bbx{gi zyAKWQE;VKXw94Nh8H8KqKt@$ap}fIJ6>0=~$V=Zx62>dN7B>)a&&}n|KwgB^I6W7G zsm5-*ip`XQ5@O9BmXR5M}OtYbY<6{_L_PB7jry(Hjynx=X(LkbY`H+b*I zE`@?Kt~C&FfT@f@3?-8x#pUGh^%LPaYMXO`$m>|}jNcN51din#H*zc!nM53@GMsju zuycl2KCV#_1p=Ws11`IM!Ewn=l>=5V&6gC*Ec_s>ejt#BgR=D0`s;^zt@)sCc_!4x z5RBbcX-a1I#>Ws&PH+L!dX~`Zf4Y=!?*Y0ZVB4(hL?J>yM`kf_grl6VXti|Q_N(&g zeAnS{PP8$e!r}}9=eW>x3n0eJrQGWI18o{Z1b>_%*ZlehhD@6OYHTIKWE2m?D-MDs z(1v=jQY9>0WO-acfAqxnOJhD8{BCcbC9dqvHGE(VFe;-;mLH>B9GfC|vOi*?xk@x{ z2w)V;42EzjL89_I(d8`)Z3R+vP}uvu3R8yP)1~7xP;axT&tJHceCuXZe!RNc^gZgm zf-c0#RxInja@G@R#~TCP;d@bM`ri}*6W&YC8)v(wU|o0@7B0Q44qwT&m>B6WCoI8v zp|hl(YyFQT1+~(5hchDNu~hY&@vs4TG}Y7Hw88)M48hIPSSf0sD<7)0Y;4!ZSm%Y2 zsEFpLLFK(ZdM(XP8qJmy;Mx->qMCLtM|C27Ttr{@@(>80+V1(y54OhxolUPp7CN zW60k6ghBwI2brHVQtyakcG{zJ-}eLD796V}xicUY09plTe&-q$#W&gUm477z`wT={ zsRlRVIAwD_Q+8D>#f+y^?pi$j%mWq$tk3|i2`LrDHTS9&e>EN<>-7KN%)7Ctax)-E z>-~5I(!W$rRXX8szp(~e{K-2!=0Xo=cxh?>wOL3G`5zmCb@`kZ%``u5S;33-)ES>9 zx()&{qrna2_h)k{APWKKBMQx6%0n#QviNd$x`8{{Y`-0_Xms%21%4 znTC>7@>E8*<#DZ(t48NLE!NV5cns}K?i>UTRQ57}I99o}ntB2@XHq;bd4WSRKs&!0 z$};p-3}8@uWX7lb3ybw%L6;746!4~P?1P-WB+yrVmqNhUCC^G>d20P+I43`&6k;fY zK$v@Bmx$o_+W>h{EBO|^9k1Y}ui_6yIAZlW_?8N%{pkyj#?LaS1sJZ7s+F~qn;+uG zF|iuEG9S6K_W&rW-Wah2UL1bDpWZfpS&Sp#py7Q5grxqKBVcdbEp{M8GZd-{Q3`nt zBL*7n4hPXsm3>m!`J$Nq7{{Qb(idocUyxb`zU5VEkrkur}&UC|X{M z058M#eq;lCq$6M{+Hz9O$y$ zuL48*7vWKHBDF-cQ|=h8qrX6X7r@ij$LG+jm@Qub!x@7NK*#?GLHQn;a?woX-TfXC zh}>myC&sJXU!>zKHM!iBM6r0==0P&A13?p@!6u_M(fj1bOAXll=TXJQ&3E$yZ_N7> zJczm{y)%L!3@$ItzHcGiC7f2Ksa#5B!=Q7Rbcl8edr!2KtO@~VIyJWJ6MCKJsZCdq z=nvw$$Y6>O=_?!h*)wqmTtleI$g6$yFR#Or>W=kFZIi0Iu^&&+ z+XW+M2P;%HW`uK&_=8+Z-()68m(OS7y(<4KHp++q6i2nF8XdB^?M%Z z0vnz#rBc3{&Nss~e&X~A8TvFhT25FvVVzqDZWS66fi9wLh?RbMbU-~?MZpv22%>;& zD3^38MB@Y~#viDUKVytF|6~Yq1QO#__`6`pRDot}R(pfnbc+ZrtT^kR;CW#PFvBz! z+16XXON)B|8he{ldK=L^sT3UnSVRdGL{cJ@@Rv5dIUqkiw)qD|yUMiS(2p~Sap)jq z*7Zl)^LjS77Pc*f2{}o;!-Nt6j!P6Efaz?|qN>d{K^WFmBP+L7T@=pQdKCeOjuje* zBdjp_OkVcwV?Il#Sbeq!JeTSgeNQ#NVnXz%G@Ni5#$}J0A7w z7W*P9IuM!K0I7_(M^;omJ7A8y=R>Z9KbWvRrrvv*J{H&C^d-bx(t)dW*pYj4_qYSv zvBT6(%ijpFnjmk!H)(1KBk6poS=yfO9aqrm5*F?UIg~Op^|OW*cWdRSRoL zz8$#NB4E13VJ&H5Gx94wJg=jot@Y}FD}C9l-rL~kew>~3obcRD2B{Z(5H?%K4GIUX zdmvE@(}`0*oM9wF;Tm%asF(D5q)H2si_kO#$ML{E^7-r@Ph8pQTijbJfjGjYa%n~t zcN>5xy_8QU!tkCdIc0g4R<}U60SDGNuqwxK4vM#R8TQOjzS>WM?E#BRabxMnvL6(K7expY=H9!euqL>s|C=S4CNq}i7=3IN&y+N;|>Ri`1fzv zAR(9kzxTLH@PEhI{&4P@2bcWODj`rjvxE{}6q~_D6_Itzt^Qe6{HyqdxpLM}y7(96 z82>OnZG;z{dp$7~dpPJ2O>DpK!IR!hdbd0Ap=ztfuXuD*i7E7r(s%|DN{gpjNw6Im zg8oYJlGUhkJV_~vNrO2Jm9)92UL7X{;ub8!T8Zwk;`W@ZYxxRW9jSF5VW@`Cjq21%ep$0Ab=HdHP|9dM-9egkK+QS9)4=; z!1CCOh7z^`V?b~SF0?73ZsOv^c+A(k&*4J~2^S`C7u6RzzY^AkjlHkE0t32c+>fA1 zh`tcQJ$Lnc;l(^mD@9-q%7xyB@^uah5O;+ufF4Vd>))=%UiyiLEFqv+OezyqC zHqLrnfbfxrn6d%0E|%bJ0Q4@y0aqFvG?tNu_rAhX_`_`hhiRB4vDr%+w@&}yEWkvJ zjBH>Y-_d_x;X!tu@zzz>sR9mrl5b&l+&I2xdtd5>A^${{4M{V_(-;(PJ!i>g1*F8| zVfz|e^gH@sKz#$VDs}Cca7fFc*&HF4JnOhZQu~Nkpdm3OA}_TY*B+7QaF?xnpGecA zie+V7dxVaHN_w0czJa6CD*eYMq>Ou`7}L3$VQ&FeQJWE6HwO6|l%XgvcOeLO?=gP| z9)yP%;&&;8h4RC+4;83|YTPln4e&b-g>e9rL;cz!SZ<+`LaXn#t+?}Vj|C?uvp&`~ zfMX6@f%Z>^CaeJh@ncC9v>+xKj8>A*jHr)1y|`WP{h-%UV1Vw`Nl3zS^kvVk44)Bd zyuWo*3F_T)^aOMrNVVMJe=*aF&gHFl^cNXUPqMN>h$UBS9$~t&mlx+04Gh7{=$p>b2@14OQnoSnHv(^|LCxFsJjuv7tB(5Te9#3O!_bZe_e1>;tEDbyA#-?!3?l#wckrGjLT%(z|rr6%>X z;me(Fz@KA5OZG^a7dDZiM&&im2-@=q?O>Pkoo2vs@aa54O9hUlh;_F|EG>TFZgqfF zZQH|b#XtD(OHI=AlJzYA`z@}_<0nRLv|k9jv2-jf@d_cLUN{`u*7&(qPo*S>I3zxN zUKS?KbVx3Er!?g=t?SLGV+kJ@=e`my{R;bs1x?RN)_V$a|AY#mnmHh$xWk(=m-rmf zilm^g7>5=klKm4*j`f=XV{cZ*NU_{{Z4z+)_#Gs9!Szr%s6RN5Z|WJ@E;?hlR6cUI z$HJ<$>V>Lt3VAJlrM6JH1+LaxepqX1DWGp@7O_MHMN>1~aI1}Xl}2VO-ce|k-i;Ho zwoIMpuWwT=bzBs>`?8_V*DA{VCju8#)5~L%vC&#;U-}48+y(RV+W5m-K}+u}PgW+B zM>S$`ZY>p10|7bWFx-7oZ6w*(poxBHuxtchHT=GHD0k@{VSK-ZV~eR5sn+D&VlxUH zLXG$S68LjW7S0MheDtb&_Jna`z!p5-TomVglYdyN^N7LH(0uDq^VsP@H|I*X2eUBj zQ!bT$D16nhjO-@B>r)Yn@Fq2%#9@+1O=eb#1ID)E>50=#)-6Cc=Ns@Le8{_lwU3HU zh8@=8fb_};=s;M@38=vBu$CX2YdKFXrTd&O7?4(yPO!24z))6BJ)*);1{T_+aE46# zG7ou*fl4qOSDyQHW{7CYQ)vI++Q(wh=V{i}-*WvjSU37`rY^6J*eWJr?NuL|HV6C> zEjtFN{ipe8ns941I`kALzsJ%sAzgt<=M)E1C>;}cK*Oq`&d`{6zQ0u=Oh9JAf<6nc zv21YO@zr6iv|}O1|0MXac$jQsq|WmFGP3HQOaLbhF;^?`JDcVvwYNVOu6S}QJh|CX zYr3c_%j}LkL_oBdp_-`3@fvR9m@~}b=oXGyRdCbQ7quuWqc<>e7fLsT zjSn}uMGJE;aaT*6?W%8w5^-oOyQbyZ)yffMnGo)TG0?`IN2WM(L9FO-eHsMhqRii( zZcL|`4uwH|CEiMD@jX#-kC4IxUUz_SZ3ZS;?fGdC5gxX2o(fklgqU02`G9KCaqh#k z^4H(L!f{%at!ACl$D!`PcvgOUmu(@$>krCx779}@yT)u-3vn9Z4;sp{)6qC~MKu5; zOh@GLw?SBMVm~R##0&;~aX&}Xy!_+Fy%y`g@f(+tQxO|a>#o(kdzhqUvZtvH2?PPx zaucjcvf_xM%A&LRmp|FryN|CS(P3GNme9H2V^n8o`+cc)*~8|(MWlF>8*uk;)A9>b zhJHYh+D|kHQN0>;c+~n^d9LQ$b4}m-BF)y}mb@x|UuMfD}60~3INMYyr{Gss#tp*Td zK%nZC|Hxz3uKuMF46P!51-kz*NnkFJMkc_Z9$*?))luO3aqqBO{1l<6C_RD9#y*;U z4nKUNC~HIWeqL)*#{DMJg=v|~Z@Hzcjjv_k zu9@&#E>_RWVIgptd;gb(zy{U(Jtt|+@=KS=jQH-A4`=^+d&t+!BDPq47Yd(zb0YFe zwi#hkw{9u8vDGLt;5b$y!}QP_Zx}wh>DqK4&jMLeoMaRAJx&#t8c(nRElzMgo9)Eb z4)CY0mBe*qK@eZ%S@>jQ~QwT^JN}=#2$2YFo#n ztX7a&qm_SMZ&ixdbdg$~Anw+SeZKHdxLFg;8!lkxXtx9 ztRiMQPe}p}hfNtC_;%ISBLqF(O}!v8Ke+6DbNM2phF)HU9_G-yH5T@fU-lN>)$=#J zuN6_2!+ymC4qcDrufURg;SQA#1TKxj*R61$(N+9y3&RmZqr{KaH;vPg{7}=*;^H#6> zV$Qtyws0Vx-;nVBb!r;O@g|sOggdi#EVeH5vEEvTE1j-p@U&IVK-O*a!4(VD{w#1J%_bYVhzv$+-x= z0xfgT77EzsSWi}InON3t<@O`DBOnaceziet0d(to3xLF-%V%-7T!3!izT?`Y3gdq- zYYQ#F_3jx86-5Yc!}H@-uZyoTt%3sBlwqy`+_r3T0WgJEaj7UWW~bX9HcjzSxs*5v z9zp~9$ocVJ`k1gOFm|URN5{U#AKoGwYuednax|WhQ<_2K$GL)}Du3gy8y&pmu%Pip z6f8(iKvA~nP5_s36LG`4@;DD{>}{3Loox<^|u_^w*4F<6du*UE_j0kTp=SEWyQNTp2E)GM%Zkgj() z#uDf##y(L+EcJ2s8$4gu_s0m#7G>ogp)uRrciq|}Th6BYj9Ct>?wDJtJHFBCl@Pm3ly2ozM;*q#y4l;<`#*TO zEi|d(R_{_}#MBmZu-t*Sv$Nv#$F65(VTE?&!Dzdh9GW$oEhtPqaOs?D#k9$4(u~eZTEph$FRqJ+Yi4&ILE*Dpo4MX*H!|KX9c>uj zaHxnc6?W0K2$8+eFFCxDZM}P!vor&-97Fn{#@B!X*c_FaGJ9J$?8PsS+WFV0r(1c{ z-oP{)ua=^Ujaj*YJb$x2R+h2V1DYxL*mW&dF+KLa`{WhL*& zNB3J#X99r%g)h#W-f({)dV{ij35*r(Y*1I?5lnFYyO95~kAY+V>RjUuG7?NDt(q)L=-9XJ&;nwc=KiI{#pUyK=@AgAqQm`G11I zA4m6nE`OE13T*|VKD`PH;}>gMjap4e!tP98n_dR>BJTrNGAl1sKMRe%nx4{K17YNS zp|yVgM(w%0MHPeUnWT3jH@*LW!d5>r3WlKCf&uD=^JJ0qK}BU9^lY~KQF$A>?C$8D zj`fbwBw<|>rPV2Ducey}D5@1tfvhT+`z_mFc_S$hysyq|*aDJP1U@E@Wz>gX?fy6$ zKkkPn^*4aluC8#0dkaPD{fEB~=^iMHo=ht}IUk;X8L`CrdU0~_pV1KLvKRRvwE@B4 zzMaTWijE6SpN76mr)DMwjU%-y-?p8V8pVJ~#7W+nYz z1EtZId*QIL(hk>pT+h*R{#bz>71#11QhKaEj3|%Tf2aK zsvq*y6|e>w87Y|GM|ie7uQn>Iw#L^CvTR@`lce`*!q63edkN9IO+67%F7PjHmL*F` zmnMEhM(Znv5R9*H0rdseQi8L>ZF3D=mXx68BelIkfUZ;^1~lP0{G8iR@NPfg7PA)P z<0DTaNr;dChA^GUEa}5i1IE%E0nXj+7lq3P6GgUr!&?!zPWH6y7GZUHPxq2@Fb%|} zU7qYKwqEhKthn+SINTMd#|WN}XF%&7{SFjWmf)Hd9$!uN$E9O4OtZs4Fx7>v^w?nA zF^Jjpua5;+9|yp%%X3wjsH2GnBN+-DH3RPMM6U%EUPc+X0U945!NE>GIZ(#^Ip#a# zDrU#G+RVGpZzb8|JRD=2d~Pa^Lm%>YmfB+J&bQY($0Gzg#BV=e7nkQUR+gwgtl!R< z%nXmbT=041*8D2(T50)me?15Ynlm=Ok_U>D4(gf4d-C^Iz{zOwKj_I2^Tn0wr~i&T zS0+qNhi+;-Lb{lxUfXakwX0Vx6Q774iT_6ZL;*${Wq^<+T{{pDe-vSL79J~8#<#9QW zL<51GU(-U(M7VO6{-DkTk()G!@ijRRI`nR#uE8GKsvf=br%hOIB*LwkX4#i@2L63%LOeoL`bJ1kXtVd2 z=&R=?-9?;0y;QQ5%r@7R3cOyQURC^%-1V~dOu!#r_?U0`$)L(%`l5BuQxX2ums&pe zZ2sTk3&ok|B5Ioc6|d&BV5_#O`~=v9-34y1)TTtjXl3m%`InI zPtu6*+Fj3iK!ec7?Xh=TvK}{p@(-ZAvw=vvGNRdrn}5j$(FC%&wZ<*GyS1=nofl_--9QqyHU1LAh^H z`zj`jfW73-2g};IZ%`vLrS3xk<}tu%lrQ`H)5IUxv`-P|g@+&3@|%ayUq>JCTK#qJ z`q)yE7QD^A@yB-9*}7AFS`ODe-DmY8P13RE>$&ND+`;cdp55F#ZDSw|*?S|UH^A6> z631xZ<}g|d+7?_hupadC3zL3_Mr!l(Y#OoW?{)H)5e@E2%528K$|dqpjqm?3VZ5?g zujuOMWq%d}$9bi^V#C+NRUnN5r^lT}qt`2XNMQ%~buTBr_PREePKG|dS6x^e9-KS$ zRy|t3BdCy`-IVa$t!ZgIfgd3$ZF@s6G4Po<8BAYnp4D%LuF_j{tXENId#*Q34%MCw z_!R&75sB4ly&P(zbLt=4;XKmwu`d|vsYfFP7|g97XwTt2It@+DyF10-3T+-cX=3TN z+LJ{aZYBbgzq8NJikoHedB$eDV_sGSRF^hp$Lw*lNKS{2p`BE3>^*d+Lsa*1Cs)_- z{5$z8t_8DeovjTYWNIhO@;OyoL};Bd?sVF|vo&Q?)h>h%(Rf^+7&GH+Z!*+U;Jg@G z8*+8>$2iQa)ifUDrCR4@x|{-TfVJ~C7VBEFmU5{}Zd+w3jb+)FN02uvh^g1{wKuV& zwYIr&<#&psvfU=3j78P=?n4eT>Nkg#r{U!|IN9tdliv;ehVIIjLN}I~h8k^UA?Edmx zkS#(6h4o$`0rf0@guq7ld&$o&H!Rc-7%M)5Et(nqI0ssGo(QWbEu1@0rGCI%`3kuw zrT897Pi!-0km&8xkRY~MZI%HcF(aJ^x>a*!)_oF}>9%DBP;N(y`F7YvZ!Es^4LI5n4D9=ZvXoFIf34 zdkT$ChmMZ z2MM1PKS}~>a+9X8-+NB=M#6$m`&>I$Y2@4ee@HqHuO!s}k5{+4jxr(9%uygXQ1NPI zYG$UW2x@{jLH*{a+)D1WZl(rk4g_&$IB_QKeKYr{T$SR;fu=cfW?9`I_x#S`AAoas zp3mn!UXSy3fv;{!<0&J~HoLN6v@REtRL_L}xTVzPP(M|&o`;*3iuyQKU&z<^OAKq# zSl~3+TM+Hv>Of@SU2?#kg z{8e#c)7n+x%84Zxd%_N&!hyMee#2U7T3uYf9rtIDLq0K@Y%O( z;k?hnCkCpUultX2y;itvKs==*ahe!XbH3kmL!$}*u0_pCcQNMGq+R86%EhX#TXG); z{`YvBr8vMi4;{Ne306z_r|-+FN5;zWrNM^{@rL`qE5YE z&T@I$Au(mF{hV^IvGY~p`#Dm1gTS*OA8X5m>AM1~RBm8pZHtjld2s=xlfsmPw(sZ^ zNw4mo!uVp$HU<6n3@fzuXfZum`~%x+5i{icOycdY)lbepqj0~kIGcc5i8nfdq+8{m zH#>hzE1~;*elOZoQyPq4-FjVrS8472{?z#p0hIj`1#$Xdu9IKsaH#lwK=<1U+FK&J zf9bmatU(<-Hr1@>=k{JtwcVvsSU1dU;f=5h1P4*vu0*5dRBw_Kf8SS=s#%C{L2$4E zoFpdt2X3K4E`a9qW&F0_DHkZKCmPeDpv7eW zr=a#tTiJ^*02P(0LMP{YyY5~xWrxdA4?5nyHZZh1jNH71%?OxUW_s?(Y<#j+E^s77 zFXs4@gM_e>KGp)19=T*7o!#ltk2|0GO%r3fAm37F#Fl10Tq{jXZ?dZPYB0*E>sIM% zAaka{BI`5HlfeFQKp^$4{Po7m{E};lR(-SzUm|-p9_62|B&g}&z87tikiyB4 zEGqFCE-Zm~=Rb&y3>RYCOID{s` zWZv=l)$yFB=Aixco3Hno@GoSKmCVVR32{5>&Q;j}!z}yG6HW_|0RtWH#LMnOdkp3E zA9LZwVLw)x((jedlD_^f8QoFNQA+34p6tZ{6~Cv5A<4*?w|^Cn3Q$ChfW}=@Ob;b> zDh?#qxc^6}>qKpEmBO_N@xm$BRoa>cc&WF2haDyy8ydyGsh*8-r})_h79yN!EIV1z zwW&IG<5atc>m{o$?He8umEN|VUOiH}>rx3?T-9gVDA##GF=l6%QlTF9b#%!bBF)N6RmXXX=VVpgWKdvCxTtwKFex5|cbCveFtrjH6UC>(vunFg&g~Rk z?xE+YF#4YdV~jU=*@CO4JtbuFf4?$>*n92=wt+(oVx+5pk5mn+W1xa=xwrh7HCX^f zdI&TGKtk)dAbu`}TZsiu;jbTkh0xT!;0;tAq)weSbe)TfTWZjmyyZXCK^jcGDjDkpOy%2k<5c_H6(C4;%a>n!IY6pVNt)@2 zI)O008R!Tp4T;SJP|)a`#QrObOl3C zC&CvT>m{~I-srYYwSBGVSs^;tMFHo(`0tMX=8P`i5IEO%3kl4UqEbUs5nh32cxmOy~?}2XWR< zbHP_+4op$(#lLO1rCq!ey^zfhxY9m9GcAN@1BvdbV;`AHVYd2EL&Y7wYdl$2bqlwk z^Q^O=CX8~z1C}gG9st-(7i`SK>_(prc$Uj%mqfj|$_7xA*evoMP{4HvcGC)iHkDvObJJyb0 z9`L(lX(3XC&Q&)_|HHbDd*wKnPdYaxpg2lJmYb= zYTY}|Kflh=1Q?l-mLp@r(HbD^38;iGLuNY{`9?{oQwK> zwj2$Th(4vFgHvVc(OJU-Uq&*+h(F^Ibgr)_cvZ|NVwNSPwQ^3*~xp}!$DoqAxEl?k}`N!);#XvL{AV87ULGl=41UNEnkUm~05?5V)sH%@$@M0iK&A?Ar}o@`(1=SGdhLdcvYqhhkQ9jL z13BszGXdCMH&q_YqtK{sUVR6ls;x0`D)>9z-C$<;u;1sVO3EoTvRudzeXwyZku5X+ zihGWk?hVn)M9o zkDm^vag+o)`SD*ZAk`zVAk_&kb^az00Q0u?^0+D;{gBgKB)_Q3&x;6>ihrT#mc>d+ za&r`v8O7{VarHl5Nby=HhC5^T%xDZ%aT70Izv4dM4onu|WdYzzY z#^JgwX#)Vhu=98>2M4;)7Tr-S;88FA%@r2R^{Q+{`Rpd*MK{E`w2hxsPFvLVxnxF5&XmgD~XowOB>vd!~OZ4#DgZSvHda8C^Z zMDliclUD`%^*(wNfs|0#Aw2T=c6PgMc0=rI(%iR9-*psETSvo}IAGZtc|ds4>QGQP zZ3M%F(n(;j8hq!j2N5wVxTQcU@XyK*4U$YctV(u8xZk%j&ES>m*-OIAYi!R8x{8@V z)k;4hPM6P@{vG#FM$UcV`bd$Fb?K5YyKY`DzjTav{gtk^PeEAId3i6WJxD(;TI+|+ zy9TFzdk}5*_qm9^wbTc?G()Og#rWhIcc0TT=C7Xy39cIi^gF#+@kZK82Q_SWJ_Ujv z-Rd_jC+n@@I+-DB%%|SpEQBRC#4~h?uEZ%w(GCqhIe`>T+6Y~UsiiM&Ie~~?whRh~ zhgNNvL)x+j{ywm^aO!w5Fz~wo5d5g4{SbDJX*saZ@Kc)LO{SVMFZYrxHylgr^gtXt z@4&s_A15ai;3qf~vAB@*0MZop9JTUNkBgV<<)zFhEHD8Jt2-aie5q__ceg^&WV+M! zYdI>O5-wFmh-oT~F{YX~+6+><`&vuS_myA%8637>$7r&xnRs9q&IqkIpz>~m0AMS zF9TzY-D#rHN9Lnc=sdi|r9yL#)4fhQQbY10ADWTWr8(b=W1)_rF^ZOTFfk4?>2Dfx zn@2?+6Bm74kF?U6(7@g&Jrg*t5{}CiEdTQEr{i!9x6slPu}U2z;lGn?W*)A12`6_eh5rPz(E;mob4p%7Gfu z0;6CfX=JkNNP|YQfc|S5wll>Qh`tu1ADh-5BW)wV;!<1X!kH%BSS#(?S4P*`1+Uv4 z6!{LjVP47ff4>x!t=h%*qqRpDId@@k~Wj$=@lM!tbJsinZ^vd>JiN z9QKC4xG@rHaE(>kG{{0|*={Au~D|6xaA9Ai0xeIKn^N`sEJRQ3iI5zkX^X#uE{|&O>+kfoDohv2?c^K<>h~ zyD6pf2XXQrsU{e3f;vbIAguL`M7l8&q&TajtFl-l%kn%WE$?`&eAfuiKZbd&fne)h4AF}xR<`L$Ws zK9J1{+rFc^Dk#twvLQUD<158swDw4r$rz}bNL?stROtKJ{tU$LmHHaNyy6a3=Hu!? z#0~tF-Sts?i-qR(#aRB96VU1z6BT4O5ksMp9%M)tLT4QL-A3ID4B_^>L*&wUfy9CI)m&CzaM^@=lD* zIUD(f*!M#K#b6aTVq2MQmhdw*hIp{5&v?VYX?pF6jxn{kf&%hJ7+rCz=$ z7kM{DCui)%_S2u7ZkQU0uK@?WZZQg;8}TpaM|;#B^pY2wF7#iJVmxbD$eoLPLCj?M zSk?3;WGj;&;Mr~dzZ}cI5PZJH2KKGHK=u$p000iFVaNWW zXqxK0J?j_-{eELwnOIR-pYrb!4Ii36p@%dX!NMGzeEZA0eE_zv%Qtp6&eVyg)z2W^ zt?)~_1uBgupq^&pf~T)yh3~A7H#&+k4=(<>kS?NUog>NHvp`Q~t^9Fr#}uA??_IO4 z@7hyJ1BvUk(RE(ugMd*71foDCvKrzoHKb#mh2B)HmA6YcuiuY{uWTevsFL!;J584} zRkAu!F2vF~pBDQE^&c)-t;36I`W^gqkvFXG33mAB&jBQ`z-m)8&)wBq1B#q8hG?ni|KO`pS^DBWmI;Ai6NahFJzR&0E3?#?N=l_oQ>1X@ zNJ&mwa2<^Lv9^b3nE18JtsT{77yT62b*#CpCi3n=kpv!p)f^LEp&+eDuCrG&@b{4k zl8JfTg#Tb|)1VR3Dn{W9fVvJZ&f%J!nx}*0VoWVGB#!4X;p_O3RCbQc=j7 zzBhL@$m@1rY6CO^m>1WVDJM&+;$SyI0#Y&dJ;(D6mJC6C$H^vv)|rg^OywBINXvv; zO!PwXxp)em=ahJ(B;ZXUFrJB8Ga<)*=ydGso)BN%QjjL86W?I12vehFZe&z6+6a{3 zF-dR@=f;(TAI?p3A0(#8S zvqKG|=$Ufhz2@?>ozOvJh+RCZ^0d$SmR}@2RES&ixBtDj{k$G@W$)NbjM;-m6sjHp z@XC8Q=kJoiD3T87h$l!h%MOg+4aGhE%%2`kNlBUxO(0Y4wXHnM-M>b*2K>o6h|Kiz zX;C8vw{Vk3<88B0=jh|69pre58XQJF@)SxcNS5>b+f>Qd&H}|@GH%~7wdBV`g(Zzn zS|$q_@+~xwzJVY-X{1|GnyN(w91io@PBYMCU2+v<@-YysxSiXxS@yz}B#5MNfS`~` ze!I?1gNKKW)2_mgigD}=I+8)RnjLUcm;kGq)Kq(5M&Jlo8rulJO*|$VE%H(;iG?%K z5TeKY{OcQoZ`b=iq-A@^BH{4bmS>NN$XCZ-!T&Zm@McEW)@h;0i+9llsv|t?SS_7w)B7A zh#QU%AWFResP?hog_)i9*Y~l7`y(U_YYHzF!FKty5ulk>57!5)&U*O2`G`5#o!ztf zy@i-JFs%2Sn=Th?)^~ffPB`qWJNPxRxO&jcPgooB6#g7Z{nn&-pHCZk7e-qcOT!y3 z+1|6?JR|->piWzi3XcgeAEMsvtCxkimy3Tl#-ZhaeMeZ(??6=UN6Yz-rQ47xbj-zh z`0DUcuvl92+P<=f}Rn=Ra$#Zi$w~nbNO}3|wj`fe_p6wu&1Q2V^b$g{FVv^0@?j;Q_8_czR{@@hRkUqOncW8 z(?dkYkeI(Wae(fuyu<qkm($UpR-SI}3kp6nWkdosH5 z&2`_Vr$$zzaL(bn=KNk)-&yZp-f{g^zx&PI#;s~)?aM=uZr-*{h z-#*;07X!(;77iWH?CKNF8gXRS_{#m1zW!RRO~)7CpyR_?NTyf8cr>-k%z!s-=k{|M z=4Kisel7_l^hF;9q@YY89ZD-A9Tnpt2&u@YHM=VUMhyv=TibD*CSD z9cLL6al<7fRyBe+`;Z-wI(3fB1Hxtw_TL(Y&*}WYq&N(%q(sS$X@Ko+mwSDFtNYvH z!bey(x9IExBPQ4T9w&e!)6x7^Z06j{kE&NN?iY`Kalj{;v@k{|yHoAOTxp_$XY(zqQ^)cX@Wm&hRBYU3 z@fQvH1hd8GCp6~(_XS19ijSKL@btlOw`0IQp_{b=w5u20W_FYWx{T8-k7bU~O)n?O z=9{_;oHw732D9Zl*DKt@Va$Z9f(C1e$GSz6??~nSx6y(Nm z+z7)t*n}+YM+lmrm(nG0lI6_x`}zS zOxKcmN|z+;eH{1E*kg$N_Sc^D6VEhx6c;|(HX)+|A?%tGmHV(U1DC8Lw}m)U)NQW- z22O5M-V@Z`i2k5oAJ1{Tc>(u1E#3QRXXM;&xz+BK`8m*a)3Xuz$Z~B1=tSryzwP1b z=kI#{1LedWrOji@Wb>X=;ZJGUQyu<^b5 zS{v;1!LN^ZR=-Ql%$YfDN#r==WTvz#b9d74ENvmIv=y)jctgB5rXG47efc6j4vt<0_U z_pB1Nl>`O4+>?HKRDU;k)FN(=*}i*Y&|#yy;mOBu^ZB7{Za!O0a+#_QaM&2tYE1a6 zg7q*py+7bK2RH^+a))g-(3-Oga`e=kx~Y3U@#z(;2eO3&o(Cq^q~@xCao@nIGhZLM zliI}Ag|=P?x|^G@cHHc~J%%I}L^^NuIj`9sPb*SR*V1v%`?RuiUuCHxlyRf9#NSVF z^1vo5qc$#jA!c58xkXKFg1A%n2I1HIjK;Nbh<3gvK5t;&1~)6 z6wb(?bAZkwhn+ibbmz_{@LN-S)#C=u)3aHxhm&(5e;xsm_dV|5oluyz6VCLk;3EQK zJ=v=ccix&cvS8p0w?pZc)0~9&v>JYQ_yiG02KuYijYLD5F zweS0`o)c9v69|y)M5WABg^2ZZW>I*-e6n$_>(||itm`HIje-FDxZopOwX5q&Cbbr4 z6>g~VQ6(biJ9`!tmX6G=n`fTtzdd;De5FhJQs7*Dy6@V%x?7a90sf{TRqNNHw-~SH z_Wp8mo*=f@lQCL+^FSPerUieQNBlE=&RZp#*go2-4*1N>_0(~m1#m%_DcrDJZQ6RZbukm@{Gdyw%xXsKPGM|L@{*^gRKm-~nyP`d zvf7e1bB&<+gNN@9C~qM1o*AkAxgLLt+lRK!Dw(WSrm3>CwhN}}O3dDHk~u)1R|tl* zWeoiIV>b#14D1p}=Hoo_Mxv%OUY39JL=Srt<On$Dn6iSA(0DNo%KCGBb~z5{tl7% zuZ7wrG87k-PNf1~nhvI+l|Osi96I(V)HXfMDk=x0!1|voH{vt=LLyPAX~hdbuxbYu zNmWl(1YM@RI1){^Jdxdpk5&zdycyE@bBeEWqoJH=!f}Rx8vLlh?u%o2jQ?8LDpp{n zi*EUf$fhI#D*pAVzRA2fKT>wJa53n3tCCx>wx)SEu@3-MI_3f6tKLBH@gTi5{z$Dl zeybUlXJygXibALRpP-6rr5dEwD+)sekud@QpueSwm!!2dE&1aL9qTo1;|LQIAGtXb z`iJb9I#hH7V5%N;^`w-y+mfDj*(ZVD@{^{$JxJTpZ?RpR6tg7euGi9syH#xECx6tw zGL%4j07RLc@ZM@O1Ly!k)2R&q#A2{TJtZ4%Gu}?hmk?GEczTb_wks=elto3)qCE z^1XQ*PeQ|r~AL$!jGLIhO5*M8i5>i zT)|+d-kg?Pu>s}yldME$+hk%k@j?;N}o#HUZl1>&D?1ko=B;;vZS zIu+Ax(r*NkdY0l21gn`|^bSvEb~3KAErEq#>6-llWOSd^#oGq>-s62%a3Pdgnz0-V zqKie)jRfel)I|<5z(8>XjY9top*eC>U}DE{G#B(^L0weHDYq!4i!CECu%G}{RDkxU z81U3W(Gp6D_3{Y}Ca8o1&eN={zQy(<1d{gdD-wY|9o{S_hHrYZawKM?7iEOo%?+G) zaHWV*AUz#Vl+XK$xj=EY9;%Bwugl}yN9>j0MgtzAqb-K29iJ8zuXIibM??A7r=$ct zofS$5;QQ1-n9y;1HF$^EDX7Iu6iC28gRP}`e?KySD9V|(Z7;bl2SLU zmGO%_=vP5RW*SL^%~}kROq*5ZByG;L#FE#{=~5gI}ajlK$zNvjo=w zJgw`&)6lNnWJ?Dwun9kKuM}336ykKGSo{F-ejz?3N|ibbdc{=tsn6O?7=Q6eA@=zb zpQr_QcF|y4LI%61K%6y;`_GoNIsbGDBK|q+fC|?ql_6Wy-8oYP3IRZ}@K|5MHfWGE zfU8Ei@lRh%hNb90ROVrb3WgS$eE14?sz!4ibz;-NkkXh9y@n%T=9H|O3hSafrGe^;b2}cmSDh>dK47G3abLI6925Zd*aPI1oT>j`l0gh)?szu_|69vey@Y=*fozKsby)x zO@upp`FrNyg;RMTc&_O70F)AA@h%}VdVvI##tcTCZpQDb3Ht$bk>*MCr^R%js@8VF zO-}xWQ*P*Y#rKHv`#oTaseLD=*oG{Cy#{!(A-BpoY(& z=G!hUW-Sw%pXLpS>_}4-nM|f43FH)Cd=fpyR6w$DD(sa{RZ0xG@L~23TfvOj-6@%Y zjl*ked%xuoJ46c{_vy-?_j4E@SDJ6kl{|P5_|{>?OWHef=XFYEz0$rZ(aD*5XC@%s zgN}+-9<`p%`r2xwJapBgpa=p4_?yTNsMI4aO?Tr=tYb zeb9ue$tY6s{l;(i>QwuY*j@&*lM!GnHq>M3hLjs0p`#U36*W~yhqZRI8j=M`aqeKN zDY%mCU42g?Sf=fKxuN|OAKXTgxvS2tHJLs6qR&PXA-W@?fh^I1PKd_QF2E^h3ly0J zf%WH2QE$7ss-5-h==i%!7His1PW@b#iv$b2j4swU6)-r;_wtmE$t|JNkG&8~f{PmQ z4EP=G|2~&lS_K9tY1dH(0-jrUK}DdZQhqC*?a?hq5yOvi@E0wW|Ngc6I$@3v&f$ke zYEiGmUv?SW3*Bk`R4k?n*sq?$F=ZUqmiL_*WgpL zChMaw*x`n^oUv-rM*7pW!}sm`KM39M5a$9g!1yrw6TE6)oyk0m@Ohpa=1XJj&+8-# zBzBTbi|51%xYWFybMYnxfUhRlwn2xYj8@zpxHSeR#^@hjaZhoX z5ZGn`KDPrYnyG3DcE79v+PE8rAn8)xT<6nt@ic0MR>~u5e-Rx8>GfmFY)Q{kZN(Kk zY^y;CwBd|IvUbmhXXcZyzZv~^r%LM7gpe49E|C2DGj1;$F>QYp21d9z-(1qZ%CZ+_ z7DzoEOo}L`=5}C}luUc16Y^*PY~i{1g0Hy-y;b%G-MU=s(+rK5c|Na5>fVHN^N@U- zzoWr{1Xlg{2hR{2*$20RGu^O1N{hcT-O6Vgf-@Gd&en#w-Tb~w^@=;n7ZiZtMyI^* zslT^lo9pj>-eAtp%VzZf$UQ@1R%$fbyv|5=lgGp@ zxZbicTLr=N6Vqv3K`!eDb-xjsc0JqeyOo^$`HlsV{>l$el}<8Wg;jYIQ-`Pb8Rn$- zDTG@JSt*5JiYQh10)X#^6Pw^3bG{a|%A1|V?~O$x&Ahfj9-xD4Da zWEG5U493UWODG{gU9H8A6}BFBtDdU6X7f`a+N+M+Q6(8GUcRiDxv-~%IJX-Dm49tL z7o2KvTEmYYyY<(SS&Q7}pCd)5hC*E(zw7a-OSops8L6NDV~00U2GPzYO8^kJA!_zk zr?lSQiJJ}6R|s+tnGU`4J9kff&3;X(JUwdlnExP7SjUCn>zGk%KXt#_RU18(YKz{u zL~)4T`YpnIS<~va)k2Zwg6poYXl3aq5kdBR$twluP($RxZ1s|}x-GCcB03*BCo$=m z$k9X8a6>H$sa5knlRhR{bYsI2J@-OSUYFH}yR%>Y1i7I$@fr1fJy~ji<*VWbHNRda zG4F<)V=g`1@xpklpKHjhkuq=USG(lVo1<_NI)|)MLyR}9$G7h;)eoBenzLWn=#ih? z4r`pU{MefZ?PRnL+{ppz$VpyO{LZhD+Qt~q+1a93Z<3Oq2jeD}3+{`q2w>++U>=Vr+a_5=}Y zcY&dRrl`OyF?%JE}M_NgvL5Ox$91h z9hrLnQfr%kk9c!Egxfhzn$MTElO@K9Db@3ASwuZZQdjS7M2#TIDOaiLbTU1AD6(Q{1QtU2L)%*1uhZ8>;s~ypQj_ zU+TmjV%}b-#W!q!yfI=LezwL_Vnh0Dc>arfIqdMPn7W>{DknebN(UP!jWMfWc84GS z^u-Si2+S>c^bLFB`kznkHFSRf%XimSF|O$UwEJP3YL{19+#r1V<#L$9<*tSuwg36o zUfYeh>Rnjkof+8_00i<>m=9|cMwjk7<`^~NntdAa@2pK)Ue0MQq7A{0wpDt9g-xE0 z2=fNVDL%m61;Iz;sdw!C#7-8hlxY4u={2R0IbsU3}*d^q{z+(tZyDCiSfvP-<#2?{aE5I5aUO-mgwf>k~r*IEP^ zDFLBTxQ`r*aMPCFKq80fHn?5TY zF7}v@@IXi3zjzjA2Kjr*9BK-@dD=A89aID%IJBgzurQWT-F}Y=pt;(q=&&Tib2~zE z@iG1a24W`-303Iy$6yjl(V_oJCpHyX*@Tl2#8sUtl~(ehappwQfl9NX!oP-VlEqp8 zyVTiL(WC~8vr*TOHi?h7J~f+)xlZ?h>ODFh098!rw*1Qh=jZ|%1N3alD`{u|yzwXM zmBNs?wp|kd5Md7)P07S4i4U)!?a@X|jWLEb<|Ak3#eF1prow5>f&4uzd5G}J&&oe( zw-C}Bov-cy^j%zduH~P;BJ1u`xJo!z4M4DzfI2^>QR`xpv`GxndMIgu54Uc{Z#_uO zQj0m+8COb*FWB|@i7u?3pE1*N7A-vgR4xT^rbIFN`+ZUBPQ5t2Vf(=O+l3P4cTeWg zm^VMIe*bj7QTDL7(za{u?Nyu9hPKe2GzK+!v_z54D*Yhn^%u4WYZv&`j@h^b4~&Wy zN#loSk~-;z6jYd1G5`P&BQuWvFV#kPu-KbjM}1i`s!Zb9#EM4QIm#q1&fqHA9>%n{ zG;!;s%=P;Q%v;E0w2_6LGko#6{J%$d!gFVq_-{+72k-AE{w7g-I!M7D*>jly%z^la z-(umWxP|lQF@8t3{t*9h$HRWZPdrn#(;et+{5kRUg>hKkI?(W+2&B=^zRmZxvSFdF z&aeA(@_qGt(uHlhpdxnNNEDqpwtx3-VOzj65bU;=YBJ`vm33K(qjOb)RExtsVrc`u zVd#pnAx36~?c)gR@WyloBqQuazo$M;P)qo_DL6jGCP>J-5dadJJb;sT>ud$H!+oI3 zYaH3z#X(qSEi6=@FK2&ImpAQ@5B%8yy^cxUpLTDZQe7K=*JeRrZ->*3VKt?IV}I#f0%+H1OEg8F(YIfn8U@ClvREACE_tNcTt_k5y&`t9KdR zZ3MOPY!(77;t8_$VazMQxF{4PE(Vlf_5fX&(=_iTa|YdNM9G1kh&b~S6k2Vx?rVy6)$EKrPKgJZ%p!S4Xc6+?zR#$U({JT<`m!f z+%vGWUA7D}`(pZG&+(IpaN(TJb=wp5$}<-LuXxks;%m$P0rTkNRY-mN5m>x6Qkgu;pD%!pZjgR-~s zN+0_58>>dP#hm7{CEeyqqA#wfIyNDR^sWH1Itm(SCafz=7~AMw*h0Jw_0`h8H?YSc zUanwXSg!r!*9%1R$HWsY)`_!f^o%D>Svk{)f-B4T&xdaYL$Bn3YR|sGH(Cc&#*JS& zPH5!2+{}2mA9Goyt|_^=&Pv2_#;BOs;lvo`4+`VcULIN|F&n4rgUi*jOzwO41U6zo zyV5cf>nSnz?)^3=R=2!k`irh=!zRjay!~BN4-d0s&-yfK4Lp(M_ku0)o1Wx4qjR0H zn2EjMNqB!qT6jiw_tZH$GGZV$xOO5>GvkJr{}(LFy*=xaYMY0u!r*ZAGi8{C<6B}D zpdZ5D9wtpOW6y*#>dYJI1Q^JT$)CPXAQbt>Bts-I zVi#;#a{Z8Jx&f2)9A82-wrs*j=?pti#aNNNU653mw4KYx?>Gg|8!)Av^L~D6`&@~n zs9g&%*7b=%xRj_hDUWYG_-kmqp!~t|;L7%%{6m8+K}Ap0gRdJ?g{q6KZ?%zCxB8P} zm6HF-M*Tx>gh&d-Wdg`0l2*d;rnUn^}GG#-=DUQKAO<2VEpJs8eF9UQ{{FZ?>rnC*{Ar|kNK;9 zZwgVHQ_aX^vy31W6A=$RX6$~Sa-;oVENwY zr|EaCYDzr5yt!CC>RjeW_!3P`pW}C;yP-Gk**^D`N!v0~bse;N2XepU4k!i!#t!(y z-`~xa%8pW(CGG@e(h2@l9oHd5!IH+jkAWJED7(~D$Xc9T_uoMruoRD+DJSP!Sp-tKLH z!kU~I{S6DXR}u6RepNNRbIGDjyBzgy^_9uSiZN@OrZ%+%#GsQ_N!uKn`;7Dbl+n;f za^h;aAdK$-sxXUO?%K}oL!5s+M(W`XOG|@?6YthO%D>BZ)33)0YEPa3pHX&KD`~3t zq5XR6IiME$b_TTE^Q)-$i`w-OT)QKF`ihj>!iEpPIovT}OHc!$xhE-jie+JR?+{UP z=lQc@>Eb|pZ{ieY^xq@VlvhBR0wA+f$zIt9y`Xm97T0cw=UuUK;||eLD13l|#*(u; zS88Z1V4P61A^a>wbrFWJ-f~T7C`@XcQh&tp~dM)Y}_?(;Ry6 zdVyZBayXD2tR3;ve)W0q-ZSFU=G1gCTf#!yCH{i zi&=ji|J;3PtuEtz&xP!j!&fVk2%RpeJ+YuGmv`T4skkjXsWCGCv?{2(5N!dt@0LO1 z5ln93x|A2WSN@R5)^LtOf z0oH6mh_*Sb*Hf>Yd*BX}DKo17vUq)ACxCj;)`56C`6ausSlm80f)h4Ka?GP1+~IcF zyjcnL!?q4J%*^f57Hto8*LW@M|NL|(%{>?mDsST%x?#hZ(y6(XHt(^cPAd81_aXRk z?}KN17)FG7J4Y7uqQa%dz9ckFN!V8#tcLsHq&0u?z&Y0QODAE>r~N2XNCQDn-)TP! zv#5kjNr`WOeCqzwN&(yCWO!E{4u@~C28rkz0s}hy+aR>3bA-h;_Uc(ArIA!%jwmms z!i9rTG~vO&6=_J7^_wy2uArEhBUb7rR#=OLH4c({Ev~?z9CZ7t!DafQIpx7y4IzUV z#S|U&QB@1JBIOT&OP0qhf05xR=-}zEcVbawqoAuzyCE%X}YWcijnan#?% zfFUVvlq`XR#9a=c;bHnC34Fu+qQRZrzE|(*IJ!GEw|EJeguW>zkSu21gx1@_;J)i| zb#w~`*&<`7qQOTD#YlxJ6!;M&nU&zy5jEg>f{zju5*nXbOwIOH&MU-V2dj(R`frCC zGcjgv#C}N#N`>%6rhZ&_mnZQj+W={yg(P-C(CH``^$ry2sE$sj2#T4|lf23@vm})( z7c7^x|orw;#!4?6BC>(@W|;?)~IOC~=$ z;%1SobsPL?0fc0pm>$uzws(1RDvK`|-8IAfFa;*I>8X##J;d?rB&_=ofH-#=T0V{p zoKQPEN}HclZ?sAF1gQf=hH;=EkI)1wExAFXMrQ@G`%DgC54L$qI12ii-e@FaFnwE# zZ?c=vS@z0hcy0WariS8%OqKpYv>ZDTeYY>U6NPLtA!$vWRb{rgx0mGZdmS_Ql#m`4 zfNQib)DRz@i8krzgE2FuN7rTFR6iayN5bmG9~3swkQ7_ER$#f zJ1u9^x4!cF^QgD+vQE+{${$RIfXTVt0yB(sf9#vI0MKpQLK{#nP&_PE!dR5EsaQb$ zbE--#JSpR`4sw+rtiI@?79E z1O96WiYBc?RT5xHeHJB=jsrEqzg|D>9<@ApCa-;_g%3>}wPvXF7%iWKADenC#z(SX zd`vqf#9bAja${|ULzA_?M=cgy%*Rj#3LNSI5IBhu@{(qM@cmU!B(qyn%z6(V>Qz6; z+OF_~!!q(+P1^Cd1=hNobM%?f+#d@b%Wj8GE7?kY6(ci{Z>N)V(Rl zzYRp6XrMVSa|JUXKCe`V(b1>ApB+Dr1uzwhQz)W~S~T-coc^NId9oFT0axitHLN|6 zI>!0>j;wwakgPb0VZ&9x8o0irjc~UT{b+W~5qmISsda4Ix%X6%tnk z6#Hk%;%o-CL#`_me17Jp_U2#SIKvRzAYQbV>(E@+@QwiR2=d(0l5Yvx0G{84n%qyE z-|`dP1~;xsr>;~qMEog00#Xv`8ih3Pl7#=K3@!h*r15s z0p1Z^jb{JEMIo2e2c+?9tEItwR9nCYS+$k3r`yOTul;&Je%LB5gpW4<)a$Z9+NOQ> zG!7))_e|%=xWu{gNv@W?gdaEk#t12AC!bKxtmaPLFdj%3GgTa^gVlq;;kaZI=$}Du z82O$#>*qxjfaaq60DnN0rR^#94PECKB#rKLy&|V{?b&7{W;a3Hz-I3AuyB=%)0&^^ zmSc_T3|dx5Y6~Ymwr|WF4*dUwS9brqX_VEql$ce^F?z+bAM`he^Zb7igU-r;KM`V@ zH}pCIE#*gNeCG<;E>(d45%0TOtI`;SrC~ikZSgrBH;cVuCPN_bbyHJ~H)B``Jq3un8La}Or4ho0u3r^sDM3O_ zqhsxrWQqb>hmsQ0tV1heAs8sl-bf=Ry5q6sOF}CCs2~8!{~AKiijhetczon8a8(~> z0JsC7;eC)vf&pe^wh+T?Ashw-!_FT=QeXxr`G1BZ8A`#0Vn^7|i{xF4uW>-qRsetq z(nzLQtS-+}Pyo#KHEWy~U@9^-Mi*hgsk)#%a1UuLVLpjnNfg5;a0zOCT;J!rp0goT z&pXJ1d13c)=toQ6nUC~Z=(0Mn-OQkOWqW{>VqSIORKW!}R9&$?In35%q{+#-B*Sjr z0JelpK4baQAWD9L{t)PRRLd|~w73=)|8%viueHOJ1-+JZK6)YC*KHQPbDfA@zyG`L z+xO_!zf=$627_QywLL$$vrE9e2&chIL0-L&qNVnf5r-X2Tr{Ui)5-l3XG{(EO?T~u zu;SdJTz?gU-kdDW`161U7K$By#<40sHwh`S`8!!K=43zjZe@e!Ez4m%Uibl}u9sCN zab~)GKV$9DdSB3H%CP9fCa@nm5y@l!nt^wlx4IO8x5p&bD$IS9Dkd8<>#n`zzj6Ad z{WY!ZS4C@TUr#YS)0+g5MWH4VzT4QHt@{x|sJ)#25hGveV zIK=hu?HaoZB45pO-g?}j^rORB(pdpZo%xs`^IJFX*2Z1_5x5&K7->gizt-iG4e3Ew z>ZaJ;x#>P{Z1VS#hikLYsa>1qYR}HV?Z9KnODvc4#EDK_%T#zYP)WvvO z@3j{CulR3@<6lAsyz!>1!CamnYbA+_$NePZ4Mwi=(V{tih_7JTS_MY?ux zzg;l)!~I9s{Ta+oofGQ&qBA>EY1PWzVmS^>x5ga0foGNTGFG|xAkJ6QsiD8KvVP-3 znq6Z9VcXsr_3d7&rcQyyRi!Xr5a>c% zGYjzGP0gj!?X~YmYBy=K&(c5QJK}1^?>S;69n036#0Qm69o}x1?^n%~A}aohaf;8s zA&IE9(zh}~m*4BcNdjJv0PB$=aY{yZPzfoHU)ux?{R?7n=Srwu!1J|-K4@v;MGkP- za>NLd<-o2yPmpNnac(sdNkQ_IIEE)p5=?+TMk`?ibc`i@`E@6odG~-IoO$VJXP@m1xe@E7l%KyPA`Ynt?s@0nw8TG%M(Ski#qkwh= zvxB_gK9$YOEgvXB3w!t`e5F|1X#K8d;x$x@JAC^nXpZsE; z8;?V#`gHkMw28^1i`dqX|3aovcsM8 zxiDrS45s&Q42uEcPbA2Ccq)=NKvuKd1%NK#o|GlSn81v@SO3j@u^E;Wo>knIyT$m& zcr$=ecq3qv@JplD}t>5QAxSbN)sD z)7gsh4eMd+S@D3rEFL6k-+JK41lV5u1#S~iuW;|X2l4)IDMGR16G*e!iSP$I8xM_zg_; z)_wq?=T*3;V>+h)sn9+m|85OoeewvR_1o~}dxuNFi=dB(H1<+76+U=S*FKtaAp^Ep z)kxqqNRR4WfIsP$;}%q1K5kt0s{rW!_Ij`jG?J?Xb~2U}wx0Bcn5X|<*yo`SAwGn7 z8?NfhDQU}7f8|RZybW60s1W^z+%1{pT=FUr@L}9bn@FFV41vxXWL=W%41Jkl@t0=0bBCAa?Kgq<_F=^R&#NNv%=qmmpmEO10ePVXi|cKo2+VOdSQVoIidiegAXp z+`MqB-KrAbQVIJhW3BSbZjpmy(E7_GDO{A|?-8f-tzQ6D1TbLvdg{-mI2G}4Ntr|N z0O!T&<-$Nr+x3}Nb2>-{?iaz4ULHyc1zNqOaboTKpOw?U>c@UDc%ySz+?@SJVCQ{C ztA(gRkeb?iJ=8*AO_xku&ms&gQO`uIeUKeFx@N!4HgZ}~vg&KOoz#5rZ>IdasHXuc zI7L5uM|eD3uG)e-#xm3HI6A zXjJKOfsmGrTYpiCzG6jV@&$o^82tN>FA4!9v`|gc*Q;(bsHRb;;71_kH(##+PtIiE zepU>=Jcv+fIn(tXyyz=Tt@m6_)=lndrh#GA3rB-tf!(@uxvzYiHrI?T%a93C=ML8m zUFyasZEvv^X}7ipX&lG9RqMP2dHMW`y-w7vT4NL`(PhRxyBWYG~zF~2Mqt}Vy=59oJ{62g&v0>HD3{Avy6bsz1S<3h>MT$EK8uq zsV&y`?~yg2-UbrugW$2f5Mq3n9?FH!$gF)}MvIj+$jAk`(FCC=W`rfaShke!IPc|% zmm{wp^+FuxD=B?Xs?rG1sa<(~sRh<5MiD#?=^tkt?;*FgY)d98uJ1x#Og=N*JMf(> zF+DOR$Wg5}%=V1UD=Sm81+ zA#*aQ2X(Ryf?Dz*2!(~J&+CpStIC{Apv~mv;`?+tcNl^%L0z}4^-z|u#17pt(U0ZXVC)-uL=*}>*6a_Z$YrX0P@wWxz3@=3_WGGJ|H|k)|kSQ%VnwSeqz&)mXexYP|< z337s){{Zs1>i*3YGop6s@xHc;Zd}F#Wj;byvK|?I?=Hp`J}nN>f7?1=E>F=t49Y-3 zKy!-i`!+Ys)U%p1UU-j^&Q0imQr+$3!w6v=~i6UMu zh@6llEZfIo@tN$zjp2FblWKZFcb=fAqL_0porABs#aZ3?OVaM1Ji~z%l5WGjyDHvB#)CQGrt0~P^*T)6!L6lO(~GY;Hv(iA z?=H7;Mc7t^y?N%LSvZ8TJ>7wm2;9HsmNL;B6A<|>mGd381!hlc*XAqPm7wr7=smM( zjekQj=e=_!!D(qfvby}uU17Rmm-C_85znx_bas#Nc;k+hnB1nb0~g;@7tu08b`f;nEm*i+Ink@NUlFYWxL9`m9{f{ zd15f@RkZn@wv9rKqlm_h{tlD0?V6N@{2o7LN1?r?6Xr-QP0NhtisrFvy6t-{(svrQ zrOyOJE!sK3eXOr3X>6x9Ti)c*-c1We-5c5rTLOc{`tdat>*v4YOgpU`X!jKl6j#@! zI|$HLUm`t!Tu@?6b}5DPCVR50vUd0H)<4HyI~@>FhZ?umKDD6+8kPSC;0ekyI)972 z3=VJAw=ET^-uosoyGYk%y^r3k0etTfk&IHQ=}r@Z;|;*E@Z8X6>G0Rht?8I&T{x6) z>ZkZ`$}aOUL@xvV&%7HoV*Z&pwD<3;HTSm8Y%9j>KDf2EGrU(nII?&;ab^7w^Yvl^ zU$!9h=4|=t-#v$D*jnqjxkW5kz>{m1ta9Zdnd>CP01$|vAJj;T|LDV=!FZw%l=fc{ z74$FH=g36&KDbfKg$qq$~t(fHl#zLxUitYeBf@Y2AS?GdVy_RPxF z>Ep2q&czSJ$rvBCs}h%QH>WU9mL& zJI}B_Z!Bxe5FY`AQpjQ%HoA7M+JiIJR{(-YX1J^v=mM=v#SVtgZcro%pXbv9<@j9F zut23v|6E6&foYFRrRgu#zZd6UHi4kpv#|j}r19~0Z_<hT}6&|x&xQ-pb#8@imlHV#Qt-vz1oWpWk%DE-+{ zP3Z`y$UfG0E3V?c;4~Ce%JeGX-ErN4C#HO;(25rTHmc-n-Cc?P8Q-DjrD1Plns zEuNK>jV?5Yk7#A3=KW!d0oLlYZDVSgsBuaZJB+Y4PYgTICDd!$j9KN*NnhcBwuUz) zN@ooWTpQP)0(y6O$#f%{UnHQf$kHytg@d~+OBkMnm-@!gSJY+&)?w7N#GDUao}6ZM zXO^#QK$g;Qf_oAYE0j86ulY-M%-&>e*fMh&B&UWhA^e?(OENHm!cF-a<#eky&AqHc z_EyVko+w+Y&IX^6;iUvchPuD!O|CAi_l#^!Y8J$!+B)bpN~;uUn_D#2jln<1=!E;9 zQT<|)T2|Dw31^i9Odf2ev#Lo%Dk89;4`BYIv(zX4t>^STcC&Udt9iA4dfoKV5^r)_ zyj2tCVp`9m!rSGo{uzy0Qu?x0+%GJA&7cTu1_1TUMrlhtm@CC>4r-yTFFYzy4uPTx z>jGx)Gy}H)B=7Y%T9QO=Zv8LHa_;K{gS4!xhyVRXI)+v=HQaP|Eo)74DpMOq3|hxM ztdAaD3!`MN%D(NpEZN(|AqrMd9I?ybLS?1sqxGvilXlFPgn_?q+l5S zIdQE5IW4fje?BSmWePQWqIThoupgmn2&1V;Q$CAl*_Qh~vi@J-up=9AGx$H36l&o( zqDE2`GTO|z4xAyic@gt{tybm#&`oKOyB*F+;bc;&3=h&$@5v|&4adX$nn;!uh=XOJ zGpTNFF(Vsx{A9VacbuLj=+0#*fK5}qm;mWWLqat-5Y`6V#bgyOe3Frakqx*%!wM#$ zdRzr@5g19Lu8*zs`6T~>5HP)}E0!=I0#rN$gO*{09f~J?^YX^W{4$NQs0K?NOU}@{ zgmZ2^_;?8EeXn=5__|kS(AQXn!^}`QA>e1}KG7K}9gu}qN9$Xy-f?^f3m5dlo3>6^DC8df=%1AdkttYNIVRX-**W>$Z&7?im1PIG0%HQbf< z4SbdDjOes_f}07Ds0UE5>53H`p;dfFsO+w&fRS#3a^6FNTrorubHP@X*u;?<852w_ z3+m?|v)QH31LmbwOWsE_agz3nm7AS!yL8~~7jBnQf%si5ZbIG_XecA7W>_GRJ&96$ z{}uZsUm8`S+|O`;KJc_c} z!=`X^+l=d%I91YpU3CnDI2o=_?Pjr*((tYiVTIFz&5pheOq3q`g`KkTY%P6)c;Ovu z-!|JPrg#0&ma%wbuI^gp=Fi7tQ+%DYUBds>*;VrDt3Ck;jrwn%9+K#aOW-MBmVj)m zrNui>Syb^VF(DO~UchT_A~TJt*!Oodb&Lu$GYyp1!qYwB*!1Ybf*_oDv8Mr9P8xhC z1lKdpZ-h*M8*P*tU01P&J`RgJH4-7$IoNT7d?!*Nmv2xLu^gX$>V=2YU27B4@{`Za z^4e|GJ~_AXCr7VSkhynJ7T|uWe6^=0N~ol8KTMpGzX^}6MG|Be_g+_e@la%oN$0Y{ z^j>dQc@tsU$tACWVMW@1Y(D}qgQnDcG0wh9Gy`Q_rP+0e)O5&V>KsHf7o$q4ac;QK87)1at9 zKC9sQ(*`oJ^eQ2ygTZ^KNYxz$l#M@G(VJnYXAY9R1UgHEIoi2C4nM_`{2N*dEFe*_ zQl7lxZdVZC2n%hDu@Df_lqUQIzxX(|F!o~F^4F_NcSIrY}(%73?e7S@&8 zWg5dccM)lla#GnRWaodSl#Wtn3S+i4(roG@+ft3{9DdwrC7-Ji29xSreLqo*^3&_o zyK7g0a4Ezq|4 z&n%UR3i?!xeP&dv5%@Rd@Vau>nQwi)%V2jS3e$Ays!#c=)4>)Wdoc$vexBKu|qF1ByzDaP0BO& zf%h3RsrTu=f(she80GhxKmF9F)-HBK2uohY0h1o&o9K2apYX=Oamj!|^`4+bBl z@(1??G_GW(TQ0*J$51ZnT}ElPVU&8y~uq2{nJ1kBONRcpLhvKKa+6k6QvfBWTHcPSp6mYfZ z((=7~C!>iVFKeM9TWA<%`0i?k^|L%u+0W!=1Y(M@YDqUxG<3UCimHW?QvrGtF+l-P zpn6XhTG}ZP3{C;hj>SrzFh~sWnE_&PZAh*2%N+}v%Xk{PWCkcXB^yivDSJfqEVm`t z$}F4PnO4jz&kKQ~K)uI|rNlI#s&|3ofvxq zNpsTqEFWw-I+mDq;VeGF`t-)|ej(V~@JT1*q|Imz;x#g;BYwcB?tA6A%DCrAxI2>9 zB-4I&pYbQ8l+4WO+$wH>yEVd%DG$f%E6<69U+hAYGOMZI9?%z5kt)Cz?A4R(uK8q* zB=*y!jB4~a!))o~7ARO&*7I^$F4a3vlqT$2Ia|T=;w`}D8Y%{>VA|WIabWRmlqrja zGM59z}aD$EZ66hd+rIK-$(Uz8;{p$6k*s9hl~hz#!^O(3KHV-(6qJ z&+cSvUrgc4Fie2Ik^vdeZn+`GJcCcTRwlYSqIcx)7@kPs$owK2}S8(@xb*&;AEiJ6l$fiJxVW5I-ZJ6ay zXG%Njj=2e21tfzsa+Fqur5JI_E0UTy+y6WSTEp_ZjZ_Ltm77_$-1?SKL`!Pu$7qoj z98c@I=l#O^T#$_DubV~uJx$*An;&>b#w_i=uGe90pokq`=UE`E_Mrtm&}T(W<0}HjGXc*1UQ3tk76IqTc_idDB*>-g>t`$GZ8qS}JDTg}?57-wEQYVybO}1&}Tc9$M-p!S>C+ zr(48KZ3VGSP3LbaHbYmQ_elY_b?KtO#^Ipi(i95nMlvHyg)j=Ux13|16_#(@*Yx((U!#wouW5lGc+&QARfP>Zf>XIJm?-j*%{7sDIrZj#Xenq0YMCHN zj=DnRznK`I4t2uVk`DeHOORL`Qj_`FtMfN|t5~Qbh$GoejhIyWB>Vfq8X*y z*GY~c>l`9}_7%uq*Sfi&9{{dK@dLB`+Bn_}0Z|2~6@x5CniqI)FgC6f(rHUR%pXX@ z!HTJnh|6B4t@$Kk$+S-aKyP<}0W7QZ!A#OZhw{XG^%csM#0-us2R6ez`o4c*Gj3=d zV7>0jtAZZ-!GWNOTeg>7pri1Tm(K&g>$^{W+Xhy+x=(|_DX*6pyIJ<@;L%QYtgko5 z@*J91NweQA3l9OtZ20++pa^z!Nt5~%^XK);BZ|eAj^lL`{5~ZqRSTeiJyaWrLt3|C zSy>%1@N+(0v(kWy=WhgsF%3@;4(CTJmF&V6TL`6We@`5|>W*090!W$Efdh2DU1dk} zkKI_EJKK*W7SE&p9J^}FiM0ACGAy{4Vve=<_7I`C0yN816`wUHyQ%X!FH&;~I$7)T z$x|N_uS_s|bu4~(ydIVle9p3sKQp=7S>pRGtu92wt*FeuqTGl@^Nz&^v{1(D8D?*b z5L@VZ@dygNA4T&<8Z=r5{J4YZmOr6-^xBEm$hiLtchl|Ow;7YMR;7#SkmW*o(+0Ep zt%=bORzB6yBo^sDg_QWj=&{nb?VQ)O=Kc)F&PndIH#wJX7DAwwxGR}QF~iB}*J*lc zc)Ta{);)`YlgxMA0?Qy{$ln>38xM;OPiUKFju8II_(nI)T;-O9GLI`^V6zE9h1qvG zc81X7mjnzke_cb&#^%Xg05}X10=v9=05$f#oW+wbZqPmfZWGD_1oDcrQS47c;1dXN zhQB)rn0<&`VqC!Km!xu~{*9j(@H{&btsnGL}_cy)<+w zg%8h4e~tDTBB6Q6Pe4As7vMaZzg%-lJ!M_e3QIxCmN`~qD2FP~vU^asQbElcRC z=FLLmdx(C%T96O@H>8jnK+sMQc-2!RX^K+5&yqRms?sYTd=_(UE|(v~rs7sfZ7~8{%Jh0~NNEtoe9DdeMkolzdL>mhM7=k&4h!`MSfK zfd7q7+r7480n7%e%O(9XB0>q=$~Rf0?=COglC}$}iH6M2Or+!UPFoN}mab}o(3Oi5(-^lj)$g`Y^@pDg?Z5880CO*# zI(xrx_3o0dFE|Wu=&>9-9(5}B*+!Og@rJj7rx64=7_VZL6u%z*Y^!&{hTJ2T$fzx| zN&SD0or?0ihx?y;&SL#+d2gdkY`vc5nqYRQqwK<(xOBaaA4^?Hb;b1gZ(%pEL}hJW z9_zp3@|5jJNR*wGahJf*+Rvo5n~Is)K&ZO4_oy>0-tKK_^t?&JMY@>|SdznWvYQ@u zyVY9>KZ1?~tOUBz`*hbx_p3^+U21wq4tiq4?(a&h)I?1RreS@$^98bnH5ZVmh->sA zg+0aO{$P6LGEmz(|w&+{`t>S>8nShXX=$M5o6Ae zq;@#^!TWBmxpK_4tU^M&6yIN6%H$aigJNSmBKmFv$el#9+pf057bN^EQn(l~1weNl zwF&keXy#F@&1eN#Inb?xCzj>oPjB4-Fi!8aSEhZDNYk1Z)bK2bVgq;uw)XSeW&b(r zXNzk4GlHVO4>Y{rzUt(JzWdIoqSmYmzX4NsfdWJ#%gHcu8 zIJd^k-%H^a*I`Q$jiK&eL`%xux*UNC`mrOc#LL_JQ?lpx{r|P;PS2^|-Z`&ix{a@- zMyB>9bkD-|Jg@iX_%JI~d){XTUi=^nQJ&MTjQMYK`03zf8*Trg+g!A9 z>*06QkJ_L8ao}&ar6t9TyRf;!QEtP;1A2aa-FBh!$5x5%Be&u0$rlo{XvgFq=6IIh z>z+3&qN)2{L+6#v{~XJ!?ZV)VVO{Y_tir4iSpx&W&iEFr`2OJaGl10t}zA* zp~t}`LLBI^4HGoF&_ID+!jGnr=y02Ry}Z1TCk`qjqy#lqxaB(ECF1p>(h}sSPkdk{ z*R3wY|1=zJIx6L>wf755`L}Zk>OGB19k@}9Qi`V3 zLgMi4mENfHiNWX62N`B7uNHMPtZClZltgc0@Rc8nKEt^;iqN3Bg$e}==G?z|0>3m) z`QQY54C=cyHvdcBxv={A9v1X z9Dm`lYcfP76toGY0GQxcRu^BX{=Lx)cQd@&T}A}0LCfyA(R`R02_eygH*lqNc3*tL zi?D3>N5?@BWut{3(xm^xb62e1KreW*eHosY^E8P@#cDX?3R`}yc3+HK2ByG(a zn(gkHXM_!fjgyd6Aj(%e-iYRYc=L8RK%OkfUtD(bHr6kTu#IOisfV2|rnI_>RQdVV(A@^L~;wP6i>CTAu8gSX$z z!Q9$@zIQI`AQ}H#6p4BiEF<6~yNY$rU%$&%TvSXXf-p5270C--eH{B;o97)sYn7cd z;iYK0Rli3>?(15~uk%kOiUR^}ec=2onc#ETvC;pgoYAlqx5w5~8`toB=8-!yl__r* z-efZmCzNn3Il7#b0`SJ!=r$mWk2lTUMwK`}Dieh2A^H8=xPMhKIIVZ)@CTf-83 z4hHJ7#}k1~i!lOXcO?x5?mf+yoS7X#(ngpWHlrR`31u1+?lOU>j1tk4E6J5=Xx82_ zThwrOq`1sGsNeKEAH=}&R)10k4xKs96ALjqRxHqOZh?2{E1DxX$-W|?#aObx4Jiv{ zJ+4pM;XUO^@(_xLja!O5uT;X7iwOp4kBhNx1PqW(xFt#|A$kx_-L?Dg)cs$sX7yxx zWrT&7{63s8*FMifVVP>XDkvn#orPq|ja~^pWv7?aV&rV`{s`e%%rcK;)M{unZSAzNM$88oH8? z_BPYTBWPikrcPEKMb2@bF2C=H_btY(Gy8p*V=3y|Zjum%tnP*~B~X~+(rAIe>_gBa zRNHpBSq+uiqCWU9_HyQuINCB2F|WXceu+g|b~v}9siBYiyMJG%tL;)0^>E5p2`|VM z>)hR^-gXoXWR`Y-lUfX^xep-GFK!r$*Cy*;%4% z{;ow)>knXs?C1>tG83{GH>s0nRs)Xt(3)v*5_~UJH7Vg(EJQU0ZE4Mw^_?p(ICM4i+uDzgM^vU)WKsBWW3yJ8Vp%k#a7@-|l z1`g~ULcK_EFHxXDDFiY|PNA6emjW7U=nuaXEIVSTaTYz0VR#CNe2I>4da7@i4>L;8 z$c*Z+!6l{z@?A!)B)|BmX%d?MSSS4AKPz{5PQ3*a&yv=R$tMSVZMx9bB65Kh&J-8V zAmH}+-@~Azu=0)4%4{rv;;J;VogEkGF1F@+kD)zi>d1vW%qT9fRE>*ExZ*0wb#nFM zQ-{D=cn-^ng(2hwHD$z!TT7_=T3-S7ljupo&F~A^1_ewP{jDorfB*WhXsL}3VD9o@ zJs!==#ypHJurkUjlT9?6H2H`ps?XBQ5$xcBFB2*^IXlCn#^v7)SW!36U% z4N-mB1k|HRYSfI4h_L#*q)>qzN;u>7oMswbn{?P`>6#A;Xna5G%`l*sj}Ln~Z-K&y zLWI*SkR`1>`L(42251>VKZ@@VCt|g~VEIiG-73-OcWfZ@;GHXXp-B#6KPg@e5!8F$ z5K%ud+2ffjCLr!JROkyS3i1jvEEN(I2X{1Pc9xgS`p_M{u@60XxO?eK!XDr8q|^CO zl?0ybE#ExX@2)yS^*dom{Zbf& zvfj3*I1uYBWwN5X>iB@3Ho*Cstb2^LCQ z=jS2DOC=cODz-t(WC_o)iiN7ssss?yw&D6~8Q`=MuUzuHj0<&WF!FqbzM zdx@mt$Sgxt*+ahbkTeS`ofiekNXb^xZ0hRjZd_Ni0!WCxQL>vCE@@7sO?z<}`#o!s zZ~OgXN;7oRC_l}yOu7RnLjx<7WlqqU0kE9OyJ}gy6fu!Sh`o{)I7MEi8}%(}QvLMLQhR#xuHx4FUUp{vkL{iev>C~0 zT!n9WK@+H`-X8pxO+?{nLG8E?)Ug=f7K_pH`4Q~t}=s>K-dlmEDBD?66`bQDnz{y9IT z89pz*6tTyZ7v5M1r_V|+YJvEo`8Sa*8cVC6*0QULN4iiAde7NjILqU)QbbjURvZ@%G#8 zBcc&$A^FWuq@|ayS|LQsfMBGdXQr{nXNNCDn|y2bz0q*W;QKXt4y~wI%sH$ORytbw zlmCa-wqCno@Qqvp205eoBGQNQdK3GUvNQqYx?s{*7ZDA|9SdtqZRE4A1c}bA_Fl+ zF*igre6@rUz0+SHWo3kcwy{{_@p4b~0epFXpZ4=t1)Y>%*d{)FwC4(J)zP^`yyKMzGwSN~qOsl;%s{i(jHiBLoZ6UvT-u_A?D zzpjO4_~Q}$e;tqIh7;ZD*&!4k)%t4#wNQmC0S->Dt1s+vK3DT+wCy(L26!UlhOGPD z?SND63|Lqb?b!KsC*I@0Hr_*4)R)|pIM}=B-SR!Wm8w9qnKi4c8;q*^bF8Cje>MJB zt<(9YVRx~#EwP_T8~etQ^eqb2ALnPc2%eD||)<(7ni+$c|;zCsoT=Q0R&5u?D~{gnBrt)x~~hY1_f%-mZi&adc)#iHK;aWi$l`0~v4@rSA_j|K5XUm&4mweKb z0bzH&*E<@$d!f#)j^00{J~n)@8G;r(V-l(m@aI^aWNy*`Gk9awHiU(-nY_h8=~B{D zd{f~i&?Vr22{tg6pKw$+*@{T4O_BZezXf7xS@@?4po0P!bFM1551b2b&MCWhLVUWf zS9B?L;*Qq8S27H!|)FQ1v0q-FH|LaSr=<= zo!6kgOqI#(3HW=dAEw1smQ|^O%o8=hI(%8)ZU1^s(c!BDk?;XepZ~TEBiN{DAoz?4QoXOW_!F>f0XK*hqLiAz$ykuXuw~#FJAbmI@05& zgv)xdwkAm;@sg@L}g~swb{)RbpW79TaJ*@G%vWT&F zD9>(;s|HU~>4}lsxR1<_M0L&WlnGAFF5B}3g=0*<{g7!r>S;g)ki5aj!j?9m&$WS@H5w$)95%c>R;! zK>i#%1b-9MuJAjv`Btd5$gkKJ!oH_OS)RYWxR$Th%HLK{>r)`69r7cNWeh#o`My<4 zqPHq%`WNfslYmlKJem<$XJtOu89VoGo@UFTwQOj z**0YTJT+cZ;CIQFScj=v4oLkH$jZviEUxX0GWS*tNp|Su`|vbYu|aXv zLSrYQ&k_XiFVi@yxTR;2_KUY9Xk%EPDt70yGvI)1kW%*4Cl8!{=d8)@sgGqpUyr5d z^Qy=x-%hzny?#S^5AsPcJv1?1#Iamd0A_{>MuSWJ12Z+(aiI+x(n_*R@c1S30#kSh z&b3%c9criafnCF|(f&)7bBg!-`s|lJXs-rQ)e;QjJONORNe^q1v-e(6&@!0P*$}Up z6M5iWY%;s+^-H1UW#`t06g#rSOY4vTl8aZ*mw(&prB%zWlx43YJZLA^&bR(k%wBd8>6&Z^;MH;2_fi^VUfL zJ(X|jy3wS*hM*!UV^+M7c@@*(!-w-`@SuIs{(6?35#iAa%Ac zP}#NE_`&Z~>2!;CsFxK0XM;2D;WV7?(SX7RkZXm30d_@bH_C0tNw$fj>vG3~LKR=P zfLbdi8B0p0Qo=U_TatFWZFyqAow6i`uC7&JrEgALsW|l^$Xg#``-SPa>sKoCr7Ae- z_53Gp63}loZQlUuaT#yPYCG}Ewt;JVH1&(}WgpoZOo&Ptwb>tg-d1~Bvp>hDL*JdS zz48tIOFVM@Wa8H70aQilaDU!Oy-BbS(v8!2uWb4n<|~aN1+-cc`4amxIo(^1Z>}?v zvt5o(0Ck+Z=J%Gwhdxsz6(8K%-ihaBfAO`IcCV^$xA+++8t=Ks-;n>wtN30Q+dJ1A z85`2izc|>(sS4=Yk?A}3W*1(1SR}Qdh5CB!$=#xc)u?Z&j}cpU2Q})!g78LLGQx zvezfk-=bZ6PUp6CQjX^Nwvvc(+HeeXALz&k6h)=@PYwY(V+G7%%FDq#-&5&!uyJmg0U7P2o2jh+) zi+w!s&|J4(PlINbvb&EEkt@+9%V=v-{?D-`qa~$l+nLlF>g!QE#l48W`R$M6mj)P; zekSqYUFF-BcfZw#@;vD43`|twC2n+%x72HVF@9nnY6R}yX`_fVH1z7VCcUBa2V>1z z?FK!cKC5<|dTn7#zLxQOA^Vb&uLOL%yHDg+9o6rLKCDnF(i;eOGs#;tP~ZbDzFd3JQvf zqNw+Gp7;F+_+glt%;&n!^Ehmk)7KwhS=GUXp>QM1TBB}Eg5ST{Y%r!=)e`pJaSMoLTu{2+@sSwYc~{=b1bJQ5Kfi%dKfHeeWAS1;D7kLt?5p^Enr zvM|V0g&wCwAdifr*pNi&+|7Wfbe#rVf&FRfw8yOU(Lgyn8H2Y*8|GfS9z#`2n-|lW zv7g(~toz3|jNLXE!i}TcxQD8y-xy(yfvt8M6Qsp=1X{S^iS2m1sW92s*p8%733%VF zmllk!h{9=qPxIu=DgCJ+{BuqJ1R3w_q;fIpX+e>7%@KT1Q*aWAn-q|YsbDx&Oocv_ z0*Ox~zMR<@G>3xH8;4F^53=uY0gc$W_*kkL_cU(a^RTzsVhD;n#Y!@BUddl+2SbxP zv&4do7XpCG(N&hPJR8}oC&<~5Ny_8@CLQp0WHbTseOQn`s4CdX)ggT+x<%7E%&YWsYaB(dEj9-Y?F?)E?++o0m|7UE z4B+LvRNJ7{Mokc-1R@AKI+-&IhzyEv(tHOp12*-Wz4&dr$`Xs=v`C5%o9`-cfYU7n zoh+vhq5i8AcOfI^txzvV(KZ=3&Sg2$z8i|19}@deSoT~Yj`XDo%MMU=d{-Giyx2CA zZ9oC!K9<1^JK@rOQyn!Ot%-Gh3(>_T{`9LAi=N9LdiqGnU9-l#XYUlzqF(#3#0TVR zN_w75%|$29m=Ci+uya(X&p; z5f(!=)N6ss*{FY2==dM!G_uaG>I2Tkn48YfjS4*o3!uJVdhoHgxU;Lv#gg%K6s>M- zb7lrHco@V{`PESKpkX5F?gNHim0_G|rA|=5B7x_{vs|K8DGB5SJoQGKdfLCMyE3!f zF`TIOQ_1&3J1lK$PIg>eKk?HYv6bR=^}p-8sk#e67i4G)^dV}`vP$4ky_>z=J}yz+ z018&m;JI|FRfSo-;MpvFy5^JHo{kTCPOc-e0@zA6?e>=PQ9kj5CyCCCEw zv&i+#RPl90m2uRkis_kf(?_ZB?u369!|*n*KOS(~7DGm~_Qlt?T|s|A_u=lPRu8`V zYJcVJJ-ND02w&(Sop&7z#CL|~%+&mPc4*K)+HXO879RMrBj-g>VB$h}RPh5Mh@QLb zaWQl^fl-INDp^^Na@-z_-?_`U_T#?F1ve$fDqQ2NimS1q3(A5gmm#I0{I&n7^?n3c z^o!v=GwwDA?$im^0AB!4gy@Mc9o{c(4`ioOM7^qvJDQ7N8ESxy_i-x{hsg-f`XVvH z8n*gn9WYx~)L&DTdauAzZLIohZOonf9cOu=<;O=$TR@=e`6RKYhZ3Ab8|k$uA~7dH zPEk)^-GaE)?YMjH=319x?Y3Nb03eqf@grPd^&D!xqdDh3U3PsPX9-)xA6MH2T{J+% zvsHH9$};x(t<%zKju%xeo}Jv=!*LkbH9XvE@;hmDZ|h8!%rSG86%{?gcnVL}Jdm}f z3yck*s_{`;uRi_TYQNwsSqFT6#c(jLq2?JHrfl7Y%(jjbkcBz+KL7aQh3NY0Q58r5#cl%>ru?c%K<1Tn{6-a~$;#KWZ zPMS*LaB&HhxZ&hg#`Wu{k*BU@B_5~{e#Rma6mEitiooX4OP#d*oKrN3d0_xOEZ-cwYi<%6#|x8A~puPBr1h9 zECxOS`M-6FXbF&x5I3+#z|W2@x>9HACNqG_VUbs!mPm!Fg98bE0@Zv&J|BoM|C4o}f_OxykD{@1l~p4%U(ROVc_0-@!26JGd^0t_G(Mtdcsf+m*iL8Brqi}s@?nqJ^vxY+nHD`7rX z9fQvRD$6X=V(m!&U06(ReE(npV(*^@{YpeU^P*^-j!&6Cwm+m37c%DeZ_CB({2-v4DHJfbg;;i-atn%txDpWa9rQu((npPyU8nZnsEU;ZK z5)?U?oWb^iod95#G+O2;XK6HwwJ+vrZ^L2%(^qJEoY0>RUAGCtHQCuNd+w*seP=*& z7Sh|FaiaBpA2{=V?mq5e=k#D%G*juc4Qes%)w@|u?0IkP_qrri zYEI!qH7Kj6Op99cy_!qx7EjIdQ`=}f3<+r$mZLV+OSslZvamUmvh|)i)|mry5P}h& zkj3CE)G*F7!qn~>Z@>)$I56woL_d~u!WN8N;r%)(KGBjEFaT1F>w`3jITJCyylE_gX!F*< zz~MEJ)H1!p2BrPA%$ETEzdKn(LGhLUu1+p(l~!uJua8m49aLd3ZhH1Ul&F^(`)LU0 znY_k6zraVFVb;834)3ZM>n_ASpR#_gIWZOz&Yn~5ER zKs}ihKicx`HqcI3o27{l#&3fHC3i_fx4_@#KAc)sQ=b%TD$a6EOR;&Gbg$i4U1fMF z!|}CKeTR!}pB=}kwR26b%*Dn!Z^pooGN>t!a%zOYI5!+<*+#)UU-++Nt)^zQZc+S&tCb%@oS!s7E(Q5XGmn(iy1xN^LbI%wKB4C zf1%SuzRURACh4P>8eV;AI6_EW9tc8}&wkzE&j2Y7Vu;AJcdA~BGxb)5J{yV!N&v1H z3{%eK`6i@V z!xYu2))4VVVH#Dek)8^Y=~-E^vDECdVbF>P6yJ)wz}e-Vf}A&3UQ0xf@#2IHtju}K zjElY@nME##ywzm$u^!Rv{OV)YY{gMl2c1_dHMuOy{v^nP5V_bprH=15NT=yQ(gd`Zso$CYJ!H>yc-#)lO0s0|30 zNm+gnur|f*C0ZQroJWNOm-7g_Mn6(Io@@H1?+rRWzoiop)9XN-fSB9JohwbA*&q}`CJ@lVRNHSGKZ(r6W4f9zHOJP@_O*J za>b)ZsfxZMo&<^G@Z5-6?aJ=Z5(XyJ>QRjo2z|m&tn_kxMpO%D%ol=>y1eG|{=;2= z&g>!ce$lS8aM&4pKm9dN*S^ZFcW^>yhQ_$i7roKH5;Tml0gqZQwfDMG_CN;JGSQkl z&f#sFI|&O*$?3Vz)i(b3#{lBMSnr8!@jjyavGaS*k3{r!8yC2NhJnOo<3OVhzwY-&!f*OPl)KBsib4%mQ%3gSA>B-R|(P5!!a z##I^!5swTD_E;h+-V+;Vvra>bmZ+tThl z=$L#p?5I!=5U>oH03D(F@=v3~k-?Lb_K$4O%?W3dk%!S^oBR<#+b8!7Yw48r7q{z9 zmA2Jml6%fRO@{1;bFTu$tb$igPfsU#Q?ekN=+`+IwK1`+Ce*GY{X_F@5YPd;GWA#7 zhRKSA!YJHzY`2drW3~}9mQdiGK-R&0?3D2~muwQjGG9TgUd+UOx)CU{>vD8S?QFG4 z$&+zGeJUSjH7z>|n=AR)i3YSveCwUEh`~TzKrGNb;k$7N$dR_AI{sH2??Ot04N_s@T!9$UNM4qFJ}ZMjCq*j`yQTgpvte1&?NSmLbK z_=}o)yV>Hx%=X^oTfacp6HyiIk2YpB&WkU|4zVLoExIb7M)&r}#}#=e8pVYiVsAcS zs2%9uItbt&DLTtpZJ$&)IiL-B0p&ifdqQ1JFK+m(N%4fYGs_T&2 zKrCZjjlhBinxJ9CjUx!_!sS)Y1%9`4t#+UDW1YAK$f4+AnUH!sG(C%8p8l)UUAIEn_`eQP1_lV9|FQ~saikOF@km-){I}TG%*$&=?xbMi)xqqb zES;Y<`j?BRRfUTue&BC)4CbQOh*&jdzoli+^aLQ#!>Ucd0D#`?nj>kR-%a#I2j!V? zlv;-8Vw{gy?$d{#Tk<(o4_O+ADPF%H^~%owHYo@JoxY$Q68WN~Uw#QTrhJRHqpr=$ z6$zesI<77pv)gMRVS_S`{NeN2T5J3@Z=E^zEGeE-m0WQ4sZ8}OUiJ>P; zfefcGU!^BLE0meRx66ElD)-|uf#D!t$ihJ+PWmh{I`4x{s;Kr7y4F-RX=sVd=qn@G zfKK8Epxf5;;s0EJ*pwR3rKwhFGD}ex^IOsLBZehT~}mW7Ysv~Z40CW zYqz?wr*=Zj<`twvV39C*$mfqZRSe@el~#(+zciLd8>D>>L*+iaj?X0v->|{wUrn6} ze7?5NUs0HRYwAvu8vkBmqR!@0J}tM?ol1EaYr zj*xG&=oVHJ0=zEeA|Mv&ZAR5Kd@mDUqS}#xl($LLsujz;2aJW0Vbq3)> ztjek_ZU`iGr6|*zlJBK44hwUKN+=W5I-y%R#FNHu&*FOu@NE40 zj23LcbFrtkrEWye#nw+CDIj<26a29eI5VIJF^y?o7QHRWLhwjKlfg;i3p|imaot=c zw0?nFWBvmpsy&~QrfV zECihN(A|0gffDPc#fVz+xYGggz)@T>#ULz9BVu^x^XB_@-+*f5yD%9=u9ukfJ;>}N zw0-7FhL8e4rnH9>1+3Y8=vc_%r(`lp7=C(FguaOcj{t`~ySwx8SN;9XRfhfsu93== zTU*G?RIGDrc2O4@Rdn&XlTRBq@;>)7<(r>n@i))a3=R8`T;bQBQ+ zrGuN}j4A(72e?wgm+th0h;_~Lx|SEhbdJr507aj!`uFOuNF?%6?)?4H#`T*C*gns! z+mppZuN%9DqsuxbSC)foizT!d1A5AG-yA4be~L~U^?#fqo{{#m{Na|mc30Y{`absh zhOTsJjYMJ!^U~X2(o9$)udIE4hPzYfSk-4M`O)b6oo5nD?mkIwODqY2Vr9RR;mzjJ zg+a+C*XmiqHrLLhVz1{IIY>PgZ=HRp{E7L$KVoVUesk|ULyRy0Wd%E@plhM|6l={P zvv*>cuSI+v+dka^cdUyVd!Z<{aNGKr>1>Z>M1*`#M+v#NkiV8_6cO%feB zpJ&~p|H+!xh={6MN^Tn^fT7?WD+6&OM^t!DrpwfPq4dqKZ-igEcK4;-3|bl`rCzA( zIODshVozPbB6PfBmk|4Fih`^R0XjV^KIX&7B+t=#;GmIWxRE@i598)eq!PDpCfuj> zhNoQWqUzZxT)Q+Z9n#yylp*dkt2!RmQf)XtexSnNUiGcz+gv&iTTB{D1WLRRkGehC zQj_pb-yWV0UQ1K*Frb6vp18~UZtc5DOw!?7?F|VSwa^~k79f6g%rb~_XifX&@#~7t z@8`t}EpEpTE|qoqih7a9tMYtg$HuW&syd@fb^^W;JomD7D$sK$y)}VA;f~wg#kxJ$ zGr#BGFxD>Zibt2r*2j4C?=BkQO4j`nxE8Uw*qp(316WocYv9ha$ZSXH7@LzU(hvu@ z)Ps)ny)y=+8?~XeZ)AdtmG#$f?HZJ?6O;v$f@Qv9ao4bxsZqG|>6uLyve`juR`T%u zQQ%Y7E^6#Y(2RS1_hN0M?oQ%SX4&)ef5Cz~!<$jzO8@%`tA^I?es)*_%gDjw%bizEDQaH zVO!f7t{BZ-YsNCDbqIMom8GOq<_r+`DNDM~?3ou9gUgN=w*+OW5)XdEI8$1NI z1}Eo2Qb`vfi9|jXfpd6VW`*53VEl3PR;#u1k^o4s{cpfFjlLVsyb;g#e>(e`g&>7g z`wZVlFY{Ec=~g?1u>!amf|ivi;ZyaVKnyWaP_zPl0G$=x0G{MQ(tGEEWM1k z^D(l{92fQi!FEUuC9i>Ou3uhY-mX5&&=YN3$HW$Kr3BEYto_5XP=2ia7Q3k8exll=0l|4aN0=yN#c~;jWT3}d zP(RUn5yzd@+OQ@2{v<3={5k4c3Ji!hYKb0KhZ=fHFW|w%0;^yPvDO4E+1nk&7l9?8!d(aP zaTrcAR#VFj9@|=mNV=C+AL>wWHGC8q4fL=Um}X-S%HcBaIKv80w4d+6>Lh>d7c+I(NUZ2tb+eIvR(rd^2niegS!?N|uZL#V8emqvs@ z{X6kd4^&Lm#`?3ON43&W56TqU{o=}uviab(xGr*uC%i0fpvD>UH)VQU_qn~g@px-M z7Nf87s&kvmN~ei@=<*U;#yfE#=4pJtXJ_JlT<`1jy)R|k!M8g{{I0et>)9;BM(2Z9 zz($sX;`!ZE9~{Ue1E@cXUejcJ{{>6xjBlZ-2Iw|fKSQJb`$hfjaJIj{Yp`Xv{W{_o zRHH43Gk(hdz+%i!UC_0^&KdvUF>a82J^^|p3-mLW}X!OcYg1^vyv4ef=(r$BRD3*bh`b^$Z-AZGRj~nKL z;M|UMU=d5AZF>ViWm?^NVoH8v(_sT)9K(ecZ4q=%W%^9w540rd$x+lcO+lffz>&kG z{Rl>0*iJ@uSq(I>qFm!tv?d7TT`9pwOY+)RuAR3oUa7Ax>!S(fm(c1;>VkZ)3u1$5 zA3P&UyD7KC<{goGy42H{UQHL%7e?g9H5a+f4F#%|&B-uf;AHHU$yPtxL)9NrBgUfV z^f9Z0A!3EQ%CA0M?*qSgXLmmd3emLxrubPq_o-$m$m`OV*#l052E`t>x%^Ps5DrE73BB@49!%faZtX^jVSm+%3)ze2`00|mH?QF9^tmg06tTk0g3d!>xtG% zMdlcV0&`}dd(%e#TclOSLFCGG?EE7ZFtyv+Xeb8^8h(#s5OQma9ouo<2_b{+i1}C; zY{ZOd{WclHHegu94g7mZC6)|2X`ni4mjI-HFS2q%0`^}nZpdRTL_)u79MM*Xp+dpn zDi}~)Y5X`MvhP!vfSgV&EW*G4a&u>r>ntIcVJQ~v3~UYE#h)68G|J*;W=?uqeMx5u zmGyYlZ0LUm15M$xeQ8!@hTgBod{IwqHnfx;o@K;jmwuq`8A!+^M-zij-;z6_zmoE)F zIx$-heo2lTueesAq~+H#unn@I+V+qG6H71=5UdCIYJ|v78r3iNKB-!f8(DU*F#NUF zny%c-kdB%5%p|6;H)V5mR|X&Ud%jRYU%MOxs=Ff32$_&SPF&jm(K0e;(xhOs`aNsU z`1SW}@x|}O=^WEfWGDA3Wx)X`sg^H_4AxH(K$rX-0sX7fjx%}V9$V<;jkuyK*ypkV zS`%5`T?%0MBq8o}BP~cm#l2+VntSE+xBTeQI$W96yENmiasV_Up$X>q@ea+xFzf(D z9AtO_y8y=Ad0C zKC5{J8ji*CjDQNrGkC@;!C`?y7;FcQpZwbn2cUz^0L08Q6gjw185Bs0$~=vPRH`zB zNWu4=QVH;5o$ z;(~ux!r{QD9KZ+_w-Z3Sd!J;{9K`X*n>N)_Ebo(nZII)KETWzbFv1wi)}00fT6QG2 zIoRIB&u0umMbl^zOU@zmqO7K9O1l!A7Nc@yVC93)!yhjju{{a4lf;mLp`ZTj+Yb-$ zHa2y|FEA233>*QLtjIqrRt+Pb>t-Ga(f&8oJo5C>FpZ zvrgaMy^i>+>C8y#$^45idTf-8{pQ%fw&KtC4Kr+6Wnob9bb}FTs#5x z#&O<`B+_2HPH;1>BL%y1fdZHB@#n8(WGgV3@_p@1vXUVtdq0TOAM!XnZ`Mmq6AYU# z@uOv6l7jMxApbJs(btn5hEex&wOUpM4n)3GHTiG#KFZzKPIyq~d^E-s6ln$G-3$7| z_rm}8$Mf^wa;1MrX;kh<8GrAVO|HfDj0yM?=gLSwFhU2Kf_SX~eGF9SF8nkmPN>w| z9(ZZJgyg4Q-S!hNtQ0#N_L2_43djnI)G9;TX3p4i^RC<4dAeV+UUvLoJ=v%o+u3wul`jJ>uj-4(+B&y>ryOih$l>f&w04D!~A=BSi};_mZ= zje9Vkrv&RNFY6}CYujqpQ*09=?a#2)cT@#{Hx`YSE*v{uBgHW ziIvM(iQ_6~M;iSaZ@&Nh%(DgPi1@4?1sz|mQC7SB`5xfa5s(o$n8Q@@vzi@rh7R3G9l3SkT2ejAVwFnylF|;1Y}tuV7(n%`6YlrV3TiD| z)5Ri7FsegvJ0H!zJ!6NCS2asyX_2W%L*V=ypUhHAJu`&N%d-W{!1>Le?!31kfF0Ch zUr(?U7@}$=)i_Omd|-#F&r^qxw5i*5lVl&UFUEW@*DxP2GPQk&Sy<#^d!_WOKRYhI zwHStej0nlNo_Q528n}ELYK!qC9`|J|6_IbQ?baSWLJkY%EWu4FJv1qU!>5 zmqB6up|of{Si-@kTIbUKJR!`1J6|q;8gA6CBKJZ{pyOpKK;fZA#0_{y-Np45e7wn`;%H5Rp*1wIu-K-lpCcdxX&E>qq znv*r5shiX4(SvcEQNl66654BJv*^P_FOtmGvtN%vgyIm)>XUcTmsGO_hjgbCNzhQW zPSAFU3)pV*|1&eIz(0>eX#Nr4ADXMTm9|=3FFavpwko<_X(LK&2nt42{YJchj-Eb{ zc&EzQbaYI*13t_JR1%$c5)ciwEsM3zk@HDm_G*t@fQHUyxh}TZI$=Z6%5q# z%Vn3`E6sWQgGJ*{pEHZq4QT87tDTuq-teAJFt=4pt3nuW$5Hal;HStp*(L$~y=6`v zHO_%W`_;`g$P|_MbkY~n;oa4eqMmQQ&MF`KQKyoEYT3V8v`FFWn_>&Agu82XwGi=3SNY#gr754Z zARSip8AKUp(g+uU3gOTI479*=&--pnrOX5eT%9r97#N!mU`TXJGCvD6jeH8IxxSyz zX5MJK)q?Hx(ja`^`c+`-lDiOHK6hmwk;^?n>l4_qL>?B7Jx}GfYj}jWT&w5|KJ~6o zr*T2e+8MEjz9hs%AWnLMOoAq?$jO8wYiZM;-0btloTpobc5FR zSs#f(?=s^@7|oO}Jm>ja1ppceIb{j`QRp z=YuaNS={}K?Y#s7g}kTtA)9O_Ft|uYlr0Z>t+69G8(}SpPdqVNR#7S0UM)ZC9^5|J z8{AY?Q7LO#jO3VLdUZVB&FNps0puBCL5=Mnjj!b^;@_~PbI%Q3HMI{*zO6>9iQoT# zaICQ!Lk_YMcVzS|4$hoeP*ypvq4i(VJ!K5b-D7u*F4ecs!`pK0Am#48BkaAsbU*@6Ilj)h*ozsZ<(uK*`$RVu~zr{~Ohm)KpvB_3uE3_E2n^RE%f8-b9# zD^?V`NGn@A#Edbi1PMFuH|AX@1P~C2$M6;PBigx;VrNynIeY-8+O|o+g^Zk}V<=!7 zI0FjRM7ZHMHSIN>tkSx{)bvzc{u{NZ81ePj->J%BPyzmI06|1^a1i!8Wo;G4z!X=1 ziY2lyZL!-FA_8E6H6`#og zj#;iX;+y&z$kANVK#&a#0Y!Wck7Aqg<~V**;z#{{fx~{}PE(#^=gn-E&!?e&(C`!W zY(7F!hJ;K8(AxKGx`AukmeZh6dJl_1(^bK}@a#k~7^Wn6zOn5EBP$6KM(d+ylYA#} zQS@w2l@h=n&}yR~yO1+dMR=&_x-?z#A%#N7a(B$pp# z#hJS11eV_j(;URApw*HyA#6jtEs_*UW`#41xYovvp#JZVpCh54rY9KsE-_keMx6Hn z9FKR1-_Giux8LVZ9xlnbF5SbpJ#XPLFF82LKS&BqA8}v^Vxu19T@o(Q9O#%UPym%UuDzek=Ie!bNcb5aGZqdm3wr!* zpix5RTSzkT7xB%_z+b^@v{!f79cr`fP*|{!a-he>A=wgxp~4GG&C}M??q{!W%{)&n zPKtgauQhvfU+0&{S+&emfi$gcnXvwb;19<>{<6kOMD$RMSEt1*Dm2sUmXd;-Himk|0#~>{!4uRZMdDWYl ze9MTHYWlwNAoro3ukWGp!2)u)?b=k_o5_=yI~FQyVTH04?v*c(Zm?%we!c5qPg!(o zRwIPwtbss4rE@la<@ufaPCxD^sj}QNzUwh=t1QXn?A$%7=vh=?9!UHX-n9^P!kBmc zY`}Dfx)ym+6LCLisNtaczvya$G2Tng{r&!(uj=QzHAeq^oZ@h2ClyFEY?On*>6^Xs zfH`fnue$XFf3YE}W20=$i>w7hHs@INWBU=szVq(MF~xfg)t+71PmBMosfzYAA6;ec z7xm3Ms=t&eDX&m^5V*b(rIuXwy2t#RWBrk7uf2!9#ge1NLhMU=>w4HpY_x3t;E@N? z<;Tuh98IcSS402xAa)&mgy}iD)0Fo@I!u0G22nO^&3ZXCY5yk%6P}EZOp0rUywb>$ zVArfbOBx%M_>!Ka4;Sn-y;+bKdHh7?6pcn03o`UxGIsr)UjAc@8=&vD-!6PLeRtb& zL;go!MZ_(yB>(sON~d4VE#D{zWH)Ms^bY7ZtAtZ8)%JwPJ%PaIPVryVU(+XjTmVqI z;BN9t$L+*5%i6NfAyOy92Z?)4_Hz#fa!-978jKmrk8NcQ-g=UEGY&>NA{fuUW-Fw0 z{rcJy5T2Cs-#t6uypUbf8g4E_<6wEV$8oW|df8p6jmNh#0mSdfUVjf zFZD4-6)0#;vrI9k=Y>^gc9JK?eM>=(4Eg<$*emeevtDGe0>0F_&Sa@AYya<$zoGI# zgZ{@9T2&`#Qov_#LRiG*#-~dkoKiLCtHrsA2!>j5Ye4Gc0cz8F6f1?AF#=?i z$K0Q{-l1uH8VOzhcCF#-DwDt?9_cS1%mC}P9yUHzdNtF1G z$6H*`Oe|v899T6P$_Xzs>+Zq=Rh6u{6HVp?Kmo(IQG$i_#|tbqGhd%0E#sq)01z% zY}k-b>0@v=7R|%!d)?|(nrt#>PUqN&0Ow8@BrFH#p4iAJa&S`oot}I9yZ(xDVsYQ> z=e>wYHH)YEgO-Rl@x5!O|886>coHFft773^M^r+k7c-pFE4+|!YbKjDe2Lh7&z{#u>RS6+A2S05F>&oe2XFZHD_avAt*ES{8wUWpHWryvMT=@zi?HoNigqZAgXRCL%O2HmNulA{HUBp{Ha#sv6F~r%giQ@VZ3BEOq zPl{Ki82aWN7S2j#?Q@6W*>A3HBX|8FVS+8Ej zU?OZ3U3<1pSYlQDsPs%UY%7cIcq}+~DSRxtz9)n?eT`1+H0B|UE#D44p6>f|(*1>T zv>$yZ=RrPL{o`U>mMre#Nk?(;h!)ulFKE|M5?5n3NPusPT!P)8^T$EWFu>dGI)Fyo z7OemxLRurZ0d5JiWRwfQ*e#|9FbW`KiT2{Qb(wjm1qS;Z_&(iEn640$+*FPyF!2J; zyu{T35hPY7lq`sxIz0^*N~gdc;Q2W$d(luT4bc(+E_oM1XzrS?SuL|uLQ9yXbExx*^vjHQo-{IMrzIP){v1lVGvCz3V=27L)0D z&@YXzE?aTFN$RTWTOF!na^hK8^XAT!{1p$+7Xjjf_uoc| z;ab67JLVManbQ&z9qvxG-BWRzQ^+s1gj617P0VO|Lw+1WNwJ?z9~qVgi>d3KO+F1< zybW)noTm?Zvb{$@7*|;8<|$++Sj{SWlyjZh_p2i$Ezj)Njqu8|WC^(WS~+%Lei4)D z8ap!y@sawIaJ7=IdV~uZKJD)5`tJ z*D^4~nk=DrF3onFIf-rwnGBy9hb6MbEifQcm` zPQ3sknq&8`b?;VHW7j1|Re-~7_-RehZwJ_c?gduoe1Cv_t!vI+?uk7|q5S!Q=~|!; z7u-e9X-h)D2JA2dS_ZtP1Q>rI&=P+lcX60jW!1mMfggA@T0~d?S0aE0U4j7xaVK8Ji3*nSelS_g))y$-fYC-T2A2zW)l%7kT zF(u#3@*_OFNl;dO>fj*G|CbUZNy}`x(&a0;Nq!=cRnnX3w%=<&w1tDGAePfAJ4Z?| zIW4(Md%Pd@JfwyB6u_?^v9wPq2$HE?Tx=bgsWKg(Sk9NYPouAkFV z<0hfY+a5trLg8-czQAUO0T*wW)`ZYO-w+_|WyN+;nk+Pmp{WPNvE4SNWj`;*YxQ6K1yYC(mZ1^(5SM^Kl) zp~Qy-MeEIQ@o`elOltPapDYX$`d3w&7RjbY_!xW(mJPzBQWaW;ZLq229WxHFzy==) z+g|A*g}1kR1hsYo)T{1bT&TS>!lh3aWg$ST@uz#koYm7!()X2}7900$PF)KWj(KXJ zZ$h4LYd<}Hv+jP%PFKB}`Hg3(<*ASmNWRUBwCGAZEDQ>JN)+UJwpO`B#nbCRcrXD6 z%250dz2em2a1b3Z91y;fShX<7Xqj)C`6v&boa#8h=Cp7Yq(Gv#DC2mQB%U7JcH1nO z8LJ8cKtDSD-{up;S1wPvZm6G(?+4ULRN9M^i;ZgU97z;=4i=;&4fJZW&(lu*DUP?p zQ;|?X$3Nl_|HlYT(&9NG;*MdUW&`4$kM4>T{SzhkNkq)i9Xb>KIj(JzV zB%koi6%}(yN+1VQhu1Cj9VEbFFDhSG0^13t}i=^;a{ z%Gdj~kIZU5TE{6Q{)_8mR^u3kmk6wTrd0AKhFTDbb)(d?nts%%rYZmr0e93mcrNgJ z_q}h9W0qhr&%=IBCLtNFHnz3-|34LrR9ntU0vKVUW1erSiR;RShAg%OO+92 z@F(Jnx56|&KHuUu!vg-Kz(u1D4J=isKXzLBf_OEsBY5XS)bclB*_E*RVFADn?`wnjWCscFW$IbQs3<= zeb$pfA#JC3C_K~J@$fXEe@t%qn(%G;;k>=}Xq~%9qEoYZh~=gC#$$oO&z-fxmLdoPh##KJk)MRb^CZKM<`68JLG@!R!P! zyI+lL#ACNTu1Qr#W+11=t_KPRI&U^wz6>{+D|gVH>vpGsn>E6h*MgpJr8AG-eGql( z@aekKAKqMDD)IklI@7Qu)BkTbjg?D_5TceFx1fNi>6B@fDT1=70ix!TO$t+*E16r? zq@l8?0Rpa-A-G#+8-nJfu{X#x=7j4Ks61zf3kB zNI0U5ORNZS_xvavY=&>OXpA?PSqHAbnkLV^3kK;S3=Dk93jVFKx}5raQ(MQ@LPy1BrC(0ws{&cg%TyY3qDBy`iCA zDU5MMz3mwK6405Z_(E16shHJ<7qKPp{tA&3W(dJOGsvFc_~SnkUUpe26Rqyu%_${K z$)sHi^*NX0D0Vh}@1*{d-_xD`{)QFQADFZj6H|5Ohdcw^-P7KV%3ups)5JxvQ6^8R zT}`#TXc=^RAUZ3z=Q%d`td0FC_=8|#MC^XI=(f0rOYKMcl`P~j|J(i--o^eK z@lKrUZiza7L^*jZEPlijh{7G6$f*kt1v4;t+vn;t1H1iv_KxDj+Mi6>#TO=?NkgI0 z4~?>1*z%ysl8^GG@0pFmQwd{w2?^$=TN>knd#r2o|0(|qW0ed|U-q0hE4j{VnIM4> z<`=Q2|FrsSGD^Emc$J`rUvkdqV<7>eE&o*i@__7s=49lhGp+WEpx2YYz$A%-(frEjJ9Z4D)^0pNMISa0CzSOc>n0S_ zrJ`Tj<=df50|>#Nj-zR1Voy{jbY4Q{D~fzXzSn+Y`NL^i!w6VHpRd_5Z`6(mvqCZj zg$mrYLbDMVnQp-&D}e5edCIgfu!Mc3--xy(52mA^6l3T(?RYY5RxrJl3?+Epb6!b8-meEK8j6ZsD(((K_Mwe3G#3wt@I zH}pN+5_KGqDraA91M_A}Y3DB5fWrzq9dI7Q*4Im-xI=w+*d{NDxBmhy6PC`Sxcw{O*asqi?aw%b$KIUiSts*a~B@t?wR`MB|4LQ7pRPN&G9F;dslf2T31YnyA)dhG-TKPS+Fa zRV!~mN^5~t%;Q{ZbBMmtGs7^fi}9VHFOtmuDKMSntL1@5I~ZlXIOr;J3aH{7n1A$mbG)kP+F*g^GQXUgr86&Ya|8 zic~WthesNx0Fd&HH#dYO*+RDxtfoT_n09|Z^wIy^>+1&+BYuCnW*HIClPt`&*>ie} zdScfMee0E7Y63uA;Dv#y!Nlim^(?~Ti{PCNc=0)zLkj=EZ9?7-_~&NNSf&`2nI3rS zY!55xRn&eq;X6(^`Ft~}yxq{27XR>$WTx}8zs+WyLG=I#37kVf5vciVo5b-%Ws1ku zyB)XBcK>hP%Cpx(x$JG*Z0E^h&WCu@{0-r-x1oZop91rvduZi@?LYQ}?+IkwdFYz= zW-rRPwzCjScm^n3sBa$hq`qhF{Y*|m4h~(LzLa&X@vBx(c*~2HV!;36q4plt;m6X|I zSg@OyHZbrz#&d^_OL%*J>e;@#Nn^m#1C#acxu33f5o{fSJ@Gk0Wk8=(2w|0tz;XIg zEq*f`eA9;~0R+Z12Pi?5?h0lO!brAtygKxH!qA!u>3TTuq8$zxUlcGOI#q%tA=~Qp z65vLrxfYj=tcAKs5x=I0*rf0K*ieKmg(pJm?St#|r~95;V-77tUG=dCNJ!#F8rS^l zZi#k0m`ZXjJNDi}k86XTZIqCour&jx1@^}%+%1FL82tIpVlu0c=7Urk*W6g~<%eAe z@crt}g8&A33&!NM*ZI3wx4IAVHGp!2FL`Hnr1q+S)pdYO)6OKPy%P>zmpmQiZ=q{% z$qyq;WiA{&Hokae&UgNO>Xp4mO@`8*4YmeMCSu16^!%2cDtG)|*YI%c@b`V=uVLBk z1a1TB7trzPUNL@=DV_6-PVVq5U$g|I$ua!?+{BY1aqL;G1N|NQZtt}6Ypx0^NtOPs zpNr_?`FBMn7p)DDfGk2QP;7i zT<=ZQf{?Zn@|M8BD8<9w>>m~{D3Q_D)_d;V?zDmE&gXpy8nV!2k2Y@&{C+2B{d`-h zOrnb8293a9Ogpal)g%(E^9n`0eoQfo#0iX3s{v65zPDkmE*QpF4;V?l-|NSEPC-70 zVVwwJ^*z>a8i9|cp5KUr&pxx-4n|)o2weEue9-Syw+hjRx%b`&`~?0z9uS2N|5 z0d}Par~;AyU2wI~E8Wln(M`({am};5hI7(tezQZuX_#^(k@osF*U!##a>FlUKI(x~ zmVKPUN&7>k-n(a;V27XIdd6RQy{ZK-A~Xzq49JOYBD#k>B+Yw?T3oJ%_Pso37At58 zl{6nIzXHMQawZ(WfYL2%&U|JKRSk;&~@OOBP<%Tb>@5axoF9I{ z>5e|a3)WkM-sFus_U-c_zwSS}O?7s21Lz13^4Wc7&wcfdsSA%A2XfUxJGzB=Y{-$- zrj)Tq*PZ`SV0WCkINzs!nQI>1O9>yj7eeSbSU%}wi+M8%UOHW~X^E>}ZGJuQM;tel zrEYOy%dnNgw|D3rPG2IfjsAnbxBt}{$g!C`Tvt3MMcHz1??UJ#aBFqXwTeQ4d()VO~O;U)tPT&&I~2g*ce( z#A0{IJzfRRja8$^Ncqzh4a%eEo%#d~WsIZ~rdY?h|}C-luTCpOj(y>gUg7kC@>P z=XQU+C`0JaZQ7Re`@&^Vw-*4x1w?(N>8~p80|gIF{`*AFh#!4~4Hh0<%)}J?zB5)g z?;&0~8>k&W$4-XsHSTm_|NUsa>8y1r_3Mp=j|G?SHdOdr#3fd|`d1N;&JTyy+O}DN zr=Qqo%>_kgVfXtG*j)88Z{if<6S;ujIE|j|NRe2v`ZO1EWXWA3BG~@tZng!f@oQC1 z`O$c-7j>r}e29nt0HNRviC8^-<{4-yciTb4X!2J2gBeZGID!Bmwywunm&lu^K*BI) z_TX?#(3rWiykvkS}$ToWV*_J6~d~8kz3ps-e-6tuNCmf$c%UdgF=CLAyroP@&(9d5r(TwhpVq+ zJA;$!{Yd?-kL#*}Pn?Tk9E})%$&cR>;dJY;>C>aSE-Rqk*C3YhHNIeR6ZqcIR&!?G z02B1Z$!nv(W(H#Yn|A(I16tW8=c2nnvX-^j0q-aYiy{vOJf3(xw#P!|9OJNOW&2s| z5AX1xup{#-W7Xg-Wv?(sOTVkUn%&7t=<%KP&JDhL?O4CVznsOg_h2dX`7Lti7h>9X z@4L^s8)J~zy=TUy4T7l1Z$Rtr!^^NtpJzk4b{5kZ&!V(@_FoAsr)Z=veXKFi8S&BL z!F7eck!`Y_-;1g!68DO!mn@spl~{G8@}%iz*3A>=Yf5mzqrjSAClpQ+;0Y=K1krWl zgb~mvC)22~xg@GjIhWwwa`Z$%XKOR+^X*%(>;6}kSI*8H)%Z$o`se~Ksjcm{yo*V( z!`1tyse0$^%41PSe$+nc4s1f8C#UNkm;-KfEy4b3A}wsKx{%gmT=USJgM@DyEaasy ze~k5luFTmg*E`vnj%}-*O&V`5R}xAMq*?B!lo27?VuZE)AyzYSETUzv>Rjx^io^In zb8#&p<7?L|W1DO?+kTsK{HVolN-;fzjOY%4pKHGQ_IBG;L}X1wz527&I?sD`(f9b_ z!&G7X?*^eQZCA5n52=I9A<^QI*fA4Txj;YZho9qo$G8H`&^b%lVUBd5V=UsrC5*MQ zZ!y|)&Xt-0`JXzW`WtQRU$vhawYnL6CZVwv-}?+5nWc7d;N`FvLgOSG0^p}F9` zlb;pb*c^If*5^Rwv-qbb5uU1u*aIz-Q%&uEr&21d=4L*F;f#WWfKr`7e!{gMs4J=u z`y;vwY;bLQ(R~l^EQoP|%NNIvI-xGJbCvCWH_1iPH(F`b#zd#d4MOhUO}GA3R7Lj~ zK@FO#`&%9-^LkJ}=aIWFwR0~<&!r}}R|1>tj zuPLhf(sBO{Y_>Ktfa5!&W9~C|Z8I-XkV%?O2$df|n*o;EL@^4%;8YD*S6Ml=V#C%{ z3w^%nrcmUKbgf`z-Hy~CHUGBvF`iT{smes0CFMEcaFX??N*s@9iM`U{{47DEV?Bn5 zKkvo@2l8h9gn8utYTcg~Kq}==`0ZtcrR`eU`}%dc2F4TShPb+OYnuct{u3Yp@t+>; zm>1U0Cxd|WX({K_AvDXuDte!!Lhq;i?Z5A}gbKu;U1F?jckHDQLY3M9)GnmfX&g7B zluRh3!ocr(V4iqQ^TL{JU@==$UsjQim?qMXri@qXBn|Lk!h6PwJDblA zQaRrrb+g|H^FYZQ?o@)m%cFMRtF)K-`!483)fljp<6>%@sAi2%ivLhmGYz^juIoH$ zo3Ue#%P(XQ%A=Pf6F+<~vc;g3z>fI7J!Civxm|WoB9d(ve~G6v_D@~VFA=RtuG>OG znY(OA4Q^*Y7hxGAAkj2ErC9}vC(HOJ-Y|B#AenzhjyF*&^HaO_cTt?E&-i4@n>e2E zz~qe%#RRLksB^I*rQtnhEZAzhjlRv;Mn1JmuhDWtA9V&o&o9n|b`kw69{n;!>xTtPSuN&%wYh7NoZU?jDIw0Ky77*_g}!0_dZJ^_9ayD+3Qiru5z4+K(S{)bfuXd zdAqns*RAtV-Sq83){Lgw9?9<+Xw^6oNFmwZaBlDz)z{s9aejVCi>Q9^1vh-CB%LdC01mCOcEnwA|KWiVO6b8Up zi1q1DxV>c{LOb7d6&Q5 zDdS^2%0gJdf}d&<$@hfe0MY#1n!Rgld5dpSuKhxvMkmTZG@rY_(YpG~D3{AitAW>O zG>#eqJAaRGhVaCY7{ADqCcvt;y|3o&A4X@%M<5U|gWlxxvGNv4bdTA>u(%8#=vN_d z@x1cD9y?=2UhB3fg?kqaI?Y`8T+n$}c=E0D@&Bz$wtg`-@K*cF-cR#)@=QSa^xxCI zjAgod=9G5T>+aqMcEQ2P|68}|ri~2$a^Go#yqVye?yyr9ruIj=d1ZG`#04jFTjk>g zkF<2bMQfVwr*mKbz{?*>I5o1t`<5SoOOdH{AOdvrPm@QmS7EZYW@P_W6sOn@t;|4a z0Sq#BLoz$6T}{F z2qKCakD69YXE3Jmc8Fy%P9o5S`i|)BDtMIHxx`01sN4?RQ%}^yt3yVks8By%woF4R zLZI`-o-p1^GIGg@xK8YX(baJQqn?A|tr|t+OBe0XPc-pe^rtil23%<^AYwCopx3{J z(qM6ll(bXE4ljbb$ubJ;6CV&E)8s3l-E-s=NApRh%-pejm{&&It>9|TU;1y*2&8+V zA+AJ<;|fJ-PEkB zDRq>8q{pk_$j%1;k47y8HbCo8G-~Mk4(okq_@{LRkLMG>v}tut5fuKweUXtIJ<{ue z45`@&=F1DJJ@8B9d)6w!y8~7L!I4i$$t0Fr?%4!|?L)pBh%NHi{Wc<>6?odrG^$iz zgN22vOjfK%9fLCJcfZPpPGdq?k?Pha4PbnvtJK)zQ*B#9-d5|LS-PDM(vCxCeD=?- z9lns}#hb&mF_9A#48K`3%@Yc@$HdSO9Ae&URkwPrKxGFxqyCIuduk$f>pjDUn3y$t z9L<-%rCq;pj(+salzVY0+4bnBh0mF3KmYsYtk(gPs7qJKvAn5qYRLHLUc|IB^VS8c zGvUL9@n8J=BF0&l(HCtN5WX#sh)oomE!Ob~Eyb;`M;4z2Mk!>(MIuo!29ygx%t-bdTL z(2u7(%d@^8YI-^uu}q$gI<0~lL;I0d0|8jNs>N@F#5S(`$@D1d5NR+5il7V;f3qJG+NTkS0vVH|Jshz9TOP1UH!F>wvqJ?q{AS*%0otCgEfV?o4uc2kxs*U@BYRilrwgxN0ZE9>naGebP_{U zt&nEMlYF&Ls9gK^{+JY7{rd)%-a(|;3wVjOI9eE zreJ?!2(*BvM+0{uDe}IPA!2`6o7n0abm>{1rtFUTXsKWk>DW)LPTYU+kER%k%WnBW z^IEU7mo!RjR-Oxsw2NBiaICAbhn_pkr?xROt6OLEH4?j%FN+o{nx!esm=+`>>NW|R zA-7+vc{EDwJE2?f+;fkQx#b>>2ITIkoY6>0D&h=Q_%XP=LNY zx{(e*fWT^I=`z`t(MSLs-+b?51v<`$_gBR~pP+=exedJMd>?peY83GN)BOS%{XnFjJFDxP$=z(dSG7C0Yo}i*@{JI!$LOH6;W~;qBpM_QO6zUwB z+PdF<85MNxQp4&_w-5@(+!B^5c+dx|)B!d4`#@okn55a3>yU|z(Fo~Ji{cY>> zwKw?YZ%qfEp&pknh8EtQjQUX@*D^Y^H1gcQQ0tUKXv|eqca+hl)V6rH!_!Kz^G|)H z5gcrC-Tvuc|63QD=J%y-TOW^l_h_l{r1g)5KHFExfyqM~8X?imht2YpOr@1BV=abT1Yv+kf#jlDQ<_RvE(hQ2N#1Cd}r^ z&_1YZUzb9xnJ-2FgQ8=m(9}2T2QuU^RLg;2+FuE=V@lc_N3rfV^_SiI0|nD6A)pNQRkZxv(Ot z`HhgiMm;Ws2>I{XF%YoL1e!EYm+#$9;P#djKoGqoDv{p=I;N2zTpA(6#5KY0*lBhK&f8QZTJ4@{YRtV#hlX<$$ zE8YJ7M5&$=d;zb8A>=0|boObBwi2-Cd9q{R#zzR3lyzmb@EQJLcBrS$M)3are*;fK z=f7@e;r9>JBzjD@oU2T_1Hya$%id(+$MZt^6FVGc=L&0zGkLt(68Myq6u@5!Jmm#~ zMY$!?h6Q@01Hs$zx%;g)v2edKl=@MhG;nH4JTeqA0#0x)Ya@>Gg+@Bi^1{e@ZVeQn&HG1lOo%HX6D0vYgnGcrDVU zG$|Ycq5mgyw!``)$@>ZBOI}lXqIvpSw?>}W6M#yx0Q%EOXCes+5=x|DNE--zVd%k` zWB*%s#$e%V)sKaDD+>_gft7Z)!734CzUEacnxDP4ziLu!`;+F-g0E=n; zY;-N#*kL}9X#3WB{T4Uf9IBo%RUD<3oN-)r z+R>~*5*!|or7eevWBP0s24ziAlg9%`5nAxbeQ+m64f)9pGK~WAhPwf$u=HmJN&x6> zq&Bf>aAf+VoZ$+k=QN77HBN()MgaA2INL6cOCk}Px7n}b-w8}3C&f?-BE^VkIvg#> zgq@c}XrZ6vY3TNFbOSZ{W*hAxaTH7`t0cz*A58YJgHG8pj-}j-^`b&uHO0{s3^N10 z>_+hA4Mc|NVZoir3k97-Ei<;~E{TM8pk-V$T(DhNlp~DvyJrTn8Q*R)QPA^K*-+A@ z1n@mQ?&qf6j0#td3QTWk^o13{m=^e-j2b*;8YE5deci(AJ_ib*9CL`!3!GyBV~<`7gy z1;75yCA6IWfyZ6O1zedw9g#b<#0&H380S-E9yZ%!U>%VWF~*(c!kDckTz8YO2N7N|UhFNVV$er% znZM+Aot;5JMGNoB=8YS3S~AYJW|iJq`vMs1UMxEMD%$kzhIWGo|9!G4XaW&h?G=l`cD<|E(+x#U||p)t&EA=dQM8^?Qj#Z}`?5PUPVO zv6&S6F4-joh*|Tmn*#=t=P7Ls3`$vzl;Iasa-xRv#*Rb`^4F8!9-pnnOik&H8QRz_ zq4or`2BIkTajcqsgkX_X2~!(X)RIIu8gD`bWmTjMFn&zlHP6?$(QvDgK*|cK(!wd- zV18N}o<*Kb&?QQqAr{)Vj$7sFwwa3L;T<21mgGa}lS;@krG#_5yCEk;e9FA)tN-?# zFtTTV-mc6H)B!3mh10z=ReV8|H}laflf?`>LUCg($4?env5H_27(f+3DTRW=-5}Kr zvglfc*M&$}3KBsHflkvYTr_DIQRLV;mr>HcIzBVhxJ(JBFj7k#e*o$CtdJIBYeGvgFtlMnIuhA)|Wh zzsC@*L%k$*C`nLpdS2nY(8Ey>f$kF9Nb$#z!!)r4)E_C4QuQ?2d`W!QQnHnbZw7vu zsof!&CP{LH3BG73*aB2fqbEI_t#ACqt$#BRz{4zQ6ZL zd2H+2x=#lnGv7+nyxD!44LNB8*FNDN2F6WgQWlF&!s-9Fv+RAL-UGa7*Vkz5^ZLuW zWgy@8tdwJq{F9JA-34u^y(_>-zYA!Bp1+=`= z#apjZ2!(_cp2P|0_0%gK>!qG5?S%}`A2FS*`zZT+9sjp3N=fX7Nfs)>!yh~U!t&Ah z$t$@JI`=Dj2j1B7)3`Mooi-PY-X9M2x>OQC61d1rWrr3}+l6k1=uvJtJfU3USVs$FEB=Oq^l%Wb!jUS{L)u3z`Q32Y$6}vrIRuk``CF{pRl+GLqK5=boutR9VDla}^Mk>)LGL72fCh!~Y4u$!!kw;6d}u!AW~<~2?i^yzjl{-C~Y zceD0!Z21~?kPTY*{<&|W`nc<3!9~m8me#C^f!*iYO4~;Rp*U8R%Pok6nZghgf5vPg zkxr{jvFFcXKAROyW{l>aGg#wQPbE_UL#NSdjDbH+zJx>w9@|i%qOzO@s@UQp9d(3a zFLA?3mC{V8rc#0Yr&c>lS3=JG`3+sai1HVAo}kVfgO;Uwpb4V$0(&oj*o4tCJH9l{ zB9zA1PnP?GmxEO!PceirY=aro0%8&-K#ucIK^=2M8B`ml0Y3RXd{p3iqfsgzR)7c_ zU6QT6xnMI6%I0cb(lL>4#uA}}(rTm#jJw5ql2PcK=4kH3E}lm$X<(H3epMX z+F8iB`g1fM0xsdof=Jk=!xHA}4Uw65m8iphiwzKBy#u9JZjZVK2%?F=ccqJ}vQ<-k zxb{s8fgbc%gNOTIRYXdoH<%(mjb>{Rltn*b%+dyQ(8y=JdOy45?oo9Z9p~Rxbhi`& zA0r1R?mNexa>i6fKiZ#b_6d%8Cy>876w&>24WaDVNJVF=7xK+++{c&s<6(_ z*x#Q?iM)E|WW3(5AyK8maLHM_s6?JXL{jI3HH_7O>|)7w&NPzz>^C~V0Wf>^hD%<* ze_{0doj>{K;?BLUH#snKW!U;pqwog>F_+xFD{d+5t6~SKOLKqOq7u(;@pjYca_4g- zW3BC+HgLXM?$LzpMzdnXJL^`hNCV17OiB zR0UWT5P7rZ0JTn9+V>Mq&d|9Jg&MUogE~nvuuA?p96e6~=(%oNhkctXyjy(WMVfPq zOaMo3Ig7RD1nNG(G?k2)ZnIHt(K8|QXK{-1Q8(ZiZCP8pjLoZo_W-LdHM}gWU6l#z z_DhgrX~I$}!`i(IiXc#ZJB;=n3%OhpR+~v`(Qv zYKTZT@@Yhy8*3GvOmtIr(T)qFXhSX50er68vTL`Xvr9F|-^SQ{6`5U)lk#aIQoJ}U zJ0uD${-w}Js4?(tz;Y&KI+T3`KCW;N*k7ghLSxa%q}nUu353T3{)n(?4vm? zRYZ|6s8#4uQ@%#0dzHNrjbf;M)62Tm+7qyI+aYe`qmg{Gn;`cxx*4!mVC|t$1cJW} ztHI+y`J8TqBN4oFVQXnY-Y_ssk z*6nFK3D$G)KXq^olkL|x!LR5%(ahU-^6}cfTMxc%tTBr90{_I_8gs>xl)tG({`yTi z(_-Cf67in!p_H8boLkH>bbKk2WcCH{e7A8DMNTDlMrvv z)8CeT`MU??pTsuLn1iR&KH5bx?FJ;@Tt?#OYI731&MklKKQvHiYya)=w~mh!9j*3W ztRD28#|O zb|N6X!pNPFQ6bm+qMaG90bLzY6x|8L_wrQL@Tug?f~HM1cI5BN!^TkP04F4qI=i2~ zNOv;s=!KI;7ZxeRN@+8i4?PXBz-ab1z!b>Ep(8qIsdUyyw;yGS6^<5Fmd4;GbO&JD zs^-Fw-o0#7#wL2F0Z)Lpbm;RSj?&$%=3mazy9vmUK9C}W0%gPKxzY1LpC<~*$Y-4& zb(Q3j{^-p=_6vOx1ehtX7MV{no;DXb z+)9z{Hfym3F>rf$t$cqsvzzsc9=DpY5d+4(IN?N$cij<+LYxj@I07BO$CG1Pm(m$a z@3gk#RRG4|9E3h>Oklho-IfIJ5;6i=@47```wK3{isH!Sn!XaQ~!Cm|Np>h1q_)Y+ru63C&<*k)9?%817msM`u zpP_s7?S|2eDjSt+qZiu2oJOC{dl#Z?8urGC{`*eJ;p`&Xdw}5HhPKUhBWi#@wCc$$ zfoO8YUV}?TNVNK|dIEqLonLJjIDO+La&vB#iP9{F1zzNGp?lg<^y|r#-W6K2Asj0? z9*l^!VL$(}=kDyYjR!qZe~=pck{%gaPR$hm1cAQu-?_0+6;nWdSssP(cI;&HkzW37CBUdUYTaUx#70X3lQL4?`=$@ zNub5A%_NR1$ScX=W|GAa0;_UzT+EVkLk!_A$3ox&`Ste~1fg#kFMBV42~#6&B6yT~yfHXRF`?L;gr&~p!vleshOel@r=f?cX5`uyDRC?v{n+rdwY=NEVS zH$SYHuq{?TXh?r=Tm8oW;6+*dz`f|SH+9)luwg@X(^=dB_N!|TZzn`N*Pjr>-|}gv zA4Yqch_@GoUHg-%`_$163dMP<7-D;ZJ0DB2pOjq%&^dhjKp1Ga(rD#KOe+yk^wn%& z5eZNRW*OFaL;XYcsOu-vyu{Tl%KjD_ZA~_Qv7b)BjWE(I_HNkyLl5RD>-}{UX`AttIe-vjaPv{e9je>sf-x4 z*G76-*c&6QIML><)-FXvWrHwF;@ts|DVNKD2PY znK~(Xx+thSk0g{M&1LIxa&kG6Q%1Ck-Hzh%)3C@{dqlsJ*^vngaExBGIugeXDJUXj z#K%dIfmY^+-b1UOMupKw7X4`2smJ-nST^Z`AHJ|)F0tXmt=2aX7|EPl*a>EX$oZpcM@6!MOA z^CbY59Z0Wq?V1NM&VtTA3a}66!2{4x53Hr9dOZpGE8#Lkn$~wTme{%E^$T>5G19& z99@7tUy?U11u5=oEZ7Jtv=(z_&6%C z?Dq4jaf>7;aiGY@-8R$pumt6#16ql8XQQ@f?2{N*d!o!9&;>tRYI;V3E()~#xpFcd zr>>YNzz5S|L+^U5dl4gaxs8V%iUSbaBLk)kDGYSkHFF39 zj<;X%eUiUftmnStl9NSkawx{(iTVJLQBf*Hb|Rh0Bz%^R_YAs!e+_}<1GjM`$gyG8 zo|+0wn9##oPS{`Lmg?QbCI4a|ue3eHzy|ZRG`q;UnURs9PfrbBn>HGXF&}K2@>|zv zTpgyQ3O11SH7NkWyoJk#&0`}YU%d`aX-fk3{0w~$_-)?>EVzdeAwX{%4UJwaOO7vF%RRuf2GfRCefa|>T1emT$|jExPAZP$a0nn)z+>*gdl;+7WcULGr?nv5>f zY!wx|4RUq4TcdZ*F^U&v4x> zLg+hnRUvQwpr7+a2XoPz>5lpl@@=nj6XtzosH&3FdKDLRYPqIqFP^2ac3MD}O}7vR zhH)j|YvQ|LScEa?{X z-+dux-9P);z@b*}gls6^wjsN&BgJ{|XG^2_$6N0HBm9Bb$v30M^x>&%*^bD=PxGRU)^CS@#X{)Cw7o$8uH; zmSc2R`hx4x>U}XfdAbWGeuoK(ElA=rq5PPnN=ij6cm;+5$dFE@awMh}K99HOW9L6V z(z>_kZ{SJqee)5`3kEA>4?XvHR6i&y1+}=XWvp2#!t{GBM}I##McWmo_pnlEK4%iECmDtAp-#|pd9Wd8#OY99dV-$;6PS$ zO*Bh^)x$c?2Me1M1YjQrDTGwHzZ1=IZZtitFmwI>DjU`&tVSzs9F&17DsBFrRv=eXW!ghFtow`Z#l=Nh z+M5QIrgw_bgpMjWHuUYFkETF_;mF95ZQ_6q0qWuN^XQAD3X47yNuP#$-V9?lq}pFYp$vuS??g;i2ZuyU;=qSa zT720s)h`kv4j-g&-#$PgrrR$GZ#N%T#Cj!s=#Hx?C9j$=LNjKDp^Zb-_dv&8gj(-g zSaKE$g8DUB{<<>!P)Vey29pgjgswIFTXe;DZ*}O~3-w*z{c^sOm)Y2rg*K18)HwYd z8?!PR=IqC*w3z0#y%dPZ52g^GdFE#e`>`91;_n<~$c8!Y2wTRDB?t2vFk@$E@V9WMl8sp z9-quTczVuL(*t-9Py_Fo*LMx(Bx%`JgO9P3v&%Iw@?Ax|?eM)fhuHf@?|q(T;~Z;h zQZlUuLwV}&tSJ^gSlP5M^&&*)0{j#Il=bkH+m2H)4g&x_xT8iE%x+`YL}1$QOO;3> zA0Enj+_+f8Y@tIZCt}>l>Q(V6PBnN;hhny2Wz8DFtD3dvUm=KcQ;HH-PKjW#`ZuUkS`);TnJP^x728qw0i|fEWp@4D?6dD0r5Grh2~0_ zVc%lbk9@8;Y7qkOrNXK4sm#=v76KlLKgiYy%H>m#b%a0oIvI;Aeym7-@ew;y-G%~E z%_EWeWyQ3kU{giBJmRQ+;Zwkfs+1iAaX4EsgeDN=E!k+qQpFJS!$MX1Oqz`@=z}p6 zufnH!B8mS4ik+BKYctZ)r$yozhNZLI(Sq(@!sau3b`MBf8MheIq&Pyhaqp&yRN1{9 zIV^kV0)o0~VQExl3MCqy#Rj$MW2PY~4|+)+$O$w5EFaG#`!Ea(yB?vBobVuFd|NAm z%aQN|&qECGlP2X>Pd_T_zy5YLF6C0}v`;;s+3B-7#ooVfd<9 zZ%!jAULr$yzV2Q(m%*HMilqKs1wI(_C}IY+zhqQ4-kaGdStm58x`c=#HCrNReit)% zCp$W2+8&v?dz(t*LM~?O;qCn~S`AT6fSem_xu0$9bGad+`sew5T=yoM88Y%TmTG6C z?AySG9pY;u&0LVf#$a?oScE~4jwlKV6cjE$AMB~(8Nh--XploUYc?<1U=7}mfU#jv zbVi~gyjxNk5-sfi@2m6-=2l5IzPFGN`DUV&MvAH;N(g~*k&bfgd3Oj@vKMs-N7Iy( zx0k_nP*O8<Ki5{7G88@N;FfyX?uCgeA;zorswG$P!_T7@)ea9MT344La) zC|I2#qPE=bWU(e#XvmL8q$KEvgWJ?D-HL+6?v#c9t?QsZc?tlHBMt|P^cKEuxpBR# zB-*MR-2$Ggo`}zM`ZiI3Y3?1pg_yd1xn1QJeSruJNMaWSzDrnG@~+IGax^^(28$*c zkau%>4n>-((Y_7q*{epLdPd>>p~r%+CQ~_D59XTU$Etd&q+yR3z5HD*&b<8PZHzub z7X|B>!{ghg8WT?b?s3#_6Yfn7H?v=dm*-^vYWezwnQsc!ZC}Uz-KLC{j(~`rAG5CU z!T-4I`@jNXvg6yn(LL@}`(j60p(YZ&4|lBN#}*#$zY@)(45Ufgxf$@t4Lwdtm_myzpKV#h zmF^Ak!183aVO+_m$6eGvqiVVq#{;!B$rfr2HGnt zK+Z{!O7jW=0eD5xEQ#Zi8^EqWt$l^z)}j>VmH}Dtv4{IOQ6*6MEK;u~G%9!~iZ#Io zj4~b7L7dp-swS6Ml}QAdGDhJ2zmCp5km>#Z<2qk;TsmcIE`_w&u(|Irm!z7FU69Qv zrkul++%1>)c z`FM&bAPtUuLX#$xJ9iq1V*<@rkRDiXa+tl3*~vb9!rFv{J|=oCg&EBo54v4IDz*fG zSQ}h?jZ8(VI}eeMC$z#a_b(Qr|@a91S(@ z12VQjU5@4v!oyqw9Je9`XkY6JnSTwnx}qJ7n&2Qc+%-31?-!$?KpWTD=so9~fy&QF z7PVLV?N_uz+|O|yCbon{#Bi#q!#uqFbsOz2$WuEwkYXxAe#O`8%d?N=`+!WuHg>LI zMjkstSmc2>R0?At#ewyODBslt0mLcQCQeY#ogER;3TbGLL5G78+vplqm!FeHTsY62 z9TuvsGhkQ|!2=WqE7RA6t#lE~^oWl#oT{8aYO`8g2A@4FW781jeX9Z}B@*}7C@CoWIB|$VB zMkH`;AygM2+JUG5*==1FEnmdS>J;XYB8`YU;7YXKG9yR+}3H_F4a%LRGQE zjl1@h;!P<0U7P4nAj0JNITBW5FjrR}Q(m4PB9QbzQ~_Y6(~}3k1&0(g4k_e%`!#Df z@~iJt%xv~$Dt&yqh?xk@aMV?u-GEH&u4`~r=}ki=IQ2$`csOdo3Ce5H;Xsvfb3!bk3O3)_%5NXrGtS?<@8PGesa4EF zib=iMB6|(sDG%+@oxxB&^3|=Fw_!4J&`c3n-4^F0mVdn++M$wmXm(!Yin!!q)$u1)L&Tj9Bc{Q7-smYi(XRKN;hd((gX%BkZ zd1LB^Qup`Ax|#IU1m`$?cw3`wT_b5Jz}??*lEpOPdH9y0;wv^1u1X zRC=P~@Zrl^w%_B!{N9>z1u40;;}_eoSciECBtN3afR$?leW<}=kzxI)*msj^tD3_D z`7Jq|;7gBBR66qrKpU;@JfB&Kivuq4N(&8Z+=&l~@)1M3P1LDDLE7UTaQM|z*uS|8 z&3NGDCrD=u&rQ<9%3Sz)Bx(f{XUkmVC}j>xU;T>!@xbSnqC+I6v3^4r&KuUE-!n}< z;HEJsX2tEA3y)y|dCDR6kOR5wI1^O)Xo~ig`J~2-kIox_ZJ(LIXgEj5>r~SmfO%tmII%@_eOiUB`fb~c| z^>}1p+jQDWXG@9z-e*0_gbnFPq|5&dvoSK|Owb+|0Lgi>veHNY@W4~HLe_l~2Kl&) zqsLyGa;%ZmHq|7@-I*MikvI5Vr|oyDOgW?d?fnoZRb{oj34IN=az2khaS6M7-SC6^ z(B6zuHYh-cR7L1rzoLHaV2J1Xn92H;|9SxcaPdxk0IEXXXNW%<5cp&(7;M`}}Y?ZgVW9N5Mxgs>k^3C;r|dzmf+S8HBFZQ*G$0u7Gb` zE9;0h-E%KY`RaaLTn@Bxz zr288Q!p4H%_2Zpi^FkNk6kV7KhcKM)Cs zL4v-L&7qg)a~p`x-;;Ggl=d@FFb9rTB^tHxt1Nszi=ja8!$^>+(mY2Gv!^)YY%k%x znxy}EXrDbKj06GZ1K+|#vVFC;M-73 zvjw8ONW>eyACMpamv%3dbCz?sh##v&cQk-a76sjNah>Hu!_|5aJ1%w5)QE+~{q~Fw z$}uF4QTB!kyCw#cM1asc+3`nT3(X%oi8?;cHsc3qwYry{$D0Z2DGEG@BaU=3F<90~ z5I$os9eM0x!yd~zmvum zs;7pj=(kmk?@Drfvu!)RJT083P92k4n&6+r8oxN=jfR0D+B#Zqw<-Ujzw?n)G8WdO z+GrShNUAF`3~wE?&r?P9ODcxq^9gZ&1=rx{3tkc+d3TgELGZ;+k5E)^{*^v?Z`I>c z_Iu_Uasv{%iyT`qW{O8j-Iyl3kdpwx@{X@1>B`EJpS9%MKJi|;mg$pUhk7IN4@+< z8|&BoiVjHe-Tz9aJbh_y(+7Ni4fTDgT4#7VaO>A`x7Y&@pMXPd&_DK&fdJbr9%b9s zm!9{mm(}EF=xPyt`3d;&b>A<3fKk5M)#CoXj){>lFISHbMz{M%t_CCW2;H| z@L1cDH_sAiqa)JbbW;b|0sel!qED@>6|-Sjp9{mmYT0T;nD&Q_{AsKVG#e7^8S(LgXs3%DZ#yokf)KU z3(`+_E-cpCIU00c3j)miIz8!cW7WRD+Z2|Xn6&TFjo{Yq2VMwpNE{wG?6q{$O9`b% z!7HcbEfDQY6W3r8E_-oH0QTIkRFuOpnO9k4Ksjjk7nJ$*LQAeh%;gUROu$> zeRIxRJG8dzjpOe7CQs=uBR*lsZx5)m+HAl#E&cmffOCIYp=R?_4vt^p>})srDK`PI zm}&!8OSFhHo4qfSzRa(3>4_7aaGCXd6YOhMe%TCWZM^e=ckt=TPobBVbSYz(HV#cX zu_mTM0WW1O?RLe3m%DwWS&z$6DaE<2V7uesPvrNo+=T2n5YL;eV|JT*U*X5hkX919 zvE$3*uXPClhb9f_rhCM)Zvt^*;k@Sr+{AlqpgIS5a1k@!3%yCV#pN^PMjL<6Ighn( z9V>@RbXa&xRnE%aO|sD{ay5;EX-?+)u)RW;cu5Yb33cdJMTT>;{aHNm+dOmrK;(9( zN08-->DtFYHg!{85#C_hpg1JzL)7d-Xvjc%T~|Yq&WA2XyVFtHokyoQL6%(+<X zPr3I9s`=S&SvVo*9 zn;jON5%{l}>K*Nm$E82z9{rS?O$&WE#W~RCotT}vG`|pPiMbpXyXT~q;|=rBh<3#4 zgU!w}U(&pEh~P7yIs!f#r6A@nrUHXXCEaJN#5fq@Yx5n+@avh3TFYeJ!OyKD=j8Xi zKistl2ZF&jLzhDPfT_{M4BW$nobT5zs?*Z2U+!IB=U4?d(^%xu9Qh;O?5cZjix2Dw zX#kvJ%pO&T)&>VzEAC9r+R~Ku5$O!(S9{4LpJv*_cYF7WgoQ8e$)cE(*StVF2{7M3 z=FcgA9t%RexyWD7)VQGI*JdAzb#W=tDQoIHcF!mp*8ZUW^-npGurB;N*8Sbe@x9G8 z-w4?+LpIbF=mveCIAd1ff8Y`mr^^i^mP~gl^hw`8Y@_^Ux@%dl4!PbKA z;5m^x0P-H)NKIf|G;{hKG_(BzU-4)&zy6f&n}}@pb5B?sss4|_Aboq)uk|u;K#wA) z1G;$xudH5;@|<-zFAjg=r6+7`&z0ViEL(KBPFp%WR*g;zl}h^tW7}z8Yz9`UJ!1P? zJ2qYroPzyX)xVsWM5WNxQ3s8Mup;N%v^=G^hBveGvkbo8k$#v?n?z-u_q1wY^ya-f z(c!blW!TF7BHP*q)4QZYeP_`nT$@6x%AOW|$}2l~bS!b&OI?}L=GgYkL0m^ev~s_<%La|En0XX!kvBs8YnP6t=KE2^GDW;{pv9pz2^x51`%P4u^^SEM#mF2T6F$-vLIdN zREWaCzkF}#c@OhI^pBRq`eA4%77$r@h4F292muNn&^D)jEAA+b@KO8GS=-U-+LQ?= zmCb!p=|_!9UuWVG%F7A@f5e!o0*68>=rBd4yQ>Pp>4_fuGI*h?cmIf**dKuKZU$U0 zWSM8)v(w1lI7Y)VwO!^nh7U8zd5)3c>M4V#wW{N!iaf--?(V{PsgJm+{REIl>wI~@ z)iAQlYS*&*jsr=3$R3x6Rup5~yI_DNOFa&TUqz}UA0vWu=hAobbKqEta~1N}!F(Je zmpGiZHDBB6?|Mdj*Zcd!xldmZ##MqQqh)74IsL3X<j5wT|F*{6E zuy8l)#7bfarQ+LB3<|d(X~elSZPXu=Jb%+gN`;v$KY!D+C`NfES->m2T&{cU%Bde8 z%@W(EUw(R9gL5W;exSc1vfTLTmZ<%C`H!)LfEa@;YN(^+)`vA)@_XH}53_0m?~RlD zLy0eGO0S+-^L@|N=OR{fHlkq;knt>^O4SEf=1ptL3@_P-*GLWE>jSxRH{ggXuni|T3uTkFT zR*cmRyyAqPeX#Lj^LF5kBZBz(^0nZfayNCVi^jsUhOAaSrxZVw{cCJ>Z+fC~{7B(X zIeKvDA{p}EhfBs9{ixb#m&u@wqVV^|o$k2o(Gs7A04E@+04_KW@Uzk6i&wyl9v_Z` zl3j+E^b|?X&69*QtTYlnkv$qe9?LkhQ~|Ly1xhNS9W(%cC0IMy^n5-3rl+Fz%X0hI zqW0@reIJg5-(3E<{YSQPG|c+$%=E1zJ+;DvYopuFGxjk@9cNwvxcOz#`ax-$2i#uv zyqe3Y$hoFI#EudhHR(66wtKytHh$8wN?o|$|02O-)%>8S;|LNsXztJ@0G~lq4tInN z@V?%;EpS)pmGm9CR{Qz%)GP0E$}(pQ%K#~F=G)0h_uox&8bl!hz{Xci|JRo0@i5m* ztx8$dQplv~MdncpH2^Y6t}vVRv*x#&pl2hIM3>8)Bj~p;U;Ub$d=gc#_xI2{(tFvWf>~1Ma$v)WCx|3e*F-GMWHYCmqTIjdeD3yIK_u~N~#Orm-(5?DT*}cWgg!VylOCT zDxE1IDfDt39WrMqEe8X1Qvl(y{j7g;4moY;j|VbHj*HcPrZ*E(*9Jc|CkQIm7Lr|3 zGCizi43gEa1+FH_sWWEyH>!~@!XzcGC6BV+s-A#HU(V^{$Co)f;!f4NJd%kS0Q?g6 zza#sy3ddcuTjZNW9dvQW=-MlQT$^}JJxsCug+w3(vw3|5g&d@XzoQ27C#8 zfMKJ+shY%h&+FSuC{6SCRdvsvR65(E56`)M6^<_-BkrcuS7^+kVhTd&^L%;rgBKGf z6NqhpYTa;W;{XYdx^g-0ik)>gk~e4nq2G8TfjS z8SI?U+(G7L=nDUP4!=r+*>$y?UKtQLJ!yr#RGVCxfVnTynz7~~H18+r zH*n&Qdu&)4ZglmMfuQ4&gFI^zvnNmt)9Xyl?~@)wH^&O%?M9zm&3AoaR7AOEsIe5vIIq~;AmQGb;eV3lp}jR-+4h)tp|WP zp?Degdd3_WM4Ao+&VPABul%Xby&kcn=gaxVaJC?D!)@&I2<8Q7yg@bUaQ*3>Yq&IX zZ`<)RIhLrx%Z6X)#s^;|0*12p%g){8In#^Hqc!InDxrt?ytDu4Yq!8%IY3y_HSFIt zrTrah@T-QukPYyu>_eWE9ezGlBJ)$njPUXlG7|QzzF)#q*(c(bay7~zO27^dg%id| z{JayFYC-wlt40(VaA2t8Y#1_X2*2ZdAHOSL7j@Iq(}s)gQ1gF7Q#*}iD;m|5dcmyw zK+XncT(-GV|8A!O3%3*vFEAV`FM$(rH~x1>TIq?NhpV0H3mNt9R>P^FPd?*`q!rU2h||<=VmdK=O>|srYir3${`BQ{m+p zRvERz9U2Zy!>VLGF28#`Q^a>G62>fMQ@n5<1-luzYDIsT7LfpZg`G>3D0aQ+lrYg0 z>s7Na1VE5*>NB4!bjd{P0ClhkluIGMwzeSwoOg*vmzmUHbri7e7eq0Kxg1FymZ z2|k|qmfdW5ztPUiCmH}%3Iz(wqk3V?!I>m%<$0dA(@wcA&B9{g5mM~CPUZ;gYxQGh zK%X+xG?id#E%WQUOu%#^ljMHNH6$e{xIu~_fh>+nvO(F(uiumQeos9)`SyUE}9no*#tmfxp9)4|1*7HL;vcVm%w z$&cUOP_ZC=y>3H!1*`!UNpMS%x8ZXcDTnI5`}2osX>(A*MsPEO{5rgS#Vs|{sq8?8 zACjAzem15Y3&MHvRYattS66^SX+(xY0nqDzra3h$sM7I%Neaqq-z_D#PD+acZHKA= z$jOE7q5>$jiIeLe@h9s6#xJL literal 0 HcmV?d00001 diff --git a/victron_ble_display_wt32-sc01.yaml b/victron_ble_display_wt32-sc01.yaml new file mode 100644 index 0000000..ac60c20 --- /dev/null +++ b/victron_ble_display_wt32-sc01.yaml @@ -0,0 +1,474 @@ +substitutions: + # Set the MAC addresses and encryption keys of your Victron devices here + # The values here are examples and cannot work for your devices + smart_shunt_mac_address: 60A423918F55 + smart_shunt_encryption_key: 0df4d0395b7d1a876c0c33ecb9e70dcd + smart_solar_mac_address: 60A423918F56 + smart_solar_encryption_key: 0df4d0395b7d1a876c0c33ecb9e70aea + +# Example for WT32-SC01 device. + +esphome: + name: "victron-ble-display-wt32-sc01" + platformio_options: + upload_speed: 2000000 + board_build.f_flash: 80000000L + board_build.arduino.memory_type: qio_qspi + +external_components: + # - source: github://Fabian-Schmidt/esphome-victron_ble + - source: + type: local + path: components + components: ["victron_ble"] + +esp32: + board: esp32dev + framework: + type: arduino + flash_size: 4MB + +psram: + +logger: + baud_rate: 2000000 + +esp32_ble_tracker: + scan_parameters: + interval: 10ms + window: 10ms + active: false + +victron_ble: + - id: MySmartShunt + mac_address: ${smart_shunt_mac_address} + bindkey: ${smart_shunt_encryption_key} + - id: MySmartSolar + mac_address: ${smart_solar_mac_address} + bindkey: ${smart_solar_encryption_key} + +sensor: + # MySmartShunt + - platform: victron_ble + victron_ble_id: MySmartShunt + name: "Time remaining" + id: shunt_TIME_TO_GO + type: TIME_TO_GO + - platform: victron_ble + victron_ble_id: MySmartShunt + name: "Battery voltage" + id: shunt_BATTERY_VOLTAGE + type: BATTERY_VOLTAGE + - platform: victron_ble + victron_ble_id: MySmartShunt + name: "Starter Battery" + # BAUX_VOLTAGE or MID_VOLTAGE or TEMPERATURE. + # Depending on configuration of SmartShunt + id: shunt_AUX_VOLTAGE + type: AUX_VOLTAGE + - platform: victron_ble + victron_ble_id: MySmartShunt + name: "Current" + id: shunt_BATTERY_CURRENT + type: BATTERY_CURRENT + - platform: victron_ble + victron_ble_id: MySmartShunt + name: "Consumed Ah" + id: shunt_CONSUMED_AH + type: CONSUMED_AH + - platform: victron_ble + victron_ble_id: MySmartShunt + name: "State of charge" + id: shunt_STATE_OF_CHARGE + type: STATE_OF_CHARGE + + # MySmartSolar + - platform: victron_ble + victron_ble_id: MySmartSolar + name: "Battery Voltage" + id: solar_BATTERY_VOLTAGE + type: BATTERY_VOLTAGE + - platform: victron_ble + victron_ble_id: MySmartSolar + name: "Battery Current" + id: solar_BATTERY_CURRENT + type: BATTERY_CURRENT + - platform: victron_ble + victron_ble_id: MySmartSolar + name: "Yield Today" + id: solar_YIELD_TODAY + type: YIELD_TODAY + - platform: victron_ble + victron_ble_id: MySmartSolar + name: "PV Power" + id: solar_PV_POWER + type: PV_POWER + - platform: victron_ble + victron_ble_id: MySmartSolar + name: "Load Current" + id: solar_LOAD_CURRENT + type: LOAD_CURRENT + +text_sensor: + - platform: victron_ble + victron_ble_id: MySmartSolar + name: "MPPT state" + id: solar_DEVICE_STATE + type: DEVICE_STATE + + - platform: template + internal: true + id: shunt_TIME_TO_GO_text + update_interval: never + lambda: |- + const auto time_to_go = (int)id(shunt_TIME_TO_GO).state; + if (time_to_go == 0) { + return {""}; + } else if (time_to_go > (10 * 24 * 60) /* 10 days */) { + return {""}; + // return {"> 10 d"}; + } else if (time_to_go > (24 * 60) /* 1 day */) { + // Days and Hours + const u_int8_t days = time_to_go / 60 / 24; + const u_int8_t hours = ((int)time_to_go / 60) % 24; + return str_sprintf("%u d %u h", days, hours); + } else { + // Hours and Minutes + const u_int8_t hours = time_to_go / 60; + const u_int8_t minutes = time_to_go % 60; + return str_sprintf("%u:%u h", hours, minutes); + } + - platform: template + internal: true + id: shunt_STATE_OF_CHARGE_symbol + update_interval: never + lambda: |- + const auto state_of_charge = id(shunt_STATE_OF_CHARGE).state; + if(std::isnan(state_of_charge)) { + return {"\U000F10CD"}; // mdi-battery-alert-variant-outline + } + if(id(shunt_BATTERY_CURRENT).state > 0.0f){ + // Charging + if (state_of_charge < 10) { + return {"\U000F089C"}; // mdi-battery-charging-10 + } else if (state_of_charge < 20) { + return {"\U000F0086"}; // mdi-battery-charging-20 + } else if (state_of_charge < 30) { + return {"\U000F0087"}; // mdi-battery-charging-30 + } else if (state_of_charge < 40) { + return {"\U000F0088"}; // mdi-battery-charging-40 + } else if (state_of_charge < 50) { + return {"\U000F089D"}; // mdi-battery-charging-50 + } else if (state_of_charge < 60) { + return {"\U000F0089"}; // mdi-battery-charging-60 + } else if (state_of_charge < 70) { + return {"\U000F089E"}; // mdi-battery-charging-70 + } else if (state_of_charge < 80) { + return {"\U000F008A"}; // mdi-battery-charging-80 + } else if (state_of_charge < 90) { + return {"\U000F008B"}; // mdi-battery-charging-90 + } else { + return {"\U000F0085"}; // mdi-battery-charging-100 + } + } else { + // Discharging + if (state_of_charge < 10) { + return {"\U000F007A"}; // mdi-battery-10 + } else if (state_of_charge < 20) { + return {"\U000F007B"}; // mdi-battery-20 + } else if (state_of_charge < 30) { + return {"\U000F007C"}; // mdi-battery-30 + } else if (state_of_charge < 40) { + return {"\U000F007D"}; // mdi-battery-40 + } else if (state_of_charge < 50) { + return {"\U000F007E"}; // mdi-battery-50 + } else if (state_of_charge < 60) { + return {"\U000F007F"}; // mdi-battery-60 + } else if (state_of_charge < 70) { + return {"\U000F0080"}; // mdi-battery-70 + } else if (state_of_charge < 80) { + return {"\U000F0081"}; // mdi-battery-80 + } else if (state_of_charge < 90) { + return {"\U000F0082"}; // mdi-battery-90 + } else { + return {"\U000F0079"}; // mdi-battery + } + } + + +# Device touchscreen +i2c: + id: i2c_bus_a + sda: 18 + scl: 19 + scan: false + +touchscreen: + - platform: ft63x6 + interrupt_pin: GPIO39 + on_touch: + - logger.log: + format: Touch at (%d, %d) + args: [touch.x, touch.y] + +# Device backlight +output: + platform: ledc + pin: 23 + id: backlight_pwm + +light: + - platform: monochromatic + output: backlight_pwm + name: "Display Backlight" + id: back_light + restore_mode: ALWAYS_ON + +# Device display +spi: + clk_pin: 14 + mosi_pin: 13 + miso_pin: 12 + +font: + # - file: Google_Sans_Bold.ttf + # id: font_name + # size: 38 + - file: https://github.com/hprobotic/Google-Sans-Font/raw/refs/heads/master/GoogleSans-Medium.ttf + id: font_value + size: 40 + glyphs: + ['&', '@', '!', ',', '.', '"', '%', '(', ')', '+', '-', '_', ':', '°', ' ', '/', '>', '<', '=', + '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', + 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] + - file: https://github.com/Templarian/MaterialDesign-Webfont/raw/refs/tags/v7.4.47/fonts/materialdesignicons-webfont.ttf + # https://pictogrammers.github.io/@mdi/font/7.4.47/ + id: font_icons_small + size: 28 + glyphs: + - "\U000F051F" # mdi-timer-sand - time-remaining + - "\U000F140B" # mdi-lightning-bolt - Energy + - "\U000F140C" # mdi-lightning-bolt-outline + - "\U000F0D9B" # mdi-solar-panel + - "\U000F0A72" # mdi-solar-power + - "\U000F010C" # mdi-car-battery - Starter battery + - "\U000F10CD" # mdi-battery-alert-variant-outline + - "\U000F007A" # mdi-battery-10 + - "\U000F007B" # mdi-battery-20 + - "\U000F007C" # mdi-battery-30 + - "\U000F007D" # mdi-battery-40 + - "\U000F007E" # mdi-battery-50 + - "\U000F007F" # mdi-battery-60 + - "\U000F0080" # mdi-battery-70 + - "\U000F0081" # mdi-battery-80 + - "\U000F0082" # mdi-battery-90 + - "\U000F0079" # mdi-battery + - "\U000F089C" # mdi-battery-charging-10 + - "\U000F0086" # mdi-battery-charging-20 + - "\U000F0087" # mdi-battery-charging-30 + - "\U000F0088" # mdi-battery-charging-40 + - "\U000F089D" # mdi-battery-charging-50 + - "\U000F0089" # mdi-battery-charging-60 + - "\U000F089E" # mdi-battery-charging-70 + - "\U000F008A" # mdi-battery-charging-80 + - "\U000F008B" # mdi-battery-charging-90 + - "\U000F0085" # mdi-battery-charging-100 + - "\U000F07C3" # mdi-dots-horizontal-circle + - "\U000F1425" # mdi-power-plug-outline + +color: + - id: black + red: 0% + green: 0% + blue: 0% + - id: color_font + hex: FFFFFF + - id: color_neg + red: 100% + - id: color_pos + green: 100% + +script: + - id: update_all_components + then: + - component.update: shunt_TIME_TO_GO_text + - component.update: shunt_STATE_OF_CHARGE_symbol + +display: + - platform: ili9xxx + model: ST7796 + cs_pin: 15 + dc_pin: 21 + reset_pin: 22 + update_interval: 0.5s + invert_colors: false + data_rate: 80MHz + rotation: 0 + lambda: |- + #define xres 480 + #define yres 320 + #define x_pad 25 // border padding + #define y_pad 5 // border padding + #define first_pad 38 + #define cat_pad 45 // padding before category + #define icon_pad 22 // padding after icons + #define neg_icon_pad 17 // small padding after icons for negative numbers + #define x1i x_pad // x position of first column of values + + id(update_all_components).execute(); + + u_int16_t y = first_pad; + + // shunt_AUX_VOLTAGE + it.printf(x1i, y, id(font_icons_small), TextAlign::BASELINE_CENTER, "\U000F010C"); // mdi-car-battery + if (!std::isnan(id(shunt_AUX_VOLTAGE).state)) { + it.printf(x1i + icon_pad, y, id(font_value), TextAlign::BASELINE_LEFT, "%.2f V", id(shunt_AUX_VOLTAGE).state); + } + + // shunt_BATTERY_VOLTAGE + y += cat_pad; + it.printf(x1i, y, id(font_icons_small), TextAlign::BASELINE_CENTER, id(shunt_STATE_OF_CHARGE_symbol).state.c_str()); + if (!std::isnan(id(shunt_BATTERY_VOLTAGE).state)) { + it.printf(x1i + icon_pad, y, id(font_value), TextAlign::BASELINE_LEFT, "%.2f V", id(shunt_BATTERY_VOLTAGE).state); + } + + // shunt_STATE_OF_CHARGE + y += cat_pad; + it.printf(x1i, y, id(font_icons_small), TextAlign::BASELINE_CENTER, id(shunt_STATE_OF_CHARGE_symbol).state.c_str()); + if (!std::isnan(id(shunt_STATE_OF_CHARGE).state)) { + if (id(shunt_STATE_OF_CHARGE).state == 100.0f) { + it.printf(x1i + icon_pad, y, id(font_value), TextAlign::BASELINE_LEFT, "100 %%"); + } else { + it.printf(x1i + icon_pad, y, id(font_value), TextAlign::BASELINE_LEFT, "%.1f %%", id(shunt_STATE_OF_CHARGE).state); + } + } + + // Battery time remaining + y += cat_pad; + it.printf(x1i, y, id(font_icons_small), TextAlign::BASELINE_CENTER, "\U000F051F"); // mdi-timer-sand + if (!std::isnan(id(shunt_TIME_TO_GO).state)) { + it.printf(x1i + icon_pad, y, id(font_value), TextAlign::BASELINE_LEFT, id(shunt_TIME_TO_GO_text).state.c_str()); + } + + // Consumed Ah + y += cat_pad; + it.printf(x1i, y, id(font_icons_small), TextAlign::BASELINE_CENTER, "\U000F140B"); // mdi-lightning-bolt + const auto CONSUMED_AH = id(shunt_CONSUMED_AH).state; + if (!std::isnan(CONSUMED_AH)) { + if (std::abs(CONSUMED_AH) >= 10.0f) { + it.printf(x1i + neg_icon_pad, y, id(font_value), TextAlign::BASELINE_LEFT, "%.0f Ah", CONSUMED_AH); + } else { + it.printf(x1i + neg_icon_pad, y, id(font_value), TextAlign::BASELINE_LEFT, "%.1f Ah", CONSUMED_AH); + } + } + + // Battery Current + y += cat_pad; + it.printf(x1i, y, id(font_icons_small), TextAlign::BASELINE_CENTER, "\U000F140C"); // mdi-lightning-bolt-outline + const auto shunt_CURRENT = id(shunt_BATTERY_CURRENT).state; + if (!std::isnan(shunt_CURRENT)) { + const auto this_icon_pad = shunt_CURRENT < 0.0f ? neg_icon_pad : icon_pad; + const auto font_color = std::abs(shunt_CURRENT) < 1.0f ? color_font + : shunt_CURRENT < 0.0f ? id(color_neg) + : id(color_pos); + const auto format = std::abs(shunt_CURRENT) < 10.0f ? "%.2f A" : "%.1f A"; + it.printf(x1i + this_icon_pad, y, id(font_value), font_color, TextAlign::BASELINE_LEFT, format, shunt_CURRENT); + } + + // solar - Yield Today + y += cat_pad; + it.printf(x1i, y, id(font_icons_small), TextAlign::BASELINE_CENTER, "\U000F0D9B"); // mdi-solar-panel + { + float SUM_YIELD_TODAY = 0.0f; + bool show_value = false; + // if(!std::isnan(id(solar15_YIELD_TODAY).state)) { + // SUM_YIELD_TODAY += id(solar15_YIELD_TODAY).state; + // show_value = true; + // } + // if(!std::isnan(id(solar20_YIELD_TODAY).state)) { + // SUM_YIELD_TODAY += id(solar20_YIELD_TODAY).state; + // show_value = true; + // } + if (!std::isnan(id(solar_YIELD_TODAY).state)) { + SUM_YIELD_TODAY += id(solar_YIELD_TODAY).state; + show_value = true; + } + + if (show_value) { + if (SUM_YIELD_TODAY < 1.0f) { + it.printf(x1i + icon_pad, y, id(font_value), TextAlign::BASELINE_LEFT, "%.0f Wh", SUM_YIELD_TODAY * 1000); + } else { + it.printf(x1i + icon_pad, y, id(font_value), TextAlign::BASELINE_LEFT, "%.1f kWh", SUM_YIELD_TODAY); + } + } + } + + // PV Power + y += cat_pad; + it.printf(x1i, y, id(font_icons_small), TextAlign::BASELINE_CENTER, "\U000F0A72"); // mdi-solar-power + { + float SUM_PV_POWER = 0.0f; + bool show_value = false; + // if(!std::isnan(id(solar15_PV_POWER).state)) { + // SUM_PV_POWER += id(solar15_PV_POWER).state; + // show_value = true; + // } + // if(!std::isnan(id(solar20_PV_POWER).state)) { + // SUM_PV_POWER += id(solar20_PV_POWER).state; + // show_value = true; + // } + if (!std::isnan(id(solar_PV_POWER).state)) { + SUM_PV_POWER += id(solar_PV_POWER).state; + show_value = true; + } + + if (show_value) { + it.printf(x1i + icon_pad, y, id(font_value), TextAlign::BASELINE_LEFT, "%.0f W", SUM_PV_POWER); + } + } + + // DEVICE_STATE + y += cat_pad; + it.printf(x1i, y, id(font_icons_small), TextAlign::BASELINE_CENTER, "\U000F07C3"); // mdi-dots-horizontal-circle + { + // const auto solar20_state = id(solar20_DEVICE_STATE).state; + const auto solar_state = id(solar_DEVICE_STATE).state; + // if (solar20_state == solar_state) { + // it.printf(x1i + icon_pad, y, id(font_value), TextAlign::BASELINE_LEFT, solar20_state.c_str()); + // } else { + // if(solar20_state == "" || solar20_state == "Off") { + // it.printf(x1i + icon_pad, y, id(font_value), TextAlign::BASELINE_LEFT, solar_state.c_str()); + // } else if(solar_state == "" || solar_state == "Off") { + // it.printf(x1i + icon_pad, y, id(font_value), TextAlign::BASELINE_LEFT, solar20_state.c_str()); + // } else { + // it.printf(x1i + icon_pad, y, id(font_value), TextAlign::BASELINE_LEFT, "%s %s", solar20_state.c_str(), + // solar_state.c_str()); + // } + // } + it.printf(x1i + icon_pad, y, id(font_value), TextAlign::BASELINE_LEFT, solar_state.c_str()); + } + + // load on solar output + y += cat_pad; + it.printf(x1i, y, id(font_icons_small), TextAlign::BASELINE_CENTER, "\U000F1425"); // mdi-power-plug-outline + { + float SUM_LOAD_CURRENT = 0.0f; + bool show_value = false; + // if (!std::isnan(id(solar15_LOAD_CURRENT).state)) { + // SUM_LOAD_CURRENT += id(solar15_LOAD_CURRENT).state; + // show_value = true; + // } + // if (!std::isnan(id(solar20_LOAD_CURRENT).state)) { + // SUM_LOAD_CURRENT += id(solar20_LOAD_CURRENT).state; + // show_value = true; + // } + if (!std::isnan(id(solar_LOAD_CURRENT).state)) { + SUM_LOAD_CURRENT += id(solar_LOAD_CURRENT).state; + show_value = true; + } + if (show_value) { + const auto font_color = std::abs(SUM_LOAD_CURRENT) > 1.0f ? id(color_neg) : id(color_font); + it.printf(x1i + icon_pad, y, id(font_value), font_color, TextAlign::BASELINE_LEFT, "%.1f A", SUM_LOAD_CURRENT); + } + } \ No newline at end of file