From c5fec789c92bc460cc2b2878284d83a76b61d475 Mon Sep 17 00:00:00 2001 From: Torsten Stauder Date: Sat, 22 Feb 2020 09:25:56 +0100 Subject: [PATCH] Webgui-support added --- .DS_Store | Bin 6148 -> 8196 bytes .vscode/extensions.json | 12 +- .vscode/settings.json | 3 + README.md | 2 +- html/tonuino_logo.png | Bin 0 -> 111663 bytes html/transformHtmlToCharArray.pl | 20 ++ html/website.html | 300 ++++++++++++++++++++++++++++++ html/websiteMgmt.h | 263 +++++++++++++++++++++++++++ platformio.ini | 9 +- processHtml.py | 18 ++ src/main.cpp | 258 +++++++++++++++++++++++++- src/websiteMgmt.h | 301 +++++++++++++++++++++++++++++++ svg/README.md | 4 +- 13 files changed, 1172 insertions(+), 18 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 html/tonuino_logo.png create mode 100644 html/transformHtmlToCharArray.pl create mode 100644 html/website.html create mode 100644 html/websiteMgmt.h create mode 100644 processHtml.py create mode 100644 src/websiteMgmt.h diff --git a/.DS_Store b/.DS_Store index 5172429f264de2441865cb4700216d4256da9242..c5e35761262a4316d940679bd89f74af733831ba 100644 GIT binary patch literal 8196 zcmeHMTWl0n824P(kTRT)JX-#6amzaxJt=hI~SD=?)kkJ}{ga!xIVyv(xxmU=Em+ zJfcwsq6}P}0daP(hY|3h0QS`Ldv4UWJU@~68e?_!4Krpk#uPT29nFlmm5i_ZB`>8H z4~yPD-5<$??X2tClWjeB&@wAS>b$h;_`2no#lYDzOfosrZ#jlrNx3D*@PctNQo%WA zd`N8`8{3%Zh-)1i#^c&p`{vDYZByc|@o~jgD=UDF#Ie)V@-%J zPmRy^%4vB&5qq&3-#69xI9F!%?B3Hmq^c#)+;7^tZLC-Dv=|DJOk*|;qsdI#X->7f7j(5;3 zdc-N>bF&vLYh4{*ziDf-`|>S~Y7?K!=l7Q_&&t{6fr@4LBZqV^Z#stM3=dMK9N)U% zGK;(k*Yd2R7tG7eEeo5J#mds@yqMa`21+^WM9K0`$vHG-Ial9jM+^#MuWN`AjX>AHb$WU9dr*m};irKp{6Vd@^< zUzYJoVJF|tnlR1>@@}C(@pw|4Qo5LWksT9r_v)VCH)=XGeGr|d>|*SY(Cjb_(`ZfJ zE|)t7D61h!G0KoJUCE+C*di08lHhy;2k&*@4-j#DP2;12A{(v_zr%8 zU*I?R9sYnn;csNfQNdZb5SL>suD}F#;1;|GJ28cOuov&cKFs1#Jch?n$6*}B6X>Cj zXYedOf{)`9_#D29ui+c`CccXw;D>ktKgKWcOZ;9wVXO+*y|Q1W_ye^jUq^y#c%2qI zc1^h6yK`6izk%zwvjs-y%$+xX!L2LW)@^9-OieCh&B{#$QGgo>i~ulIKm_Y|B?@W1 z7cE}Gl>>w;^JMKCP{p`9Qy_>5bS%Tws?)1zEM$Bd{9OlqZ^1dZ0G|-Yde^(X%@q_#$;!Y3K>3CT%9ln(rGt1I z3#YM9Y~Wwa&cPwb3{nHs%MB!4fmn58;dkcA{4$D+jFU}ew0VHWfXoJ2$FMn`XAUy} DPs2VesY3rF2`VQL35WaC%enz=;bY+ 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%0A`a zUe~FOk$e`{;O*oK(H)`CHV{nk1j~}N!7sB;V)zvic14rOyDr1ap4ZxT+ZJ`xBYyTJ zjE9+=2#2-111lvz9p?7r7{V}p&k?#(Th-x@q17bjOAs~fvtLNuis!r}YlgZXh`5Q$ z=oc20kI&=n7DY1`hsKLK{3(fLsK#ew;N^0A6!OG ze9*s8beAco*7)pk3*O?~N)9=$sHk`ixY|(79YAstu@10%k zUwOm6Y}TODpq~xV@2Hr;TDYxwvPYX+cg}bQeM9bXbOX1FE$?NLzXubZQgY_WcX_&Y zda-ML1lkMF>#dy(-afvVPv%PUA9WJe`gOBOVUz z_5Pwl;5Ke;9oIK!QM7CQg|fE8I;d%~jF}DUX9cKw_l(DRjZj`@H3;*`*?19pOrcV* zrP!6%4SzITGzt|P|3U1xtvBMX19ID=N(V=`~QD?J1R0Vj#5stM>dC4DjBIr<~xM!y$;8yR8}04 zd2E%Lop~hV*fT2}j&bbcIL0~7alXgrcl-VC56;W$I@k5Q9*_H-4rM`oRCR z++=0)#g*Qi)&7Q;L;A?X*FU8@%(7G4-1*Hbh`Z&UWZ(7;*S0m+?m!Q#cc01cY){^y z=hQ1$qyiweJ&JpVnz$AQ#(zqTM7L&YmaiA{#l4f`{q68xU+2z8i%9z!ZbPFV6>M(% z_-&|t_{9FYASr%Fh~OR$%-O3dJsMeY9W@wTvm6*{`7#A~AQIx9n^^Jdhi9(#@}x+J zlHX@$g3^@}Kg~e`m`Cj$Fl?(=ITj5SiAqwVc#{8mmY03$pEN|!IKw(5oJ0$mdPPem z`30Qm(-mE~;&tmT6*nk^Luh2u%lUgF=y7p*S~zqmIqJLe=$qKbhnu}FP>r6a#>|dN zhq{lznmA563mg_1QEK(*%MtQR{@{Jw?2U%{BES0uHo{+xMVup)YgtF=9fN5P|5|zq zM~;2z_+RPy5$_8+$!)rMTk@oBSa~dkuBe-_-r~+s2 zd>;$R#?YUS6LQ;wt~~~1 z)CYubq=mbzM^f*TlDgqmXPxE)(R~Eg=F(EPoV?PkMTvv&!Dp+1kW3Com$sPWH|dnY z%Ks4dXBK$b@ZJRGLCXF|`@2UQ>_^&i{`@B<6U8P~^&t##V-b?tnlR~YiNX)^KAN-bjR2bPPsO996vj(fBbjsQ`%ZL+ z^2%&9W^)>1QLZYMR7|nB(3N12I0^qD4bnnnT{pSER|#6xLf+{|vl)|u7 z=+DG7WL1fq)0sf&J8>WBs}7e>_U3i5bdN_4j#AT#N=Ky7_B5ZAzVc*5 z8R@7zcxSHiQi04JxF>=Q=q@&9Lvp1nz)e(QAnLcCq?0nWOr!r8*fE& zUG5q2+Tf|(Go|3<_=SsxAihQ;sXE(7W=)%tUk|%1n{oJWWWR{cP7%-WgUlZ0?tgyx z2f20>eJEaEuL7?9P}Etv`TH;Z##h~s=4uFvEDq;_CT+8&iYp8r@Kx*=H-OeS{16iG z=6U!;L}k07k3#=&KtxRu+C_pYzb=gf!+WPrR<}cONK^q1@_vtH7NP|nmOZ%b5?dk= zC_MmG){=1Um~64LL@W2CbP=FKC~uYoO!H!{U>(lPt{<_A6GuGZ&@Q@pvx+f_7u4&G zx&NOdKI>uvEQ!_@CDXWO#rSk5X~~2cTM*MJ`)AxR1yv8`Lq)9lp#BSEVa& zU8HN>ZwRSMbYE3vE{mFWc8dmjPO%L8iVedz-H4*R4g+a-55G)YEk7W+5S_-&ve;#E5-JnuM3XBto^eu#kU@H|Em5u`RZK& zkDcUMl@zM9Ir!M-j>_QrKAfxw&DReO?{8-#VuTSwC_aLDIFeZyB5RwHe6=g)=w$|_ z(+-5K*}j_L)nu5qorSKS&zCiJV~>Ve}Kow+a=4c5uN_CyQ>gsH^0>ATe}~_L*|V3@ngntWDl92IAXKV%r;!@u?;E8FsY!OyFh@EuZJtRpZA}oqlUcpa;ih zoXnCMiqzEDRWF|8W(-SfQbARM;T=E%FZ`n1L7M3-Ryw>p(QPlHo_}?}U_A{pz^6$F zAvqInyrfwaGBJzM*N8B}nG;FCY_&Cb7p%!{*z9x=>W_Yjpb0J;1S&-zZ=Z<`|A#$? zF~}ts9SVt|c!UOWeR$@i)vSi@5roPRB>*p;p$?bcvAogm)7XY9A z6;-}G58Lm$Yx~3xJ&8_5q-LZxaGyRg`)9WQzk383tH!E>jH#B_nv;rGrq8k-Qbl;? zv|6xXE&>3WwCLSI;dUbi8EZ0~oeOg`{LERQ?1eKOD0$E=FUf}_0`}!s$O=vHfKi6 z*k|Urvo|i|9-j?1t9X^;b=#0Y!gO4J&&0m9_7y|zL=ht`3&>^ca~dZjo{7qL)OR+V z4qWkPz4VQtl1CStYQ1OHki7QS==zSAOpGD^HXgK!9-;t(JVM9`5TK^lVH5^>#}k9r zG(~vpXfi$siqZK7BgW_pA_uR!icuYH?&5qE3fcQV=uQ1+pRRwNGNR7=Yh|go!#uJ& ziG0qB4&MgF__B5<#+UjaE|#{D;b5CIp-% z+_wbe<`|cP=sz1U357`LFfS)9M+Ro462K{%kwA(i$AA;pbB006GIQw1NH<@RF_G3Z zb6yoPca_xPqa*R$C(&v4MOGaq*&WMDoP`0i;dz=ZJjOH-`?zsU~arwH5K){GG6qDR$HWRoIynb>G zeV)Sq85aFFr>V5D-W&CoHjzyoNul1Y>`&9Zu(Bu`Q;+H9+$dXd&$H$f&(;-Vz7^2@E3XhZyq9HP`;IHj)E zi6sJUeOzPYQN5$uCTaUA8~RKS5@);E*MBflgfL64Fqzq8ad7Yn=DV=Zcue_72~{sE z?7aU>ywg6QjS;rfW5#2zygR<>QGGaURS66A;3_XQvO+TVspOBc*9S7@@on6X?s zjk^tBhS$Jvtv8e6fOJX(5d5||LG0@~yX~Kn-ScnN3n1*croZES#bf!qzTG2119IBl z+ppt4$@Gw&F#j1p5i$d-D6IQl=~Kcms`}xah5Rn57DysCcs{>;h$vY1%Qd=HfD};s zmYJ4yA+gr(qxhM_H~JF{EhY`3FvchY;qF*5;W9ScX-at>P*|X;DH8UiyQGZLS10>i zoQrcFdwz)~l7KyqWgsfU zX?>>>$n(ves)4Ve4}R1G)AZOD`D2h)LqkeywaPvMt@BEEcm92=u8)@AihD0T^Fo`# zn#h$aFLH()WJTECs;_?If4jfc^nelK`QqS-HdA#BL^)}AZ*;ZfWZEFZwnj_)tiAM&IH>gJlsVL|s{zYfPa} zdGq_pv-E0-Vfn|(j(upx{dNA8H)7f@JD*GAzG#-ZbTl0G#@dQ#gPt=5jk|h8x2bv3 zW{b?!q=u^JPVrhWv7vk&brPD~L?>fbl9#HMA>E2O@I=3{fAyE-vq_x zUh*1>*ryJe>+9u7ZkI%Oy2k9SdNz$hdMlkMtLQZbsIvJ?2_uJ%W`e8Z+1A0s2>J95 zO_om&U)}pTbP~T>*`Yua6Gj(FZ$-U6>h(jmBgcirg_(N=SjLr$OgT7XOqooT)cH9f zMqkdn4jwh;eqW&Nm2jkKdS(oAJi*_sEStydm%x>=x37-96TxvL{JmcFF2%~f&M-%T zFh)=d-sx2Pbx)tqha5ez)3B)RcM#wZX(JL3O`hd~Y!8HGoS&2y2nc3vxq5jKs?0rJ z*6`(^t;dCFMt`I2i^h@xjc$Je;%}cSRV?8tNFngYfkkaVMb)dCjdsk;UYcO7n#9| zilD7CF_mxkr>0^$K`%J`R+yLS(AoppN zgUL9P$M5&XwgZ+vS{gHn#2~-Qa*wi4m*1ISCpozA!Ru+$Hzi@&ig}fs!RmF(-O;?% z`cQ4r%DArJYAI~low~&iRLEG}GNAvOQ-RR*AGfKEpd-mvO|IOs7we@5F(>$_(Y2mx z=gc(BI~Wv(SL-QXd9-_Gg+zPSRVLb4Ijj?a?VF1hMvRbSu$%S%1_=hf!q>(zaT`1+ z_SsX=IO3SPMi-2i;O(Ub^3-1QK&K&^Aub~v$&-`1Cb{}(u(}HEjtL@H1-r6BLnoSH zMB|*Q#uKBf!hFwBm_hBTP0(l9WJTML%CPS~0BU-*7g5Q9>CRgkQA7UeK}59p6_o@~ z6XLclSp55`9syZ6hf*JnF&vBqiJ8SQ64To7MPgrhFnm2@0lkphYiF^tmX8u~ygMdt z@j%*zFgo{UbCiR9v$&x3AbL-j(Y%M~?z-}bZgE1Ma^NI^g5wD4S=9uDr|_Uyu>aH; z$te*QVe=;2F;<}KcEIaEReAO}ux!#kJcp6xZcK+c^w1o5zq)q8rdU_@q)2F)t_Y%z zVExetXrYsKGUY2Ddd^J!6@|@YyDYP7b^0yP{i>TAtci*C1y7AjFqmtVT01ngCu6im z=>UiPQY}^YK_y(!=%dNz{adQDokxrYiBIV&o7?xo_5|k`;+MWPuJ>$O=;HWa3tE~=zqfYCkrvU@|Sj~ zQ+K4+r&yD^Jy_pFvB%+PbA)~ly(u|DtrSJMFugfUnCj3)!+K!jV>b#qi@3G@@N}5v zhoGGa&mDSogu#Bnjn2E(haJ0gB?fP}hd;HIXlq`Rv_r6;p<uv|(o@%T+{Z;VZ>7tV+>~$VRT@?1@I97^}IrA}n$N z-Ghx8dZw!trkw}wwNtp0O4noFH_ZFD)AHpTIy7Zo0h%>X!@4I2*r~Rox_#lMzD8;& zCdusGl>nC403Cul!iB-eUk_>Rl)V1T=n+m`RN8CBA!sQQ70H|+^qu~0jBNxb=te0@ z3i~B3dHkd9CuRF&))I~tWJ$C#_AlI`So?-p8~!?FhUzgI;#B!3Cz9H-`o;3S8(g=_ z$rCpd$cI{=Trwt47{}{)LZ=l`XIqo#ShJ+e1y2D^AQr8#$PH@CKG0e`&C z!gYWDIcCf}a!hSASToM7&H7!v9e2((8v2OjAB?mahvZah;5J-?NueL{jWO@Co#e#3 zc;rjG<=T&yP3ZR*j@tqgkE;|7qK^3g4)EZ6lhVe-ir5(XQf?E3)kgkh(L{E~Ye5(} zlyL5mJeqa%#`Oi0sy)wknerz6s%tF~MnLxt|H4upBMnm%C??9*auf6HM|@w<$Pzb= zCNJT+?csBDan8@5{^({r6F;6=VfGmm9j}tWolQx*j2R70?lT;P(MSe^E|wBx3CXeo zOmWS-*?dqP56Hd8Q82lUi}s~pGOobU67(tC-gZW9*(NN zWZksO7SH6)FBNWz#`C|Mhhttkjx!osO6~WgX`A|E8D)csN%9RU9O1(esPWgjB3!Lo zlC2CTi?I#w>?MS_kvJVBP z|KM|DJ9;ite2#8rzD4|BDEHdEo3F>{BcF`C^(`z!p)T-GPF-}tJMgA3P8nUP zX-YYsrdf4_F*H*5?0IF#Bnw^^O6czaKMT%VZ|r!uGQSsod=jTHLo5dRO?i^-fap9c zN=-TsmnO9~6xIU|b88OHocV~CqO(1aaIX@ktRA$#@VbJY%DQ!y9+=R&Z&5s;AoO0q z6AtCBN*t0my&I96rQpcu5R=-3p#AamzMze;$RVST{|X;z)bhVEVd0TtdRfhvy3Fpm zLy>@X9%zh$4HZ0~j0@TV%|?VfyjZ0t%s!~6cpiQzN-I309`6131`SGy9yzkjno<~; zt1;y~H+T?Rbs`V7r5KBRgt-&zc9`nD>`!W6ldq{FK||s za!sNuPeROursF5g)tkTBc^OS%qN~UV*#{t)5X9l~UF7EV2>tA5VN4IX{7>pqJJv++ zYcE6vPzgqcIW62~AYp~NNPr=AXTqGa&~j?-4Ujw~T) zd2)O^pA0>zS|zC^YtE|cFstg*rVU{0N)GmsAX~P?sXxiL`U}MP2D5(XJr&%1WhlK{TUOxOH*xbW7 zTO%twJrx-CcX;N@tm6B_Rt0tZjPl(1Tg@_v9yZ$5_*vTdQ2}_!_^6bGZZT~x>kvawbnvArH%I7{b)a?A#b!a{I96w=l%DlVyr~w&xnvUI@_gsf zF`uIuFGfj9w8*4GhlWRqks~tiavm{7oY_{ro_O)CP#=a}%As5GcI0DmQlF_R5tYU@ z_EcCWR@|nR_!Jvu>{K18?jy9Jt8zj1O5~nB@N_zt?;E3;?!WNz9e#6DHyP~fP}l-G z!7#kGehM;o)`$?y5wG){8hJ{=TiT``elG~0JaT)giD{t5z*T0Py-7>cAA||)w&->O zoa%MO8}!sKR5J>k!5G5V3Wq6DkA&I?=y%%M|L@s>Zi|o{F2>QeyL3F4lDeOBK=w&^ ziV(F+7Y%Ys(6O6kV7MLmYJZ^6aA@#9woB#V{yLwL>8Me@uhgSyv@x%`5~Fia?tueu z70TzYa}nl^o)*!sES}@vt<*Ayas3>TqSeE9q!r?YY$vpP>3QsqA<%xg%2?LgYP2($ z{qG8QiZ!j!y5&!N(4ec0V*OiucEyazOj7*eJqwy>-w07e1B0lc^p2^W@MdmK&N|LtW9?HPJo1YZR9|DmY6M7t0o(xRZ&7 zfptE$jFH$+L$u*DIiuIe)zzYiV2SI4NCEv{DS0aevW-KudY}}>j3{<1pIX_yo5sZj z9}56nTIv?xRFEhkB$ZW~P`?I?P*C?-L3$rX@OpBq%%3-M8C{O=Y07MvS}*)m{n=#x z>K$mBok~||aMY^v71F72`gYFs_^*W6C8INQnSTTn7D>PT!Hxg}vAJv@Uv&QWNO(v)=J}M~|n+CS%y2qw?GfkPG+j#nrylxfVa> zOb5*WV#aXyUP10f6ZVO_kstD>?@QA@DadE}AfI0-M*CF{lUnuM&AXG5?Fs(4?Vjl zj$6^&T;0$Sod0||p)+$_WKgqT)|u#>U74@FWid>Q(+{7KyP){5s%y$=hXOqSLye4G zpB`XUbI~^j_KiYS2W$GH>h;O5r|U0Q?Oc~TwuY@Ys#R$g%klV5<~`3=(pOnp(&+1y zmh1IZ|E&@6aQscR)~UEjE$Z^0%@R&($8>gGe*Z0iXezqLg4dOuHSJ(+(+WuIIS-8& zogbd;;R_9(#QYmqJl@ykSAW_A7OB4FatT{J4qMDV1J`>W8;*vf1s7Fw_KX%!2AD8Q z7BjlyF1T^eosC2hOa;*y^7pJ^4z7K2dHx~6tm&!I6hV1$$roD_SyJ(@S(^;LZs{8i$O?p191PP$= z?5gEtK5fq*m_9gXhf)aA+8A4h46VnJ15R;Xb2&eK0;8YV zH6(}b$J#=WQ?l8GS_XUXXIvm#?*~Vls2T%BhfYCJ+3@`pQNi@WKHMzqxo~#LQ%4YjA$}elHlaghLeVdwl zg1%4tK<^Z)HXqsw7u`D!?{RY-aj90=gvE-ZqcFILZBk0+LmTvZUCZ**I*l7NCDGSDZ-z$98 za?%xw%U^w)3qDH~(7$lZ7f>10CCTKO^V`KotvT?08u4i0e}OOV4r%>TX?&+}HW%q4 zW``1@4AvTgBy$z&sXDOeXJlhqxPd~%k^43TeBSP^2b7p68?tKb2lLpl6l^W3>BDDB z*B)s3oBgFOMLZ|hC^e}ca`d&D^Q{cVD-c_@6k^As(+>0$@aN_HPV`h(*6H*om6Dee zIKH;dFKY{{iPVI!;#sffH6<}MG_blz>>JPZ3=%(G_rOf5JWE;7kC*~D&w-3%WQ#ht z4mie+4uAW8W4CM&*V_U(c9e;SiOZ0T*Ei1A)chXsT|Q20Ji)1U>nZd*+V*VKwwqEu zTm3Ux#bQ2-)5@PbOd$>5oYgyTKaltHQ^}#Q+4iUIbVnBK;wP@Qr?cK;9g+{=E18EM zoZNLRiDSmULV`A4Q1Ge$u#%qYr@fBk?!ah?G;bYR8j^sj}+>!#n z&9lKgNr>k?%XH{DKod`mnXTrkC4l@wXb;XmH&u3Lo1xmwr;v_+kB&*NSLQL6cZTZ9 z_C`fI3NNo;T5qgIn2L7r7spNh_)714B%~Q*2KrhbHEIq%H0@B!Ig}Tuy{Hf}Mk5X3 z2V!E2+ftSXzDbSr>kD#*spH?R>pcBb5gtTC%r7>QP-G@-Z%`I^EdQxHa(>@iQGNMDN{eDiS0o;bH)KUarXw7RPP5UVRm)Z_Jy z?`hDI5vmMyIxT^X8^vB!wD$c%CUDw5*fZ4*Ae=WM5Vi+5SJNQKG!Co#|5hJoejWWq zV-?Z!&u%3FK^uei+07CF9aiZ6TQ9AhV(0$^10kMCP zS^=;kzbFnKfRk*aBn{0!yYjK0%reP_jK+5JS?=u~Ef&LJe?##htfVM1ffh;&DJQLZ z>>j40FEFhwJDqjztMN;Z-1naATSSSsL}a1Yu(NF2v#(6GbcKX$pt&L#F_jF}T_z3lox1-ixr>`Fm7Kr0MiG<^QY zz7wGdi&~4Q))e}#VEtY%F~LnIkp|HEC1Y45Ps<~R4R3U!9kv`DdOjenJed~_i2|O@ zHKgwj9SsM7Ojf%q2AhBVRI_ZkCGwp)t@YP0-Y;vT0v&@c0>g#mqw;?Yiq;z(~#Mr=YX`@W+*i7%USJ1n=kOi6B=yN4J?|EKQ&v#jV zQ{%qePNONgciR^>Y9N_;Ha@j3VfC_|s^Ae0YKxM9UXsfZjZn5&=JH&Te4+AQy@i?a znz|9+#s$v9BCi_9fV;+_VY?nj!zvq*#-l2>Zx*w2HpI1x4Gu|?;344Tx~26}KJ&>} zP}vt++nLnsV7ZFS12ep|-2L^ZC*GIeWGYy~2)nPLM;h$8JvXqdO+#md3s!{wR<*fs zO}b_e?A7;}JWEy{gzo54F5|<5xc``M-h8n12k)#&M0&rrQu^&4H@l>gv@Jbl3k+sP zq_w3^Zp3iG#M&m(_>|D?>S4XiSp0dc_;GcN*7kpC9%>;OOw--_WhC*4^}#NY8a(*~ zX7s>QJ%k9-zp29yYo$dZO3dDg_ z$P6n?Mp^iA))XVuxJy&N40h=jz4~4KU+QFhgJ@>u6~>Un=OKk-NEEeLxA#3<$x}{= zd_u9uiANVV!^l)CJ;HvvqXlC#YpVur-rn0qv=}$+bld)EX!U!3>Mc<~FHvA$NN=xJ zo|4b-#6;(_4E@glUH%E`Rc>NPSOk)RAtlAc+8*$>02n5;*<2k_3M7tBB;?dSy!lQL z=uE8mptHsPr6O7T*cTj#e|YTihsmfdCxv)^xnOo|X0x*qQ{(wYus8G92@eZ~1G)jP zn2A_e`sM`k`DW0K=QUC)+#KxiJ5d&T7Z63Tx2q%zz;7 zUNzCf9zg)$v_W9|d$QKGU<^zndioR4oRf6A`-Vb5CrM8DUrSj7UaKJ!SVC>58n)K; z&;F9+AHsrxyRUSBWcf(l!=lY~(LtmkjpV+N&F8+3PV@UE$ow|DvNmmJ8u#u<(1(Y* ze(Z09CiJTk`5KY0G*vf+_ABNu8iviM96lR_lV{-ZA#(~f3tBj)vNo&R7G2GKIKOv^ zhS?6!J%6`vJIXfu;C_R$(UJoFk|p{i#B%^VYr|6efejgE3kF@>D03pC9FNB=Vlc%A z%~51nyp{Ad%tx7xY1$Op8QqYWey$C9>-9=JJJ4fi;|2NL4PanTHd=gM z@T1xi>yX9M1r_mZZue4RB%~)XclQF`I_fka0VKZGUnc-HUtsM#lh8)$Q=RXb^p$i9 zTHl6UCSYB<%ze&<1|f7y27+Rzh0N%HRj6%G5+T+}o238(Ue*U=Rkeg*B|7&SoiW@LMj3x1i*k1_&FrY$#R-?_ z*pd@xpN?|4a8h9TV^jUr(ZqgjU6IB=N52@L4?&9p5T)IH zdm&?|uP4a3Ky?EnADC`vq*!ZVCQU6aoiCE_~nQ~-GeMj!k3R8 zdYC^oN-?{0COcUo9&+=l4U8M=TcZ)CKg6<~ zZQ^4D!xuFw}aW7BC`HnrxEC#&eArq{e^f!**rv63E4D%q*+6DV0h?I7}-fa z;NfHr;7SeB9IU$kxLEw)UkKc=gn{9sxUKujL)$UGBID{uu-G!vDv-*Oepv z7^ApJx)_hRjjtf*@Ne4IydwmV7w(Vw83)&hT3bzG_^6p@o;N1yKMt=bp!Q(Td`W&R zWTirzVw_u@ZEgL1P=g*4#pPB*@mD*19BkqADx3Gk5_R;iR=g(aDuniZwgcG7ii*DQ zKp;UOqO=uNSguoG1mDEV*K2!Cpg}LYV|g{n`y8me%X_mz#BW?Z44IB&YsRn6Gk1V2 z%LKZr1|CMBKGOm2nWvKLadK>lH-J%hZ%xBy_L@_OSRg6C+%O$5Mo;c7IVFx8`V|tt z)Ax-UQD!myw1B$yhL5&XmtOqyX4Dxq5&}%yW(=Jfh<7)Z(c1M+Y+m{EV~BZvH*7C7 zQTnYum^fRSoQULK^+?M>R8w7$)5U~ZWPk+Esz9!{nt4~4)O2)HqVj3cZVxhw3I`I zr1r``>5=R*$(5Gj44nJoYxR-mePi1YYWlveJlIL=ecV-5J2}u~k|MLvGr=snj|w2! z)Wn=7HLoqOF~D7%2EuJ<6G|%qK?`yxdM!Pm52|~Z1_QXOZkE4hdzORPHxw*ArE9SR zlKu^o|4lDEIr?)Ks9zce=b0DT_#@_w8;3P*A|Ks9)M-^0)k%txB2Jm*j&Xe(2Gotx zW~9zsc-zo_=EpFFj;stGbfq@uh}7~7^pxeVw#w2|u3Z-voOVw$*GLlg@>JOTl=brX zf_QfgC^yRla$$Rp8hgH<4g1XvKl!5@4m>T1b{I;-Fci`g2SvP6bpyUt{3KMX6Ia_e zM{_o$cSw}8MT(&I=<^kRln}I~7c^ZG8`M=ozhaErNC2S3W#iH$R`GZg&A-aC) zj2oQn9cRp0lq0}1bwho~t@fsh)Ro6>!QEfyR-EYi>#ZHT2XwsbZ;3hjG5M`b`04=k zDICJa*a+OE#PM%E(Ww)pxB6ijk88#S^emvkY+ViZIdRU{jUPb|OKrn8s5=VciSNao z1=DSB6((uS+?ASE)ZJVg)V}Pim?%N7Bg%N7&r)ncvREst_9pwCZg+MX8Ef_YG!kYL zeOELw9Q47h7#dL4uKv00_34}k_D?cn*Ex6fXPpmvH1iMfMfzOy-jmF1z0w{ z$nh$;S|q5Gh@GS*4hC*SB+Ss|Xm^`{OK_tpzv~>g9*qK%tl}f~-fUBwE?nK2sGb@4 zz^pLAkSNyUV*{(B7csF}F49xis3asN>e($QFHYEoTKddCy=@jQ+FncXkLtUm+&UP{ zGE|+YaL+dgz|K$eRDiW6O3pq)4dFa)43Bzxr(-hVi?&314Gmfu5F^pJa@T9ql|$7z zOW^cPxD0s2HQ!yg8*WkUNG7ipNXyVZz&f!Xjp;Y@B}PcH zS-z?NkVV5#dJZxbvm?N$Ydd(WA@?2^j__IGO5erY>RbQ zNYW62!T)VYrz2D2kQIPzuS4Iru2SSt^I`4nTxh@;ALpULsik-5Ob;>vV3p)Y&Ea#? zpRKJbkVfSpk-^$(Z(SGXpGUes0>v7RAnTOP&5dZzMl3UT#PFdZ_nP;!Ut}T3mkTGW zGn>pv*&H>LGFweac83jc_L?o8bxeAGRItfwLStgQfL<%S%u{(JX1C6>x*hh#Sm3z* zClV?m5!Qwl-s3-h5f?M%@WU#j#o;sPsdkoa#|@CWpNY2Sj*jJl7TNs%9RE^YwsZzn zk%ZA-#KtYr#K#P|Q7{~ZTHygZ6{0u9EwfO3nCL|Jqs2xiaEMH})g|^jQLWE;r&UI_ z#_yKAov{r z9Q>)I29}F&QO)Os@oM$Aaj+G6#MJhshLFiG@A!t=_RF<8;8WAc@C$0hiw;^(R+tKo zFTeihwKj1bRhb3V_8w5pkjpe@E)?nVP`ekB*Z?=GoiUITsiL-{}JP4RV@iNgzQ1 zE?Qj(mE#f*k=ycxkt=-#nweBzR30>#F5^#CV_7wrQ=%gG*=uo|Y7#wZ%o62F>OxjD z$Wb*;=jGhkFLuQM8}uy|-Vj3$)uEx;c+fpQnVi~~{@mHrBAtbT2s1glXSCTcb_FvM zW^v2r_(~$+<^Ji-D`Dr&pN$||#|yIu%sZJLO)if`apIEUvu`@Ya^j6&E8O6-Kz;{i z(Qzqb_&E=WgT#@9_h;RV*nFn}xAb`_eyg!S?qI){q>&gDvd68*jZUExeL}E@Avh-q zeRjLXAnh6V)C67^yh?U)aSR%v(Jcb)$OTT;lqMiO4&LyUpx@j?q^P= zN8`tn-YQm8_yT?P!N1g>p>#uk%qr2`(fai?LU#Ub`}d(+?81m&>@-;dD=MfxXD{)vR0Bia+;-G+(FwjY%_WpTfliFLdiN(jRhpcB2u1qz zR3Cnw$?PM(OD;k7v|3h>DP+huNAV=u-XC+S788|Pq~#GY?5EF*>r&L>g^bBtV9Rqz z0LQRiP$Lg&)EItPAlV4GAdJ@ya;APcC@%0~7@w2|gC44wu`fiAEHfMJ)POS_&X-(m zqvBYZ0t^8HKUV(!IE9WZZsoVXBrZ*02m;aAYeZU-P6`6dohoR0*I2KrUxPNKl`uCM z%Ep&y3%@hBR)5!D;rG>Wgsu;Zo4I`i9f=n4TV*;D^+^D`C7MHE+}FYFPmQ^dcZXbE z&ZsqpP)~c?$qf2t9U3}F`n%^0xS`U%|RF zpuE&NRt(-VwVzLzP%Dq5J684b@v5B#F<$|IZXVk}m^$^>Q=kVbP~VABR`N(}bj}rn z&5;CV{h*B}g0`jFEjO(FFjx5P)5y?eQ247}*g_(VtTg8aT_RVgQZm7A&p2ky1L;mG z)J*=ljw*RBUh#CH#KR4y|L_-|*3$LNDOso-W^O%x9l>f8`#Mrrhq*6e{I?=+-h`|% zosdOXf-w?DjYQrx-n_6)(`0!4P~br(6)eHPgr7*iJDQ@d{;Rj(yPIUUJ&e&qGGNFs zT=#+91(NmA+>qQT1JND&D0u-}&$%6HIXNy7PD>ui^C`{WoPcq)&+bG)oxe&fk9~_ZL|~VIyMM4~2cT z!l=yT%IrPbL#kKdTcA=Retzn#{*v^iA;IbCV;`*Xm*z1Nh-)sLd1hA%Kezbh{wWMj zTKRdjc*5kKy*^QRHR9pjuXWr$#T}8B{VMp z879A{HGCRz0+?;$pOhFb&gh(s*@o3FbsNK~f0j*1SYv~Bec>7>5wJF^%dB|1$Uq?m z=Eyr$yb$F`gpUwQ(Eo(l96>#@xw4L=W!aetSZs@q#!LiH`{8r__Q`^BppeoPV~Yh< zoU@s7h3Ed#MeSp~^^uTvGF+;=I&=W(mI)qfU)Q0nH+B0oVP zvxC;mfauWhf_~4{9aGR7HX4?Cv z5;$RN@r%1E$@A~h*qNa1kLtczC4$d_HFs`D+V_VehHY^fijU-9=Gs{$aDc7wwWTqx zw{x>c1vK>|qD4MbUV5_+Dt@T5=$r2d&yw?Utrd5}D*+e7rsuscjE z4phc*3VIeaE$_#}McBNOm!E1G$}!F3(64`Zlf!IK40LYU({20U9}D3-_oUpT>O~D~ zC>PeczYA8L-&JULA9~leX-x1Ms!WnPVkDIk?L^iOW=D7$r|)P(Btt1iYdcT0(E`52 zVgna-BPY|tC?Sp4g2ZQLva&^7JEr&%=9uY4Zo8ZjHJ-m&{Asme02I{?`m37CT=n_9 z^D>)qBCZ#}V=&B)`{jPrK4i0YNp<)VKTOnaaK-A#yx!^2MV(pIqD`T%MN*MBn0c)j zgb$Yr#N;G~X^{>lF}x7f%^!)ywa9Db;c7;;BYJv2Dzu5;nW=$bt?svN8^xLTXBNUb zti2>Ff3jYCKsra;AQq3QR0Iwb>sKiUQ56vw^I}kuZKO>Y=;0yqE^m`Qvqy-~pTzL| zJP|)u4=LhbW@&Pm%6$Cb|1cmQ3+S}c3DGpo>iQgjs>`k^#{+?_+JpvpPa|(yv+mI z5p>snCCA%TbP*Q++4GSaa%YQT^k$o*$~;$tdOdMA_t6s13zyiJ!~81tBZ?#+SzahQT40EYWCJ zT%H-E1+KK!y&Dnb`3kAQ@Je?F?v0lYq@z@(JT;Rsqe_W zNYEAHYdwh!y5yEr>IlxwxGv4cF7SpJ|611E%2}}|vG}6S_D|*t0OW^G#F50Oum}#s z!vg6XzBcT;0zhH~ON#-H3c-T>WB1B`>8qy2@)*23%o1+o9MzuM2FoUU178+^)M;i| zJl&qFpDGB2r2eSnYId+BZ2Np8YbnhBMPDEKA+@;HLpb?ir2n8kQS?246TjH4flhhu&2HAN{=4-VO)ds1_>AFk2?2sF(YgXN83VU21l56U zX9JB&7;qwEQ)UU}hAry_HEs~3ZX2ZkE3Rf2!y$47XBzUHc`V)gwdx?jlS;ru57n#Q zl~qi1#ZgIj~2ybgCICar!nyx)*h?;tgZ)|xkBQ9r;#RR7nQELkr3Vd`(cR}l1V?aB|OrH`)2F) zKqA1l8L?q+NtY=b93cDq&ENhf2dq`{2?o~B$6}nOvTYBr!Ugr)AXVdLfc7Lld|88Ijyx0U?a9XLjZeB$+)$qS1VD4ha+ zPW;CRI9wV{Y*AN@B;ub7H$^o;|Bt5gaA))V+b~fSHTtDSjnE-f?L9+PwN<0E_G(d- z*dz98X|0&Gg<3`Jy%MAL-Ze@T5kYIj3X(Vd9mo3*I6TjjJh|`tb6w~8p;n*uUKn#S zB)doj3)-XK!(xV->=%iZgmwcENg98;dqh&7o-%TdDV;HlHzwD~zdbhX^ws$N(j3I3 z%j8EhJScu)$0$g&5ls*+^R1T5dR<9;wl`kF@KOErLOF?Zb^h=YM8Qijpiulfg9a05&zgGJUV3Aj4jY)TSb5_?QWf6A*bNGUl$Sxe{FaPKk+c53Tj{ecP4F#3E<$0JzO(U$(hz{C2`TW)iudf^mIao z`g|}H{Y{3>({8Hqpoyi!h&qS{lHP*;g&q}ZA=2a~`S$KtgpJuTZIz{@T_)!OVMyd?H;PD>>ZE^?R znCQ~TCPGJaj+7*_Tm~VZaXJ-o7`o| z0h7!@51pI?b3=JLV5zg?GO@x)9sh`$?S8YWKaPb!SxMkgdVefu^%>@xn0Jew$?Cj2 z_-$|?$M{BW*eJPt4ilxnpV~??c%PKhn2!(X|LRn$HQn?|KF?Q9wd3wmZsb)?o|(7| zDJ^dK^ZOpfxFYjLv*8w)Bbsg@A}*S3@$@6Q*ZrzCptTH+0T-P)0uZ@ns)yiD!aYm7@ z<~I4|RSIXQITEQvmMI6K{pH-M82x#@?|X8nf)Y2tkhbxMYWtcI4{ACL9I6SDalGt9 z`WzOjA8!j=lo0W^`y0c=Lr(zd9$hOj3OQsmCVUdyZe)_b2@9z+fiFftTwka|m z8Fr7F<2)k;Xeo3ACoGi9zs!uA!&rZwe(P=mPD?Wy!Lu(Na2z4G;_Lx@qu!pD0crG} zSC#F-T(|DlNp3ZBWp>lb?Ni!Bk1QN(mma#&J>mzLAMewduE{pmadYj(K^_LBuH{os z%*mACeL%}{E7iESpR(pUA0G_9<^AS8cf2+03idysK4adM=Zzgo1!FjYaI$geoe~O^ zk;<|9COgUTG6&%hl|a##6DJvoVm_-uO+)3PFzsnGN(fG6v0CFR^dE z{`;gpfG(Gf@hsf_MD3(1?t8Aw(RGoINjNC3-EOD61gAw@c&dUlOe2<3+rJ@N&ctj5 zO>NH2Wg;5;&a4o9NX(jPI*}C?zuWbsmr;UbTJDrqFo~Fc=c0sS3Btwev2hYOGHQ zPBd#Qp%!`wGj^$~>Q$``xD&OvywNl|J*dX5SnPyH2Mm$MfJ+IKNkR0Xe}mMjn~LTy z@A(qq<}`AN=#MSG#dLpC{~hg6KW;9z5(*H#9bQQli_9jb$ySJn2XKjv@Tr~|Mx=}D zMBgl=6`3>~bEmDoHo+F`tzTa*YRy(3o3Ep2e(X??Z`n4i(eCIJ3+V8-j>YHQY91^@ zZ0)2~#bxdDHx7GW9E*5%g!YPA_ODXQg+eI&yUN{@bDV8UxmNf071uc>m85W}7VNb@zq z6lOJfWfK-6ufmV2iS5#}%}!GgP_so)5JP5m7pYD-N-t)$2kPMhm6>JvOo17Ydol{X z=@Fwlq&MI$g@IQ3Erhdyi@xi7#mY)DGqvt77EwcHW& zxlH^O){j|#z3@ycryS^UABm_NL%m`XZhh(_fmt#x!lnfrhA#(BO9!R-S9Rvf^y6lt zAdgp>Tg%B70ta!9x&ey`iNCgOm>rHDO^*65JNth8Hl`?Ci6?8@D0c>o4HJ|Pq^W+b z_s^wpjyvTiN62?=W!7zUu%f{Mwww~lYUbT-fu7zKD&0%RQVi{eM8h-X>(vl~>*bG{ zXMwC@)a+dm{|O927inv;DT2?RXK*Or#$VU>43VOFFfa;`HNho{y4hVjbCH|VwT^Z1 zpAhXBkfjL{`W2j^?7-|z!xM+yfbLW@#lLfHI|glNU0T=$ti{Dy;X4BqVl?Fzxp3bs zElor0YUgAW`8jqtg_~8CukdeeYkQljo{Q|f&oXem9k6g62d447cy_4ssWKh2@;ZTR zd2se~Mo#Oc@}S%j{`UB^G{Nbo>@g)ch8)!WXLH7gGg#YH_OBWH8K6i8F?4#g6li(= zeQ#X%psp`>&;YAZXTh|Gj{C@HHJnBQ8I1Gf$@f}za*^-;KtzQi+Bz?Qd6f38&SNrB zqX#>0AADs$LYDTcJyBq=H!!1}eCO8vlujo01~m&*KsQGQa!&TGHJc8#%mT{q-~{H8|=8FRr3-D&mlT zW$HCZtd_GbSpRA!%!GQ83p-$9;+95@@!Q?+58my6(gGB!hm;%3dGRtG0$qQi(~rSY z(v=neErC>WBYiJhzw&|PYmr;04RtZhp_+CTg}R&rjxjSxyM)KAW&KK*EDH;-EXMMH1wEjMJYC~tKKqxj$okI_kt&nol?pcD_^(y)+Jm*c zHLbKpzHE~)&ilVQMJCFdyqTqZHXF7B`?<%-fDD1p4oc%Frow8E2#Uf;veW~wAtUrU||VmwJ@Ts3RDOt7jm3hrSXq#0WzM2&gFZ!A#mvZcVAqz7M& z#VCrGhjUUHte|`0+j|@CWFUjC>L*tgwYkn|u64AkWXmbD7I7)c8|62% zTuzXh&S*Rh*hhUR4VEX$B3?DbWQ?7NG@Xz~^D0sH#;TfiNKxi1(j`rin9%%=DZ=b^)})bta8F^L-^?=iMKw0g}!V^xXHEsAN)**RSr~x1WURDz&Nz6(pYI)Q6#RSi4<~iQv=<*}cJ93F-JdHqtn2G1DdZlh zbjs!^Bvr}O7IE$k?aw~rcDQe4GjjFy{7X~2UBX@w-$!ZJ_SQ%Hd^O3Tyv_kV!Dl85 ztD`%3%?O%U{^g?J7{QGf zXnk)s(o{oJ&l^=EZ=*wAs(v+9ndRmF)WT-lDQ0mvkO$hibRz-`zIYVSe{rHE$T8&; zen6MYUsdZ9<>QT~dGdiTTY{2yM3p1%a7g}RU>9Qtps+rG4A6L>&$Xy7uUSfnt3Zk$ zr?z&LC@X{q39+=-FP<*fgCs*Qu3L7>UwhGND~3Qh23|g&?X@|^s@i#UO-7BSY=b(w zDQu~*)85`496LpP)_()$wUt0E(z*^e!p(x0zvJXT+Gf}((p@YW)@-e$?y@!-zAh=Z z7zqF6F^MV?I!wHH{}Z`aWYI3VM7KPQZ)s1Ny=*Z=BU@~As~V1}?OuS;C^pA19(rQmMpEh4j|zR6U#|{o zZ}iUxPixCs_{GSm%oXZXAHZNYN_8xAB63q^x2|K71%rw-6{e|0Og1T*p&J#z_DS zI)Cj#`>3cTaB>T2+{uF;<6<*?AuZaFVH4GPIAl)>L8A+)d7Udb8$ zw+XR#MgYSgQpY_++NHZ|0T-U>pZ43K;r+`d(Fyrra?AZs@QoL`*g?TK-*c}bM)`)x zFo|!$#pOJ|yo4GW)Z#CDhipa*Ri5R^e!10AP7!Jpcz@btX|Q;|kQ|f+AG-8DnLVlp6XNVI{RmACQ*-S?1QyhK zOG`6M1obDnMys_lw*y$?NU&;AYuoYY>Rh|mIVHHpMa?f{CwFwqL5woHclHerLy`X1 zb_FU~m&kcb4omXbh&+y8`ppcRH}c`)$Db=}{q1a?9`JhS-Gt>le(?kaFOdm@z`}Dx zm3aV$U*h7x)Fd2VwCLty(e~$&?K{dPl2H6?Wvt=Vq^mQriY{qk{mT-UL`aSP@hD!s zs|0q%af9b4nd@Lt?6|GG&_%#kw3OkQlTIvdVNfckr3+3!utSFJG+87j^_whlRnISf;Ga2R>Ybu?|Lbto$uRc4qlskIT3(t#3D+Q zjmPvr-x3V5R5>zj=Oy#cg0K|BZ}hRp$x2rZ`8dLKL;G#>Iopd2j=6Eq8TXy$!SV%( zBSVLiBqJjM(WM*DzwK^?+qs9jm(CE|!Dvhqa1(py=c@J_&>uVA70q1f<}9zx?YnLb zyCE3uMT_unLx%TAJ!wAVdAFg?DOK| z#Nh{XkK!ZAe&YN#)*YmwVH!;2lx)n4`R4l)Upk$gAybR`Vu5)Us1kF(b-^B(FLb{_ zI$nYNWe%bt|D_4S{dX_i6|mGc2jmH&n;OOxpk z3ImU2q1~LAjg(;2P?i`jk6XlKi@CTHJRCc>n|IiEV6p;une4R`Ku z+KGyjoho=c0)rAVhx7@s%lO!s?43oR|GdHYazP7SS1YP8eiZY~p$y!EWh;p~$riMt z83h{r?O21w*O>}IxY=UM=O-(Sn6iO&TPIR_KuwCUm=cU6>>vr<3#;?IO+kYm70zw@ zGTYy0uV$-5fD4Pgr;hbUO`$-`nRBb<#LSp8mr4}!T!ZRdJ@3@B@i+$zIr>LXRQm0x z#GA84+)T$fMht2FHZ=Jq|93n2{#a#g#aF}BiicW)4>wm#u~20BGUCua6DI5L4_VpIds1c9@MgwK-jHjc&~t+YJEO`WbLi;8)o_QA7(YZ zk2N&S=Z?+gs7?ukh~E_D;!wQXnxNM7ym@g5EH>%j-wf4yoOL*J4_WlkY4|FvPoo|= zE|o0{-NwFO2pN?;iozEBoSqc}j{+y#Kb^?3jpq1OvgppplU4wUV5j|#2ks^AF(#xR zfAN=Y-5dPhES5Ur2_M$=1W@cHsQcf@9HXOOKB2~LQgZu+)yZ6;GS<&Br@pX8z8@hrO7WA_hLD*32}_nOoe z38bX=?ddQE_1>uRYsdQsQ$PEXtN_{n8^e*j@jewE7Wk&PWSjZZ=K55|6$K9gk6UE+ z=cq*Lr-RQ~)rW8m#ozSV1Y89Ueg zmWTm}tpJ9bdnlE_V(^f>>qT9ciCPT^-^l;-=<5=kKGUE#Q6HbVWgeUvTaw!7iHg2B z9}giILtAN`{@gA(4|(O=c9ZUrQ#zEC5tg559kHASanXLd84X~Wlq~0WX3p%|3=8IO zE>Nwsx-5BNN4=;o)y>$%@(XXrzCLJ>P*Z4lg^{1xzWY~vNQEO|YI2#%@VrgudKTXF zJb_{rAe{^FhIZQoCX%c06k)mDitvhM>M?}1o^7#(ubY*~)M!m!3TQuhj`M|7r~6gC zGWI3xcDt4BMZkhX+%Mn3R^2vHM@#yPQ{vFYek*HJugzJ-?)e{$M)1lAUtqZY(W8}i z=lGc~q>J;RFuLrc3&FhsuLt#A!ny6=K?g^incxwWduyWZO{tWV>0&PA*^dOMJQBYYU!DwOv>BxH-+orc6JppL#2lF<%ke5m z=t!L+g3#AXr;-eNft@b3{>~i|zwxY()H&_;9w@lUZD*4&Tm{#a4=6)779d~Wz^@Ju z4dW)p?@lE5OULEp>{ARBt-L&czW@)(IgVT8+rZiAlRla7%{gvlPFH&?sqrlFQz#;E z`qB~c$MZgT=dIDoGRYxaV$wK9h;{D*$#RLg2xv?wPP zA>{kR?D;F*uKfv}bF5nOqiQOEW>^4&Gp39Y=wkCu4$?jqo{}EGua->z5gVSmXCEZXJ?#cWwje}FX3VGkLk;y{pNgNW+2Wv4WnQWSdg~Q| z9{G*vV5WrwbzO2E1wq-S23ca2Qrxt5Qj6!~!f->OX~5DYZZNh@7)ZgwMB#Aj!|`z9 z=7GLmwCGt}RRtL%GVA-HTRnxE`obAyeMY>0bTnA*Mp3M+-QHx1y;4_YT6FeVy=%B3 z(F&(wRbT37pR={Jp2ZWZ?s9nl?wtb=ykIa{Evx65uzZgJl|yRP!&%qliaMHX?TLcS zti||pr6Up?92WJnh(3~D<`XVJL}Muk_rvGi<5KP^{sw~_id&}t7p4^ z(``Pspvm^`jd*%VeZPFh)}LR(Cg(Lx1UhFDHN`iGhF#u2A1}u>=04os=?fkMTL*DBE|bAqbMfa@4OYb{3h#y z+l<>11}_;~rT{9QJb5z=gRyV}#^(BZh1^>B{}x76Z5X794CIk$Fg*p#AdNg%g>P^L zJrm%%@aalJ$@Ju#9$nys>3Y4VuZs8N-s)h;Xp_sk1)aNp>o&F^A;DgT6O{n`d9<(o z8N2*>o)S+c@_c1BlehpJAN`27Qd*~nFEWOih%VtvsQ3CBu1iPBjuM4nmUwmB>NxSP zhYr6v9V)AW%%Wu|Sw0l94=2`VZOlIFk(~=2zS2dsrj;(jx)yk9B zPPTbu$vwu0{9bC2FDc=M>u&Y(Gf`ER8LCqZcFdu_>Gb>bt$=$h5{e?`d*Phsn(ObK zb{zzUPt~eVb_c8e{^xwOyc2)=pOTF4b#}(pP@eq>;{$_ed&pXSgGQC@Jx;yIEmd$U zzDq4CcVqk2N^~3Yr&Fw&^RVuzPoosjEUsiXv?S(Th*9v_y1^Fx!d&yA*K2>n6It*$ z?b+0SmG>{Qw9X&MpOty|yiKkPZ!{X!t~tvmiB;#$NyO-ubf2MUUn_m3taLfF<-E9Vwf_WkdvXrM z-NzZ!x%HxAe{Ec-)@@4)oUt>v@oNBqIVoW#yeQeCH|il=?tITH@68}I*b-Tz1G_KZ z6K*v<{K7!)%Bu}phm!j6P`k^`OQ2A|P~`Q@OD**En`g|M>SXlf>2(URb|0_3 zxc!`hQlv{p$(ynQ-=m>!!fA>jP2_PYidYI@r8ru}VY>vWMDgA?ugVfm3Q4?Sf16xz z+lDGAR5(YwIx;d?5`Iu(i6GO~VM5{}S8bnzHgw_p!zGL!B%n~%Oa5A%DA*q=W8 zGEX(8?<@Rm*`T2)8~j_ny>tO^cx;{Y1Sl4hI_ zrA9lM(o}?${R7>q*|l2}!W_r*Fs{0h95U2YK0!Yr8KY$x@@{wB#Q$@|Zk(jT3$QR( zHL^*nK*uM$z4 zFSu9>C^6v*9|3ZU+JU^rMb7mblm8_c)OxwZ6xScn`VXlB_qHGN2*|GdtJl1264F~D zVC(*CYgDG{q6hc&GV{jV&3T<0!PmYqSBZROArw&By7AC>Mt8`hzQ@~OV)}8e%6q`L z)v_chZG~;@?fK8wkAF*p)Nz|wK$vA{$ukO?jpj66WhGx6wmAjo%`3(D&_z3S z5ztg%CeML2hc_Qd{#5l&pCggd2y5cQhoLIMjqfP z^GE%SF0OB>f-iG?q5@@aHH5juvRuw~y&fmSKmB`e|7Cz(GZdijg`x;b)A<%ZU4AMY zpodESd+v7Lx%nFYb;4CfN3Ko3u?yIrVPp(_sS9K{Oi;^FngIF5iNfRSg(wu99`#J? zK7Us~_>9#k3=?s#GWJcb7Z?ER>nm3$+*yEsgW^g5#}nP^#%Jr1udgbHch8h7X0nD+?R&_b z2Y>Dz9)B>Bil$@>A{;$CQh#_;b|1nc1I%)bvb@S~qQi^QLn|Y%iq;#?LpICPZU)Uy z%GQnl_kB#@a~-RBEJ)XpMZ+C%Q()F|f-jZ;*zyC%+KQb)+!bCG?E1oHC^Vg}^_K!b|QSyuBqxAav@Z;)d*b7`DVnCC) z5ifGvq3@_8o`)~T&a1b^F;R>PvEEPP@<+01Z)lYiE?}D@;Bbn_BgMAIa>pl?#bf{8 z68ghP16C{Nm9)cN^k0p1VlVYk$$41FWm%Suf$Iclb+JCcs()=D8Y9#?Dkv|L><$cf2y~2z4647ilWBi}h2%Od;r%@zR5qlrh^FV+VR|ejU#v^`KiVlm zAM*EvNwqEX?XoKOM@L^h^Sl>if}35;&7p@9VlRWw-1Pm0OxHblsm-Glf;=9oz2wGE zoh7l^rcxgAh)XdTe_1L=b{wBHQKZFNEV-9*wjV_61|}%3U>K|1LM2+(ip`n_n?`y* zR|ZN9Mc`II6?7|xC#0h!dEM4KQpMsTnO9c_XEF;>Q)8HZnX%bwqKW0f>M7#1Be@ZM z*8L~&=<9+Nmq)t2>Wl8XOHxLg+}Lqine#lqHqwDuBmJAhlk1GVf5PpUmOff3E&_C( z3y!9v{qhKHIrY(%Ta-UN|(}CED-s)B>6K7&u!Au&W!4G z!@PLhZ_M+_tsWfsD`n69KgG3qc(~^3Z}H&P=cMwMow?j#^0Mu=Z3#VbBO$FjLcI_3 ze9~Jga>ibo_GD=3&+3RybNlZ}SK++%Tl>zDR&EV@AsCw?r_Gf}`kiaP7NO9+(U@9n$XI;lN_ZW{+47NCEvGqsv?{>o`13J_vF>X zP>;W~ydC6qNFz7oa3+uidvz>)AJid#Cfg^WjEjL|u7Ce`HbgbJq2PLfyxMa`ZX~XU z;7dYo`@0nd3{NV5v{*9MQqC@PcAuo~CVjo4#?CDc562s^revE=_(S>HLp9QY8EO13 zEc1gxNt$tRT@PJw=E6fyesX3~mu^1QxNbdylNu);WGhF#rumX1dob7JF4Mqm#0H_- zwKk?@wkH@dt(bw>g!e2UM~J-4;5b z5N4oD$j|oO2=wi01%53fo{e<7o~9mSteQfM{h=Ic;+fp!%MyBSXr6~REMR$Eq=ST9 z=%}^Y%k7nEp$=0FRw@bk?`)kUUef~O)WKeMF*L&M^1okaj+8ittg0Q#e*Q<<6ICW0 zz>r=?qp~pf*^WQnRh*zO!0a>I<=OeW<3_^-(69I<{;XbgI`|*=bA*;>wO^)%=+vdG z>$RZvTWx1~{@$z=2OZjkb?kJ%ikzrSGhb{^>$ z56p7y()Ij{D~C_7Q{!Ey+PpYjyWp*l!LN@L9Voy1qEaQ#JA>b$#h4{W)Z& zVF?$N6((W!^G#8&43&ZFpqx$`Bs1&EG_``4(sXx%|J784JHYFoTHxS&5P2SoZOo)t z=NtI&E?6Rb*YD@5m77cEcOA=riV5hp6G>C3vFBUex6m$ffzO}?prNw{#O9*Gaq_aBf zetjw_^PlA_l7u99y;`ktF3^&6N1g|#{TUD&rvp*@w;Q5~O0GY9FRK&YGbF-D@sw*a z9f`=o=>V0>3AuRE=1=0D(6OQD5*3C&x@(t?#_K{QQLj2Xf|imd8!J|79vbI**ncjG(e_i^6=>;B=Gw zAOJ(}x~=mZOs1nW9oH@+F&XwMsJ?z$@wUS|idNcH=>Bf0!n;r;y3Fm5XHq+JY}St^ zE=tqYYx3F`7X!b1gXVqrZr~(|=)_b)1P?AxOVn>rt537^f94tF=eiD0eK$C-nSI?+ zEmDYB7w)p0CF`tkVW~2*rRoW*2=h6^>P{2-)LrKM**rVpEnj5$j=!(#oR*9)mpolC)!+uC0`gU3BgAi#et8Tr@p@CUoffi`-5_wO@4;vIDK>{Y0r3fE9UDj|j>#5({|k?4>}sm4Fw5zDrg zW#jKir#rCA+(?xqy9^)i<=Kc9@e8a5oOl@n|Evyu{jLB#p@jTW`}e_7e#8D} zQmZ(rXB`#Sl1*H9%+9b*_ODEagVR)-?|*l{{v1``NM-6hXb>yWO3B<+rf%JxhPam4 z?ah)-htGMP+LLo2NXCLonrEkcdWP)@gK6@rzE|hOEnf<7T^Un)+qbvc;W3(Ef0KqX z=i|##-JtiV-;?C~^cV_P?%AS}p}|agoGyug%LS>QYLMZ*A5wnt(hoO%-*$6-iX@Pu z=$8gAqp@2WBs`R{i6WmL->`usiSrx+-TrrX`g*RPBvD!i9G(z5?B5<+bjm~b>AAIy z*Vi{^tAdZA(fw@7zkXPFPDMp%o>cR`WpuMVu|mWn)qcdicCz)HI_hfUaE{olx}0!N z+zRoz>HAP%a5H1;@X}G+XZ^bV?~B^Sc$%)O2faTvUs$-rQ#c_ouCe)yeq-g z%c8d-_%y>qqTb!ZnZk+9P4H#MNw{8gT%&)&?}7rxP+&aGy{Zb7Ncx&qkeXOFNRF(9By_F|Icaz67bYzyK|J3CvcM!czxgk3_uh2|`e3#F36{PRQZM4oQqouOlv(mv< zXHM_`j*vrAR_${e-C4qI-rJbU9y>>RIabxx6ICwy>PD6}GTa0AJRAdz0t0K#SrM%< za>RwNEpJvD)cN)^lTi(yO|>k#%;LgOJrbWYqvx<0B3wi3ICkfsn>G*Gn1bQ_<{22CtwELY)#@TZgW5C z1nkAXu~~}QV8%wH?*mw$P4G$3*By5K`Nzyxa_2uqJX||DcXLG+>$wF6+9U>fb~A%W z0l$^MazdD2%!or=2{_37{!!^=7VKc_-<&b)tN`RANDxTgdYE65(SG`ynVHQg}Ik)xjMW$bUP_4S zQhvHGl9Q;VIMJWaAT05qKsO2#wpheN6G&o?xRs=q3LzUp+-w-L3j9szzAHbwvEg*t zUp9BEPDmPWN}w<&&F7TO-t`<+BQM0GDtCP$c4Lh``T_qatS;8cN2Xas+c#>jK~ICR9d z>V|rTyPb=k$;jlUY?F^>utDCYLHz}4|1)Sx%M(Wv(N7v3g43-=yQb&tmaH-O2Y>#d;rkwla5U9u zntvE5H9da-q*gFXl$TpmA+sW8vl$$cjv75!0?X!0P}5L6>raDfg`nT%1j>hA?0hPy zaymwcH->`|Q?A2N83+;(^q1ekxZxzJYp`ERnE_GMIh|kRmWDbq(!WDHC7%}C&PASj zJ&ME?$K9CR-slIS1PUk^3!CKQ{`dy=`^J`-p>9=E68sv<_T;KNK3W=4_phzoTDqo) ze^=#I^#X)FG?2Nru=jA6SOW`kuA-)X7vR+^GcSB}#5sTY7%1ypMJfXZ4*1krWEyCl z>lQet-LLlEeUrG3Cf>A4tGe`SjMrZIlp;gkuv6EUcPy+e$o}>fxrX)HfV_9~?+Jz= zg$Z~4_jg9j81Y5U$9V^Z{2zRz=wdPKZ8Z~aWO8xf2l2u0HC_AaBy@p>Ep23#%#UPy z{+$5qVLeKGl6y)%9^}SW0Jf!+QHeK(!W3H5BQy`crIoBVx=zd@)!PES-fQZ1`pR$D zw(BYc_zx7s<&gchF?+97GKi$#sx)>TE>GpSnlAC{W;pc9jVoH%|GrCjoH;OV3Mo$=KWp>q0yW{FVy>9H?EoHuMeR_2uj<(sNgO`@kw=t4X4H zm;PxQEFG{EJ{u_iXON3oBL7MMEimANx@xyTWN6K7zpb}8S6yAiPL(B?HlCHs`UW{C z51s)MfA)n@)JCu%O(ph?>kC@VvJUat{Aq%hY%S!O7l8f7uLH@QNdx(-w7u9m{=YQw zdCbWvJil{XLP^zL-129JVE=n`LC?0;loQHyeYaa{3NiixKV#GhjswpNC;^ro)%DMS zHlg%jCqQ4M%e?dKsHUjSq^R=q?QHr`rL1aEYsF0z=`oWsc=r!Wat~uvhCQy1=NZ8@ zPkHSTy-`O($Dx)pn4HL8NmbQHNO2`97A<4Tt6ae-0r-DT& z6DGCfuPNosA7-`-DqmTgO>SNSOoj}p`02B;ibB81wIjoJ@~ZocRu@byt}v>~gxS+? z`CCPFXd4tg_$Xt=K%i}3Hi6yVUFhBA+I{&!^gWyh# zWzc@%*iSD2=qz0HEIc1}iX>h|z_O>XJ+zG;XHL`VxcVNvLwQ zT&QEd`j&OkV=&fIw7Y9n)QU%`4`LuTt0wPz!Bl4FJ*&=&V|cTL<40dxYX0tI;xwwZ zGsd`enx_`xuZ5Kh%Rw&2T|db7WzM8NT#2VR$`{TqQ8_L(`eU%K;bB>R1YcgL@SEaN z&;c$jqW#+GOZ=?a@=v|d!F8*##vj$F9FoejyUKtgX?H}%yAWN7+3UU6#Z*_ylEMqw zQ>YK+8>BQdFMcCc3mDr099>(*_D*F_#tkYh}5ZIpUx(3?Z_rnykTNb(R5nb{eWOCB)??XweDsJuIVGP!9;I{ipz4 z%hN3ByE#EwPf|^;rv?6+uvBpim+Z@YjlzgsK_@|1qxj4tX8gy|#i_$lF8@3sayZZS zyc!Z)rQ||NCzkb<@W2I(@_7Ih4_RpDqF2}^*j#44++sZ(KXT>dr=5F|d_#49t9 zzdE^~qB4BESm=%v1>Wa1N_a}W^Fgc#*O|{iG9&yDDw1%W_pG-~LAB8^YRI{;>gvMw z3;OQ%iyU{XBJ4BcndRxJJ|^S6LWUR8Zl#b9P~6*(5I2$*#PC81*r>P;&apQ=44-;x=08 zy}+kJrmiO|XE%iYT02lL1N7rZZ(hsKZX@WED$4m)Gyq^6ez-t5k3?NmXx`_Fy%pjX zTk;+Dnq991t`Ov3oGsY|QPZr;ebQe5q&mzXS8Y;J6r--1tp44vZF%)uk>`N5-V{Ww zl)$|)NS~ykvVh6=DW%}aB)90+O)EM+0#+cz95v!sZdi)cb(^h&J&|@RMZ502ohyO$ zvb)cFZuJFv*vX!tE-a+EG1DF3mt{_vR8ZQEgGuLEjq-~j`gFW=h zl&0aWhNiN);BD+g>b%j!WMrj+ot(pSHMt!2-$k#8`x8{*H0pj`jwl zM;2IAH$}l+0{E^G2|v}V!NVoqFBFW_bmDVWvygwVkGpuHvYm}Mwi)hOReK#xn-5t{ z@dZuMb31u{D;RgyC}9Yy6}=eUO#VqERU?0CW{-FNDnjafQ^2Rx{B>S9d_i?Mocs?) z0hI-lnI rQ7T@5-N6uRnBECc$`8;Ox}2~hjwX;N$zEAt9L>BhSE9an^R_@#e34w z8vw?MDg>ou^4Cu096; z_)H$Zb+mc<>$bXX_33;dv^S=J8JP2%g9uIKhqH|19huEhLOaQ0n{Ans@l^Q5^0axh zYF*8K6fkI4oVL-nJ_~m-0v=RUa3ekOv+|CHZ?L74jOhe3g>%T5G;LU-g zjLxR6&J$L097Tg})NV1F{Q;b8?Nq*Z=DzT~zvOB=9Fo~&tNX+e@l+*mEdQ@YCK1}x zCig+sbFHvim>(w>XalXm%3YB5a{qvZoUw0cBeJY3|B8=jL;GjN*+D;;)ZG_j%i*`` zlgX6U-GfUdF2irGO?=9g8PXWfr?2#n*6hir$H2w+3$!hwBvgTn&`R8UiAM!}m#PuKzzC{kR13n*U06sad^WJy^F z)iGLpEw!}Tc4mfpF<=?{*;U&p=wT=LyEm=;@3qaNm9t#!s&<$D06PCcy(dpA_m9Ha z+N}dIu`XP=&iU=?)^M=$K`Bm~fUD333w{#~Bxfw#l1KItSb5HW^Vaw4HY!%qWjDGh zz1yxaKf+eZ5JyQbI@^+UTx~IAsgmY`;)wa@f68NoG|C#;j&1GrL;Wb}8z-6I%OKv8 zUM@{vxA)OqawVe~sSWFz$f>?*#==(~KiYz^itEGW>dZX;;f7%^6hkRc8G$$05E7wF zKMyRCIyV5RAsVzV3L$1JIoH@{RQTmKKC+evNbNroX-A3X`P zN+aOeUSuFVHcqpO!EX;+q`m z_g+6qoOxC`1`Rl-Ispu5UID39mamR7dEd$LyG@Sf4v>f&NO#)TdDbyXTfW7MRK z9G|P)ceas<+RxQVg0&yo3dMo1$ly~?*!1(@_;P9DL1fgfWV%AvxXcy5t67o{OKjUH zAx-?t9WDD z&T?$)PE9W^s+N;G8%Y3JXTAak6?jwkxYgj7kc2cPTw=Cu8Bg5hgOKnlhCr=(<^S$nOT>GY# zuwUOJ`MHoRR~@(~A1#%Mr|@>WUDX+d%*aK}ZmbzEPJHq`lV@$ug5~}nP3Pjz|BIiEM?Y_rX& z9e(Tkc>Ml@-S@WpeqY!1x}HyZg&VHldk@n}b7*~@0AfvSuZ7x04^GyL>?G7F_%Hv= zK+4$|bg~KGzb!qM(>_Msb!gCq==YX>6?Xby3kNLQu@cLLTUIns;gig(Gp}(-w$67x zVC{);xH$Ec_~ymNz*84w*eP`x>a{Uh1OOT{@fUZSoYTHbH8%|eud3vACsoD{aiEY@ zWvg%fqI5#Hj3ljv->bO|Q%kK}*800@PYBniN^zIcPrc31mC6xxO>CuN$__sR<^x6t zD?iz;-N<24g;w{!7Hz5Pb4_oeKeYCj#Pt82u6zR~KJqv1+u?q9RpwLRk(9VJJXcfk z6}}>M;0;l;1p+dU$Z%s|dAruzOi*n&m;^)UqZMb9`L${(O@IL-aSPjR1M<7pfYM&$ z4M?_CHD=HsZTuzFmI5&jd$afV6vcaURo&}JTi90~O{tS|!lRfX;7wJUfoN1WdsrP+`B0f~!iLY(dMBX&hdm0>||zlmQLvD@5EGK}ZvpZi~*&bIC6kJe;{ zE{PQAaTUWQ+x*v}R6i2Veswo&xA~MteG>ns^-KT!s(7P8)eX#%y2r9&tDz& z4BB^@^@+`(BfwFWsqs=#Qb|7S$`&{e|8}WB2MZ(po#4oq_~kJClVi+0XUTcT2OLhy zq&+=$75WNv`5{w}`?x@~K{lvFBR2NHTJ*7d_xQ@m`_(x{JX&(2ogT>bWhJP7SBhvoBs?pzp{y%KNv%kmH2efaj@qhA|`3(1-Zn4vYB&FU6ATarT_l zRzV;iKONx8=PH|1x##-Ewm8q1!rsvJ^T;J(?<7C8Tm5#U8h4+KxBXk^s2!?QwystU zcF2?=W~wdBx^`a`y>{Ih$F%t+%p<8W4>N09PPD4&DeVXz87!Sj78fkEWuo`CuRN^% zc$v<6N~BYS*JEX4nie3A5pT?SWO&}lipv(BHwDS^UH|8_KPL~Yjr-=+WA9DRbNx%^ zTDr(168%%~=gHI8&kMYa!ME3}GnMH2cgrmp5Xj<*BZ$AfluwM+nA830g+{KtC zo~v@FZBF`!jbOFWIa?(vUM@DZJvxW#e||`6=IV!&wcT_EA~%yn0iVsM*nNWa!kcG47BCkw8lX5EmP4gev^tT-1K5znu?K0j4jnHAM>UDm)?#nAx zdf=h5A&a@PSW?I+EElKzSu%&WG#}8y+6?EZApwvk4AN_Z#=yzJ>g(p{|I93?yC69BW z2#>DI-Vu)fx2($u2J)QY<*0v#7j)09)Onq7(Bn08FqyKo5Y-Tg)7@DPC|Q|LV$_sJ zZ0XgKdCP#;$ajsU2P9AJQ9hOx%!N2EG)6@Y-d^nU2p?iP|7nn#S7ZEAON6N&vF-wjMzmwZCCq(_JW4w)A237t)w1Jc0>5dVX-}LDh2dwF|7(su18O081 z2j~Gg@2y~cV~qu67(&%mU^pgjpe6rEc{Jjun&@Bo-M;cddYm86(vw+*c`rq=i|)j_ zl$hNAj%q=QerCBb9>NZw@a|e@gvu_tCZVtIeMc_DUT`;I5 zY0hbFMdV?flphmv<>+91ko9-ql-CV8Q%_&~(U`a;WfmQ0K#;@V9QhKZ=AM{YwwY=r z5wDH|p|t^sSQ9n=RU?By1JbYb3g((|IfVn!<8j2PIB(#`RMYb#{o?>ui1(b+{?0uA0S}#K@!6}jcGd)y zc0gbFa^mdw)pS2<>78z>|K{q&+SdS!=WeyQj1!9_u@|c*wM^v_wmW;by_T|L*)1L4 zXkzA+KQu}3$HZzLRLB@`t;at#1Fr1)g)~k-r1%d+HFMRbR%)X5VqJh(R7JR3uxtC9 zL8kBL1inH}&xeDpu+s%A{P#@`M1jd*gNKw2&xM-tq-j)faOz>J{Wv;&#$z$dhNaVTlonu7j?c6E1AJd^xZnE}c{5a|x6U0MZD}7#&pVn_sAXuzn znYxO-UY>J6KI6Jl_yXA6#Cwg;Fx4YE>L`YvkRn_iEo$4;#mjRf`q@R&gA`*BK#={W z7_M!MA(Jrr;54AqRwDu7A8GQ8?b`(Cgo$1fxRm%(y7JIBc~jOyQ>*KfU+#L8?=4CF ztJCJKbiQFP;(UD*p8Ym)N^#)=O}n)gwH=2#1{lg+3^7BH1A@}v3F|sg}X{@g0x#QKf zxd};mCRm;9(ft%xP{B7(ZR}SQY;Wf&wq#k?ZR#p5l0XJLP=xEHwaQL?8x-%0CAiclD@(psmkD*efSGV;my7-+eh{(bqcVUT?3KQ)ixFlHm^O(V76SJ`79 z?82bbP&n}F?%0s?>nOJ^`aE7{UmP4-XZKiC<76gO@22JXsM0CMFtwyF!Lq1c7|?TT z@xn4+QQ}hDhn1OCq07#JAawk{LU7GdQ=Kp)1?)ps-|5KEq|=EvG}Tm5iTzwA{8afj zF8u5L_6SWr&bTY%lUU8=p&6W>4u_MGsau?|l><_s$H%qN#5?+==5)%e!1=DHzSJvN zS8mkcn?Ss2W;3a?yfx+o+fKg$wA3#-tdn~t=Lw)GuK6ENjNk4%-GE#>J9ujahIYM> z#;QnuJGhpSH<51)#Y?x~19%=QEk^+7I(rRyq&6Wj5L>s=y9pQ)8sV}zb=(ju; zOL5+B7(d~(YM~h5Oli&asC}%=s1*J#Kh}zw1Pka7+3B*x0+;xP#1-&*p6_`|oTAU) zi;k-*A#w!SL37VqPV)T6ee@{~QD|{_wWl``Huu!HI8kOd^vO>%cgq+t={BEJF?O|K zmSen}LrFMcxE>n4us9G5X*3g~|4(}-Tx!rBMU0QDn^)wuazaL2ndRYe(Rsz8dbO;p zuO%^AdffqI|F*#FV_fHG`l z`Zl*9XIMSih9nO>?D@{HICxeaBzci1DmQ1u{OxbG;(^d00X@Jp2LXw#@l3_2333!x z$-Ylk>{v|}+O5F}e)ds*TqC|n^5!R{GQH)?naihTf`_&Y17FQ6pNi_{30FnQs-oEg zdZ6A^biL65q%%ZWkyk^CA2h}pT$uT+f34S&TI_@W0@VtLiF?s1%T=C~Ik?d4IfEP9 zq3N@_w)9>*Rob@n>a6@Q2p(UPPZs8|(p?vll_f+qbGcK7_H6;h%R0N25^xJH=*ECkx`QDi7 zo3o{nzZo%OFKI+JI=TB)lJu~S*qz1?9uP{_&s=d73|qdr+Br0tfZZ(g^=&&i*Z9qC zxT{}hQZWpUT&Q}(H2QuQME^dwQZQJ>Ib9*r$nPtJjh>qAeCTfOhH!`O?%Gh&Ef#T{ zEkU9%N8u-u5Y+y-L|}5SehX)!;i)z6nP9gxA2>sItZK-^L1%bl1qy6z^P=N#MNb7S zq>n3k-ZM%&=LGIv@1MzZ*B`>wIN%NK8^TG>iN~Rn>r+mlldG}pz;FBCRFz!Zi8>H~Vp0+r zswZwmT71))-|CN|Do0_PdCd%()H&drpPNJ5`c(tk#Bn8Y^77#+(Y84n@21OWhr`gs zydCjy9UVmN{b5tj1C7U;dl?J3g=mj`l++cO2v5!Vko$%E7wgnIISV5HN;Q%$Gq|$n z#_{wV4CR%x*pGrX1J)+s;0N+l_T%(>h^P`o&NR;lxSt5kaj)if`lF_A$%bQ5uhipp6}`?G|GG6}#;fFvs^cbAij+y7EtXY}U{P zf9~A6h0LHOW$Vku+>YSe-$i-($3?G1c*ojWzEbzjbnvX{b?_9mLP?l`4HwCF$knM^ zH_XJ`7;a*0^L=#w`rPuimlRmG^)k=U_MfveMqdw&#xomyn@gKBmrzfpfzlu5bCo^h z@eg#EeUnqj443QNl|d21!IKa2g@XH5j(rfGsnKF}br(-yCnh*70U0_*;9-7!ofQ~q ziah;~YmkP)%jfJ2s&H1wPkz=G;K!?<(~irCKT(#0U(~S<0JR%IrGu^U^PwCL?*2QS zoD_PA$Ici5dCrW)?6YmrDC_zs&|q1j>778K6?Ue@%VW6xBKW67cCdy;Q^WOJRKB88 z2*#W*JD`t4&9S{{p~M1sMNjMWXXsY%opGv>neOhw2d;>^Uu!WsldBxgoCS_`bx|hB zmOtMYoO1BF|Fdppw)W1M9AqcARG33U@gADAF2^=?_n@NL_ir&z)WH3A8GgTUy?B!X z3!6lX9wSBD%wI(N9JGrI__6PLAmUYBXb*I{rGhrv`Iuu3g#zu`CKyW6|?$( z7Qn%s9MTxDU{Ufk`W)JP752H|EEb-mS@QT7ed%N{Z^3kkQe6+t1}0Vi*vKy0X4-le zTb~XJjaK4U3s~q>yl6ve<2JM03Qh!|#okxS9Fur!t0z8V!b-!1mj%f&~#tlwE{*( zn`G=^&luH=yV$pBa_C*+gFaPP4!oMJ0;Xl+E|;s*24z^GOO-e>*>^B`HN5f`CM}RRxJO;2~(A#cpzE((?%$h;vW=}akZZ|niirR8mn$l;3@qd zuv1Q?{g$J2lHk(+K4v~+uQQ5*cZwYh{AR;tX_@@?^2yIO8F+Kvlu1u1!9)jp)OvJf z{M)F}C7iIqWNIOo-Y0z!f%Y;}hmk601&nA<|MdV+3H{%%u1!mOB&A&YU$S+4`Uf7mZHA0oCNLSf%D&YW|aX0e)(t;9SbH`(&? z-Hm6=$&9?+t##j@uY56v)0H@1u+E?rl#Se#{u?aTL!3x!JVBkEQLt}W9kQNTsM@xk zrZbsecDi0b`i>wcfM3D6X%yCJx{;>QehV1r7ilRJ@2wXLoy+uA|ICa+?CjKQVGmN%2iDlTl$xqr~aa|Pk5{a)8w<#RDdqeD)q%dUT0hT&5%=!p&iK9fJ zqBmvI_babM?$UE2+`kT!pRM{*GRq?A!BPhrT|D9QuexrXs`>ECJZ!7h*D{g|RwVg`y5ME0218=ZNUgd+B5y%W6&r zNwBa@Epz^$OE;;qaOax$;?a|w=_QM(y$&Fggp>EnSxxrY*IWIIoH%8)>Zp<56+bV2 zPJUWk_|LFb-{$M2h)M2EBCD2Cpyp=w+>P1ukOM&IpPbaBdemSP=l9K~9ksqjKz|1N zwt3*mx8al%dldA>5s(jrPu{%qwX*o|;Pr)C(%I#w;tga$d;d=qmx9Lt`r^vWmDuC^ zfn`q4RYs^pYGC_u&N82h&UYEy}M+bs-Bd6>xosnnB_sl1?PuslUh$O z;rkz7DU+jZ8&3{$0lY$K(#4)5~!1Uif6}%+A zLm@PnL*yJ_?^_#%Vzb+Mm7 zwF$ePo^ti=-_HC-nTPD!35%kJ_ff;7bOs$JK&8)}10DZ|jUNMMwWsO9?MqFV_k8cf z37!dj*+Sk0I-bO4Mpad~)eqGg&c_$X6NE$~qqP)YVRC;S(&W$He2dfJ2*fBYq)N0f zg&>e+LjNM!{!!p_cFO{j6$JNOH<4tdekpx+cBc17T-S%{ie96Q<2i-Wj8EO_I0s~# z`Tzw0oOP5rp4cS~cVz;X{)VPWqRy-4u2 zEhP&z)Y?A}IWB*}s8ys$l+SQgz9W_NFRq%r3QWnL;;`2uzt@&w{LUY8<%Sb(t{Ll| zR6B>(V^(H1`!4i`Ciiv{3efH^x4d39YQ(_<_>IfM%p%kh?MC*lRtm6&cSe#U%X5I ziy|lPvmZ^(#h(uXvO!Dy-O+g{ig@V>VC!0pgNll2(&HU6*!FckIqC5GP*@*9FZ%&J zH(Nb}engm&`Xt+qi{?D00kVl^JFfCyB+>5H^HiK^@^0VJd1(Dq0b|nxXs}H}gPlHJ@rAup3Qt1J!kq*yTRrnwP{x`SaA!Um zd__;Jwts(F->E8-d~0&z(J1d#z2nziP{@4>x>xMsAUde?Aw6k}u(@rw$M!HQnF-&$ z9-f+8a8p%kdM+#cmpmlmUkOyQkQbCy#}unM)C}pwqz#;6;-j_%_wu_=w}wZ%NnWNe zrE4vT6jRLWvg&!8H&qr%%`L&~BhvQlRBq(VfNDUm zoUPq|cRsn!ERwL8UYy^X_FKKhRq;tJEAdhK`hjnIpY2D9`U~pLF0RM>9YjGvWPXtr zUv=Q@r{mRqRSf=)e}z#)f6$9!kxy=HlzxW0-Y7+*E4Ng+vE$O>R~1~mgf_kJ@M>zU z`~I5|G0MK)>3R7I5lPNk7Z~DY`0o;DZMJx0BL6JXyDQCcnqwZrKc8)!!k)RoS_@b% zV^A3MI5nQ|yoqu|(@LuUHa!lLfK4IM-pmP21lt@lWvB`Xr#&Ig;5W|IW# zK(jnaK6Fvn`ngW7KFUNRKG$|k=4DLp;#=HV$I&Z=h_t-P4Mk9( z^~nyw1)Rstt)PP7^KmGUbq1FK;i7}8-i>nMhTh&i7iB94mG&Fo>yD{TKm0woAe>itoJxF9Jdg2(SRn-i@#m01cED^kQ(Xxl-5XQ1a8G@g~4iXNE{FJtNr58 zji65Rg=s{zPe?mOq?kY@(-?GrXV&D_*C41jcjwKPr|_3m+fhhv)kncG3CA7Jj`IIr zPM##MKlYpdlpEBeRJ0Sr7kR){qtkw022h$;)liEhoH)~5iKy#vz0LcGA@Co$@M3vX zp5;_JO;M5iM2=FL74WrhVDFo^7vZX+2aTRT9azE76pj2MLVvZ}h#8ydBgWEw95Qp% z8av=?78wKDU8B1;+cIl%dEiglDfTb;fsF=Y8!Z$GGr8fB57l6blwStBBLV+YZSD{5foW z&Ww;_hGNj8znzz9-LLKM#@Wghx1YQ@yp$Dnn3=8&$JM&SN)(ip zsgvGMo40p%S*h_fgLg+GJGLJ)RXel2ZG5g|>jqQx9b@aZQv~+{a*PVW#|am%L<&T6 zDJ~mvf5X2_!!D%R%zfjuex-bqh?*j;$=fr;nrdQKC3Rzq>DZWYvpXan&}2h!CAoPZG|DU_Tyt4xxA|qdvyK32Ky$vu zCw$$8jcH}m4^Nz0Q7+K7U4P7enEE*%QbMDnAUoSMJoMIAC5oK?)@wD4FQ?93rP{A? z1r$+y!t|%jN71OHRJM%plew{6v7CtI)h+K=w%{hmfDCR8al0I21uL19^t%hB)YqAJ z#qT*4+FI&J1gkFIP<*4LCSEaNnSNEZg;p>U0_L5W041eK$PyBU%eOm^D*y-p*#}X3qVfpUkn@ zm!an~xROg8DiovDP>X^X3YWq1tMi%MQdwsRSC3L`ApA?#qywHu%UppjYj^6xGz5Dj zt|yr~lkSR<7TXLgBQTg@73GMve=>z!*5BWSB8@6>LlIu%{E9sb=Ue1LgpZ>MZdh04r!eoX0gyYAxWi`hx$^DKz<#;&a_ClPehh5 z((N(eGJ8zuB(R)P@)#k0&64XtFCprVI^bU0$iv6u8L6bzKn1$2H0e?u#kMQnS@L9X z!{g5#K8oi5U71VZgP{Ws2%1iA@FQ)RhMQ}0isl7 zxwUrmU|eS;^%OjUEo7hLQ^j^Bo7r(ue>g}33R-xUsWIg$pNr9Y22QeTqlDpF6G0WJ zu$rj%#oYB%tIKSY8e53w7vkVo)bPV!l0;jZhqLXh%mtmwhlAj$5sq2s-PFv4`D1!N z0^W|#IQmfhDTEW1h`yDjEr0Z%`t7A0vGQ}eA*%H07A{UT=~6T*rsXJ{&FncvP3*8D z9WFH~96Ze_7z054PLTb#Rvz9Pj-$Qav(H20^T*NO2EGrUYg!Yn_*k!-ymI`VAlbAT z8Pq=XUtgg<-5T~h9=#Jj4^9;!@>-`sC2tg*iB&e6hM$icQGoG1?K}2EHWDBqY#<~1 zjw=oOy<^b=s)f98u&sh!l80tZjrQl&Hae&nh@yWulz0c^T(=rUNa+qNFZ;6(| z_1FI`*HJNP+CVASmWknIZ52gR!AoD}ed$u-K@x z*!CN{pl4<=ie-pAaCzH;+5wMX^8F)?@lya+pyGacDH&_uu82F)F3+LW0YZR5NDjV)@9*ssBPpext>hqMe)#phI zu6_iUtR{8PB8+YibhY#QpXAl8zf~u~&xgY!*H>`?H{Gfi1-r=COPq2VT;FpAu6__k zHc32y_8q18WO_V$HTFryqT$PivfYste?7!Uxd+cXm0J82#*$wUot}C2xp9tG7CZLi ztf%Gf&I8xb#Rndm(*%*;gj+rxb=_K1-bO@@`s-CJ+I zCzEq#(`lfL@9Hpn88W^L|ISG^pZ3*5`oMYd?^aUxhW^Skl6g?u{y-e4FC?9t!uvJ$ zG(_?um2h3n%;Zz0)Fn*gJtEYhr_PR*BZijyR2PtQTm_WA3kA;2|z=t1uo6tqt0xV3gnjkAfXrF(C) z2g@T`k(VV%c}9_lsIO0-8Hxp8MuLDDQQ+IeuD=_CT?Gv@S(IU0hV0;WrqgB^l>FLC z$guo{uyG^pdnshB0+an0BxVLaA{r1ucz)ZJ*|L298s^l{z78ZDt~h%{1N+bOt*u{Nm1Y za^3AQi`5CGo|l*ZficfqcX~ukmT74bJfIqlb6F$qVl5*h(%#H$cJuw+Zxx<9912M? zlObZbgOsoiOStKKCF#I$-Y@(He ze#oi21=E69&qZ985NAZo)ibNOkNkF?q#}MQx35uo7yeSa`ae}q>y|VhO>DOejG)xt zc|A_QNexG(XI zf+J;klHqG@+&SI4)I%yjA%_d{JM2x}!vrualQ@n_i|9|M*fsV3W80`5<$Nuu`74V; zlHSX0=Z&$*DF_vLy~hVMSK!Jnw0k%G==j0Cz5<{71#3ylIj&d1gHot0q+}bFZwc;uz?xsT!)fPSbbd0q z0QC>LoeY;e1M%5v``xv_gpo9e1kDc(_Zm4!+Pg)DH-AOD%$=PeU%1*WqQlqQ(Ej0m zR>)0?jYNt5^UiFv@3(*5&sxGPS`co4_AJ8bg_Eb7nxtbmuZu`$T?{sgxRqITu1fk< z)uEJ{%r5!;aqMT}jL>cW$3tqK3ruIcDm8&E(;vAF`Mh@P*V;%Y%^XBO8NHl&GchF^@WWP$bwe65R; z%<7xa(?EO>{F>(&`FsK1|1=t(d9jj2@^Nc3T6(^ z>)*=1U%rzN3xE*+gGC6(O6?YL2IaSh@l-H1kkMgdoEEz@vsVcGh{Bp~^IQCQMnsQi z0`*#KhE%-J1!Y4<^WyGsH?N=Zbk%lWNu;^@3kzWJalN#65zov8AH}Zp1W^<@DeK>E zQ^qnk0#boD8eIP30(J8VOPVNiRU>YutNaCj`6o_=UV~qVw3-Bfs!9P=S}MBWAr9so? z?)Y8TqVe5el6TQA5~V8I=jy|rqxRx#U2wv)t5J$!$Ov;nFYU@leo5#K>Ge7A_Z45} z-CVF{5N=0dMSZ(JB%gPsal@(R>afgL(hWr5SFdiJDXFz4_6C`Z8gWUPuEJ6y>h?_? zsH5+#gi{*Y%JX1LxK|l!weHo#ephdKVwgQ^GuXK;qm9m0%RYC}R^YyC?4#8mz|)>T zY>)tECKH6wh&U$8Y1a4U2fVM>Lay&-AxD|YC8DdQg`QO%E$PanB2$hW?QL%Ju)suf{OF2VuMp&7a|aMAk=)wLQAd3Yi) zIg!R$o1Vu&T8H9l+UxQOykXT-7gJcuF!PQ1cf*qU zNxyCPd>LYjHHkNEWS`|?)jJ!eLz4G7uWgA=X>aSx($6dkfiiM2QBxWjs7t7T`x_qLaom!coG5`LBlnSEmYN2kG9G;(!P8#b5LoZtj$QuA-T_+i>>;VU86 zG!C2-!baimG}zfE^_C5dXl*a7oXCdV57+N^4A;J~qfZo}#{tQ1%s0aw6v?*YQSO!j zBI(S{U0bbmGX6n#fiHuriQ@$9qE)5kGVXTfbQr`jj@=K87p%q5BMUJXB%uAOSjk(=syOpDi^{ zZqPY-B9w$=SJuD3GZV>8vXiJHn~Z>xF%~ap`SHpH&8C7SAV1=Q;%vIsqQc09hq}G@ z0PoSuT! z&E|cBr-TA}d`^rd9(R5^UZwXbYs<7O&!9eH=e-jQ#XUpG-pTqRMH-2bq}kR9k45Zodil zx)n&KGVB)zpggRS^sA_4)mmE3T5wqqH z*`!n{lqJ7tV@zmX^^<3@<*=!CGOdYM;>Ug7~7_$v-lq>+R90f zg>ivc|B9)$4gkqYlp?x?Q&xczvE)!%3O1-)UQ8Q))fh8-RGY&aL}SmYhzoyOS$~q3 zQkdBtW2_Sj11~N#DeB}N!nrIFr%ztWp~m2T-Ngm~z-ykg^bzc&pAnddHvm0Jii6a< zF8{NLZNGKYBQbe_Xln@z_N?wDb3bQjs@fxW-^bZ12woZwsl<&aw}{G4O;JbArz+Z7 z%H$axDQ$?f@(@-h2VV|J=MpO!ivQ`#4RLnT1zeLNc(kpk$CxFE43h%@(CKEyY8=Wc zMj{TjA@Hdmwk4zJY^_xmS{EV3(1CAzqt=#ry_jb|k6RAJlbT`-7!y1y#Gj`e)HJL7 z7y$xXw^j=1D3$phD~d&q80Ea3%jUp5zJGoxv#x9E8?l_8B&EgS1etBH9S$JF(iPTK;L1f$$S9EpjWJwuTUc4hS@;W@hf6&ZVa)jbpb7Q`UFy?F+wPKmFlaLCGx=pMSGcChFs&d`ou(qDpxSN(e& zhlRC6`)0+(2eLkZ!q7{8dsDE9!p`sCT@Txmu_eP*cXD0%Io@<#VLEQ_+w3 z`<(wdHde}d=05K_7{iFiDomIbJ=eHH-@KD>59^(}_#^0?TZFe*PvCVu%WHE|)*Ils zv=Cp+73OLWj(;-P7-lr85S@DuWN?&<(5POMZ^os)PAZF%UiTRyek)wuoK%rvq~t-4 zN??`m;}x866>=?9Oy<#Fni#oQ)F0U)`H=Zhrug#2L9smN1EVu9hR&fv4PxsIhh)DC zCdAY%5Rskl@|k%mm1T)6nu1EN1%oXjJoo` zAfN4_r_4jPJ4IwdV?M@axRrn^)>a|f(C<$sIfC_5`~srBB56;g1_x`ZnTg96+7xmM zzt8fun|?U7t6_F$MTlG#)UD51_!|?D{dN*DNk;m|J0KzmLJGil!N{Sz@Aa&QIdN^6 zxHL_bbCwrY`+0pL2-Y-B9+}AMDhmYOQnckLn`WKwwq788k+H65=i1nV^~%5Q7MLv? z9I#e;2jG14IjvmnHLCYR$1tPlqMCJ=NxsHZ@IA|X9sOqNM>T2VWo>pR8~28@*t?AP z1M?iNJb*m8R$wOUE7Xr#3!*&hPR(#G21VNM)x1TghJ~DrtYN-k!)|rX+qZ3QZdJCB zo)c;7wyj}JE8@>6NEvqLqIcPh9y?Dc4ln`?hfKK^r5{)`-4mDVNV2o#G@5^|BB#y_ zk1t?=8~Uxiz1Zq|z5g;9^5?;|9P9(Q`OJS%eY;-+&y$ZG;(a3qhK%Jb+vV;BUkU|b z+s(-XphHiPu*7eWl%wqz70wOwe8YXdK$Iu$CV3#Vx-@5f zlh=%|%|&{2IJBIFTRRR(2oWLiZ>T#gz83bYXZm0Dk_by9xq%_rEn;Pali^1~g1?6Q z@|_p8T+$zL+9#>$f?p3XUkv5nttuGkSGS1^#CW=6yEh%D$cnnnq)X%O-FI5fz-v!? z{z(;(X5et@5=WiI(C<`OUk)*8VD;#BAMPn1xDFW|o`kv806 zxllH{6X;(;5M1%tD+YTr9pXykf?pKdFnO&MA$$uIZ9Rxic@bSzDjQk-+rKG*Bf@RB zR0$ymY}xbuee}jGPIT1@iW4F%3s+WSoYs>rG+$1;Qfkl2ypivvFcBLXfy;7cAH$HH z-#D+dhp7_JIHN;=fP#7&T* zsWz`LCW2{q+!{PFf+@CRR$)FiW;@3vx&@B*5?bP$F}X30Az`GgJ#ynCWNiVeDJg79 z&$HFOo&08D4uetkE=l?(!)A0RwzWDsY_2f0ts>TKgtsI28)0P1Fl+$Ui+Y7u8&s28 z@S*dOLbQ;JIKq72)CXCZidny~@pnRJj#Na{5q9pJT!;O?wYhhetL$0uudmKKpw4WL zF!VA$CJ*X#);Y3tk6k}wpWoOx>&P1;K&-X#;Hf{%HI&Td2Y5MEBCWwue@p<_{3VtHz% zrKfaW>dciCAMWKKNmQ*%v7HCp2rSbu%GPJeXH7Qi=dUQ{gkQc6l;KAGnVyFX6=k+> z-b?1kOGFHhb8`++mU0`-l(zgb0a82Zsf{*kH$Of5)k>TjUt4?B1&rfyMcRCf|D@(Q zIcuORw%cdBOP5SOB!cNe*hccPY^v~EiUqSc!5Oftw!FG)qOnM@?LXS@A*rTVxh3O~ zw!NwV*TzuBe2U5O1;4>7Kkx_#1l+St2ij!+anrzSO6i!H*sVO9W7qS1bPr-gviZ7j zZv{W(mOXoeNdf`_jNDLL|B#Et>`i}(9ZNQoj2l($HcM(5;TN_?$({?lj&aIrBBaHA zBKIs-#}%iA?cG%{XL%Zhd2=7h#Wl$`ejYc?BxIz0w4wzojyF}vV^xv=qq-ij*J7a( zP;55ipW*Lq=)I}}!+@4@I3R_dEJPgjH2mddP;l^5u?sg`X72*#6#`gYioYwS z5awMavECHX;xJh&C{~$NJyFy$Aw{qq)O3KcHx;c8UbYRWtqSw+nn&s+hwNFoQBTj& zcf4V&=18RY(|F-Xxdo3L{399iKV}KEcIcs(n1GHe(X~QxI$6z=_un=@3}q}J$PZ^H z)b_?w?bno>dTrX`fK<`z2bP&qCRcS9rC*9)k1aB3>WcwH#$He^R_bY2u2aUchpT>W z$VwxP6-O5J7AxUDOTZM@hcGcQHzQpa4V}XIDZ=S20>|>CDh+5ACcM;<9J<-tR$$Rl zq$vMq!6t+H1u#lePmcYnip0Iw+%7oGDgcpU!LZd9HZfT`B%14xMIUA*gsg)d2Gsix zldFY3Ta9$< zZzJN60T|r0Qi)xJ9f@ziFvnAjxJDbFCcIk1w8)9#aZCiZTDi$Ra5!EM~-xhIy7Ow3!S z($h3E7uPcl;DPig6+JB~-_)-+sD>pRz=}UA*|5YXZNVdgJSGYcI_0FV%}15Zs}z&6 zM+J)k#GzJTlDyp%#5rrjrY~83Fk+F}ARnE} z;<1WvWN4qw63LAwp815$6zOvI;>Oj|diuZ82gh1DcBkIEDRKz!{y~|8p-sQWp-_-o zkLk7%O&;N41MjCn&mW5!y4`=ue`@v&6&yE+(te_FFEsyV7_+fqDaBpDq;f- z8hJn6WGE(ROrlODGH(+Bls`DmyPj_Kq)({Jn@z!;Ei_88-L)N|wTMJ8hBMb)Bnmz0vBo zkiBMUWwgm{MgAW-SE$^uR@cksiA8${%SR=CQmeFCl#jQvCL&Q zI79E=GfUQA!~y==RcO$*lFZO%5r<@gKWon)id+205rI&t{EPvqM6Rk*<~^8y(+ z)ZaZt5<8^0zQ7h{T6OwR7K>-BmO*YcyJ~zTfUy z4&2dW*%%$y=e~cd_&*J@b9woHV2(oH=j%U!9af@G^$|tP5+Agp<1RuOFAYpp%uu|W zYhrFHAaA(i`4Fl6Gn^0 zxwQ>8H&l6iYPoW z#cl&RMro~C!5Sa_>0aCQ1KE4n+L!bFZF`o>`sCW%L&i~~Cw|V{4b85UB7wc`NO_O0 ze6g&4%mQQy@tEF~QWK26DOc@W{wA7`?^s{Pb++jxNZ?Jeg!{XxvpAB;3!(a1!QC6- z;Nf@L_h;H|6P^p|qSV!Szxy${87Vlp;{j9NEZNoA8@V8(AX0CEq|!eP$peHbw>)d1 zl;`qU0N=~txl=&+W7(qk>pDoH+qJ~!>|RY0Vz9NZH0rF8CUQ2~dokXr&pg+8=JRAw zNtU3ig1!kDF3+5qn}mCsutg&*89L zjy=wkdIN>wGfi9rx}ayG(&!57@S(!2?<9-FRMp)S*Mt!z$J8R{Pv4E`66RXnM&2kew8(FhO3UcH$PZ28}b{#g~eG`OC~wHRd+=ddwX0Vt{4fG$gM?zLgllSn2>-0PRREK zn3FC_%dDuo`9WsurLhN!3SvfYXqvdu>93U^z4f7#DCcgfP~|towHWlv?6s; ztm8db+~c5bDJpq*&N3tF*CJpjVL^MWO=7;@OSuLopsUqYneBx0z`5`UI$$=?dFxl# zR*#KIEHjh3vq{d0BBiX~?TQ-Qd!7cTyjeDmnz&H-R~}KPGZxwmD}~gsVfPIVrNamA z*WbRL>xkbjMpXEt??&HKL4$>b)3BbITUxw98YGwN z_Y5kPHxdijgO!(AVv4O#+k1PbV)8XuOMFfQz5Nvg^X5>x^oWG89rJ9zbQS}IS^!nG zhTP!l%Q0$eO(=^T><92*sc~hxCWXMRZBHf)17f{US`8`*IuFp4bEYEb`x3OWeGA>3 z{#a4iuRp&!#pW+W^lif@uGN=yXq$G^<0*gY*3rV*j0ATn0vmQ-P_Zl~7(U!VzJICl z>M|nrYey^Mow}DuZ2HSV%OnSBL%SomR`u3VaKI7=TEsh#YFbF)&V@&!Pkj06*_h$j zlbi={NGZmC&@yNpGPZSluW=G{+;~(JwzpdqQ)|T={%z~Bb(EW@rxfjdoP*@eu6xK| zmXDZE&G8OIW?OYYv^;vSx2V!Qc*9<%Z9Cu5@iUBgJ21m=&c9QAsZ1>o-r|t2{CI-v>`c?c#eke~n?K!w(Q76=6NJZDs%%a!AlG z!S$jt4aAX&0Y(I)Mfpn6w&QN{HB#QJ6VDinBEoyL&y7XPW>(PJOIP&HiQS|v76{TC zICU!ettB+Af@m>8q6XW5F0LOA@{5*I9{_Yw3M}~ygQ`WWkn`%&=!^oH^lEDH#RN}r zd81N|tb&=ek&B2y(Cfc|St*je+3xAVS`T09)nmBUd*@ldNnD=>`~&iI1$B63-CGm7B`4X@mFq{@|UZ~x%%5Zo+a-s63C+7-8x+ILDAPAcZgMG+@ys)zFE^i#Y@?KZ|r5|P;| zgYycWr4^-?K%!iSe)~8X=lWM#pz}?^9ff-qqM2G%$fe2pk5_za)B3roU#QjqbUcr=r~0wJ&VSIAIfcG#UAoJ z;_8zxvwXu|z=UAl<>pyR8;)|IQHwG%Kc-3&iA#%@uY6CIrSm&&-7$xCqN%rrG8|5u zCEcraG_YMP>JB=~@!0~gBqF^q{a(dsHv2`dkZMr* zKQ93nd%9AP-NktM((+fvfMg@EpY8#^lrqxx!8VX1wqX8we_z?u4`vi!U>NQ}sS0@^ z0t~4WT>Wi{+(BP+Un_WPVKVMyaZdnrK#0oYHqP+l$tfNTu|reuPAGGWulgZ*&T}aP zNm1^3$Njiv8_q?d+IVam(mWOgN=qrwl7QQ zAyC}pV&M*p%afi&ILJw0xCoGobmQ9oJS+|7vg-$$ut-zMTfTs}Z%?h=ubr61+He%I zu(dEc_;pdDYwTS*Sm5@H50aS`x%tY^24aQL8#L_ojWnKfS9)@&YJ5r?-1l`)R?OGm z*ERgg#ZsE-|Dc+ev2|H2S7^>rB{Q;s`4i4(debRqwi$ONXLoin>u{fGlpjqT7XDn> zK*P{ZbE`eXj|0AWrYHZDM(rXteS*e;oZY*qwp@Hbdj~HI(h%aWKfC_Fy{93(ReRTx zH2$_du6IIWdGgk_>Ve*c%>9kH;II7b4H%H?`Ha94^VV_^TNbSUY6YwEJ5{$794r24 zykb0}Wqt;#IkvKUFz3sDr0j&oA5RWAu6b=k-kO^HE)H%U1Uf8rA1#U zgJak7yG`i}@em6Wv+R(tfVS3CCIukkjNw~#W6=r68~=VL;nMM9+Z zDU&P;a&^UDb9r>X3~_M(eUym%kGD5PJ_;(@Qx%i*wH15b7g~E?+ryG=nm?FT%~k0(#F$ zroPXNT){cjof$qUE3uGj>pXH-+A&~Jq-2kq32MG>WXIz42KFpBzG@c&;4rY6WQN`& zFN%NIbDSe7P=fZYb6b{QO+NV16ff4IcTV*yn})jn-KC*gM?dAwiPzG;%{J`53{udS z7iBw^wE&;R(^2o{onuG1`M-hMq{OLmE=PFd6{NCw(m*HlyjLe$ua|07?M|ij$9O$7 zh5La5c2%#pja-eAG3-gfH_VRc8-4RJ+`cO#1tebe6;fXtAX)XPm<*{^H;cqL& zY?mhkx5@kMWR%B-6+H}yH-gl)L<%icDsqz6tyys~Hd65ol0#&ZNB?06lvSUa2#|Tt zFgMF9RD|+5q{aB(NJUtR&;OB?gUtJk@UxBr$LUzG9iU9>$ILb5Ju^$4)T`d#r(rgj?Q22%1b5*E#eL7 z)Wf)Y^y$&UXD4qhJ4(PFS+%*;1F z8M=*Seb|md#9PECoCo{veJfD9YW(f3er9{r!JjB&2L_5K7UO5#X`)H4t}kw7D=X%7))^vV@tTk802CEW1lszPGH1Pk^tA>0V{pn- z8*&gZSFTv#R)G6f^rpyN20Jf-E@`nv&)A_kYxN|iPR50J(;6`UTYYd2qg%RUnt4h7 z2#&gG!+!E1_@%EW{DXSELf&@v7rf7RkIdT%%_5Ooj`QEav6M(L&WDmg2V}uMc-SBl zYW(@#mnOGl_RTQfET-)I3`ggOO4iKo*V>Q7m4`4%eN^h5^Y8I`EWupPR!r;FP?16I z8DDdLG4wt#or6Lp4_yLXP{0hq4EEZXo*Rp~*~+tSeTR)QrRrarYuU;8#@QQx?Y~Rz z4OuaZqjj*fc?}qgcmu7Y$2q^tL8VLp_0UT*VZ9zWfjyNUr|~GntWesjuS`#xV}#C( zOQjDMlB!bkEp459+kr9w+v^R0>>Z1^=JhLbZc>l#Rzb5k|}yl7Y=4FBSh~Dm7hb@d`Xgg=JJmyfRbzdURfwtZYrLjfwH;| zi?6+``m5u+pNnR+tf#rJGAHwmxn#CmnHAUz9qUa0m5bte%=gI9jcjJSA4Z z*CH%(mh*&KrA81t@YoUAdH4CD)}8}F9u%A4!NSe2oSk?O9PD54xNR5Ly)v2Ac z0i50i@ix^jfw=ybBh> zlX5-X(b$J|m>(8PpcE4jx8VLL_cMte0p(GFHi=u(XdoVM*isUb3!SBPqfc~faaKJw zgB_B$Fz&o&`prdqb4Io>`n7@1b16*>)zRdMg>w~$igbk;aEp*2=8e=-$X8p?$a-ZO z{{1{6^~X${Ii3ViaJ@>hGaC$Af&1jDB_PWu!u^C~g@*lB`z}Cp%&x&l`Py8H=k?xP zM@)MHVekz=U5N_=?wmbX5uNc+&8)4vhxV2-BTm2U=vtnyu2mKyt$O=Pe#F-OnMSqO zpxU3ofoA0}k0H46iQNK-0DEY7g|@`G@(n$sOzV$ zE&NrXQttYR04pIo4v+uz_4DJ)C2-|mIRwrGcsEEzPnUJptPmzX^jbqldYV3y`fVXy zNTQRSVW!k2cdHx4jNEmbwxBrtUV`KKF0E~kB+hV;QtbmIc-k#R!}-jLXg`0+`-##_ zRCN=+Bj}7aVMfD!G{v-V%gS9>YH#5Y;gZ>v&9bQN=2+femA6<=%yJ;RX&7oD{H!#s z`4neWYoeCHo>xW(^Fq44kh2~FQ^_YmqHV65wLZ>lcdu^LR$X?pIgolW*$VyrsS%87(xCM5vNm;qR=gTL2I&g0CMOfEh{cjdh!_z z52~YD2~&G5j2JP-yD>8hab5e5A@=OY4#(aSq=cr=lecdK%Lwz?C1-_h2B#eTJn`wSk7w`;GGz4*CJ5Fvp^07O_6Dc*hcU@Bc!nnks z^?5qt#CX7uf#lKl-UoY|!Xf19%qsBpU{f)uOx(Ck&gFP3d_XSHqOLN4Q!>|QqE`Aw zwU_q*@YsXlhS-mXpOAV)(*}FHq9n~9nVzlN*_!}qPog$4Rs3F%&7A3MaTY+O3;41D z#|x7($ZdOaQj?Gdr-CeVu)s^%;{@D9os7&O+H$F1U{9?qh%L{xI<}4k`&|k&o}Bx^ zNR-&k;LzbZ8R|<9q+U+#7nmC@kg_i|ME1l$G*xfYwUiLcW$JbhStuau$Cyt3wZu_E zAk3i9N7jsYM0K9>WY&zyc#VqN8@nVCum}1RjHL2f+t2ldo8BblYMfe}%ntt;}Wi)E+_*Mn3zvy|z5i@od6G8ecB}R8|VyuRmS6<$k{r6hm zCRAj4VgM#Ic>*DzznkG(NO}Z{ksfu4$G*?Zpc|KH%;^gvsb#$C39CSJ) z`+cR4To1GF){#l>u0G1U4k8}8vl;?b26+NCkr`@HF$8ijl1@wV$8p&-kQJI z#6DFJA$tDWAK=qWfFi&SzM{jymCL&yhE5|_1{jI`$JOp+LiD#Ai8_Wk{qbWn;E{I8 zT~*MGIG+YLXBKCxBgdH(+_V@c(+fp{p@PZ{%{he(WVg&o@qJ=1;7`-_#i zKGqT!P%=ZA`QJ~pqD&1vH@RgwsR?nOy!Tn3Lw^$<#q5`D9=S25ctC@*X~>bcxhhs% zrcO7_ee+d?-8Y43ezMZ+ypjHdLuFnV;^xxm<1; zu(N7|;~D+bgIqMX=~mo%yQbntdHOVkxiXRwZrOGs{?J2GE& zDSFNShWVT`YstoZJiOh0B7ja)Fy2EP=LvZBpj!MeOsjnmur(V@f6qeKa0J*KrV3y` z6&;GLb);^#mp+tPHDGCC%IhscJQRbUqP-&2YJUtked?+f(+HY-ZTuRa={3j`{?L3# zCIzZIg!wPr!KWWwT79AAGnjMF=PyolbN2EoR?S({E7}Csz1#(eM+0w!dQytyz2=OV zy*S9HM_qEEYfR8==Rrlc>|7(r$$h9^dcSzg#OWz?j@aq3qu+YoE7{vGf^Wpjot$#F zMnl`C$zzjmNR{k}S}*PMaq^lr-9%@Yxl5H<^dKq-b~0FN1@1H4S@}@s)5QY2$K4Vt z1vrYZOI#3obPNCzF+sPq9_rnzg*Xib?DwpsICqwYg317({3oi(?QVZ zRIc|_y^`-t2cjFKj0m?7{WxAWm*5$xm0>tOcj0+t@5(*lEPtdv#Hs#N*V3zgceUnV zb!ISi+y|0@=Vd=)ca-ckgx-tP`h(7X7>Li|N1=uu#Qv#zIt1qOZkrqYBRPU~k1S2t!!U+z*>ir)=tYUl-rWXi7LcX(Ujq88*$WHV2=Jj zcN_Y+%RgwB^f&5%e8k?8}EP&M|;X!O*8DAfRXhdLa| ztwyIK9*mVP)JmE=@g+cC+l4e*`*AGnbtu5E6xQQb2twPW#^ePzoZSs#z-e(55F?(DaY-HM$U)wTJDHH`HNfr4cc#-6c3L> zdq$VhtU-18S)iI=+25+#l+lucq>(01_HWy|ibUN={3ejS&ux1Dm)h24Z_rnZCtT7T z0=ua(Hh`9-W(1wo+=xq!^p}jzX&6Vmz7EUwPKejq+UT{s z@?Q&aEskDW%&9=+{7k(54F9|RbW%jr!>2`Jc3?{4h8laNE7o@}j?@B3-OP;)%Hn>5 zobQUp7wkKB+#Ax03E5@5a6Qp5_Ji}a@)uLTg%wA^D*wpf)fAr7HLv&6LI)q5mx*sH z^C6_X40iuv>tL{UgY^gPtS>tJclxVF#`2ZhH*?6cwvZNPZ(8Sd$yHF8nivUL1YLdL zZ%T?cX@EGZS0%bY)h{2l!0PmxXdbxCsC|#JfQ7y(u zGT80-oYBua_D2xK0(p`>hMm~-;D{7`$JAfmrr&XK?&cWRzqkOBT{+z04rku z72<6B+A}!Q-I%7I=g)bBYKq?`Y~`OjtjCEp05y!i!BN*(RR&!#+RDcJ;;7@syqd54#8{Hea}epH-!FdUGSI6(=hjrdr1D6~iT-LT z-D{7+{=7hlXyxLW$dHwP@n*V6$4*%#Tc8h%6ypdGSb9)IRk4b%Mb1Lf%KOD=auvUN zlbl$paqd@UbR#ZmKIpsu*(@yj7FM=cAL~asizuxBcmI<#_KJkD>iRrh(?IiV*wA%;(A^&2~Nc8~P`2;9*@=*m2>kf&5U!!a6v^OFYM5B(X#*q|6es z5}*p{HX<`sWL`(3uw{&+Mzj2Krk6}OBRw%faFXnwVp8zq7LSrHqe7{Y0N=Z3{^SXx z7Z8=t;~%lHYEmQ)Rp>n{b_y?xnC&fCj7}cERl9%G=d67oS`oHLeRRI`p-J|b&8wzo zkwd3LyM&}#o>{aXw#3_zaV7`^n1t2bE$jy=sC#z0COGJUMG zrHE4_hz|;2)-E<`hhe^}xRa&cCXN}Bk;IT7Q z&^bQx7-db1dBsAz%M5BF%vAf|-UI3F6pH2Rye8!m6d(j`j~8Yw@Tb|YSjrR2!+j|4 z9*Kdg!~8EbuZ=Wi(AuUL-F|W-4}LE{RveR|SqHEm8{y41tqmQ>+9t4J{$Fzz`p0|Ckdmrv(Y1{aX=sMI^x3zR)!nPZgIBjgnp@1F5JUKXXHNi=l z`$544MXOPVR2;m{1U7L+GDqh+ysBvc*~(Bh1Ty8gHvAimP;0xAPmZ2O+`PCXNx?p9 zAnBb-;~GtCJ$1*{y|<0iV8rRe&i@=4CBEq8)zTM&vm+?qND*Wy_Ys+q`EQg9b-E*3 zN&a#P9-p`UIOw>e(PShbqD++tj1!AyNTPqnyQnkh5HfMeRR{Kh}43ThK;E{iTkVdQD*D;w< zidv6l$=^lcY?j3yDJh(;Ox_#>2vrxLEQ^ z1c-T*dyNF%<)`y7&z0IP6I&y$w%UbLqpf z%=A%<*FbF9x(PwwmChHu`lUxWt$0oHQy)%1#s&01*dN5Hm}(s`7ndnl{F=^%qerbmt?S2_$BLRi&O?{CeSea-5rK@q;!Prk9f|MT zM8h{;>Q?g-_m6xry}^M$rZ+>%is}>2&g$;&c4g(aKB}(JAK6z8DUPz?cmQx2WK^dM zsvb3QIW2;niK%9|(Wa=15si|3K6)oyv-5CdtMw0akpt(f14h)2)QyJM=VfGy-HcAW zH#XBqzGE4K*uGH0NK)p zoLcGcJIt!1zV1PVmm`Y{=5k0S3hYD0P4@c-`zgmJ_lp<@42!$+HXNYm7eOxfgN)ww@7Q|ATD5m^(*#JM=qiF0W4rKKrh173k_*T|NWOEPIGdXv_I`5kGS`5nWcAlFP gJy@?@S86#3{oOU5F}PP|$pJjBUADSZdeH^@e;+6xzW@LL literal 0 HcmV?d00001 diff --git a/html/transformHtmlToCharArray.pl b/html/transformHtmlToCharArray.pl new file mode 100644 index 0000000..8dca048 --- /dev/null +++ b/html/transformHtmlToCharArray.pl @@ -0,0 +1,20 @@ +#!/usr/bin/perl + +use strict; + +open(my $input, "<", "website.html") + or die "Can't open < website.html: $!"; + +open(my $output, ">", "../src/websiteMgmt.h") + or die "Can't open < websiteMgmt.h: $!"; + +print $output "static const char mgtWebsite[] PROGMEM = \""; +while (my $row = <$input>) { + $row =~ s/\"/\\"/g; + $row =~ s/\n/\\/g; + print $output "$row\n"; +} +print $output "\";"; + +close($input); +close($output); \ No newline at end of file diff --git a/html/website.html b/html/website.html new file mode 100644 index 0000000..9d7c904 --- /dev/null +++ b/html/website.html @@ -0,0 +1,300 @@ + + + + ESPuino-Konfiguration + + + + + + + + + +
+
+

