From 8e114869b0e502033e295931622227c4af4e6984 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Sojka?= Date: Mon, 19 Aug 2024 14:31:43 +0200 Subject: [PATCH] Almost finish treasury FE --- frontend/bun.lockb | Bin 0 -> 206995 bytes frontend/src/App.tsx | 5 +- frontend/src/components/NewProposalForm.tsx | 51 +- frontend/src/components/TreasuryStatus.tsx | 56 + .../components/proposal-form/Distribution.tsx | 73 ++ .../src/components/proposal-form/Treasury.tsx | 74 ++ frontend/src/constants/config.json | 1 + frontend/src/helpers/tokens.tsx | 47 - frontend/src/lib/config.ts | 3 +- frontend/src/lib/erc20.ts | 1059 +++++++++++++++++ 10 files changed, 1294 insertions(+), 75 deletions(-) create mode 100755 frontend/bun.lockb create mode 100644 frontend/src/components/TreasuryStatus.tsx create mode 100644 frontend/src/components/proposal-form/Distribution.tsx create mode 100644 frontend/src/components/proposal-form/Treasury.tsx delete mode 100644 frontend/src/helpers/tokens.tsx create mode 100644 frontend/src/lib/erc20.ts diff --git a/frontend/bun.lockb b/frontend/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..798a982c28d4df8501fed046202ebd7d9a844224 GIT binary patch literal 206995 zcmeEu2~>?;)c-|EXpkl)RHUR*C_`z~B+aQ%G|%&(QVAhaWQvf43=M?JtYj)t#s*X7 zMnf4g<-d3LIj`sSr|#9a*0;X3-m~7P-#zE--`@M|v(Gut^W6KAmQ)H03089U@>g>6 z4XP{A9pWbHwE{AU_Yl&h42Xj`!W~|`So#OH7E7MZw=*pp z1UrSeF~UGV5bA+m!A_xWAq>ALCe<1Ypj@b@o4=QPBtxC58vyb^yDRX90DAZaI3t6H zlPT}#CqB_6l)}a09df<2XJUP=F__#&RgE--M^Z?OsClDG2s1GO(SO$pg%78+E z!EPY|zTs{R2?*{;s1F6i@o)m7pPo)30gL<@3|j%FoytB;{&%Qjze`AnTZjvTQ3CB) z4-5zig*L_jm}K;8EwrOPe<%L{FINU559&jq9_i%gi}Sb;>gexYO0Eo?Lf#grqdwwa zkT6qEASMSC2dHBnEd@D@QwSyRMd|qfgG9Z~!A>raW(;3ZCjTfP>g9l-U_Y_%?G@^U zdc8svx>Bqi`q6J2O1}vp%KNzmd$_4U{HgX5G3I=^JB5S>0YBI+ECgL#2EoR0>JDe- z(K8uK3=X)!R{e$;cot+A;E4=uC89eftMth{;nFq%zt9n z$v+a-uZyQsut%3370`ou6B6na?Bnki>NAQtzlG2XQyC`#b?kSNWcp(Zh~sObaDo(r z0aF?m8azoA74m{S`uh@+0_UTaLI$*B{35|Hgq1ORG*e%s@)UolGKNAO?QsAiACkk# z*U8n*#n&qg15DNl$^T#1k$Z@OTSREE)8jErz1|@K{2%MVdLDcFNCR{k{(ExSr3+GLh&XD94=F9e_B_WI!BWV3>cTOMt6e zU`SV*GID{3~FPJF>Kd%V4;6Nvz033f6TsZD4fZTvEk1nC`S#3Pi zZY3bL>r&_u5a8?<%wWKp35^VNWB9}9L7c&-#9%rB6oW^N>2Et^75aZ45dANq>IVSP?<7FnpNO89 zlbG^WQ<>v%itq}+eESG>UXW`AM1NAIG41(z`MD{$Iy06*9pi5^ohj!O66x>a;}!Z4 zlW@0Di~ihnfhGa z+yWK6LKsh=J`DJR8ch4YoZq@h!a%$wfRh-|%g-y6QE9;JHvl~tuZ4z8zhRLDJGn!iQ0K3Z5wkzQ-=%Aw7X>>7 z21YU%zmD6>-_tGFD>TH*-`&^C!!vXs@X$USRpA)N!^X_IyRTDdD6HoxU>E1lEhH?| z3;cHr2?}!yj%3u&V)}vW-3=^`0XdwnxhBl4h?gr zerdq2dTPqF<12!G38=>cqJPUkH^wE zBs7;P=L<5z&<@>Q^BV3I+Lc$q0lvPFwvY$TVP3wj3}r{A-4TE|{{sQhPKN`t{W&1k zZvtZfd8$2|YTpcqc9v3gZ$R8ft*LfxK;$V<{o;T)PA;ncZa$O$2oUAU0P#Mm01)l& zqWTj_eI7G!V*ufZjq?OV`7Ud+7wlRmPZ{r{>kikC`6{{>*XQ0mN~s z17cnn0phs40+{(S8tRyTKY)h_TXR?3UjSl0Is)SScmxD?CE87><2>L!EBfyPYXIv` zP{(;6K(*s~M?2O~N4pAu7{_6N*q#>7BcV)vLJ`b$o=C|( zfI7~vUnJAty&#W%J3yTu&;$_u(xv)uf;`&8-4Mr-3-Y{x&QQm^oJHYOs(&OP?kik? zIQ}+}M|;lz(NDO4?K;A4K^^UQg*XKVJ4G@sK^@0=8W7LtWI$oSSU~hE7!dQy4iNR2 z0;1d$K$MdNM1KUR{@F{Jelnnrem6rrgaGeRco`7&ZUz(wi~&S{$-YGH>#bp4yY3h8 zJ_!y|1E`~)(r{FbQ_oUB98WV< zUzx!4vjGtOctjz@F~kjg2J~}+oC<<=9N%0(jDry%#+RHUx4;gL?*t&u&u&1JTTQi3 zfczf}^}B1C@hu0$dCv#L_Ua_2U*&*2P%i`&1RM@L#H4l1_N9O*Zx1L7C<};sNL=xL zc`|T3-2Cy*hp{b%IqoDt4xn3Hz*~T4ZzMOCNSQlOj9JGD5P;irl z%VP6H+1MqonYcYG%nJf6``})TB*%8uzeT>W2X%TNP#su!DuDCt2?^8#M z*RKQZ&%fr}@u*eS*5b}=hqkgO#bRUnpI)%A{y=1Bz{Cu3?es$%nuUdKt+2V>GCC@N z-(EuMiF7fy)XBMhcHGzhv@7ttZ=WN9QhIec0m{dHU%RBYxX!hCs9vmRs&pZ9Sb3?S zbI@oFtwDTKZrUBHGJ3!3MNfJN-~O_yWs~ve7NUpPCH9612>4n{^W8aT=~ddd^Y(i4 zSl=@b@{i?I_$7bZW7ejBV7zUel|WOqmeAv^)6Nfw8Q5qmp_#Gv%dL>}op&wOx$p5# z^%oGDWwc$Ws7Y+a8K1~^1vU3I&%}Nn;^xyi>H4;XMlOS-R@>A)>AapNJBeqjtn$7} z@rJNZ--^{fUvsl?U4F!^a@G-a<4Y7uiCz?Tr9}%#Gs3Li*y9~ z=q=8ic+Yg#zRzk_hP7=Rv6HviXG=HntO!3d-|0qqi^+hc@^|+H-}E^;KV-FG=ka}` zqZgQs94&R>UZUCO(tI z2?3ScQbb}V6aTaa6)*dG7<#Js6R%b|$GtHc_CfNI|gK^{K=>87dHP-I) zZ}z*m-R_meHJgPkKfbJY`dBPj)BjZItC1S*#rfs@lRY`?RIIP}KXhrFlHs?Gd4g@k z{^}j~Y&qr(E?yMx{!-B_Z1TXJPwL{io=r?&d0O|tcit>z&Anrymk$wppCz!P?*{kv zr2YK(?RC>_M2*9r8sDB^n&iMYdZxAJ=JE5d51xHzZowP5Ra|oEv-cd`KYgU3W7G!Y zS&6Qj^3T+jJwCt8^;mY=EZcmZ5zkjA9aQirUgIFHsdVbZ`eh<3UMD<~8ksswLdr5x zkMGF-(4?w0u4@bDcs)peP3(4reU7(j-cT_3l2o-ts)f|>i2_r`RE^%LSYSGMXq)4p z#*g=tHKM(W<~*;@G0fi;^>PQF$?4Y%`@XJAetD#*^Thg(`!Y^R^jkJ$*rim_swwyO zj(e0CW+Z1k&HYKuwt{%wJ-hX`h;BC?p?cx`@cUd}mgSyZ&>Ayy*FKNzD(}&HZGGBaoC_^}{?OuzSF42MVXy4F6+_PnfAcN!J**QT4jq4CmEqyqpfV_u9L>7i}@j-R)z0 z&1S~C>S^P~$5zbPniM2ezp&3jPL)N?cAIYm{HT-@zu#b(_OdNa#$!_MvAK&yr+@KU zW$nKHRn4Pe>o0EVTOAaas;wg5a9|DJy?gxwEuUriY;rz4Cr3pkaAcm&^r;_12M>ze zn6k9&eXXXYmVHO8e|w-pKfFS^dYN!O_wDf< zhASDy7Wv`e>}cCT-#%ZR>NZ_C|1Psm^OpS#WM`q(J4 zJ|}K)i7MHd5i??gsaKqd<^J%-8|#xd<~LlMv*r4&JIfa6?|OJBQ{;4q{-GZShv)0? z=m8bGEEF=X`EcbV<+)-O)MvS#}r0toNti86E$1 zQrb0D-k5J*Dcmx8pTB5VcDQu-HpUEidE}z`1v9SWM2~;@b=$jboRX^(9+U=@Bq>fg z@_qf4vTdJ|Pw~7;+mkV5-8KWyHt|DBN_{q_I$m>nUwUcpyYH9x`I{{ow`=mv!<~W= zvErjM>UZ48byL}+aBhvbRKHyo8IxXIt+>%7X6~qX(mHPOVg3UhHnmUW1xC(_GRwWW zsI_|7WEa7g+c>Jr_lycRJ`yZwTs&oq!Y0X5fwE&|OE&0uW--ou5aQ229ktGX>#yffSyD8wNZ-2={-39I%=WevpCe{? zbL6{YWy!UPe4qE^^zF;{`tFxbq$Ci1PiAJZk|te=l8YDu`WR5_I*5&bF-) zP6IFQsJ$^ZI{fRe;~tXMBqI9wj)%~`@fVt(R^8!zwOQ4FYu@0_2C4U-LWQ>Z$&GM6 zw8`1*X2#YRL1jnkGHj{WG%_kBK_O9jXpPfKCogAAdLmYSdGGOycMGc58CE`9I>AJEe$C8M7nkc} z+k-bg@I1w1cfb5k`_%`tO}ttUjJ3z|#9f{*zh-4^f=uU(c?sO{ns>yFtF9VMQ=Vll zw)An1hG}4=#EJ{*zs6@qf<@-%1-{X4v5kv@?Vs%bwg1<7bg$JsYNIgaMc)T2qqnY} z=$~@msL#=x3s)VKczE^h(U~7_2pMYceec~MWb|SV&xX;@$bC^;>XCb5(UNV+H4B$W z`2V=mx|3T_&MoOi$i++duWf$gnfKsyi)6@nu^Z3N25wFM@YsJu`}w;yqo-c9pYUnm z+QM~Qri&K^%DvV}4?m;eb&E6jYU8Awup^IJLeAJ^=k?`#mr_((>LsO|@Fd}WXufIr zfJn|G&rCPJ&QVZ()@-1+q-3ILL$007_!;|Gx4OwV$r>meJ|t^cHFFq_l(tjvUVgL#9Q%+7jBfTl3>-XW?($ zd?N)v`Yz1;aWCbh_Ba9AiG32E?Y_C2U*e){qgl4TmqW1T*d3V%W4&Jw7<23Xa(8{@ zEp;VcC)E#3>hJgR0^_xTOk-ay9ud99^t|vZ6LiuR6!qupn=U@#)a^!>xuRdbC|j1R zx>?Ssk{>QHWdBtz^Hlu?zY9V?&gN(Tk}|OW zmZW*6!f@w>MsjYF`#*N`c$)j6kd0#RThvU=&?q`-fjg+~aJefzhWA59v^)WLeb<$3k%;ae~tg&0Lz($s9 zM@ohC@|T$s!@n;{IrOS*%xuYwi<%FHYC5)sf6?8Q^R_5q{k8!wreyMNJsFmCT1#}- z;%!L>tW~~iT9lpeOx<>Oc<}?P;}`cH8C2&Nv7+#HaA)?Hdr#MnkzS%N*WNNp(D0&$ zuxYTVt+e2|ox7@Uw#Zwa++{8kWu&NH>ejHvYEI(S*g@6TAAPmUncpVqYk9}Yh4-HP z4#y&fRO5=ob5&ag)xO_sS2!prU|W2{-Vw!5PDeCZ)aZZLd^=dg+w<0!*+R(?lAX2J zA7yMCs5>b7%s2cJE#osyHRaPlF)NyQxXVA<7vX=fx;oX%ZP`B5lg z%DLtgA4mGr1uDbi98K%38ZBhCTV0;A`tN3a-4IaLYyJkL4=5w0frEgO;uLZ3k`x3dYSIAq&BRT!T$aO*v zPA5;LNz01_Zk%rw`MTwm4!5*X)PZ9u`F(lT-(Y+?;A|3KJ2LLqbzyx!N>+aO6nAe= zgN{Y@(@)vX>offHqoUsZXIJ&k zR~D_CVR}1jx3&4i)Ur;8b+*m7^s6(KTETU8RtkT~GDdXtmcm(k2B=;9Br{4_ZDh2~!{eVv)UA(8 zKSAO;E!f#nLo|EQLNPP79dia&L|ZW1OYHER#bYjIS&bF< z<`C=fYdttiY7IGO_;mH}^J%nB;mhvK2}>KzJMCnm^;aR+qvgV1ga-1xyQ^bnV>UZ! z-p52?Y1xd)~>?K!-sb6Y~&MVxSzY&x<2SZ%o(e= z=_RWkUOP6@Skv2RdBW+eTcV3@ju#UeGi0f>RmIu0@AU=WL|*QLFCuzT`cmBYfHUCz z2K?-S!2uT{D~0fR;DZ{)hp$9gE`+}tK3D)Bi8v;B7sOH_{5trc3Vie(OMfQx_?Phc zVZh^ok9DpdSw95`e*y3@e&{=^wowb=9|S)756~5RR_B%QAJgok4ps}{OF-asz&^$g zZL@2C0T7L;@uN;M4?X!o?4JaJ3h?1wXxI4hJsT^9@I^Tp4EQRvEB>g1wD+Wg$VCBv z3h>F?v+Ms+;7_OgN1g1(uNC;yfDiBNy9%pwNc>lYq|*mJsk3W;4e<4VPk2NR<<1|0 z$lU-w`j2(=9jYu9!XE>H*8x6~;Jq@-h44LqkM;*pOw!(yA|fXbMC6nC?}=e|}*OAG+l!x|F25;kAOcD>|-640^8%47GN+YQG7H)^y2643XyXKz792hG6&u9 zNFU*60pAw*xPN1T>0qf4{-B|~yMMI@K8~N&eUCUt>?cw7iT~{8-%a3S{^9)-t{)j< zpa&%Og#>@bpS1Nr?dm47w!o+7A1hpxA^hFIC-K7=vYWqmfo}@q$FXA}dYQF9|0QzL z@FSTCz{fi3U^o6&z{mZU>_6=ClYo!$BmT3?zXyCB;FIyN%NK=B3)esHyR33Cs>EJz z_rJwpzc=|)1bi}o?5siJ|102|Q}HKlIKG|=kyR66-v6*;8+8+Y81VJL{@?OX0-v5g z?4IA9z{mVWe@G7ZGI-qS#c+#=v({Lyc`NIR?io508XL%%Tw?E23MKN7^}7t9~zvTI)#_~iW| za#?+kLF{Y>{zS@uxD{jD|Es{q`6uHhc>t=qEyR8&@NxggI_eti&L6A$4%)#&_zJ82>(6B zC-cveaT;Goior0U{6}sd78MZt$-u|^UqWMd|2hYJ+&@{hOY9K)-+@1!;{VP5Ge!E} ze4@W6B=(mBpX@)_M%r2B-vmCMzj*fI{IkoSFq)Zvc<+WWWHpY&P7v^M{z(3?d;hQ- z_+>Ezx`kT{%AYI z5BL9p5K~rThjT;bsTufMwE1UM2jR=hFy|llURJqu`!2x8{fC3{iPbZV*w3NtV;$|Y z>I30F2R`0E|1Dp4?7yGC*tH)Cd^~@^^}l-lDFD6>6+hI$uKiEIC;KN9wO%ld@b-F&kii?`d?1*(RbvsItF5Ys2tNi+9qxIxu-&8t$c16$aGgF{KvpoqvD6Y<37YnA$(zZ=J-k8useQJicjnkJw5qA?5_kqd4I{OZPZQp zg}~RR;)k|b)j{~*fRFhLU!!!*Kk83jhN=J>G%_?Li>?+?)~wz10} ztHk{N^>6u6z_;mz{Yv25_JS`1i^r-L{7B$i^nzaw{NDI436s~G_=N+1RxkW70lrx; z`22A5j`uHk_F?|ByZiXdjPx+VX2Vy(*k@0;1jzQWo6`J zw|WSFB0M~j_s`@E=$1%z5`GBqwJ7^68UBTT4EVTzV>8YHUaS;i{|oRT1YP?V`cK+> z(m~|L!{CX1^q<}R#{>AdfBx>f z2eGJu@T-8Y2YfR3td4>3N5SEN>ko4u@4wic|M|d&Euib)C-|HB8v~2av={sk;9K^B zf2o)Dhr-ME-q?2ozIiYFF95!EFZjL9A8tr~TtAq$IR69j0}F-ZpBM0Tdcn^IKJGtg z8}I+w&3_KK`6KIxtRWWM|7ZOh0>3x+kK2K)0sdn=(7rS)#zBU}uLk&dejyjOGL{SB z^TFne_y1(nHzj=6^25$8n=i?2dm6@ZlCb4yX*Y&o2M6 z7W4Zj5)XFsk5`)+f3%ObS&ad)rw4r8f02uA?AlKTzCOig)i#*8=ntUY(!!&o~Bl?|&8mpX49fLmjLXVt+gEwZMNIJI0Q*_oRc!-3NX!6+h&#Yk!{Z z&-cHqa?uX4p8|Z`KS`Zc9Yns2W*=if+R;XLg~MQ9t3=QG8bI65j}4Z05h;zp@*DH{jFP57FNf68pP=59fZ@^9PQf zUHi9zPxcSA$!Z*keF@k+F#mXfD~bwOEQId}d^p16kR}KhX~%kZg~)9KKAvBk-3kAu zkMLgrAM=mZaT8U9FAWd>$nQ@&SVY2i0zSs?Z~fl}d~$xXI``-zv0q2|k8OX$7d2#_ ze`Nfu>LB*Lfsgw)<}PVNUwSG;HVgQe|77ixc2@ayz{m5S3kb+1dRXO;ftycI5l6;N zkX61P@X@{rZ>YXcwG zFX8vZBmKnw65!+fq2IWM+4cVvWuN37t9}ss9l$5+A9b+HSA>_pumyIlALJ50;A6Li z*bfCh+9!2(`G+Vz+Gb}DB=(wskNXF5S+$J=BYYY7@f5BfZfL{YVK;s*z$edNIQOjj zKW(4#Kab z?34YMv=cjjLLw&$#xZ{E#GY>768Pp6|4+7l*G}wb0w4FEzl~oV@bUc>@t@uOV=#RA z0$*YN6My2@?|i1W5xFVAC-!mvNIPBjcb|z|1n~91KAFGY$^Nd5@Xr7r5V@G<{^`d9qBK%NhL)W@oAv_)jP%|2XjB5hM;} z(FdGERtn*to%iqeAFS?!gg+E+9w&o+3x@=K{Ys^YbXr^BlZV*^ltqB+wTt?z<(S+&Ohc5 z$s;n(KOq_aZs2PHpMw%4dGse9X(#+Az{lq&|L^@V^Z9|qgWde;?Z5w81M{Z^^N0C^^GE!EkKGm` zC+hX{_ZRs5$Z8G{z7_EGz&;mnMd2dt-5RIK?FYV2FZhGJneSiFF2;ae`x?MU|2ct+ z7psNXSqgl7{$Mq3L_gu51U|lhCwarF4}{O{!`y$!+!H;-&YzI*4S=sh+2;mfR>wj3 ztAUT_H`>LEUH&ED!xq|=Kf=Ig_xWwSFZ2Ex^G}NM0ief1{ND>V5AX;Zhq;4g5EFX* zOZc1ond^_loz-)g@Sg&ICKW#(uuAmw|DnA(bczzMP?9Sg2;N$u6 zxBMm=pH1KS=ZuB!2!0iQE$46Z_c4Y7P*7CGg=D ze%Jir-bvd3WS6uPIq8s}zkkFwcHf?0fUi&ElkxS0Wc)Ki zfBySD`2LmM_-BVRpI^z?`Fb);^%MJ?i~j9DY41r5k(&j4JbzIheP`GI<-jNNhdSAf ze+lqO{-F=-@|7Z(-=DLZH)sP38Gj=1>GMz8nNolLOXS`G-;$O;r2WrKW)G1IkNo%k z%kKVh@oNIUAA@-L8pT7Rt-T%sfKZWuiW6y5>_KEG?`k4iM zRj^OS!|wCXQsCj}70et%Y&u;v!mN54(qK{qvcHnE# z{3qjJ)&Kjz$NV97*`0sMxPQlw=wa2q1MunbBXMArpAUSp|KQl!-T%0j{#-w3o89=$ z1HK+D{_N)8F5u(-O~%b`{F;GJKfim58|f$ZG?x9F&+how0iS;Uvdgaqz9TJu?2do( z@_+BY?AlKP{v@!Ed4smu<(B|ogEoI8zW#0zp^EUuc6BAEU)|eqc*XzkLgL>^@$tSH z&mMN|PmgEbfA9nMZ{8n-0bhrTKk@0`p8mc@WQ%Bg^qu4P;{RVO;eQ4`J^$G~e`l`v zx&F{TyZry{?=Mz^{}_MFJ-pc6KOO_0JU=6!#1%evTZo*_%AfB)kU-kICDY{A17DBw z|F7Z?d^0Nl(B{yd3{(BY&&jKP-v6O}(%zFAB9{t$`uT(V04s&?zyD$%=YW+$_*)YG zy?>JSo^%koHsIs^3#qefUvc%n`9u$^_Pv3R`zPVCYd^i0{9C}cqUF!Po*bw8iN9mk z{Jej_F4EqU8X~tC_{OyH_rxRpgntS6c>j%c%wJXu;eQ7{dHz5?yYaV4{Q3OzH|r-K z_~iZzZ4 z^E=wc@w5B>!4vq}U?2G+-5LC)kJxVoz76n6?%+KDD~0f9CI9>1pWiZhy1_UKVJf0i#C2x!%`vfli9-j{TK0HkR|rd{WB5xIyC$2#{VAhVVT9DKNvgW zS5IybxdExn^XqTtUmy4jY4K-w|9A*|GJk(F|C6^e7;|ayW7qyV;JecNXE%R)yZ=gW zWA0x#cewW1UH=ZiR|WrZ+<(L02z-41Le>wv>+c=#@&4&=^G7X>$;W(Tb?!j)pFEEN z{v4Wp>|>>n{J#x+vVVyJk=^)fZ)dJw0pR|P|I2|t4gCLG{te*I1U|k$!Z~2)3=jf& zyl~yg!-agf9xjxd4;T6gYo@CpV!IPuDCZ0p7DTMOU1~D&Zn#Q--!Bs z;X?GI`VmoI09B_Wwg{_ z87?f{;Q;90*(Jq9#Cir?s6P`fEOf+Yw8LGkOhox3aH0HBsvQyQ$0;nN z+Ubb>C#ZHr)N>LpoR_n3;d;IZ7Zz3!=kW?$h~;phzH1a#0AfMJ{z|MsK}0`pVg(8! z)^Edw{5x=A=?+ouE?mf~h70|_4;L0hY=4LqDE||P{@25W_zW(z|D3`XfLIW*{UwF3 z0I?tn!SxL*Q2r+n$Jg1Vjfv=2A2d!Oe(X!t5mBCls{anLzd!VI1M*RFh@4Otr0R&c zzlu?Hb`bT91RhdHQG7)7TbimPVqFFho5oV@i1<;Ks{amgeN2Y_v4Ha_x!)oB?+pDY z;zG$G;`rUDdUuE-?v%VICI36bE-$LTJ4CxalpG>{^rh;*L+tXS`Vo;IK-CfPV<3e= z6b54>6h!mN##8m~5Jgr{ za){_p0#!%EkE^LVBHBr$>WElR0>q|dsvQwOuA^{0)sBer8>se;R68Pm+(hAKsvQyc zlWkOc8rA+gM89`Za_N9*Cxenl#PxKL>OVyF=TP-rKrDzD|6^2t0o9I(=f_zc2?gB?>PC!hejbRJ{x< zP!Mrkl~j8bRlf&_`tAdwpN}YfLg8~jwA(<{n*rg!uJ`2F{thb?V*LZu(eIBGexmvj zvAqKjo4!!>uYhQ`6A<}*p@MZz_=EEOsX8}>gDK>rPyi730Wm<-I~))TB7Pi6p%m4Q zh#$vLC<};o$5VABK(spn5cR20{i+mBqxz=&D;F^<-NT!8ZcF%LZeQNIr$ z>hlA{@;gMk{?LyYKw%(-L4c?~91!(IQ5Xw|e#8T!-9$hvbVT`e(2iXjsD3&ke=F6F zi1xPuqQBb#`2Y`5{oNsosCGJ{ofFWGcoGopod!hFbNGis^#1}?N5qep z;1BwJ4G{Si6kZ3!INbuof{6XMsrv5_?cSyO5wTuP@oK1g9n}wAUH8v;4~^%AJX{!e z6}Yg_5h;`5Li?%|{_cGPbalOlK)?Tc@4$?g3kC(s?-1ka4j0aoCtO&5hbZ^odxx&@ zbiIebJWOC#yAbRDy?0>d+kfvJn2FKd`w3i6^>86RgA4QLIfX9(u^?jmOA22BVnO`x zy~BU+9lS6(pwJQb@&DdCFxS<8?;V)u`hV{ox|YfRsrM1MwEuhWz$ zz>LFx?;V(N`0u>~GYOIOWdby``+?A7B(CEG`E zOB@aA9GyI^Q@>-G+7f#?#VxAZFO;6E@r7M%S$NVvKeg%3eJ2Tp`FAgSUbW9kX$d<# zbwm|SFOHEEj<@=EdF9V0JbpD~ymI7tUAb0?Q;X-`aoIQG)k~u>?r7>2`^6dTDgD1t&^y0fF zQaJK6TSgY7J1u|8=Rb@0>CKtzo_^h3r?KXXxYedj55H$Vcy6R_oc{9W2f=rsufp%{~+{&W9zXG?NPNfz4#7{6b`)y z<|Dr(w0~VxC{)JBHNHUi#Py~F&FeN@`;jx*TKme1S2Zs>r|$C9Y*@YHrgxTwkB_^x z&C_K@xd&`Ki_8)?Z>8zQcUq)y%$#E>>1ZhKz_oGF{>-{3=QW0YXgn1nS)!=@V_|>) zar>iJ3>&y&>;=(Pd^P(-t90M(d{8`TSkjjH_cZ(O{d~f47ELd{t0je_b=FI{gLCvB z1};>A*jyh|xp{N#(!D*@b1*-i%?1N;?=6ju!^lG^uu z%80>k67%poAQE5vZi^I-oUKE3A_aHE_=@nUnC-K)iY|S0DeH9hu=vCgE|+XOT>T$( zu4tKeZgf?H!{;#qbFPh%d+@-9U&8i8kg3zU`uUbLz4-2u6plA?!JC_h>9*g!U-N{2 z>LQDdhQ`fbn87dFJlCYm44J z?@!Z<-#wASVIm#S))sqZ2LGD9jnPlFS{B!wZ=NkVq&#Nkk(myit=eAsbnC~P z`OnkkhkuuCU!9~`FE=u8)yyS|$AWj`cX=cZ_|BOWjyHmJXC9oK$@%K&1fH|=D%Kmm z*|Iz{T}%4>$0#Y=kdNO})`UkG3T(8q+B~yxMcYoLy^(E63+@zGJskH!so{n<^SfK- z{(#?Ulfsd-X5{!Ay50fdZ|WYV_%@ALduPwu?Me6C2Nqw6_;%8^{XXXPNxCKUA<1=_}N*|%=#dp@E zaOg#(h14GQ8b0Ytpr}6M!kzJ2n)$Z_>zet;#=Tp~9qHA$r*-}Fu^9zh>oV_doX3Cp zp~1?2wz5M_ok!ZQOVa#^-?ftX@)Ms5d5!`>G^42Z)%K}_^;ZK1#5ivJJWDobNujLHAa2?AnVE+Yb>^M3;cK;#msB3HFQa|zJF}fL zXnF;SQb3OBS05y0ReReei&s_Mt{>vyu08v6CGX3j070Mr9N<8wRk){{F10aRN zWr>i6^Q=>)h7}oC(7_!oJ z!TDQj2DBWiJgIlAz`*)BO|J-13dnKjskx)|Epz9O#P+8RQI$1V`Fdr`X44-vSGo47M74DmEKWXjvc668!NtAz%G@TL z9o@V}CIs(CNIu|q>ZEW~%4NN3K6gZ3VBV%D#?CPzxkZ0`N!F}eYs-m(_g7oJ&IXvSkP-2TDJK)#?T)d%w&HuX&p&Af9` zxg)M&#qAfuI}7h~YK>2DbloH%K+`*%u6O2;zB8_VUGwH$K-xg3Yn&3}yaa1o)^&zY zwZ18LZlY$|*ae(3A5V7QHjO9n)#X9;DZHuW-%X>Rw2yjx*?@cZ7&)3=3A*0UmU9mV zZF!h`WOAW_)U#px)JCoKNwoU9RO##Xpp=-Y;iY@7Jg$GEGACVoiNUT}*W!1tnVP*c zsP&%4G>-m`jPY7Dy(8#)k1AH#B_A^{KiQZsAp9|-(6=JgC3la=&Cg?xRa?pWeVSev zusOwG^u~MlY7KV9C~vknw)fbu4W(L)x=oHhepx$?%JsSDz!YoH7ELll;B*U9EQPYCH~{lLRT7B*?q4HG+ru^ke)unK|)qK zKwRgh(=dm`h?3$jH;!{`n)pQc<-%y1zmjylBZ6;mOT09nD@P_FAgRj;41sU9az>?`?e+XfHXO$aC|} zxXbop`*R*1(AOSqIpszDMvr>4{#S&b9rwHBpFcn{=|y{oPl?HZ2$_Jyc*Us`J0=+4 zJw?+yhOYO2aG#W+>-`_x&&JaAnp{|J8LY54>v6!gd*=(51Z7TczP)PMH|ca>XmOCG>kUxfcK3~X>Ft7q zTl2<+>^mFZZ1?uXvpogAe*GQ>k3Ij!Z~d2dIgh0+^qvZvKi}ZIWm$|#!`Q3+9B!TP zPWHKV;4n?E99{2f{>st&_^fqxTW?lQFMsaaSh;^x+tT7o1)hzOE;`GVgf+dZLxirq zn?8Ex^DzxgB{lw?=4o}yu6tLf_=nxN+)UFuj;@#EsG6yR)x3~5sb|ML9#`a&C-pf; zt|Tf)R9JX}@!G=h>Sf3JeU<&1Cv<$nlYUoJ<~jxK8RGA`^pNqSl7W-1KE>Y`~X1!MTqg=eR7jnPV#2aVYb?$w}{4 zdFi(!cS-W-osjG=?PYvy^ayF1-tj~!AjkS>pZls_&eiTY550M(H81!WmMh^ZUi|J0 zx17AiiO9&qjukS2vz=xyoa1EjA~$P7^|x*NvlMxfzdGN)uV&y*zduu;>wWWPr?B|^ zD>0uR)z8f?E;U&0e^DftYr<)_e!I6#8n7csqVagPLrwg(35Uf^YoDzU4L!cw-XyhX zqh|T=Z&3!~cWD0NZ-GeR$efz4X1w#Og7h(Eh26>Ohjkxirv^?i8n8(^uaS4bGy4S_ zDnw3X+vSPMnr?V?brsikf5DYGu`i}&)vUf%d_s?YU!p{m0&+}xn$<4qS}~wqWMrSZ zPE$r`=jk*H?dzMkb2n$#)F^%bu*X;Gqpx8zner=v18`QBzO(gD%pMOK%PQ%)86i){K{T)xp?3Svm^4j$D%3 zd{$v_wRpzkkHynFp6<^!-dFi9jegE6)AgRIo#ttx;_EZF#Ovs{Z*O-jys=hpko~BS z7qXv;E*v#waNl9R8=Mx^>=6>IOo9;Eck##eDs?Kj?paPgUH$CTAyFe97-IP(4S4 zL-xhd{+o1CB_=uZ9%*ZAs&Mj7DqU6?#wV!7D|xDAuFfS#y?1VP%hfZK^C#FDS-3BF ze??C5*4!f#Y6ISSMbY$5r2Fe9AP^@dt?8#(P_RM6g(ESY-}=4%&|!*vwMI%W23*p~ zEwR*U=PWQS{IK@gWIdaPJEN>7@A|xQ{aKyQYwYXfi^z4RdsK_2@k5Kjn4eMa)|%E3$|5d zufEar;_pyM;mFvRu0Gy--=h_qPG7dQvA#Xx{`${Z1M0?HnNqQ2`TQGkue2`+=k$pU z{A#~z>#1GO7w~z+B+d%id+>7O>dDO&3D;e2XHjo_)YasVzOlD+&g|V^JIO9JxBa~M zsG&ONZn+Q6h|S(04M93^5eyvNMJ{Z#mY#r8Mf2QJgNR)2I>`Q=B!9dAX()dU1T;$x8)rLdby~>o|6&lj?PX9+M#G#*_jZ8tO zq>+$YLD9gu4KsbRql!3Jj!i!kxTvlC%3>Lt-=4F}J|KNOVt+eH)n^IJn`dNqhrK#uRKKgL`wuXga5JhuPt zb0(_y#~!~u*;Cq@cbxY3sS{l7f_YC}e0Dtf%J=AEhwc7ThCkeK!Ej%J*|yf_`j;{W z|CmG5JAse zs#}iVP315-Xt>m1rdqq)EMNP=%b>vdX+n2`ht_)S8@K4;?&~ucbE`Hi%NV&c$FeqM;EJ#RXRT#>V{+5vus6%(+tgewgwE^Ok#YX&*{s+k^Z+YAOC%bu@o<>3aRfI9*Liylpag&hk4IoLW2cW#^4cxor5RIng>b>9pa&${bz4 z>;pz6#?pDqC)S$B>e}v1QydU`gm2%$%ojEb>FZ68u6OT>_KekOhdgfNoNJA6>r?dp ztLxOZh=p^?Li?O~;iNb-Q7!he;}4z*M^D_|C)#-D3U0bWU&ZlPw*Pbgj*(sMbbM(gY;RkJ&<|dSJjOXH= z@WahxWciUvnh66}O8w5!L9dHxpxS? ztH>zlt(Yj|Gi$_|?Brpk$%hX9Sm*cFe9&T=UL(5R|H1Rkn67s^SHQPAlR!=IBoYOVZgi&t41WryQT#fI*ku<@eY zK|Pwkv*>zH){O77ZkOreH?MW3d*#f_=1dCE;!2Ph$MHr(W5c=)@h?RiB>eMBWi^j; zxpkaWEBj{s!NAPtBS%Y;;dPlr|4f=*6T03zw{?zX=jDDD@_TXli4wPvreAgKiRW?q zSO1u3R}`7?e%mX(vBg))J7S)lPf}l$@bXq6T?c8AQ_b&Zg^~DfeCE zFyGoG28U|>^5vQqD%d)%NPjQ-`c-Se!;#T}H**UPXkD)tuut36D}BVO&CwpYev^QxZ>Op5srD@XFOaQKD*eS z=6Ud95=cfr$>+9!nHks;bRf_;{jWXx4hOmr0>C zz2kmw6M^EnPkq`mt(;C%lL$0M}tQbyQ3^t{XXRyAhY z=Ttq1&_q9ZMWwzj>qpHwC@5%6(`!N38*nYFme{kk$x}Q7tLT8oIe; zVBfDY2W0F;c&An7p4x2peck+c4Zlw#Q#v;Z%DI+)*jN_(rlgMk{hK9S?|~)_kyj>` z3kwx4cW@R2?8po<>A0}{xy8QMqj;ZW-_ZHGb*9_*ni}KQYOFc8 z$FpE{t={H+G=Ht=dYdcuA#qeeCmHm!RXf;xcYdIOZ%Fkm>>Di}ED~pUY zpFaH-9aSWCe3E`=&BCKQ>(|Oi9?D@{FsxP2r|Gq(>wRXP8EZIg@x`{y;~Wa6IVxC< zJ3C6xc2eu{#TWHvbW}Hacog%TpFOGm;;d((1J$P*e<(Sunx5q5Zry**Wrwvv=`_7I zbiJqUCKtV1b>oHdj-&Zp`(4|uJ*PJDL_~<^M&yZ^s$6yS-aNcBVa1%&>G8E+Rt}$A zU8%=oDNypGto+b>gXT=*VKlvS=z8Pk#z~%Db4_0MM^ND*(d3$E(~b&H<8S|AV3xIB zwe9E*W1lI}oPigf+pWkqd=WB5LQV5cY~k^++@qg&H=nw2`8!RoEnV-WMoS;bE041l z4lSIs((d#=zmE8O*HcUPoZqlHO-J`BzXRW5r*~@4KYkQDa%{%7uw?fku1izj#UI~) zn8W8uqopxTuN_^l(b4UUTAt?FcM}sXx_4?Qyf9LURS_Q~etm~*jeD0Blug0vJ zH$C=P?2y%sefsTvX(+7Knx1E5Fzj$@M9XfPUVFOU1;Yot)!l6~KzRRwf-845l}6pZJzuxKLqH$BLn7zx zx5-LRdG#aoGT$Im?nGO0ezob>%x{IidmJC5JnU^n>|chS8=Wi@pb8V@$~JzFP|zT-nbSWjeO`ksK&#ubjPRn*%PIw>b;j= z@7v*}WWR@|*MY7#V_~e-u!Z(l`8N!fee1y?&Xu)W+3$fR?}w~9-(hLuoL4ghwsp9+ z-P-t}eaj;;-fLTAmrRztW$RXa%--Wh)Npz}IMVgz3+X=gIht1LdA*wE?*h7B ztJ*8=my2R5AFY=ROEtTrX(@YDK4IPHC$ISf9IUvUIp;_Fw6;I0Ue@r@{Ap=KvbMO_ z>CP4v&jPE)kFA3^+A3*!7t-~f%RSLQw{3gMMIFB+*>RuB0^cUxcw<^JbOryb4Lg_1 z*M*(RyxF1rIxpb*)M=As{jV$xn;w;B?5Urs#&kC7aak zXOGx(;5#M?di?^8%AGE)1G(Yiqzvsra z8Ol{0G=H7xdR1R08RhNTwD2SVtWSKvYoqhl;W#(m#Z4g4Og{#Nkn|e*4?1J z*EDVS++A*M);fmO#WcNcbiK>PgJbuMYH>cgf_wYz^ffKl-yKswzg_ZMX??^@&GqvI z$Dir9GbF4nEu&ODI;?-c`ur-!3n{7C)phOn6!bVs>G|MJ*V}6S;o;{!nYRv#jnkQT zOHXT14*$Cu0!m|357*b5Yi(V9T=ZF@%FDBpCNzATeDLP~W9=@Zs@l4TffI+64iTi0 z?(R-WX(^=}2|?-Z?rxCo?(XjH?v@r_x%c5e_WS+L!5Dn|Imh(uwbzV-xT!MGy=N2IFK%GY4o)V;G7Gd24TO-EjkFsPpfkn1`2TX8@6aq zoABP@*FoLleNITZ-PDi{OSoT=VVgA=PETfz#ab2qdkE&W|6mMsy|=0^7s$`CzU9xX zHzTR7ma(8x92N2vq+k)ac4DlCIlSFk&ZlfSuKTz+VM%xhjvz>G>MG24YO&14tBfr@ z1gNhG(A958)j8zK=1Cb?&-~Hb$kl#cUBRuU8jTjbCVtCZyv(RT8PBFMFCsTE*M}|3 zT5%E*89`qlMljgvDDZ0L3 zN?ySPxgu|RM6&#(3@ptU_@R|u$(^cXg`eXAiMN!qguWjuM?I}t_B_%nVm?2;pNp+< zsPAu!)y(x<98d=fpv&ujfw3_lyi|XbG`0`1cRohQR>=&E0mrlNKo>1f7gILHc#S7AengGwD)X~4ht|f?LH95jF-|)IOnb5xeMBi+37ClL zVY0OSbW9-%7oPQXQmNWiO(5l5kt-lyTcG>hL*C_Mt6l9|qiVis(<(@?3XIm;)a4{} zM9%g{h0(Q{UuMKLaFHGX74uVg8pNKnrS>S52TY@L!y+MBOvh&c*AD2GXKAvmYV>97RM;tsWvq1^hWhv})Qc}0 zL6>1)>N~rA&y2eU31TjjE~M3g>&>4)m)$P7;vnWQUvX8SP;;g$3?CXD&bZU*zNCc= zZty;*ezgOmYNnpBPgRd+?DNl=!=naO)vw-(c&yG22XjW+rGR|xfo@i$!zmk!+p$0W zUBTtryAP>YzlOhZjjfmN`v~Oprg#`8*@YL;H;wT6p&_V8skHQtEmMn?Zq zz3KqC4nSA6b(P1S^qw1&*RjCj~1O9{n_vL$vUISDsqxPJ;G z#V@n%o9E9al1tyKth^Us7Bi^a?4qS4b5H1^B^Rt_5lUmPlk%(puG1^}_cy4Vp>)nU zgqYWQUPmco)R?|U@%nRKMa2_Npf`4;DvYaE_8Fw6l?ZL%4tsaFn5-TRu$Vz~2 zhrgSA#2m2i=?rv_rz(dr_-=`FS;Dr8^5;aq^iyO_X|@v`YET&4q+grPpy76_qZ)NR zip8BYTk*;^7I(~kSK^`EAsRT%qYeh{L%IOnYISqcZ=FBblOc#q%-!vr9LtH`fc6%U zzo)IpEG(M4*ZB!emm3>p6tCS|_}P4tXkfgod~2^1BXDa#_uX<322clApgR%QJ-mmH zs4M=#olLq)ZjJ{gWZa>$Ztr@rvU-XU0u2#vapJ+Dhj1b6rwmvQPJsBIH{Os+Ql(GF zgh@9&NWk+1Za~-BT!f^xtjyB7_iFzV1L5nMiI4oqyS5QeZ8b{*i?WZsXr0M`TP{ylrgK$beY zIDT;j?Uceu+-;mh>r#T0{`UB()P4))gsWm>=rcA=vt}L+2=ksfEp7x`V(VAplW%t^ zFQ0x-Jizq?x=`dHY1Boh;dRfKpRPf)vo|y{&Uw#WNq4z}5YlZqCW2g8YDP z24-7Mi9ITd-ufmn7Go}+PQ?QkXK`Ul=#k8LE6mC0xT5LXakHb|$tti9GEX9=S8|w* zS6?awJ$6DigVw*}0X`4@K-V)#oE4UcaDM6Os)twxjYHmt)tQ@AeOpvYDAPth_PT73 zJ8lxPo^+q$y1S6!ozCsUJMh#!P1w+s=P4?GCg8qP0MOl@Be&Bl4Dim`?w>P`(lJ#S zM#w6_LhypQKb(?ND>EX-xd^N5`qAy-X)>6$$`?58={5S5&1E%B?0>o1WX0-`H5-+T*8k|ltfqy0`eW%<^)`k6kc>axgwFpxMJTQnz8c3}jBU>;I@KqgPT?oo8 z+OvnXrC8Atfnkie zj?W>?y7Q-jFBbLPvIBcWOY4o&8{6IS29tIrlKs7m(V4iWP9V<1A8R~vFx(iG1e~9R z09|`CA1tJ)Uo$OUfvy5hyBZ=kGHw&f8-fUKL zZsnE6xk5!F79{1rqSpZVh5}tdr$*5I=;E|N46gW@Iru5Q?$^Xv3NQq^%y4Y|6}$R!__us&n99Sl_AGhPs^WiTpFydB&Bg(riXj43-cZkkOw$10P+n7 zx~d8vr}f7bGJ1=)GIm$i<*^X*6=L4Cu9!K{Pk?e!7ePjHPpTwq-opkAz3Ak?>33T-hR?b7!p5;~Ykxd_|`h7(q zPpvMX{ zQ=yKnPj$L)H}FjXZZyz^P5I=WAL3cY;vgjTnj1^i5r4!28Q#jsziG*6J_66ITc(tLLN{#JX`RM>xNg`&WO0s#5O0$nN! zB-o!6)-tmkOx6{r#83R_*GrS@x#9u444fFB#$!coQWyN7PDEu4AE-lb1nLc>eeI3* ztgQNGz1ZoUy}$u(9MHuGOb^q+Xl82^PobMAFY0GM9$_PEy{`2>zTK{oDalD<%RBZY z9P%{fNE9Xcxqqpc2(>)+iz-8cSE#~5x&YXxjR(5TK~A4|m3|v@&AQQeH%f8c2sEBT zmeFrSYltZQgn2+nv8Iwiw*Ye?NvVGdjzCrSZV}b1{+%JaOQ|ASecuF}KO_KM^lNiF zSs1#}`wM7hcl|9U^0(5J%is?mX)i>htHHo>#3HC=6q}0-S?>2KhY%IhI1Tx=;fawe ztj*^9TI_LwpNB-C8)GvPSfH=4pCLLfx*}s-Hr+8elkG*Y+;{DeJK*lMh)>RXxShD2 zpA<_t7{9+aQm)XofA?|s_GfJW-SHJaFQC3jKsQrPKm%6OBgpstkFS1I=?^@lcP4jr zaw%=Jh^l`Igrx0l!89zd&uKN8o0Sld`Rb}Zu=S@`i6pW5 z&^nw(h%kv&iF{^x`$%FA1w^nN-{M*@z)c0Zox3HjWOnKspWS~is$PyPjRm6)pBGZ< zQ#kLRH<`?A*X3u22!3RUuju;j0AK$27#m}U)qcDzBb0QiP~y+l0C3ZQZrIS1HS`SO zh?Jh|zIb7Rc=|2v1AdNrZXINuO(@;vvXeI^{TF$vzCUUszocvmnB)(!4WIiGYxCgN zr;#E!f%{JBKzBGZg$CmuQV&~Ej$35(y$GAqS+x+X3JEVaq<)mB zyxx*3Z!ac^UD^#!4=t{lyPL_cPr!Yg44^CWP#hk2ECHv5M0Qcao!!__J-xg)SOm{a zva(ey4tajoQN4tgu7%%mkt0xpp+dr6Gb&$_Zpq@|heV^NtBC}tLnhFTqb}z$eO9|Q zi`lP%ZJn~Q!<}WPqJSU+@tj12&TW0Y5F*iv3~g~iTWQf`#fM~)LRvl4QX&dvIg_#$ zrGf{Jzga+6bVA8h6|~&VOhrN^^ai3))`#y@$<|YLyf)taR-8S6%QPOYhI}cVTJd)+ zBUdbVP55;<3D?J_wKcMma?4RlK)%^PcS|>ND9H7gr5gy*}Tny1#$#6w8XHkfTOc$SnV@bn-i*cf`3m=^%N5+SLvBt1_|u< z(Jn|e670UWLNmyW*^Dr;>Z#}NG7WY#eIOGI!`=@os+c|cCtomF_rGQy&=vlAnG`av zL3v(uvaR8lVeS?}Xrd|RMGu+NzGZ-dc9}m*HA=O@}%kId{Lht_q`nT+lym0nh~#?CZSI0qYpXi1sK2C`9vjnn)6`{UyPFB1D4V**WF zrpK@d{8OrXxnOvK;k{?&f8WRdx8 zC*TIhN7y)mBok(go2@SaY-rjJ?lIA0sFL?emhp4sB4onN|LX9PZ!ypvq5NX=nvH%)s2|F+W1}|%f=cJkkQS?lqXo2q!OMuC9w7GYSlk&N%kjYrD+t) zl~LwveP7%Xplfr~f&NEqJUUkzyq{O(chN0MuO??LOWe_AoJ39JDPk^>kP`B4%{Dw1 z@~yPn+atM!qiE3+5A*yF9dDrd$IAZqIRpJQOM&iwuE{C1_ud~xZKb$hA@_&4G+fqL z%tzIcAd`>}$|Twz2)pmaxZw_K9MK^B^L6Q*Qc@O5hkE;XnTFcL_+e50SBDq34Ct;z zyvw>$$H^KU4?as(3u8C^W~>#e}RblEM_uutUIne#}?c|M`ef(SJ2IvjLTG$F=dR0871opGzj}XfrYif+9 z3deM!I*9v(kmE9(O~Kc~IOz^}83n{NoRPjsf)d{V+zOyeq&3ngF~Q7c_R~>qvwtvx zUl_8Ca3*1NI4|5crt!P2hD||bE6;S}#-qo5aPBiKvmQz{MS(GmS#j^lSr|2N9Z(5$ zd1-lw8i>v2i!1+BcxbKA#d3OLPg!3~KZ;IrT8J#jbx{M(v!={wAC!&clhuRXC-G&w`(f?#IO=$93kQl z|B$jnAQU5n(!$=O%Mf8NJ^5h7%rh6ClcY1LTRA7tx6J49)` zcW6$CP}ONZPvbSt`}9>?&>z}G@5in*HPiT}$@;&LCFdVhOEue;0s8m5V*mX-)B;@!L&herIP2a}@bVAqb***^UDQjD46$^5#3m z-9N>dN(gT+tG|5;K%G)nqQHM(hlDz@QbZCsEavacS?wz#wiUEjS*)7`u@h{^a(8Cy z<})+Q1L{x@be**2H#FcPMGPp@4q(5Z{f>?79!5|Wck-M$HpX9II$t4G!N2JAIAc%? z|KnBV?T1ZCcik4a&zGDM0#WTa0tav#fUZXE@{#YBt5K?+F;*$lXJi7%1?4~sb#!80 z<7ska+@;f87n-Rzc_>OLrEVH;l1RE@%Vig8IT;eZd6`Tos{H%D__w}|Kv&wrX~l+eo!xqf_yo9)Uwg7JXP!UtCtO^1(%LOy?sJ>z!_KJlP*i0eD zs zw*A)IDt`BunMeyhQd_GT?iC29->RPi+-9H)`a_?#DW?0_8L)2&73*V4`P=~$FoSU_ zk5W)oxL&H{$-B91lD&{>lANR7>nx=3VVf$hPJd1QOxEjTi2i5be7yzeetokr2Dko| zpif0}Z}pBLJaojYM)i0AuevMu)+EnNZzou<`&nW|W!EKVr-<-D@c4`E{hF2nAA+B~ zyKJFg3n1TCpgX0!btU7Mw8d34`la?P0p)4EQ zuT9qvk{{Z)&OBu_poyaqc23W`-T=65K-Xz^_0-rJDXz6PZK|>c6-twx2NnI8Jb9P} zF|E+D*vJenona-bBm%@&#gN^np|D9*l=|+Fw7zb6P{xwCQTLyH>3`=X?LfEBHc*$` z^h38xGT4DvE3`IpvXO+s%n}$2?8aNNF+2M|#^#;(qkTgjBEl{Y!Aj5ITkK^e3ft?LM!KdK}RA3zj zfG$MKF!F-Z&1}GxsWCQ02IZ48P7IQ#^NBJ3iTxBOsIMw_V}8fiJLTNvX0{EY7M&0m zOPZ)H-Ux;>QvLINGdrNZgFqMgXp0ji33B##^>hTah&miz58som)sSW>AJ&Delng24 z6eq)Gec%VNPi*^r)fihEu(T#3dDEDpA|A~K_CC4*cL?aBGJc35%G_B-VNA;W;?6Hz zxRi$VM&QZv#~xbF8dFeq3=VB_^yU7;JCN@t4laEq4&2RD?vK@&+U=*_fsZ(y0CyPZ z>a+2g-_;MZbl(LE6+!VP7h|})$Mf={RP)Lh=vZ!ywn)$8dZH6w%n+B*u^b1-f zQfW;%7&Ww71oRC(hO8ir{5++T0tU#-Xa4&QbA0DJ=V*4L7Cj`V=X&b}&<{Wz#(=KT z2d|^qKhv4*9+!+sh3Iu% zCCoP1E05PxX5~wiIIoGRlIHeK zf#-8~DZ79C8o9kFeK7jfuh03&`Aq~_dl>2>m!&X)W10t|pV33RjQ zU4584KB*gd3S!ICEV@lHl9X7PXBZ0x5%NyFk-46VS#ZewO_%dl*~!0ld_VeXbc=uM zevP9l3ERnzh8;Mso&vh+%=wtG@YLOA@K&^O-KpcGNQ3v7Mp5De(!l|Fm{X%>XC5Ym zF%O7~fd?*zzitiQSN&$G&Y7q7ItO#2(2NA$JD3K#?57xkZCD5L%!%gTRilOjMwg-x#3*_giLw?*8S{ z9X_!ieAwRV0`Z@;8AzB5#h7Y+n9TILzLGo%R^^Pr9EjeI0#2;dym%(;;CA{Q6r25H z)r{EXgSdQ=KtO$Gfo@K5l6sh-5+8d?qxm9u>1_3&|HOsadUj0O2V^h9aDV zfwVDE#sf?B^$tr?OT7w*tTYdmdz5b`AA$E!=7264L*785YjFPWnsF#}Tph=;K>H+@ z5fnm*n|e&^jc)F4M9VwlkF;NBPMpz#MA7jSYldqgSFOyN*YK8Xg|tHf`OX8~FRIZQ zqu<&L4noYaOho1(%!jO094^yPAk9vDm8o~paDy=W_)p&?e_9huP+FBLI+!i^q45Fp zp~d6`{&X@Ac&}pt=(dPM@>Qv2DPhyr--(om;!1O?bXTLQWWq$hiR z>-qgO$83^%*5|p-4F&O^w~5sftAmj$l2I{2we<0rFnNiQM|GPnIv;*rGy4zVA+8P6 zn$ziI%<=pLmmzsF?-=uZ0|%~KDZvu~pkj3EC+3dM}&jJ-QU zEIx%7nWtBEev9rO;Hvrg(|g0sL9dgkFmH%YA&M-*+U%ljDi~D1mw@M1R)H?3p78lz zt;(d(HU9LWWSX08Oh)aYfM$r~J3Fmxe!SXmeuI+YuPT%TZwsX6uPwLoCQDbt)CS3FBe9dSFV zm$ti%0;3>ac^YqP*WzX27V6jnC`f+-fV&QK{i(xn8MTY-9th03NS>^7dAWy)+9yT! z8{jh%f|TPs8+N~v!EZ^Y??Av8&@l1zLM(9IE^J1KbUu`-kdueUYIb zQqa|3ESKMS-}mM{??kb{0m#)%c27*aCZk4Wj>^uu)35`h%OE738`XM2D~+M-r?IWZ zVkBA)aDQ_X=#CZW<=ZN^)G)z!|E>hNX)#qbm&6E(AnbJ-AKk~Eme~Zu8iS+opx%#8 zt?*GPWc|GwU?5N|%0H*DXQR!XMFhxq3+O`4><#WaRUwXGfAa|=5?2?#qg%5HQ`%a! z*&Haw>7`kYT74#^sA>E;It|MCsSwgp62p-L9sQ>1h@wb^>i+dS?bBa>8|ZcxB!hy+k3QgGmbWp9r`w|z zV={oAE(PAB+5x(krz-h7i&$K$S6i-XC83KmMa2I2B120!W3a3X(zwpo$*iV@7>r|d0%on{5>7zSV*wA;qMZ+iy-1~F5fN*3Ed!E0_wX5bTL;5!QMXg zx4Xv|(4B7*R8i+kQr*Sin!5RVJ>A$^@fLjd7@Vxkf;;qMYDLX*&tuH>q+qap6!73w z&XR+o2kvL>16?wMA)_L?Ce9##YqGed?2)X7IB<=OKhWjMSKW}h8V^aEC%9fxJ*x>2OXrU=mGft^WmCdA;i1b{8oCzW#qc7a;uiYFw*|{ zpv&K;2hn|MKp#WM3OoB*91fiR)EE7*1|ul) zBgV9UUUThEn_-A6Um<~X!=3pK^#zNtW-UHfH^kU-_6d3;jS0X#0lHh7#iJM0#(f95 zFw3g}_=}yBN`3Re5j6~VceRz?>)Q~YW*`qUo$4`iOQ4xSD>!gFozaL zlS02A45f~QOaGkPL()FiFMHs*t23YrfnF~tPI94UW^Tb7U@WJo{bSP8uIKv-eLqTq zI<@3bizLVI3OPa&3P)>6TpXQSdQm!W2%CE}X%QqccO)|4_fnk$UDnf7^uVhp(%ftW z;mefDCFGE?_YNYf&umOqqRTND)?}qLjBZIshM(=l^L2Z^csw9HpReYau(*dWixLa5 z(*o*y0d!ACN40pZqANN*cseT^Nebt_k4nuVAMHLgF=dO_x!5wo8yV)G7ol7+CK5&p zge(LryG&OrR9spVMeAzh_oM>cOQ35i_h~SiJH+=|0|tLE!lVT;Fdc?p-(O0iG7?(f zZ~*e?JshUWGJ!!cRmmjt{kLLL1{jxUp0^GjYwdNk=8ew)_X_CxUrX-qkXT}TTUoRJ zWB3!T9hMm3Bq!SJJYj$ZH@Qx#!>0A#xrcG&`8NyF-=b#if~#H z;Qj`>v{`!9n9)#SEkpQ5=$BU31qcI5VNqKx`rieod6vyPq|@k91{?)&R%V~(-2?+` zrTx4QoW*lu_vXqg63gp>bGuL)$fG?!1G2oK(| z1-eJ3=6~!e5-PUlA?B#PzGrt9>M|4A2CLQuUCe`-)5!h`J;0;7(N`Z`$|e4|L@J>Y zam7U|-hyb{T**v3E(i^%?;X&E^8>M#`c!wr(;4d&lGFa`H!rM$S{;xKi8y*U7b)I9FofdjafO`*gNfY206Tsfd%kdjhX~m41 z_e(>+VH}c!r5hn-@OfScdGlMq>gsfECA16+dE>X|!mn;P4fv!W2fQw?t& z&`nmd9coaTcTW_@rGQNu+?VPg&=u`dmS_bHmib*zz4414`~dk`M`oUnP6e)N|8wo) z{f`G`WNk6AbgBCf@V^21J_22Em9u4`A5Jp|hd~o2^a4rZn@)-g7qLD0EJq1H7l=tH zQ(J_iIlg{43<{e{yNQ)kV!&`LTSb%OVYmx(s)i5(xPO3d^h|(zSdDNDssJ{wm5`qd zWSGfMrJf&ZXiDe?AqbcPbjFgYQ*t2#w|Jx1{(W-|Mw86kah6kVV-LOgK+&f*SL&VoE|PhvN756@en6G_ZJnK80ug*_JD?5_ z|DU_;|EHO!Fqr;rFBWX$fopq530LhI{&vTEqVCJQx|^zTDk=4Nw-Qc(|<_O58Q<^sWYm zltzB~QL-nTIP@5|2#)Tx%{0Z-rDC9qoC2k5>2qCa6r~DStE-EC=#Wz)OG$8nKd?^# z1$5V|9iXm$B<7AuC$y+0$??uU875`;2Tj(2Ie7Ks7JpCp#qunSfGMhN)9zwC(((&! zbJ^V4$~eLB>RS$p8No+DzAt0YYk?nTzb>a;<90kcgnnce zOYxpSK&`9$1c!k=&~= zX`vgS)vpBB< zTv(tRp@Ez4z`;S~cur>fLjpwkx#77lYgGmwO25C*CG5`(z8cHlrnO2xk9zd-7cp&4 zqiKxC>OaWkDv|~+63~nX0QY6j>@`3-5VHyi0&VdS{Zrg$UT}lZLe>XVQR*<0ir%7A z?xdp+irP$Zu=oJv#77^wMk=YPF z<3K1dwi4G86h&SFJ?GQS;CL)hGR<~3|ykzTgE-<(NPwRhHRb|bY= z(H)*r8D_<09!x@9d(*I=8MT1V8v@Ynh~uOEnK?jF)O9BkAw6|4cp;^FNO(Nt_3pRJ zQX`+`J1-78GrW)`l~&~I^l8&1uEb@M!}vo;jJVN-Im=8_KpkH8bY25gQfhu1rQ;?9 z;ma-j72ANkj$_7Gf16UZCglwQg8O!FR)^~;m2Un<)L~E#$o}D)SGKNP-m3**ia^&uUh=mJ53J?}GFNr)>z=w;B%4E&Pcz$-o>`c$=8F;lu@ zY4Y;hrKgV6rRivgTklTkeZy5wEqDF`a9^J3*8nwaL2TMU+bnTiL<&s5doM`O&+>F= zgYVhCLb4og;Tg(*rlz;P?tL7KW`O=Pu*5`J>i*r0%65wUTh+YFprDtUzTV$_IScU` zpoyv+5!_jKp1v}^9P9~g$Hz4%CeBs&)Y8c3RuZfU!ArT@4VaKkF)SCIkJ8wlV}s`V zMe})b1Bqos#d=#f)BqP1=-M9sm^#^(?h|I-{u7T6{dH}=I7#SJ)ZjCmrfiW-DZWJ0 zF|6*yn;#2f*zm3wt_l+fXexSXS5wr%o#`&n2E+jOWiR73KvYHp^gr(3Z>cstBmTX8 zE?cZme-H5%?wZx7t0wF5v3Z}eKnc>L$x2y0U28(or52VCYarUq(^`%P4`#D?iqQP{NM@GL*?%m*NkdNepfK|vC-rzIVu_-zNpT0{`_f~64NyOQ_zvwl)Kd?%xIKj>&heTItDYDwn|CMlTLp?f z?UBn86-Z_QQBC_zUK14~CGBIe6uUToB;)2_t=`1E@I`?8vetMF5HF?={#Nwz+Oa^? zY4Qv=X+M7L=d0SN60Y{|Jda0?0(bKX&iUfqgy+PSPzS{4GuZMY9&U~AA39j(zW5=0 zjR3fBfo_=za__bt)4cm$_w|W82L`GL&8Gw-@47F!zMNL2hl7guY&R`(L?|^PWxO+3UOT}U+{!L(o zYi~-2e9M#VOeT(1(OC596Fq|F%`w#?#6_$7YRf9iBlGS;VkmTn77`VqroPMV;h8v~ z4lidZUju|r2`6{OO2sl`vtZ)xPUu2XRrTwefyBD|!0!{us0KaKJ($xaA+(rn?)(_$ z46ANw@JR$ZL@tk3BTRO*J858Fa4`#A4`?tge6=cRY@8leC1J`Ntx4f{Dw z_hvFHrP0(mzAwsG##7_{;cf~vJ^IJ`L=)U;rj|4m${c|p2G1*#RJ?D>LTnz9zSu2M zj2s5i+0b5uzL9YaW#D><0O)qtbP&V|>BuUc)q;HAXB^o$pV^&g zI2MuoU>VvGrMwow8&L7L<0r@6I@T%0pt8GqRLt zV!nO{L(Jv-vzHuS$8{p0Yx#af)yKIt_Wj0BC>h>EUJ7i`flws-z$6`ovhv5aATK2h zX++1-ep{)VQR3|am!z59K0y+-yLxp2!|IzsXMp=M7QY5)ng31re)?v(@|FUG<(E$a zgG}49e*(Db;h76rjbvNy?=NNSI!7?A*}#)AOpHuj=jId3e%)$D=D?|*r+aA zTN2Q7)X-SFvarlbSfE;;KZdxXkYVj>PVUt*Zr^u~Yh8UIFCdr1x(bO4i_HV>Ly`mC z|FFIkK=(gfzrE~1y$0w%?8{LB-T$yJ_cHf+4N!F><_z<$Q+PHeSUL|DB-ip4@wk(5 zA~yZ16Dg4s6KZ(gZq&-)jA*cKfoj_}CSLS+$G7y}Bs1svwKm{ldOClt*XNi9=zd7j zM_eqYqt^&L1HbD*QX15V%$4JM>#83r^(J(P2&YrkmwX{CA;rR$?PKBMko+$yE%NM~ zO`T0Q%Lr7ToiTv>(o=j5(2Ss=k@`qdTz=!E8frpyL_Y+A@!h8gf}=nBu|&5tg{@-J zl;!sYIEHK-yBL*UNhOuQDaz(R>*b;vW(+F^IRN)%Z}v4n2aX?Q#WcB(YMvyYMkO@Y zoDp3cMmK~%`=zc#HF>hBw}Ip}la3sh|&?Po*eT~>c`PFUs5f5V?N5h;<9^ldg zU3o~@tOkv9edG9SyXQ?PrK-d9piY%Ztfi7r1**pZn~Na=ILErYzuzn%{l<{xy4q2I zki7;OnfzY$D7|=^&jH}RJR`3GLUYFQt+&$b=XEcv|8r-(Gx%)k>I5NT5^b?AUDBjc zE|0L9eY@=uRw8}c?7}6$GjG%0Q;Rj0?H9Iv2fHT=9M>6vE?H;_xhzBi#mR^>+(+7d z`R$ya=T|OQ+Yxqa?eQ&+#Y*s|;cXPI_Koj2-OKb=?SgdF{rv4f!VtZIQQn3}!2LHS zpt}kq7BFK|7}Y*Gf<+@zFB=spf_N5UMM|Vc)L@YIoMW+e=w z)GLFgxz<3b)kj;L_6Sgim%WVF0EMDq86RED^gNPK;hHwaO1db9nzXBof(>9XT{`Y` zO*j{t#ZnNGEK&CBZRBHT0Fl6SakE%1!ofh?Rd&7QO|Hpd7;c4a`>7W9uKvOvUy}vb$Px`*z z;(bPT;k=bsz<3Tb%=edf@ayx&26Ww-lFoCa5!arpV~VbxS_*|+nBnl^ilkM$Hk0*k z@?t(t<}5S8y@ytqI`jL=)j@;B>!G1Otjs%GH%@xV+|~+kU(QOs1_;-@Jbi0UkudmR zP{}C+&hw`|nqL`M=q2Oq0rx(1sDoNO%H^LfhhNXsf4c0|ORCCR_s0ToLj*zmpxSrp zeS-j(1L$%?Oc5D=ETw1RUj5$kYZ{G;DV12-Z1)FFL%uv$=I+BCa^gry;zuR)g-K%1 zZ>q%ZwEQOS%)L0_Qv_a8`kyNRE+^1MnS8fd@6wo^Q<*OAcs~#2BkL_o@*B*I8UZm-TmyF+B|b)T4Dp zc-K#w4{tfOWn@>~va*K|Hxnz>48suP-w-vhE-XMZn(X+V<^Obo?U5Ajv@4y$Th^`V z6a?hU4RlG`G5o03oEw&8rKgu!ir!P&Ra1u*30#&+r|ekTDnMEbNqcDtZ7sJ1$G}Iy z$C|KBr%n|U4fh)viY(D!)d0sG9-zCsJ9_qvfHBqrNhXAh)4q^^jd5O?4;4KUo!YQ1 z)nbXsI6%$nTMAtO^&PFr0^wGuXLrK~gt}kX#4bbcZ*!mLn5DJrn zB+5asy0^{W12RX+W$Ei!=Ndmm-Vo|$iIFg-Jj)K?slRw%0%8Y6B_gSC*TCdNW0MJFvn0zGY zbJOb>BQ>z>F8lGM-eck~Qd&{LGG#&TU)ef!hR9CoRFWQUrrAEo^A15>?h0K(jVen? zd29e%O;iTpzI--b1N8Vtg(Iiklc!6^88K$&K^&`nkW1Ky)E{;kpJ7PHT2)fidtcVBulWiA-SeHK9x0t`X!ROR(rt!sWL8BP z43N<+X;qRBkb&uT*+=|TD}kRTQa*AXleC0fB(p8anOQ_{Wi}v^yX)czzRby9U16Y$ zZ35oH5vgCwjnXj3NrWcv7eh2^*i^ClWVaCA8M!?}?UC4=6%`XvBcL?Q1*iGBj0WZk zWgg@1ldNLf3?Gg+z!d?yw=#df)0ft?{`?B5+&3P`EZkxy5Ws!e+jK{X?M*T_ZA|OKOzKBO3o!>bXA`yJ@Ma^R&j?6K_R(czre$aph>>G&z z-A{8aM=(lEj3-CF9S=+w`$aTtwW0{Z>69yRzvQ}H9#EdvRJKOcnE=YTiKht87 zVdN@cwP~a{?^r&rK*?$1s zm!9}*fHKT?ppxlzt6BUbj**PblS*oeXdN&ycWfB4XHgzbRYj5U^~hyPoIxnEF8Eb= zsqyn1k0A6}l9EYeRQwQK@)+Y;mS~ zO8D>m?B9EU(m+@JX$+dS5BYwalb1&VOi`*fW&`v3pj)dUeMIJ1x=D|Ob-63}=+?4n z#R(1dP$!B|sL(lPfPSL8n~gAvyyWDs1^)Nj+1&pY;AO0M4UpXolz1ksE<8?Q&@Guh ziZKLdW&Qrh?DQHe7h9dKi3MuO_qaT4!uH5L7p3h&Rdr<+MBfR{O!BA}5jmH{m6tL1 z?+>iNUr-k4hO>2xsN3pBk14Ak$ghaX1jJ^Ae#ic`GVTVNvK*xNRMk3U+ibedsUJkd z4v|*8oe;_ByopssejIdV&HjfW<$o^WUsn$3I>puLP}2$izWt8H+J4P_H=YQ^B7VKp#ehrZS zvF5|J+#x2of{6uQB0?1@9-rDM_Ly-}CN;M|6UDix5?W@uCz(nh>Q)$g3VYeMaD0i( z8ezPKApzEAaMj-bT$I1y%d__yAo;+|{QZ3IIK(n}nuw8`5Ty2N4u%lZ2{Rh?cDiUK z6*2WPuo~&jZmQgjexa|J#cmMG!*ZpvafrG&Mw?Dyv;VpfFRlX6eHgBt(xX|?2G!sP zn0*c$FE$r;Byt(}{tK=5;xKvlA_hTig&^-3EV3IrcYh=bmHY4CXG^EoELyp$?PjWg zQU2Hc=bpsN*@D*qsnHl8;D50SRV8qRf78U-ylF%wak9!FPa}e;S6{kgCYV_H%)~4R z3un%3R`1PVAoX3$nuRj`{rE__rr3h%zxM#$|8bRo?&t3p4&TnBvUE&6H*eRL*qjKrE!frCSH*PYoDn0M1%f03I7Mk}#KX{UUV6zd+)Eu^ za(@lb&!{gZKQ!^vkcWfoRqUphl~U$-ug_zjeveaaS#wz;wXlx_D4jDFA%z}xhIRPv zR#$$UNbdM0s3se7HfEk$4RBx9Fs}hhv1>|AS1dXZrnyDdTa0=5BOHcNBbw~C)J zRB#ri+K}l4O^ATd`zK9Pjd^NKL&$lgp@gWl?PR!}?CCJ{9~btYd{u!izhAKid;@XU z7db&z3OkPR%G{y$J%Z+iFKLc%N70G+DzBWH-j`NM*p^+>W|o_FF8nxODB$dubccue zs$}l;GA6t{$1ipG40PvxkF35%(^rLqD^RAG&9#lz()BYT>8(4tn4q^VWH3Wf6!m?d zm$D>^&M`?kF9i!i4?5I9dD78YVI;xxu(bWhh4{x+1G>+#z2V)tf4}CRs#*EY_i|-e zN6qoWiFWs=E)FXTTkzktZOv@FWV$|alv3= z|K_U>bZej@cpk#bm&fDZTA7x|;6>BdvUh>qIx5Et@KM}>_U0=qUzdx`q_i;3V?ynK; z9!1Dr&iYx$Fzm7mYrUi5@F~l_zU=-b$rA*|cFDn{9?A+0(W>ik4Fzee!5P;8q zb{8j&3)YuwYyZ7mHQ9D7Q}0w4n?C2{y)`3X2se!KkNdX_e}8`gx@X$UF`NC6fB!_9 z%4gEAo2gX-K?NiJGoEiQG-JB=VK)35Zra%c8R+Ji^$d@CoE;B;ZIa_y;g-M1 z41XDGUh4beeg(SheAJ}9MDMsoShesOej%D={$Av{9zvOIc=xQrVRy+`022xxR0+;V zy6L&!@5!PAuNxZr{lqX8!7?kbU=rq~_X7U%*OLGK)&{z66phkM{DDk?tkF{+Kve$U z6p#J;zrbBah?vG3|6Za?fzSP*kG34=@AOSVy!OHN^K&Kl>Sad*WD}%1S62PYJNR`z z`O-sr4G<*Jr!i5(vK`rIxbt*HU#?;W0akaIvIf&EXeo=MW^K}#%f#+RpXRPdRIgjzP z70LjJLT)vjvoK!*l9^Bhu9FSY=ukNlBP^otQF2_9e8e7*uO84n6rAjhguJ^Lw}BCN zHNT=^6VUR&JnX$}vw+h8M~3$Ma9$syi%IAUtu=m(?ssO~JL2tx}8iHfw*ISxJe(@}Wxv{Hg- zn~YQAn@}Qpt{Je9J)iFXeZT#CpUeR0M)iL~@Cnc$&!rtvOjkl-%r49$+Mq`W?M zX|SNn4XaSN=#^fI|0F5@fn|X)_$*d({k`fLg0IAldr(=^Hf)I|Q6)l^+Q*nHhohR( zL_i&kfG+SQCe zIk(zk!RYmiiP|W2`6)F~oAJ^kdHtLj1Kt0yuWSNz|HHoW%bNBzK({LGJTk_=!QQpp zCN|!CZWFOv7qQJ0pGW=?Nm^ z)9zNbgy|OM3!8IgHBP*&cw!LdtxRPcX*T@zf`K2_ziwFFzwx`YJ688^{4VW*)%_d4 zOM7B<|HkjqXir5v@PFfXY4i+EJpRt_(&!nSc;JJseCQ`1=Ch?O39gJWc#+Eajo-9n zqebd>G7*Ug^5ZQhD^@hG9BDh?cPt&>Gcz1)*UY%7Vd!Sv0kxxcOqsf94kM0ZU##vO ztqIB-^69>9?p@)lm96-lZ(4jc&$$vCo!&d3$2Q->@U?&X>nW$UD_o75UaW;qW6z$h zkyO`^|CGS}uJUAZ7e*JY9mE6wJaW>A=TVE?$3NQ2brVtp4;FtB=f;DQ4pO z!%wdNblFU|in{vLZl%zDHFlKJ)Q1DlvDJ3td$xA-87%M5me)7*3{E`oR=JXgV>pvk zzwPTdwK~4OvfJ{_l*KdCdGQcFN9X)&-_OzINk@vlc9tHQDY+Lm|1$e(yhHDsDgAgQ zw;X%<#mkuT`eSv)URRxbPB+e1mYnY(o+sYM)5!e^7nhhsOgS*WhU&S&V|D)GP< zXIpd(aO`B8(P-Sh%S}Z>-l9)(@Bp*g;g0Jsd%eHi^L=j8#pHDN{>zS8!wUE~Cos3uB)3Xpcke4=1p?mA4%WIdSfHIVOYgwN27~L&~~RN}!77oMgfHVHS*TAXe84lp&lmgzeJYveayg9s%HO_Nr zHV>nF6055`wzjnQ2J>?vW-9WrO*gH3EUcXM^Qa@=)Sn&}c`(+~ef0qu`J{Vp_fs~y zu!YT!wgfRvJnMWmF1*T;wz$od4Wk=`)&1)5(%(q6VwRwLWfH+e587`C=VCMmHF%YjZmFhk)JT z*5kNy_xX~W?pC=J76jyv+#YAS(^|cuo1LR3mUl~j!ZU$y3Y@d_?=O4BhAG}y{3d^y zeZ6sqve6_)_Y_uF`fY8)L16`jogBS17d5j&dg2OkA9ZPYI;M);6(S$gfBa5gKV%Xh z6I?7c7@F$vW~!07$Gh7-q;!f?qABAtjhT!0gCI5c9wXi0h$(!>9`Q5s+fur1ap#8ZSx*nU zg^omKuC=VTkZF%Oe@SS8_M!K*v#3V6vgEhL^GJ(0F2epn_tWO$xOs!v{nh1yNpxgS zJ&Z%-)^HcHSqf^Wz`rDPhrG~D>G)=?EK$$b@sUi*J*x~UzRod}vyY~FXpJTXqj%Iq z-EgdKvPbP*^Qa(kH*K-Y-oYV}EZld}^b|@qeJJ>ngv0A zc5WHb=6`)o{;~Zr))&ugduA}Y5m;S~%!8@1H2PchXJ(uY?#$kH&P=?bJf^<;%H^2% zG}*dW=o)nRp9b#a7GCd{xHbIft&DKn#Sb_=h5Tf9_ZCB{S&Z%(tghXn`s>1@U97Jv zZ@Mbk9}wI{UQd@Z$FNmgY)ezd-G?=n?c<3TITcKWD35Nxd@@;tMsIh^^U!d+m(=?W zgoHD0VRR$0x~yI=CAU)3(2ckSjyQafDm=)icB*f@CtYYuImKOp+ZAjf@5w$11{owT zut`StG%&5s;qLQQzT9$XMS;eiT{p1n&{?eRRs5m%jDCxCHpV>hlQg+|qD6adX|I;u z#z8)-mqVuAd?r)Ji;*I$jeSvMyE)4!+1=jO2PsXvJ}I>?42zdEqdAP&Zc$j>f%v`r z?^)*N?(%(6j_Us)ZqHsyzMV#~VV&q$>XZ&!jN65~JZE}XcfF}e?9(q8Oid5F_4Y*Y zo`Gww!q%6QEw5vAqp`Z@SZ)el&MMR@XwKv)x7~1H?dzQ_6*QCIbpiu}cvrBTntvTX zVt%>tYvI?=t62p<<1FV_aNfB#cG!GQ)sRsmKVMAA|80(>!worY`z-?UB{%H zO3jk83ydz@iRpK6Ff2;ACRrSE{BGAe^-9sasJ3g&7H$1Qbc16$Hawo998M#(d{S05 z7~OMN-9o1A+_Fw9p3E`zpRtcroN;36&Y8ys8MB3L>T%DxV!fqQCJu${SwZFUW^pfPrr1nc9HzV|Og!)p8_D#JCvaU} z80{>3WVy=qv*fVPEYG1r>%F4y3-_+0?A@gqZ66W0v8qr>Oksh-x5wdnp~@S?<9U%bK9Q|ql@ND z;(?cXhu2g&FLqDk(7+=BkvW%y(YNhFy&FDAwrZ&Knd@lobvPk2b3s6jG9g)i4%@saQ>kzM;*ZT5^MQY08#l&pB z&-w9;#`vjR2VaRh9(lubXUCY|6c-<%_3pEzx+Yxr#e52*n}pRBy}+fC?Z*C2H#*PZ z9ObFDbPfE;vTWAQbP>9@Vd3sR!nx%oQDzszuaZAnVL00py|Q=tLKF+y8LWJYj3TK zNfM}z^z5>@LdqvJbFc~h{uS!UcRrUnVZr_5&g{h3|yKc8q?``i-VZu~ee zLdApU&bdOS>c@qNlOtyux7F~U-8{>}!)5Nt!)-FLNR!z#h@Mr5{UH^rD|KlF)kB*d z`ps|5nD2XY)U6V%Q#(MBz46q!Y`*}lw=9L*75V*mY^<6tQe9#wWZk4%;KXY|JK)-u z-{veIQ-|tK)J5-PhzCCADyQ&;PdQzW8>!}-c9&HbE53fq5dH1~_r=rC+J+Bvmqyae zcTm6QEHRy$j5#>TDfK4)Nbrcc0rOX=C{_j~M7J#77lhUXD^z(9^;nH2nE(W~Kj^`0?$U+8Eso ztZwahZpzj$>FNqCai?oPwcp4{5A0q~?_d5p*hJ{|PW1yX#dP!9k}jCO)0|OIcrm(p zQ`jDg`Z|-*RpAj|b)|AzFuLg57V*IQmWs@Na!d-p&EWRfI=t#A-2rp=D7n;ZTZ2(i z%i^m$CSogd_ermeppgmVWQuXW8DKkRJSeRfkm2xU*v0bTH;nEDtnTnZo%5R(!ZQuC z@7&zBQ_p{!xwz*F-rC&o8;O&ZJ9SL{jT$-7{rKn1);rJUj^?NG| z&bO6*Q)PWhxpG=2%zdamKjA9lNkb`&?j@`)?btcW?4%3RhZ?eR>g+M$XTR$y(^30d zt}bG+Ua7TezhFz#GxzCtpFX>3t*8}LNHSetFeJcrOG*BY#AJI{7}`4#`&kxN_x9fN z7BV-YNAr$-q<_v>jI`jLWuUwu%M%?Z_%rk*D#GDY@VCi01-1dHrgtytwjCpM5bu zWXGb*qnxkSZf?o>EPrU6T4T2yM)wL+Aq2jw6b6D4P_<20Jb9t~tFZp5`Wy?(m5iif6 zT;(w#BmM)67~Nc~?!C-=3#GV3HQ5s!bbN{ec4TBXBv`C0Otu7vm1u@+yJnTurrGK} z*Z1N1U?#tU&0_jT{=u&X zTW*@EBDS2;kg2u|r&AGE->jzm5aAwsN=MyKbi?S~lRJ)U;W>*U?or*A>+GcWP2Z`- zq^7funvEw@TCqYuGX@@p`Y(fr7Dkpu!gQSdQdHNa^w=rlqg2`8dg`&E4-`dlxC7->5n@b zye@cDU1u#0HJI4UmGvPBcmDRKj8nYEp7UC_I&4J6*UDDrwA<+))4}i0Ip8@H%eOBK zyZgHCCZcp6B&Rs^4Wj znrvT>(}!-;ys=jjvHdxQFFx2|%8SMx@xaIHjZ$}8i(XunRF@r+qRGIxGveXl{XRY! zyW3AVJuVRU3R2deyco#MnAc)gw9{czR?z{yj3-e!uWp2?OBg(SgwaKNY~q2ZdCnO1 zQm2xo;`-_G-8bF|1?_K%notr9wqRW4Wp_u9hqg&FB&j7X*u{WCvQznBpj^2*by1hl z;QgCN>_dmvRA6*(V0Ggs&FbYv?PWamPRQGPjQdKI?$vp<)u5H#N5=Bz{Fg63vUbW$ zO7{!riOm{6%xV&O;(CaGnlbY0Wv<1kafw$4FuKK9-73YnVgVNXw(nD79PH}-s?9rA z%>=u?Yc|)^{b>-k$}{S`ua3T&5%cO4pH%&>4-1Ey3#6 z`}NUPc1tkcrjj<;!rfsXpu3;*Q%(InbvoSW{>JIu4Y<(=jh}CKh`Z$M>C5|MFuQYh zYvjh7O}MP{8@r8yu;1TqVs%{wtM=dJn=y1t7i?09IMB&q*V8nZazr$_bm~^~-R=m{ z`!1V$DE(=s>&ohMpBNUVrs+C=z3CE-OLTc7I0SjiI= z80z}isBFeIr0Q7en~_)LnfjEED(AY%X+EbVXW`F!9(tX1=;V!pXI9FJejPV;L_;p8 zDPVMOV|6oDXH_RY4!P}n?@-<9v50uzYvG*hbn{2bK7^=F?B(L?*if-hF|_%Rc}4a5 zyV{fW3j4047nvlinD%^COZ9dbyS|~HSs)(x{sQU>8_V2nm%pZTWW8|B%zf}#%<@LS z{qpy>1=TcTN+l=dn(5t{*RaHmKb{!d6m}}fwSM-5R-Yv6L!Gt9y|Mc!wAK+1Jnk6V z){3=;F2&cf^(TZHGoCf@SS+~zyxgUeO)snOnD#zHOZG>_i^z_cJvgh4tU--9CTZQR zHW6;m7_}7bIe%dMfWBoA5B!72o&F_bueO;yn6c(7Z8R=^Jw`WfbTcb@MZRlG9~;@l z&Apw<*O}zz#h#uxSKiFhxuVu`*UyZdT$%^X3Gh0r|y-_}JpY`0lM|f>=6;AeG!FLy1DMw-LsK%eBQm45T zYB0L!-74|GpH^i}FfyT9Q=IU@(sS^r>WK)-%!^+|Z1FXkwwvBw=LiWi)>pq#8F`ER zp3>yB$XtQiwT-H|1Fp^j^Jn{nD$t&nSl)81u0yKm*DjI$2~%IJ*cv@0Z?oRB`})y2 zDqD&|`r4LO*`KDJch}i$K0&{I*Q56g)#KgYEWTq z$`AK>`JcNOs>5Nc_1@rGZ{xz&yVncPJaL0RxZJQBz4Imdp%Saxqa-X*b4M2cDArJr z<%YmKJMK`)*Zn{DO<74CU#BD*V}0!>)u``w`M2`I_P8OV19feizeQMdWsD954v19g znqYLRu)24qHr*09Jj;2af7daERF!uE_l6#(jh*Re+?sfXee8RI%gt+a^7hY_`qOPh zHmhsx<_`+|aLo8gQ~S~Ug)IXA@b@~ZvAXXrjH$*>;~2zmG}F%vPzN(Tl=Oo@d~{^^ z(uxerz%|kwzUA-ra@X3 z@L>MQ>Qo;gU5xGntgdsjHZS$N4tFw5Q}%~aDJ#yzd8T{oQgn9ie!pJa!eQS6duTG_ zuB-86N5W?t^Yhb$_&em|W{mZ0cc`7+Vn5Q2(XGYm9%i^_ddM>SYvf+PlJ_-qV|k@- z=yOg++@5=L`E5EcPf&1$M)mKXOc}#?&KDi)R&53bnCFX z6dY~$MH1P+7IZPF9&8ldbE%Q(U|eQZ-6KhXY|0<4Tk^*G-thDW${U&D#?3VR_VKjv%kh!H;JtKYSqyZJBDYc z`2NaT`MfSUy+g)~@ss}6jJ=A6O<&4}TezDTA13pnZ>7Zk`w**}tt7vaQiG=JihhJ+ zu>W}b`WPaJlk$h^-kM?Qaw(DLsZTnUBhqNcoR;!#0Hwxzd9_-1KF>Q6?>r|fT zEc&KN)NR1(c7>NWxl3_=h`e)#zj(OCw~_3M`Msx6rYnLBi&cWV@rEWeT=Sw6PFm#s z*J7l{tleumsd?T|e#khHF8@;X_)&~5+M^H;{9_hwo7Q!m>tCeC)kL}Wc6f@Xuzzcb zUJmBr%bj++Q8xxlS{(Gjq{ps3gq&w@5z3gUfEQBAokYi#$#U$XCikP&L3{3 zdQ@>$SdBt#tnc$aj4t{XM?CNeSyHWs#G|&?yLs0$*!~ZBj0T0u+LddSY409d=1-~A28zTru!qs z97DGa9$VD$>fsY5-#e&VZF_Ct`Awco%X$9Ste^9Bz0_rHM|7*Wf758pt?GVU^5~!y zro2zEx_{%(fuO!jJpRt#-)zC^+NFt1x@q)}hA86C2&v6qw9z_ccR&YsgWZ|pZmM?7 z_`?Fdu%VRqg)>Keo^Uvp*=TL8`!;atsXd=w1~2@h-0m1ZJjLqzNRiEE_}sr!Y*T;W z{PXi(es$(8$#OL1uWT!sZvE7cdv~Jm$t(3W5y63*dK(t5(2Oddb1jUS*Q(=A^ttu; zCU(3%!|HB39=zM_7TxGtVK0$KJfCwWa=e=T4{I>f-Yh>cB5|bT^W* z?95ge!A4_BwLa|AWX?mX+}`hDa^iy$d%mkZ-y^{C$?({Hj(C0SxOjopeR^8Nc^lOy z_O-FuwmOX~HnHeGdnuQySN(HPWhLJe>ciVV4E>OZx}Dg|`^ra%|9`DWI&TT9Jfzq3+vX}K0)b2zk9Tpy#`iq*At z9MPzGU|lCklVyE`J5gs}6>oC#NiA9Nu^`__$waBlwX_G_C0Bju{%phcGrOGkvTkqK zgnxuO*+cD&x3o>zeJXm^ARc&uh_)u#2R^jj6IbOZ)y~?goapr`wj2&-QMaf3Y7(f9 zJKAP?Ib?v&@vFmBY&7%p>x-(2ssr?<(vyza`S;$@V#?c&)fFD!+B=@qvfWWtZ#4Mo z58n?;>uZeedCxvf6<4$glxEHHrZLf@+jy`)v19GYo7b;juH4VFbND#x8vnS5UK{i! zF}ldt!~-voW@I^7S$kDdje2mq4^yn!LYZHwSzarbTCsL1@1&Zlp|a(X6vmx#$1_?h z9LRNFIajp>MO)Qvp7G#pOAEp7t6yVvBgVM>%SQrSem0SveMBEZ!Fll1PvfEYZ>{vT zEBaTjj1=Bx@%_5cR<=7VSH=pM({DZ7*dEg@xxuJlX_wZHnQ z=av4Wxz{Ih#gz-qef_KV%NM_FrhUo(WDKL*h1Gp=|6Wxa&8^3w%2oTVlpiS$>{A~~ zwmiMEY>W8)o9j1A8N_HlOqaQdPd^)KaA-ze!g~!xQsWAV_>|2r#VdX~oy6#(y$|ug z+vpqd-x-f%RP)gt^UB|I`F<4FmV$#n;(g6uRi?^~jn~N7kk!eKQ0i?AR=<-g4t=umcycN+QVJfePz_D zmSSu$?xRT#{8*UNg!gTJ5xPHJqvyC|3wiW5M~c7+ZjA0*tnR$DdY?=}%KKZ5l!FVO zGTpYAH*8ApEz~?+G7@?^Wvi#jTAAr?tL@Jh8ycE(ukc!3JAKwNqicPQN^Hf7JGZt; zVRU=3x^=kPEJgB!pj)H0UxGDnsV6e`1RqP$YfUW9qLorszIZ#`VavSe^zFRuS2ujm z$fGE}u;UWXrJ;-7*X-<{pL-*M(S3*2Wm;A8;+albvLF?&zG>v*v`FjdgB<2(a``{| z`Mct2)>)mnC!z83N!;bxf@!MEHJ3aSbQTX)KN-4gt`#F0=tqOm?ZfKQnD%_ud)Jov zOfGg${bt@l4mnS~#Yn?`B8Zd_H;U7(?=lQ-Rv? z4+I>-(O!hO-+7PKrN~;X?s|*jqNq8O%oVlB{p$^VS-jSy*i@GD)p~z=$jq51TdWmZ zcAmOgIpEt!tJw~IN#iVb2J@>%*9FfWnqk7|e!%J;?c`YqXxbD#pr5)W)BIc~`%#h3 zT9?x~WX-|%XxbT>%7^3Jin#S2>I4;}i`^eR8)Q#^Ga)c(beC|qOw^>71V*1d1AUkI;pjN zU48WMBQDQ%{whNcW}^0eo)29-*qUGKZ7`QDxN83Li=Ms|1Nk($jL)=&!}~V7U~~tt zx=+kRWRDzgOgn6Db4e}che=j_8ViG^&CX$Asn+pAzR(bXhNRi1psOsOi(>oo=Oc^C zRHb`PNgGb_m0h$sB5#Ay{fyNWVp>)BOhbEkG(hDuWkm~DSz_9|t}W)ew68DRP@4E? zd`0xtQ-jA(%i_tUjC>V8j_%E@Wk1=f#JmvXw^NC_3hfz){cI4cOE$xVzkgMsU1EV!Q;cb#xUELpbnxpMT$O^xIt8ULuGtd_Ctbgy8V`sL~sMYPP z%M?a;2&;Q0C2r*_H5)HhC4XaCo?yAjt(51P+>+UEd_N>$|M7C#pn~Lz=nu!*o$Wsb z2*e6LsBLJ_S4xoXEW0#6%VhRY7^6Fk)%~V9U}5uCb;X;zJw7*Q)=Vijw||Vvo>8LK zd|VTJThL^kM!fmEX$xJ)1U3ui?-gY1hC(OwSGxMc4+P6!0j2Sclp8`Pgl6KIBZd|VCPiW zn~}HuoG5l&e8K99Fx!cGF2-vf>wUWhf4ihX=e>}0BHPDTM!wXmeQqcwtSa!zy>m66 zpE7qrhptC8$#zSs&SY2cH$J}W!eT4@=rH9S#p?cz&#_;zy5=@X0e5b04F29%+hZ^% zcDgTy)Bm-_*T`JC@$(ssroBSlZxr`Ge46~=0Pkm!JJP1(h7BhRU)M;A`+2gQWGO_? zK*WBA)==Vsf6Ejgd5y<?fM`?pDRrVLaK;{sLn~1GNudcMLJq7)r5suMgwM zJE*kpfcRiP7ju*M#wX;qUvt^;_n%^PzhQOx=llj<3>#UgZqp6ADWp~Lf%UCgA*aRu zb$m?EoDZZtDj2*cCAqi5e7bR#t~6cSw$xeZhu%x8g+}}OPq%#HwqkV0vAT1LogZ87 z^{i_Oe;kBo^?2}XwdTaEkgE9?4Zni)%|p_PjyEmKXCrji*=W94wQC`rp|e&!fphok zhMbCtJ#!n7Pl(0W5=Yle@99_ytoOiY`*y>|C5 z^YqTP^c{$pH&l*UWO?yy)0|BJZgjC>&ol@6Mo841#Oij2zgQ_du%f%FR%gRx&>F^a z4&4PQUVp#d{XS`oxo3rL@&+|sDSuSmkzDJ_PVq6;s@DGL;$dEa^8Q76zs&*I_3b-W zx8b8)&YSYF+ycAX!gM_eZkJ2;(|@}Dq_awoU&X}SVJwig%l7j=!QIZ4U+m$X#670L z)}DvW4GZnO@6s~&lc!?Ji{=XAfj55VG_Opl&n38pKj6WWpHFh=<_u5hpXokW=)ydE z-;Z6~__f&ab^aTaBK$5ZMDg7W3tpI7eN5bIQTd8Gi_9$pjP5j6w?)35;_>FxclJkG zso4hG{eL_lzo4}1tFq6HvILc)zVF)f*QR}HDvbx$XynV6uJyn_o9*R_+Nz~c|EXv_ zPDBf%i++}ec;Lw&ZfkhoxBDztv2ofq+QBxmKyHs5`nY`!!`|<2G(0`q8c-m>ey7mX zvck8@FK+$4w;YxQ_veaD{BNz3p)gfl#OTgqb!!~^zf&4Mo!z#gFmm(mHLlIC->&SS zsY|`{^@mCGefc99cUYa0?C4_$>`tAwN^LU_a8P)i*md%dlUUo{qjRFz=gm2+u8dZF zLDRSB^Nk)`{p8MF$V$6l+D08QAZ&SAb4A$BU<>=l^!c)WR%yvC)Oq!sQ`Zf@u^Q<6 zKQZWjU&*m)<>9lK@}g$~;(@1BpSsqlO|_Ha%8Au$wc=ej?u!%ceev`5xt6O5^r^Wb z4)Ocmey8!8=y6S);hIw(lhYB}B@@e$mi4YI{)l=L14efqtJ^Z2sS))s^xDZF;{(S7 zEDz3_duk3*wc|G*9IT)ozI)H;glg`JM>JHL+3bb!j-?m< zEGBVWEMRrb-d0s#&W*NnUkoVxA+)8vSzA^-ic=>Ej&GLLLb zOnP~iGLg-gsa3p2LjKgoOU)5OiuB_vtkxJud0wx+ULwjBaAK8+%#Jk@EBbL_bUzhT zFIjwi&5)F6`42x=fqo5+c;LSjJHOkxAa_K>du$?Can%(^#v=2F=0?)ZVVCZg*zAd0 z6x;XmLS<GBW6Dd0)xD^^Fsait!+QD1$tvTQ z-$y2H8O@&fBD<3z6xZ%|l$ zly`pS>Q}oJ=j3K(OBn_;UMpTwJpC$RkNtyP;X;CG{ZCX?s43!tF}irH?%%i`Q($%Z z6L#*#NpsUKMvF+4w=o-*_sygpxuNI!V$`42xn}LhmM?FVSZ2~zyV7!4-+L{4h%@wD zXW%97CoOHcg?M9LG&d6cONrGz5=yCjxbu6O3r`xY86tx&vW zr$TO9DOG!)Ew)*>I9zcLh0a}Hfy+;`R2({!eyD|hL(eKiT`H{ZMEX(O2iluez6U7! z_udm750bNze)azPPfp2~f@)i%>l1h;=y!DuwKDveWWSJ`p{*Czpf1Ws_qg?>uSf0$ zY5|NcHCDHZo-%S{l;Dlaa>|Xl5o8Q!#2h1Tzm#Fg?m7K^#nsgD+HtYf8Y7>mD-M3% zFfo5VcxC?EU^ChYjlKr0E&X=U*zZF$SlwQY)Y~iGJ$wIZb0kOPTuRPU-;;ZDC_*wn z_2sgqQW&X7*AJg?d^_!bZ<8fW>i+0&eMUnb9^Xt~=AZUDCMe8`-LJ32>VAJHp6N;X zs?S~Ry~X`%sa*y`+%kryU9`{hns@l^lo=k}X+6KI!##sBLRjQ*gWh2G_q{b( zsP28>;H&y&;74kXa0OY>fqQ;gdWJk3&id}gzL#5t)n#PIUG4uQvOf9l{_Oa*w40c> z4fR=07!(WE1?jKc$YbWG@opdWBZF5FE3zVP8^70NSMci-o9$pgC~)P+<5y{-A&7a+1pS|Go#%u(Vx`!>xqA<^pHB|Bw0{8b@_7h-m*!>x9au z!?f)Ce^yUIc_gg;&)XHEPLzk*9WwxMgPXp|4Vz@rAqw|`X8F_ zZJeEi|B1`$(z<$A2#161ThRX?*ZzN5)nCn>Xnd~%u;ZMtU)%2CderV;?TBBM`Cnb8 z|J(Va_Ha=kjlsXu@5rZnRsQp5m%lSllGcCC1B7|#pSr&N*Glw1`)<@86nk+v8q!|i ze|AUsH?KYFr#lTu>*c?BGyS)VhuZh1=|8^bLUH&*I2=7@ZbESy5clu;j`qLp08+x= zdH_8yh{00}8}tKhICEh7!*3Ij3?vVbJV5dQ$pa)0kUa2z)P?Su_H?CcabiHU6Tbn>@zwHMqZvB}EW z$-%|d9{w)R(y{n+`9K%7@JCS4-$9{RvMgUCc?A4z<)x#ZaL)?3T1AL^NQlG3HT<2^ zrK16(1%F#->39TjNQ)9!yBvjUB-}>@*YQXcjwV7JHH0N0jE*OSw5S|Xgt!*MeW)%w z32{#eaqzcQal0Wi6#a}4hsyhbaNl!6+-ivHhcGJF3&NQW!XF9uy&~L)>NP-!YbC@n zK-?%Ht_{veV+|lci0dHS#|Uu+06Jb1;*d|SEydt)ZwP6TPk0D%U4;9X;d(0}uA30Y z0@wV6xE?~>I=H?-@ZVd49xKG<5aQku?pu%IAdGz5M~H*JNs7xQ#JwlPZGgB82qS+Z zpTU1Pc0dGG5)R}u6t@xJhdAU%?E zQ-nA{2+I)SrU`MVUJU>`W(aY@5Z;L*;FyItG+wp?{t!la{UqEc0%1AOLwO;hB(RbV%u2B-rXfF_^?>;bfa zy}&*|2haud0DWLTU;r2b2LL0$7%%}20;a$YaE=0?2q*zNfn9(KpbDq~>VO8I31|U( z0Bv9|;0`|V1b%?l0)W~c%?)TSK;s;ZYc!70xE%!0SVdzKjXN~Xz5-(a8eeFB>jco8 zhUPF{fDhmY&|E192m@k(IIs!W3~&K>U;xVT85jhHfiJ)WFbRAIrhsW+2ABorfFHmI zpbzK)vVk1nGH?aB3giNLKt50aTmuRLH0QDaX#Pa=C7LJDoVGNF!Fe-)#yT3?TY+r= zFM!5oI`oT70L{f0flELZkPV=@_%d(>$OZC%HXsFv0-}K!APwq#4zyx{BnT%1DL^a` z2be>=1z-uBgX^CfTkwG+Z~{09gaDyH7!U!R0V08OKr9dsqyT9^ zI*Sd zzZFmxJkSB*3ZN1=2-l%-Zw=h@0C)&=!F4zA3TObdfxWPYe&EdI1CsfZAh~l=m)zfFamK!z;%ER z$cOuKAU+q!0L}p0A#OXQ;RghOWVr7vunEGOfoE_}1zeW_cYx!77a$0r{niVh3@C*A z@_|eM?XS>&N)X@%%8>@p329`3mvFxiT%-MvG=TO%!hj;!5IX>Wu%o?)xKAGLL3@n@fGJ=A=m8plCZGj80dxRepqQ|)VBHD{;rP$?7ij)L^UxsV z^&V)2G^h=f;EehkTC3FoHDD)z`T!~q@>?#D1zZ9y0m^kP@h7zL30P1Lui4O00n>tz~%q352A!H72$dt zoYB6A9#{>m0_X@~1~{())&fkxW?(D832Xs40A^qVfYwG9U>(2)tS4Nv!x^oYJOE0M z(ryB{0WJVt|2Ylnt7!d1^C9YI`~Y!|lz=cAvuJ)4Cxp>>mIkB%)W6W!Rsc{xLcT#h z+XW#1?F4oMs2`zt^t6lm5ejPqsIQpQ$gagNcQ$R2f1e^p|fk5B{A&lDkG!TNh z4uxufn+; zxC4{|w*i#bEuaKIbwvkJ2Zf6v{swRzC;|$BYd`^z599$i0hDGJpbYE;%7A;oUEncr zA3**??SOn<1t9+;-&X>ttx!8X0+3H@fNB8wwgGqu)B|-uE${&N)xC`n{}N~ho&Ya^ zXFv<^6nGAx=Ls1AJzK~DX#dO%$O5Ba?*&94yd6OM>sGkl3TG~0Gl2T-MmVnn_#lkZ zt_7HYH2^)Z3ZMmO0BV2=n1Or80TW;h_zIx>hJZl;_1(|F0Pqp$2fBa{z&iky>ow2; zp#Ibjv;l8{9-tdQ_jdws2xnrr53bh$?}1Oi2rvwM0loo~zy$Cem;$DOS%4DCjR)o+ z`~z44VRC>B_zBkwz&x-BpoyB82Z~2=6cD!(paWI|$S)|&03g3I!Wr2S$WJT)8^8*z z2Q~og0P^1^0PQ6?fD}l(1<_4XC=Qhwor&?{5Jqi94-oqa>Z@oEfu6yn0ZHH>#G$-R0SUO40*E>a5Z(dE z1K7Ng9?BQxiO#4zsE?xhp#F&B(7LG#r~tbFWuOA$vw-`+Zn#EaKRBa(gBxHE*RF6z zWpaV@QNS5M`&rbN4#U|2umP+AD*)w%<^a^^&>7Vct=%Y0Jhb3i3F0;X6i>7h&kk@8 z!V>PY0L%e1;1FO690W`NW55VF02l%Wz8GtnMX8SKGu_6N}XiLTM!=>!k}90yJULBMmM z4|oUk0&jsH;01vCbqnwWXaX96$G{`tAy5z00jB}v??^Z&0Lj1^APEQqVt{ZU5r_w3 zfe--QkM2YFgc8DXpc4UMbiXWwqcQR5zO%r&KgA*aC;;7y?m-aKAsg}jI0&Qrh~-3i zqp~17ia!saIFv6c9}3q34}c5+rKtpBgB zk*ygZ&KGE0KLt?Vc?4j~@(iwt^}uSOI-<76-iykO`ZgMu$d39n8Y{&9jQa9R0QF6z zh3-Lqe+8hi^=B=jMl0CRSV2DR29U42fKC9l?JWScCF+}P0P0(BfY(3=&<-GNq=z(6 z7@esJVPd^d`B8nb<@nF8Q5xh=bl*qdHq^Zz&L03}2x|jq-9Yi5A#MQp1O&siGJw*2 z0nj_G5jYP6Lx2V#26ptm3)#`TFF!ah04pGj9_oHVcpCTtd7eu|?Gz!5u8}r6qjbc3(6tB@K@?boFgAarOAcit1CTDt7nL8S zK~O_HdY^~tO#x>-KnW1_i1j7D+q(*RXb_&qog?8!I9Bd36_YaamVqypQvdPpU-Tcp zSgwL4i;a29nqcnz&D3P(qB6oF!eY`8i{9!7MO0jU$?E$;kZ2JVVF$}vu&hjyj5sc2 zyB93t!lJ@ZEL1Y2HYHRXr2DDI7o`yqmJk+|vh#Fya`A%s+aM_521DKqHJOaCxHw9) z1JW=-n)hQ{d-$bYyC99Uu(+tO1kTOX)62%w6L-k!Y14={bud_DKulb8>B(>p~w z_L@ku4NBX~m((PM#h3S{sO3slbM&8y&KClUD5yaiTW6mowdzy0x2~n_F

