From 4e022826e6ec3f40d87106a6d00985cfcec5fe66 Mon Sep 17 00:00:00 2001 From: Sylvain PILLOT Date: Tue, 6 Sep 2022 13:03:33 +0200 Subject: [PATCH] initial commit --- .gitignore | 13 ++++ CMakeLists.txt | 34 +++++++++ README.md | 0 assets-cg/ConsoleFont.png | Bin 0 -> 32858 bytes assets-cg/fxconv-metadata.txt | 9 +++ assets-cg/icon-sel.png | Bin 0 -> 8388 bytes assets-cg/icon-uns.png | Bin 0 -> 4629 bytes src/main.c | 136 ++++++++++++++++++++++++++++++++++ 8 files changed, 192 insertions(+) create mode 100644 .gitignore create mode 100644 CMakeLists.txt create mode 100644 README.md create mode 100644 assets-cg/ConsoleFont.png create mode 100644 assets-cg/fxconv-metadata.txt create mode 100644 assets-cg/icon-sel.png create mode 100644 assets-cg/icon-uns.png create mode 100644 src/main.c diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2c4f84b --- /dev/null +++ b/.gitignore @@ -0,0 +1,13 @@ +# Build files +/build-fx +/build-cg +/*.g1a +/*.g3a + +# Python bytecode + __pycache__/ + +# Common IDE files +*.sublime-project +*.sublime-workspace +.vscode diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..0866ce5 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,34 @@ +# Configure with [fxsdk build-fx] or [fxsdk build-cg], which provide the +# toolchain file and module path of the fxSDK + +cmake_minimum_required(VERSION 3.15) +project(MyAddin) + +include(GenerateG1A) +include(GenerateG3A) +include(Fxconv) +find_package(Gint 2.9 REQUIRED) + +set(SOURCES + src/main.c + # ... +) +# Shared assets, fx-9860G-only assets and fx-CG-50-only assets +set(ASSETS + # ... +) +set(ASSETS_cg + assets-cg/ConsoleFont.png + # ... +) + +fxconv_declare_assets(${ASSETS} ${ASSETS_cg} WITH_METADATA) + +add_executable(myaddin ${SOURCES} ${ASSETS} ${ASSETS_${FXSDK_PLATFORM}}) +target_compile_options(myaddin PRIVATE -Wall -Wextra -Os) +target_link_libraries(myaddin Gint::Gint) + +if("${FXSDK_PLATFORM_LONG}" STREQUAL fxCG50) + generate_g3a(TARGET myaddin OUTPUT "Console.g3a" + NAME "Console" ICONS assets-cg/icon-uns.png assets-cg/icon-sel.png) +endif() diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/assets-cg/ConsoleFont.png b/assets-cg/ConsoleFont.png new file mode 100644 index 0000000000000000000000000000000000000000..504e8105c776b388c5044d61f73f516183df9408 GIT binary patch literal 32858 zcmV(!K;^%QP)005u}0ssI21g-FT003mNdQ@0+Qek%> zaB^>EX>4U6ba`-PAZ2)IW&i+q+N`}>mesfxZTqiMoFZ7VBumAyWV^LfgIoODyBv@} zLPD_5&YeI8YxyC~#~4%d5$^x*|32aW{Gb1mj-%(0%h77Db>n}z=bldf(6;w~=lV5n zdHwp$kJf*G_w(@eFA_i6`F(%?v(=B!fBAX*dV%-1lRuSjF4X47UySenqUVq6w;wL_ zaiiTQO8nvaxKRJN(4OAEh#wa?KOVLAc6|E^<9>g?zPw3${|)|9<92*p?EUf&|D6w3 z?<(A9PwC#{zVYk6e>}kMzbWh|f9UJi$_M$-`g7seviFZCVL^VjPGA4W=fdNo=AVA( zyIuMEr}*=qhaYz$ybT4j$aGSv9pe>(p(M0g?!*EYAoKQs22*oi0R zc*Qe5@m{~rIC;dJ?vM`tkkU;1`eECT)YIJEzwAHpNe8=n?Tt;IYuodlzCKG_x9!^u z>u!xZUy+Zd$i<>^@!5aEXTR_~szQug`?^*||t=$#K1et&f^9@obOSR!s+c$m1e1MFJdOH{j3I$~rY z8yj@;=xNVsumiD_bn%cW?`YAHTJqL><%sK}sU&_J_&LUmohWFy7mkEanPiQ1EQjq&)x56B~t;_H-Tfy7QRXUAxA8JblK5SJ}6y1qk+?vK?*+yY>p-jO(Jn-=oU=E?q;B_x zkH2P3!>8L(UpxuYx8H2b^@PTIrl;m{BCz+FVxCXc)u2Fy)kZI7j_mDm%#r!xnEQ3_ zEOdNk$s^;S4um4iey|lqcM}_T94BwRvq$M<|M5flzMp=w7;)Sw9<%!BpuFc!+`h)j z3*b-#%7@t9*L<#P^lLVBuyU<7>wQn8q~7?Aiv^A6%}OHHWi7=REgqGpKhu#%3$<+L z)%2CubQ3fjNcdi^cFbH^(7i@<;^HAA`#PVKeV+*Pbjxnm`n+aD*ABEl<0N^Od7(b7 zjG3;J#nuEgmi9v8EV}a>XN;9t%5; zwdtwodFr{G`tclt1;j-vkar(7=va#5I@y+eJmKn3!RvPn2>|ZkrapR0N5xd+=3fB~S%wGA-D3wvBVC z0kY5K(O`D}ys)fSKKWwb^V88g%*I4&ffOjjJoaagf#=!qPER}0pnKG3LxSp!s;9w{ z?&TN*=Tuut+gbX?&LO>#S4Sk;eqsM_mZF5U8Rx-fL`*p=hFd6epjS(E-RQ_OXo-=3 z!EgiqUH6y|pFxCJN3}2HBcXNYQ4s*%fwwu?jx;-PrJ(T#RuXN4BykNM=QxjuiXU@7 zS<}168{^Hsg)$-{G&9ag7tk!U_8dZ`jFE#CAQk7tlJ3hq>;tEY3blD;z^jjP zCqxI2bUe8Qy#W_M!C4j%TRk?wO~IMLbI@kQV8)Bb;V~vs#QrPH0~>Ik10yi%ex|#H z0m#YEf#iTNP&=L)rp~{hEaVS;7!?6W5YXF<+dX*Ir{Hn1qiFMfrET;UgKwC@b(j^9 z(XogwI1z1PIRG`tIrnDWPs~0h>mG#%I02qz&h4y73wWZ|5M5ymDdq(KvR&v1+IXdQ zZ73@iXv6nEeEY(bZMolfJwTmPB)a>%|ML2wT{HLUBJiPsSj_!n0Z_oT5B&m!06ULz z-vBnuxt8rjKClL$&AX0?9Az#6+mNb3M@yp6Al%+(;Wf z6hj8J1p1+C55Bi=5Ex!(V_na+PUrQpIIZ$bQ=$kY=esZY-uw z=0av===>iA4(#KNkU#q~MnaMFJv{!r`vZ1E2)&|21#AOiy4o1*S;A?t0+U7GuZ3oU zRss_mkxHO?dkS=r)xQVZn=Y<`5J46Y8?gMuk)6=}w4;7dm#BZ->x110SPR5H*N)BF zGi!c5>;;D7L>W>+oDu5=!2o{a*{}f#YdV01*c&X;ZgioJ6plL`3%~CO)&oAr7@bp6 zlJvX{ztH!aT`ihcw4y)b#GO24zfW*4wgp^z|=ePa!u1WV`uw^P%K zfjSUn^btpJ8u{x2O4X=eJsTqls5kHPL_jHa2DwZaM=X{u3BdrU06?K2Fc!S?1I`}s z`2IY?{Ri@g9U0(;umXIbQatC5VP|6z45VES0`$ioc3eAzPM89)xGoqFF7^`QfvEF! zz$wcagxrt=tRJANZwC^B$pX9{R}r;f$tMi9@J1TPxUjy;%u@0b+d|x+ee2azic2!mu7b=0kL2TpUk!Ica zY2a2B8~Z>5Q^{usMqmngdU!*8whWr&-f#yz`hMvIq+*aZWC~ML>!~}rQouX6C>3EP z0Q4RBid%(yp^#fc*hNlw5?BCNPz!lJWDirqrpC;^wTe-IK>~{kmPWyMZGb2G5|}b8 zdt#h`@Q-or9ej){i32dUusS}OM?V_!iW%8i77UG1=%-_m&}Gme+k#YsbfCDA701B= z$kK_RVZGwkrD_HnCYbb|V7lN1W>v1xWQ-I#ja&gndF(o{JQ(>5Ej$`Ja+e*2iZS6~ zX9U) z2>Hg<0;D0r1?hzDA6gQFqwSe21>9%Tsuh~%NKO@qOP~TS9+yacLD&3V zA>d*7Bg`E_*7}@Wiq*kRqOl1fdH4q^AxB=K7r-fsb}i`K z>lEv8iA}*1Jmxm5Z2oxntl(7ewReR{=IjiMg>^l^b#A2coF z*|48I^3WY=;P1oWWs#%?NrHJLJn_T#GbZtX#dnPDb+OvR_)~$%-MG_n7xwM)Twp_Z zj32Q^*eGP3hivRQ(l-ZMd|&uWt^^FmHRBQvHV-ZgIK0@31AtO+E<4JBE#;0+5OIQ* zZs0XAUkd}I;d3x&NJo}j&Dah|8a6Rwr_nf62ENFhmi6AVUKi-M0+TQioOCf5Acw`9 z8hFvB7-xF!iB#xUSrF(tdr}UZ>W#?n9iAF@&X^HOhtw z#sNQgL;Uz?^L#pwi4BEC9GHJd~bilR2Y%I&Num!V#!N%>>#9!cnSrr8Q!L;Lt z@k37mneleu=a|FN4Bj8Fb%N4X0McmK0cd1v!42EaOQF}OneV_)=7|=UIyzh z@Ktw#C8{V*!>}P1h}x^@euZxw!pX-dN%b4N=MnH8Y$-T>o}drD0_?yMYGOWRVZwiy zm`_=l@QsO?JJQc}3=~uxd@6FE$UC$B@Ceo%c=kYhU?8xn6{yR6gT3uxZ329u;Gcmy zJRMsK7~hTgOe0CK1r~4xh7VSJzEBLY<^%|5wzjDI4cwE^M?gW(*Ms;X zMhBXdW(R2FF1gq|L4R=JpvhrdzbfA!=-ybi5<7&I7>2DuxNJWHIP2|mAh;J^ThYNj zDt)K~=;pkR92eR`l#@0d;0+-|k5Jw`&(mXiWD6$;aWKvUzGh#47H0fylrj8anDIZN zjHx3IchE{<;r0XpXzbo|1L2@|ysII_3(tz|XRP4?YI@+x%GQdieiu{?e->4RU1M6b z2qPgX>~39*FlGY_8wM=g%`4pt3IOG6{mV#FxE9U>l<9*pNcRWOD>~%c1D*-@!iVu6 z016&7N+n^t$Nf@hoiXtEjV42%vHJx+f++P9cah;Drw$@Fc#|Fge8dLsE+jrSDZ<{Z z`Dl9y+cPrGtZ9n28={G|0;_?5S~~He=$34=U-Lj!H&)9m0<95T1Mx=*YpL@H&#o_E z@j=t|T9zCgKM;ul1&shE&@Xfm`QPEEVs$uBo}+;ZXVW9j6K{v_2RGyYal}|HoIM7q zu|FroJY|3u0s$T4y624*yIRZO&jVH)57h9kY70O*7-8El{Qs^Cm;CGxYA}=0JZKKO zjZ|!al6>(Hp3$(r`%vR|sR?rF6#|z~P{2oC3&=YWWyBr-cS1xaEDF{4#B*>7*vlB2 zJr^q@tt|6-7~c(e%>&83BErE2*UWAh?weQ}tOxe1;RPk5xD}XW6v+!#u$3%V0W-9^ zr%R>nDBWGTP(&XSBsj+wA6P8B4Vas?dNVFnj;#JJT!r?Hlke^Ya>|;HfCs_nAygf; zR+lR{9Yl`-`l8Bz6r>J6M5&v{c*l%Jcen)j42=RVuTUA5?l4LTY;nn|2URRZ>^U9b z+*U{*$Bg&Gs6RaTp$9K#m9m4}@Il;q@+4`UO!s@Q&(ST+0GFuBMUu_I?DxhQc-$nC12CrBxZ+g`l_7BYahPC8}WEnh0@3 zlo437vlqZ`ux@>JKp1evAtSb%yL73XFdWD^pLgY~q z3}3=CKA^6(TL&VJYliNBd>5Fj%URzA>cYCNYeD<6-z8wcuyLL(cN``v8w*xW8W0V2 zJRYnW<{c)}G-w)3^M+Z=u>rXl{Q+dKYSI=S5cY`^p0HKmKpVwvhFk)) zBU*7_oR}ThtZKdglObuwjuX#soBA>@+g2ez~Fy??@ zCqx;|&}r@q81S?mro88UyFCoT2;eA z%E4tOD+TFE4|F0+yurlyOB|b76X1jrJzC0_@%HCDK_g%{nNpP8++1r<1A(bM4yYR& zJdFP%VXXE2;6j`Bpm1L{JcD_7bN$dJH)e@sqjp_ z_qC_FP6KmCPdjYsx{JGJ_?mB-3ZX&Vbs>W#swa;;b3iSgy+1x@HO&D*bJLBMn7@@LZX4b7pQcL0@uNc^F2@%ker84pvV%j z5)kyW!b-s1fU6UL0dH*?a8-{GL3n^VEF0RiVJ-mR06LAF06+|nKbH_5iu9Et_=Njn zmXLZp4WuX41Hca8gcYO*onNL7HN{?)bPEU1+BY5-1!G+&G6>nkrD3EhYz)_RoGZs* z+n^9#FU}7KmJ;((kyM-r4^d6}*(I&82EGU)fId!bGj4BoaX(uj9|etgY&$QHsjG&k z&Y=;y9udPp)gpUwL6O*YL_tIPe1PKn+xPi(X$+3h(Q+MuigwfktjSM>y800D>V|{xe*LumEqK|G`-yiq*C40a0k2Yk!GznoHHdDDfY4jpzA(DEwa zmC6fYU=pu^MZDpY>G49FlxxTAuzUqV45Vgdj+zi~3HsH~I@gGJ95Vy;u3YJMn z23S|5A;(o_&38a4Kxh8JpNLV8q63`ESfam>Aw#~Wq2{uIlDcmf(+bYk88RLk9|FMK zMMc=4m6j?D91k+0F*{Zid(RihRcOUac*Kbd*wxLBpDM6y6rGjna%wjZ)+hmnx|xQ9 z%itA^fdi-J+Cv^1=^X}`@3rU8fyiOlzHB-+6a$>zO?L~~^yrx?t~8eJ@ooer0zx6~ z9zN!7@I+zC+M_cH!(m=<1+e4o!QncWWt9+m9R9V8&*u*6boKAY%?eAd@$JVC40|@f zi&+JRmG$WhixJ=F&3nK$9m6n?r)I1z1__6Z5leWJt-z7*oZ%MmYJkq8Cn%E3A1!+L zZ8Xp--1URv)?oL5xf{Y*~2;CPE2F({VxcnJ|&6CkiW!?okT}=u5Ka$gdGX?dAGo0vx8z7{H?KBR@@AYc0w0;p0l!7tTuaf zi5?-DCjab0#as(Mjn7?|kAb0H8iG~-#@ouG|FY6PW3jok8rETL<- z0EEK$>^`q9U+`6gAF$xMUblaFUHII&kp92lIsEda|Mkvj#L2rDq&|mm70WgjZ(top zV2|sLbg|lI*Jdt{FEQ-M>mvI&@=>tyn6SqXaE5|(qoD^L4#>xw^j&+TCwo@Z49}{| z)im8J`?KK_uAI2c1a~|vbuzDOU??<rp!Ub+0tjphNIf{+4&|W;Y_DtIhzwczXhV8uK!o8BM6% zp$%AxY%b<3D|gJ?sv4TdVMmG0{MqYy(+5@_=7VKJXVDXWUE~7U!b0409tVQrYGGaQ zs|G`mBiyX`%ZuMe(#^$^rJe3q@-TYmwGHn>2609Yyt?5Q5G0nqvV8*>8-BT;pWM#y z%l-UkJ9lhG=^oAR53X=F9U|Z?0Wu<%BkrjWP%S1rw=9x_c(Hb%DtzdRMhv1v0r zS~*N@F~C~(c<^S}J${1Cer^DC9tfM6J*>d4fZoHs3g>Qq7*=gx`8jw-woY?+2@rMn zXo#Ud3}&s|2N?nKA9#mqRtzBSi1*dF&}S{r50d(vy^Vxqqpn=zTA8!xT*QS>Q{Z?A zTok?@FJ3B?U|@$K1ahtlu7v!Y;Ms*D_+GF;0QZ!B!b>rF$q4iW$bl61 z=9y|+!NOpq*2L;(U$u2HLAO>|*gU2i-;Zpyb^K;l*$H2*_*WdNSu?CDtUqd9!=B-)7x&xJ?J+F6gefxEb=;n;{pvp9mp4Mdu&tmoSRW8@Fzqk0pn^Uh{al21Hk2Isk z|5=9^rZ!G-tm|&tg~v9y>mA{mK)Iu`kLLHSavd<#@XQL();zPCmQ-O5@$9hFrvYow z_T!Fs+~-8xZ~RR$F=1kcGoBVzPS*SK>`z|>0>e@n49^*^Y-Lzgu21N28Q6DZxoqrM z#&Dff4Ln!0zC)&2GZ17vV;onBdpc>A`)w%T{5*JRa7MngAZoF#X7kS@Df?e&pI;ZsXH&$s^vx1M4M0|tXDMp zeAe54@9e{fck)QV)Ol@1)G(o(X4)eB_bS7J-dJbgG3=^(tTT60L-2-QAX@l5MnfKd z5?&0yi!Z*Q6d5#q@@%Yw(Q(*2yNE~H`LhW_TWC0#dT+cPQd!JTTt5EIJgDFZEtr*Y zF{Nd}FkpG#x7UE-{*QapfJxWeTLy*ofYj9dB6z4EH~m2HhA56N2;Ry8&);4IzfKjA z(g5~Y@i#v0$BIY4@arPt?-+QbZs%nadTQkvdII&qHUP))V5jktq>cnYO1m3a3LU|` zW2Kv}wbzv)cJyr^KyoFP-6R(iOpx<`?R5C_t+upsNk&u~A4Thn6X$V*xw&|8zJgxA z%upnZ3%E_}@yJnd#xEFM9`ZB|@`-FU7zQTnLA1~^a9@?jY%WkcuYZ|q0i0n9+_4& z)yGOf?gWP2J;54REryBtWH-67S~eCdbRG3+H-B!$m2O71YW@82LHKk1{%`dTf3Dx( ztM`K`kNbl|S`mqR73N};aquHqLMyUs*2AEgI1GHJS>unrIy}EKNg%Jl&toQW8b%aL zZ7Fy{P{x*SPp$we7q$fFVXt~@+*q>l|# z1{<-Sc7xQ_4aSPJprCbojMJXGDVmlzLqB*Y(}Ya_z}>-rs<{mZZeKtxM=3Sn9wEAQ z)j!A0s*2|TNVy(oM0nd9%ItHGiX0vt2=!#R0atusrEwYn`vX`urGq&1+z_mY{Xh)^XnPrBkdDT9YKH2*jPa*va`=ZQpKu0zH%5Q% z;&;7;Yx3mb+0GoqjujSS}-QjxZ zQ#ElZTe`ptXE8ibsMrF)Gqv#EzF2DsOzCF5XLG~`eq!`&E$%=ib`z-#Q`Fr8ta9Qy zVA#8Lpu2elVWoB?eF&zFm)Xoo#zTtN8qO&$`vEMxt)#k z^b2&4$H2X;dP#sO>;A1H!ESmq>q&qGwJ=CHm$WTgY0*SfJ`oo1E_#t_)%p(2nZVA? z2oIhRByrx~Tf?6j!|-3$u(JP6(D;CSo+Db%i%4O#ttT;`zExu(s5`G_jdof@{DiS1 zs{(X9-Q3HD!B5es@|1>e!(2l}(o>9zhu)y02!s42Jj>ZZ--`)|=qzULTG4JGCE~|r zfP@`4+EC)ho(n*1R?RdUNCwMp7@&q_3%1|dje_2>G}CIU(~ce!wsBfobjbu^NBhPW zS#Xds2*y~`=5DLipL*Bu!^`3W3d9|4ur#Bj(lUYwh2IdIYV8Qt^F+ap4kFo1V@xPh zZsBg;?)ZZY?2iQOUwktBgr`lGn& zd_1p08%!+j*LL1`k=ErfRzn+C7%M)bL%7!Nw%dv?Gy-D*4moiS8iCu;61Zo2TqPV1 z_Psb2k6E94Md=cNGd@t7k0{-R#WJew3LqI~O;kw!wb*vQu+L+&FgM?$*{{UR+pTXGW@cT&`Q|nTsf`PGc_5f-x%fpvdQNTs;%7=Sd1|6_`KVm$L4>weO3F) z|L2>fP**bHx6UPwuTkhb{6!QxE7#zZ8|Mpzwc$W|0vdL;RulHpn(jRTVQjRp-e2tM z(t%yA2*bnf%`gq9k^crS;eapp0MZ^R4sBxj5yFOA@^0siSKj`YBWRY@K%=JMIN8-C z^lhFZtAGug+#nDL9R{M_<^*}#D-J65_5nnXeI*&9L94>(vDnfK)Xk1G_H_Zt9GC%* zqD#k06fr^FOq}EqfqvH!4i&YUZ^J`Z#f-bQb#iZVXUFgyR-hSiiRatl=CW>9Dl1oW z4S?|0ukAgpc0NhoX^d$VQ?gyv0)%ODVD$y@)x(nK>FSJS26qc};U>=rfBxbBhJxYO zM<$;;F$v!vnQXs*pN|K$lbW@{26<28kkw?j-mJB{JQ0cA#FfW7;kaWe9=J4EZ<;F7 zS51B1F^b~^9gfvp0E+;84{6_^!<$79$i=-9{x{Edt#bxC{ORFHcvGo=I2_@+cDlhY zV{}Kvpd4n*BM;Vh@t4QbyGcBy#o05kMhzKJKvrputKh|?} z0X^DsYSG`LMl}Hg626IJ8Tb9hCwl6wPh9a%HSe%ecBFVBpeBm#zBh8-(=;~HaTr&# zN{w}e|G41SFx_p1ezDj%Wy|ODLT1A(X#8LHupEhD1?-PyVr6|Mi=9?QAy3_LpLi-D znF(NKRFxBY!nOBafJVpw&cL1%CdqeeQt+WYfZebyf1R6YD>r)*U7-||8(s?dwSw=K zp|u0Yib;e1ZV2K8EV7ERy&=D!zi9aWP5=Hy!}o70NHvguUnYBW35dWBs<)~JP!**8 zX}3}K88K{SB^e)M1{|2q$3!!eK>MtSu}{S6R7Y--##U!eR$2HtO;xr!zK>xr-x&>cj1M8R{oUdI| z@BpDO`j)5f8-_Q5UqZFXk_`snOPJZ7AxYNnTd;(d+0Mp%84zQ|tQ;1k!jMl(vFDa7 z+}sR>AGW^q3<>$cxt3^ev>J`0nLC9Y>-xnS@54@CV-h+yj(9#|>;bR+sy%L|V*GPe7tm32H@8>6sNa{Sm6|>_XN$ zj$|+*t-R`ZngnZsH%s7uTkP?6m;vNFDE7kL%Eh%GF)GVOxk8KkHA zXW3SP=4z31JmLK!_QkeU_5C6)djKqWt$TgZ4oT*8+R|@ZY4+8QI<^&L13hIQX4M16 zVe1;Y0^M!KkPyn@K`&sQhij{lPE=VvHClyqSh%<%WDWG`0edh+mKFU)tYr-vk#64*+i38>BvXd=&Q_PHU*6L)7Ko1K4V z#rm4p3gpBeplA4cj1sti_0hueT9amCcD3joUwx*=&9@bEz~6N%O~t5NzN$?MwX(o` z8}g-ST`TAymo=JkDTl zsAZ8D+#byoFIMWV7DnuEPHE)*PwM}|*8;$4;a|iR!ED*4YDqMrd&wm+v+-zPT*E5c z&K7151-exUN3z6v59bDqx2VHTH#(^9fy1?5Jy~A8L!#SOd{_zf>c8meqC$fioN=z0 z(QR?gdFwOTy|@DK7B(MMe+Xd*Ny8ZoO5@b74y8(KzoD3Ewa~JO%YN{*!Gn1ln^eFm zOJQv^pT6xg1VpO136n3_Gbj1_1Zvn3v zR+ooDdp0+!85-i%+QDTl!nW&G7MQL~*zH>gA3l@yWOZV)rOEO5(6@~mxsvUTu7EA> zn{_%dTC-IwzK`yy!5>}a>> z&|ZB)pTiFd?IE1i6Zd6-Hns+mbTzLr?D&hh)e^?6A34qE|MKc#MN-TDSEv25^F zbqNG;1tL85?Mt-fFli&|&W>m0H@XGt`{wmMi>dy2|QWatymy zK~{MLyaErJrux-)*apvk7~QywO9};@HVIlqAqzncq+t;PVfm2ZT2xS_kaemCw}+Pd zdSjrW`8!S55-mx*gF1`ioZ!KIRcq&5Z6K$M$umP5UHZ$?EsIRYwy#9~mxHupCOft5 zR|^)$Yy&vTZ%~SC%34t`wDP9xutPshT>Bw!Er6EWVMu;ACchaog}sAvkd1n#tfKbA z-Z7}|jmufhX!f^{;)5qa9$1Al7;I^YWd-^hLMSK|$O>s>vmpFzwTF$Yz$@gNLjIVs z60fu&g*ZbKoI>&Z-GHZ^e+ORJ{tHq8HBS?{T+))RkA2;2oMSnI=iRF>Dh$KUUfU{J zw7pFQP1s2Xxte^8x3RC`N@7cGKh>;N*64G_dcRdL;FUZ!{F*_wo(<(ToT>eD=a}DB z!5k*5mOEOR8*^Wcm}cW1r}49FT(l7q+F8s? zjn$qiQ1HR4ph7n98CO`79u^V-IC#El4a)$w}AKDQQezBF-PjzEa;Qo8cw}JJWBHZkHlO z)C&JYslc{6_f*?r#~S#U-HMRAY9Z$nflu7C+p#^HSl-gG_m4-9V7HXOx1f8mc^|Ty zePMIZhzB@_or=c(9^e3fX$;XJMgW&%q86G3O6am`V&8>Mk0&?>nL%|Wg97DC$@8>@u z=syTF{0o8>TOuC(2n8>=)WddTB~H8x=m^Q5;BpwQX^$F(VuR-dhV+S`;&$qI^1d8> z?mCtD)zQOncJTh|==;^INnd_`otW6NXSX-Bt$^QTN<_7;sMmH{c=ecCKE2_{WLGxVE@50zTwF z{FwrLC;$0pCtu;ule6CBTpNguCHgq>E6Q1Lx90hGV}{TEM$-OxxBs=-*rS!p{)tp} zd!!c66s^nkJh%dOt`M;wz>=q9j*J|vcR{lvu<>pO*U$ENSn-C<)-*{-D4(cz7L4CK zA*LKE+8&b@R=lCEc*DvBw=a_&nk0AI>JE$;bsM_iwXh29u?sd%&HxGgEF3w(>AmAw0+8FsTl&(|A{ z)+ei9+bmKEYICyAqwN$lTIw z(~fK`dRm0R%UaYGuWAAFZBq?C>uExst5FSBvTS&Rz_*`Ow4JFg6W3HRX&5!yGHe8U$r2 zfk_mbZ#Iicdl**7m)q&k!m;BxqD^vpn2wuCm3H)}HRStuH+dnwUb&15ec*iIw3(#vL@HHeW(F z%W4#q?N#qdm=!VH`*w5*@^}P;zc3LroQHP9GObK5I4+P}oKmn-e29U(d4 zGNZp=D~BT;^>{OufnTC!R<&KLW@x@OhqlYcqiQI{B@mg&>f`da0OLos$KWwMJc1*c z4CIk&{;1slv%>vg8p&yrfrn;xO?qtTeXI^sm!o?uf&x2D7UnTs2>c1BwIAGf6|CV; z8ZVk3C-7NL^P~Rii_?7D1mqf)*KF#AaPC+cRdB!dw%JAMPpbpE9ju}iS=+SO<*G4a zTx>VJ>k=x&&+No?nuQfGHByY3ADb6xOHa1f)9A4}NT8hAUR5^4w#8?X!6nlzdRPaZ z9@W(jCYoqjnWlKGR7Q-wt$}Q#grshsJ6OOyw&W>Hv15fpuZ++H&vm*9=`Tc09vOVH zWQ65QEo=_wz+z9MS!PqS_%hmAJmg*UQm1HAx~F5C11PeRlRr`~K914CXV1}4ZKn(2 ztKaAsQeA9_jbF2UsORWF)8mDlp18xtuCm%mtxTYGiYc7|?K;Q7r8``mhFpr#ZC$Xs za@#-q>8l;ESZ3aT(i`NP)*#`B-XMr`N(*?S-A{Iw5+vxd-z4^^?I`S)jV=^hec>bY zbaJ2|VX-&V1Z_MH1hMw|5!jxr9X`VDmCFa_UBz3k&eq!n1{BimM`9!@#E(VuY}QN_$txZf-h_?(5jOh#$UD1>i7?`jfCZd{l zM_F(g@q*sa!9;cf-JG2PhOZv`<*I!#Z@C$ze!Fu#yDhyO71Ax~xg5jtSQAsHEl|^V zwsOh9Lw%gRcd%8v70%Wh0oLPtpqWZBE$Peao2-XL#UdVNtLkkqzqUrWQZQHIbaaNH zljylF_^(-D`Zk})PLFx>ZF^ja@AXZ5vpKA(D(qZ>!v&B9H+q&dr8>WDOxCSYfoRnx z(sj*XB^!y|;os|Ekn zEyD9;#@cpE_jCRzZBKR!#-@FgwzKBd9#xjM#{eoc<2j8LvbIUk*1#F|mvU5v?`s!z zq+ocYU@pJeLgQJdgr>2cHf(%?5fPlB9a>>>CV)2MEBC!}4rZ*`S$YY~%p*Cn>RHLw zE3mSAa$iJSXAVG86c{a0aLmhwCLohXhv{Z))f5yte*(%lR?9n~>s%R#!yLpn0}fw%2MZZJh(SFL4L+ciEKT20Lux&oy=)57`c2uZr?GL-R_hC_%5ObLa_>4NK?g69(8) zoe9yh*XQ<5ez~1~gtrtSscV?{V5lU^tsFJgycA&PIUh5SS837tHX9wosR0Ih4p!L! z?QL)GC_~>p??>|Ud71}qTC5qi+uKNawHiHFuj!UO#B%^D!V4;RQrBZypbJ5YRuhcy z5{P=(gTTn_l^vcXcv0H7%ke0n&ziPkg8jpa*d{<~h?LzcGte0(!Rj*Dt+7uN3+iRD z>8ic!hKsF3^RsOl%f8T(p>YJ1{BW8d{_r^ex2O5xKaTU0xJf%OyT&yO4Y6+4$=h=9 z^wj8?60RP5*gx!=M~b#kxyFtPem*HF{O?H&?^}nzOJaam0-la(65L_>*clMx;hA(? zwaLrV-X&Q#@=Uw9@epsFsXe}Ly9GMOZsZF4KAWTEu*wQ#!I{|>5(cn4JjW)7&YSi4 z=>5N46>$c?X{Hfw?u3im%Ds{v;%(ByDtmqm`uYt}hm4nBboIzBAh^A<{oj;y{>*i9@Byn40N-@mEl4WBFKHM{ZWrJjaNzge}3NTYP~?SZ+zXx((PQ6au|eKFY_`q~5p zc{8tnZ+tHRx%{Gl+NLf>mDZRI#PDGsszs*B%u@$j4RhJg%=;zaJ#Zm2@5ng0r zXF(iB9hSFGlS4O5$?B_$wGcvcBc2;ee>in@Tm7`V{TCkN71g>U=YSa+i>Ks8NV!Q% z5HiK>}NbD|hB2uP}5~pVY4~)QQ>LCkR6y zOS_j>J>hc4^TI)A4D2Zt;h?7GN(&Aqe68#{tp-uOtt;<$SjBhME(%&#(LDcvr8bDQ zr$*SJSpb2JHDVE*KLPs|NqAxvS9}e@u7M3s=a=}}>7?iVjjyG{zUOnr*Ir`os7Xj~ z#RPYdI>@XvC)eI~*$$`8Bd~Vuc(eO6Uohny@XRKTqu*pP%pa z9`cZgx8V~e;}wmC+dqO~q@L<@9ei1-4Qv`})v}zVN<{f$G!`_pxlXA$g@q1)35;vV zNA`Y8LhAOZWj`E78&!_!MXE!5+sj;hn_baDcIWpi?-Vhg4%+3)z z!0q5WvN(#IuG^C4V<&IITD3p^p|0WtoF+dASHq7tmJECA`)rvpL$0~fgso6fg#Zb) zmf~mMv?QE|s<{h%chpsD!TGX;C~7#KQ-sr57vlBk^>8F#1uX$Qj+uM{x)C z?rS+s0HuC>LG;8KeS744^Fr?CYSTqpQnuztfqR-edzE9T0ry?AI<1VUoGdw7>7`w* zyCV;G`Yx9%T!0n_Ptp8aWWGx4F{Ly!8S|i0+O%8tROxx@Vg4=I`$bS>m9MVvbg;|g z&t-3F6c(x8b?-MXYX<|_ebYE>+E3<#K%Tm@6Y{4G{;z+WydGF4~@|HQ?z;4 zeECIrxYNSzb1Yb6l!49ALJ+I85T?to3gopM;(;W>gM9MTLI@UB&(j+d{g@P_DwxRU zFW$U;#3I%4rTK6T!QkE)AsqI3&!>Cfi%`83{n1s2f?r@lpkKakYh;=SM|W^d+T*kEU#E||-G^9T@F~7~#n%4< zM`2XR<8v{XdW`SZ@27*|hKr%@O<`DE6o$)as2vuyn!sd)=@ht}@+L_RD_c$@o~~aY zXDCGlqc3Lf@q~>2>WIMgnIXl9FE9i9(OHNR=Dlg7SL^lzF0E3OkUMOLgd5)rvXwT~G8u>iYy?9jO?%QC9?+wRY=*)xv&k)0K$U#>4o8UwI zJGd}i0I*-HQCMeme}hgHpLfa+)9g{CWPv#3ZHPPXshj-FR3zcdb=3)Cy#2CXTfQu0 zDiQ+qc#(YosaY|~i_t*;?xl#+j;nBV^7Ej2oTju`Ijs&cDzu*#d`&?(OBo7c3POyk zVBH9mLsN;KoG+iZZ+~`~5N(y%q%H}^p1fq@ab11wSeZ+#$d>n<(Jnrex}EDPE(b2L z2~DHWPpcL;?|V!h-+WqI6Q%W8Cj;=9uJ2f8$X~vIcWz=-f=@42ahJV*AD8|8#HHmt z#oIQ&T4liD%}Al;(n9u899dAbf}>RxqjSN_arfRu86ZRd3#tvjah;*GeYL1_WcWIA zL^_rhPm9E_{8df5_GiUqEfb;hH4ME9Q-kg}uP$ijM+8bBic$1WjBhiqd;<$@v3jdM zf14nV(3f`$!5?)`o33DvBFDj=oMZh~{;BKcffu+EAW5$~yKE6Xft@uVk0$xNNLZ=T zth^s%Cc!iBRSEU;8D`q@=A(xo;S!9l6cr{@}<;qgJO+<&@&&>yTtNeXyLMGiIM6YbXeTwLIo{7MS>rrTn)n_dIh+i3BBxa z#z97##{Bq<2W^p+pB*uAflya}3-5iAG-pCrRotF-!|RsU=>nINN+dmXR><%=oNh`k zg7dxI2)(iE;+p8L*VPo3TOTKa&IL**^S<{-CS7Z%={NzoD-T$6Elq(YI3{}PZxh+5 z#D{wEo*{U5dCv0df@7B_2C7-UPyIejrUokYQxO#emx`!&1 zgyd6>NNpVf*do!5qls{G7d6}^lCPkdy?$kVk_fvoLP+jF2@O|?(Rn}fIh`y%PN#}; zQ}&kKZDeoB5!*L{*w?9bl{k+f6HJ)(mM!~Y#y@||{s!%&+f?yJV`R!igMy9nxim5 z<*(uWjg!jW;^UFmR^Lpyn(*1Ftv-ak(LVQN=^K~T&Vep-L{!nUYeB2j+)jD01*^}j zza?!B`|4dCANL=jP}YRzDI>b*M)ClOQJ0YqIt1z20!czrofupAmQAX<&}@1Jn_{MD zE+SxieS^dD#~J+ICE~-Oi;{6Df@LE|dL!}(bIZrn7ip@l=d<;?@8M#mXpI|BIb0&m zW`)Xl!mT7EYtDgGJcz~^Ivbb4rQ=| z42LPMzHj>@Om(vJb(z->b;&bQN-6C%=X9--VEa%98Ur}E*&}RpJ?M9m8j}~T_@W5V z7d5$QG~~V8)1pUJd#R*C*^Au@nL;4v8Zotd7b{?Cc?t-*RtbNxQ?l0fOd2mdsiXs> zqeD>ft@-h4b$IC<(7kIcvDuoQ-7>BOC2JBmi#qf%m!L}cM}U-A&^wJzHjG5lOZ({b zTksM|ndQ1%`zB8mh_}4G7=C(R$hmJqL80*0Y9{j#F0o<|>TJ_nwKfWikBwiXT8^fU z5iLucaT6;+F-?jz_B!@+*{u%*ndnoUfWzb2?C7V7rK2(fmwu$5BW7QBHJVPSOxT4$ zcWV!M`mhd{i4Yw4*`X)d2bM*jx4W1-wacA{YS`f?=NZvqKB3= zwss+Aein*=PGS^NNY!l561jrgxef7sMuanH*mqT3)Z^QUy)O5GO(>N^adwFboHmD0 z3BDJkc-ECgm~);o<(I@~_LN_zCr6fMsmpl6P2a;L_CMc^Nm8wJE6+REOiHz5lo?kU z>ze7Sj)2MMDXYnzKMs-s+FQ|PMO3@aNyK8=`&TE|QxnKa&-GZvkD+xaafndznV@?5 z9B-MyjFgBp=QC0S}+>u}`T9{K%0fb}5)_YTBVB{g) z4z;=VfxzXSU>K{ghH{8^9O7-gbtwm-;EH?Zsys`!RcmY1QpiD42{YerEtCJlXvnZj zthm3;G8cYiWYmHmxQY9vc~JPtf@aB3m@Cqz6BsN_lHZZM2n;Cd7iJ5Z_Kp0gWo4B< z%k^VI>L*qa9EB!}{Z=biBQ1J`XjL`uY-uI|ddiD^_($`@9O3Yc2qU5uQ(H$)Q}DbE ze+fB5W<{U<$qE-p@f_tgm2-3Zy^jYZb8en1cP4NP;%n?Fq(Pu*V6uIxl?^10CXxk> zq_6uh-eH|sCbI1A-YFMjmg8jbYg~2t%biB2#V?>V0z90UH~|Fx%zRjPU;9*#h2Up7 z^VKp=j3h|&={y+tVK!|7PW)6&)>W`Cd0zyB=2Gh2d~(~G#d6x0^nYBBZ8s!aHJ0Rd zj*A6S>bKhRoAYa=mDxJn_O_e8*NlmYbEhDAnDrVvI<$0>sTKiydl~3z`g8B0jaQx}7ze?3k!LYxt2 zuvG`6lKWACI}AExyTjNN8jJoq8V}&NOe!gsxb)lK=F$Z_WP37%y_}XXe z^@l}0y>!J|Fe{cCogmKpw8Qs&%CNcA?K>r?>1Pf6I=+}0T2)i;+dkUp&=>PT-K>5c zn&%-I)bmzq9Tbw5C5-(8O!Eb;+3RpAXD>au5&Mk1g0bLFJOOybQ^marmYZ^tRiWL* znh^UnvlZ1ZXEe`5H9Tndf8q-q)w@QXq^*&64RDf;3cjZFfO^1TZZ$HIk%4Kx*;=4x z{^+rvPG!TEI(2d^zvT}%a@a|G*&6+Emb;h3@Ni|u7N6DWyH?eX)i6NDiL-&8fvNjU z{$UQG&Vv6YZqY~IkkF+-K5b$Od%9R z$tT3j!QZN9>MU4Iy5NZ$m@s^K?SM;)0h}KF5)Ne_CqHV)SHq5HK5X=xx4r%Dtp_;T zZ5Ah>No8TNUxZpSfUzZat>}f0A%ilKbxgPjkhT4o1i^Cc!qh$x&Q12c7{QLO4+eyBm=-u()0H9 zI6vlt8;s)PY+8`(g3ra*m?mN6HLfafCeVs$6i85dJE4MWYGGSP{%fr8wcOBvtL@~^ zNCJGD=r>&MLIJg&y7|v^BdEyI5HmGDk#xE6Lp*C38f!r+u2pBQe6Q3?L?XOgi4L?Z zlgZcX&pU6cy@z;)0d@ST>*HBvu%^=a>e#%!B5xw4DV1^PEnAaeng0f4lbV?Bdu5h; z)FSDT4`X++3qn^FUi&-lAoaQ0;eb`O3xtY@A}8-E_Bh%Q#bh`d{aTvp2`zF5@~@1a!>o1F#h_kmIsPyH7fi#)ayE*pcD^(T-WDO zvy7DA=Tx-bFl07|$t$dZMp%9Yrkb9!gx6ZOpJiB{!9gwp&X$?KH89#-^funH-DQ+zSZ^v*VyL$0MmxWK1vu1vx*tB`Ss}Pf` zG7(pGqA3uD$C#|pnR^s8w}BOM`AzX{rT^kx?Hk`j-0Tue;X&E-DDDw1v$Ie@vHjV+ zZe`Hie-&?5;SAx+aN&kk0xOW=VnRe%#v12JYCBnv<~K__Xh92FgA)c+*E}A9o@vo_ ziw1#q^#NL%IM^EEe&EnDG`FB0t(*lr*Uwbt?&oiL`pii7NZvn8^gfmqU>i~{SDVM! zVe22l?FJ+j-IHO^Q|#HCczhh{IX=|uMEfwW@tv^$oR|#kXN%DltN)p^bx$T)^x(?6 zD(^<1&(CnA_5z;!(Zb9o=XIEjZ|AA?`87N2IM}{biRbBZ)Bnoqc}VN) z_0<_aGgD!=3eb+O$WhC<@8tCnOCH~{xqv}Ce{J2M9kAmAqx*vWvT7aaY9np_sGO9H zQPa}kytDrCJlO7NyLs3a@1&Zwxrzm#o9tgav&HVJ%l>kS?`{G80K79_JT>NtrQ5w) zF2g%3pu;ehS`lqe6YZDLnceRoup8H-(8`IpY|22^a$x-k$nX5tgm1g!wiy!Ll{lA%vG zHZk7_8DmY*>yCBNhe9W%3AY8}<|^uev)(l&t3vu^jW@S6Jmos4bF><#n1xTvF;}I8 z_+G(Y6oQ`xPs>|JTBbIWiL*%oX$8@2Pxc3w42`Y}<0>t_}BhO;JGrQhL(P z$LcJF)v6wks7s$AXU)vPcP@fmyJ;(4Wka)K*3lW53BNuJw9T!YXGo3jwkc<}0^QKs zgxm!x2$UxHg@4wArU~Y3k%_ux1krV3_CNH$DS^7qxKa-~!lh=cv*Jitkb@KbnY_PC zDW8hmi!Y_`nCMf|ktLemOi}PnxOO?(4z#o_vilyc`WR`=YVn>4s#LUSP9&&cDahVG~T+L>Y7)97jb~b*lG5PUs z8G%SkA)8gAT^ri?WtYM!$z6o8wRVg(2Ly-pgW(9_SIE;2N()k!ZC!k;d={XYZF5v; zqD?wWp7v~u#y89dAbdD(hfxDIJM--N_eZN`!dSFW7X_BuPZP}!_?#TCHHK2Z&AUyY zEn4AnRX64VNMB*XRc&@s5YP58zqTTeSDaQwM0~;6SH0L}vnthHct7S7Bsvo-I*Yx1 zV@Q4Go0D)PSbu^&)A(?z-Bm_;;W$FV6JH14vIsId2cF{>h4xoF^P+top^Pq&dDH?6 z^8F-zBQEoakgRq|pn1(f@5AT!F0bpQXKm=M1)DAMqQt)~??S}v9}Tx*yRg%w%%P_H zuHw$DcPusyosozyT|LNHw^p?UjuECj%MDJQUY27H!mfKBmd#KC5Nei|1g0aS}{4z5w@#X~wzeBO_c_8>c-5HMt2uKiK&sXsdB)u+JzRhw;o$0t@Feui*Fhuuo*#9n92P zO&Qqf#YR`>I0~sihq+wi??P^~xVCAm$Mr+}AMCRu+`h=#!f0Ag=nG?U~oYQ#J>ZMUR+X*90D@qMb>GB%6=b{m0Km zJC=MAT41_2Sjjl~l{Bj!ZTwMoX1p3A8Zb`=fEd&F(vLE$sU;cnHH8TKtg7j=of_+L z3`S?IHeDjMIrF~bRlr#Csa|e!LWV#e#iVC|ih>vwrDqTIWanlYX?7cIvfG@QG171R zWc?Zxi-OFuoIja=@U5&9ou6|xsbkkg7n)gcsq}+ZVXj=36=bC)3WlpBqP6qc&3SJ zt{nvurg@!)uX7NOV<{KSZm!C^FrsNHgda9gr&>o|?twa?*{f|r3TMQ=5_z4Jj^9+K zy!IyEeCvufA0$VjN(C13GVE+ zj^OqiD!MPI%g3s-(-km?me9sCw_0|28w$f}TRaq%da)`fcYOH)Vf#{8`vJeS`4OW# zH0$%#p_tcA%@?1df>mFYpHMzFFR9vxaNg2U4fjQ*tK4Px2C>^Zmgmd20grY_fEA7? zQc-8ENZ=9$Y0`4Z1QW(ETy4syOQqci*|?ROy++|14mG2!faRc%T_c_NzW5o>4Zrl) zuvOko>jCdX$75f%PR8vS6Wjg&@3zdkjZS(rv>bv!&>#_Son@Yfuwai_E zpEU>3i_*2ewIQtXX6WhnCFBm(pB@{laMHc5Vqcr``YT{A&)2_GzJ4$v8=q)Z5s3=D ziLpOBY7)B%_x2%`e+=$GZL8s*&BxfEXh5@?U{F2Zo{&%XIJdr^RzdU?P%hb%kWyky zYQ`?`OX0mmR`Bsnp6v1^2Qv{b2d)^JtQ-Mx?yS3rgto2%aps^U5?5VM7h1s6N{?#a zwU1D_W98@iS5oDx1tDu0%*_HGh=*i8VOKTq;f}8sA#7Rquj-mUH?R^33P5Akx3EA} zQ{oSRtQdBpUcFP;ec-oK2>Gt}a{idbGmf(condlrRX9{nvOE+j@3#A;Ic+6Zi~E7P zlC=?cFR%H9hw;0M-j-#kuh11q*J6>O59J*e)i{YMp9zHISjYBLNs4=&m7t`?-I#TJ|w@J03B31Mt{*bih|F!l z?n7hnMOYa-i5v4Q8^md5gcMoYUELppGN%C4QtRu!h&cfgz(8NZw zs-2vtO@}`CCHKyYVT8Jp**hbY_hL{2yhTVv0HhvuLtm)LZx?-1;!%j^Tr;H=H%g!W zWI162sEs0!lKE)$y2}~JDaP$|XA9V6WS2+BG0p3jP#`u8G7<#;(vUOQg@m z2&Pg)WQsu8A_KieoGf^r98PThs2)~4#_5<8ECU|f3|AGZUxfh(j93q@WoWlZE^FJO zXq+%<=PMk}X}k}17~>?+Z!tqO(&M_`hq8KSHnV){k7n6~@tCw!lZ#}dlXv38LVJ0K zKd?Dp1-SQ^3`v(cwC|->F*+tHYcMQ+pAwFt)fry2&6zgg%rSEEbQ}@(w_RHYwQ!k_U8)C6vvOGSmO1O#!f3M(YFk$O$W?-Tr-l2jOhYf&{7GV1^LPjE z#S6iZtq@R!$-_xA5_kCX;DK$f*E-eBX9H%(aFQl7bPs_X)6(m)O6>D4B z1n)FGIU$yHo{(fLl>7M~mlMDlKv=`r!vGdOARhVIJmrOp0Ep)qI`OP9ynz9Akucn+ zvPI5){f9h3!@`fU08t1 zL(g+HOF?)eu&-2C@(X0z2c`lFo-7xIyltTn7{{pVr=iOd1Kd7i$yc5gdTe3%nl|%G z$D&{9Z9K}pfboHl={9hz03I4`MBWZ~cXlKZcDTPiKRTt*bQcved~H)V{NuSJ09RMn zxP3)u;(hA99gGS&v>$#zz3LQKMpw8&ll6sNsbPJ;0nR5$jrGO_LA1o?8#GiSW#OQXhvM^Ra(JOEF-JwhelM+GJAv06zWXM3n z+Cf)*;Bo3xA*D`#kmxS`sUiz;G4W_`Pp4h0`c^vu^&*Jhb;+`|KsbcuW%fQ(qtdTU z(M0FlP;cpQAB~wum1)X{t|=ImV6Bf?p7J!AfY)F3w_RvG!PdK5jICf zQZM-uGTD`R(Ib{#qp*1_4CGP7$_9DW$EFxxE}k?&Yvc}daQre-E1=wEndX+G8-uf~ z#J?`}coQ73YlD;K&#(VnBsfq!8_o|P8-9RQT&=f$KJ$f)i|UV0SjSWJy;YtXO`haTma}K( z=n|wO&+lyjqX{Y5=L_N9!g}DVY;u)*mRD*HxCKWH76+HR1 zrSAQwb+Cj%XJPC?WAxxn=(t6cPkm8e@d|~sk5&8&+^@_|Tbhm7J84rvNiXvo!g6@m z%Pop+=t@8llbMGR?HYyTc4+Xwkh`?kHqedU5j55@iH1hr{Uoroy6^N<`RODNsAtzO zI%GZO@REjp`DV-=EYFyxe(1k3Y%Qma;vNT@}Ks^!unQ`S$E8$za{P0H>?%7U^gn2$V+G5 zt1Cw(MxM)m?x%iO2i?}pFy|WradS@lOwi@&CK`vZvc*5T3f7fxc)7(n2-5q5f+@R~)M)9F>715K>h{|3py;UjeRkDTS77#%SDa3n zygv*y!puSTbv2OF7{~Kc*YK)H&W8zEsS>eTgrPy-D&-9!B_#w17c> zoa*>K52ujBf?$GauidQHEIK*R_NnC^s#>#1Efrx7DvpPy^l=g+=}uP7#$oI6;m^^@zjc=>3@RDm)N$g)ZC#Ls z&--bOi<@OSV#;lDn>uhG^aF+qu^E{*FxT(xK& znXC(nZX#)~@_AnCMfU4Y_?6mv>mEso;tfvU;^_j%SHOOSmyQGg0 zmVC)SpV3o1VyfajAc(ed zh)nO=eStxk4zc5_Y#;V{uLo8kT`fLMc1ID1ijOyIZLM_%n>(dQn_Fw9MOQAABTiPh zrMg8X?6w)@7-CXWWN2i$t}EP%U5qm#-TEPi$_FkQO=mIbnlhTfqy(Voytv4m6T*$M zAL9hJ!R7O25r_qRE*8yP!uIzc$kWWCQ~jm);ZBysiN!*sZg?$k?HU|}Cu(2(tj9cW zHh#2Z5B6}oIVoJ8D~x}3F}NXSfWPncH6v@$MsQIuyoCIU zv*SW9i}LC90E;Y<=-nOdA+^O|4WvGqMcqT%Sv3Zt<@YE;ilm9>+WVVG_2IF@a}ym~ zx>}*dbD6AO(w-%f$U)@q(0@!2wU@GSphw^_RFTv@?gVGH@<=kmeMKt4M0oT5E_ZI^ zNbdACp7%)qYG*E?@aiC~T^w$+X<3Bo3>t#<%r{S2%7J0oy4v3NL2&jO5*G%>ZM`zH zU#_|PY;(JMLEUmW9Gq_P0z$JdzwYBjuC+Lsy<$C94Jg%qm7HLx{c>&3kA?6Zq{M2& zPY6!&JV97v;I73fOuoI!*C18%o?fde(?`uydLB>H%DKO+HK_-a4}R%P6?$dCGE-$> z?tWMY(C=LH>5{~5y?Z#%MM+P8fGhphd8g+?&j1GpA7m*h`R0B!b_uRPR1bGZ67u%Bkv+Ax#GaQbwqw5Simi9BA$E`TzZsL3zcW;|z+LaK7hPKPTxdbOJLh^o6m2gy`Ik0|TNL!tv_~%m}wYH;;*N;32-OmWt|!k+5Ej zMyg}lX|tqdej>7q)4>mMN<;XvAA%)F2OxvtA@V}fWa?^BC-=lj1jD-NlMV^Ihy8{x zhb>tK^a_AM&j>4?;Ubu-sYnnL8dqE8Cd-ZaEOd!(Ur9UkZ!r7EnZOf#jU^MkqP#np z8dO%Qf3wOzdTl&U*(GL2WbxDH_I9S0lu>MjxPDycL7qJMnyzJP{EMvEGQiG$aePB~ z#R27|+c>?XLoS@6uLyQ?))=3e|ATI}`4Ft6A!Y)FN>QI4>K7@Nq{Sk4p7N*fsd`Be-bugpiVdG)rV3l^Wbm5{AL8B6K zFa-;!O3C~U@$@82W8vgvC&13`>gvko%FXulIy^fk5C~-F;9}?EVttZeb#%9N0=co; zI@11z_zOeI%+bWb($2{eYD@JS6J!i^b`qwcd5Wj{NB$soii-b)w{`rRg(p7P-9UEi zoNOHI5D5FfYB)McyF7vXouU6#!%^+&P#$(wGe@YigNd26i}ED*kS9^cr&KxrElJroitqlZ@tXp3ONiYcttYboP14B{{6A#OO7U{h1@zd$HESU!0r$mU;j^&86c2?}V;#RUTMakH8N zc+FUO0AMgHKLB9N%4uv20Dw(7xHyaff1pfF1Z1EN5YSU`T0%hPX6$yh=6@o76D}bB z?u{@F7u#PM{}b}g2IK^OQV^z5u(Wl4Iwa`Hjs8TaSwhU-JAr<)$q4{(@$ho;@&b7{ z`8WW7CG*=p5U}O0wii+xw+X{e8{z}9VZ`2 zZyNtUe*P|t|Bop=LH{?A|A^oJ()C}u{v!tdBjNvg*MI5yj~Mumg#YVZ|Ig?``=0@i zne9_A$n|MB!(@=5{WKIpHhwEB1^4*-o83|n{}h61C#UTQ2Zz=9`v*_(O5X1&5XI?@ zqBP1cROIJKg1;7N-@?IRIKGh*S96<#>CacvF+DFnIC}JLxCGHyVZM#0>)0LW2o2+g zxJ%=z2KDZp3ozf?S`Es^^qO4d84@ZSJcT?aPqpcon{Tcl9+I@UyyW|w0Bh4zBx2jl z*!8I;f0jACa=q@Mcd?0 zDx`cD@915JcQ7oQ4$nDjki^`I@nh^?*erIRJheP%E5&NsHk^pEA&AF`&oXztkJOtM z(OP5yblH6JvFg){rHULIQ!?5qS?|rrqM+N$ zOqR<#Tp}J{-1^~sTGXWPJczy8zNr{nZwHLYuf8JATPFzKRo=is^-4w_8>{hFZt>Y1 zm@#kD3J#o|G}SjBMR^w6>6;4Vs@#YgbruR4ILX|YGeB`eFSZju%EOblWn}UqwZ)ja zZz^ZU8)b*9F~dDhpV?p{-SX_yR|j%Z8Lc5#Qh3R;+*7`9hlevK;Wr7On^QZAXF4N} z+)QP7t+RLbB2MlN%a~zoZo6*{Rv94~EsLf16rmaSY^t`ts2Y)ST7VSX%!x*{r*ok> zLw1OI2-6KiHt|Fyiv@I>z%MfO8|(9C&Q@$52nt*ZoEkjZOLrBQ3=2%Soq^POj8QlD zG*cSnD>wt#OX5pyXB{JKF6(3Fd`3A5haD*@M>Jw#jzOvLq+jHWG8y@lew%}cuj!== zqQt?9boi~9MK={{avIdy2@lWxD^`P0nT$5|33G$rzMTGGg;GFXt!ahXrT|M*Fw=?u zELMXdcXDxV?~=VZG5(_`I7zL{Fjby$N`26!L%OE8c~NHZF#(t8svrub=**Xzb73rN6@4k(|_S z)_%G<2R9=Os0R&JVQR6jS00PB1*>>|8AO^+^DZ1&1Twue$;Jk0hiidi;vM- z!n)TdNoo*tSfw-7VTVH~+B*nFY&LcQv9rloae;n?T{8I56CGIW^osaq;0SFkVNiW7 zc%9AJ|Ha!T#+^49=`OuPgT~Qq>v`^sv?gd1|5v&{(`^$9GA~{!t(FYm5K6rsd1$zc_8P zCEpFgM@E-%R`Q6tPq{QxDlhkP6?vYJkNX9em@|W`1o@Zb%j^AnXb?%INSBx{)M<>C zKKz<9T^)KR0RRDsFXa=z=%dpQwLBGuXzV+i02;fedf^k?o|di-E0ulK_kwz_yEN-U zaoSsue+(K@Tg@XdokR8HJp zM8}o}IJeTDS$pc-z~u(>sFIePpNu7Tq^Q}=FaUFB2GD@X3%YywJ>tp7w-36y`n{0QG~_h$ zBr2IvpG6NeMpEpL^T*gZNmSJddLXqkybt|#%wEZ#*DOPW)L*fGAeDNsLtp|?{(;gQ zc_HUdLX)Wr?GvuNpZQ?`PYg`KZ6oKTTo+7U#=Ko4bK{ex10w>Lk zY0DpoJ(+Z8Ro>ZgJh~+8L(Xt+ew;2*iPm3u_VyW;$T8wftX>In7P)(7NJ|KPWVf}* z`skosDWy=ELn_&LqicuA5P_IDL*(f$DVOn*yq2IjS{vohgU^~22Nj3;j8&RX zx12U%2mvTwV~YH!ENJb~OxN);m`wI}Ue%oEnD0&As>xk^RuS}LH7GRC=JZkLjrS>9 z2a(`*G%ew89k6^PRvV}5uCS|YS>ua(hUOEA$_+xOwth+0G+l=#s@?}Cx}w-(d0*uIIS_TQ;UH&2 zKC6~7^iaG54}Z@rw4VTj;HZd^>ypYgLXi?X?Q6uMoRo1y;H63Ybnu1;pZAhmf6SBC z;SSzT+!t^EV}t_D4IVC^tR6<)d>D4awrO+!v#n=WA^uT%huMAQwF+vl-(zyS0wlA; z`jvzd{qiZ2i!v`8>1~ic7o*~0kIda@W=NJ!-y8d?h~GF{54vBZ9A#Q(A?2Zf8kC{- z9*t-ZpWvdB%umBh*-XBWvSDnPySgHf*LUSYpj;BFV!gJ>`+cVxI?qbg-eBxFVit|-<~;ey|c*$ixVyLkdBdiAuS zPJxr+BvzsN)Fh$xGb8jOO?%73MAEG(NzO|v9jS}PV`#Mv*=2*EE-A9kMXqTqus{`u zt4gn?E}J_9|3C*CXoh2MD}hTw!aU@cEnHDo4Yr5T<*{vekn>T*>Ic`A92fXD|xuI+uRP8(z%^NG!>e%ABjszcR>_o|*9O3ymfXx=z zkEKRl%joG}`Zsd0mA2}@3C+CPi%a5GJ(jySM8zTq%iQ~d_uP+}^MI$BKLYX&IZe70 z4_6x3kFLI_v}+^WgEKS$i(_f9SOTupj@A7O|E`UDVQ2oDT>{`2>{Un}gE}+9A-?qdG$Eguu|Ke1Y8zk?6qT#3HElTL#io;Fi_gB%%W%&_doG2xA^eps{*6P&T} z#DA5wEv0xd(CToV@$kiVMSX>U?LzusS9yKDRWTM^?>gm#Na+z-?lHJ6 zAuxLEU&j`PTM{!OmcXaz@TVJaL;DP?RhTEjI`eZt2Vq_1LJ_(x_k)o~nGT_;MTpn< zonG&Ez9io>Cm`0{2XcDT^Fq!II$DR6n_Eb{n^%D*Dze!5ftVFa{J;URa1MBA0`>j(tDr&CrdaP@MD{{ye zI$e>=j)+FbTob!O~n*E!cnYv?>6 zaB^>EX>4U6ba`-PAZ2)IW&i+q+O3*tk|Vd0g#Y6da|G@v64l$yCcuJ9tgkoOi)8y<5h0 zcieW1_vt2UjDGvVyZ6(Fd##4zo1ei37ouM7_!3%Jp#~qO-ywu(g8!_=-Fe%cZ@S9N z%WnEW4;_4 z@L;-Tu57T|@eDDN`-!b^10Zl;;{EZlD@$JUH%cONCl=!ZF0k2!2klNHL|9 zQ%NZiciMTEU3c64 z5Nju#c+$zIoO;^nAFsW<`j^*#;5GO1n!ldXedXgdu9l*K?hsBmljJiz=A*;oMIIoa zy?kb?i_yz-@|kU(tVo_kCi!ML+l|Y(FmC75aUb9PcMI=#CHL1uG9-4B!X9bvapo>Qw^UmWW1KpM1rm2W zBb9L?J7WWrNkTtqr_|G2-nfu!&&}<2>WU8Itb8C9mf_>7qcUo4Vdmmi?~RDSIX&%i z*vshUEVAt!Yx*e3+kv6y4zYL4Q)e0n=cO7>TRsO{+Fq%xBPeMWj{uNEky`UQ+eOAV zua6qP%Oc$R{&cL7!r3{UQV+&U<+OCxoXhRQ$g!NznSFb^{4{RXU&mhK^o%8s(t@{U zxiWn_1J9m02V7HDVr1^{;S9WQV>WST_+b+?#ihHVXC(bbl>AJ=KWj5}iQf}5@4Cx2 zr?kMT`{J{+cg}Ugtb3Q%n<8WuxNm=)I%`BQ{-TQf~cqaHG-5gOM-+4lR&oAoPgdT296j zLk|S4xbDE5$?N)V)8fN26_^!cnaA+{iI?ue44)yn2xs58Ck@XeNqZ%k8&}eg(Vr!o zW;dUdyllYu5Dg*snEa&L(-Sz6*%CQ$p11)`61qS}Uu%$FYjx9Wl}!$Sc5ro>0rY;C}w-tpnfLfZkn6T}I*ky3*x9OzTAJnQ=!IuY~LtT0}A`2nttnu-%96T69D5D|Xu&bAlIy*sSwc4`h04{;oO!p@c8-a9}u zE2IepE1yCNNNYD+CW!s6kC|8l= z7^EFfqzY;w2Bw63p-_C4wx3uKNSdcx@Eba94iq0DE3*o`hTuM=)hqF`6gUG-pqMe& z>FFAoC%vzI9DD$>?aY(o^(6UqpM|9f2tAk!iN%vfkH(k_iR+-Q&My|0W8rvxD#6|ymKw?N-8Mw5GP9cJjBo4k95X5I6DlR_jaf^?}NZ;E4myCA8 z5)xkdEca5t=N4S_9(6C27|tPSHUGh}0niq?n$k5+yyNUrQ4qM`W&ikPjrH5`BO-PH ztJrNS_|5$Nt&v1Z4PS?!ZO9dsh|UC2w|?IhESMJ<30iPiNFk!-@X^H3XJEFHI@%72 zv6H?21lpej-(B)+iMQB!O|v(H3r@ak2&e_U9|Vpd%)LK)KDgewA0*@j(xy%j4q2Gw zkY)b!VOsaqj&?(I&+&4CQe@c|hTJxULKM2$sxlY~*&Z>8w-wtFKosXHMLGA7$ttOpUAo7yAH z42TS<%Z&n8qjL<92jn9o;|ADB+*wwsy&|jtmWQlE=r}P8w^6_(4$%z`O-nh7c4DZ2 z*IGn(=8jP>gj$qo1@e8pj?P@BKo%^-8ahZ%nL$b-(MfEqj(VRZQ`EqTlCTgMQ^BD} z`5A4Efr*=>GxUd>8}aXAQaulPhe^^Qc%>sF5}{{5y_uIenM%$M*_8v)vdB zep1pl6brQqW+o%B$&@StJsZD-fbJQvQOx9i4fe!@>IDd@HiyswcZs7I3vvTb&RP@_ zRIb!PlLTAE>K->?c@zWD4h$niEuxBAYI(aUeKM*mY$FZVuU)|B6=Fj^_T&*%xl1oe?FV`FZ3o*6)0^Z3kHQ|iQS&GH(tsZ9}aIZB^dx>G$mI?@!5o!+&O#-I#^{}Pzy2yBN> zsRmDxyxq=FQx+^}BUBBwoMMl|&f^Lw2p^)PK1Ga;)udd|lH^!a#3PQ|T8(J-(Hg}| z>{NJ>|JddO9D5@Ba67nGK{ORJ)R1c(N}r19urKbT=B9$ciN$q8Sd;uDS{ri-Wc^gr z3;FLYLIxi=2rTuc=SZ;NKN0+SZzPSm>8;GeJ)P~8$~=Wl5Xme#R3w*c$={0hm2K${ z*#`KNZ3)>#q3s)K%c>h7v$qOsNpgaaf&q2A9TH`RR*1Ld34;l>QXE~}Gk*tsp=!x> zPckp`Hn7VUYRyWtQ+_X12FoYuduj%%BWmDQ2~>1B(r|#k`(SK~H3Auff>_A4)MjoT zaf~dDuQgh!xji8QCSq%jYQRw*s2Z8K+)(`z2Z}wXzNDA`a0?qxi>dw_JiD|}wa>bR+M)bFPM|cKUkJU#GN2P8K|LLKh$@T}84-bgdn@nJ|8ekC z$IjF>_>?tA@_U(er6Tt%+;_T^lcP){k`9=P`1KN1xoqAMrv=%fT1Dz@5HG&8yc(%v zP!kDzPimT!k;hd8kn%N5_%RIQ#P){~aIdj2kciWJNLyZ}3 z?yxo%3BIoCvfm&JxhSlS%c`Z6^4i?hp;EHTEGht@%ZPwmRk6(u;Aj*bb;rPN5}8&7 z6Q2O}ic)S`r?O6J97!Y!ZCE5*3T9}&BlSQRbO}PaClqJPwGL1CVZd9JuL&n2HUPGH zi9YvMR1o@X&P8WR8FJBve2X36YzoHI&GOQUz`0bJKdef!ANk=n(X)oa#H*`k;6>mP z{dj~vSwxc|Jwae%Vpw6iPI(6X7uD{bFe~bzpgoov8U#nC;4;+H#5Iz~Q?89Gok8pj zP&iQPHk$zJ%@RRb_mZGRDsz;A-$$NgR&fT%r_@PBjkVpWNeNR*PRdXWgp|PV6$0jS z7svrIFaClvGa*}F+6!toU$Fa)y2?&+4N!A~V&lT+@eX{%(nufSTOtr%=xeR{BLH9g z)w#z$0$cS1K#1EzA)k?(CrbWl`zTwrjl4M&eO>(vtWHh;l0416%hGnDe+x7ZBB6WK z-pOcKst8H8ijLgNNO$frxAbOIe<@SlJA?(IGfKE$0LMKl%vMl`D9xh*;7YLns;4Cz z;ort){gs5R*$ItZV{JYm#VsF%+q@+Z0y9)O7=p2-NQb`Usrf~p${Wa-rp7tJC|&ZS zivRMCE>hq6@sqI*@|zCk!53I}OxvNDpkbzZ?T9{A2U0JN`J8}e0+`xZxb4!m><)&s zK)h(lLx)&sPBM6J(gP3T8)}Pt?Yd{%FLsPS?1&}I7dzS)I}#zv0#)u#RRso|4J&H3Vx{{vw#v`Cbs0;P0PjFNezreu^`=a(Y#ar|Hg{NrqB2jfK8Qg>a zeZXhiNu#(malTd^aX1>!YJsm76vKCAj9L0rV4ljTwUkqR(|s?u3JrJ4yrjr&R}TFC&3AMV8+_dkAr!6SQY^PY z-C*@=)N9V{5JNTN3$q>;W#n*W8T8ulD&Vrw=z^N4Hny7mN1Ya`Q}`*OaqprcaMj8P z2=<-f4s>r&FBc;_AcDn(&*B`_egmoEYoMa0(Ec_WrkWJTUq+B1g0Be0F}-+NZS;2C%mEo#E2+j7?_w6@Jd<8Q_!`wJwGk4xstd^g}ql=^&M zk;R;Qdi}R(@po#7<*+3CV76ClG%+*Or6b@V^8|Fymkr3fcq;N(h#oa`E>2KE#(C;1 z)@tCS&tmQGLt2Hsx)ZaFp<+P8k{FCTwBU(jUtTxKQL3T_1(P~bYTR+blW?BMiVJ&}-L&kxXq{CIqRhMl0#U=ZFjx_cUSGMtT*;5OXOQO}KIXsdS@NJK z@(kI+!dfs?0pqd8P^ZCC23$V&E0I+N)=}S$2U42wqWV*L-E$i>G?X3cb2Z5g=`wrXzhcLjL z6@j}?@*@)nY7^Ci%+yH@dhY1p)ai>Q)F|L=Ts2sVQhcq{# zE5n6a4J=kfiCIPFh%4PMX{Zu`A|6?UT+U1#MMczTqIAl^q9_V!gr)->N(i7VRrN>0 zfQd=YZdK_u>IQuc1-Xye8* z4hD_quVfhq*uY$E|0E!mmarK6}x$Od&o7rF?Y zN!^TbCt&Lck)o4W9YX5pH|XS-{LeK?lqqhYRsJR)4cb%z@qAS%RF6y5QA;{xMWNkz z@N6&Nq9{C(H09P=bbch6p^kz91rjF8Q`$!rvKm@C`<33T@pcRr0+s8keo)5Zk~9QJ z^K>?roX1IK#;gXubRtg32m;a?M^wZSu{h`33j(pa%faiAzpH_u5s1S6qHcqQ!35VB@R*>|0#t*o}i6i&^V z>rRExD^@4q!>jAhQcNnX#hs~Tx0(ftT>e9Z)ePi9JIZLwuK*U_>|g;mQ}A6A9M$zy zK)vFAeZ2(%iXo*B_iZjp|Ke4NZLOG%cOqJaHkb3Ja2BFb5<;qwMzC35(t+W%8A{j( zwZR7+G@xB|8Y3uTX7_YS(V-c~Hn`@Vw=aFyM!uyKRl%(&Yo*rx1n1nxz`y* z7L`iT*A%E3Z_6xrDU=9^fw6$MIcQ`sFBNJm_D=FN74G-&N3EDDN8Uy%r4zBC&R|rg z2&%T zzFZ5p#_ z*ys}gGmZ~%ehn`l#hEp9?%C;Y?&GsfFo8IJj|OwIY5=IbiU1VO&YhGq8aO|_#66T3 z6@bD=#KwLTGekBRY2F@S{yjN*$U2s@6Lnw=YjOihemJurX?Us!Z5eLN*?^NdM9 zx4(b)!H2ikip>Vy9Z!mG){}$rq(I|qGMQvqCI^$rr1|rCG4A)ea*!8eEcEra?&1E) zb6-F6f~C~}A4V?{*YRZY&?kQ=_{$%@bfG`VcN{t|@_w(M7kSI66ytHP+bzaz?{I6B z?_2F}jdCpdWjm|)KE1d7&v*ZHx{%{$fEf)6t1%zI}MS`TgzBOEdRO$((HqE{BT;M-Cs#rcK?%yHee%uSPbTRqn;lZ)(`%Y0n-*!Qy!ytQd+d?R^oJOoD;rZ? zOgZ!Ajg@}CJxwCM{PF$w0X%!|oIB9R{`sv@e)rDrN}~Pp z7mG#5fuc>N=lpYJM32f5IY`>Y>+jr1{_6T$Z@+Tk#psOYh(iQ`99+J7Z7UZB3dUg8l6*T zpW7`{_FpUo1pv^w^6^x!Je=R1rZkw64%@U3nq^8`qx{bwZU`7(apZ%Wzl}^r`yj`W zyLaw5+Yuwu_L6i!AKbjDHD%$iBG0cMx)^B6m5r&yDRY_6<6g~=&Brfw5s+y_=Bm6c zRXs(OR2awtM0Q=HeSGUFL6)o$X<1}i!g>maS+Yi?W$?Cy^%PY$sjB&pkR>l!J%v>H zIty09p745#&v-K31M$SxQ#4uFnNQ_<<}9f!&$^GOEjjNqztApUoWfis%Dfx%S*AEe zuWuyQk~yQI(|dB_l)SU@Fx#g?m1-?naQT-xRAjwLCwmg&lrgdqR{qjEsza4>Eg8yi z?q^5;-F=F?lxO|rj#F%B^*`DEfAkK1vhp2Wd}Bt>>8qH}L0UU<;2Zl#TdNoy9DTL3 zd`^m9)+;7O%c->N0+iQiyI5W6jkb%0)8wzcZ++b%bPpVTu<~gESt%t#kHS`ruYkX! zNBk56pd-4E90bcSu4U9y%hswiLGQHWQ@R23Yu~4Af4y{bW1v_Mr-LW zo>e_+?niekr9Pq!TQOKiw_N&d>2fW5QyCWJKaa6;UjsF)Ni&n`vRA-8x8ifte zLY8RWg1az92m)IIAxt6FXze~zUf+O{9oM>DM(=R}#WzaWmUW4XUhC#?igz zatY={8+ycTg4&6o0Wv{Dbp^QJ*AdK8+R!bywk<-lyF|xDw3-L37l3qttF|iakP67| z79^M=gA>wi=;_j*QxLgF3nOY`Jv$;bv1#+6hE8}wmd%oSnu4>Q}Npw%IlbD<3%j&Do%;a$3JaQa0Bv3 zrrG)X&kP6vhKzwXWp`!}+L3;gl=3|kiLNc(ko#wC$O{dPKX!5hzriCRTNM0Xb}|J{ ztERZ5=52RE#DvdzKp1j~$k4x|-VW0u>9RJUj5z6GeNLerX{n;xc9DQ4p3Aj9TCO(! zlun^FO#~4!F$Y0_2vu=GxenJTQgY9g1(}L3L#?%0D{+Z!IO;o`4b8yBMkLN?XfZ^MDJs}4CvJnF76|uuA?%|~$0<6ZtB23{_ z?!&cx$(S8CR%^*?sF=d6cAg^<@mLD<-X~?S@*{g6$ru7wIs0K$J*d}Hbds&!T@vWF zBU{N2eF#U!>!?Wx3aPB8?vg3x_>K>dom#6VS_-Y&c3+QE5bj_%sVrHCJYfk-tu9fJ zK%`e%Y*j8WD8K66z^E=USW+)_2n1 zb-=2C5ak(@)#U*@b%?o}{8~kVuKRJdo ag#Q8hHNm}t`+-sb0000 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 LNkvXXu0mjfMjhGA literal 0 HcmV?d00001 diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..efa3fcc --- /dev/null +++ b/src/main.c @@ -0,0 +1,136 @@ +#include +#include + +extern font_t font88; + +#define MAX_X_GLYPHS 49 +#define MAX_Y_GLYPHS 28 +#define MAX_LINE_HISTORY 100 + + +typedef struct +{ + char myChar; + char myColor; +} ConsoleGlyph; + +ConsoleGlyph myConsoleScreen[MAX_X_GLYPHS * (MAX_Y_GLYPHS + MAX_LINE_HISTORY)] = {0}; + +ConsoleGlyph *visibleScreen; +uint8_t CursorX = 0; +uint8_t CursorY = 0; +uint8_t ScrollLineValue = 0; + +void InitConsole( void ) +{ + visibleScreen = myConsoleScreen; +} + +void ScrollToLine( uint8_t targetLine ) +{ + if (targetLine < MAX_LINE_HISTORY ) + { + ScrollLineValue = targetLine; + visibleScreen = &myConsoleScreen[MAX_X_GLYPHS*targetLine]; + } +} + +void PrintChar( uint8_t X, uint8_t Y, char c, char color ) +{ + if(X=MAX_X_GLYPHS) + { + Xi -= MAX_X_GLYPHS; + Yi++; + } + + visibleScreen[MAX_X_GLYPHS*Yi+Xi].myChar = temp; + visibleScreen[MAX_X_GLYPHS*Yi+Xi].myColor = color; + + i++; + if(str[i]==0) break; + + Xi++; + + } + } +} + + +void RenderConsole( void ) +{ + uint16_t colorGint; + + ConsoleGlyph *tempGlyph; //= &visibleScreen[MAX_X_GLYPHS*y+x]; + + for(int y=0; ymyChar != 0x00) + { + if(tempGlyph->myColor == 0) colorGint = C_BLACK; + else if(tempGlyph->myColor == 1) colorGint = C_BLUE; + else if(tempGlyph->myColor == 2) colorGint = C_RED; + else if(tempGlyph->myColor == 3) colorGint = C_GREEN; + else if(tempGlyph->myColor == 4) colorGint = C_WHITE; + else colorGint = C_BLACK; + + dprint(2+x*8, y*8, colorGint, "%lc", tempGlyph->myChar ); + } + } + + dupdate(); +} + + +int main(void) +{ + dfont(&font88); + dclear(C_WHITE); + +/* + unsigned char temp = 0; + + for(int y=0; y