WLAN-Konfiguration

+
+
+ + +
+ Bitte SSID des WLANs eintragen. +
+ + +
+ + +
+
+
+
+

RFID-Zuweisungen

+
+
+ + + + + + +
+ + +
+
+
+
+

RFID-Modifkationen

+
+
+ + +
+ Bitte eine 12-stellige Zahl eingeben. +
+ + +
+ + +
+
+
+
+

MQTT-Konfiguration

+
+
+ + +
+
+ + +
+ Bitte eine gültige IPv4-Adresse eingeben, z.B. 192.168.2.89. +
+
+ + +
+
+
+
+

FTP-Konfiguration

+
+
+ + + + +
+ + +
+
+
+
+

Allgemeine Konfiguration

+
+
+ + + + +
+
+ + + + +
+
+ + +
+ + +
+
+
+ + + diff --git a/html/websiteMgmt.h b/html/websiteMgmt.h new file mode 100644 index 0000000..f5bc9e7 --- /dev/null +++ b/html/websiteMgmt.h @@ -0,0 +1,263 @@ +static const char mgtWebsite[] PROGMEM = "\ +\ + \ + ESPuino-Konfiguration\ + \ + \ + \ + \ + \ + \ + \ + \ + \ +
\ +
\ +

WLAN-Konfiguration