SqBPo2 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≪vu+~H>9 zOBM*Wfo*JCK3cV5-}?+k06W0|v@it2`UY2hgG;=J2*}493mLop4zE0pjo(5Dsxl}A zC4;%4C~>katW9)xPu*tuw^Y<)=J-}g@4SBBe!G>^&yD5$R#*GBP- z;r4#1mG#6MC^i;|h*{$mh9oP)lcc~oI47hs5=lMx$8mM+&8Uthn_y;9unq(T<=BLf z9Esshf&OCY7Eo+C^4ILK@dZ0A>(3xh^}99lgPk{VT3ur1>?FRMk#o8dP&szVfl_d* z3>dS#53I8WkR2lIs&EQy9R^ABF9w%+YaBHv(+xQCiHEmSl%eg583mo<#FA!fRREwu zws2PT2Xzq2{vgJT_-0cEijZ$_pp~i!U<&CX#hIzFA_{F`Ify3^4N6uzcnFV2}jr(XUhA;e<+*PwGmRm#1mn@p9ZQay&;Z1Q}Wer3N znij8q83fGA9^U~#Ax!pzNJ5kecN3Bi*-zSwjTiSRhe*-Al>}wG&xma&FJrjHRD44T zxvxxE;f#6$D6E30eTi+S2nH0DH_=YU4j*JXSkVBMaY%R85q(QF#mR?Bzl6Q(Qdn`g?)BAd!1bg0jGbt}G)zbCx SlUsiT-S~xG8~OkA@BaZnIY~YM literal 0 HcmV?d00001 diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 7313f02d..83b98955 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -8,6 +8,7 @@ import Proposal from "./components/Proposal"; import { CONTRACT_ADDR } from "./lib/config"; // import { useAccount } from "@starknet-react/core"; import SubmitProposalModal from "./components/SubmitProposalModal"; +import TreasuryStatus from "./components/TreasuryStatus"; function App() { const [isModalOpen, setIsModalOpen] = React.useState(false); @@ -34,7 +35,7 @@ function App() { setIsModalOpen(false)} /> {/* List of proposals */} -

+
Proposals @@ -65,6 +66,8 @@ function App() { }) )}
+ + ); } diff --git a/frontend/src/components/NewProposalForm.tsx b/frontend/src/components/NewProposalForm.tsx index 06ffa561..7f5eb29c 100644 --- a/frontend/src/components/NewProposalForm.tsx +++ b/frontend/src/components/NewProposalForm.tsx @@ -1,8 +1,9 @@ -import React, { useState } from "react"; +import React, { useState, useMemo } from "react"; import toast from "react-hot-toast"; import { CONTRACT_ADDR } from "../lib/config"; import { useAccount, useContractWrite } from "@starknet-react/core"; -import CustomProposal from "./CustomProposal"; +//import CustomProposal from "./CustomProposal"; +import Treasury from "./proposal-form/Treasury"; const proposalTypes = ["airdrop", "signal vote", "AMM", "governance", "treasury"]; @@ -15,7 +16,7 @@ export default function NewProposalForm({ const [selectedType, setSelectedType] = useState(null); const [payload, setPayload] = useState(""); - const calls = React.useMemo(() => { + const calls = useMemo(() => { if (!selectedType) return []; const typeIndex = proposalTypes.indexOf(selectedType); return [{ @@ -47,7 +48,8 @@ export default function NewProposalForm({ } return ( -
+ // + <>
{proposalTypes.map((type) => ( + )} - {selectedType === "treasury" && } - - {selectedType !== "treasury" && ( - - )} - + {selectedType === "treasury" && } + ); } diff --git a/frontend/src/components/TreasuryStatus.tsx b/frontend/src/components/TreasuryStatus.tsx new file mode 100644 index 00000000..d85300f7 --- /dev/null +++ b/frontend/src/components/TreasuryStatus.tsx @@ -0,0 +1,56 @@ +import { TREASURY_ADDRESS, ETH_ADDRESS, STRK_ADDRESS } from '../constants/config.json'; +import React, { useMemo } from "react"; +import { useContractRead } from "@starknet-react/core"; +import { abi, formatBalance } from "../lib/erc20"; + +export default function TreasuryStatus() { + const tokens = [ + { name: "ETH", address: ETH_ADDRESS }, + { name: "STRK", address: STRK_ADDRESS }, + ]; + + const balanceReads = tokens.map(token => + useContractRead({ + functionName: "balanceOf", + args: [TREASURY_ADDRESS], + abi, + address: token.address, + watch: true, + }) + ); + + const balances = useMemo(() => + tokens.map((token, index) => ({ + name: token.name, + balance: balanceReads[index].data, + isLoading: balanceReads[index].isLoading, + })), + [balanceReads.map(read => read.data)] + ); + + const isLoading = balances.some(b => b.isLoading); + + return ( +
+
Treasury status
+ {isLoading ? ( +
Loading...
+ ) : ( +
+ {balances.map((token, index) => ( +
+
+ {token.name} +
+
+
+ {formatBalance(BigInt(token.balance.toString()))} +
+
+
+ ))} +
+ )} +
+ ); +} \ No newline at end of file diff --git a/frontend/src/components/proposal-form/Distribution.tsx b/frontend/src/components/proposal-form/Distribution.tsx new file mode 100644 index 00000000..2f549308 --- /dev/null +++ b/frontend/src/components/proposal-form/Distribution.tsx @@ -0,0 +1,73 @@ +import React, { useState } from "react"; +import { ETH_ADDRESS, STRK_ADDRESS } from '../../constants/config.json'; +import { toast } from 'react-hot-toast'; + +interface DistributionProps { + onSubmit: (calldata: string[]) => void; +} + +export const Distribution: React.FC = ({ onSubmit }) => { + const [recipient, setRecipient] = useState(""); + const [token, setToken] = useState("ETH"); + const [amount, setAmount] = useState(""); + + const handleSubmit = (e: React.FormEvent) => { + e.preventDefault(); + let tok; + if(token == "ETH") { + tok = ETH_ADDRESS; + } else if (token == "STRK") { + tok = STRK_ADDRESS; + } + + if(!recipient.startsWith("0x")) { + toast.error('Address must start with 0x'); + return; + } + const amountWei = parseFloat(amount).toString(); + const calldata = [recipient, tok, amountWei]; + onSubmit(calldata); + }; + + return ( +
+
+ + setRecipient(e.target.value)} + /> +
+
+ + +
+
+ + setAmount(e.target.value)} + /> +
+ +
+ ); +}; \ No newline at end of file diff --git a/frontend/src/components/proposal-form/Treasury.tsx b/frontend/src/components/proposal-form/Treasury.tsx new file mode 100644 index 00000000..31f37e71 --- /dev/null +++ b/frontend/src/components/proposal-form/Treasury.tsx @@ -0,0 +1,74 @@ +import React, { useState } from "react"; +import { Distribution } from "./Distribution"; +import { useAccount, useContractWrite } from '@starknet-react/core'; +import { toast } from 'react-hot-toast'; +import { CONTRACT_ADDR } from "../../lib/config"; + +const treasuryProposalTypes = ["distribution", "zklend", "nostra", "carmine"]; + + +export default function Treasury({ + setIsModalOpen, +}: { + setIsModalOpen: React.Dispatch>; +}) { + const [selectedType, setSelectedType] = useState(null); + const { isConnected } = useAccount(); + const [calldata, setCalldata] = useState([]); + + const { writeAsync } = useContractWrite({ calls: [] }); + + const handleSubmit = async (newCalldata: string[]) => { + if (!isConnected) { + toast.error('Please connect your wallet'); + return; + } + + if (!selectedType || newCalldata.length === 0) { + toast.error('Please fill out all fields'); + return; + } + + setCalldata(newCalldata); + if (!selectedType || calldata.length === 0) return []; + const calls = [{ + contractAddress: CONTRACT_ADDR, + entrypoint: 'submit_custom_proposal', + calldata: [ + selectedType, + ...calldata.map(data => data.toString()), + ], + }]; + try { + await writeAsync({ calls: calls }); + toast.success('Custom proposal submitted'); + } catch (e) { + toast.error('Something went wrong'); + console.error(e); + } finally { + setIsModalOpen(false); + } + }; + + return ( + <> +
+ {treasuryProposalTypes.map((type) => ( + + ))} +
+ {selectedType === "distribution" && ( + + )} + + ); +} \ No newline at end of file diff --git a/frontend/src/constants/config.json b/frontend/src/constants/config.json index 62f6b5ad..66508463 100644 --- a/frontend/src/constants/config.json +++ b/frontend/src/constants/config.json @@ -3,6 +3,7 @@ "API_URL": "https://api.carmine.finance", "AMM_ADDRESS": "0x047472e6755afc57ada9550b6a3ac93129cc4b5f98f51c73e0644d129fd208d9", "GOVERNANCE_ADDRESS": "0x057dfabb5a506bfd1937062562a1adf45c7c4c62d0377ccfc59a0b42d7ab3212", + "TREASURY_ADDRESS": "0x4c990da03da72bdfb10db5c04e8aaa9d5404a07fe454037facb7744c132d42c", "ETH_ADDRESS": "0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", "USDC_ADDRESS": "0x053c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8", "BTC_ADDRESS": "0x03fe2b97c1fd336e750087d68b9b867997fd64a2661ff3ca5a7c771641e8e7ac", diff --git a/frontend/src/helpers/tokens.tsx b/frontend/src/helpers/tokens.tsx deleted file mode 100644 index 7ece17dd..00000000 --- a/frontend/src/helpers/tokens.tsx +++ /dev/null @@ -1,47 +0,0 @@ -const Tokens: string[] = [ - "BTC", // Bitcoin - "ETH", // Ethereum - "USDT", // Tether - "BNB", // Binance Coin - "XRP", // Ripple - "ADA", // Cardano - "DOGE", // Dogecoin - "SOL", // Solana - "DOT", // Polkadot - "MATIC", // Polygon - "LTC", // Litecoin - "SHIB", // Shiba Inu - "UNI", // Uniswap - "AVAX", // Avalanche - "LINK", // Chainlink - "BCH", // Bitcoin Cash - "XLM", // Stellar - "ATOM", // Cosmos - "ALGO", // Algorand - "VET", // VeChain - "FIL", // Filecoin - "TRX", // TRON - "ETC", // Ethereum Classic - "THETA", // Theta - "XMR", // Monero - "EOS", // EOS.IO - "AAVE", // Aave - "MKR", // Maker - "KSM", // Kusama - "CAKE", // PancakeSwap - "ICP", // Internet Computer - "FTT", // FTX Token - "NEO", // NEO - "MANA", // Decentraland - "SAND", // The Sandbox - "GRT", // The Graph - "CHZ", // Chiliz - "ENJ", // Enjin Coin - "RUNE", // THORChain - "ZIL", // Zilliqa - "BAT", // Basic Attention Token - "CRV", // Curve DAO Token - "1INCH" // 1inch -]; - -export default Tokens; \ No newline at end of file diff --git a/frontend/src/lib/config.ts b/frontend/src/lib/config.ts index eb739714..09beca7a 100644 --- a/frontend/src/lib/config.ts +++ b/frontend/src/lib/config.ts @@ -1,5 +1,6 @@ export const CONTRACT_ADDR = - "0x057dfabb5a506bfd1937062562a1adf45c7c4c62d0377ccfc59a0b42d7ab3212"; + // mainnet: "0x001405ab78ab6ec90fba09e6116f373cda53b0ba557789a4578d8c1ec374ba0f"; + "0x057dfabb5a506bfd1937062562a1adf45c7c4c62d0377ccfc59a0b42d7ab3212"; // sepolia with treasury export const TOKEN_CONTRACT = "0x2b91dd683bc4bcae7a9c5d0cbeba0e8d62fa657742e4640f1e8163dc10e9bd7"; diff --git a/frontend/src/lib/erc20.ts b/frontend/src/lib/erc20.ts new file mode 100644 index 00000000..00c3ca0a --- /dev/null +++ b/frontend/src/lib/erc20.ts @@ -0,0 +1,1059 @@ +export function formatBalance(balance: bigint | undefined): string { + if (!balance) return "0"; + + const wei = BigInt(balance); + const ether = Number(wei) / 1e18; + + if (ether >= 1) { + // For values >= 1, show all digits before decimal and 2 after + return ether.toFixed(2); + } else { + // For values < 1, use toSignificantDigits + return toSignificantDigits(ether, 2); + } +} + +function toSignificantDigits(num: number, significantDigits: number): string { + if (num === 0) return "0"; + + const parts = num.toExponential(significantDigits - 1).split("e"); + const coefficient = parts[0]; + const exponent = parseInt(parts[1]); + + if (exponent >= 0) { + return num.toFixed(0); + } else { + const decimalPlaces = Math.abs(exponent) - (coefficient.includes(".") ? 1 : 0); + return num.toFixed(decimalPlaces); + } +} + +export const abi = [ + { + "name": "MintableToken", + "type": "impl", + "interface_name": "src::mintable_token_interface::IMintableToken" + }, + { + "name": "core::integer::u256", + "type": "struct", + "members": [ + { + "name": "low", + "type": "core::integer::u128" + }, + { + "name": "high", + "type": "core::integer::u128" + } + ] + }, + { + "name": "src::mintable_token_interface::IMintableToken", + "type": "interface", + "items": [ + { + "name": "permissioned_mint", + "type": "function", + "inputs": [ + { + "name": "account", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "amount", + "type": "core::integer::u256" + } + ], + "outputs": [], + "state_mutability": "external" + }, + { + "name": "permissioned_burn", + "type": "function", + "inputs": [ + { + "name": "account", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "amount", + "type": "core::integer::u256" + } + ], + "outputs": [], + "state_mutability": "external" + } + ] + }, + { + "name": "MintableTokenCamelImpl", + "type": "impl", + "interface_name": "src::mintable_token_interface::IMintableTokenCamel" + }, + { + "name": "src::mintable_token_interface::IMintableTokenCamel", + "type": "interface", + "items": [ + { + "name": "permissionedMint", + "type": "function", + "inputs": [ + { + "name": "account", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "amount", + "type": "core::integer::u256" + } + ], + "outputs": [], + "state_mutability": "external" + }, + { + "name": "permissionedBurn", + "type": "function", + "inputs": [ + { + "name": "account", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "amount", + "type": "core::integer::u256" + } + ], + "outputs": [], + "state_mutability": "external" + } + ] + }, + { + "name": "Replaceable", + "type": "impl", + "interface_name": "src::replaceability_interface::IReplaceable" + }, + { + "name": "core::array::Span::", + "type": "struct", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::" + } + ] + }, + { + "name": "src::replaceability_interface::EICData", + "type": "struct", + "members": [ + { + "name": "eic_hash", + "type": "core::starknet::class_hash::ClassHash" + }, + { + "name": "eic_init_data", + "type": "core::array::Span::" + } + ] + }, + { + "name": "core::option::Option::", + "type": "enum", + "variants": [ + { + "name": "Some", + "type": "src::replaceability_interface::EICData" + }, + { + "name": "None", + "type": "()" + } + ] + }, + { + "name": "core::bool", + "type": "enum", + "variants": [ + { + "name": "False", + "type": "()" + }, + { + "name": "True", + "type": "()" + } + ] + }, + { + "name": "src::replaceability_interface::ImplementationData", + "type": "struct", + "members": [ + { + "name": "impl_hash", + "type": "core::starknet::class_hash::ClassHash" + }, + { + "name": "eic_data", + "type": "core::option::Option::" + }, + { + "name": "final", + "type": "core::bool" + } + ] + }, + { + "name": "src::replaceability_interface::IReplaceable", + "type": "interface", + "items": [ + { + "name": "get_upgrade_delay", + "type": "function", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u64" + } + ], + "state_mutability": "view" + }, + { + "name": "get_impl_activation_time", + "type": "function", + "inputs": [ + { + "name": "implementation_data", + "type": "src::replaceability_interface::ImplementationData" + } + ], + "outputs": [ + { + "type": "core::integer::u64" + } + ], + "state_mutability": "view" + }, + { + "name": "add_new_implementation", + "type": "function", + "inputs": [ + { + "name": "implementation_data", + "type": "src::replaceability_interface::ImplementationData" + } + ], + "outputs": [], + "state_mutability": "external" + }, + { + "name": "remove_implementation", + "type": "function", + "inputs": [ + { + "name": "implementation_data", + "type": "src::replaceability_interface::ImplementationData" + } + ], + "outputs": [], + "state_mutability": "external" + }, + { + "name": "replace_to", + "type": "function", + "inputs": [ + { + "name": "implementation_data", + "type": "src::replaceability_interface::ImplementationData" + } + ], + "outputs": [], + "state_mutability": "external" + } + ] + }, + { + "name": "AccessControlImplExternal", + "type": "impl", + "interface_name": "src::access_control_interface::IAccessControl" + }, + { + "name": "src::access_control_interface::IAccessControl", + "type": "interface", + "items": [ + { + "name": "has_role", + "type": "function", + "inputs": [ + { + "name": "role", + "type": "core::felt252" + }, + { + "name": "account", + "type": "core::starknet::contract_address::ContractAddress" + } + ], + "outputs": [ + { + "type": "core::bool" + } + ], + "state_mutability": "view" + }, + { + "name": "get_role_admin", + "type": "function", + "inputs": [ + { + "name": "role", + "type": "core::felt252" + } + ], + "outputs": [ + { + "type": "core::felt252" + } + ], + "state_mutability": "view" + } + ] + }, + { + "name": "RolesImpl", + "type": "impl", + "interface_name": "src::roles_interface::IMinimalRoles" + }, + { + "name": "src::roles_interface::IMinimalRoles", + "type": "interface", + "items": [ + { + "name": "is_governance_admin", + "type": "function", + "inputs": [ + { + "name": "account", + "type": "core::starknet::contract_address::ContractAddress" + } + ], + "outputs": [ + { + "type": "core::bool" + } + ], + "state_mutability": "view" + }, + { + "name": "is_upgrade_governor", + "type": "function", + "inputs": [ + { + "name": "account", + "type": "core::starknet::contract_address::ContractAddress" + } + ], + "outputs": [ + { + "type": "core::bool" + } + ], + "state_mutability": "view" + }, + { + "name": "register_governance_admin", + "type": "function", + "inputs": [ + { + "name": "account", + "type": "core::starknet::contract_address::ContractAddress" + } + ], + "outputs": [], + "state_mutability": "external" + }, + { + "name": "remove_governance_admin", + "type": "function", + "inputs": [ + { + "name": "account", + "type": "core::starknet::contract_address::ContractAddress" + } + ], + "outputs": [], + "state_mutability": "external" + }, + { + "name": "register_upgrade_governor", + "type": "function", + "inputs": [ + { + "name": "account", + "type": "core::starknet::contract_address::ContractAddress" + } + ], + "outputs": [], + "state_mutability": "external" + }, + { + "name": "remove_upgrade_governor", + "type": "function", + "inputs": [ + { + "name": "account", + "type": "core::starknet::contract_address::ContractAddress" + } + ], + "outputs": [], + "state_mutability": "external" + }, + { + "name": "renounce", + "type": "function", + "inputs": [ + { + "name": "role", + "type": "core::felt252" + } + ], + "outputs": [], + "state_mutability": "external" + } + ] + }, + { + "name": "ERC20Impl", + "type": "impl", + "interface_name": "openzeppelin::token::erc20::interface::IERC20" + }, + { + "name": "openzeppelin::token::erc20::interface::IERC20", + "type": "interface", + "items": [ + { + "name": "name", + "type": "function", + "inputs": [], + "outputs": [ + { + "type": "core::felt252" + } + ], + "state_mutability": "view" + }, + { + "name": "symbol", + "type": "function", + "inputs": [], + "outputs": [ + { + "type": "core::felt252" + } + ], + "state_mutability": "view" + }, + { + "name": "decimals", + "type": "function", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u8" + } + ], + "state_mutability": "view" + }, + { + "name": "total_supply", + "type": "function", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u256" + } + ], + "state_mutability": "view" + }, + { + "name": "balance_of", + "type": "function", + "inputs": [ + { + "name": "account", + "type": "core::starknet::contract_address::ContractAddress" + } + ], + "outputs": [ + { + "type": "core::integer::u256" + } + ], + "state_mutability": "view" + }, + { + "name": "allowance", + "type": "function", + "inputs": [ + { + "name": "owner", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "spender", + "type": "core::starknet::contract_address::ContractAddress" + } + ], + "outputs": [ + { + "type": "core::integer::u256" + } + ], + "state_mutability": "view" + }, + { + "name": "transfer", + "type": "function", + "inputs": [ + { + "name": "recipient", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "amount", + "type": "core::integer::u256" + } + ], + "outputs": [ + { + "type": "core::bool" + } + ], + "state_mutability": "external" + }, + { + "name": "transfer_from", + "type": "function", + "inputs": [ + { + "name": "sender", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "recipient", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "amount", + "type": "core::integer::u256" + } + ], + "outputs": [ + { + "type": "core::bool" + } + ], + "state_mutability": "external" + }, + { + "name": "approve", + "type": "function", + "inputs": [ + { + "name": "spender", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "amount", + "type": "core::integer::u256" + } + ], + "outputs": [ + { + "type": "core::bool" + } + ], + "state_mutability": "external" + } + ] + }, + { + "name": "ERC20CamelOnlyImpl", + "type": "impl", + "interface_name": "openzeppelin::token::erc20::interface::IERC20CamelOnly" + }, + { + "name": "openzeppelin::token::erc20::interface::IERC20CamelOnly", + "type": "interface", + "items": [ + { + "name": "totalSupply", + "type": "function", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u256" + } + ], + "state_mutability": "view" + }, + { + "name": "balanceOf", + "type": "function", + "inputs": [ + { + "name": "account", + "type": "core::starknet::contract_address::ContractAddress" + } + ], + "outputs": [ + { + "type": "core::integer::u256" + } + ], + "state_mutability": "view" + }, + { + "name": "transferFrom", + "type": "function", + "inputs": [ + { + "name": "sender", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "recipient", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "amount", + "type": "core::integer::u256" + } + ], + "outputs": [ + { + "type": "core::bool" + } + ], + "state_mutability": "external" + } + ] + }, + { + "name": "constructor", + "type": "constructor", + "inputs": [ + { + "name": "name", + "type": "core::felt252" + }, + { + "name": "symbol", + "type": "core::felt252" + }, + { + "name": "decimals", + "type": "core::integer::u8" + }, + { + "name": "initial_supply", + "type": "core::integer::u256" + }, + { + "name": "recipient", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "permitted_minter", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "provisional_governance_admin", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "upgrade_delay", + "type": "core::integer::u64" + } + ] + }, + { + "name": "increase_allowance", + "type": "function", + "inputs": [ + { + "name": "spender", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "added_value", + "type": "core::integer::u256" + } + ], + "outputs": [ + { + "type": "core::bool" + } + ], + "state_mutability": "external" + }, + { + "name": "decrease_allowance", + "type": "function", + "inputs": [ + { + "name": "spender", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "subtracted_value", + "type": "core::integer::u256" + } + ], + "outputs": [ + { + "type": "core::bool" + } + ], + "state_mutability": "external" + }, + { + "name": "increaseAllowance", + "type": "function", + "inputs": [ + { + "name": "spender", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "addedValue", + "type": "core::integer::u256" + } + ], + "outputs": [ + { + "type": "core::bool" + } + ], + "state_mutability": "external" + }, + { + "name": "decreaseAllowance", + "type": "function", + "inputs": [ + { + "name": "spender", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "subtractedValue", + "type": "core::integer::u256" + } + ], + "outputs": [ + { + "type": "core::bool" + } + ], + "state_mutability": "external" + }, + { + "kind": "struct", + "name": "openzeppelin::token::erc20_v070::erc20::ERC20::Transfer", + "type": "event", + "members": [ + { + "kind": "data", + "name": "from", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "kind": "data", + "name": "to", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "kind": "data", + "name": "value", + "type": "core::integer::u256" + } + ] + }, + { + "kind": "struct", + "name": "openzeppelin::token::erc20_v070::erc20::ERC20::Approval", + "type": "event", + "members": [ + { + "kind": "data", + "name": "owner", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "kind": "data", + "name": "spender", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "kind": "data", + "name": "value", + "type": "core::integer::u256" + } + ] + }, + { + "kind": "struct", + "name": "src::replaceability_interface::ImplementationAdded", + "type": "event", + "members": [ + { + "kind": "data", + "name": "implementation_data", + "type": "src::replaceability_interface::ImplementationData" + } + ] + }, + { + "kind": "struct", + "name": "src::replaceability_interface::ImplementationRemoved", + "type": "event", + "members": [ + { + "kind": "data", + "name": "implementation_data", + "type": "src::replaceability_interface::ImplementationData" + } + ] + }, + { + "kind": "struct", + "name": "src::replaceability_interface::ImplementationReplaced", + "type": "event", + "members": [ + { + "kind": "data", + "name": "implementation_data", + "type": "src::replaceability_interface::ImplementationData" + } + ] + }, + { + "kind": "struct", + "name": "src::replaceability_interface::ImplementationFinalized", + "type": "event", + "members": [ + { + "kind": "data", + "name": "impl_hash", + "type": "core::starknet::class_hash::ClassHash" + } + ] + }, + { + "kind": "struct", + "name": "src::access_control_interface::RoleGranted", + "type": "event", + "members": [ + { + "kind": "data", + "name": "role", + "type": "core::felt252" + }, + { + "kind": "data", + "name": "account", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "kind": "data", + "name": "sender", + "type": "core::starknet::contract_address::ContractAddress" + } + ] + }, + { + "kind": "struct", + "name": "src::access_control_interface::RoleRevoked", + "type": "event", + "members": [ + { + "kind": "data", + "name": "role", + "type": "core::felt252" + }, + { + "kind": "data", + "name": "account", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "kind": "data", + "name": "sender", + "type": "core::starknet::contract_address::ContractAddress" + } + ] + }, + { + "kind": "struct", + "name": "src::access_control_interface::RoleAdminChanged", + "type": "event", + "members": [ + { + "kind": "data", + "name": "role", + "type": "core::felt252" + }, + { + "kind": "data", + "name": "previous_admin_role", + "type": "core::felt252" + }, + { + "kind": "data", + "name": "new_admin_role", + "type": "core::felt252" + } + ] + }, + { + "kind": "struct", + "name": "src::roles_interface::GovernanceAdminAdded", + "type": "event", + "members": [ + { + "kind": "data", + "name": "added_account", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "kind": "data", + "name": "added_by", + "type": "core::starknet::contract_address::ContractAddress" + } + ] + }, + { + "kind": "struct", + "name": "src::roles_interface::GovernanceAdminRemoved", + "type": "event", + "members": [ + { + "kind": "data", + "name": "removed_account", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "kind": "data", + "name": "removed_by", + "type": "core::starknet::contract_address::ContractAddress" + } + ] + }, + { + "kind": "struct", + "name": "src::roles_interface::UpgradeGovernorAdded", + "type": "event", + "members": [ + { + "kind": "data", + "name": "added_account", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "kind": "data", + "name": "added_by", + "type": "core::starknet::contract_address::ContractAddress" + } + ] + }, + { + "kind": "struct", + "name": "src::roles_interface::UpgradeGovernorRemoved", + "type": "event", + "members": [ + { + "kind": "data", + "name": "removed_account", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "kind": "data", + "name": "removed_by", + "type": "core::starknet::contract_address::ContractAddress" + } + ] + }, + { + "kind": "enum", + "name": "openzeppelin::token::erc20_v070::erc20::ERC20::Event", + "type": "event", + "variants": [ + { + "kind": "nested", + "name": "Transfer", + "type": "openzeppelin::token::erc20_v070::erc20::ERC20::Transfer" + }, + { + "kind": "nested", + "name": "Approval", + "type": "openzeppelin::token::erc20_v070::erc20::ERC20::Approval" + }, + { + "kind": "nested", + "name": "ImplementationAdded", + "type": "src::replaceability_interface::ImplementationAdded" + }, + { + "kind": "nested", + "name": "ImplementationRemoved", + "type": "src::replaceability_interface::ImplementationRemoved" + }, + { + "kind": "nested", + "name": "ImplementationReplaced", + "type": "src::replaceability_interface::ImplementationReplaced" + }, + { + "kind": "nested", + "name": "ImplementationFinalized", + "type": "src::replaceability_interface::ImplementationFinalized" + }, + { + "kind": "nested", + "name": "RoleGranted", + "type": "src::access_control_interface::RoleGranted" + }, + { + "kind": "nested", + "name": "RoleRevoked", + "type": "src::access_control_interface::RoleRevoked" + }, + { + "kind": "nested", + "name": "RoleAdminChanged", + "type": "src::access_control_interface::RoleAdminChanged" + }, + { + "kind": "nested", + "name": "GovernanceAdminAdded", + "type": "src::roles_interface::GovernanceAdminAdded" + }, + { + "kind": "nested", + "name": "GovernanceAdminRemoved", + "type": "src::roles_interface::GovernanceAdminRemoved" + }, + { + "kind": "nested", + "name": "UpgradeGovernorAdded", + "type": "src::roles_interface::UpgradeGovernorAdded" + }, + { + "kind": "nested", + "name": "UpgradeGovernorRemoved", + "type": "src::roles_interface::UpgradeGovernorRemoved" + } + ] + } +] \ No newline at end of file