\ +
\ +
\ + \ + \ +
\ + Bitte SSID des WLANs eintragen.\ +
\ + \ + \ +
\ + \ + \ +
\ +
\ +
\ +

RFID-Zuweisungen

\ +
\ +
\ + \ + \ + \ + \ + \ + \ +
\ + \ + \ +
\ +
\ +
\ +

RFID-Modifkationen

\ +
\ +
\ + \ + \ +
\ + Bitte eine 12-stellige Zahl eingeben.\ +
\ + \ + \ +
\ + \ + \ +
\ +
\ +
\ +

MQTT-Konfiguration

\ +
\ +
\ + \ + \ +
\ +
\ + \ + \ +
\ + Bitte eine gültige IPv4-Adresse eingeben, z.B. 192.168.2.89.\ +
\ +
\ + \ + \ +
\ +
\ +
\ +

FTP-Konfiguration

\ +
\ +
\ + \ + \ + \ + \ +
\ + \ + \ +
\ +
\ +
\ +

Allgemeine Konfiguration

\ +
\ +
\ + \ + \ + \ + \ +
\ +
\ + \ + \ + \ + \ +
\ +
\ + \ + \ +
\ + \ + \ +
\ + \ +
\ + \ +\ +"; \ No newline at end of file diff --git a/platformio.ini b/platformio.ini index ed68f0c..97ef427 100644 --- a/platformio.ini +++ b/platformio.ini @@ -13,6 +13,7 @@ platform = espressif32 board = nodemcu-32s framework = arduino monitor_speed = 115200 +board_build.partitions = no_ota.csv lib_deps = https://github.com/schreibfaul1/ESP32-audioI2S.git @@ -20,6 +21,10 @@ lib_deps = https://github.com/knolleary/pubsubclient.git https://github.com/biologist79/ESP32FTPServer https://github.com/FastLED/FastLED.git - https://github.com/me-no-dev/ESPAsyncWebServer.git https://github.com/biologist79/rfid.git - ;https://github.com/bblanchon/ArduinoJson.git + ESP Async WebServer + https://github.com/me-no-dev/AsyncTCP + https://github.com/bblanchon/ArduinoJson.git + +extra_scripts = + pre:processHtml.py \ No newline at end of file diff --git a/processHtml.py b/processHtml.py new file mode 100644 index 0000000..76f1db4 --- /dev/null +++ b/processHtml.py @@ -0,0 +1,18 @@ +#!/usr/bin/python + +content = '' + +with open('html/website.html', 'r') as r: + data = r.read().replace('\n', '\\\n') + #content += '"' + #data = r.read().replace('\n', '"\n') + data = data.replace('\"', '\\"') + content += data + +with open('src/websiteMgmt.h', 'w') as w: + w.write("static const char mgtWebsite[] PROGMEM = \"") + w.write(content) + w.write("\";") + +r.close() +w.close() \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index ec61615..c553532 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -24,8 +24,11 @@ #include #endif #include "logmessages.h" +#include "websiteMgmt.h" +#include #include #include "website.h" +#include @@ -162,7 +165,7 @@ uint8_t const cardIdSize = 4; // RFID // Volume uint8_t maxVolume = 21; // Maximum volume that can be adjusted uint8_t minVolume = 0; // Lowest volume that can be adjusted -uint8_t initVolume = 3; // 0...21 +uint8_t initVolume = 3; // 0...21 (If not found in NVS, this one will be taken) // Sleep uint8_t maxInactivityTime = 10; // Time in minutes, after uC is put to deep sleep because of inactivity uint8_t sleepTimer = 30; // Sleep timer in minutes that can be optionally used (and modified later via MQTT or RFID) @@ -213,7 +216,7 @@ char ftpUser[10] = "esp32"; // FTP-user char ftpPassword[15] = "esp32"; // FTP-password // MQTT-configuration -char mqtt_server[16] = "192.168.2.43"; // IP-address of MQTT-server +char mqtt_server[16] = "192.168.2.43"; // IP-address of MQTT-server (if not found in NVS this one will be taken) #ifdef MQTT_ENABLE #define DEVICE_HOSTNAME "ESP32-Tonuino" // Name that that is used for MQTT static const char topicSleepCmnd[] PROGMEM = "Cmnd/Tonuino/Sleep"; @@ -245,6 +248,8 @@ void notFound(AsyncWebServerRequest *request) { request->send(404, "text/plain", "Not found"); } AsyncWebServer wServer(81); +AsyncWebSocket ws("/ws"); +AsyncEventSource events("/events"); // Audio/mp3 SPIClass spiSD(HSPI); @@ -330,6 +335,7 @@ void sortPlaylist(const char** arr, int n); bool startsWith(const char *str, const char *pre); void trackControlToQueueSender(const uint8_t trackCommand); void rfidPreferenceLookupHandler (void); +void sendWebsocketData(uint32_t client, uint8_t code); void trackQueueDispatcher(const char *_sdFile, const uint32_t _lastPlayPos, const uint32_t _playMode, const uint16_t _trackLastPlayed); void volumeHandler(const int32_t _minVolume, const int32_t _maxVolume); void volumeToQueueSender(const int32_t _newVolume); @@ -2312,6 +2318,7 @@ void rfidPreferenceLookupHandler (void) { lastTimeActiveTimestamp = millis(); snprintf(logBuf, sizeof(logBuf)/sizeof(logBuf[0]), "%s: %s", (char *) FPSTR(rfidTagReceived), rfidTagId); currentRfidTagId = strdup(rfidTagId); + sendWebsocketData(0, 10); // Push new rfidTagId to all websocket-clients loggerNl(logBuf, LOGLEVEL_INFO); String s = prefsRfid.getString(rfidTagId, "-1"); // Try to lookup rfidId in NVS @@ -2443,12 +2450,13 @@ wl_status_t wifiManager(void) { WiFi.begin(_ssid, _pwd); uint8_t tryCount=0; - while (WiFi.status() != WL_CONNECTED && tryCount <= 4) { + while (WiFi.status() != WL_CONNECTED && tryCount <= 6) { delay(500); Serial.print(F(".")); + Serial.print(WiFi.status()); tryCount++; wifiCheckLastTimestamp = millis(); - if (tryCount >= 4 && WiFi.status() == WL_CONNECT_FAILED) { + if (tryCount >= 2 && WiFi.status() == WL_CONNECT_FAILED) { WiFi.begin(_ssid, _pwd); // ESP32-workaround } } @@ -2469,6 +2477,236 @@ wl_status_t wifiManager(void) { } +// Used for substitution of some variables/templates of html-file +String templateProcessor(const String& templ) { + if(templ == "FTP_USER") { + return prefsSettings.getString("ftpuser", "-1"); + } else if (templ == "FTP_PWD") { + return prefsSettings.getString("ftppassword", "-1"); + } else if (templ == "INIT_LED_BRIGHTBESS") { + return String(prefsSettings.getUChar("iLedBrightness", 0)); + } else if (templ == "NIGHT_LED_BRIGHTBESS") { + return String(prefsSettings.getUChar("nLedBrightness", 0)); + } else if (templ == "MAX_INACTIVITY") { + return String(prefsSettings.getUInt("mInactiviyT", 0)); + } else if (templ == "INIT_VOLUME") { + return String(prefsSettings.getUInt("initVolume", 0)); + } else if (templ == "MAX_VOLUME") { + return String(prefsSettings.getUInt("maxVolume", 0)); + } else if (templ == "MQTT_SERVER") { + return prefsSettings.getString("mqttServer", "-1"); + } else if (templ == "MQTT_ENABLE") { + if (enableMqtt) { + return String("checked=\"checked\""); + } else { + return String(); + } + } else if (templ == "IPv4") { + myIP = WiFi.localIP(); + snprintf(logBuf, sizeof(logBuf) / sizeof(logBuf[0]), "%d.%d.%d.%d", myIP[0], myIP[1], myIP[2], myIP[3]); + return String(logBuf); + } else if (templ == "RFID_TAG_ID") { + return String(currentRfidTagId); + } + + return String(); +} + + +// Takes inputs from webgui, parses JSON and saves values in NVS +// If operation was successful (NVS-write is verified) true is returned +bool processJsonRequest(char *_serialJson) { + StaticJsonDocument<1000> doc; + DeserializationError error = deserializeJson(doc, _serialJson); + JsonObject object = doc.as(); + + if (error) { + Serial.print(F("deserializeJson() failed: ")); + Serial.println(error.c_str()); + return false; + } + + if (doc.containsKey("general")) { + uint8_t iVol = doc["general"]["iVol"].as(); + uint8_t mVol = doc["general"]["mVol"].as(); + uint8_t iBright = doc["general"]["iBright"].as(); + uint8_t nBright = doc["general"]["nBright"].as(); + uint8_t iTime = doc["general"]["iTime"].as(); + + prefsSettings.putUInt("initVolume", iVol); + prefsSettings.putUInt("maxVolume", mVol); + prefsSettings.putUChar("iLedBrightness", iBright); + prefsSettings.putUChar("nLedBrightness", nBright); + prefsSettings.putUInt("mInactiviyT", iTime); + + // Check if settings were written successfully + if (prefsSettings.getUInt("initVolume", 0) != iVol || + prefsSettings.getUInt("maxVolume", 0) != mVol || + prefsSettings.getUChar("iLedBrightness", 0) != iBright || + prefsSettings.getUChar("nLedBrightness", 0) != nBright || + prefsSettings.getUInt("mInactiviyT", 0) != iTime) { + Serial.println("net gut!"); + return false; + } + + } else if (doc.containsKey("ftp")) { + const char *_ftpUser = doc["ftp"]["ftpUser"]; + const char *_ftpPwd = doc["ftp"]["ftpPwd"]; + + prefsSettings.putString("ftpuser", (String) _ftpUser); + prefsSettings.putString("ftppassword", (String) _ftpPwd); + + if(!(String(_ftpUser).equals(prefsSettings.getString("ftpuser", "-1")) || + String(_ftpPwd).equals(prefsSettings.getString("ftppassword", "-1")))) { + Serial.println("net gut2!"); + return false; + } + + } else if (doc.containsKey("mqtt")) { + uint8_t _mqttEnable = doc["mqtt"]["mqttEnable"].as(); + const char *_mqttServer = object["mqtt"]["mqttServer"]; + prefsSettings.putUChar("enableMQTT", _mqttEnable); + prefsSettings.putString("mqttServer", (String) _mqttServer); + + if ((prefsSettings.getUChar("enableMQTT", 99) != _mqttEnable) || + (!String(_mqttServer).equals(prefsSettings.getString("mqttServer", "-1")))) { + return false; + } + + } else if (doc.containsKey("rfidMod")) { + const char *_rfidIdModId = object["rfidMod"]["rfidIdMod"]; + uint8_t _modId = object["rfidMod"]["modId"]; + char rfidString[12]; + snprintf(rfidString, sizeof(rfidString) / sizeof(rfidString[0]), "%s0%s0%s%u%s0", stringDelimiter, stringDelimiter, stringDelimiter, _modId, stringDelimiter); + prefsRfid.putString(_rfidIdModId, rfidString); + + String s = prefsRfid.getString(_rfidIdModId, "-1"); + if (s.compareTo(rfidString)) { + return false; + } + + } else if (doc.containsKey("rfidAssign")) { + const char *_rfidIdModId = object["rfidAssign"]["rfidIdMusic"]; + const char *_fileOrUrl = object["rfidAssign"]["fileOrUrl"]; + uint8_t _playMode = object["rfidAssign"]["playMode"]; + char rfidString[275]; + snprintf(rfidString, sizeof(rfidString) / sizeof(rfidString[0]), "%s%s%s0%s%u%s0", stringDelimiter, _fileOrUrl, stringDelimiter, stringDelimiter, _playMode, stringDelimiter); + prefsRfid.putString(_rfidIdModId, rfidString); + + String s = prefsRfid.getString(_rfidIdModId, "-1"); + if (s.compareTo(rfidString)) { + return false; + } + + } else if (doc.containsKey("wifiConfig")) { + const char *_ssid = object["wifiConfig"]["ssid"]; + const char *_pwd = object["wifiConfig"]["pwd"]; + + prefsSettings.putString("SSID", _ssid); + prefsSettings.putString("Password", _pwd); + + String sSsid = prefsSettings.getString("SSID", "-1"); + String sPwd = prefsSettings.getString("Password", "-1"); + + if (sSsid.compareTo(_ssid) || sPwd.compareTo(_pwd)) { + return false; + } + } + + return true; +} + + +// Sends JSON-answers via websocket +void sendWebsocketData(uint32_t client, uint8_t code) { + const size_t CAPACITY = JSON_OBJECT_SIZE(1) + 20; + StaticJsonDocument doc; + JsonObject object = doc.to(); + + if (code == 1) { + object["status"] = "ok"; + } else if (code == 2) { + object["status"] = "error"; + } else if (code == 10) { + object["rfidId"] = currentRfidTagId; + } + char jBuf[50]; + serializeJson(doc, jBuf, sizeof(jBuf) / sizeof(jBuf[0])); + + if (client == 0) { + ws.printfAll(jBuf); + } else { + ws.printf(client, jBuf); + } +} + + +// Processes websocket-requests +void onWebsocketEvent(AsyncWebSocket * server, AsyncWebSocketClient * client, AwsEventType type, void * arg, uint8_t *data, size_t len){ + if (type == WS_EVT_CONNECT){ + //client connected + Serial.printf("ws[%s][%u] connect\n", server->url(), client->id()); + client->printf("Hello Client %u :)", client->id()); + client->ping(); + } else if (type == WS_EVT_DISCONNECT) { + //client disconnected + Serial.printf("ws[%s][%u] disconnect: %u\n", server->url(), client->id()); + } else if (type == WS_EVT_ERROR) { + //error was received from the other end + Serial.printf("ws[%s][%u] error(%u): %s\n", server->url(), client->id(), *((uint16_t*)arg), (char*)data); + } else if (type == WS_EVT_PONG) { + //pong message was received (in response to a ping request maybe) + Serial.printf("ws[%s][%u] pong[%u]: %s\n", server->url(), client->id(), len, (len)?(char*)data:""); + } else if (type == WS_EVT_DATA) { + //data packet + AwsFrameInfo * info = (AwsFrameInfo*)arg; + if (info->final && info->index == 0 && info->len == len) { + //the whole message is in a single frame and we got all of it's data + Serial.printf("ws[%s][%u] %s-message[%llu]: ", server->url(), client->id(), (info->opcode == WS_TEXT)?"text":"binary", info->len); + uint8_t returnCode; + + if (processJsonRequest((char*)data)) { + returnCode = 1; + } else { + returnCode = 0; + } + sendWebsocketData(client->id(), 1); + //ws.printf(client->id(), doc); + + if (info->opcode == WS_TEXT) { + data[len] = 0; + Serial.printf("%s\n", (char*)data); + } else { + for(size_t i=0; i < info->len; i++){ + Serial.printf("%02x ", data[i]); + } + Serial.printf("\n"); + } + + if (info->opcode == WS_TEXT) { + //client->text("I got your text message"); + } else { + //client->binary("I got your binary message"); + } + } else { + if (info->message_opcode == WS_TEXT) { + data[len] = 0; + } + + if ((info->index + len) == info->len) { + if (info->final) { + if (info->message_opcode == WS_TEXT) { + //client->text("I got your text message"); + } else { + //client->binary("I got your binary message"); + } + } + } + } + } +} + + void setup() { Serial.begin(115200); srand(esp_random()); @@ -2556,6 +2794,7 @@ void setup() { uint8_t nvsILedBrightness = prefsSettings.getUChar("iLedBrightness", 0); if (nvsILedBrightness) { initialLedBrightness = nvsILedBrightness; + ledBrightness = nvsILedBrightness; snprintf(logBuf, sizeof(logBuf) / sizeof(logBuf[0]), "%s: %d", (char *) FPSTR(initialBrightnessfromNvs), nvsILedBrightness); loggerNl(logBuf, LOGLEVEL_INFO); } else { @@ -2633,11 +2872,12 @@ void setup() { uint8_t nvsEnableMqtt = prefsSettings.getUChar("enableMQTT", 99); switch (nvsEnableMqtt) { case 99: - prefsSettings.putUChar("enableMQTT", 0); + prefsSettings.putUChar("enableMQTT", enableMqtt); loggerNl((char *) FPSTR(wroteMqttFlagToNvs), LOGLEVEL_ERROR); break; case 1: - prefsSettings.putUChar("enableMQTT", enableMqtt); + //prefsSettings.putUChar("enableMQTT", enableMqtt); + enableMqtt = nvsEnableMqtt; snprintf(logBuf, sizeof(logBuf) / sizeof(logBuf[0]), "%s: %u", (char *) FPSTR(loadedMqttActiveFromNvs), nvsEnableMqtt); loggerNl(logBuf, LOGLEVEL_INFO); break; @@ -2725,8 +2965,12 @@ void setup() { lastTimeActiveTimestamp = millis(); // initial set after boot if (wifiManager() == WL_CONNECTED) { + // Websocket + ws.onEvent(onWebsocketEvent); + wServer.addHandler(&ws); + wServer.on("/", HTTP_GET, [](AsyncWebServerRequest *request){ - request->send(200, "text/plain", "Hello, world"); + request->send_P(200, "text/html", mgtWebsite, templateProcessor); }); // Send a GET request to /get?message= diff --git a/src/websiteMgmt.h b/src/websiteMgmt.h new file mode 100644 index 0000000..a1fff48 --- /dev/null +++ b/src/websiteMgmt.h @@ -0,0 +1,301 @@ +static const char mgtWebsite[] PROGMEM = "\ +\ + \ + ESPuino-Konfiguration\ + \ + \ + \ + \ + \ + \ + \ + \ + \ +
\ +
\ +

WLAN-Konfiguration

\ +
\ +
\ + \ + \ +
\ + Bitte SSID des WLANs eintragen.\ +
\ + \ + \ +
\ + \ + \ +
\ +
\ +
\ +
\ +

RFID-Zuweisungen

\ +
\ +
\ + \ + \ + \ + \ + \ + \ +
\ + \ + \ +
\ +
\ +
\ +
\ +

RFID-Modifkationen

\ +
\ +
\ + \ + \ +
\ + Bitte eine 12-stellige Zahl eingeben.\ +
\ + \ + \ +
\ + \ + \ +
\ +
\ +
\ +
\ +

MQTT-Konfiguration

\ +
\ +
\ + \ + \ +
\ +
\ + \ + \ +
\ + Bitte eine gültige IPv4-Adresse eingeben, z.B. 192.168.2.89.\ +
\ +
\ + \ + \ +
\ +
\ +
\ +
\ +

FTP-Konfiguration

\ +
\ +
\ + \ + \ + \ + \ +
\ + \ + \ +
\ +
\ +
\ +
\ +

Allgemeine Konfiguration

\ +
\ +
\ + \ + \ + \ + \ +
\ +
\ + \ + \ + \ + \ +
\ +
\ + \ + \ +
\ + \ + \ +
\ +
\ +
\ + \ + \ +\ +"; \ No newline at end of file diff --git a/svg/README.md b/svg/README.md index 494620d..1076dd8 100644 --- a/svg/README.md +++ b/svg/README.md @@ -1,2 +1,2 @@ -holes_n_ring.svg: Used to CNC a ring and the holes into a wood-enclosure
-inner ring.svg: Used to cnc a ring that the speaker is screwed to. The ring is glued to the enclosure. \ No newline at end of file +`holes_n_ring.svg`: Used to CNC a ring and the holes into a wood-enclosure
+`inner ring.svg`: Used to cnc a ring that the speaker is screwed to. The ring is glued to the enclosure. \ No newline at end of file