From d10b4f2dc224732522db08e7629306120f846b42 Mon Sep 17 00:00:00 2001 From: Tjemmmic Date: Thu, 7 Nov 2024 12:32:17 -0600 Subject: [PATCH 01/15] feat: avs metadata for testnet deployment --- logo.png | Bin 0 -> 539103 bytes metadata.json | 7 +++++++ 2 files changed, 7 insertions(+) create mode 100644 logo.png create mode 100644 metadata.json diff --git a/logo.png b/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..48a9cae88473ae9daa1bfedef151959e0e2650f1 GIT binary patch literal 539103 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

(RockiB6)xfmSY9e& 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 z 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

0Myz%|@l!K0K= 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%0AlfAxMdTe2@4c&vRHM@P)s+m zlIP@UT%@)iSx2ttqP7&h-hf@gHMpr@j*>A&J-wZv?N%$XFKi(248(5<+^{nX;GISdJ z*>d+6ytJ0wjd=OaeK8#x!M2TIo?{Ey2t9Rk$-GW;|3O>N2NE5ym)sUY?bTd=gW(Hw zu~@OyTJ(1aWgsrRM2<9cFj{b^z3ytrwTiXfU(>-i^aaZ#EY*{%u`Ns;{!85Wi3MU? zB0pr&*5+HDeiya9kyCa88K;P#!zso(IqIalee)rp=)i!J5Vz+|09PIAC6L=TOrDmY z7ySbsNkL1>&}ET@r^vr)SlT6u)%&+F#$u1%4Sws(c^}dY4EKHsb@86`(Rw;B^FKhH zKeR|csY>8|!1?pR<5JtOuE-qgU;=A$ek^n@9Fwi&{>Xl4HfbhDx{{$C0g)mr7zpBO z^V>A?+fec>aBL#8unEdmx7jBLQE+@%n9>=@*S{U~*X951$p=4)uSN5_;42BoRkqw@ zp8bKN!?~owyzKQU9q!uG2AgaOw06N_KKidhtqojNpo)2U)&p}z9%(mTg&)1vBvT(= zB$856(HIhmqrG77_(ul}EUB>Ty_(bSV`on!BE8TAo0_qgFcyDUiMLF@FD8=g0g=S0 z+_pR4C{=5=@$HnReLn6z%gVoO&LNA#+~5bx z_eq1iFFpzXRXKZi_f}sY2PLx&o{MwOpYM>wq~iOCT<-q-1&4;$&ndJ81u(Z?;Y|B1 zvj5<5r9do;Dn!316zosfp+-`HiG}70vH;D!L~E|*_K!Ee4fh%#pkgG`uIsxNo=ct9 zYTg^(zGkGve@qG(K7oS0`cc^^-qyVb1Qo%9U(|$$6%A#{mbi|;KZzrNpi1Ks0yvD5 zKyZY1GM}d^l+J>cuSCo<(p&NqSR_T2G_FcKv;(k4*SiPQjL!_5S*ZV~ZH^Cml1ke& z86sT(PKsY$&%o-d78#7(K{xsLPHfjW`k-d$6PQX&U|rfsA++#zG}5u| z3$cu8&fO}r%>pfN`Uim`V)TRk^&=OSqk!|-xr{c`fN-2UPX#g)dp;HNF^FXVXcK9eIWhkqrU`GaBWBRJsIQ&N+NfF_>IoYj6p0Lo)GB2Lr+lHY})Z-=|d#Tf_s4;1x|{Yy)r3Hmxt} zmlVitSh+1Ki{z4%-eJg4kYGLsotRD8^%R2ygUtL@u?>GVPD#!?13gi)(v>kXR(^Bw z4Dly1bM_h_+q~GgZYQP|1vn}3)nmB+8Ds$?`w?J*a>VE?iVurDa2VI=b571X=jdUw<=f8`Cyb3r`Ai&+9Dr%oAU8@p5mI4xlzS$dpr`^=WxXPwnB5_<+(^SO~ z-Lt)C=)~$4ahgPmEiPaK%BS$jWSKO}7KlnTyx>OGmarzvX(|i()v#WpG$<%a*H2O1 zhoT$>ikYRg*erCf?d&i_i4o6n`J7wV4t=?sh-(VM&=PN(NorX5+j%xWGqQFF_AIps zj1v^Xb|?tvN-T{1Ux?t!klxR2EKil`t3k7Ej=f$2ag30vY&hT995!UV(LHf(glc^#vY1H(9}2>iM|zV!`DcWm*+cj+)f^~k={0vX44|+)fto6M&Co+X9>{z(_v2K-i3z!$=J+-tEp{@gEOh9 z=$9OBow6oqdh!Rb|J@;KXxFT}eU*o^ma7c(G{jIWu#p{*MaOXHJIN%O4Mh>y$jdvK zA#1t~)^L2~YZO#b6#o(4h;8tpeDQQpKWREW_1R)qeTE!secz%nMBdF!#Su&#&&bEW z;FM5LEkJnqG=&PU2ylysKCx*oqSYVEk>_c|=OyK~FzxrJawU~KH(QrN#|~w@mX_Ne zXkJ8)XxL~PUVaVu)|dXqi_NpmD{2kVq*JKOGWp) z^;^U+hIU=N+y3>C{xIw4ZZjjwpFuhU;9E!S?ycITBb}d!`x;JZS@G+2la_L_)j+Qu zmCf2{>E2QzmvRbG0SPlH4;9d-_p@YatI1A4nzStYp+y3Rh-;dE;K;8vh0&y$*vPpY zH34$2L2NuL-Vk?&&KA#pm9YgciRlwqXf$xcR5hMU_!C08K*K~obX!By)N$bJI*jIsxLF`buZJ>@cd`AN#Y|snzi~fvsUodaup9ic|Eme znQ}Bv%ZVHx;h(4s^}d4}w~|chYbks|l8eeon6Q9`on)A0b==Glnx$LJPM^5q>doZ7 z>~_u_Ak|hI-j3saIB5}G zv~@q*?hpv^v`X8I z24b9IK=l%Kg=)!gX;r+NQ<@qN{4u&J4U(=AEM@(o1+LjU|^ zZ9=5iJ=A2SPscnWy*`}0;QD^e6wiKYCE*Or=yjBpBqSfY30fPpB@O*)+$+P`dWrnS zQ)|!)ZeeH{nm|~s8=Br;)t2cZhx`=3QT3$e>4c+YcV^d%im(QwL8#s z;9NJ%^0glt{k0}6z}uAmL;3|h{N+#o!L5g$Vi$|bA&H3Tj(FhQ(lEr(S0Njq4+R9< znPIsSY*d>1nkb;bjFwo$*@InmgryD^3Q2JdoqCZcl3nA2uT;~<$DYdWu%lvLEnn4$ zcQFI4R546bWoKz(hWC}JYyDf~ZLf3bIi&bhMLDtG;>!k>pfhwulQ3E*-O)lX>xQ_m zXA)bX4asg737Ncg7t0-60Z2fQsrjU^BAx1eGSP)>zFK~AD&sewKvo&CyYm=A#lRI_ zyurJTwg0slFuwQt=u?;OkEQ3cd=+c&1mRN@od0!5K&3)d#l6S*l(7R}r9J8`{gWu8GMGNe~dCy-~TPemGouru07z-gKN zq1I{ch(G!uz+D{=6kfxdjqqlUHUjRK}mK8^YG}g zd2_dV_@|`o2E|TFx9LVYWBYcp=umy@;Xe_qot#$AMjpUdmcn}8s6<4_loA;J;1Z;< z8=1)Z%c0BWs+6*$3_m}n$ZDKImhb$TkMz(U`-^Hm&=TvXpvS9)EK>ADG6h!yog=DJLq?pJs zdA_>0`BMZV+LVw}ZDqhY&nUnlydP!~gz4PS^Fa zIW+2Yc?|V2(*K5!ZoH@2@76OOwm22$uG+^Gpt3C&tLQ*E@{e5+CaXhk#Xtq23*f{kb9#OYS6|}6fvFSGSE+CbF8wnE`KHZ| zIQGEeW905E^>k~2PRiI?yWK|Upc5^_#{MOh1^S+Bd0O8ADOR=6hw=Cl6tX5XPFJmMVP zU}M5qJhL1;lU6oVi;)tM4n3_eG{Ub5A?PxU-K^+p(zwhJI|kvI8Or}e*h#)l85WcB zcN0!M6;&o_AU7KfjozyTthudV(*(3UEBPM2eUNBBxB0Y#onMk@UK(ZVU-_$VTXA)f zzgR&WJox-5NO>iD;UOcy8I z=9lFQ_LKh)eW}WmMX;=?H@3&epm0G@n{umd2s4`aknou*0nebqIxw8oA`FL07 zoU6v4x$-ZkJywv2@#ALUO}5c%gY!*wIv|x}Y-A`Nkf{HCRw7J?_K7kk2`4`m1?|ke zE+EY5*WOJ{!C_t0WTK~wfvq>0;E@6lmzJ6-fVC!@_UOK92RdPp&k7s_=H471He-DhzIC6AD{pWdLP0^~TNogCB&&${fr5wUHT19@USS0rD^?0_ zEd#^r#me~)ead2>o2|e6b?&f?)>HwLdAo!na2HeSAs_RcuyUn|u|x#X+=45LVX z?(^SG9^CBNdEc|;ww1f{8|%Q^)!GG+`AbexOPxihc_>IP64Mj<=Zia;3juxtuspd< zj!V#;r{W86dKBYQwv*JuH;t2S@Y$IHsbBr#H!PbER8?o2hBS{W9aozhG&zsnpMFM5 zO*v3+F(MP71M)}`HdYaf6&Fqzob%$D{fQ5^HZ%@`dA1lcSJQ122@VmxlZ~{;J6r;3 zOC*|`EXkF_W4@#0`Ise+AAsH95@K6S=kqGto=V-X?9Kabsx0?aw*Kx@mX5`$+?wyf z=j^3bG-6Oy8?w=i)V(aq#$oppSe|Q(3!BZ0)g*-W zn+Sf=SYZ`C=3Xi2(USoNLOByFh3)7x6zB3`Z$)l=0Y@+9@~NEDP1iK=Qp*%cv%!=N=C*$tWg(=^uE7@Qa6d4l?qb zPHw|T5sOwB#lm+(@7 zy1C$BU};?fMSVWR#s=jrEfwz%B~Z@M!X9C@{|?9zHo~iu5YMHWuH-Zt$;by*1gM;b zh5M@5Wi-A&WggK)rn=%-7H5XMON5{$s!W~aoVJ05^&vvgN?j?Pc2NI|_0s5!4$`9c z*28occr9jL5E93ds8X9;V&wO>!lq@dRSVq9BJz1bo$T=W*D0)JmvTj4=g$Hg%c5pyv-i>VvUN$sC$RXefgcg;@QkxJ#Lj#; zp${?4z1C6^4e7e`i@Z6koH49FKq?0BXP-(0T{Yt(6%@J;I1$oyK+u=(U7Y^I!A2%g zGvjm`Y+8dKrH2Ps94`B%L$XWgztAmaJbB&>bQu80*^3*+e$KvZqz7QcXH`2$mlwtp zoZ@S}A=Qx{p)|!R4%Wt!V?Wl?AVby(=ZhybNl#7l?JhOlAcn>ZS;q`dQRGU;suVmw zmtXUfx&z``D?n(cv&Ng%}yZ}xvFnA^v$of7@JY91X(dc zL#+VXY4%*Pxw)>gebMf@aYOs*O?TYWPp=KH&z)k@%X98y{#g9n+4z_?vU8>MUyA+Q zTd#JPCR?`>&*EkOw*B~6a5%LNN{~dWNc7{`HTf$mn1Hvi|2X6Z)*|SgHds3pXQyoO0Zn%1Vi6&~ z_I1^*0f49(K{D(Y1y59L-x!?_gRSzrR*Pm4CMNm+$6&nV)Uy zpaKwb&kMz*%xN`s_u7sN+~xg%Gh|8rHu;{gvww%|bYeuiy!BD+NUiTT^3SU96*5?4+%^ z;igs=<&SQ{asTj>U!(b-Bf&>MY z?1KObJPy>KmLC*lEY@5ScC*)7-#=u+>_|S5ePzop&8$BJGBdCTzlwq21U>r{eJ)0K zqxdi&RwU*SuHOW6Wz)6=ni!PzKh$fM@C}+O(ebyv{hpcU`A|seDN&UQyk2Y@Csg*{ z|G`Z8{@%YEK3Lil($*s5kG10N2lHy^U+S_KU|^pxVESbzfk~8X2!%h>6m&rDM4`<1lZx#*s;n?RWrfz%Q zcB=*=+=;?vL|t)XH6;gZ%B&CZM&PMvN?kGiQdOt&C?;dFkjm8^@mSg=Yb}PBSiJMHiR~YeO1_Oz2sfDZJ zZ$O(4*?OD=vDP$B6?tQPKn|}`2R_;m1)wmw!@Lgt4g|5dPZz2NP|^A~UVRbWXXiAo z%}8>I?tP92if1)M0#@97g-*7 zl>{x_fNh3#qmWicSuCUKL>*5jvH>-d1?26BtjxfXh?kM6zRRuZYBi!XFX*iYrwx0L zod!_>X7p%(A>a2ZtalD3!S<3p72>b8+;r60bs}?NfBnC=ciRIP;fWXHvQFNz2U@~6 z*&KPG%DXgh!v0}RI- z^jfZ&{(G2y+1usbNZ@0i?(0p_6WmXC_=pdv6aPtL-(e@JLd@aj96wY?kQ6G@^fONE z$B*mQ)9k|g!Up(j-B=9>iCDo=yvLm3iDX{G!Z@tm>^4%w=021^@7hjov!+DfJh6-- zk3eYHCTE3jn}z?nTC_@HO5!YrS?$_cf0eV%I(fO`(Gl>szuN+>d7bHP%0yjenLFRe zxSIeu7K=>?g>w+2Xx;_JasXDqtO&%y8yK648Vq6yt=p9;+ozKa9gR6KMe0&Jn#Wmu zJ?vS`pU(`KeEleKpbQ9udW^_aL{@A@SrZ@r(6$BsWz*O_Ta)K;egDsHd{kkf=i+@S zacTv8g)z{)%^tn6ZZ1|q=h%slU#!B&RD23XVKUxB#4z>NygqaWwf91;ayOykbch84VN$%e(f3un$|4qY@Q-1WgPYxu`IfO6-r z80DRp#DQBENRWxl%gxUwpm!C;v8HMg=xe~VLXw&iLq3~2a_M(ikAn5pMdM!z+PqVF zjniu8*OEuAnj`f*V|7k$VLO>GMqcRQImau}#6cLlOp#B2L!xrmygPUH^@@f>aSLEA z4E?z^jC`5zATw~ZC+4x}+HPgty^1dy_K-0GWf@M4`-YAoWc?qPNY2(dQI?W#cHT~G* zZ~t=yS%65m?kR+PeMdz{Q;l%*gkrdCg$lh7t33ya0E!*;XQS%Sf70Do4jE?EMSVNy zjm}8VFsk=zk~jY;HjZw(&e*T;*ZT+#9%yCitG8=X5-lZ6T9&O~yWgNsUxyQtfo1m# zNlMLivOBezOOS)57^7J9zanVM$#;FJGo|CD?}Wy$g89z0VEM@J!jwm5PB}#&k_1h< z2U0p%n0y}O`4*G;-NKnlK`2QeR~&)ntPL6GuRCT`S(7~~^?`xK(r9=LEwM0(_y~9p zmL6*E@oN%vV1-X(p6W*NNZ9198JxS)Z&eAR=?daogTC|kQi1p+^gKOq{xz$DBczD6$T23E90p(Q0j zNj1O5-;YVWcfY8ooWi1Mgtr04<`inewSLPceb;G@p#(=eTL6;{2Pk-NMfspc?1U!- zC9w^~+y@@yry}rv&Uc#e935IU6qEHhV?=y=KAA5s-PrShh*s}g|c>j zcfx)RSwlyTT&&}qMPgNsC*QG0AR|TYuVXPN07ZEq7p%x`%_NW0vZP$>1`#5+_zen) zw4*SSAbOQ?zG8J(b*nU4rt|zP$G$PcL%JZ``FfVUtWtjTI#H!^T-u24jIkjXWzPn- z%k@BcZqI{)>2*Msy_~AN#5q3$Bp8N>$`oE_?G1F@5;cSvt}ClDxkaEbt&i5pm&DOd%-yMAtr9y)X657HF`7{3JPDaMX-f*Fc z{6rPhzs!s6lF!HC$)LNT5nTwt!fh2^#qt*?Hl{%MgJaA)@@;z>V`uh4#>L=*3YI=v zC3=n8SR!!!ESztWykcH@@C#{f0L{0_B9&mjjJDOh+qzw}DW|vk(`ni>OSJElhBKiE zPpG`HmT@Diy75^1tb#!*cCeF?J3}WzB)uH10i3wo#1X zgGlh;@Xy)3cdva5{1=tkc|y70DbcbF8h8k=9*)!bZr&|0T2{PvV6(DqnljxvbJmPm z4g>L776VPmu~+Li&&pbvJ9o1A+crH(oslo46iT64f<*#3x+yq ztr+{r2uK*jxPFMkpU51-)LSkNgi9E>=asXzz~3bK#x#K{s4jq~?jzQcJrWwvA*0G; zg$a5ZeafV*Ro(Qit)~W4@%eXnuK&nDzZhOmsH?4DnGxlz8W~YAWZ2nPx*`A@G3+GA zdA$Qd%afMeF47qq%-%ZqH@4nzRBUO#S z7uYkRfhx9O+V0+o2M-uu>zIzgSr`o?6-)}nJTTJ0URQSjdZeCfzu$8b<1Sf%MBSX9$) z^U=J*_v1yImy4+Ja1p^rLh{|Mc_DD9+@(`fEU*|EwN22KDeU1P@>wU^0}vy#g}INt z*S1CYualfz=C0$7mf)G2S7x3t^ya5GsF8rks2_KQ?%^w#`9ZSjo2N-a=?EKFlBcOB01tpz;*Vi z4rpX=)>cX42qwWC$l-EH*F{J6LkV-ciPu5#gdH?ajVY1Mv7A_MDOgB(AH!wr10>rB z6|8G6a16nTh;x>mvlno?RUUdyPotG`?TJ1^hl~E!d{+%_gc$6DRps!qe}k97IH6C% z$Ux1W)OdA>W*YyEQ^-4(Pc_`Br$Qr-;$%e!X^iSaH9d-Xq8s5J@#?w%7=sNg@bkER zcl+IQd}>oNrlZuE{p6WmSn8!``s*g=%k#jC7{B_D4$LJDdiWi4CC$0y9n6Phbe0%_Q|u0z8o z{5yI8)5xOUm73fc)7;olrN&AR6UUo}PpFsd{XPnei+2(FFai?JhET>-D$-_O>eKtu zPUsC>OJw*EN{Q~AD8_fvB$ph2wIhpK+a^g+vMopxZ>u8^ey~=9MO~CgY2#4HjdAxv z4siLMUmwODE%Dw#9zYX2DncBXj2vpA2tgr2n3_Z+uT2b?j{Fu``G&s>srXOma2C{_ z_oJI0E69YPy~*sqm#t>?{$QVo;N+P#;6gZ2Vc-?+Rb`opBvo1Lnsy3w$#!`5XPajRqGUZpjVMOfTTjB3nUhR z!|1y!^XMX284WWhME@-bwbA@zFg*45)0rWjKn|S@J-s~vMRxxU(v`b2p8@Ptf*pXy zGulmQ?DtQK4F=Sa3S5Fwz&M5LxhFicV6(5pX8trG{EuG?ne!B6&ZWX>yK=i4Q9`e=ggLo_dJMi$sOyddW1OADY=k_AVxdNW}zkkt{^Nu{JJ z#8zpD?p^Naf5lD>**AgLvGd~_S7=?ctKn3lmfK1{Zl$s((88h+^)#!%DU6&0j1EQ6 zV!(6gqlo=LXbg-&o#HwQZ0_F9`~;H0F1YVK@EUrl zYx0}c$8gsP2+oYlZEjLtB9Ao+l4Zpq#er8wkc5~h-^8c4&CRbal&1Wu=6*1dok$4C zWH3;@A#5|B9U9=!#O;UVth(sHWNpyvyt{=}aBQ&TJ1wL`toSoKHf<(|os2h9k znOm?%EGzl~_wu`Dth}*}nZksS@;CRG>!1C$Z$vk9jQ7xPK@B?xO^9cUCWGC5QkbX?Xtx-vzDv}$Wqdy(4Jk09NGAP~dtsPcvDm@K(^Z^#*z4=i z4q4pUAUsKJ7)@k=icceru|bAHDwJ@1`ON*zsFNC(n`X&ZiIw@rg{MGWTGUXN?vmna zHQ=7-jp6IRUm<_o#%?n)02(GUT~#sn@?k6(!i6C70(xZub+Nte?BmI4n8A%ORFVmc zU#8z>SH3JwV%&Oc3xqrOiFUT@Es+`^-D+kJ4mLVYBGmRCa|a%EomO-$T}ly$0S-eL z@PRuGJTrC17p?CwwjMxeUINKcr&|Pk6ypS#hGR$cSKh`SH3NhGUf%^pc}rc5N`8;) zQ1ol8Z{yn2wKWWfCQh7Oe-0SpQ(X4>J%QeR2X;BmtHK6O(z9j(09FnK;&AKtOVgrl z*9?~e`%=1m<5M0_ufBzj916nZK(Yk?S0rvI*C!Ab(?T5lK+;juZ?+OV*}(e&1o(iV zH`kbVd}XnBbarZWiE4YOcm^4X;M#OO85{b%z${nG7COb*^Kqat)KUd#hIYU-9D z5o{kN4)x>J+h_6bt^XqH zGeNK#@iciZIg$BnuC$AS4|ifLO2U%y3q-nB4>i=1OwPqEg~Cm47Owz+Gd>CtUk1%W zAOWA;SdI9Rl~O-!*Ga}NGD2e!WwoQI+9>!a$awFz(c!G<7lg5G9DyNYjwpruUu&7} zER4nN1oWGU&G0Jr<%eTTjQm;7;xE!!j%2~Yj}I_pg~RjyKcc?EFY5jI8tGmdmR@Q> zy1Tnk8Wic4?vw`U?hYww>Fy<@rMtVk9=!K{f6rgQzWBUn=FFKhb3ArtiQpUy8z>cK zip^O`dNi-!KZH?>MyE`dy^KRVDc-YQh&txz_Sxb%N#t2l3lJQ{shyJKkww*Nms{xy zEcEpoVZSsYX-COze`d=C%Y>54A{^cb$Jdnf?M%o&C71k{DNz@#j-)p}(1eCu#v)quhQ$(R@xxwvMKlRdA9jmV@@h|Paq*Tj@$bs$*^rWBw96e& zi{eLc5iy{^GY5u>N&rg zccqdmPc<=CO>@o;V8~VC!?>o}6BwtGvw;Fkyntg#mYBnXs>BpgNL7`I87&MNAHeYH z+E^zG1^PDF{h-A%?TDtm_qCorgLAfsKXHTMaoHc1@^X%2tH$3?LD1KoU=oL79GO2t z#!>!u2dMd@-o9_Ev%aK7@u_Hta@n6@Ni1HzZ4FcUiUjBd@O`MUhkNrJW(yOS5)6e` zRT;TuEgTya0dr3%a=y>2R#29~1DvxU{$a+H%Ob1A(1N@SWWg>cW(Y;mq5c>I{10Lx z`W*XG`_cv3L6hgMF*mr73}Y-?21 zu8zF9P3O2eWtysFG_-||X59N$(wz%V(3{Qy%K>i7eXfFHqEHoIl zx+(mFTH7yo%?}rMpkaks;N>Ut8PqL=ACiqFK0LVMhKWf%%Qn~V z_52LELFnenO4YR&>#6r5q@4KO)8DBuhYwFUjP(;c9~bUp)7>U0&$qhy+g$@Ohh0|} z9-{7qUAW@1g?Xakp$y;AZ#HeJ+azK6%24jly(3Y}5kYn#P{SoWDk@ z$44UI=Lo8$!u(78k&<{HH1tR>N~IEmOuW$&&osYw$Dw7XiGyZK3r0iR? z=Nrc8_wxvVjTfm(N+WP3N?LCbrg5scP@UkSL&6)gh@ zaX`f>_>U6)D*Jk5kLPiJatPS0=A!-J_ni}gqGEv+2y^HLZ6Z7o!`6!R=vJTpd?GI* zV%@<9QA*s6)-{?E3Rv=5DnI9j3Dr5uu9e5O3LRx&H?3u1oyWNGK5J|W2Z0Ag0bgGa z!zQkMCsrkx5DV=La-Uh}wbIED-pAjA*#M*v2ArN(>zG(=M8WgSCKmv=jFn&h3-G+f$eITym( z!Vv{VFo$1OHZcFh1MvzWZGM~p=*ww7zd}UB~#QLFD zc4)CVS(^ajf9~13yX(E4*~+{0xH*0`hglreUo=KDk$Trt&V|JpHdyV6>K`f5Hpiy> zC%y8+Uj_(yj5g^jW}Ua*G@UKzNrU}VEDdAXNR}}ZCpIy2&b&!@;ka-c&4P}T3L8l@ zfnzK#GTWT!0^c@nylgWDYFW(GJrxgrILdLa%oK6fh%Xpoc`x8lBzyCTyj0l!&*piS zb`!4v|3me`I~3DStz5W^ZPAMd6~B)u4A(E?r(daF4lAN%CKFjk#PW2^Rl3Sgq-VwE zIE+5pp=eXrPiiI=Y2SA_=EWlu%h3i&OP-0m8R9s=;$^+#R`-B*X2Fn=aQ!B#`WQyT z%N-|~gO@irYG5o)X)NN&j@*AE$QB?eLD>=%9tt-YLjdq^C3|QINDkq3b-VWVYTiY} zM$3J#W5-USb*UDXrSV^J8&;v-qYshK|FB{+G8oi&I*ShPokp=QBQB{>B`g*-*0|Cu z?p>jRm~m_Q=sSN04NSYiD)nWF>}RW+4>B0u2J)jX0FUI~xj#Y`1n%~%m6iMdN-NJj zEKm}_xF1%d{RAcX4Ts5pd*b-Zg^|~oqAZ|De6UzQmae1Dg2$I4PbBM1$mh{a44sFF ztc7}g$z&+pt3|0Z+s@XKEplr&7+N6R4nd42Q@U_^fZ#FY`Nr&qyX)FHsPiwR>Shm9 zem+iLW?l!^BOSu7sw z@f_Yz*zckHq}#*vDwom_I4F~O_EGEMyDnaB!{z4BA;bXZBAA;j1vRW$*@{OfEog-U zgG!y|?_akF2K)xGy&77X6NHq4ky6;pVN9*YnU37q7A6izX|Te5A%{-X7#<_=wgLxE zwwN{84c08$!stnG>*UfNs-jwMcl6=8nc*LHA=Bj5#ulE=N3bE^4}F`d1dUVv%uX&j zVM+NDfZX?uI?f`Ki~m0IATx~NqU^8P%!@e0Tr|>ia%%#r(7@Z&Bn%sRvBkKEL^OC% zvi((`vluKc^=~=yTnfW8UM$NvDG14%ir*BQ9*c@2Ri?qf`|{V=dHR0CqYDQfa>>EtQ$|TJ1-D=Kx1@&sk5w+jBhS<9 zKBorFETbIt9JzSz%dVB|zRn3tL37@70-ImiK>az)NDNo*cdRy*0#CR^9oVrsVS{LQ zRnm4UcT|`t%Z>%^tZv8==B{(Td(jTjL2#Kshv?|E_xO&I zoNi3Facbnc9|M<$^F5nH8aS!HM@Bk*S0XX?mxymCg8Xhtm9hH)aKFHO?hC5)P5QUK zz=N!&(kW_!;t}WXd|_AZUnFi)wY6oxTn0Z8&N-rEs!?g~yOidSWQ+*iv3OWhUE-R- znc;99iaXVDlJpk=xVAn~D#WZT?u3<(zNUWK)N*CKw)`ov_iu&`s(O)OS%LCp%}0Qn zIAcqGK_~foQ%@S1XVJyr1O_@V-$hv|=wt4CBe}<>07KJRTgCZ=Qr%L2KRQ%~QxD0Q zC3d=|oj;|o=KRZVih4az5@p)8v^D~_eAU!7uk-c{@&ziT+2MbTy7HIgIv!2_=*Vm} zhfJ2Z2NVcG;|;xUl^hf^1+r3PIeC9}E^Jz0XUyfR28-JUhWIwGB-em-@g7q#FI2; zaZ{-?c88}MDQwZoNLov?6-$W;uDb8wmh=J8tD@S5qw?aW6~H+F zKWr#Wc8anAsV+c{@m4uvU`5%Zxc2~dOpd~_@KV8+=Nt4u}yi5u{1Vh`%2GNDzxm>m2 zfJi{pp=0hk1*7(yhW-@;7a3pVt#OxM_vTP|PigNL_|8LZ?YBsi5mwp^UA+I@g|N7m zbk&A2EAY<|&*IiE{Yt~h9ok_YcZhLo77oHGj`d-?Hldl}=jP;F>AyuXOOe6T|NJ_@ z!*GRUH0{WpLF4o6uTP{D-mG(vuRP+{d08ff*eL=px?#60WT(qK|&N zP!SwQq0iWGJL0X0>+%GsBo;TfVt7)n?pW?9jO5Fa=9v3$*v zf3qoC4Lz3Tm(>@?&E#&Itu%4^*{^EsQxKkE>}6X+cdS55s9EDG;ZZg6hA&N@O7qVP zm}I>qJHReWdScOJ3mHxDlxW2fp~3fY3Gg$e7^MRrfxN_B3vK)qd$1rp@Q!$|JgJYLA4^PmKJC&A5vTWHoedyFRm z?d>4TJi;^hisjYWGww1V*c2xglcMZvavcxan*)eaTt%_N16oGg+Thp8MdCKiIkr@O z<@H1)FQ1q!M|fOM=eslsf)FTvc;$C zJ!57`8r0AtSm_!%%r?P`&EEDIoAdLO0msZ{@BHrE43T*oBBNq)k%TZ1VzzR+K-E$) z4;r9ZV(}71oJb6ENU08^R~AaVF>QNVTAF|$vrh3(pJ9!%N@l(4v+_bOY7=ofbiQef zC~nYhlq8BJ0YAAGMjmg)RSS_JmJq+!Ik8IOt-j809iTCQOY7suW^ZOq|LIO{+mB#> zQoFkA5?lGdPib@S^4dD5M0H_y*Ps~iIaB@cXHa&HnO(f-)?L-1Tp)u^1GT6tv}E>| zgfomWI#q9~}UrrHq{pM!ub}XCK?c33sfs|R%eSsIkNsI5zwB_Nqvr|Vcm>EiC{isatW_}a1ZZ9 zmn3GGO%_)YV1TXG%BEk^wD=T9#Q|CaOqaepn$wz&A@(=v)t@mzxn z7yb?~{3)oi&Y!xnNk$eCEKCThjv;z!L0;1XS)*e<*n!1w8db_=$0>o$*u@&V@Mkh>M8TEvDFqdzjpuNI{r)dAue)Q{En%D0 zHssRH2DAU0e}bN*Une{p=8ryqSvIXqg6T~tGEV=H8I1^b zmYxk@D>=g(l`E-%S&xh0>!B2Q6`Hp42l=usdPQ_bfCBI&pK&||i#hV2krK$M?4Lxg zyYo3pXH$L45J?0?4X1)nLE3Lj%D?FpBY4g`V>O%I!LWC|P|p3LOSw!6ono9o>5z#z z4hH^E?2GBtnb?mv)i;qcIT04Ge+}g6VGlC-;|J9S&J@xG61}Bqj!6kI`9B?R(b=t! zM>ct-kW7tN&d+GEughppE$1r&VmG{B)hPu?u=B$wXd??`JPFCCap!;GNe#ypaOV{S z)l;AZ{nFP#%gZXyphQ62EopXl4aKCxd?^h&!&3gfBK}F6guev3OtejSiv|Qp$2G#* zlF}5`pamFI@rhEd>_d7QWqaAZoP+J1>q(c5l@Uhf#cOOE{a(+2v29aj0h>X;LCs5_-xN zyGm2B_Suz&1QJLNd+Lo@XbLv%TL)O@!HL)ZN07pOsFqfhu%Grq& zm-EKF(}?fZRn#b#W=tVBgO z@n)dHQ5n;Bl?~^FK7nrvb-aMGt9oQde+&Xs#HQ`)k_1%yN-Vc;%a0OEOEvKX z=es-3yE`}gDb$wDmTE*I`jGp7r2C- zpLudG#;}C@Ve0~8xJYqn0_O-It?sK$@+(uGz-LJ7&zp= zL`JGZucNotP8MDIWSE;HU_ApZuZwst$wkw@;kI#AoPC`Y)k7f{!>|^XOK)*)eCDEg z(t^Eh#if?}sA4NXf>Oq9S=&zp0mVG#0|qD3D%H1;d24)ISh^PyD;R?1TresizjI_b zN3D@+IypGxIZpI2|2V`TZR`@RcHv#65mAW=H<|_W1zxdW;MvRZCUynp2p^A5LeRRg z&a;%fKk;NiFxhygjne6-0$h1rcaiN}nc@YoejmWTKf}IOj6k7f2i$IWMmM#|{g28C z+_67%kh3E#L1ZCL2=3m%iyjih!!sb~HEh?tniJR1Mh9^1_;Vg5ntMNfpk%<)ElEut z(Ca%`p|&aDHZ+)#;*duCwafX0TN}qr9QHdC2dNztR9kbv>ML_`bJouXniQ1Kpmv@+ z{TYd6Hx{)8*S!bY7)?2EzZYllfbB&JiJNis+jAz71`PjlK2fd@SUj2-r|(jviYAi_ zOfwveWi8c&Xc^pdSks|3rw8XBvzI1D1&#ZZ;kopO@*h_=}h;LcR z7Q%##(33m6d?Ei2sM8^V@kA z9ll(I-V=W=4f&#W(V)CC^nbU8Vx6~W(=Le&g^Nx%| z_euD?b=j`S#RWM2ya>w&uOQ;q^Cik-fCandd$+#ZY3<=sq%;@}zMIqt$Z9bLdyTi` z$BKQxQ}t!Hgo<;F!agm^>R_s|+__nCK<43So^&bUR+_TW-pl`<`)e z;3M~R-er3qtsEI|={enN|2Gj9UHlHZVxCaK;-cYAONEWpK+kv?fNxfEhB~0m&+45L zi?W%wnEn?Fxt%sFQjPtDu#?}g#0$a20LYmi~HOf28I7_o<8=}?jDJ@bXN6oi(=N!6MDvv;zy&=OmlQmSgnkQ!1i<|G zk&;@=j9RW${+L)61EnzNJ-==W{b@rfVG8zk@ru=5l|WY9W${r>fZTYGo;^eB&&oB- zNfS%w)3m|7Y*WkE%|YAh)n6nOo%-XW*Ujn2)Fa0PFGHwTpI3E3aENXy7)+)3ulIrD zPME|!(53mzt%~KDG^)x(XYjF4jB(Cv3Tp;6R^FsE2QqbT_5^%JbUY7v6hAw~Ih5pS ziH%akj?M@SaFSvb;&^_=Xv%%erFnyEa;il!jf=8_3<5*8Euz_vb6}hI_%i>HC75*< z*N2ZE7OJ{jV-VRrQKomCGx75BM=k5!Ic@rnvMYysJE@^R(9vBb;Yh+g#+4?D(!>RP zC|(?ytE0>XL0bruX2EgN3X(-cLX^GUoLtzHy!6|IxQc#QOa9;BicWwE0xRJGK|7T8 zJ&m&QVoxIeQZ1ksz!a`9fCRG}Z|}c{hFPfScURu#g}u)f!_jE;4IE$E5P4~$P{a1= zNBq57)a*c*r!_lGUyBby{PwReyWIbA#ZY;R8#9lTqt1d&O*UrIl^BGkUCvA3afMFr z-=Di3RzeYn&q4OKxd}uC?$*WWk{GlEcvi`y5Yz#&YD;7O+pXQ7OIY0;Ohwx`n3sgr zr#3+84MWtRU%LH*;O}1?#mvFFNdZYYyduVs-2#K^g=&x3wcjm+*xjFR*UN2>-|Uy9 zqrSGfZuWe2>szQb7tyMmNntv0)<;<%?`>;KOn#OoE?6WS@$Z22*l6?TjNPPM#%Yq`)1IEkI4OJT1U{A>D!48?O>c2XDd zrz8iptFIJ;0G_r|Oa;F67*kBXF`S`9O|rz>IXuY3=}(#=LU-Y2@F23sZ;DIaMMqnG zAq?<$#K|1`3DMEGb~a1Y^_l8;(iDa^6M)(E_i7C71gAn7tx7c}?0B98hTE7kPaHi!duX(ZQs9t!V5L~lG(mPn zcy6}|ugH~(z`T1h(7`Q~ok{e{4L7nEQAv^@!$1JBKBU8N{IR)7>e`ZAaPWaP7Wmo! z&fGZCZX=>|(7vkkii-e8-YiG&VUF2rlls3@D_+A3nb2eNu*|VQ0L5>z6U8g%|KKV% zF6Psts0#a8PJZbhT=ZYZOQTlk0DcZ-%`g>3e=-9znl|}_O;ZaZqMvH#UW$$ zB+raD^p1GW$A_tSIR4luFuTio49K`d-tcRdF)YxWnBR1!X`-Gi@O#;nkAz;Pi9%L7!xZbUm z(R0)JhAY}gM2l&;x1Z0JA>fetDUS=sm+-t`G`t)C@K7D#i9vR7UAH^)Dk=EBm>uZB zJpH}{%F5Tkbuv^6$(dbPi;=s3GW4Bhl!_*HG_2outI~3J&zuH0cXSMXZrQo*h4_%N z&)pjmTHzTIR=zz4sXemh)S`wz3Yu{Ser5gWp`Ruu-_Yf3!WMlW5=`F1vz)ql)(%a{ z?p0Q&`9BJQmAJ@e8i~dQxb+%VbN~92Kq=)n83A|CWWf;ubzh(42Bo#JKEHfDi_|hI zpwTA!bC3yIB-O9_JfyEC{?T)JnoWY>u`ZOZ7c3S;0OIwmWnsn!P}Y7 zw`&9C)5Rm3dbA__pDXXqPKWb+Eo^c{_{7@m5pk()jFrG)pwM@yF<^=(3e-~q9ebGNs;N*HDF z%SNy=(SkS{f4DV@Oq#uwC=xVK%HSGCC?&{GjbrG_>c>X8^*?ApH7{QT%K%chC8WL5 z5kk|}83Q#gAGHv%2bfD9cS_c|9LYM0xJ9s>EwWfdzH@w(OD>$~;s z(W>6N#&mna2thx=X1GunHu59U@I4qR^9hS(u{`3I zR7TI@kwHhaVj_emLhfJ3su3WN-= z5zZqk#S0jVvVtN1z2<*2<`8?DD$N-~+x=cR76q{$ejeaO$gOo+MzH4kp8YvhN~-in z?vqj(r7SW;#9K>V44QZ&zg?40f1<`vzoNSYF%_ve-2cs`V(Z$yHA@#aA5NnMWgA0c zC&%U29;=A!am~B;q|6l#l|UtF`*RA-k!Mwf=^-!+)jJ;3MIBd0NY4Ed9JaV@hDNss z->P)!)RGD?RF4EC1N$t?M9>mv2GPcd3c5=pbGy^KSeh36M zD4xyz8(X9pfutb|mW*pjaD}!FM!4_9;jV-^)FX}&l*9a)695Zrd2?yf^gr1ti3A1- z`(hYzv_XRyw`k-IaQ}uDc=%2Ml7P)Wzuy-2$zCyPEN4nm;g!85evdRA%!+hAQj8Os zqQaxXqK_w)(2PfwTV)Wc==Tm_yRIT**s9E+AJnZY{kIT)12Y??)9SlRYQcUPF~0%? z2)3qf&wX0W8E8_dxt6c+rMV47qVv(Y5lLF}@W3HNLiUqv+48Wf5i0v`%69pIr~k31 z?dtPC>Ni)6Y)X zv4yPuR~dreCfJIH+)j|j8N-^Xni7}nC<@$zdFUqJuWnsR?9n?bW1LGISn=E7gQzqp zB^fN5>qTRf1Bo#64&U4sR@TGnZXIO&dohL`&YCCA_Y4Nqoc&m|(;`+-H}ImuXXp#} zJ?LK{@0||I=DbsENoDk=xv&NO}V? z-xIgX(hZRge@+JT?5T>Gnr)7lXS}R?*fW&w(;hfLLLE=SEX z1;ylb>9`N}$|Db&EGq^El1Un*ke?$Pcy8I?do!cC&HG;n2G?6`TGngh?%bbPh|b&i zPvznY&Y2;~#CE1mNM)_nThLN+W4Vx4r5n`Y5DrDBTf|4ALICB6!;K0QsWAk|4zuAN z%=!^jSwR_;sQlat2v~^s6g)Y%z)s|#2ER8Ee{$D+3-X^Y<|D$?K-w>4Up7k6&BbeI zo4oT%e)LzLk&Gdc$OMb?3k-d%{!qi`H zYl4X;19vCe(0b!cW86V?;YqvVy#fFyOSGO2ZHr7OC^7QTL}#{brXnLd`9B7rpHvsl zT63kWkfvDJgX(H*d{R+MWpW#dP;6pGj436ZBZ)4(Q?X`b*q;KeK% zZ=;|6GYOta=Q6={es-{|j{<;|uAz^0;o+q^%Wk%oN$El(@m*32d?xfRlt^CJfRj2y zWCL5Ravv@v$=akhm-X^z8>lrq<9%7d0EMu3$B+ft9(h(QN|=4DG1VAQ1xG;s!0-I4 z@`H`<^+jbC&%hCCCI$5SzRb2TA&+O>>W-?`-HEb)A*(AQqc4zIvvHp57_G_yVdGr{ zE4wPBtFC(hcv%tIV7}Nbr<^a3Y0fa&0X&_E9S(gNJrb+3FpN(6?i}efr~tn7k)btN zq1gQnn@x(Un!Dcn`4HjO_BcLa{_Vor-x|qa{Niu;dsZ3{%`X1x<|~Dz!2PuRflL@e zq*OE?NR(%Av88v&@{YhXERIH7s&L_N6qXzd9F^q$X-p- zA^WIW7Dt?B-qVH?0jG~jop@6|phj%M-UYg8Rf)luRt`xD&rj5w7v!uXy^_#waSe?n z-6|N&(JuSo?rVBhuXUWZ`%F&FPuMgmAQ<}0qe|r}pjAjqJbwPcnItZrxnGIS{#W@^(duHGu(3sxMsu@a2@@@F@0vr6O5g~c zTY4<05k9v+G=3K`4nS-i$XMG4c_&1hO7Xi9N*Z?eWEoVQ&ia6{o-g4JQ_X^7AO^+$ zZHpvX=0ZURf3f?$sU#$eB}S`lo21(Kf*5d=p$8jC)M_%w$S&t#7ZFcDkL41jQNas7 z_6_*omJPhBC#GK;+!3{p2RXm7PT%uaG=Ku*gOL$mb+f<7CS~zWF9%BA3Q3hWKLR;wxE=QnElV1U;Rma8I;qwh?q?hDHKPEyD;ZVq(7saBZtFwg$%Nh8U?Y5Sex@O@g!#* z!VW|j^)(Sfs$-Z0TM!i7d?kwM)AFRv(i-yl(&L3&TnAq~VPn^vTj!zOK3}uu4Tc$v z1{kbdWhWT(H!~D#n3|ySyo)kk^B9mtu#Moj!b5r2;=i3~eJ1qr6E<_HgwiHXxiyA@ zlmG^RFwIW$Ho{szc`&385=M~9GE1x4Yd7jCBz!XFSiDw*f^3-@+eqR94nvO){^J0^ z^7F*$jm1)WXnVcw`R|cKKfXk(uMB|e3sumlPRTkyBZqiau%I^v(iJNIPKf*r(;uUU zpqr|Y#o44Nsw6RZXYH}1g$YFN7W zgUQJQK2re<9uI6r^h&5s8Z*2%BHPMBkijqiUr;u9wfO2Sp>Ft2vtqk>TCRF28g5W{6fiBhDfbmm5cw~~Q|U70B&kJIt~*<0{fjCMZc zqAKU_3e7FC0}e&0VeL0Se0}Qa0W$2o9{>c|p)A^{{uJ0fun$OR+o4pzM;^#ri2rK> zauCX2;j#%UljOkE#2u4Ju!>HR;xMUA*M&`Mh)G1JkdW`2*(@zj42l8Cx^d=*`y5}T z(6ttyqeU4##KM`Uwll6Q)J6a6_w=Q_mzgl&_Ozj#rKjldLOk~|7RR;bG23Ck8c)oI`-jgtVMN8~9VcGhDSuFIS0 zN~%4Jww6Fm-H9x$2yboc7kA zd_u4bb?Xud6J1cGq0oXpdOc}#i|n*f5qu^KR#!tO@ACQ5IQpggFFiyOS$7;tr^F?E zRg^rEH$xABU_DiW4UGDp!o}A+{YL1HRS5GNAK?8L>!99c9WI5TQ@ukkfW7q$#D+^a zzYFvs?)^rbPR;Oo+|GS}H@f*;jfzMbzZ-E!KqCn}SmT%ARd6ut=tD{aZU%?{JOAMS z-f?>&^zO5_-R;Yn6^|ynhpiSO!>!nOVLah-0IJ2SGXTJ)Xvp0upRKW+F5dCA|A>^_ zJ|YXa-@amX90DH5+Zt$&x>kL2sgMlP5^xO*Zbz=f*K`l_pxnJ~qG{)|AmSrc-JoWdi_ zjS!lu)5g7DVyXe18f}~?9iMW~Za(~zb~S`wC!?prKkuwo*CoC%2?)qvT5S&VGZ17P zk}RTV?;~}IueZ=J2q&+vj1%;{{RI+iW`XZ5=uZ#!afH9kj{7FLCdu7kuUx$R3$#QCN+ zoquV4`VaT4h-wWElGRu+SyOpe9GaNqu>`kC($1%B0QvkzjQ5?hgeV8zyET$+4Vc>! zK8h~yI5h@4kf2|b6x6oMOT5yb;K+GT^^%96;v2KL<&v@^ug`ip4!(a=GuplTCn|d# zzKuhMGcSiZ7?qdz0DvgHN4KwX#N#5Qj!X`2TTXunk%u7HwLt5PgtG^2d*A~P2ljgX zHl#PoS>U_CU_zVJP5iI_R*ItxZeQk5E6JA7vwxThqJ8|9*@*$h(t?DtTyyzLAcYUU zu3NF8eJSii40v(7E0?Ts9Y9C%>!YK>`!FU;@jS=4wyY~b-=p%$1^r%NBg^Tex91b} zFX*tyuYKSh;Krn#fhmO& zSJH8H;Cr?=@UIru74OvcHOPYGtCCEp8*j#~LS(2B!$7>%fPWiFp63zI(y)TUXHd%_ zhLhTe4^o ze^liSJ;`t|z5c}}6Ii!>HUs!~(dQH+#kRqD>^NlbcuZ7CYvZzxR-H{uafhBEQ!G-l z5;Jd*aznOjR6Z~h4XF|_J($z)){nqm8MXVctp10)lr>kwCvv6GqcKiBQ9*7U5SWGQ zu!Cy>0zXRDPB2y*h!848bU^hzhFT4QcVaO=mT>7Zuu6C!Yt{I*1Ct^W8u4Su&92l~ zY{ubc3RK&GXpN)JkF@V~T^$dR&v!Svfc>3xfN+QN&S+I`t&<_V43v7Z1Mxw-2A7fN zuDrjFz8P4Bnd5dLz|z!)kT7_Nk@94eeC|Y~S%1yig>#$_o06i3u3%ooU%XgSoT!|z zt?G_Pe05Pc;1B7z7haDXA_SDI+on~A1{Nfk-d+K@LdPP$!-Hl4&)_%be39dDt}$=% zxwiY?9GawaK)C(%ccafLSI_5PDB$2Yah~$7n?Q_=E7P>7MZXiMRcF;;HZLDihi=D` z^6X3fOV&g>0o$hA!*clvn#^J5AIiZtVp9v5q35p~o#9q&^%jyekfZ2VX z*ACv++o^&;br3Iw)2Wvy-)-IbvLd$v^S`3l(>L>j*yT0P>kTf1HW~BX!alSoW0yZC zVfwjMDX|#iW}z%+u|YM4x8ruqvAhhU8+O8RaoGaNq0s#dn?;%_18?IBz$YGf_jg{3 zhk53ji;j#Vm~LNVup}ZI5l@2Wu``Seuatb;v{5omB0Vw(M)ssuWCAHDmE)MiqcG6C zXRs%+pQI3qD|)!2_W(CjW8OCTVk^&gqd(a@zBXWggVpC~Ot0^W*@TJ2%y1z$-L^#J z`WY$nk^GTHBAV31AhUZMP$z*cE~wg#T?htNZ)WX^OV4EEs-Od9va<#PX>CK*#QGn$ z6ha$mr%Na=v~=4P$>P12=6p5rx-v*u|7^fe#fpHpZdehONurh*F-wOF@%J~)k0Bvn zyw!)M8vhE|l}R+Yk1zec(s<0)iKM--pWEYOLVw@ws&}&7&F1!OuD)&$`QdB_<_X>7 zz(U+D?bhI$b*inPPN=J3>bU|YN1vKT+6BO|aFAjR<8V3deO~#$eM;-$>_vW*L3_i_ zWLtnUOR7RE>L=s72xCO$1%kuN3#O@vr?r;iGfc4%?I61BAFTR&mptyGkD~Bhmjd;k z6e~RF5ToD_1RE;@oxl98EBtWH#f|&ClJj@VEqH<#kTkqoNUvHcSd{4-uInw%xff}P z`h~}@R_cA5TBFNAsQg-@3bQ5-sCGU|e9JyAL@wD#qQvq-42Ht$6wa-P9WWwewadi;SSex)M zsTpwey=&yjroh`N4H~)_)E(vTbaXmOe*(V{$b(JNt`}4@>sWMCUV9hGE|LjAfxV#% zeTf)d7+RBCAEGmlFI%+6D!p$I>RZP)@d@9$%{3^NFOiRZbX4O<<-|uq)SGh zWn!q;`NR+orBcw+Mx^kx;Vj2v)R?Y}Z&*R);o|VOF0uwqX*|{t)AXeW5>QLC&B#;j zf1KctNJZ%d;W1nG50oNO*pY{pFZOx*y?aRhTzIbsQ*P}_o9y=!_fm`TH=FY<)`~s* zIWba;0%hq4m0D?O6`^3))MmZuu&C6fjO^|F*m8Pj2`swZJn2{Aw_`is{vO-us>kt( zKc$3GvT3n@JIXIDB{q*TC%qO=N<)sG)5YJnaVhU0<+U_5MoZtri^ZQXTe;Uwuqz=G zaoZGd(jOmcM*Zc#%`d*RndfcOJ+t9k17k@yJ~sk}JaR#oV$JSS*dS`TTU*q~neusP z*&ZU^YL{;D3`IL-OztHBFLU`kL&tC}Vea}^Y4z&jG?=r?onKq0@`RNmlR!^=E~ zq5XOn{~FWb#9-I*{L;`d#XM3DH~C7`{DEMuW!c+&K8sZu(-LwF)Yv-$Ri=ph%uvHE zd;y^*f$ud;{jpsnb<7uUu#()-Y+*02KV3GB67!& zi4C1Pk*k+WpUnt<@zrJu1;89$FV^tm~hQ&OOKaGCr?oA~IgPp93qIQTN__0mbSf>6UvBle6%4wzOU z5YP|Lv=W2m;B@|a=kvpL7v~l7 z(NTKZB5RBjKyYLlM+ojW`tS)Q{AX1MU%8S}(_nX8Ny~bd{jS$Y)i^}$ynBA4`NPy; z=Sh04P0mG-Hs~)RlvRnq9xMlmZ*&x72|)|fx5F4o{qa{oE#3!vR#ab^vJY6@@#u#C zV&y8o5K8e5s(BxG31MUFO3aO|zv^i^AGI6L!ERx(De5?NIw$nd{VDYwXW~_4Y1-eH zO;&nXWL=yul<3M~-+%s;{H{47 zoQu1dc?WO`x7*r?Y)L4>!gKw+cIjUUTvu0sjp( zwv97;+yrJHv&UGQy%U=-^_S@G!C`c0p*7wsgL6<9S;@YoDxh*kd|La+Jvq^}A{;nxBOhi91w2Gxl>%s8o+y$M%oEY5|wyt|lDAu#0xwQLiOePrSjEBL|*m^ci<|Ce7a>QOi0M;j`CiT2f?+ zK3!Acn_JNP|JfL4=Z-opl4kltWWuv(xH`=bEfYU*=#e;30m(W&u z;9mb&#j;DycFe7=5uZS(P@^j^;00pZJ`fWTz`ErNqt4aFxpxqXy7Cl##}3viD>fKv zW+YqdkeaYhhhvTBDw#-nIG&az=kiHl7IuqYECIYCYEe9 z7TTchJ{)o`6JJ)45?EUp%?z2~Ok1#m$}1tTbj~#EZ55-%=zI3KCqXMj{4(^%@AI3=)nKuoREmmGzOs8fdmNNvJcoVSTCkA0oW6dxqmF;;$gV zk{>jK+=>>&@qD#I0bp7qM-UKJR0O12_kjNh-~Msm)krZB8MDsmq2n z)GZ|{SX`kAj-y0^)$s1U2g`ne9o>)VvUo^Wp=10)ur$xQV}uDnKkotT(g~$&mx~uS z$2)`A452Z!8@L!8!Iy0Chbx5PO2s6`5DCbrvLlAFci5?O$Jwy}NHSfl?*C|264Zrv zuNXCJNl>xR(K{Qxk@wM-Ap8Efa5JtaNc3BM|Dh?4#Ytf_t))#4MHYQLiUB_>TeekR z*Hmq27om#1zy#N}Q8@{(=~-rb;l8Y;bPUkZv9rJUt~Ine!d`QaE{0ozqFS!pXJO@n z(>U~f>-kJGF!#ate^=Q`B0KV`_uPbcuNXm^-X0Wh$c@kKsT%w^nd3qWK8|ShiQ=ag zvclTa?MLCmqcM=F&cpx8My6c{-{H}b=Gl6co-nS%FjgM0p4}Wk{*Q@U9Fa;25!H^~+7I2l*xDS1Rusy?F|8`CJ}U&bh9uJ< z@a8Ib`Tf~Q8&o~X*p=QRA7NTuXmTF{!tu0(z)*EMmAYHdcH>N;a-in7rB@&9Lp-!Q z9bYs^C>q4Amr~WojCD7Lj$l^csO7T@=UBB^3rT%gB->@~!(0jCMM(jKcsbw=JB5`H zX7)RNKV6_66UB*^*)1?5yB|2V$@Qt!I=#N9RxCpfAk;_b*WxJ}PkXBSdz0rmOTK2c zlEZbQA4nq&$jkfQ*GAgbJx}Wv?BBdQvBq7=gS`~!;P8qi$at3(v%ql>PmYBi&#p_V zDd5I>O!6ZfXMQ;{QD%`lklbJRj}bWE6pB|#TP^~*-N9ek}=*x2KGS-9VStR0$L z_~qyRGB=USgoWg4$*rUXb(?(9p8z- z)19WDfJF1hTlA|@cShb&)w%27MOmk&TeE+2iVpQdfTwR}fN#Esk9NKj-;0Vx=;$Ki zb@Y*~_MgJ7SF(~M3KIjDyqn<@eC_Urh$=7y%o4ijEJ)3Mxk^d6AkZIGQ$KT9q*?4ah&4}s zzts8jUSoIv>=7oXk`Bg=^t}|v2W1ruFD?P!g2Zy!vbVPC6yErH(j-TB&G6 z2fn{j@V`n~$)v%j+0WNG({{;8Q&x2(vC7XlSJ9Or;E|g1`w^B__z{tIAV7HKlK!%J zhB9O)fiy@mGL3&o2ovk&Lhpygce?N*p$GT2{lurK36J{06=^SOy!RU!Py=}SDOo^I3G~OE;7K)HU zn2^Tl_RwT)7Q-`y61XcVa^h*$3i*I$z2*ZYc-sF_J~90lKnGWOT_N?UXbBVt<73gi zl(qnFSRT@epYWY<)Vd;`7)kbiLzE_RWRS%wCYUhAiZ%Q6$XBRl?8Ktd zD~7Z0)yajcy6QIUyQa3ZtE6Mkft8=}gEM!I(h!Idc%C zdTcx=Sfb7{7Sfn6>us;zJHJ>i2ERri>A=tS5q#;jL<6xhX52wO6gH&KS9>5bfxKMv zEpU`9qV5Q?a9WCf?kGrA(Qw4F6Ljl7bV3V)u6}YY;dxbM zfN01x?(^Z8s)%;y*FVC7=A`tsWCLlPrH{ECq!>PToaKV0oW2!iEH)}q2E*cMXH zcf(RaWqSXKFY9?TaL)@e-<%wkq4fHpu89&kW+S2o% zJIz1aQA)43*Hy+R9hBfyZMJAxzk%S_Ndc)ms=P?aBH>)wWuYehKJv>2%~9*-i4^a= zwT*JP@D{+U?}BfFnX694RON>d-!)|O!XdLG_ddFh$L2A>_B!qdv7h-S9sMY>IFsrv zi4)pIvB$07S;&X}SjIA&2o^fgsU6dzgB#GwW?eQAeUQ_Lw&%p5+J63M+xGX}KCG%* zOF=vrpH3sxG5_q(8}C@3WqC|2qvYwz(vX1Cb!mqrw^ipN9`T?y%O~&b9NBU+qQv_HkUh|U(M(Wg*uT5#JteZgDYt37+Bn;+D_Sa~PV~4*ry?&RpVbfM zTc;%bQ+w3-B?r+d$#$KnMz^05Mv{FzO`_-%Xv}%x&CLUdMC5HJx zV+}{TF*)TF;yNSE$X@PxT+Qm2*ZiM>tGz<4LdMlHs#$3wC2xs05E(Bcr(+K(__wy0 zfLM|Y`6yNI>;|+60&#a8xkHVOLLP6w>D+Y46ZvE=-QNn&p>{0GX++Q3Glxk?N)L%r zHzvqan4xU9ws9)^85TgmX_^>ViMmy7rTR3xyVFox(%e(CGx_8$qVbf&NVR=W-_5$ZC z;QpTg&;I%C!1DEsvln7(d4Y&S9AESN<@X3JCEpPv={k-<9LX$<=c;CW0C__OiTOt@ z>gSPCon|i`dZ{wo^M?!zxzdulOmaauzC%HSN-2x>Qfdkvo1{s4SSUWXQ8*PQ~yxsHM8;Z$4O}0x5q1!HG<>x)_&YgY+H(u^6;9?MbTLM0I<9Sv) z9Z15}b%TXVPd#s9k<4*La7Qs=dj@+*()spk3rpd#OYBiE&?ExuW*MPNzvu$8kG2v@ zl@~?mA*!AQAN^N;SnjUW!#YgYzomRz_iBLEv2y&^E9v3ws53uITc+79+jHR~S=x|& zVt`D+1k8)F+<)w{I7l(9L$_aZj)k-BULHO3)>QowKr_~uJteO=Qp9Lt$+r+@Lt{-4 zk~cCXF0!lff#l!}6V8k>D}eBheyp&bVoQG<+T4v6O2|9@=~u$1GSDGthf2`^2>UJw z83muz7k3N7RQl04)^4kYXFIStJKbNhvB)6_xF%!MHifd~Ho zbd~ncA=*nSGlNay9gCjql#Sm>|Ah2pQSH1oTF)#-1*JH*u;L)9*GU4@<%C@_!{q(? z09i@LCKK=tY*ZhdT~kVCo}Y7~(#_LJhn<26FK&#SJmH|{zGi>W9$#Q7eTCrP)sG~= zWeTNU^q{XMCUDem;67X5bJMMTY9+}w@tRP7{ZlDZPPM`V*kGfU>aD8CH(JHjPso=y zxz`F&+E|>|EZ;17V|wO4oTVF z1uZgEK1}PRk1qv=ChnDgTp#-)d6!{lE2BHfY2hjaGGx#!k?Bz^oZkLT?ejlvj4(J9b6Ef z4cnR&tRkRROCq_z=SuJA#PJZB4?(Nbqx>&_U;Y|*^kaRLq{2_AhqKG5e;5Zk;!L$r zd>C;6ToroIvmS<#YKy*10um`vM6Tm=83$)mImBXUyXyQxqGjv);bI(AK=Ew``Y1C0 zI?_?FDSM48#ZlLc#`Ylp#z?S3Uq`TV8q~D(;e9Orpyyb=~uwD zh4f97ou*mP(<``*2cQ@!V<5q5StUeiJyv5x9KG)RzSaf!9bJI-uKS4}=leB3I(b~8 zP_VBOARPAbDyjw~n*nqfIuR=2H&wsG)~5A$sO!tD4pea-2jAjUM!G%VSi%5im2n`j z?;g(!1084l#yl|Z{#!E&9eM1DavZb;$X{;cU`I?Lr#sMCDz<8vryo7`VhFJpI@ zj#N;&&GlCJtKG66bVu!Ya{a9@2a?p?Khm)UeI(0eGz{O0H+g#}cv@~5;NcEslyvA$ zY~puKju`8Bio4L$Y@dYk=ug|x+MJS;Y4_c9AKKVa)C~3I-epJbGcZGQ=>DpsMxkG? zOonoB(qJ?&S6PJDfAhk)?iuA^6-N*hZ53GtZ{Xy(Or_1O^U=fQ-+9eA_VH<0|3h@f z_2~$sIK+Y`pqacZSSI-Egy}#|Q&1lbO1X~_sZliUPT8dkAGzF#GXk|Lczdvz@CU!zM&; z1y=Oif#jk6oJV%&wd1qTidE#j{b>14BKWg`AF65`d8ZD2UKflBHaQ&tXt^Zk&Zh=e zoTm28f=XJL6fF8jUNTSQt!1@pzV)81qbh&$m8Rc?A@JA zBEoET-hXX)?|1?1yK$`aj}R_MwP2c*x%cV%ybCIT>jV#nV;-3wHboEZIcT z`IECJB&B_`XF$gEE}3x--$X_+IO;2~Fx zmfo#v(QE!AfY^5D(=lidS5*V2(K3ptbO&3(TdaX!=p@t~>}w`Q z#CkSo2D7s(Y24#@C)Q&=`?E)xp*ktdMElQ^`tK57XjOChGBD~^QMf0iRaLma|%)pWlH&T&WBiahPTZWkhKfk zc)5|k3}kLO!OA>0xi*IS)rAVDlJ<@4{QUXX6Z=g+o;-N|ZBX$&uDguhH*;aJ=vm?$K)U zoXem#+}#UKb6c(Lm>d3NCqylMy4iN1gF6Rxo)>Zmnkw; z+{M@mYBI)0^=KdR5ga8B8UP(L#cz}ap5!U0xW4p#(Ui_g9YVCa>SR^%P)e}8Ai2#@ zB+6g2b(^y0XsLwEDD`lMo-Bruno8$VfQxYtA{j3fCMo#*&pMVGF}V`+zhcar{PMEb z4YY`MIR7&BA>L4ANZ!&5BPM6UIg(sCo|THV2Uw$;dk^puU|@Kl72+mp#sVTSe205@ zBxR#jBbnje;B9r3Jb&Dj@b)IC9Otw8oxQiMEyV(_ABN~B;D&(sedW`bDfFpx?mq9h z*|g6(#39CAB2BvTf5h2$S73QeS5(>3_=4j8h&N8GJSW6!9^Wxdlfg#sLoqE(M~nj3 z60O%6A7E}r!savl1wDNI|9^9T7mHVCPNhD;_%-+rW2r=fhwLk^L`_c%x2haGZNrnb zXld%h+W(?IGw_fPro3QOv5V{hNmj%L)9c&8etCAdmiA*{JHC=McZs{K0s?HK1Y%>3 z)6J0usvl`O%#t8v#=65^H#K}fK{LhmgromQ1AtEUC6~!heA4nL59ivv%^XN8y}E_c zo5Qm`g-PZPuX| zbn;kWDR1c)e`J()jMu+v1(?c@w&0T$S%n|q!-6HjFHq{e?G)00<&P{Um%Zhq+TDw>M$B`Q>#JSP73#G&MYBcZ6#qaWFCjV^9np$DRO zhyDDK*rT{2$!>l-@7LlF+@Ao?r{!caRV{6*q<@2q3^vUE3VYDy7FMjlLDFY4-nQ$0?_`IjMPn~mzZ-xJ0e(qbXVe+9#S>(pZUGBcxa-- z-=AY2B=}3386H;ok3#4Y1$Mr!E>Q|4*8hTaL46>p;p-UG`)}KdToj|Ik9YdV_@@3$ zKxCXL4QYDRo9gUJFS@o&*Sc-%FBTXWYBsdv@8@+KUBEKUL+9jdME4QVU#z)}2u^#K zuL<;@{cE&9Z4DSV4^)WLxbdINELq~0v!j^vIBFX)NvqLegaqO?S) zw)nN+oI6jPLI~{5!wg^94_^cKbkn>J;7uVpU1C~&qW&qsxH)+ zE2|&v(qZn+Jy+AW>q=+|GPWYPGU@M;cRp91CaWl3XFDlqr?GUm5-&#Gc^)jYc#)KG zuH4iRgz9zt5=g)j zlfiB7r!cKBuS5hXQ$S5pB8h88jtVZ8q*GI5T{{pstZ>C6HEm?V5=Xo()NHpS3Bj6a zj_%yhC%f+L6bx7#E+rQatI7|M7DE3U4p_#aZ?%%cdXIG4A@f9z&YvYZd^jAZkM;0{ zcwCMk<|09(iD4)pFxdOKmrrZT%Otg!Gmzn|TZC{6Y2v81pD{P82ZLkwzTj&&rL5-5 z7zT^_#>G8aR&muQT${1^#V4Za#o!xE8F?lndR$FfYRJ_4(P|v(>W<%|1!!n{TWVLr zeSKlS45|w^o3%yLfQ9kQrV3-aubFNxR&_k%%YpsgP1YwVYy@PjQ%BU%((c z`0nEFb?O^;p+AT`2NRNvf^v=Gjl%G`U2Yl%O&+RT&L=i+T|)G|BB8}Ebpn!f?4i+@ z$GPSq%SI3TV^wB+q^AuoKBrp(TY;B9N5y8_43>laS`5vMM=*Xm9PiOVy>#8#W6ih0 zZm^ZY7ol!a(;v((82}hxo2X%XoPJd8B30y zQrEL(ri0^*vG^|}`xX#hUT#9Fn%sO91?a&7r}u0U*8Tw8J?`KmxgNRCy0z}4R;y%4 z$BX~sydsJ+El>I7?9Q}E$er``9I^$cGK7~ktm=omkrNn#n{RJBICt$J)_`RtDnRWm zSgwn9RF(g@*w!vKQZ7CEf)PzjZF9H|;S;pkcuV*1#R1WP%$bkSM4PW;&dgpzmwfN*tD zO4~sQWcJ6I3$vU7Ko_}b2D(9xFCR0)bV_)TVVH+YD~LCK*nNH`!c~2$NWFHPhDS9ej4M(dV z3YC3k$&TxEO0_=Ss1i%XPV5lcd>_ckN{ z#NDJL0{0|hFP=wO1i#^SMo4l^1W`9@dljuej2&t12}$k+L2s$jZcH?2=$c=zc$Rkh zv5@%E=DBvP3v4s3fNt;5boY0O>m=Mw#;j?a3FYpc@;UpYG$@BiA1?u>DgmYIqs82U zu0*4e-@?}*cD#k;8fb0NuRGgSOCe!p+qe9wUn6G_rhUKVPtUV?sT`Bl6%y{$remVD zV({0%f5?n3+ zqou2b`ruyW+D`V}n4728*c3$5rCpXdyQ9kECh*>=3ACW%`}0!_^cL6`4DTv@R_)E4 zW}l|jIiF&8yCFet2sr0S&W`o@0-Ohe4jVpx4+7m(dHMg=K54RB)_=<4|Hb=u!R|P7 z{$xXK6^Z2h5P8#O$Kg$y_VGGAN7>+Xjdhc*V@ty!v`JdQ__&b6ZMeCUtC64w{#!@W zZmrB9Ewi{wMK9Gi>b?H*gwtWu*EYrf5;}y`V2L4db6%r>ZR#z}*c+=f3)xJ6&)cuV z=RZOp(4W;>USqUFNYfVd5ZclPcz&UMo%-7^!Fbk#@`Rt;9UsX&K%m-zfkpMkT;(=N-CevVv42S5;{|U{AXBna4dYzP#^JkvZ;37s5|Ft-QrW4XWBYJG4(T2b1)) zWc4b+e-m8Wp1)xk+DxN@iXHG%8rkp;E)I{R6VElC^IZxN_nUeHUAU3z4NNiz|R^zab`hwJH_pdMxYXW0yYW)r!4Yd){a77&q;h`&x+a znKJ+b79gXK{C3UrKnJd=`>rC70l|Jwp`P2}w(MvUL+w6@u<%1x#g>WXe5R=cKN2csh& z{x~CS$%72zUhL7zIW-d{aeog$=xHJhOd@T1i(fs!F`?J2>}SRndP?;ozt`HV1r6N02Gth*n+ zS)R2+oZs*;lDLuxxi?Ho%D6V*dEy%NYGYPLhs$+05jPvl1y3*c%Y)w)x8;5+0s?;b zb`zdAd9Fr%eXwZXU-tYfgX)+Dkg)^9bVhv%f$&I8C8`5RS6_!%exg) zrhly8bK1pDZ`fuXz~$fSF6?&p<7)2y($4J~=t$!o_4nyz-P7sWRfIz=gxKG+Q7fr6i_s!4Fife(xNR+`CTIq9TQbDRo7 z`rcIFp1~_kx66f;q9}XIs||>QEHIl~(%*_jacb=Pd@jJJ2pp|YrHl)CG=>Y=#2{_a zyw+ybbOEgY5tS~hFg0ng9*HU9*hRo93$tZf<{ zc|*K=M@W+Fc&&f3TvxZ$@DAXY?H8LvBX&VHc~)n8?`(63P+^d*KuLb{r>=men`l4* zXJ@gZ<3RX1UZ~p%)&vI8@dDYxXA(tvm+o+tJZo5SXnk?BGq((lP`!u0`@8Rz5hO~T zM4F0HUZnlT{fmn#Os!tIX+gLS`;U5N6!<-Hxiki(_(U#D8Uz30a%-){P?rxm^78kE z_y<7Hi#391PvIo_PZ@q-tod&C*n5J7tw>KElc ztE@pi+tyT0cao$rPTeW@-!H$}*A0~uH!s~yrW{Sp#WRffakKI~fG#!poqb=vw^!fi8 z$WgRiSC1vLf)@7jIry-cy$m8kr0t15{C*Z;RHa$7^1&DH!4Oe9n^!2eAZHg*^p@3C zypEKTLR1_|01i~MxoaQ4#G(4UfC&0cP9rKl)Hw~haXz7i@J>aB5VYf)$~TRmbx4O3 zs8W&}$XrtHbpr!+Z-dLU##2aSur7)eA8Vxr=Oj~Ded3F~-z%02YT4bO=))Nn7~ z^eRvv722JXVsMdB-7YeBa^Y}TA8_nS@np4Od=~-Ud{$Al`nV-{1B2L~=w*n5P5UmP zpqp9hrdSvK#ZRoaICn1p5z34LbsN_A5p~J4+BLmlU@0_d{uDAuq%{-st)hHX%5*I8-Wm;KkvB7uOm$^KX&}!3ywW)K z6MYv_SQ1Wr)embD$dg26a6hPMxoBemfd=Yr)&`VuB-yN7jb1an)h6SnJKQm_9TZ?x zvdI2NV`s$uY}3W%@gL&tSHBNlIG&Zu+1Ya6ss=;3MH)pc-I;OUTS3ahPmJ2X@oCqy zo{RHPHp>;-X!#5>1SwUKJ#cfG1Dp~E)c93cd=jp$c-Lco%YtV< zGiYb~5cdeFJ-K^yQ$L&qJvi!~EL;!r7)02uuX}&+5L>UAKQ~WqEg3WogJUL?E@L?O zCq8-_ap(DCUjnK5?B($3OkT(E8sXe^DhM!`2liw1n!mIVs44p&ST5(iK`U_MeSBj6 z@gdTBs|)WfY=GMBGeW3NXUP|XN6XYlQ@uA-i*6n-GVk$Q589UwDBB&Rkce=;h z65+|juuNBzHM8*6{-_I$9{dL3p)oZ$cI47IR*v^#U%WcI#4%z__u$GXf(-FGr^|Ja zia4JGhGXPRPT%sTQ&)!D;j(iILUzrOAJ$;q-K9XV5=3_$IgT^! zpNmYIRi_!~E6Cv}j4iIwoc?|fG)mw5>+`rlOK+*~soL$+ZacGlXs&(LI=auuU)RR= zg;ZYk0Kh;eIx_j-EyX+n3)*KKJw(35^-9gf%3d29aV~*hYVT=~?3wkKhJ;pqkytbn zJouo(Zc?vu6O*>&b8~MQ zS=#iKR1yZYRd2s(kRK|T({2-&%gNB3=Xah7)r>+@aV$MRTSW zAcB4JVcqBeza_TQ4lYq<+Pntdj+J>wtzA(eI;P^dSkYK$B8`|&Mp)zzqfBK<)f`@6 z%{u0BD>t3k%mUTk5~o=5X1I`~`J5YElN5=;i`$ttk@d>sw7(CZ);Vd#zNX2`rHo~^ zUV#%k#j}3PX}DUp;HDRlyG>ZE)Jf~|WRK#(oUU2l5jQ1=u_ZGa{^b)(o|Nb-EX9hJnBxODVE*z4 zjbTafe=7~;S4uxm*I$#*vnF&Jio({y(t)v8+UFmo0(S5&P-vt~l&yG}muY7c z&n+UrKY27#vG#SOosY~V<|jyt15F4`+&Yv!=3J;pQ-7u2oopJc2|R9i<$R1dgz%GH zh4{*3rro}b?|`+5=w)cP-GSlT&bCvG0mIX|J6}enbWR1t+|h5w2`1EbTqooUMG}U& zxxeH@P2Ub2ItcQZY+^TWF8-Jlv3%$Jk2w0QYl$Xs{)Y20; z8j{bTSSPyH!CD2SVb&RVgiL;N=iZhFlt#D3FFz<1+z5V)UpE8rbZ665R;ssrOQ~PH zrqLYfFd_X`fT9qLgzyw?uixa^rc>-AI>OT#v{VVb$yRst3GR3FFA@Wn@) z;_)bR$_z2>6lQMA9&|{F1}A&4OK9Zg2TNdPnKYB~$ zn~;V&@}%#@>!ql2_A!|lnldVZ?}`FQ@YCXYFrt{en#LR?5wM0e! zZl+Ji<=A;HAe~sQPC<^~h)+JM4{f!dbQY*E<{;qCG9Ps`1yrq<3)JVCv^_zgR_tm^ zAg8%oA_IvZns)Bw;COOCn5Ueiox*~D3Q1awr;+HFsU8}#K)%mOXxc-WMTMHa6o(mN z&WZ-u8)Mfw3 zr5RY|FsX8qFg-(k_D+;9IEjnk7|578xjuY!^wtzsv`|XZgVy|oq(b4G%wZJw_#IXL zl|t0zif?Y&E7BoG1;%}3x{nq;ez#fg{$A35eF&XLqc|#@%o?T5(pS@=BlXvnu`vgJMY-)04r^+xBwEHBG2)1Ti<@@TBfGMQoLm z_;(=>OBbg`Kc^53%ZCo<=t{d}1U=;vkfkQAc#@SJTk|(KxcxbfmNeCgJ(Ieu&;*x|$P$#Apu*e{dfG-LqiL1p4)BDr`df zgI5y##B35p@}u9VRr942>?)+<7SuZ=*;ZlQMgpuBXmOyNXN!YYtdzrO`B%8SL&;T0 zyYlvz*Q25k=MQHmQ{j<)7u1m+dcOrfwk8GKZf_dn&`3<21TcP)BRwVkY;Ufj|QSQP%gg)E#Rd z{h6y|Ln{TTY2uZF8=n_Efa7rpg!pT5Lg5=ea$h-j1{QciQ8Xk(70~;J`qsDXdNRC% z3+tFR-Ww^$;Rz0vrO1WENq3;^nbK*{iH!P;9d}o1imE}U2S1W-_dmK~BzG;hI8iec zJ_s{Mg>C$`Th{Xnc)B9$W9gfIzf?#7H|D_w`)dj+Di_IXHQbW@2;_Zf%Uq#Zuafyf zlF|K!F|LWI+w<$+7G_oV3e>eM$AzG`9Qds@il66;{66`%95hDl;3Yq6IdXndW_?>B zzUMf+E}oystm-=_79!i-7w?brdrn6ymP;(pvDJ@t7d74!{t>0~x!OU0VR_JINY*<{ zlhhx83xr|@u6!_d=OMS1Q=7L>laF|7`55x!rylvl$PG6787xI@j2?!%@U4O06G-WG ztGcyRez78oDzf2+%TeMD){OU|olzZ2Z*~wh4qTLqSP>|UC!-jt+`kI;mk02DH7cE| zjPT$GArb30&e}!~tp7O>BZb!|5RE45n_jYO8!2|BBd|a5EFgD_LT-)ysjiB>9>` zcZ2{53EYSK9!2zC6R6vddk41qrZR*af+DGglV9~7T}XkZ4R>u>zcGwB`H=ImE^l#D zK=dvBu7CK|{5K>M%o%@wMBg0}aOHy)fF zxUJfIP%E8|$A9q{)Og@6ig(_us(MWVB^dy*u0mP_FMbS;wf;VnA`hF(eM3jMmBGUC z?P{K-efMOy?Gm}-ZQjw#r%-Q8Yz=-Mruleep~!A84F(R*KW`n2f5}NoKuy&t+7xQq zOTr#uqVR~UVxZh4nSNP=b7cyu2AFv``ZRO6LDX~%QqjPl9(wXTFVhVFJ<~^bk)p>! z9D|6=#S=Tv7%TyT3JH|UQ}8fLVMt!b9x^0zo7ih4>Xv)sMEf_%<4!3Y<53x9y5a8j z9X^63n#(8;h^6uAVx&}Gi`Z1r=OwcH#TMBiuMT;fac|N^r4ESH!dju1hb1VJK2wvE zLhi&ZGr?`u^i_|=PaMLGRJt6**n42>U*(MK6J{QZZyU(K0=YWMADV?Ty zPlhvaj&V1V>f)}VGsHPip^*^Hb_~1&_sg5MC z#Bam+MdTf+hS0u6u3IO0*!LvHt!mvurqD+E?F0!=ZTWJ|R2_~aP7Tz6wdIJgrV~!R zG$2Z^>g-7ci3jzuogOJ|jD#Y__%L}lu!o0q8y^dqT+NY`QPRN0IP99l=I5hI{|{IR z#P&F6I5e!ilHOXL$IUG;$~Z^5yweo4d-&O0_`b^jI$HUF~C5PgdQk9@}np?~BYx?5}8tpjdJ zNUze0b4>XMc3Wsi%!2}sR;q?x_jNhCTVkaj(D5`M$$1pSCUDSRIc@cDYN%BNWc6Y) z^dfZuA{eil=2GmdbKbe!LAQN&RrVWMo<3QttghMTK7O+o`sMxSeC?@ArW`rR#;fJ< z=UK+ai8p`6Ka?`O(ISv$MGKUsjFS(|>3`AEij6fQ`e8JGv>G2IokUO&nLw~#{i-et zG#*Q6U1*t_{5rf;Wzmunc+JWnUf1fT(|`DF6YYkN&Sxr%O~?Y8+E0hES*cS7hx+`T z_9Lm_JkV`g43T`OA@NvSR=Jf8>|;KCb#`xGw(LH0f3-i%aL?xwW3PpdCH@sNwf=5d zA*O6O90Abm3rC)A6T;4<&xRhoqWgp)>+`xT0V0kuXBU{S(f+-K9 zYu+c0kMCO#I;}dZ9n{%I#eyJ95MT0;Fj*lk@@T;2%aNFdyNkWMV>nJ_w28J%hraZK zM>=;j^O?jUd`zM9Z3s91Y3HC9$S>h3hadTb#roYEPI{hgU45>;G%PG3>oiR`mB>gX zZ3l`d>vbTimX5{ZUhvLpXHk&g2M37r%-X~4;|{aayPyn31&IzMDpp;cvkD9l``g|- znv&BsH-J9oOkH&y-ki(iVw-YE$J-}qNO7o*!99<-Yo~apG#N{*IgwMt~fH z(L;Ok`;;rkw!$Y`M6ZW-^M3LsC970@#&*4F*Z_u~cQ(<3#p;eDxDvH#WQC|1Cq>1G z0&RShZ+)G0MU89k8RU3i0&mZJo4=<<#jNMYFe?UX)3{&nRNNNqE`PQ7M{fZ@uHUAd zAz)$kI0ZZ>aM6>uT8>y&YY>KC%(O9!>OLI-neTD1Alc#g>gN)co#_OjR@F8hx~u)qbu%3ZDd{JV@Ut*d!dT zT6rbE^T`m3@;1JN*R7;IN8){xSOZ2BIMmmP$kXi(nWZdT*&JBDH??R z`ah<=GAgcy=N5Mu+}+)ZyE8Ziio3M9ySux)Q)qFDyTjm8thj4&*AM!<|0wPRc2 zvG{fI9nFrg@IpoQ@QC#esuPohPSR=_fZwhzwDb$?F6-`#2zJp;-ZKeg@Sr8hp?t`j zNrVxqv63*k1cZsLI2K`~XMB9Ou*kTcu_Ddy=hhuWEQAl~XJ=PU$J5>2TUe9U7FnpN zrD4stlYO7ZtK}Rd(Q~4G^C5gd4Wa(FFY+>>jbPDVXd6!0UQ_GI>Np>&kw%Wp1)K$C zY5`mudx6E~aFjJtnb(NuGM)nDqg%@-y@k%wz^(@McTJ3{_`fKT_r&Du^z_KizR^gg z(9_pMRC;%{W0phB#7j4nROc%sGIlfNNsv($LVI%gK8p`z3OF z|FUn#nO12C^clvi2T*OBPAu@#^n-9Xe}U5H4m8yBEAgN%W}LP%IOAyTO^p8)=4@#O z?9;5QmoP8ym>Gb3!iuS2%%$)bWPwwlp7;WvfC*#uB~gsj4>BPUKOR?bRQP%p4t_6J zR}Z4k{Gwm)z8H{0}So!o3#3RUzO^V3IXWl%(GUT z*T7_YQnpmK+ckaDU*^d-cBciU1hm}vzuZ>SaHUN(3(x@Hj7+D@at;jfJVaIHwJP6G z#blvNO?>Sq^#bYhTqt@!^NNz^C(zRsLcy%L4QP&*RUHsYO-iDZRkR9Km@4#-%`mg> z?wkrSTkpUpXiRqqXI~%kN({fgh#LUk=m?_fqb@a4@7C04KhF8y3-!?Wo`$CCyiRd3 zJmV%3z!D%V3dAd?5_MLz zN3tn7vVSD`13v>(g{b{ogOJ_Kx zNQE<;{+c}s!y-t>55knh-7$uG0k+qW%(D;P=3lqn&lh@`$$93eFSwT`bYU4n^dY7=gZ;}8bfqHLZ+AA&l9Bpd*7;br1NLs<R>q6*#oF9Y*K3pD zQ9ra;u`7Si%w>i18ZOMQv5dotSr**xQ-%8YU1toxux;&aa;^$Azdql3b^eftejjak z!$sTj17;_)B9<4MsiVX~;KH(bwH?c@&Ll9xY+f4*Cnu5_g&36sWpJoaUngNt!$UaI`W!8raTuKlS?dtX6H^X4XssSw2yq z&zN$Gz+{26c!k>hRV$P)6M?s+M~+XNG;%Y9JmGQL!^OaQe&}_-oNo*HN}%IVb4!}{ zStzK;egQ>p4NSfX_0CH_%v|~p{_YE7d3&edcGLvQ6ZhS&Y4S}FC@THi;9KpCgL?XE znyww+Ma1Vv%A=&TQGZ)MsJa*d$?Ke_1_u>MF;i!00cO*Pul<9Y+3%n50Fz8i$bilZ z*5qZsDw0on>yEqslwW5KCk55!EuOyo-UAhNLJGxrr35lKGrZ`JEQDYp!5Oi0dz{bT(~MhVMg?0UYKZ&*!qFuVJr|jPD>?Jg*OwxGjXc@~j-s zPIpYcyXdJYsc*c*E!~HI-;u;+oK5>3)cZQPofoh>WFHtD1v+3i`L==)np&%cZ%sx@{W$0zh@E%Gu}G_>(nk!7h_3g*~2vv@gBd*bp^M& zUjLN;C*R)m!X|#S+}!o~ig)uP@Uus74VSS#@!!Y7P&xH2W3!IZemLs@JJ9crXm#^9 zM7wb4%K5?vdVz|hkP%sZY+{%wj$K%H|M=afbBP@XBnc_^KvM0K!Z`uqTZ9~Q-0Al_ zLP~*(dd!8%pCrtjs}trz2g1pa%_N1^UXyr!6cQ0ShED-|D=^usTvy-#rr?Zc;kz)? zq1Nrmgby!DJ^@{_leD&X&y;nqTw%RfhcvngCYcWtz;8^gXluPnKa30p``1UR-F;Er zG6PsOIf6UTqne=~I9T7Ll^Q3EHcEF6H{s{$#B>~fzN7xG;%|KpXE86;YPvyE12_$~ z{D#9!Vz|_!g)?lP{@1nNNwee4BLiGm2xILo-9l*s0Ae7#)YLx8KW@1o-=LL+m)pm6 zy|t%iF{5`KV(%U6A8ho^w+Aklc0Z1~BJRMAhKzBjnCGAllds%(0eh+2$)46hVX%G7 zq3kmrZKc71D}F!9#iSi~mCx)+h9;geAK8<#4$T1sfAIb)$B`)0a*bd8`UnE-|AIih z04akHydcH-ZbnrO-iAYA=0<0Pk(3Id{_h!_F?o!c;JBoj#nKDBp21pc#y|NdL>NpX z{HONAA?AFF2LtGi>ugJrNH4uv%b-4K`6g~|VaX5P>OObi{U7%_eB&>lB=QQ4ajpLu zkuuz?#rcWh$3nO4=HYbo;A@VB7@vdwjDgwdEcMayD|1Jfu<3X++f;z<(5ej`;* z2$6U&O_guZ=!FylqI^2TOk=A?o8`aRiS@}c3H3-#BGGAj2@i8Aq-80+&mGi!dStSt z#O`^058@XnsH6;xbf3W~JO!fD7S4t?WsD2D8k3f@%GZm&;pRQ9zk=ya&k+z@-RgLJ z0rYXu@&*@xNMK%u(0|+oAB-uQOTw#>gap9VLfr0KwFs;5FeeX*Yt+8|LO_QY zmCz~~Nk6wE@|EObLAx6`Al6ou#K1!gV6y-;z3K#!>s8JPeacmRHn|dZIIcd*M*3p4 zq)5IbshpURLj-<@kEk_I1v5$TUBlpI*REaSzhAA7qY_sE_7#g9O-x`#KSiof#E<9eP3C@ga|wDtWH{_&$6JVRW_PeTmUn5XJ-Qf z)C--|8TYe6J1zwYVY@9sIFrHbGrAcPHuI$OWbJ1VOc@;bq^v05CYvU4=2F4f*8ul zkqWAYG}GEt2v?lZ1Yhj|VK2rkUMs?%S+uRqra-;nsCY;}-5jt;cVZ>w$-h>D%2|^2 zKemIedueug^eyjydvC8f6(x|^$a|8JU=SQq3wn_!SKgS zCJEpU=sx4oZSF@9;@b(qe|04v;UXvAIe;NYAgBMCNh7r7__H(WPg^_>2PhJdxg}D2cyS0_}e>%YXwLbc;+KyYlDNw*(*A#73 z1D?ve1OtD%XV0g0EAaEP4m|oeL>*UR@OX1MCFp3+ToHQ*7|OZ_1uho+oSLTdRAw$(j3}&l7D1NIyTG)^61$Qq`22b#xSbV}E!EUq#%>tX^N_dy+hi z)N8822u&|+-fMa$O|)+kR=QD+Cw-eT5iQC-?8{_<>Y$)q`BdyBRG%fwSc74-XYr2G z)6q?cYpU_~$ z%H~QL(KhY!;|_VG7unjRxG>pZrrR%APVC?}orQPoAYM~;JGlQ>_=TOzRgZj6(DgG^ zXIz|p`(?z6!(DrNPOj`U>vp-Q{-H!gS(sF@uAOVOpr&m|IuTyI`<(V6c<_c)Vv zWEMLY1eVP8Yp~Dldb5Jigd_xo;G5_L@1GyRvBac7FLoW5$^|wiAmZA8F`w@v=DRSy z9X-k|N1cwpEE=qtE3a>|sGCk-5HVf{i$K2hoBB(Pv2$&(d~HWc`ciYj6Y$WgptuL% zjrB z=1bUSk(~w7@8Fa8TQEw`rch7kj7LK-f3D&6K87_4i~b-capzV}w8DcJw3bt6#AS@(WfW6wCDNI6Ge{u|IV zG<=s2zL(4~uS{9USiu*j8b!;Zkk~$2oIgTYW2Hm9{Y{WV9cov*h(v%=ZDBuc`R%&x zeG>=S@%a3&ETyKToe6rqGfKP)M9S3>QoT~gK4?pUXejvIz>OZmerayOZ~`+=W`J9K zI3X#TBLWcl4#}ZV$vnwi*Ze}2=N$jzJpGBOt>UPTaY3~1B4p_&~Op|W+ z@%`#`_6FQvF95^U>~-zISVqee;tI(}-mjl3_66NZ_nOqNQ??)0X?KJjdDCaa+h`1gho1*RGeW&hDF(L-t)WNv|A zSc^_r-zNztMArS_W6Q1GxyHwLEbx9iGGYpc1dB@0SiDVw-9d1VxRK%e9xyQ1TV*bA zjoyN++)%zU*uyKGJ2J*cc5FgxfJEGhsUwZ)(1XB)#&KtFx@bNBjQsh}H$Ovy{Nsft zk|P%}JA}QRka$d*#^Ngnt#{F1kvNMK94!^tHBgYZm_J7A|LFCtqu~XyK)13rtPDin^tdG@t%fcSC zm3bB?2i%1uTGUryiXj1Gx8og91v{9$q;y)%ekgxvAT-JaJUiJO;YRLamM5ePVgab}T{pW`*}g*6*- zE1f%A(#UdA@*50Yt{i8_Jea>-)g3q3z)g!8Jg-*C9lg>*=PT~ zxwj=Un17wgTijE^KQ^$CUcV<*11s->JnVtg5i~jXxfFGiELf3F^cBcTRuU9RjCZD` zbaeDfmmj*o;GIueVWXSeSDBg2Boorb z3SOZwwJ4~%tt+o^P|CA=Kx0J0a*$^l9~Bih9WaheeO>9PtB?TmLP7QNg-e)|!Dw8; zA;yp56!oGJf7fMR>q_*hjAHJ<8I>`NenD>$#sASGn{BRx4nHNx+bTpLA zD0<(5KT6zK9u{~>3|yFCH77jCC@5|tBSQpqW|qb-{#Ga)+EYieQ#}O`di*yEyV-_6IxfB@ z^p>Tt?D6KCYt5m)XP70*KgK#rJ>dA2BD33$rO3xpz+rjxJVNFRZ2~rVhvUgYkL%o* zNUt8Z>?il&2k8TpqSOqyT^^h0)EzpU9ko8JWA|{Ef*0I*$z}RO*7m?4~N}Bdzv`h+SQvxLU1_DXC>*kVQi!W}KR89CvW0pArS=GZ(@lE1|+Pq+G|R;gEZF4rEht4+~Jh zPmz0l?LH|H81-git{%cURcSr8s%B@is|*Z53dkF`gCaoNy~hcXlMZj66A30TucEmXyCa9vkMTvK7OM_LjrVG3)19JZnzs!Z>+UF zrv6S4ifUrgE#KDgVF7XcgJjf3=EIDXu*EV?>;;=m3jxovZS_RDf`u9ePZl2kWDnmu#tP6%6Ou z*ZYcKE=p)U@fvN*ny9k+?<0Y`uTF0^R{(}~@5{LbS?+(GWT}dE@BWVh!s6vcXpYRo zf4#P#QOP>uBz&K4UFkcfGHmb~pD8Ir&8oRv?B7<^qv+ubNm$;AX&P<|+bz%0cS`lU z>7&TXxo@;9O{i+9LyHgCmGHEN@6|ToqqoTau~YpFx3S^zY_PWDz=UG$l|;7`!7LFB z$46c%womM0M>lpddd#)`U?@VCJtO`xcp>6zvHK%&9N=<|8)jvfB6MFWFbEJw=$pjW zk0Z+I{<@(f&%My}_U#`^a3i{HC&`+=#1eMXHndQGE}`N-D_QvJe9ev@`Xh-V%9FlE zfkrBN(Q`)OK~cG;fm$Lbp4FOCmZ9_x3Oz{N3(O(0??_<{^)#h!v3+fl$eI{i9ubv{ z8V8+>|InzQ7N3kP%AZC?*mbVtCPjmRgyJ|j{LjevcAx1KZ+qA;m8~ExrvS}P6gimn zBQhG}K(ppE_R6AN9wN+2QF+E(g|8N<8Z9< z7i~~uEu6c{yPxWlVUv%x^NgLZz2b`{8QZD$^F}ML)K!+e^-9?v2_`2u3AGCn`fD3FZm*Z!D*U^q-?Ei`% zGWi(x99@lJrY{!z?@bx(y;#*j1T_BWV{2sp# zg%-Ud+2QRaMIMZmQ0i_^ZrZSojbmQhERC;dbq&*_ONLI?T73|8A-O43ChsM$(JDM$i=;xOxj{cfC~0ML-bSKV%KaohYQeAf<2qg={aSzu z#!X8y=2dZ+)iPruul{EU|7H<0iQsc;Gk5e1tjG#a(59(U^Y?V=F~7dGHy9m9BDX-z zud55IV4%?aIf-cSWw!kK@5V%pLFky<;qXdupD@~D7qJ90msrG+dCAF8LTAiD((III zen4kcQeISGAz3w3d@!jpam>6?wM69(oF5+gN_8&U4>-S?{UERbW=;dH)O>)+>odwPiD7V6c}76(pv=Jj z<(1%90nR+Y(`Ph-*cz2ILvwBvc2Rj5VK!ZX2TJD;TVcfwm3hQFU-;hgEKTpD@OxDm zO=LFgKyKL7Ky^?=hbWl8N_-V5FCjWt^3@1DHINvl@HNDncgM6P5mv{A;$&e%ux2Nu zco$l7P6N|z2~77l-m>3D+6PhRTbX!L4U z9nWI0gLwE@$C$YUP-Sd$9R6>1QR6_Q^pu$s@+eAVj%QI@6?#PjSP~{)F zsoj&U5ORjsj@Fgn?@LkZZR3`L(sqchgwgLP4CJ0TozXcwAwo!-e{JO-Lr=eaIn{yp zWIp8G;ID&5%FIN#02i|t!9PQ%kPuqZHf`MbT#id`TfSPBGw*Lmr|8M-cY3EcUt~|nD>sz0cBcz zp=%Gq08sJLu^(LK;?g`hF9tbiTW;Z(E>9f|gNeTGRsd!c=GQN>PrvaguDHd>3oM<& zDe|(U$eQGYWWw<`^-K@0+sKIAob>;Y?3(?S&Jn?f@%}{QyOTsC3?TZjZ^QuKYtz^J z3zv-NsT3B4#zBo`J46CIlGM}*6#c2dVJRjbkT;gH> zl--Q0gfNR{AM3JWZcwex;B#O}q3WtDYe zGYJ<@O86ofb7H_du2Ycw@x|r)un7U;r;sE!1&k-*tT@hM?$m_|X;(L@1?k4e?n^Ou zGNyDmv`k9LQ^ixS$V8uEglEh-FZGc)Er9F^Is+OR$OzMa;Rzz$tvBPOCO8b0DWsik zv`jN=%ugQW{6dXQW|FrGmL)8x{l1$7I(<~+d*CA8RJZNVeluLsLWk;-TBW*W1_D5_ zA@Om0iJF_{;Lnie)!(Et**A!BM0F)_u417bhyQ&bqr{+%3`o6@Jp zpxO3U><)i@BDF)ZRA*eNGYC-wNH9^f1_G<5LcxI6+MmLKQ`kRmm>Ltyti-H;o23do z(LGYPJr3=0PSa*-FVy-}-Tc@ZTM;J8CXBZwhv^p%jE&_+%>g@f7q2B6s-DPG&#f&pZ{b?|>%RBu2@MMCt)3?{v+5Q(1*9s1NX*I0~A>0f5Mo&~@ z@zna_R~*OS9b#(MJ@!?x)RfZ)rbjf43!`wfT68=~(4+%{1d>Q2waid!Fg79#6;Lzi zr#g*HU*_>dXILGlh}u9rk5b+=Zac?BSu6v2X4ip!78A*#eAb=9SIlxbc#jyGpj zovo**Uk;%xHn|$IOUn+Jdkrg_I80uFO;Xmg^2>_RmhA98>y<4+r4uqgYv55lU!62~ zGHMqZV2E0)tbmhPXHdzg>~h3q$WxQXSiZDRLcqt~-)fS`f*CzZXNod_%YAV-YUYRp zVA3fuWsJmNxyFj3jxgBrjnB`7D+>5*3{xp2X`BrV{2Pmo;hB9lnUaLL9B&%&K+M(| zfcmUwlHE^wnhkf9T0T7a^}sQpS8`Ww&nj;_z}izF{=*A?y|aH+M8ZJG*W$U3aDnY> zwy7zt{0h!pLPJrv!Vo9ltWG&R$Ohk1_@7rgM5wqOlZn2iH^xUQCZ<2)oAlWT4rJ9=1YhI zFN_{c-nX1Cz7-D#ej$Vp7a;nEy&t-qmkW$-L;Xd-Ac|ldE9MyfMVgxB>v)M<3TIuT zL%uwP>5N!?UyznYzu>%okPIkK^5v*nE0C%>fsgQIA)2XsHkN$pMWOz}B90}5xt zSJWUXh6CkSWjv31QTwgvSJgk)phindrH~Y()6YK!$sj69Um&J#C)uyM%!-Ml{+>%! zDDOV4G?jPssXcMW9LX8F$T^?iRuYqbx1o$aae%_rvrV7gwn!K2_!5pbJzDw5lu1!j z4PR#2P&l;YYSLHHyNgWGC9j{OQnTNw%7|g2^I`=%XM(rha$;&;rJFP@sEC;%+^dmJDvMjDPuy$?1(i=sW$QNcVpKqw!h z^xmj{CX>&u!8uCfNG#hEvve=uY3+zar*2uqow+ksR_Pb1H3UC@<5Jh|R;^wSI&l5Mcb8SS)cmZAA2 z#bI37l{9|_k_SdAC=;e?vY47^~^m$TwlcrSkq&a`gy#3J9mm9D72KvVRaIaN^qSpfg>BY zNKp2qTxi+SuPRMli(Pk8c#Nd@IK+TLbzE96HCHUj2Obv5AXGpFNa0Qu9>R9Z2bd?d zi~+WfPk(=sph?VCt?fFtl(6lOYYasR1%Yh3?Ob!rNUX%-`VCL4LOv0)HbKw8ETsco ztq4c*lDBRS7T7fk<`5H8* z0~9zXln|iXOmfu^kI^nL&^45?>5ueN`++)LX421~UWfxKD}bD(+n@p`kR(F+zVK;BJXL6 zNaW!3rHx}2>{c7ak{~evfRZQReQ=O7HT`Z5)aU0zRXwcHXT*Sw&If^?Dv>89m@n$z zdKV;VjAS6F&;u1^Mx0Vfq4YiM(n>>pzp*T`)2`V5*?mNNr1gnnDfqbtZ{?#>{y3Lr zsT44e*!>{3%@a>@wG3DIMzQF89QW=6ANjuTf&qk#-TvEno=Sm9yqi(eXj+A_cHF8a z6Y6@P-?+qlH8&J*{Wd6HPkq$SBq^#U>imXTr44(p**{BCA4lQmRTH+ti}nOeaueILoBs6Ox!Jr_^f80#A_SJc}C?;i3v?!;?_F ze!Bus;<8yVSRybJ$jkci$f%`7Rv?TbFM4FJbaS)!$;Ka4Gc7GjVpQ)`1yJGZ^;dLT z@(-!P`4ZuMnJZI-7}x@X(pmC3ykwtl$1PvTnlD*w^OEVaa7ulJ(^M-WNt2)mC3M~} z%4j9V;O)B|ztMpgu1KT7T-`Bqz?0)zLSEBkD##`Wk}_;i&q$6)(f6h$TgXJ9ix<`7 zEp-Lgx`TV9QWU5F6Un{EG4iPPLMi25Jg&V-sJ_D=aEdEJUG||cnk z2KJ!`{d$}FsOk>UyCFFV@p9hZnzT4INpnpvHaF`Pk-wYgIwhwq^EN*l{u-~UVfKmt zA8zHw`t%T>^Jtt~6SZ9K4R)%#VpNh&{6KU~C`P!L*+;MY?fu9h8}#=Lfkycq(qnWj zlbt76R!Rs~qrk0R5Jz?|ds)D!+_|IJFN5FR`(X2uDKH3bQOoI&?B+|4hZ?FR7usTM zv<`vHig1`wD2yh_DDmZnny!O|-z8gZ6t^Jvg`n&h zI)SF%jwZ@o0)dXa&`)>Dy-b2E_Q~e?T?5OxQ$}_#Ie?ApA$F3M2w$%0vGF{NsldhG z^Tusq|9`I$Hx@;q2S5OoRV3t~gKyfFXu#R2q9^`B? z?ve|yEtf!uAEV8tcbeN>>$%piP`2P>>ZAmO`spy|KO_LOXBr$A0{%ZWaa1UDtW5XF zBfPgXL0#~LlmXh}P-z;bTSlxUK=i1-C^gLlV{693NbjkwQko?wo~A<9FTtYJQo%nq zRwAJ3=IKWW^KYpZz8sO-3d1jNGI9BDr_$0Go4_u;hFSe_B>P%;T*+9YvbrD;i=Nd# zZea~d6wYV>->g*exFho2IzarFBQCyg^u*)#M zvn}HRYMjwp3><|xa$#w^W4~A#<ZU_RQh)eyGcH!vO9&Gq-$dzd#a zL$oUs$9vN3V$|I^wq`m|w*7I$$GO!EejgIKY}R1XDE!BJR>LZlE@N->YRB;vtNm=V zuZY;b?t?B;=q){4_qA3*?+k(rg_IqOt;dee@FtD@o3Nsam1yFRP60)E&yBfDW#no@ zg+IB2Aa`pcGfjsL8;=cB3oSFvOugH#o8l;qey7ew%4d&Xla+;OO}Oi+-B>}42aEE; zcuSL=&Cwdd1MClJK>CaUMnpm;kR1XWZxGmm_Po~u<*ihV2>u7>JiUgr?n$v`A&P-9 zcE8}xUfYsCwq)y>Nc*$cR-C=ED@UzjG07FqRf$f|qj*h+J#pjygfOR%Bn#GODiVwH zlV=g0?;|>Nm@3`ce#ytiSb;xtl)Fse%519^zhELH=K-M_}EH`C^VDS-`T9 zeSTEGOnTT(WNV^(<8iV^a>T}K5lXCzuRS%q6~j;R$Z@Q$Ei>AJlNS~kYuLglA7k=2 z-B}axwfvDNgOA_?ZILCAtZQijz^qhB4FL#Wf|ByW{)-!!06~uNy(XK}T*`Fm?^;jB zzx^10Sf60pvS3?v=a*X?$p1#~Ke8>HDJfuRA>I(v#)Mjci*v80asmsig7G1$70{_3 zfkjL?EwYR3k9^|b5lXY#PD9gof9zTQ_zrIH5A-n0x^?d-YMlhh+f&N_o#5D8p^-Fu zR;YYL1yAmQjBl8LgC8|$QLG2XR(CoF> zFUjV=M|+?!6t8a3#{+QV$NBgZr(^n^O*nOGB57Jhg7=Gw$pDg@F$#yXIZr8cyv|jI z_-41lM?x?szin5PkrZQh3V}%>Vj7Y|U%5Pto@Rv;d}4iwGtoD029(X?mfgr2-WsDN z1U1ma*eXtPfYHLMZ3PbJX-8lxw8VhGL#BqoXQe5>VI|(ogGTy_e;t>fw8{=6dnp}J z#5EAiebzM!7{sA_NAg>q{^)k5jX*q2yX=*3My?sqeh6-uF{C%;= zMe+>I&9KE9bZ_3ZxDfRCgc=CGrA9D&LdQ$fL{w%i?&-gFQ^X>{J8C? zS!0fiSQ&|;Vu9xCQAU8gr1oeD+mkD6F2H?~Ag$*|(MS+&m6W*g=XN$J+3n0b(rcx# z-0gQq`gQ!y96nq_l%qNA#Y5c5!wtlp95y-m&ps9Xa>P$V^Y8xgb!)WTlVI)!;bMyt zut=g%M|Tjmm*VLa@A%6O&^al`*}1ABXp=SKM%bIiX9a6jbX2oN<~e(<)zDw~iM zKjzMFY1}GJRcI`E=s0WUo3w2|M$ScMyKtm*N&63^MB=|pds#fJ9VtMl#`zqRYPSJ1 zD{ogA;9zO8{ud#T`%8sH?ojG|{54^RCAg?={o7Mhd0eH)&;=6BhQ?BwoBBoR5FNgK zG4?hUqgrBM)k=u_HUDX!C&-@dSk|YIv4!Ak&PNIGJ?;r$Pc9nmjm+I!UuGJ)LZKjr}&LGvAIC7C1?^ zAMjKSJ_{lU+1W-{>OcKa3gd%kD_VvH7sE2K|7w;vrm=gC{><-JNI@x^83(H*JR|H-?f}o5k z(yjaBle(zozHusXA$wvnj&S}0YA($mV%kGgr$A==SAy|72#-@0I)Vo^8mK8A>K+Wd zx{68S5!MCHPgN@uB!iImL49)7E0F)lmui0E$3@WdMYn5y9>#)(#EtfRUazI0is~N z`*RU#qcio1^D|xj*E@|CHgZR6?(?jv=?m(D4;BGm=+WT-$s@QmHH!Yti3#Nq}KDuU*)TA8U04@g^G|iu*lOp zx!4jbOxc0H4!q+9_WqWH+#T~DzpU@3+xqt8mIwJr$cjdmDYoQY{60@BFHOh60$Nk=5AYVFZ<9x`e$&sW;2a?}cF7&x><#!q#Fu3)536TuYH zzcYg(aOyoA&#h*d+~>C)yPbEskF;4aMCQpU-{4+XX>td3$Zw_lt)ba<1z#twnY=B9 zCJRew$FEF!@L`IAzv&4fkSXg51Vk((bfJoIu@6(iTT6vadZo;!&* z?l5e5(7!|@$^@m>pvfULywVoZJNl!<+!a6tA)o6@Sh+As4s@iUQaRcE*qY2f1 znyzQi6EePY+9}ljM<5;gaxOMLSrJ($TCQ2!MGjWx++>8Zama6c%8di|Dc-xMGYs> zdxPcKW>VTdn+a7RT73VX!$+j~1^3dwKI<_e5)3qt+gVhPu4%@fkbmj8FvQk5GcUm1CyRtyZL+{94Y)6DT#T1Bjw_JGj3}AzZAHD949E^mecpnH_pdJ z(TTnsBWkgw-jLdb+Q%ZY^ToWETwa(_(4>OF!IuK_dx6>r_l$|acM`lN%X=4uzI zgd;JvP!0AWM+u5P%Al;+iuO`E&hTp)`)mSaR?si`O(z@0*n|WFZ8kPwU>$4-5;+-l zyr6>&|E2SWNybw;tszArw}=E^23RWBK6QSndT_-?lTAfpIH-d31)H5}^iM?ci0ybJ zSh-#owztdpNf$hoQsc$7~D6nRefPEld}qo}Z8Vb57gc`v9G@;${GP8zbg@w_b8n*i52BMt28>e=^F0XF4S zMA|lq&vS*A!&plPAcIF-H^xBJKel&eYNZX~WW1$3Tr<`23+QUK<@<4{%(_H*ZO*_u zk$+U`ap0!u^E1cWnjSW}mRNc>Dz}oYA~zc==`rOT7lgD((Jo;Ikd6`_mK8QnDO=^@ z_>i#0Oa9OaEocfS*(Hx+fj@nq58+4Q9U%xE!q}syKei%^s@Fxok2Q&f*M`Gyqf+GS z47rYysT=@9no`S;QjB)!nKmXHLkf)JZP$TLu;ws1=;ybnnCrs|;eJ`l!xkr2cj~-L z5}mMvpVnt74xbk^OHNuIgl{SGnEpM*iF$3XvaFRAi(fqH==gqF>~7{mtX#HKy%b^H{~dUX1}w{&Dtv&k%#_R{zh z!9YHJ&4^?o@s98IB(d-1{pWv_uKW1KY7*M3CI9QyUzj&QRE9YfUV$gxY-iaI5EDCi zRA(sm=@qxVk7O$L=0sBj{@oX317OiiwfYS+zo%f7O&bNb^6suI4b~htToipyPJRi2 ze8JTaC}d`d(uv5X3;exvP5wbof8U~*+?1Og+-C?e;(p?#$7t58u=b=xGMz|yk~8}I zn3YO$;SFD>eNGZ+;D4(H)<9y2{pE70VP#R>nWRcf;Q*x?{MUN2YfBS^*y?Ev9MWBY z&Vt^}e$`eEN30**e_4`O$Vpg`Poe*<+*$0|ZizJmtlM%kzCI&Un2}UGGL1}YNJ0pS zkX7%J6jmnB=#6Taxeg|Y+O|4e&wgAT9Y|$R$U&P#m%#y|4AXmrjU`p75GWR8hJm$s zo5{FN+x9mRWq)nj zLx#-?VyA3tf~ch?L;0CoRoYB4gTgQZkoB#RV+_=VAY6m5P~WpSs!JLi+&T+kX$fq8(7?mP{+yBNZGE$TSb@=Wf?l$jn8T1S@I%yMj zp-~#~AjU8`6IB>VKB;cus)w;E(;$#V1=5y;v)F(G%x7u(U}Rj+i0}xq5^|;a6(ROc zx%$hNVt`QfgoE@!hdJ_p)*g#}NKL|=o&nfHSBNx|fvvQoI8k zxypQKC{0f*BM`Y15D@*>`gg%z8ue(!pO(L7-up!)YeMkr$eH^W8>*H484uR&zhlyCV96;>7U?)mdQ0W-h8 z`f)YkZH}%!78%N;*$l=h3MZ$X*sZt4pohzZ)utLA0}M;Q$>!FZlD(iI3>8R#*E{mp zjDD{e7$Qg4fk~_*U}3n-kk*0p(yGO@LTDr=rM=~LYQr*5dmcUl2> zj_#fQ{p#(UX{3Z>1ybCZQd9cf3NL34c0#S*okaOri2?zc3DKtwf1uiA;WDmMxAaYH z9Y(i|P+{F9H~+h1o@=(!DvQokaFSF1-WocN^|Ri)&n5j!B1B!6ER%x5K4X3p028a; zMtfP$CC45Ya{5<|OGYA{LBXmC+%pTTn6H8Zo}w`lu$isSMD+wfElh%!>1!z}HBKb# zq2jfLR3&SA2ufl&LZRn^&X$u8pJqB=gjFQQHGlF~=(B7Zw$mDF7zvEjp-V%$>|F{! z8ec%A9A^IIe>NDpoK+AHVfq)FQgPUPMN5WgzLzZF|9E-__By++Z8TAJbY$JgJ&ZnovXr6M$!3P(JTB9Uz6OQej*>m?R79XXb}8%rTG3@k=oQ42>E ziyf7qhn&VDN~{tcN#JLHJqU5Ud6~)okIt4Wz$=0DVH^ye;V0vuZ-)Cr8}T46eQjT( z0O5@Ctfbm-g}pC^ZQMi69Z&X6a|)WLTH4MUgKsvX#tFJP=3`_Mao|g6CR7>fSoPbS zOstgVy#tNyya3$UjlFRRH|#T}^F|`6X($t1Y3lW2{Vd*P?xW5%RSHEB>#3=Zvw=vA z3aNOcKgqQQQpm$Byr4+%$J_Bk@`KB|oCl@R$k-HVFI9QX`mAgzYnyqC&v1h#l2M~X!$4rbh{ zHcGm>7XCq}x+$XJ8W%qi1V6(J!iNJ*-0wZED+^^?DRjdOq$4~Xpc$hrJ=cG`525fq zGTkMig*(J-l(Xx{Vh6_LcX;j5sLkSpE|N)@VTcu^FV)Ao2gk5?7$`K`o2X>^?VLsw zy>rD`;-eu?e%2fX3aDZJhbA*Uh=?ZI!|np4`UYWh{_B+1*Aza@EI8w6nByot33%)_ zI%*OcJ#`KSLjZjh{!tf?4hT$3$UrOq4IOjxO%_a zDJE^M{>S!tihql9eD;b*-L_AcVlpb_^eIE zqgdQhZ^PRE32V6JQhWNnumk9})KCbcy;JQ7@fOl2_buGlrxEb>y z0Q-(0{=tCO!NJbmE`yy1Ur;6GPq5u2VHM_<(u`Ty^32XRtPVqb`Og&=IIC9h=5<>5 z7c5Y}#nhQOnU$-o_Ufd#lWkn7Sd+x*9Z{_HhC?{Ja9 zjq7;ehtbpBWT3~S5f_Sa`Q+qcIvP@!$)On?B@)apGK$a?eTyDx1PS$AF_A(|m4R!K z^!u_G;}$x(H=fbI^58J>v=v=zD=LVWOtw#nnX{34Au)Th5?oNi$C+c``?Sc8HDn9U zNEM9TgJMvO5rD0~{2u=PW2Xce^;)@O4zI7>3{k_Uki709_9rY4;`V&QX~NMV_I>XZ zJ!c}R(|w&OAwko;-z8~yoEQ^4fA?dybT(jiS__U81*8>+LzOy5A>z}azwrLHgn?@B zoO8y~APF1{qZ2_Wgpk+zWjcvtmaDUCpokDjtRk}!dyscF0J#z+#E$hE)Jv)SGm9 zYoXd42f@gMt^2tq>}#fDn5l`QbASTYQz5+QB|p_af;+v3_><4-PhpxP&g-dgB$wHp zhBUkGR3_`7YNo0XB=67I$?xb>c(|Qr`T1EVEKrQdF}7heG&b$Cc<^2$2vdtnjQ% zx&q6cB*%3Fu%pAHP&E3)^-w&z4h{|v95E=zr;oC`R#Ea|e?7}_9=;`AI;K!bxFbZn zgqKvnv+kWBacNUh58J3ECTMtQV<`$e3h`M_Jn#9N1|)1)#0;-hbVHFuJ@%PTO$Yb= zoWBGS;cqn6Nd+Mq$AT&h2^Ijp`$Qe=*w#N2NO@rtX{1IhIH)07UeS4!BM8Mu`*YW5 zsS*7fN8-gU1tfjb1hy5WvdrfE8~BVN`<1xPS-z;*MMXVeY=uK!O*4(M0iw=?q4*=xOGpPBXqCgd!;id$%Eb9YK z(6l#HW@gj+7prvWAT<|hn~qbiA~qPJYE%qP!rJ{L9h`C|wjZ{SNX+5EtR_EKiz}Gb z%)uUvzR2H&A-%h=uQj6YCn-puDgPX?Hy4PjMbvzy$}f{xS|_1q-N`w4WXrdx~53#{xc_+#@3*$C% zl-3fAkw1`&pTEoxfdvU`slLRIW8wDYSQv|T9{Y2xZY2jgZ6OtxnRQe;%xJZxciyeu zOCEK2($2+^ic7xKFXbWNizcy9#JOz!ExAIAJIy`4{=wVch<$9_G0z)zDiFFoYH%2W z)3C7FjKfrw^eDixaF-Ie zSN^ns;g6*Q^Q~3r+{?aE#NPXT4bu=(?20fOsenN=X{Y-VD7xQJ$E3zi!L<~&bz|8D z*aE53)Y1xC&Qkli93LYi$?DAPn!w8{FT^VJ%pX=F&Al5p8gW*G#$fZPhGuw1B=K(4 zK!AErd(xb5()Ll4f<*&UpSYQ*p_bWHz;y2|RWpNbP#I2?E&oq~S6LHRkB~zaCIXG5 zrqfb5mu`4vUOxwS*;3@qwSVRbL1IK4NbkWkdw`{5R4$W{%d0Fx7UZ^ei@MlpZ`&xS{#XFEyZk<(QbGgc3McN+7y>k zLe4L&&0?Q^P?o5DsQWgdGhEogH9e*!2I`gto2H9N*tjdi?dlBc1V#rCeHJqerZ4O)KITy3c-wBO*|I7K19It1tfo z)r&qa8G+!A|H?E?5LSXrM=$rlwOh!N<8WUM&rmL6smL3+TE1`VQUbED!Cxs?>F7Bm|-H=Bl8&J>ve*0B5x!_}?P`xX60UwiW&m zH>wDap#z9E<3}s%xD`|{9sii%(O%8Az`SJxtfZ?1 zr}(bsN;>CE>k}z}fni-;;9xV^F5K+BWH^n&vPElCHZoMd`Wp4ywkc{PYO2T+#lp}*kI)F%FTmgw=g**k%NfZuGB4oSA z(Uj6e^+D;kG)F2`XT0GN)mBVAbRic3XA$@Q2m~gbf7O@ZtF$;74aT~!(cu_ozq8M| zM*tBM91`qt0W`rAfFC%`u_%c|45D#HBWR0n$>0*fU}|w1PHKNa5WdBpMIJF3Od9m4 zT{Xl{u{+`i$&JLxtohXTyW#h|o1^fl>~>+4Z3SxVFV8H?_}JRrY!_vk$YNs%dGlH9 z7=eVyVazOPiP>Uc?1tO=_TlNlzE0CN{p*uDn_yEpS)`yNW<6=ie}<>AQL`K_tA^!^7t zOFC8qlofq>9bZ+ebn6QTB}fOF(a%uom*ur*L9pMn)B-(sVtiIZ2Ak=NppUdocN7!xEStEZzk5^pN|=`Htv(7K4rcw!i8I z(Uh89kXyywvE7H3gV=Jer}%YWe8v>N3fW0O%Xd!(xBjDC(cK~MO0fh#KshKt#slNa zB6hc4y0penAarZgIFsck%d<~%oViZ=h?u8P$jcIn)i_SjbvfmLO)1M75<*+@V|=YEN z8Fd-*Gk6{TVQJ}4IAw&=F7i<~J}w)JCQB;--(=KU`GJAcN$}($H&QLYe(!1suxMqw zU*{dcB&%m&C#wzs{F)c819$Ps_m{?XKURfJ`N4uOH2-2dj)&|@IR=hD1yiJk-)WLa zOwxnvyjLa8jk0Q4YB{b=TvU<7G;$WK@z9(7Gw$05@%lNIW5`M@Tv<(6FhUa;BBImrzcCLVgU>7vn|2h&xdvCl$~LhQab|QkP=$6awNt z5w4i9lZ@Jx13qV_BUvFce5_XAVOJrnvxUDQfY+tz-_$WDHG^qATR<){ZBmpj@5ub*-rw5`-Q-~_=_t{Z&@Aq=WMC(Jg6xo8O_-$jwt7-M zbpbn5lJ^>U5#;=}uCc(K9vsoYytzMy71tCoI!g@EQMRH_zET_Mi5P+JLs~d(N6utfA31gZpq(~G%oRFM6dV3GNX2GZLO^>p5Vpi0tDg`#hdP3>j13$=kPZEMD z-bZBxY~RyH$FgM>ktksQuuxb&Hr)a5bl2q*W`!^L_~6e;*{o(JeWcSvmvoJ zqQ6!)ClRPMY8-2jCqat)Q4Rw@g;lz%lH1=Ei)E35oeMl8$}+Y9l5l#R9SH4tL+^q+ zq6^@Zmzo4zmdrFl$ zX-Oj%@!NG~h>Ynf^gQHHeQE^d=11oI#>X}lOQc0)$FJxM$d&tUtWXf^CAzrRT6Gw9 zYW+iw*hoFigXvls^_6$vrRSV7Mm05EHvZccDL+B?;(yTBB^U%jznk9()X+)U11^04 zxxX5q2%v}#HuDKOgaWH@6!nn5T4X$u*|E`|=1?%HbFM)3>&Q^-iuh^qTLXLvx>Rgd@yhEQS zI{>r(@r;B=RB>KWW!n)zM8ZDKZ@8dh{GA3h{l1~}dZxXXHX2#5d#5T|2DO$3vKzTI$k|ye_xF?w6+992uzRQl}DF3OdYzoYa`Zg z07zm4NK8)x#&+fC!rO+0NYz1jODAFDt0KE8%U?0a1^Mc7nw7{x81dY-Y~w5dPSZZy z5=%a{C5WzSSJ1Ktgw)YRaT!>EhfK8Hl*wCY+xDGai{|$lbKv=-V)MKET^{n0k+9o) z`SD-2u_e(&vx1^jdvyea!pDbID5OR7gmJPwA9$(o7?2Q$AROiaZ22imQ=1rF3{+x# zPj5dWwU%tT%!opG2X!zvn#mi57TF2t7r+r)jRRh-yg?Z^{kDga4i7V;(u)b0Ov4^t zP7m)iy~t5Qip0aWzb`><*}n(pZzEzWlacEFetJ<0HoMr#foF2Cf#AvvRwDL2u3X$A zreIj&Q$y`h%z^na?8KqG)Imn}-1&G$i?=QV(YViZNt~^yxV4)0Aj9vV^11Bxy;_cu zFMhM*=wd%sjJNcho`~+4fmGLhjcX%XitaJKSl~5-{6F6G8hCV74E)O=;Fj1>1T?B2 zWjeyCl4<}dA}`gL=SRAnHZ54OP3#hHh1bFa>pL?fsj;ZTMCoeHXPM<%SpJBy+~LC1 zz-Iy~xwm{9qJCfDJUTx-7sbCIX#S7CX=!BF_00-fGarv@*Q6?Eb&}>%L3^^=gr)KA z`6Yg{o^!(;?#yi;gVC-L=>1C|l2?=NB%K{Uywa0{MV)GRXJpI^kv=CJkx{&d=3Rzb z#b(CYvazwH)@$*LYMK|LHM->YeNJgwWoehHLj7qi;#L=J%dCd+LUfY-QAC!+`mf<7 z`N91uyw)9Ym~<2|DyMhQO}4XXWK_RGkj%b~6<=~u{6Lb^Ih@QD2Cc#SeIfyCRART2 zqoZymxxH`HPzulbvag@&f>ZTmnawnF`V=POfk*i%*&orqVvNho`pCe z_lXiD5Vk&JEtl_nY*IF7h2H? z&jF1Cu}VOy?#Nl^qtYE=2M5bMOQ1*Q=ZSYYH8OCD-0ypa^gc9dO^zP#Y?du4aASI;cOal~YL(wjtjnO9|H;Q$6wIVYbjJ%_vl_j$_pG3K}=cJp6^ zgx;hO!iWt1>Ij`-(`HQ@43og@sAM_MCEt-EISLh78RFgznOHqw^MnkkYqg0Y2`}T{ z^3JTGty2S%xT_z3-6yY}RB|)BYmQ1O-mT2 z;$`D>)cQpgN+(AaQ3|f$JiGvI|_)A zQXTKpUvwZ*6kb$0naHnc(qbDIM^_UEUzlzps2=?vp7yh?)4%)yb7zd0sS4#BQVL63mpfI(go!spY8_)AV9IP^uGTAwjxnG_S*lomVKu2z0UF&6tY4p=2@ zV-u%{b>Qq6LUWFvO~tY&%v2GKraOd?&U2x#HY*yb9y9& zkSoJKfi5=1?}@cAXNz7o1Os+WinY$@Oh8QJ;6U}9yxQbZ60NT622N&2v55&W%$-ga z0-Xa<9I9AB#x`M^!_j??v0(IT6ABPHr~&xV3j$#d?iaXAs3!M2kR? zmng8nrc-@PeLq6=RHnJaELmfu_Bvd$3avM@1sIPXj8yzAL`0f6QlXKz5$&pGri7Ut zPhxMI@h26sCDmqw-%$Tvy;I;m47IO=)VEmI&pGSIznGCC)i6|kDzk=Yf8CWUCf>3X zJ!^;Ksr*%j_}U1QQ)f5QF^sKWTIgd>EqP{jt5fisOl50?4?3RrB@KkPxB^q{7Pgha z1`#%Tm%ye=z5x5xG%0Cc(VvKgF7i(i*ypx=>r5Ojws_jHCI5CCz}z zc$xuw!o)KT{3X8ujDVLf~+r%uV25rlMh!X7=GSMR#O(CEP1eG&BxF(BA7V zob_&oz`TU6x|2nnc)uj`ILw0=@gs@XGa@1LGxrn|kqX`<4U|7ad#?&ad92d$?dlz~ z9_$N`v~HM?Jxs%#Kt<=-)u301AN}NVS2Q?!qq2(0i|zPBdkJ6#Rl-Kp7}EP?0Kf?q zbr*$m40kg@l_mKlyn;~T+7X;fpqxvjj|XJwNJr{BDFQgeN0vB z^;2(w*EvGj?sGiVNphL569D2V72Q1=f7w*N!HAXEVO&kNOfg|N@VO}cUAK*)#zwH8fu zqb|Ebaz{2%!(|N8CZHfpdG;lIZW~!ytEI(E!JTUi+3HJIlPHX-6AO-v2l^U5DxX!W zcT;hZ;uB^)OmiUyKB&@({{uAV#6EoN$~jJS;o1U1IB|Cl_BM5ZuO)pi{0tkE}Ch<6u_HNJ7$jPFFJ6MHl-Sqf1g&5aW z4mkK*dBFMWe@&K|4%f-6u2vuYu5GXz;c(pNZ1D;#*q?@7oyPAkz(rS(MFUYIw5KMB zIs{AtM*#X0lca-7$*U?JJM81ZtEB3jVO0uFSvcuv?A$sCI5W5oC>O+)kTGcLD$fyS zmFr^Ic<#kl38`yRoLW!qGa{pnxp_jdAGiNckR4X?ml0{p9*i>>;}A7#{?;)Ntc`uX zN!F_!(DJG^Qq^!-Tj>U2k;n?U(86;f-xCk5MMed6iAn939JW5p=!!x5^<6dYZ*b8Y zuSv06fR5;X>Qh0S+O?>!TbVTr0P*nA`}^{W{9S7)+1Wpaoao=(u^Nz_E$c)E>gTP(!D|55&qKey`)^4uo(hqzmyoks4!&7>4|LUtA2)zlkWIA)^q=y6$2NXQO9fM9$a(=ErD&^=U-pP(ePzBNh0<$xHi>~nj$G=4URCj|vv3~T_eIDvKoUs4> zyB=)b5Tg~JkYK)S$$TkRNz?mbq@_m0XLRUQ81TXskMfu!Q?_4fv z&vNMcDi#d0*#dLYXq(rL8YD7aIxcaeS*gNeD} zlqg}?zx@5PQ%4J3b3f=7(g+g9%P7uhrfGE93XV}u%a7W&Ik#yh61#3Isw&CR8S+bX z_5+kj^ZVZxj2Uo-oeM1jcK6Vg&%CNJOACvpEL*xI( z39raYK%$$FuavQlsSu%?N=@CNa>hpUHad7K;$A@>{COtJM1)kA4+azmwpo) zCXf>+es&S#Uk@wN*=nwzLh!Cfg{<|Mlf45{D_=kg3(&d_NevXb(x#vw>88IUkc)ST z8-|v|7=$290$%Hzx1>FIi!-2c8RrQn&o3`lf$60`*VrH*O_4ugGm1OdUpe6eNFNQI z_smy^B3Ea-Kb27xv39xlEH~oyHG}8Ow!+MH+um4r3kffLCSD0gx8hWK76oeLXl1gU zYSM@CO1>LXxgqw&69LtN;Z8vxyt902QR-3NnE-}Z(nXOvh38G;?Wg#ilgh8MwWx?S z#VLiCoJje zU=^UlK*dUCO#o?X>hHp;TW^lOwcW`K$M}QUu66V@ zlK{ovrwW$uyjX5I3*)~q7fDsfN9q)Jc}+~hOd>*0;g*hYsoE(C2D?gtPr8gLgg(ee z2xj>PfU}Hql!LSE!KRJd;rqD2T8$3uB&h5e$nmY-rwS}Y(AeW-7;4<+f9_B|d{Qsb z&thvkChXQjRoDG_MCecU`vU5v@{-hfvvIgErwE&}Mh(o)9w33_y@0Y#TS=NP)MnyZ z7m1UDe7~I>n^fg=d>bI=4+d@MwbsenXf7iA7jxAA$$H&Qerm=pX5q z3c0{oK3YeJtUy%S2Ox%{r)g#*s$-L%+&>p0(bH>cn^s%Gh!ubaj2BbF@@BN4J zRsgHltU={pR?~}OoX(J>BYPMV7l1)jgjxQ)=U2LroU__RnqT&Pu6!wNw0+G~i>Vib zAypBQJTo3kS8=r0=PA6oJ zq#`4wzq*vCT+P@V;_fjr`I((Y^V2|=HK)Ti!>$BVlEn#sj&tlv6@phVvsg>JqGwb@ za1=esJJNyC^$MqvzSrVvsjKtB{qutoZq5=+nK`mjA8+(_seV))~MVxw(S8;#P zP|t93U?dOuZ`xSzI;R%GZ>flc&+EJqsewVq$YfLwgIzf;X!)jDdv11l6eDA`3c0Da}B~3_!Nt~ zSRXcN1`Gm^*Yt}x*x>;Shei-Q=7!pW7;sg-pK$W!EmlLiL=Oa$wyz-;&r`VPM}~ka zz&`CR=AweB7+Pte6FSd&nJ^-wunq;#EVg?T5%b$v$o=lMsye{0hyuHsrSfhtDS_2#lYlD<_J-sZ$3- zP3Bjv#gkb?0!8@0qKNO&gm~8_6w-(`x)9Y_e!W2vpIz{2FdX`GhoPhkne~0}B%Zl^ z?&(+^xZ`80Kr0U&>&T9`4 zY7W^2;Tu}h#FU!O)wVVr~X3cue|D=@Fr zojJ`U&@>A8l%j^GI+@rVL~Vg@jXrFHvLBQWy$CtyQaPd>5MGRiy5)PN@b5N^I8t3Z z)y=+rSdZXHb9EO@>?J{p-e3wVY9XbF4HaS%ma-%zkbRR3pfdj6hsLboXH^I6pQr`V zK8+YpyJ)V8rAM(_`EfIgSH~g3$tYuTuJpXcn|~#B^LU>9W@O zem*tef8D<>{O`AvzFz*~+X1_M;mH5wX9G0TcA;8g+<^R``nkTkN%lqwIEL0a;5{;1 zODje)2{>HGAU(vAB&|rSqi0(T70I{6;$6jnpH6BZAZLw^ti=Z~ zvlwE>nGiSv_q!WmffG46{dM>D`MzuVy2F&$7;7!gHn6}MzDO4bvOVL9LBkQUU%(~> zm!oRPj)Na9w|_;q{+D7fNBYTvJZm{;w6frF8FZYHe7x(DoO@pH;S73x%`fK$Y%JjL`)MA zSFMkwV{Db-1LYiy^{ok;c8weaMiOGyD?l9VP4zFJ^rpW8YBcc)-0GuHA@YmVj$(Z` z)3#>6dAhnseALZ77DsO*_qA##X{*w?@m7F!VoTq~HS^M=I3Wvd#jc(z6XXx(vxM5O zpyovI=VXRcBTw0`8>EU;%V|*swV^PzrO)bm;ZSApKqcNy8hN{N=EoN)poma`D*LqeAaS`$3-6 z%yOGDR1cPSL+n_0^~sr5Zb%{$P=QKV?4SjYwjQRoI*l}nE)=A5Pm;GZ;FH{lD#wyP zn+m!D0cEBj6#xOWO@o*kgjWjaO~s>tq-d-Cas5zVEtoLl`wC{r~S06id~bo z4ufb}#99ZjnnLj^cYd8V*X{kJeO6twX&TN{d93gn3$W*Z(7ZvjkL9n9hRI*DMBhrx z{T}fEoE8v)$Q<84uq9TxlIiPI+`Iw$bDXe>#`&YVsg)zkZl4P9m-Gog6& zjH*;CC;dfi&z2|Oi4;b?oZG?h)mw7~7d{ao{f8B>rl;5ztTHhyVf)4SnIL&goR~l2QCq0U4A79`p_~@<85)Wjw5Yblc79Pp{ z|9NC<_5r&g=)(kZA9XKPkn-fW6j6BeDP$5B6SaAH$pCgAOhb2NB zj4RN{s9*+QaZ&sKU8nNey9A-r^o@3U4?~U>rZV3vE$Pg&4$?%oZC-C=%ml{!gAF5) z7E^B|v10Pl%*ngZlK=LM@nON^)EMfkC$|uGVJ@L))FN0aRs+(t`AO)h5iNThw~usQ z!nIa3A7&;TZ5E;Mk7^W)f( zN3cnf@%rMLH~BvX+RuY{r%elc|8DrxQtJ!UsQw)>?dMY#=yswZHG9m+c;ZR zLaVHli+L?pzsg{++G^90lU?!+eb#${v`YB${K;siKUpLj(~ek4V9|K+4A&=l;k&5` zDFZ!fRrwUkUgHh8GIujFRpe&>5G*773jklOyfl+#E*N~!mtVrEEsr~b2K(L({kOis zEtV;*ArTR+`R``VD3Z4NdruJp-}isW=>*C-k6`y@yk zZ}w=BT|AA6B2X{|c34&MEdQA+$iijeulyP|a4X)ZIkQF`@9FV#gpX1gV*NX|E)NLg zno+ipj7^XL*-BDEh8c?>6)lDOS6p0EI?`0U_@iLgv!B$O zIt~<*G+Jxc_qn~A_ieJ7NDvq~%`?tKJr9=b+oArM`|Qa{-wrOP$v$rOf{;HB+{HeQ zoxMd4BQ(l{%p?p_(5#Sh6PB1iZ*y7dR2DYwG#}LgYjeL-Y!ZT1S)1cno6nO6&d0(@ z`XspplTpoSm%RrD_`i#*Ap8?5Yb3}PVKQ2OVK zy}4ZNB2&s{EoPp#P)bPF z#ph4oi4)ftgcgl2DR7B5d;jElb!Y{f&`6dIK+Bm-J1QQ!%K1BQ8=jHFM4Y&>tWaD_ z6kTJ!6q3tmkdo{AM^8J0_Ra#D=(yiDM192B4rC;fk0A&x+P}!r(d;|vMW0k@GjAp& zG05Vi3riCLM-?eZJNkTy%jFeBH6XYkAEo0TYbn_yOKk?#_IXS_gmhgY;BE0N*@oHb zRDjnIKMu)~3@`Om)Laj)iAKAz&xXr=rHlW}DUQml)&Ro0IwP443P>~n{=gcI7Yw3H z;!(Ze6ky$=_}7g;w+(*<33lST7|{ zAWK2Gf9k=20^-LD-ibN$){&PFkH=MKxqm_)9H@`y8q;BUIOep(#j7y4yet12#zc3b zn71gv!YZ+S)BG!DKdj-aeXT8d*$Ckh-i;7{s~FZ3FjZ&l^1*rO8wnq^>t}<1-LNVh zZm-X`js}gjfV6Bm&4q8LbRi+`Mik9bd`o7Pczs$KR01g?y$z!4G9@;nR9<`a9z1vb zo}wwwzg0dKku;1c<<(2YB((sx%}PXcBy)e7XPZNf9^q4~x1;{;^4EgKu@8{Cp3ZY2 zTPW8De*R}^v;f=iAK?S=a&0_6tJZ}X{)7bt={U5}FC3De^v`5b-MMCx9)hx_FgWYy zxVp;EknM2Ct82VHzicpDW7Ii(qZCbZw&;Wv38cda-EE4hDOKmzAD{eF?jpasLX%*s zT7eP1NQGd7V!Q{0i9&6Pm1Eo~Vj-0c9I4c2APl+`e{xxIs8hKUe15x8=8AJ5dI-?V? zC8OZuAJX7cTcT@qoTg(7wbgvN!C|)bTVNPjMbv#QPC{lFCEN~7w?IRGAa8hInYY5k zzRs9(KlRoyaXuxoKr442HjD(&8i}3X=-XqAIKJJJ^MfQeTL5Q0fw!1j1r{u4RWEw! z;^j?E@CHGNQqfmCyaVVbyU+rpL&SKdErPypJN8vK9Y7ZmuaCRV?rzkd z_xZ~gZL)0rU!@(9ta{l3r-gd})pf(2+~csZ-tvNQzgzl9ahrA%S{CHgZu*Vj?bqD85>I$HcG_BE|$+<^+a0)s-) z$&*%98WY1P_Eh{SQ=2#e+y{2cf!=y|41RpgP+@1ri-n4-<$Jb#zj+uet_RVU68PJGEtt zk4&@1uyQt2Amuu5rWJ!;BM*cy(e&kZzCD|sQnJ%}3&3vZji)k9!&4hz*22cy1|Z^r zlnKLXNJKpU7w>hCxvqGae|2*dnz1J(o53>&QDu@%f7{cHwChF*c&$~y6lbvpvEZza zmq}C9JWw@+EQTsmGTv5^ij8lPNW$uvugH7bW3v=yb@(0noU#YER#HIht_ZY|wd-C|! z>L^?`R7bz0C^Tg+rN*V0p~*kSGIqno$SH@g-B*#HG!Q8@mrR!WQV8gHPJW5iqOOtY z0g~`mw_#Yi!4K zn>=T&Y!+;fY%O1*(1>Jhph1F%;)W7F>Iecv`_qYl(9N7o>Fvrj-x#kY>AQcZgdh<# z25Sc}v+W!i{*|=EONKZuu6p8X9~jf3E`GVGtHT}rrJ7VX1E8!t$@y9myk^cS`mzXC zjiQ54r!Z`%^mAh0p+e9hY6jrZ`;icJauRN91_a##7NXKla)f86;IaDx?D?jJhlHrP zWvm!dUKHA;Qm~z9+dHA?jiQQdAW)xCPSla)MJV7-7+|;uM?9WJ4b?-|c!-*eBy*&; z+{%(=q?#oww`a}J6=GX8(pA;#sm6f<$fCnfxtM39N)xztv9SsVKcn<>N8KBAGjEjK zUo^LKNnKL`;GteaA@ZJ2g}>?gssZn2_p!C--_1SA*F1f^uo|D~OvUwUI}D;RC%|Y4 zu3NdK?+ry7;}YcXV-*hcz%RG3xjAF$Z>a!V!Isc;im3@=)|MSem0|ds*I=*ttZ`S) zA!5C^rr0B$@YZMZ1X%PycysbuLDy@~t3jA9yjoB7yL)ZUE8K&F{fDP$x-A*E9Gl~i z<16LN3%BfZuMJ9YK2RGX>&X~ks1jr~s}j-meJy&?MLQZ#2(!9zg6(`2Z+^E80ok%t zx{#8_a@S?v?i{`$EL-cBRk5}9{HW`5yC?8_M`-_+M@Rd>3HVG+Hcb7NTGHRX4vY6d zm_<~XqFebi-#QeT3vu!+kL_{76Y1>$a%O3%wPNMVp!-_SejxZ0XA(>JC8<1RF9F{T z;MmHc)3+kE5WkfWYUI%yI49$!I7@@lUW2KC=EZ`)!4GaiOlu=hKm@-GP?)NpcN>RD zj}l&OK*KjV?C1adk*3L%aW%uAbtvN>Kx2uq;Fykn>O_j@^BYM#f?D|fM&JN0a z-~PIIi{x`UH3s*^-aq;7iDO*21dgBYVaU8txOR{-h%0k!5G7^dt7)kYM_?%Rc6#W* z-M0w3oV85CB$AGDrpo2Gtd`~TWingQ&=+}OSB4HfMn3uP@#KGze=1nV2F&fLD`Ogl zWR4xp_s0&tC8O#BXXPTX^|7y8>O;_G$iDYq7pl1Z4=;A z9X)VGu%1BNjb3td4m{I<;8!vergiv+9Jh0)h0GRLV0Vd6Z=M%`p~7k)w&^137d}(m zRqLPOzini8SvPt!uH+qP}v#>uY9w!87Y z-{1QuoOAZs`+1(d*823TiCU_JXdZmHfc?4L-gatXyB=?#z~Zj>-M7 zIP3za#$e#+$x?WqPGoSp6US4!^B=WL=cc_Q0nLwyl0v7^QuZ*{xr0j-IExo_7pz(MKoB4Teb8ke+as ztRlIPg=R?2@XSV6r2{H>THY%hKbUevv;&Vg=ev#pm;2x$Zp^%Z{Qp<8sXao9^G{Pi z#~AP!3VH_dAM?PYA~Z}H_C*u{evfwdY%B8ODK>pc2nUC+D1~X$%K(UtNW3tk+1!BJ z)~r6LSoBMyn$I2Oza{z(4UI{DlP_@}<9a9UQ|4_O&_(VpF6UAIg=}*H_lm9D+VSM| zWng>dvgfsFn60V=7?&ZCW{s-&s~!-{cAKjeNFKrg_^1~g-jEjo7aqRCUy zIu=NTcHtXDPU#%se-(F`7T=JkBBDfd6fH>Bm>c=`b?WChr7-Y3uis?_gY5i8PDO4^ zbVeErWmApxprahe8RC)P{4`RHc+z{s7E&$6+&Q=TnYE_VBP+rraOS2B^qQJG3_gkA zhQPgYhJQXFvu8Fpg+l`I1wH8`&Gq7?u~`!fPA6VjQ!k%8O~2 zO`Jen0i^a=F|LCp=dI_JgVaZHpLXeyAsRCVLVE(kk16HsPL%(;Wbf^rLDPquOQyNP zMD5$Xjzjg@kJnc>Pm?-BY8X{Jj4M|@&fESq>QTmr?fc_2GBF?){%x^Q0FmpGuv)zpoI`2<@13xwyYz@l(3a~KYY3{X@a zAVpi#$PVgv*!FKvB;jVZ{GY7lMEZ8q7DL1~B(VP*4!+Jj0*z=|{W$%X*nSujO8#d& z7%Hh@G30}-HzKQmE8Fq-GsYDB0}vaU0CEyt4@RCNmPVU0Ge;w|Ne+1v_5xzrsoek6JpCk6O^d3N?hV6qTB}BJPD4iVxO~?1aHX?)41Wl)t;OGw@0&Xzsh1-z04?zlHr|gz8Of_1Si6 zRmx?aZny_u)Dnp*TAmlmez)I@QQsUAO>~{C`n_lmmP$9N9*%g8Rn&XDZPE5yew+nnk2+Eip18WWQVQRdJ>^^^Tfsl>EDl4x z2OZ#hI2SVWspHajj%Mz5CA@phbntQsX&T2=*P-LB7q_ma)TvJyzDK3&LBmC#K`7>% zmD_1}wf*F}l4&X2+H4ZTp`sEu41-RMg=2GeiGhHs;3J`d8UK_?I9j zPBY#K^ikdFqIsfxE6xH|P0|w~@z5ftDNb*}Wenrr=R8Z(FQ^v~&DoY!3S*cBobyLM zeyU><5!#X*Zod2fL;#l2h}1%iX#+Aj+9?UNnsofjyp#5IT_G|xCT>@`V;G+r2W<87 z%H%&H3DOlxqb~U|`0pJ^Jk9S!kK6JcpGTWPdn5|ILBeTh=XhU!=9Is=R6O)&5EbE~ z!BJgG`v_6iNFpp<5WDz|PO@3OeMu&XsN}j;um8e!neQ|)kKz2q%AV1e0R%bJjm4y0 zz5i11AZ^_?y^gMcD5em{ni|dt3wMSBh9mz$k*#i@cg0&PU`$`d?{3f963b)4ZnpAM zB{R86Kzjen6O;QQ{P|+{Kf=YJNR^Of9vH*&{F9?(qPyN4qoKj}#MSa3Rvvxf;0NQ- zezA6&)u@##N&Ua>ny|;PgZ7r|ZRnxoJJ_y_EBks8D{Z3hN}1X9exJKdapmE{Z-3{} za(YR?y9Ct#b_ux5-#c?0-n|^tTODo8d0k`lQMeUfO;<4jO@^3M?HiAw5SAk(r-Yic z1UPa_y4?~ZkLS=tWy@!3@i-&>~gdvBOJH4kp#q#HL6`RA_a5QOVD zS7i9pOh;P%96Yx40AG7Qu7Mq#U@L)iKhd#IhL)cLwXjMy*GW=E3W@ltLY;vKHE%&v z@>UL$TfEMqEPcv;zWI(*kZ zoSn0~h9&G$JzFiX?XFI-`ZU{GbE3O(GUxHC^B{TI*NO5=e}4hPcWjr9Yj9T_0&>4z zJaP1u^GCTW^(83Nrc4S$k*)ph{T3M{1lZw~9(bL!FG0@~$`0rnk&!_#dC{2cLjsYd zP?x#Zze%RNZL7_qdlF#@4f{NK}(i1i> zDUCmkTQ{kR!u=dIVAz8~G(8e*)qPPmG>_r$u*63?V}A4e`sc74)Njva>-J#0Ihh#LNZ>9hUMz zmj-U|9{s$P(HbsZ_jtnZ0bdnd?PWlZ{gvwy8FeiJileQq>%{BW=DQPc&5Q#Vr3gh=D%lbbB(VS8iA+o-V`qQF?l%)MVZ6j2x%gV z$s}QGm_Rzv-$AhnWI$7#n@yGVH8s@PdzH&@2m+#4y%Z(tt=R_M{!^Ut-8?m~+5R-N|1pf+F zLm)}Wb(JX=M?JokLD)<6Iy*1ERrI>yaBtabV6m_KwEx)paVCq*Su||BwmAJ~P!x#l zR1^iOmm+Tc)_-v!6v5!3JH>C}=kZhdDeZTEriE*$*EO}o2j>)=i1F# z1JP_ac1-7TTxefHHaJ3`GSeWk3R+xy5Y#8&hGE$vqnbG%zAXfJmFW?=Z3wi*(A5_1 z*;2qs0P`g9nl>a4O#ZFGG?0F~vq<{JxP)ue*}}BA#dzEVg`C_2ou*jHM7)mdS6RJ= zLow9$(6Q*JeWJ|cfJBUsdw4C_0uv^4zOA-dmw+Y*h+#(0%K9yz`@+JV3T6`Rr3~0U zKexZXw9)=SM zRJQN&3_pkejV2Qq2cL;I^v~OwIs{8TX|iWSVSjQFE0u5QOZn)IJ2ZJYw~Jw7bL;X# zqeh&QUL#G;aquhOt#70+%BBz*OPdr7=#dX`IHpzqvQ@4sP_>non?xt%=!Q|7rWKuL z0{>NQhi#+*ZXlw>=J8RA2C}!g-_zTvd3z-TJ3v6X@V^-NOyO*yE0@TZ61b8$N}{*5 zw|hO2yKosuD%55X-^;%JkOX^PC`4Gb9G_&8Xb62n+=k$2Lx)MGLpH-6p(j1)lFXyo zh06#^fCRcq`Y~%wx4M@m@7Ci&2X@k*os}<=zjlhrxnX5fBN>?Jcf=Z+6+bY8x9c}i zk`Z+Yy8qNt*kAQJ{V%W*{5tz+gpx`!atXpNuoCB992A`gJ?Rx3;5h9U1RI}rI|RDZ zG6}-dfyCz`3zAk>S-9)7AW zXv<8aLU@3}qDDJQS6^2JY<+rk^pZQa%Kfc;)g_t+CHXUa!7^*i7!=zcnyIT}*2s$b_55A67$YxQeXPsX$DG@BWeAvzcZ+o> z#G_%~pDWEhcUX0G**H(D7AlFAE{)z-hV}@-52*QSx~U~O`Z{|451~H+O=T3F5L)8W zMmGQf3ZvkxFY>jr!mc2W5Qr_YY1_wve>Jea>K0uu|JV52EEKuLvImLn0VMLcMgVm) zIW*b66sc5`Uzzt$CX0llT%rkHUqmrO)8@PIkp0n%R$S79jV9?I&=$jX_}`$Z9L2!F zGaGw;8%;bu$Ce)+pZDJ0EklkFG()^p>QO2@RCCi>ey^I^!9KPKqIFBeyGuxdR&iJ> z?kO*Jdpbygf2>kyc+vA6tEo|)vdIgbR9th6vd*m|P-&T~T)iXfeTV4@dP?)<->sAQOE z-)F!8>jX4IsrdfJ5vBjf6PM}e{1mhKO@puLfK?lBT34g(#LmdBft#b6+t@v2tu4+W zd;12Ymx3X`e9k(;B_*gp>73PtJX3Y=Vl(?Pg$yVynXaj=F(ggdI!c*~6?*?kv&3)D z+(l2;S-4lVd-G(ER@(kL=9Nl?j1JYd+~21oL|dj0k8oqJ2ZFA#nMEROSrW77uEAc* zwRgPWvMRCFbmC>F)ZDBP;&QI-sVeS7Z5wN75R=~N*S9uv2QnGiR+k4kLSK)skJJ*o zwt^>l+)N+C@At7KihIJDUtGo8JMhH50KU~wU{Q*>XkU<2)-=HVspiq|yF(zn-nd09 z?3LR6M-L~h3?J~8+j>eXA#ErHbu&A@F0)rSm5xDtxb2bn3wL!l5(>62iI0msOr=HGHW3g-!aL^SMfvi{NF`a;p zvBjgks&!E{!Z{`bTlsEj@F!Eik^?EfUJ1Y5D;fNAF$s(rImy$Tbsjq?$T4hcaeX{+MIjFbmM;Lu!XW)-y&Dz=-nLIPU- zd4^&6IH`cfAR&XUbao_+Noq_6NuaMU*Kcefngz(hYM86bnXKUY9sx6KJ%!$@(Rd*M z?Zc>1;(rv|kI6h|$X&h+Rr>}P>4bXLf|UOq1<(!$Oy$Rzn|0jV+W`oH2d;(C9zI0d z|Ew@qCK0FJx$$@AFC#8cjbiLd*me`l0Qh$0jEuNLoVf^#k6ZEZN>7*$rF>gXArpJe z!4+2}S@cs#K+Uk71NEofL*3pcg=^4LLYaG>1{fg8Y1z&4wgd#L=wdRlYWpb`W*xcy zQ*rozXZqaApavgcYtI4<|x<)BxeZg`lHRP*!iI>+@wt zwirmi^sSiP^JTmyHZ44SneCqg=Vd%X{HsI+uQhM^82&#}8hUHK(k8q)=*ZnIgC7$K z=LGVn;m%Y#*~S$S)dU-Qvk|{W?fQ%B$#WK+QP5R}O^Isil9_A_B2WvW8S908=uEO( z;78EmhYD~=B*Nn*T9O_jnMB7|6rSfOrit#`NLmqW1>#P^uEoQb8$T;#p`}s6*>kG} z8iD|;dKS^cJ^8HT-MU!QZj#dg;eZ2>mhphVnJsF=?OPZRjViV?t#b*1JN_4}3@lgt z(!+`G`fgUWb|j2Z>)Uggnhd7Jm01sK~IiHZKlMAmz|gx2#6hRzr$Xw1ThRAa@a9 z=~cMtW)Nlf=R()I_oth$>qUzyZsCauSOUjquS*K1iw`|VKiQL{Q{Mt|V^g`jzHbzu z7{OC`qFW#S+hEb&qOCTO^{~VZ2t;S)ZmkmK02DIoq9Yg|8W0X>Ea*0ArNXDcc9uYd z_aLmzs?!KCzS$pgQ<;{kI^Ux`Hc+L>% z4ChZ%Q6m4gv_~|5L%b+OC+fED#MNMwpdTg+pb#8t5PvKZ+6_Bv+N>?q_79hoi+L9X z_&=vl)rx?<@q=OWgkAm?FII0hF7*xy3dorL>PiDB%b@m@Bk?`w@EEGkKi!oy%#l?J z6g3SJo=OiBR5M;5)em8slhgj+(!TvM(`Hn9{XxC%()$3oN^))yB{M{d&Ax{gJW*w& z7_T!g2&74)hv>MFCpOVUg;bYgUJu<6yP%(DsYv*~hgI!D>O<0hYIcpI$G}y)PcKE! zCl&55G$qjc>tL?^=)Y2Wa&M1B?xyf^6J-!s(tS9+!b9TrrNRYEKA}PfI!}#*@jO!2 zZ2L4to3be~gtS4_l7FEisaepyac;@=M?V3m8*OO~bDelz>s3`F$)TyzzqnVMujh;Q zJ0>cOzbggcmAk?|rYLzf_(=$>VVbynqa28fzzBlk zZ^kl)y61Y9HCFO!VxxP8KMXO$C&?L>>2C+);GH^JRxamjhg)j)buf)9dW`g*wXN^e zy!TcvsM_-2x z5*CNuDPu|k32%p`jL^e`w`ob30*XX~=F*%qYe%<)X?rxc4K-oZ7UF0w-4uE2@Cro5>XQ$-+l#byo-tgfL z@PwRkQ8(=@>1N4B-8cp~Wx1?s(*K4TSMa^O087$tr+^}!M&5yUur=fU@k`(2FU`P^ zXs+ST%?)Ukf=OGL{!In+`R-nYfJ0A-xwm zgPVn<-_b8S>_;{<|Giz}zBJen0Y|DaRv$DPUea0#{Xd4`S>Evf`_KOq>y6#4KFtck z>%AOuG;ZlIN!_AxF3B@Gv}txb|)_?++*Bn z6c)zV8GP=$r`%dkjT}+7tEdo?!M{ zTk}o5w3^C&tzvIfZceUWbo%UbbNTr+&OahGjnMX+ke)i3k4|4{pCK# znb_O`s`Aaxe58|0$T{+FM#AcZ5$Q6J3H}xR%{;jE%QKKevd#k^E zsn|0I=FE$OFQ=k`Tb+VgDR(rLu-vq36uP$EdRZwsdC4|5QM*>`o%B2ao7w0n^N!R> z&Xw5`O@MCYF_IEh-8q@0hJ#An`aTmbEQ7|XTaAGp?AD5b3AmX2CIEuibafFh%z(~< zPD-^p;Q6*QFk&{{uEzY@o@!t{MPm#y>JOG`5KF_!E5uFt)+xTUMm0@C2~3;feP+69 z*KI~eG)IuIW0&Y0>5$PDZSMarHV(mv6wF7+XI z${CbgT3A1VFM`v1cMbQXQ^%@=QRo~jYkZ2L_X#3rG&yslEi+x zymVP8MKR} I${e+(FOMS{CgksPJZw{@EgBv5}9jygM?CNAaVB-uZ(k}682 z7^jn?8~DhpG!8S&ZcJQbWXS+6yJ?inRsLp=fZkBpR}{!n{^!B|tIBIu)Z*}f3u$YF zO0QHqXOgO~Ru8e`otc@jN`tij*O(bd_VsK5(f8pY2Vrg$8o&uIxKwudLOB8thBDa4 z|Kk*_$6Gd?3hzdUS4o?+s4Mvz3rvtu!N9DpGF`I>Y1M3$$os?c>vAKk7Gb{!1Nq21 zz|Az4FGTJM9WF$nV}5vO&!8hdd1Uom9%ed=>;2#M0Z9XFY%0y|9wvBG*ykC>o|$zt z*^79J0pto@X2#y_UTLY}AmkZtL*`AboJB{6^fsq;>ox`BXa2pwSKQ1JTN zG2AfUZyYZWh|`(`uP_Io`#_<}d>pjn4vH@LdF*$CtQyzq+So1$)7p;LQ44K6$-z7% zZDJW!#M2idewF(AMvf5omhbs;YCpErs($TmA7gKBVHeW|9lu2#COxe(TZjHIUZW3? zjY2p0&5?Qy^@hF+O_!R<*YPVi=8V-*lOiT~FV%bI z?o0oUILkDNaNr=QRx#H-$U95DW-yss+M^==2SP)>Zn8FPy64A%7vdBd=%TjW3N+~` z*VP;tyAHYSfo-1|F?d-;MxaTd^k_4r15~Tklo@`30<)OF-veMi zJ}PLzs{-o3qe7CjrmiIY<1eVovbc|lRem47Z@@V5ktsUF%L>DfsjjXgBidPVqe&=L zBnq~7#PWf{heSjLOAtcCyI>olt|M@BHHlL+j3A<-Jx-wnvN51uP@08!6KXfOdv1v`g#z9@?@^o4*xtiX~1&)i!0%Wx2j zUT^?CQuXWmFFkz<<3e5P&*td~#W`^iHRap^Gd zLa3c2xdIy9*~)U7ip-wxH;wEkro&Uq{V5>qqfh10?r?6^7=`xRKuOZ4jB5P`p z-uCm$J&^FUm9&2!5_gb)H}28YN#Hz|*JV+aVnY?{u*sQ}t$xFQTv?Ebg>9ve)RqH4 zG)FdF*jM3Meo5)!D=iGvEuA4ql;rh5GhNoY?U{QERdx4WbUfR}j`aZ_2C>uKPy5}8 zExYbu(V9{kEV2z%JJ$zjOuddRZ$XM=PqhMZ6r#eS;9T zc({SUH-XRAO!F6_#-gG&hQ8ZC)6TO`1Cr+@y?w6N?l{On6dY1z6EqE`BnS$9-Qu)E z|NNd(jdGIp{>@2hiUsh3#cT$+R8xa}1SMPS23#QiRnwClewuq8zP2A&NW$G*<0 z?p((gg1GPY@8?12eFJw6O=1U%el)mdj@0{!M8-Hf;b?Ql&O-c&l-P54SrcVq=Ga;W z0)+vi>P+mx^43CTo&*Dy)x$tOc<%kn#a2tzP1!{@;Q}1O)kfR*k)40rk=+2*pRDr7oyEv(H(d{P*x))&cQl1B8GgX~9R zP8hx7K)J8qdTCy-0cR331)XKhf$t{u-$sO24bvsw(Mqv6K4f8#qf~t+`UjY~+}Ict z{MPlGU?(%P4(H2lbW9dYl5d+fxADx#%eE?5aX9e~LqZ-j5HXohb+k7aHVd`PHGG|x ze;JrtA|+Sf=-719wRN?v9^-8_W=m`(I$u{;;*BumUO0lEx`r?}I~;ALWcyG!WEl2G z=y4o`X2ksSp$0=W+c&03hQIE9ek^!S3(iVqr969=ks9TfHrN>R%87_ zT?f5J3m(Il2rSioy!s{ZgdysC!HRSVgV|~vTXJ7paw-Q&4 zR|zT5xwM2#*)U6}#|u>{=k&jx>qK=!Kf5am?io0b<%!02Gm9%3)kkn3Hx>A*7a+qs zffRILBNwjyt5DY~j48V7>N^ANb4&xh7BoJ0H2>a(qZOJp~51OOy9= zKwZt{I~3vMGR-Y>0|lMIw6o{0FuO7ADU=~~=-g4vnX;dnl4V-B05YknrHY_$u{e-6 z4}1e1a(~2}R_R5ds5^+jQe+eWaoS*}j3@r}-n4C^-=%tY5!v&w$>-Dio!$8U04R zQ>2tb*)68XU`Sg1BkPe6DQfX>3+I55K^aprsyO@M;AS zG4czIw0|V@zda5GTUj=gHxtU)zhR`uJGkOL;ZY@TZ%zC35Uk3=JWpEvzR5p&c+YBs z{fFBx%q3`66hQ5YEV{HvkGIW!8=xx5uS&Q?^}nEBK)+$?~4Pa zU>BDv@hU;Xp0@YbJvcvezE|Z^i&JCgOq)Y2KkH;7!wo1sBXGI7R_C`;k5-M40Jd8E z-RoMZ>YkB}wyJB6b{L@hSlmg9(XyZ=9vChNk*^)0cvy^^*QH@Ygs` zantE4qxWatnQ{`?!6MMOkg99aJ6^%fXrCcw4E0w^$sdDJ;MNKnqzL@2!>Pt%VY&{; zbHs{z;wnis@~)5ix4X7DV!xaMrUBh{K9|YF9AL)AKvR1c4`!FQT12-u-&9ZH_tiWk z8#4GA+6U(z_C^jwv^$?jX8MEV%)EbHqG>VX7KdcpoFY*I^_IF`N#19#U^uQmT`BQmVUXJlDVgaR)=jwLDz$NWB@pGAXL7Bg!kjYVigv}A_ZySH(ClQyQx zt})A4^i_FCUfFy@#p%GxWm0QO@Mv*Q;MS+qj@5=KN%kJ3fcpj4OX0NNN1g*0zrEGu zjbID#*H%#t=qviJ__lzO=sRf`D7Ln^RN2ITMKMc(#!sj|lvLyZb?+9_!Q>H3KJJtt z5yp55Ls+Mrw~U$%PU488{;{rJWPyHYzwxpmQp@K|NZz7SR3U_9_uEa7_Hx?a0s{!K%)ux2qpwo|cWZZpX`{ufIlLskVK!pWre1IbjzG<&Y zSQfJePG~1*z9z^3%*bTEFd!UU(psn@O(J3I?C}C$Z*TMbyd!r4ox}p#z>>~ZQgm>! zV)QoRef-ILf$`~#AqQjc%k7{!)cWR1HXI`P-SB&7xC>xrh6B%_Gw*^90%Bnxm;qB! z7|%SA6Vj+0fF7HQ4#TKrKRI9FEuEurw;~vvt(mB=Vg5$n)Ki->1fwFa9Bs3H;vfLe zLX=I?>*$ixbNhTWEeNL1wL+NN#Gde`A;jMF$XfQcrps0d-wV7C;*vcgN~p>kb+vkZ z48mEP@g<(rs)Uvv)gBa`H? zsVhiF`grU|xB@j>+<1ctCftP`f)!T4+B0j5hwbo$PeX@$^&6x>psWo0i# z_O|^8&ucPOf~AvAwS@82P1aeSC;wme_I zHg;7cU0Jbi9;D;<|26RQm?Aq(Rg-UaZtQ6geH%}fH{iNx0~s0UE50^<`gqlR{JRg< zcS)2s`P52!0Tt}EWdCaLu8GmeLW*wD$P>Jx5C+(2>eD7@*Axl1K5F6uR+bqeBxd}| z8_0gygvh^dL6`PyR$D#r9m&K#n+=L>^*sSj%h&jr;90iVdNulW5PCp*Xa>)+|Fy#4 zDfv72h$7)7M(}lBquBVKYty7JrHFoQIM6c}c@SBn6PC7C3NGU%%bC&B;C>0WqmQR{SefQ!saN_R?mzJPW@5Ktd_2j@f#AL+tdpj0%4-u zs3yhPqC)Y7bzD`;&OmD$kRK^WtCLfgQ!ZY_{*xG%8{%M6F>1Mq=|kwB?LG+8@cK(l zx-0%uq8=hWp~u(tt)JyF@90}C9EsD#GyN03i=KlD#<%1eWQld;@ee{UGup)G8pzQ%BG6M1KurD zlOuZxo+Nn+M*n2L)l8}s_w@1@fE;3edKc@3xNIn(%f~u4zIV>Ed|oMg*MIIMIq^?I zPGv8^+wIU!I`6a_wAjwmg*qrW^uV5FW|l^6V|XA#7q}Yay^`G0{Kl5$U6< z;*V3QM}E@(zBg+33y?CwotdlUxDz#yZnlCDmZJN5=Co_vyplTNWiOkg^-s>l#VBbV zkcR2K5gVgN;4Lr?E{(bU_KuFT+wyCbZ6t0xZSi)#PDCZGqC++%iBe^D&d8vRMMZtA zN%o%17A?h~p+AyK^*w$Q#}fN=Lu9bIFi67RbqzSgZ+S^zX1Q;~y*({(=XA92*Sm;5 zk@s!VMyIz*G!E_ZaAJ)oYn>(OZrBvqG6{9rD0|+J@UqQ6*c}(PB7oSyB%g)Fg(%zI zh$Bl_KF8YZzQiz5ZBzzVqaPnLXg5jWf2+rNC8$}*Tupko( z*O&{8C@&b7{OaHqvbbXUvLn(ez-iIjMrQx`E%NtEg0*pA+Mi+u&#Sac#XXgvViS)j zeVKS$kP%#iJrJO{H49Jj!v4YkpW}&Vl5%vpgk(z@Z&|6}=d`JG{K0e9&Oz>}u3yp6 zVzSWt{uVNu=m2C@+O7~DM&6ASiJvBd*{jX)N4mTEpIXRM)>1Fg%Rfbn1{H2w! z?$Nm7Gyca-o3bZpe*0!9mZjc^GKUI#>0d8tzH43=TtPOicLSoV^`wHA;1NmAyqYv{ zDw^h>d|2Y>O;J{ANcY8ubtto&QT{Dqj9T6%Yqq9`W0ikf3Gi`5#pBElMb8kNuiiSS zCT?|v>b=Vmv{Dn2tKigz3v^o6W*k$C+60edoZ!mVbRQV(#iOrVIa+MLvOBovZrLAK z))LwF-hlPUTmLa2{+OPyb+(FC?RrUs2p@89(Mp%igmDVvm{W`sO3KHW{`y+%ogI`hj|MA<9T_h$1=6>7_$uF}{E8td3b03!2ZgYa)qyI-j~Er>ZUN9gJ1 zC>0eHFfye%4IZma=zv|W(M~zaU6qxOnJd*_4P?Skb1KkOx0to2(oQ|>(?;VMvQbWW3elG}{U4Std_6>j1!bYHGIFXr zODy(`fAAX!qMN%}72%;_9gN_Ls!-2(IhVz9t#NyH)pZb{bo+&CSQvF5G&>9r+jP1h zBG@rTjB*)_+hLGZ3;I~P&;ikkiKBkWK)fb$E?8>euNU_u%R!P>*(gE<-|24tU?j5Z zRCsAiHvmuxw}3XO1}4CoP~iLV@yea*)o~l>rrp1xn;p~7Lulz?kWmgIIZKrcld`2M zy!alMsJ~t%?MG5(6~YBlvp@3OSWuNpH==>oenzu1ktX~=OYOtgJ1LIfjFdjBT1bL? z^Wu!`txdHNO@M;8*0fRkW{WaizzYP6eWUB>-JaWBG_dwRqx}uFam)!@%&#k=d6PAT z_xmIlHv0pn~?Zqga*XI!?i88` z+)Le@_VaRL#Z6gf(| z5qw7RLj;f4#EA^O%szIyedmmQ?7a9s;B?r7J{=`Q`Q-3qIH-*U2i&PbB@m@5wFV9D zCKFsof*!)K6*aOVp7n8-ev;?_pZYt>8VB4>V(7kCpbyP~^|1~Wv!YNk_k{u$+D-)u zw>hNQ>l{DDwOuZ87LlmBvns`ZAOY({+KXYE5vg`%9)ci(SLYb{&Bgahw++Sm4fQiW@3E8|QyzR5n-hbKql zJ^ELoKQz;JT&;&5LOX8VAF5|dJtpSb@5fSLOGx7JbzXT}YQRCcPb_~Oh1C&023dqW z)`f$?S3J$Yj>5gAfxShMGL{x$=dscT;7>A3`^w%5G-- zs`P;nX9snX>3a(nS;J;u)E-=pFt747$?UVmrdZKlbf3isVmGv-_Z925Z(`5;H*_XJ zk>6d+9UgL^8M^8LPG^=1d+N$6CxS$prBmorSp`m6{cozA0L+Cq7E9HNm0e)t5G>vM z)HsjsuLsQ2DEsWYo1)rWljAj@@1+JxB=d<}aCiuOAH*pom3EM}6UB2$YQQlFS)PKE zbaz0TF$r?9Nvpx4dv&1&)8uz@GF)&xd=gHzN$&aL%2>R+hPJkngL=iU6D9w0Z_B zWFKHzfZ<}6RN(d+2+uNEX(iTV8iI;av-~5y{boF18CQ!QKp3LgPECAqdLqzLWlz4+ z0ZBTkVG2EvNmw?EzxPsMce6uAub8Ys)g#R*n^DdXOo^BKqtC7)XlYLbvwM>=hyr+C z3A7CBV*IYA;c3PH z>el%yhnbNeR|q$gs5RZ0y5;8X+@!}^YjB2dgOwv|oxM3Fo~?T=yu5FOEm%=#*#6o{*nUzDB8_j-N(aQSxd4bOJ{5 za;&=x3WXl(@PQ~<7S!M5*GzBbOEu}_8%GM^f8ej@+VUOj0(-zuh!g3p?0IqHn=L%hm%yyi(H<`1|HjZhKGCMx&rI$yO|$fj?*8*8ll z3bN^#UV{>i31v*>_AK8Lqxi9?y|N{~Q5e~@ zk*MUb^dDF^s;u*b-*Oa&-XH<{4mQ7>L?h1> zF2v=Qk`|X(!HaDQt*%LS%t}oeqtms0yY`pm2iIhuN&1KDYVfW1&q0EpXXpVAC|GoJ zi19I6QPQ8DFNi%R0xKU=Ct8nxPs%^n=cg~f?Lpujx#Q7WAqNYwz!@z^n@}ZncuuqKmdLSN)16PD$F{9fgxz%$zvaa9=V#2p6xru%w z&^IDWd!Y(0OEzA1>S=dOWQzd)r7;otxjNCv=O%)tqgY0ouu;Bp3in@qHdp$*@-dBc zQEt#`wT24-b|TikV`&s{skikrJ@1%(HTmn$v4SGeKPt3XSp%E!udakx`x)kff2*iT zG`^NdHoio-dMzfYlpLQk52MphXtJ@fv^GR;LFNNYGy@M@_D;vMf6H1tX^DB%3Duc} zL)wy&ze|6IfEjj@NTu**`hzU$1pmEC@wHUj(b(jIx3ejsVWtWB`HZsz#_!#ec)|gV zqU&fmXZQ-NPColHC>?VYD?iV2GYcY3z^u566iRAnm{Q4#won;|p!iO;I@8%~oIoky z?8@pw!PoI>>{Y?9?YYlk-;tOcHTR8UC?b~5^tEAQ1Y!5gGfynjVAdIIWkqWoVBI|> zKRQH9ROUAZF2?E%|47PHY1gaB)5we~Nwc2U$7)kAgPlF)59RvyQ?X-x@F3D+^(5Rw3KoW2wh>{+$FqZ_PmnbG?^cX6(-)ciCoc zy*HTdFlD_t0IDUD_J*_mJwnexDpKZY_Fn8kfakfHjP87iFkmo1GgL zF^06eI19w;baOUve#4T^IiG0stBGp#hdR)kv&LS!s`tU5xkeruSroVD2ZvqQb$6Vw zaEHkC_(jnd44RWil8+^EydEU5r#VuPKJOnnkUG4vYQ0Ej5elvl%D_YNPu z#@K3Wtyy};FH7SPR|LyT?ydLPRfxc#)v#l?B`o`Ez4fW*-6DF0q0xJgS}T4#nD6A) z^?>k?Eoc3oWRoZG-lWrg4dq`p^SIuSK>Uy=ORqX1Vtmzix?WLrJHNS;sZM>oD4!;D$i|~+I2S7`Y3!W zQQvI*8dBeg^y9H31rO3rpjc+k{{gr_N5B1XiC39ASaHJ=M3jN~)K&}&Bnd=yLTRU0 zG!k2ZP$=6fjJcrHDfw*`O`TsH{_@)R$_Fn$`_{jNj*d47ho3l}e}P|^evF6nc{LXW z(*oo)o&XUVF0WP)#UT&-Y+2VGO8=W+7*`037S?i#QB0t zTa)m#PtNkBJpWi+cWGlwoC~#93oid)0oI%>tt)Kt#)HT86E_Q;n=5G>&we`ISh_B~ zGb}!F-aHP*>OvEZd`O%KnHPFLSD{Vq1e>dMXw z`L`JNI+Cl{D4BbCqA7BpAsY?KL`I?TD10uVcBk!I9a?V$(dLX+=3Qvcj{vK>1iioN z&QDBt2zE@Nc?=s#?uh%Lj0Z?=cnt;CJr( z3Yzx%%I^Rc+POBAwjJY;iIFMorHLGwh>?jLLHY|C;H53ni`(;4+Lm5AhI21=lH|t0 z;}glT*}`30g1e?K{q7ORyQi=E9n%+o*YxdQlugx)YLi5)tYRPZYSke^Iu*hrA1BR7 z!&0PdNt+Pm){=FEcY$RdaJ@5M_YXjMbjiF`jNalSP6T#i6`!HfT+PyaY0jLN9vh+~ zEfoXD->ACk#~|$)QxCICFC9cfgrs~zVpz)$ZxrFNVDX`SoOW5MKpPCbveE4Yo zJw7`bz&fFk+fS;zlm19OMycxKn#||ryTYRM%1ck454`~$ z#bMy?79x!M$zM94=frgKsc*g!AfU zGLkyvJIv-U)5%NIrEg8kv*Lo7I6c?(>ezQ?zn;K|+7 z_ju0+;7;0XesntiU&Ba0f;ikW9p66XKA67r%~E-8t^hMXxXoW{w^o$|wUh$U;tI-7 zUy8y~AJ{aK7iOSH8U_fizI8Ihr~5nC5ntqSLia6fc( zbX0g9rmBvPn+H$4cl`SFl-!q2WLJUVn6I@K;ib0|@vumzbDOUfjqR4TxtmnRkUqybZo(uZZjGjQzDLqaeZKsymLqKe*S4)|_mp=t zrEQ~@Su4~6H`~%q*bI6J=6g4T9}7(@ZP@a)N$s1*k?T5twcLB|YF1DW6PYoN!$sV{ z+ot>%ainRpnF5pFWypb~Ynk;jNt4Wu)6*OMAj*yzjVH$FX@KQ$@`{-B3xKR}GEdQb zmeu#gD~PRVY1ZK*to1c$^+qWVa32sN5hC*;6}3~*27w(Hej}ADm(D;7#tOweK=sqj z<(A#&^edzhRdFTlhlMw7dCW@RxNP%QEt+%Gah7qS{QWlDj_ytCbZO+Q97iPQp@o@= zzlo?&b#^EVaR9)+4sOdSuF2H(N*>;GA?dsoZcjCWqU9Uq+z@AOw@RMTd8HubGqGbx(8%dE=3d!9THmn0(N4pz%B_4A~v zyoCvNtKYIP)D9ZWNgfu5Q4CmezZh1D<{S`$%8U3 z2awk(9iXL^lr^aqPGw%>b|+aY5ULs_#)@&th5*4un`w*x zK6Z5=FJqqP{(NZ|=`SXk=cNNU_|CZ9eivtvk%p5wj@v4-*~k4h(DF3=QPT(<=h*Nq6meO)5x=KPwqBATysMK5X+G{ z$-}qU+NVIHUl_}FMVYyzYQu_7p)u|i_MKEt30i52riJla+mpsUD~2_Rzs~9_tm?I2 zHMHBj=TxQlplgI}yk8Dd{`gZf$MeSZK_jUrfqoa-2Ve0DWxOwp8 z`{>T&k-j-CPWL!Lg@UjVo+N54W-TFX4GU|cRDZe~8`tdO>t6IIo4>3yMHFF z$7SsqwRxAy0NmqwZ9N=o&ud7JoBOr58C%7*+M#oGRjlx+TL{<9CItPwMZ>0{by%{t$;h>p7ZttH-KpWjv> z3L57{d9}KT1ME4$nDQ60E%tYz=;q_OYt9XAU)86!Dp`4^0qQ3p6z!hREMNFyVc~pl z#77LF+5BB;*MsI78rN|CXGzHjrroV^BlFu|ZTF66WN+*moW?{c{jQo6+U{OWt?f0@@?$FxQuv&+H_rBLPVPNJ_1Rz=&C0yxA>!Dl{PWXoFnPZpt zW;V}`7cJu?B544pn?O&Cg^B2TpQCCl(9BJIo8WbS&f5PDvddH$6W4KDy^%OaGr~)%j~y0XAbvk-iUepA*W*J_5~> z?BR-(4WdcZMRuv8m6@Qu2`%NiVvVq1uP^oIG}yU;v=zk0Ex^A?1ntd%DP~2yb$OQB zz1I!q+I)G8?b;c8kXbF}Onr4MfO@#LI zYd1J?Lo6qE>BzhRy-VDx;bj) zt6ODE)woVt{IW}$oDI`WBYCTd($rRaL;WOc2UTU)CB)VkpZgGg_qZUZEMe`zvX$HG zI||!pYO6+9zk^e>eJu~3{sl$}0;5?a zUD)$PX2}O5xW_Jt$_XVWg^mAjC+u5{c_4!NQZVEukUwC;jk*kXVA@Yf7JbfvdtBQL zbU)~tn;sa!<01IEYLIDS&YGpzC-Knm|F{t1n#A_XHnHZCImVs~A&Y zI$LDgvyFiZ+Wm0b?QBj4$6C>2Ovo&>P+p7Z5{Z+2Zfm(Sk(guetOs``4rg)fT@i;m zAOB9pZcxt5PhYW50NPG7VivFF;mK3j0I;l}ZV5-?-9@*+zsA7aIkn=$k4Y=fjaB{^ zZK_ROx!($ru&bGn8tuy?nb5asJ;dCgTwkQ~wAB^7E z30+4#`cQNZ&;!@Q^%i2(OU9ERN~`BE_ku_$qu9S|`FW4&23O7?9J z$Rgj(Oedp)6b9D}hitck*BocZ>lEohV!&lc3vl4rB3hgmj>*H=5nf4)+og%Mu+d#A zZ#5p+r0b_OnW{8#ZKAx-J#I=4{(+r7ca4yFuk3mONl36IZ~$&tNpeAXw|{lW(;$iJ ziL!@GVM^M6=i7g!)_>84hai~K^?rlSPAGgdqm-egD?jQ3O6Ps7TJ)WbZNah*I$T@J zbEOVnhTntvM>}{3LqYTkKyK=~LwZ_))@Ae^|C2SPhMuar=m zj4bOqD2L5097K*{x3qa0O&^g9s6>JDvLW&F%fmR{(>8p&MhLgT)KTsA6CaxC> zrpKiL7k518~dpheTSYq1J!VH1kJf@h`4Ny?ofVoA$Zn0G>&{2FRLXv{t3ijE5#1XjtSK z*O3))s*>^pEF&UAfA)Wp7zc8xrmS0CwaubDD5IM#4|2jrYCr&dyI^RqKQoRJ1Wqs3 znYo^|urAMe@stPRA=X%Xi2V+7y|op@0hBg9=B4Q>x5QNUTm4Cv5i7f;ypQ!Dme2pN zRRc*KCOdk+HV1tSq|5bV{9vi=zSK#0Kr`oU%7ife=-PiWD1X)IR3_HIIG1q_&JWqy zBTtMgy<#0y?a_~o{%w69%3*NIF+~{2JPkhGEvjJKCdo(V-AT$)UR zF_;@{Fd~xcXl|O|J+u?N%ll^K#^WLEeV>}pnRf_sx`FRg zx2}CE{@qDP@<&{rlq7ecjzR6CXbF@}qdf;bCp$OGvw~&aFCNO>gwJ);4nVB|``^`^ zC^+M%6dRTHDO*lJNQWP0Vke>MqWqK63$tS0%=DTFYlkc+1}dFi>AI4M%hcKtu2=J} zblynM%}lLn64`0rnmSvMD%i6cKydzr;J){5WYGQV&B_D!0c%)Bty?P3mNA|fNedY{ zDWzbB!AR7OYOcMPLa@Ltab+9joGMU8Un-vkam>!C$Qkpm?0{M9G%G*Ewi}rR6$He6 zYJ$&tEvN}-wvI6?RL#;sRW;r|{;{{?AMmYoO|>bPhG?>*Eb%O4T`o7mMwSjSZyJCVeXig#Z4-tC0%4V=wh{abY@;ZinirktW?B#M#Z^vH>_%$EIAiWwrd z_}Z)P*K*MS21D%r6O@H*`(e*JGqDfR`L(26Jx3zj9Iy1 zr2@1V>c;ZK7nPrtQ+8NI>C{Ha_z38rGq(wBR5BPf44p*KbC1u z>N1G7dgIh%+p^6o0!lmRS`MSM&BZ&|rGe7Kl}yZUh8!M%EQ0cBzY9fdipFFLB}P4oRqpZeA?)~y_~nXx_Y?ZzhlUcUQAJ_xY_*JHB9fj!KN%xoP1 zL|ky~d?H3lD$`7cAO0+Rr2QwuA>`Sv|t&!)-a3LY+e$cAt5` zT=u;KmO|1URL<0 z_EPkGlk_{^{`v=h-!8b|g46KU_Ibetzl`t?fAiDt*wfR$8KeDPJEJHJv`1~Tv{BOU zS3&w;{*IPCkUeZ-I=Dpc@>Fj2(nxf(zyz@kK}ibq@W} z5=G02%@N0{40U7GXC!tGaxUhMea0|pv_qk1=Gi~3cwLo;Hp0faZaFZ@Un&3NRwkdJ zU4fR}w=d*LYjG<&ws_gw-v06vYb%V?9&5E z@HfcE3DxbMTjq8Hd_;7u` z*C{`1uwGa&cX_W2;?Z#o3>Jzcr;zjy<&*LMUZ|#P#Zttg6%T1XyLif_(!=0`1n*-_ zBwyV4(6%@4zGvREZ$cksHuHhGp6y-}##fEfcwLtfzbtRd1$R0tWhOYIPsu-ROm0$n zT$}GWL0_NIr!vxtf%cd$QtHj-vx3S*s#v4yyz)PRUl(i60+Rg+5@>V&#_xw8&o74` zH?wTd_TT>b?|rpV+Qb;P30=9rRFgKVm!Mo4D zJK{Niv(wl#A9fY9ukb{M%`G&XBOi1mBSzMcuAbUrE=XoRY-M|FP3v%L87G_2pkZ1k zR3bts6Rn;Yjy3|hLu0g&%2w0fD3o;-8@#d~ux!UG-km03ZoI zg((!=4q0FtUEf(Y>1WU*|d_|M#&vkqD?Yg1#ZVV&P9s1wE4qS+UYme|1!RPGP z75}Q-Us)e@E`PJ>-q*AJ#sgYQ_B8B&S0FJ}!m!k+7v;$Tv{*iP^8I!{IPgu*DahuB z$0ppEPl)FFW?jon;6X>j2sm3KT-iix8Si(IGacJw6!DeVb(#=leFE!nX# ze#BjjpRWpG-E=b85xd2vgH|i(cVC(VOG9 zM2AOq8|!qGYis0et7@8wcyIdDEa!e!3DoEe}5kVJqx4@d!5m4A)lh zk*%5^Ix|A`3q0& zD=(M-J%4;n9e9kqvRdIWP=>%_CWtovZvSK0rUQq8o>pNFlrV6VQB)zzz~?46@hVyS zV!jFv)Fye^*cAd1SgE7~1Ly;qffOYz2|xDndVZFoVYC*>hA6Mc!!zjT#(>XsSrg?_ zC7Q`Yl0IjGWl2-U%02KD31K*jTNzX$v;L|qSK45J$v=G2M zG9(0(x?ku#9`I~MEYPh{_f>5sRAv@G9yvGgrX06&^^x>B<0FY`WE=oUuZ1LUw(#Tt zEVUax%S|54;(vQ8S zx#;E=4{AU`o&1q76h0u~jl+IG6KE!RT4@K9hL!98h@V?vC9DBvRuWjn71%xWvFN{? z$S5CNEh@o<_xS-`x5oBh(U%m4*@zbMiZU=bG*Yrugc|ZxGz)99Sz7DF@?S0to>@rc z6)(7+H9+E)JIisWF=ayRuY-adK&5Yd-wfsidyb=sK=DsBaTTO+%T#GN+E)t@a0I ztnbqXK#k%m?6Dk?Vl1M3K;kcUPxpM&FMsr_FR|L2j-h?O+4JA});HP@?Scy~co?n& zkP9w&CH(ex+7CZ{)Bg7_tL6{x1s(%QOxQT+3<26+=zzm1F{;3edaqVen{if1xU7iL zDWc-T9VIU&32kpnv60|P(>Vh&arK-Oq#;3pG4Aw;x6jcKt(h7M7N}bKrn*lIxL$nryNT>daMod~jHrIV{L*7Y7oLAH}v%)rv_-EdX zlLITE!NAWTx@A5)@-aRnFj<59(Oc1bFWqV!ZiMk{qzm{+f47hpHtTx5+x&QLe=3Hb zLYqmH8!Bn}ZIdvtlmb9PW>~YMjtSI!6+xE`b-!;O@x-zo^lDC2=LoeR>*@g4sPADr z!P`iv%+dx0_EQ@gX3-y$S;!=;`xb;In08Xx?gO6t+^|X_-!1bU))1!a;B##z$jm!; z9)7YKe4G9Xku=s5H_Hye*j(r4tF38vS(1N)zq~FhSy4a6VFA{A>?1dUr^%;rVEL3B z*++{u`$hkYxH-m=b4mBn?)Se>MoQf0e;XLQHgma=66FvR9t_C0_qGS2+VByB-tINq z{@-{{{UkL0_6^7JD`>ZIcw!ch2GCA<^KBe6xEXHQ^#c(!rt##-E^ZrkwLhg|JWepk zyYlr7zWFVuCiP&B5bHOVdC=EN1*`Qq#X+q=M7mPpXWxq5u{f_2^S%$c3qG-rnYLdu zVY|o#I}DqCAwdJ5N8NCk5UmN4y>H(v9Igb%joO)_!-GgNNWV+++~BF{DUEuT(N%a; zylfUXM|+!QB{b#4xsTKT(7XbiuZh9~Z!8DuAu3y2`D3++d1N(?HU6Mxz9Q9J%i{@y z1>|%5cAsJ%^lQ#T96aWG-nO(hs40wk(nptT=Hw!lF8}o5Fu>jd&*Qa$>^zjwtY_8f|xI=*e4+U{y)uS@I?y!SUcz65kq;j z|E_{9I6C;j3lPQSCLX|9E%t)X;BQ}WeEchJKl$Qr&CS05!o_cV`|BV4z%IDpf>%Ma z3of|et>BNp<{!R!w(q{Ib{}GS_@HnVsX)7Vzx~ApG9*$ea(fG?lAW-??}e2VAzA3n z-O|REB3o>;X(`E$A4fK6yN*!>hiEYim{*f~)4UXSW z+`q9AHs3A3E16Y1>Y-MUSP#91qIJ4HXvA!q1~XfURT@9}!>^I#ZmeSodoxNhwiYvq zi625NH`*nan&uH4`75;n#=19#)UwU@9)i`7tfoFK z&th_UZWQ3yCXteT#E$|a{l_7DSpEfU6mklq-b+6=zP7?~KpomN_601D_{LQjJ3ac7 zci&mW^=+2L_uw0>S+@faPj(Z{f6_9mT}Y+-t3DflRvuQsP|iZjc3Ev!jc!NvbYJ?E zq8;9Mda)r8k`BOh0ARK>RMn-j-3n5_ld_NgO^afTL&%7{D*rt;am~s&!-)Udh7M$K z%kg9e1 zs)Q;sBnDEzbb?AZK{?rQ3hte&i#p(wrMZ&S>Una9eWNZ+p z==J~#Mpb;80%XfUvD2<)vJta*2$jaJD?FYB>!JRT?0B2{KtAH=0&+6Z|Zbu-LEvx_qJ9lQml(bgyNz z@-Xg<{<~Ng*f;TJN5#&o{Oqt9(}|p9D$ZAsrSoCgZj-GF15bKjc5dAQx@mBRuCK=r zVYU8+b|%)41)SOhtHzy}M_o&6*1m3xHiBpNFYJ@}@Tsw`6gm-j@GP_Rr)&s_$Lv&` zfr8A#>jS{CwpxLMzv^YfH;IFhCFHMu%r(NTk@LfM$m3ej1?YXYm=8bxYeSy+L!B7U zcKHw*OmMPYaUBj=2#-7zf%PV-fg&;*5MI$vsZy9uwjqn)3mJqNp0jDBt%z{FV6L59RFLnM)N>&{KM;fwZ!qrqi^bRqN<~;W@{hC z*HxQw&xqAM(Ok(^fm@!l8+`O~@Nqi;*=7IB=Qlt3jeq)kU;dt5aKQy{1=lOEF1X+w zz}LUie$d?hPcJLf|A+}qTm&IBa+?W(SzhgXS)11l{<@tHC=nXq8zd-TnvG*@HstZx zXIw)N#KAHrMS&LpT=*Ln3f=<4oj2~>ViJ>Z08!*i1u!W&bVBn?ZIKNQq=?XqT#;{N%$xu4EF>_z3!yf`51@&z4Ck8 zHVnTF+lk3icNB5@8Yo$VHij~h4F@?Kk|7jlAH>$!Ei~(|8{^GVMq!W~jXCwmQUISm zakDAVrAD*>7j(Cf3|ejyC6SeMhRde)B1-gW{2_K8}LYY&!DVwuEoHySPFcEdH zU3V}ipZ_c0t;&%Gms!F4GtmqxjLL476KxmGTI`P&gj3Mam$96MzA0a5*tBi0kl{73 zw;AiXFo1x|v#ddEvaN9q$XF)jQ}YIphj9w8+weJF()KEVL3KowdU_c5zNzMjqcO3m zF#W^6&Brf0hk)oyy>b8sI${0uym8yEzq)X|o@!j<8rJrf{Z%vlpkyD<&}J)pYV*mu z299FfH`E6Y(pT55%~Do3r59st_90dFALJ0jC^y>;=%5b*Ivr0ZKXlcy4Fw_TGW1<4 z<@CoKrzJ;$LSbAK5BhcPUEfYHa*CN4C~ru4=vqrsdjUGJ{~4B@9CE8tH98*}g*7Wb00c<*$`napue9-uo8K|2K{ z@$g~z(jC`UW)j-?Cs3vOXmscg624|qpE!>0Wyvpjv~48M*NHa!Xc8vifkGAc@e}(p zmI+2pWe&cj@*8F{r)E&G47s#`_jd5{(Fgq(DE2R}!;cFtcz4k3f(tHqXYkFx`{RGT zec=n=eOcUoeH8YfdJ*LEz99!P7`&!Lttel?VRH^<41(x31D^74>>6TzlqChwZvn04 zF&^}Qk-!T_y)6eyUIboFgofNCEXPfp1j^*bMf(PHct8vNNfQxS4t#T0V-yEtgKa9g zLLz8F<}_Hu2nD4hkFXqc`pzJ3@HfKQb^2KUBJuIviE92j@-8$I?2UrVZp(~d1$&~> zlO!zP#-=A}&1MqjKpr;w_KxF&=Wd3-N{$Wyc<2)l_gs+ zHt8$ck_p1SjbcW~gg6rjoyMVLnHu}5!oMc9s?>*hw{vWA;Tii+cHB(b=Stn#M3fjf zE{gmLn2$5S`X}{#@q?3+6nU<&OR{AQ-s*r}Z@I$B{sT_#n zebS2qH*~9hs`O>iC)t1}>xT_*?dL{)YjSJ?F0SkSPV%l^^BM@)jKRClpT5?H&Y5|L zZ`13r4#u1LH$&R_m5RMy8>yL8>}pVgu}#0(S}Ze?qcD>PeXAYEdL)LtNBeG6eWdH; zD`>e~@|@VHhPWNb#l(~h2Gh}bH4v`}{{7fr-Jbk-`QLA5^P+1n;ep>?d-WG~!37t* z6S$rLx!{6#2*3BAzV|)<X7>x9!xPh?+AF%UqqxbBjhr&sa9k8wTIcNQ~mWQ$@IekN};~E<>M)Qw2 zg@4#sc3~hH$0(Sp8t<;_Upu0#mZ-1Yo z`H+ef$jSbz#<)fp>4J6N5wG*6uF)oWHg|S;W@4=n*I_+U%@j zYW-0DKCC0KE(d&V{*RldC~IpbdFp;^`XgGa+G4^Jkdibk^+o+28ab1`lEi6$1^1u%K4!Vl&f5bed?Z5yf>hADa!jJb(&OWDET*rN?mxR6i zsl~Fh;YPPnB+bCGIo0vu28T|{Zw@~N@+QQ6ju-MYXxHO0SRiN`l= zT3ehi8k(@~@%;BT6@A5zi?Reb_B&%ToFv2TzP-&#baD58oAkp60u0~Tae4UL8GIi0 z?<20JCN^K~x+AvDZ)|JHHbPlc^y`3Z)U|m~)C~kjyNtyh#<$H09}3c<0(gr~#VzFx zb6snh95ija|7{la-%`6w%iYQY+F+MLZ1l0c`uU)}5r36`3$k>cEss%aCi77o`bPc{ zaVBCubsuR2zQJE`y}Iu-df)ru$NN5(?3da5t?TgPf(za)Tn8W*T=0(JehBhu`^w8= z_QOU2!c3YVoP($l19hx}ct5la>u5+iBlt3NfqQP(g9Nj@(E`Z}2mEQ_cOCYMxI-tU z*sc`;g^2b=Q6$ztj^4&|aOA$`x#PxUnCXVLVlZ%Ht`UC;nu$p++93ZNs1>|0X+SmP z48bP%h2S;uh>;}{Vf{nm__G?Kv69104`Jthd|VdF&Ekh%Ik?5SNr{kq$Y(}Uwm0j6 zbKr+hjY1VGKa`VFg*356UB?ZZ&P3Q046INB2!j~%v;CiDu}|pSrh)Ze23w&s$q$hZ zg`^JJ_Iboat*0iHwjtqYep+M<8MF$p?C2ui&R1LUA{ z=xDJ0q#ep&otpBw>62Eoupl`2f?_^}5m~`)K^AT!*jksV8)=`LSr-PhwV~6F z0Uk`yc!z%LGtO%lbuvxk>%Osp9W?Id(GSV# z27cXh0~fpu`)%NB+=9PW>i{xRsl9?~=^FINhA}2kaXH#_BO1J(VT=?SBF^y-^%dYN zW98!pQ|t=R<}25 zS2gQv*^p4kkGN3Z>-az0>=F8EB~{yMBTU-<5emHj#f8zZ6M=!zFluD3ES(dDAQg47IY?|)N*0Btd#2#J~r zkvu09%s?gMX+Q)qE{#E26>L$`!U+P(DCe*p%Yey6x@Z2~B*L%>#Qd}TCxNG>)4?FL zQC-k&mMI{z%pj|8drYF=Ub8crQ zi^q8DIbXkmn9{3H%yN9*%;tw|ThjUIt7wwjNEI!7ytk%gr>$BroPE?Tp-26!hEUpC z%Py!=)rA?p4g`VWV+(n(o_$hi(@buzonb?=CUh>=~n}5mL|IU57b3F;7|D^ z{;P$Fw2=$;`QE_n$yYFq} zxD3`4MO}a7T(NXQod%s~|L}yS(1~EPX14TGmvS_1R;7$qxRL`{ zjpGs($zT?BG0i2p0~|!uyK1^#4QUX$JTnmvJPO5d#M#z*-pSeSpKbSfE*Aq6_tUq} z8=DheEpn`r%5i`^AwMNy3iU>6;hIUUptApRID||?=RE2k!cn}N%FS>|TE>Tn$CUzD z;ge8~M7Uz8;CaXY@%Z5R?aN@#wmx-!Dj^9lOUgb^-p_IqXdL$n;qu@ zE%GISf|$?;_~N#sy@}uwg356LOmiY3+4A*$Z4c-&pg3c=Msi^>(KZU^ zgiNeH;{xTQMxm@(8NrW)1iM!Oxd##!4nI()F}6Os4c*=wq>o+Wq^G(bI5)FmoF)?o zlLP4SwE)eU#5sO##X4`%7UDNP=71&h@0)L}g=yKy^M@f@%*5c3B{HFeG$9MO@mRhy z9O*i1l==x~G4H1pCum5%8+hhBNG6;XeG!!eV$X7=LrHd ziM)l~#ArZ$L$3*nEit*3_Loi#cF<@V{sAKn!JI{-@-`1V&^fg>HWl&1=y9#ukoEWG zx3QWw;CTPHwa4@>3KQ1nV875jO+~3UhGOPTGQj85FO0pBOY{TV(khbg(Z8`8Rt}@^ zP0j{;z*-~vER%|H)#f834+lz>Gpul&;G3_jHKK{Xhld}~u5lqCazyNOZ{#QUHVluf zX(K+`afNWS&x={g<@oR;xFrKOC!DA&o=C~g#2C?XCeaX~?(*Hep6`Cer!P=zN?4OA zo^+A}pM*oY;Ry^5e$XFbz-eAP0Cr5c#Own-{EW95yE<^tUH8I|BG)MA0|(LaR}Rk;pCS*jRk*MC9DiMuV_dozFAQb^8W-0o!m=2+;drfL+=7qJ zOBmbLT!(1T3gw|9*WLSl6Lns7fU=>+BEh)VR{^8P@$-rf0l&UVw+UoMAlvhd?fVwJ zF$TmNqe&loM}s7#x(9RV_|(g0cr!uKvEAzJjm}w4rM-)yDeer8&}(4s9(|! zwjG%FS&Q$(j{^>gB=8jlYb>a3NhjVLND4mG;?TxJ9zmFpF6Z2qn4!ghzc%}rar5933o=ivg0*qFoNGZyl!c;@8^eJ$GTZswD3 zHNGC(bzZ}Me6#3^TNLjRF_3lwMJW`J2Ch-D3c{J_|b6(XaQEqjnQxhkbB-1%ifujqIKMR4-#E zV|KjuilV@G0~0s$F~|$_<@+(;&AM#55`1=zO2PzNIdMa-T!zf#{6OW zTO;FhOF=9I8N()8{#N1i>zxnq|CUFQrxmBvhJ0e4+_dev#lr!p+VHXA&|d+(26gm< zjl%EZScG9G-bR~7?Xelj>PEPlC7<9$Uj^gIkIiws{P+A@fByUL{WH7Zf(t$~Xm-H` z7kuWhy$c(7t0ZdR>{iSSgly7M>){I;9aqTi9vgiA4fJg@Mv{n zr5Pz;C8vr6TMU$3@HO}sGJ8exNTx^m$9ly8+>bd__1LtSLzXF_YMBo1Yk0-C$LldZ zUbm6$12dZUgJvXS-0;!EzqJW6hsHUv%R1p;|E+AplQQ1Be$og$$pf#da!Mq*=kQV6 zJ)df}9UnRh{CCHk#uay|`o*mYfy$G~@T;K1?-gF(M!GMFL!JWIj( zV@>yS@E0c`*l2v^m0^2sbK9tE^Uy;bOf=##Y&e3~>+OXmSsbH{=6rwtjsM#OF60RK zvW?Bx$DkQ?sVtOd*jE_ock5oEiAgrcZBxeBZwvo~O)IXJHs1ZaMStJxkoG`oR!v)7 zC+xV4{hZg!{I@`v`Lw)#<#pC_{7-cO=LtWnXb0YeFM_JER`Bwl^aOcVDyWpe?A$;u z2iUUGvA<+AEI0VKTBcZ^#*B2O1}#kV>1OMJifh>Ld!(RSx%JxQR|hqkxZrzD@INMh z`rEjUEEE$JSp`pE1jFazK@G@XPCWVEfZ7aro{Q`_F!G3jDFjhk;gc3H@D+NW>=f&e zSGuo8p39MkRa}dmLi_}LmHJLZL0!r*x*dM}=mWp6sxSZi%jVDj*Xx7l7hLe!!wI)_ z!37t*3;5%&`G;?w{ktzl_n{2-JBZ+bi?M7SbUp|aNQN>|AA_<9M~M~h2UH0clRwS> zs_abgC3v>nEd@u3Z<3S8?Or6x7?#OZV#@4nqA17Rtv>uA(k}R86=L42q+Y3B8Py6N zj^vZ|EA$259d9p-*E3mk6oNMBB%@5^42S_x8)P9dZ1Ytlqt0-wHW_$h3lrk`ao#rN zGnITeu%O=mP6F_5kZ7X1j(HQhwbDO%U67ULMf!LIn7m8G0=f;w0xO}C1-th$IU5hk zWJY709DpEf$F`~3RII6T<*O>66l4IEE|dI9E+~T;HTS5`6VOdlQuB;Y+VEV+OD- z59&O0nYd7%eT9okh5ZZ;&nXvlKT3 z0RGtgliHylvo)j3HfI%2^h=>uoBl?Hq~oBXwM>>|t%T{mgAbN@{q5~dEv9Nf#RQHx zw`ra50;RIc$VHk>i}CFOn>g^8e$^u0ARpiu_d$|fW*dGOd8zyq){Bu2*sHPWfblKs zEb7Q>>{apA?~VF9^W>2a<%`6U7X1z&mvzP(%*dg8~^n8 zzWhDA;DQT2bGTlCb-@KcCHVSx+7CW`YG3izeh?PkzDTyYh_~_2Y?A^GhxN4wJ&5x) z(BrE*S{lJaFY2;5^hNnN7(u+Fu2~tw%l<3=&$Pi{1>;OHZcMX@x@IwW!p0-u+Uu)% zWZX!@WwdEi7PBl@V9X?-Y@FnEedHh(QL@}4wr>+*+Qf7r59v=iAS!`bz)^C^!xIAj zo$p4(!mFRm;Lu>l(4tcbY}lCZWPILB=qXQ&szZYw-hu2kHmkb4 z_)+%;4xmJRQ&{BxA8**~%{DgM&7{q?ZEG{O+U(7>*)})Zwrv|zo%Z)X=Q%g?y_>7g z^VUlrT#jI%-p1(%q=6)K^* zURXcljRxyrd6?IZe2-*JIV3mO@Z6|4gNA#IO18?J2RFW)_^GvzWs3A*7HSq7^T zU?0$cCG;9-%c)mc14+Z#Zwj_fEaNG2@dVmp1kM z6cx(^eTK=eP5cTS>+X%}lTQ}C&>UP_Hcj`-ok+mdMLL4abH=tLCnwyCH3!1nw2>h( z@z%;eQjS#qd^SnE`h`iQa}U?T&{E@^z-Tt^%x!~{_!pt#Ud+05&Xd) zUu7AtFrX(O$`=^-)=Ru_IHMWTQoJl?!zGbs15S8k~ zit)9VFEH2kl@>=2UoMaQIR!i>B7?m(CVp!=+%<=Sk-x3}Y<$h3#UeV08Ic;3;iQwpivC>j4&L0il~CjE_9%V^4DNGVTi@E%|M7bCCjaX6nta~QrQd=K z{6w{iU>3oLps+z0pXa5SGrCDLAS^yMOJfb~z)dbal%rL@0A!niGXV$0=$amtZ4&xV zz3Kg=;b^l_WJqtD**q+h+=^J`SV-?EFClnio=ANW`n|z3=!MlZyCN1w!49(|h%vO- zOdKHMl9!0#H(2#3xw57+TbVOe3@03;mh+X|Mn}Yvwl*cp% z9Q$juT`ont`Qc3yJ8&aeG_-j3RcA7NhFYxm zR9_(;f@!9`Ngypk%o?6kz)9X!ZgILE|C$S*e&Hts^@Ke)JX~W_z8h{QQiNJ zQcm11biXIH*aWhBG`lTH(OfV!bZC%U5_VI#+HXBd34 z^|wAI9B13|lN{drPBkxL%61N%c|z!vD86wIky@uBpPoW){l$Se@@E&O35UFkAMw_{ z;aS>4blIO9u5`&@iEauRfa7hyN$}u^3V%*Nvc8*uLA`R<6fMe!cBd0{|K-%Z>z5Mr zyEe}5H3M0WvUhAGJ6FPApjd@uM_C$a|Kq`82F#j)!C%O(qB8M#pS3?~3??YSSjC9* z5%Q*kt=FEL6E)m>@LwCbgHt{NhR_LYa8X}1R{_(%_Dy~17RMbKPCSRqJx&sLO^C7W z&+}HTt2R2#m6}#BxxC)fKla=t)D+EvK!^e5se)gKiyIZE=;M9#6FcZ$n6 zzg>ls$opWe01+%S@h8H=-qXJZhri$GMp?tbH0E;Zj~rjPz;RL8x@X4%Zq}&;hTVpU z%)bD>R#$6^!52(LU6Vp;asNC4cOT*K2YE+HGR5$o|1A98PaGvc$s51*_gZCL?ke|| z@GBdIw6E|Ep@`N;fCFW}$k!y~Y$BfNS*$Z0&8%@tKh}BC&Y-EEKaJhcx)Nyg5#;Wf#-;x4DoQT`bAmO86t*p=2Wic>gWF~(7dnf%zif#5@ zOR;|cg6{&4(K?;b^3*gzm5mWDe(LZN86y$aezior<{tGTQQn&9=u;^JzXBi~|LRm5Qtu>W(|e{Y92b9| zpP#1O%=yXdcG$2e`Au222~V9TrcrHC{ge#798?q0Sop)K0F6;1rsl?d+`Hm#UM1sq zS@VawzU%9-S5xIA7sjTa5EYW{4Ad{s<%F5_&Izyq0|<5)7}P7^^9_lc7+S9hq9S2a!5S6%=mE zx9qxypD?Fl3$xSDT`Jo`tH3#0qsN3$LwY1*P@?$zuyL(zcOEav z-}wjqSdQ*Oa!7Gkkkpna!_R6>H&sGl*D8JxQl+jOzLVSZ3jZ2u8@WFnI1muYT5(ux z%AVs?8;I}Z0dNorx(De_D8h|o!v?oeztN=)rRHB7YN`h|kf}W{ZQONXf4fx=vpA4cj1Qw-&(?nuA1I))t1-@%{F(S*qBSd;R3nABk zzsnAKk!M)-g%HCgA?ImAb2w1%D~qUDdhSEuCZ~07Whu_n?$DOIH4k@K*)$YxM_|Tjyk%0)LIZX=>9gBC%EA zDy)Z{5x0LNS$3)bii5R5=-|DIZJC9q` z3$31}019}K?AKqTt}>ms21i9(Y2yW9)&tbt{XUQ@#`KGC%Z2VpxVJN>LC?fD=Pi{C zPbFuaqkD7a9zI~IT$JR|P%qdvG4ET};7;HD+1xL5YRJLFhYbZr+NuFwMw-OTDd z?(CM^1~8FfdF~sP$Z$byi`(vkEQ#k`nk}2%J3Jt#*73@(kgi zz?BxU7obKeX*5#|vl2<^STf{s%`qE^Z_XtzeJ>xD;_+>2#mWw!rvRBa~>NKJ*w)+mK8Wyk1Wy6z4(g7mQ} zal2CA7p7{3de_x20$6n)cG|Ym0zj~5t}q9)4?}-tAI-{>7!vIP4y?T~Rq11v^} zUr|#WT5>Ns8ite4y4!eLV4qep!qvt8tiHK@IHD5CjCCSi$x%bH7D9g28C%f+zW7f> zKCj)-kHHF;_7Xv;45P<0CSeicl>SxJ!w$#NQ@)!2623wwj$E;Fj|S& z^%>t!?D=2iJDOw4Rv$M$o}~S5c|rf`8X^0?t;P4?YW!0v*J0AsX-z;edL~@Y6499y zKxLHSR}`xefWu(}+xr77a-V;o9)3fMDl+uXNHtQI#E5nq(GOWrLj(Ue<~pcR+1a=Z z%?`D>bklWS4K!$8i&as4N$3GaBw+M(9K9Jwm61)UEbBe@-{qa*u=dFTd+!9m8$@|S z!k3}v$J}hpvB`B(<-lziP+23*EJYr{bb{9>1^JU?N#q13aP15rO>{8XA7>Uql1x0k zSfV-=O&$#xkM0P%sE|1&RUl0C(~8u*Q9O%q-M9u!*iqT%`cfK8gqIjrk0vtkVPwUw z7Sji*7ytbJ#P7ruTM+{uEcIZY8JWj>o+4y3s)FOB}jKh)R&ZM(KRCt zqNO9^JGv%L6U%h&_aJ-o7}AaVb4m`oomm-ps8cd4bLTWF6_1g>JT0SpcWe*nC(#Ys z;G^s&>hMK#U%oc|esJYCcizQWBxU;(G<>Y#(U&Os(O(6en<5mznEuUyify|$vnJ&n zOHWX1*?2ddqigsfa!v~~6!=VX<(+!`EcCY#>QeGB07?6yr7D(m9BGGUMLoY~3d`BS zzUV+K#ZOSmMcqYCM2p+zgrkW(lgid&eMod_k`*^bK178cDFB78An+~E&r|A?_&VPQv*rQ9ZI+|`e&8lxw0q z0`9BM{2bKFR_~)Q-iWCAH0tIDS22 zc|z${q=Vo@)H=(jm&#;=RE*?-AU+$io@He&(X;=aE+V1%m9%0dl_5|L`O1V%D!2Jv z26d#CY4B&9h~^^s+@Lav3&n|+j5}Etn@6~*?Cf&fuRZmncQwg87-7S|yS*`t%H9>Q zep@WVUl3dNAHR{4-wM*m(?;+5f=`InjAUKUv&%*f;CLvAotY&@a|Bgz;%-RjcF!fF z*u11%^7!Lk`}%Zd(b=hq)OqlRto#kt zasyo0Bkwk4O9y(LlK|&{DwEVjXQ*n8O}t};f}xJOl{+mcDXynJsKf;l-*r{=Ir3uc zf|R?enaS5&eTA-Xl`0xJe(7VJF0$Zx#`?cp37_gME(4R`{!-%WmD1m07da%Uo-?3m z&-}?{ytZ5UC=?kD{}3OYgov`-K^dYq-Qvl8hGpzIJ9qbmHHZyC9uQJ~;qnxj&0Y=K zkr1eEX?%{0m+P1dHgf62iqpcgzw^=!{>;p_!}!p?(_M9EpSs)~j(Ff(ofH8~&TPgt zbvxTHF8(4_A>kAEOiiEJT*G%+sYgOz1(&SWG==0hsj6QbQC$tlH&9=3%%W8t@CJ4| zzLx2Gar&+Nvfp^0&hmR}->msJi2WFU$oz>WFdlgB!^07WQ){L zq12?L&kab}0v|^6x(6$heW`Rf1Mee@kte7)ZUbXllN%9!>uHBCPb1UXwW1EJLp>Fc zXH|VX`I-NPzy##QE^)rK0gs!Z@VAZNQI+|GIjfAK2JXu^`%KOCmBrQ>m3#WkmFuX4 z`#QY<i#NZLvjCUp>tpBO%pwEz94Jx@y31Woz1e13n`z}^ zbXy<@&BfAPQi3892`HB&_A|vS=ydgYkgo>Zo!A;6oN%8{TpHtW#A5rI0}L5n0e# z_-(LFO_*v+?zsT#Ujp@rL3btmugZDQ`pF2iI~Gq`l> zucQk2-y!_|E=V>c@2#^a^C2Zi>UfQP8uv3C3l0Jg1{X^5V$eq5i+Edlu`#q35ptNu>IB z1*tOZF!At?lKFlNzGp~Z7g`|7-FEY5(7d%N^q8MDZzZaiuD{yalF}o!5PPLhwUels zrN8n7_WMCjp}uhXPF5EDv2AT~bhq?2DfI7=7O~Cns(9Q@^Ry)@R|AEV#Tfz<0Ypkp z30GU;U+PKNqkgvWYENu?(_c0*zlu>5PMkY-&Iwt_kkEmj&)xA${>VFJE@z(*Z&euS z>X0l~l~VQG?3SiP*%F<_bI*8Tj=#jq_ue8d<$!p}x>>Y&46SE@&fCzuDu3NO!X!8L zC9wmt6dq$%Ck?_$K44vUkv~MY2o-DrFv^escGzASq*6Leu8hCE9Z_;>iMJ~yF4}eX z{a^zay|(Suqw}tE%ngpJv30vQ9C6|vy?_mBV9~^W!{_4q8waP$Af~LbPd^m>k1f9c z04}?&It}4}N`=H8d{cwC?l;57PW3x_oOrj*+z-<3MA9G1jRZO z0Eeh%JxHtDQac;dBy^J~)dKoIM|Yf&c{0#%f<$5gGKQ%$K~1oXxKTzy_Xcx{M*Zn| z``}o#9Ow#un-Ft!ygTGq43q-O7pX_te=i?rY( z-e(Gpsg2)7=Tm1OR-son)j5iN^;XTo9779=-e!kQFqiB^&dpKX^rLF4ZjiL z$-bB#Z;=}O+C`w^++SNmgotEl$`|e16 z+(Yyh+AWId7nEZJy4BpsNlg*_(#u-g8__INxrgt_c!NxY;RG);xgC5ccC(@H-M{34 zzZ`krr(gt-I_sI=ReSlptej35G!ETT)^v=3#&z~cAv=?tr>T7_PEzVG1{ISbduk()^dEdwOkBNVC)g-1)Rafihm(=@> z?;Iuz(C|rdZQR@)g21*xl#}qP9=fk-Et8 zzHJ4L)>Ih&#=Bp39g48Wlc5)CjAw{bwBY7KBsQua>3k1IA^VBqBcq#rh|`1T8tMuf zQn>(!<|XSSTw3c;y!BKe(%Cl8R|mq!>r5SSE3d}7w~YH$vw+#Bv6rPuGb5>yxJ|Ck z#;XN6?)tZm$vFwucIw6!?UgPE;p4Qu@YMzi2vBzUzSA973EdLb;Rn$?iDfiBpCNGl zUG=q^s+#zuaW$1JQ@o|0RZn_gGbv;uY9Im>j%TGe82M4_Jrt@bb{70fjn+h%0?3Ja zH~W3!Eg=xn5gIaRq{9l%QW+9{k(LY}K>suEHvA=`HOkaVCSx&4h#A?_w*rINK&r)~ zN9bG5T3qTz_9Il6sBszq+>nkPeInn@7*l-vrt2rfgnRm4Ro%aw&B-b!^cVwYuTy7&8-0dbL6-9a~*s1}Our z5y~;VQAcT-ylZ6^&$AD6gE4?+%kkTa`^WR$!~fSj;r`b=89>7y%YGGaFSnhKMx`GQ zG%C|>bi1Lro2rWAt6(rxzpq@|UsUJX;V8rpk~kTZ5Ld6+$7e)9z!fv5RpVnE3Fi#B z4!C=(Ct-ZNc=2Zj{{-=yi_{QBy)Q8*fJl^jONGoO>q0*ym*P84Ow)_+x!tTzk@U?U)!3DZ!;v_9dsd=ltopu0sQ>Ll`zZ z+&?|e=Qh+3jX6fFYlzc7{-z|8j*`EtUfsdcG%cnii4Z=k>ZyM%%VsK-TNwy+py<8H z1X5EK(t*KOsq< zNd*&j;0NxLYAXz~Wga$rat1BvTw)ft)ux#XqUna^9g!bHsb5NQ|K6hY-IZO79C3b8 z0W206aufnUHsK#aj>hHdg*(zqJ`7CJ_<6b-DRj1=L|QmDX;w`|?3EfOGPJKXkOR?5 zIf<4kfF^x%?ZowmQ~A%^+WX65=J_nwU%h6($G4cyJGYMesE7ZYe*no>(aGcgmW8^X zz-O;4-(5^ zYZJcEr)UV)iypX1n%plD*Jb)6EzOeYnmq9Gp>s@Tt3p@9H0nYwrPM8RQ?wH4>Vj>x zQEa#9VK@{&2PFxpIA~GeHW#vM1_FaB08|cD|d*oy9s0CuF_@`w-SOCmce5 ziM7o=yXjbVV&Y~RE8Oi@bK5lwGL27);55oma-d4WVl;s(FEszzsf^*W5_G|lmqIz< zCW4g(sAP>>k&8EjBIbZ80GH2%ZXm`(2@<>;fpOMX@&yqMfrJnnBs&%nO~ahoDN%q} zTF^RNnF3dM!wN82`_r3d63!M{Tpk@uL_4jdXBiiXLOC05+5^p4sVB1@1L~9;GOI2H zd6W9hguYJ?HO`%ckFQxiuaBD_w*TS#i~l1aw|qXYaryTLWv`bQJ+&qMNfzJh3vXnQ z>K1+8gBxrLKdB^|Xvk?{{5MSRk}eZM1>nHz?@&$IY|{<=;lLvp+S0#yUsc1U>=Wr|HW!|`D_UUiC_5RqgXlXFLl8wj1P?aQ@o4(GnpJGZo^HT zgz=q^i9;!`NjXHZIzZ)_piRFf;RQacdF_uj(h}SY^xZ11nPCV1Ivc`ht<=Q+mWD~i zqvo(oPjF#97E4BTPU#Z_EQ_d%0j2g(j24PM$`*-$)sYy?7xswA7!EVq=lcDQl0+Z= zj#HmgbfDOnZBx<v(ec`Rt~;m zuOZ;_*`G{+3a^xJ0|aM;Ba=-#Pn?y`m zX-9&JC@3)iZ5$Belu_`kv|mE_b?a1Ibjh+-zwC~o?`NIE17z1{5_A!c%|`k#r7=r> z13{j?DIpA`Dk_ouyvJR?W2QIafZ(p;fcsONB;7rV zM?ylUKw6c>sxyH|y4n-{4e+VHVeTHrM({XuxrQg_Qb^Cw>2>M3YC~S&A@TIM>0@|t z^Ywq!x5umSg4=)4rDpdNck6P9D!vQ^G=0FY1c#--ZW@=Z>RFna?yhHF?Jq`e9Zl-{ zqhE?(Xt9eG_4*5!VguN$$&}h} z5T3Ihh^c>bh2L0L+H4JsH#65d;CzOXx6E(D5Tvuh5+D@0CTtaVvO5LxekwR~%8fIC zR@!Jrsm+ATO3jTc4c8p$Gq^r7=S$+)5Be)*6>kv4YTwQ+5nff&u-4#?#ZW6s^ZXG& z#7|ivV24=l8)Z(oM@Tn*qU2-C;5pgxP}Rt4`%=U$c2|@x0bKaI-ra>624)4fD|YI1 zgT4%JOstlt{e!uJs~V@>7wN7~`GdiR`hQ)8=HmU{CJ;GUUQ>RksReSTh6ew2?utf0 z5pF(@^K?BcbM>(0oqC-os247WQgNhzA+MLNGftHo77EQrL5>tAMjvxhRya;X>3^*s zBfi7;Zk-pCJPG3TbB(4@i5J`#5+hC4qNXM0*v$_$?q9&wjYGwflxA(Hj~-7yMlZj6 zl=6XhqEnN34su494mM90hm)uF0)mCzqag^eG$E|#mp_Y(%o?Adbcpk9ygAp}vOtq% zM|OlI)HIO9NHU(bXq@D01p4H(jlP7F7HjvPF10(Ep4b~1UxM;b?1=gNHU`H!K919~ zKpFpEjtsV4AKPW0M16<~iXQ#q>}_30v#- z=@V>a8g5&G`KO3pW`%zKWMo%nu77Y2-C2dwXk(t#@kNpOGvf|JC!O*f6Maa4Fd(u` z8HiKiT9jtGB#3e{)%oD#z==OBA>4j7i!z{_!cNW6r}zuZ&Lr}7J3+5m{GxIm2a1B9 z8?F={+#m(bKvPXmAMe&)`ZI^E{MldPtV_u));EielBHC^VnfW&X6u<%@Cv?S&kJm& zJTGi|`b}kMsbgD70JuY0H{#;)U+KV|<6;4d4oKi)dO=_~X0@(*hgA+lTu?k~5)3h6 zi^;-XTgFXQ{-V*+Uae(#z5}UMWvVIq14)>nc!yfHONs(lujjo=TF?*leFc2Vf)4t_ z&b_hdAW`#fF_INVf_^IVgS^)XPUz8K8QSWRs!s3^dDF((F&4O(ZVSY-ZlNfZhfql4 zIu9CFsMPtmc#onc;)aTWo>>_9q~vDB9|oht=F^*fkI~M!p9|BzTd$9x-W(9jd|ba( z>Lv&?UnIcDRkah*!3hJt=C}X$^bhh{8#iiIwN_eZ}Q zbW*cVn+HQeT4TfS?AzPb#tL=iIDBuP@yZ*0A~9FwMB)juPGN4h)h$VNhwyHZZ>=t1 zTO?gVIh)qa63CT>@`S}QkUOlSdGE9qzXnfT z+#-w=t96o^DI^OP4d=0SwVVFn+&!6?EdCM98@iM^uHIP@N*0Y}};GnnbJI7E> zJQX#hG@7VTHV|@a2}P2qd-aQ{<sx<*vl;5g<+S-6=?<_8v>Jj15RdBvUX@gJIWp(E)o-URfM@p}v|Kf_MaZ8619 z+A&(PAmkx( zvL^y+FT@GgfYH&m?Ni_Ub&fGOx1T0MKcv`*YL3Oh3ynA8329a(?h%S@l6@}2MTfmO zaDFyV8pkFk7RBahNhc79qYmVl`bb#Ax$QiJJ{ce3UnRb^XJ;_4)<^=myWEnv+dIWg#E4D->SDEAtDo@6bW@HzRdg_Sx@)8yH<& zlFW6mMu{4?S6UXY72(y|c3ca>v1qn1rf*$Nffwg!bWMXBQ(~WP7U?tpyVd*hd}%>? zdIQ@detZ7xV}$=Vjz(ouXRbJEW&$SZ``_-4gl}IVQ}|bKS7mGI zeZkeiDKek(!%3O2JT_g-0A`){+r809<{3-HC>KP->PKdoZBs>DEK)n-k67_zc_u8e z#u?SluKL5wpoqgS@my#4%e9(~AtNC9YNzOPVR=)h(gh@n)}JF6r5;uaTYaZ--ib0! zbw12Eqr6D$VQla4hixWKIfrAHYxQCK+h_B}9#_`v3o!w#e)So83XJXjIyj@oP8uT~ zl5YYIggcpTOV88JI$lp4eg!1;J_cR)^he)md0`q+#iC8Q=yn;{&dHS`P0Z%;3Q3B0 zJhdo`d&QO~eqD03KNxsWnjhtzb?&e3D-aCJjTI4VhPEJLTSb*T>0Jl-HgCO>0==1; z3+|nPGybOUNjQWPwrhid3$97)eHgC|B$(Gb3pf6U7tWVU0rqM8IPA=unv+E~(@YN? zMhcEIZhDs?%mcn0NY&rF0txw0vWs>(42Ht97vS+r&NQCC{~;`z#CE;Bkd^aWkA}?F7jfQ#ty7b60*rMp;?mpl{oSwAbe7VgXump)YZ&b5+M0g5$j`GR>$?M@LuN|(9%9kW{DuF_D;p-{hU8W z)cTQ}$n%ahbB|Yt=+1yr1lR_a6AOXsoe!J#_ zl&TDzKM$I(*mCP zy1Fx{r?YD_PXOdUoj0bz>$|dMZ-^Um=8494+~L{{psW?vYKd)rB1o!w5Gmrjg6a8W>X2UW3-R^DpX z=_Vn~I{pQ2lr`PwafA11`rj7i8)FZ%R)26}uFf-}0QMQ;T*X3<% zbAH=EZiR(*WUM`OIx;^ia0yUvn>|71`!ldZZq8`&KOMPfN&AW)^8)U7oX#81ir%V>b~-*_gywMflV=MM02`Z{h4kS$gl^c5WZru5CHD|%wT7lE=85$1MNVMz9&SL0NoT&DxrHntNpX*9jZdm@Wo z(W0Ir{+~6TqCGGO#VgDHy}b5FFCthw1GFfV%({N4#>diF674Ab!yjzwpKO_&M_&pxkZLY`Ax@@F*=9SyDQ^1o}R~ z!#5W)YSI33}TBE&T+^T`Y=^!-pyRSB~8xfL%rA zBVCe~&ucir)1JpEDpj{6Rs=_|y#Lq?5bo7 zBm7l^I-V%rPPOsd+xmp`jQw^|f^U%1m*2{b-3LsznZMrXlvHtrZ;tIkP!~@7vT1;% z>Q=NVrgRe4=udY}b}s^3LhD;CQtykfG1jR-_+5Bx_O=u8u?M2ee6eJCfBKDTdu;AqS8UMLS}_GO*_t{ zon)h8>)uwV$7gvEG_jTJAC=UuxM%qNj?1Sm_aSh4TDGgvld0c-~!|EL^(=gR;e z=c?=E-dMl)?oTd9#sBAWSpO%+0`+upbsp$jPriR%Jl^#m4{@UMqsj@R1Ek=PAnYPS zg;9mj7@)t^W~6RlG!i5y@kb05B9mih=U$^?nER$3H;UI5zY|y!M}b4<6!itV1JJ5b znP7M#M=omxGz|u@C8IQv3n}$?(w?_C>m0rkuz!kxDQ@+kM&rca_ca7yo>H$h^@-iH z`PnSKB*57 z)-gS2Ee*WAxypZ$rLYAxp|kS+sq0c9;w(8GhCu*L_6^Q}SCenE7N-weo+o?ym*?F? zpZYRUnW+{L{_N+7@RsCw9HAz#REn( zf2wiVtA}#m|0-8@yM9E}9~QatjVAr8k|i=!XI_kWriYFDdhtFF3s3mv9+=D+pLY@5 zGk5LBhWgch;NiGN;4_yT8Hk$DmNU zFVWsgdXS-2*xDJ&o!1+yuaa~3y|Ck?%|O(J@a9rGovP9Uu?9M?-ib;ro+j&T zZH6YOQJ47x9l#lhd(CNZ1WCMQ_a#IYmjG}X^mdHk8@092>V*?}1oN>2BLI1x&*y&s z)cwc|GnBO*<4uoT+Lnd$JSa8^(C5O3R;E4f=a(*_zV77F@FteFT8N!m%U z9ssd?3CE=BjlTY7#Qvj}M&Q@pcq^D%44Fw`pM(8WwsP)^Eb;V%;KH4xmiDd3F&#r< zB3?~|bJ4)OAM*0MTME#07X0KJtP4@ikFc*-DN?j3SB`ZQ#EACjK9_HaOl6?htm0F4 zopNeAe6%jvSt|7G{Tlui4U-NuV%FHZWSOloZ_3-IpcsyL>FU%>;x+oS`szHq_t0_@ zR|qxbu+KYmE%0RDsS6QOyMwhg2%d5#$#K@){FAya#mVGq$X|R@Rk3XS=Q>TnWZ&uzN=?4R#VJg&2M|vmT z&PrDDy!m$@0xE4si=ygndo&Z<&F`w%GJRqLTqWYj(3U%?s2VIo zXx3IOaXZCxjEtY82(GI;E8!xoC)YHpg_-=t{PbyQ?z|ZR?LKC`hQGeaZ+hRjy&qrt zJbV4a;6Xit|G83Pf9-fy{g_See|6)LgCBm#b2zQyEEmbA9T^kG=o4~jKvSIOi&wcO zt_$^#xA05hcUmhM0CO0nm@)>_NLmhf#Ehs&N$&=0fby;3ISm;T$c|FxCn^L9>Fy#i zCRnE;KCt%ZZE@6-V^|f(r~sg5rqKN)z2u!~o+BQ|R8;cg5GU626(%9OViwHtJW%Ig z91aJOoj;!Nl7_UdfH`sfVK_A8`T`~8cQjN{@DGk)>u~wJC(u=iEYia#7>KZ{j3X)`!rN@{!4{D@hUdvEa+7OgN#zswNh zM%grfetHN==g?a9)burS(7sl#QXH9C@b$ zQp{t$G2nWbHqjY;l~(uY^5e=;5f>HX`@>`)G4Kr{fw6d7^yBX__cjZ{F1ArY;`?>B zYHQ9KdbBoM3wXs{FT*uygU%yisubN~E<Uu2A#IKbGA#+L`4o7qQ#6CeEpQ!WBX_5@x5oXbzBfDiE=e8 zNL&*p>6wHCADoN=C~hb~9sI}UnU|hG);;4~G1!QraR;d>ypWZPQ@QpTo@Y1m1G~+0bcHm@|8$p2pq8w@v8?6 zhCdEPGIA<@?@ht0InL1f{3EM-fm&}91k41+svE97{rR+jd(rVd2ptx+N`w)T7PtnUS-MGw4JFP58{cS=eN6Z zm$Nr52%S%VFrEVm6WBqO@Xt=^<K*}De#-&V0H@T{yYMNbxqbx0;U2VM){LZ zY3?o2iGHqe{Y-F-*yER?Gu@F1=cy%8eygQ?7Z_i_D;e zc58=lI&tUaL!Q3J#=z=|en;dm@f%F%$9vO%Qm3F_=og@Wz=22bD_srX`lDK4c~dG3 zg9^*62%Ywqc2*IYft-J*Vj3b`2?yaCiq4-t4J7*X(LHhpJvie*3e)#7Q3xepX9a7g96Yb%Rga?SZz8J%mFoTY`~s zS|h~Mo>n6@x(8w67?PviX!&D{hpPBZ|G~QVVcCAjOzQQ)AZ6>NXnMLK92<03h`D}J ziFV)X_%M87%2^%i*mX|rhI0-z`D)}ltuEFp&aLr)F``4}DEayo%R|Sjo^Cjo$ELaN zFJtCxxU&=s;7Kf1rn8cT^D=gp_c+1%A{Q2%xKD^1b(+!{g94s$@9~}Fb6a}*7#RV*QXTnv?_J}Dr765B|_Kv+_~xds_U6a5H%tB1ALmX8AFYj^ zYmbJA16CuoLkgaXtuG|Z1l)cU?1rLvFYne=jp~#}TOyb{r*t58AJqgR-Kb4z#yTmk zlovewQL)MG@7u?ivpNSS3Fhw2pWBLq*!XX0Fxp2G)}({$UbVHeis_^6Kk~kWJ14&~ zd=tbsMSsc*_Y!B3oNm5ye4A(hL9s6HQ4NBE(rUHMz)=MDUVrcB$QG2FU)D4akMpr@ zzXVh~m@FT7KX95^?y8g?l-hv@u@AnHJbuq&gAXEjq>XvQovOUL>Ovrb2Bfo3UJ1CP zA(PnZL4B!_cE|SOOOp3TAX?6H*4^sA^(N^YriRnr{Y4c2ET?`wZV^D>YA35=ov2fU zQ#Id6^2U@{<4q95HYc&Ls zZ)o${c*~AWYgS9~*7rqqH9wqlcP|!>cel^42}iLLx+7NwB7#cibAniI%wY(l@LikV zECcQN?wYn0y3ZWFIO(`rF_~Ys#lbIg#u>H}-pG9*Tf%&g%+r#|Z{w_)Npveo`vr#@ ztUj%FhvDk>Ii|}UwwvEI9^^-5w}YO`{N-4hw4;IHVKk=DyuII1b*W!i)!?6~(1%T< zsGdtWDj>9D46^vT+Xq@FEs9aif&wDo4QEg88=4}f=Z+hy!}4qitZ?&8i*Y!o5BqJ3 z(D;_gm@4Q!cg=4k0Xo}FRvoc^vtFNRKq)_=<YGQ{1o{n}1%qgGGgr`FwC_VWW# zTa`qNW#1rIIQpKwPfH7iZYUeQeKQ(>03SQTtrU-Zm_ z_$Mwl+5g6|0_YHkb?>@=s1 z-tUa2ptm~W0e&xbp`gd6*ccO~MlHLgSkG*GsZ+Rh$nd)Ij2l_&FQO?KV&LYS$FWHY z`+F&+QD}8XAw4fP{W#S!{vLFPUp32vNrxadI%zcT)YI&Zn_Ttd5Ejz9xd?t)Py1!n^lu}RL z*X)hxUE;)}UtlNTG{=R(jh_Tpbn?&OoxGeZ35;}8P3%2ViKd%aGE%faE$Ey}Fy!4O zNC6AZ&$QF*a%ekD10d|5KkK8Bcbm3fKHLRS_y2_D&*s3-!u9PaGcXxMpcX#*Tkl^m_?(Xi|xNGCq{c}I>H^zU|XMM0o?X_#onsrSrEfxwi zT=ZF8r#Zhnd;Wu&4A4qQETIO z!gFlOzDA8wi;i@>DCjkDawDA=c;@FNY2WhU*wkUYm!?LP#|Iije^AQm?Ak{{GuShk zkPqK=#UJz5<=D-$z38p|nC|WHYk!INV$74VUl=IPwa|-;YFUV>vQ3XkpkLdJKZV=}xP?g315u<66H&W2has@c5esj(f^;`r6}n4eg6O?RK+Eowgtm3FTrt>3Eff*r@x)+FEJ=hs2U+@ z{%9UpcxpYyZWj)XYN;jr6*s0RKhwPaT)LysJUM7wrAi^EER8`4FCMBQp}_=Z85>UT zGly;U{A=jj9X6R7!xu;-`_I!brS#;ygPU z5bmP)5cBk$_~S)}mgNo=k`#!1CUOtfaz5mHQpM+0?Q&&wN^U9hga2ZK&#cyX&Z~yz zdtF+D!0+SB=8&NIW7FLvBA=?7h)RhohY{~xt4pia{e}7O%~(3ydL%m6ozjXq9zIOq zSa!zj&CFH<3e986m}*y98LTjDGN`rCsJ4*XGz9;;1f!GiCG@Kx|E5N3iY`Y9n&9tm zV@G+ul;XUj!MbIm!12U&_d;o;GLkcIBj~EXl_?bUb8q?KS$dh4O-;+vi3l)%a{~BE z381OyUK(+S*TPp}Nw1sdu*e$!)}pB}C#V?svl=&?U$sw=f5OR-p+9^SP^Ay9E_XG1 zQ;z)2DQC-US}S`04nDXN18jWYhPQ^6F7z56-t2Vbd_G3v3=|#t2RHxgwL@-xjlkAO zBLD=G{>%k@(z(qQ4>_`CbglMNCK4UdfNoUk%}QX(@z<9<$ikut;GUUTH48YN{Ts0B z+*%r9WPo_Ns1X*00q^>=rNCTJ<=BO8lI04C+@{Y&{=%>FQ=_;D=G1dU*ld7Vl%8wgHDkxOe?|5Oq24FeW>*7Pjsyw|t&Nx?;U}5rZRv za8Dclu{t>^7^uGE$--5B9~?5Wh^gBHs(AcS0Ghsj5xP}lXmGbR7@X}Q43D5)pdW`5ZCMi? zLi$##Vd?c73hPD;2(p$Z;!cAE8+3FL?Qriqy)E+q%o|JD>raiA0uw=)dTY#R70)iA zrccy#^^H+nd_;Pib)yM-B0&`)%hSYT@RSx|!p@%r`!nyjXlt{6CNd?|Fa-DDuj`XY z(VVt_fo(Qx{o2YY)&I(`zHJPiTv`K4YXuAlxK6NYkHS%7pUDXx)q<3)-}@2%N-DN$ z(8bnDcg+m{dw!=S9{B@KJ`@$0Gr~=g!S)0ReIJpu`ebpqlAstXV2y1Q0WPpt#rCzK z>xMxNBDsrSyY&yV4hMA7f$bv^*nT!g0a1tSU%A3OQTz5|ysP75a(RDP6{*HG+7=0Y zm8v+U3UdYTKg?Edblu;0Yi-z$ucJ+5Rone{e89)jL;f3TGcb1?TEsO&N1{`FbFgud zXFMfl>?1SAs27qCc%@E>MUg=;@4)L%ml6+Ky@&T?NlfR?ELx2qqeMwM=m>~liJLgV z5f&ekp@>Zqc5rlu8;8rpH2NoYtT}jwRF;H%1v|Zhu+P`W?UZ5YycR!OQTIvwr9|e5 zm@G-g!|;Iz^LK8@t8o%QsM#MWVOSzUZ$8g6BY+W6^<5KnEz!o|a+EZk)u@d7?)OG{ zFY~zTcmYP@0>GWGz1R0@i`GtxyE&AU6Qg!1v+s-3 tmx(=&qvwDFADN0^xn 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 Date: Fri, 8 Nov 2024 10:00:45 -0600 Subject: [PATCH 02/15] chore: update contracts --- contracts/src/HyperlaneDispatcher.sol | 37 ------------------- contracts/src/TangleHyperlaneReceiver.sol | 36 ------------------ contracts/src/TangleServiceManager.sol | 17 ++++----- .../src/test/TestTangleServiceManager.sol | 2 +- 4 files changed, 9 insertions(+), 83 deletions(-) delete mode 100644 contracts/src/HyperlaneDispatcher.sol delete mode 100644 contracts/src/TangleHyperlaneReceiver.sol diff --git a/contracts/src/HyperlaneDispatcher.sol b/contracts/src/HyperlaneDispatcher.sol deleted file mode 100644 index 06ab8e5..0000000 --- a/contracts/src/HyperlaneDispatcher.sol +++ /dev/null @@ -1,37 +0,0 @@ -// SPDX-License-Identifier: MIT OR Apache-2.0 -pragma solidity >=0.8.0; - -import {IMailbox} from "./interfaces/vendored/IMailbox.sol"; -import {TypeCasts} from "./libs/TypeCasts.sol"; - -contract HyperlaneDispatcher { - // Hyperlane Mailbox contract - IMailbox public immutable mailbox; - - // Tangle domain ID - uint32 public constant TANGLE_DOMAIN = 5845; - - // Recipient address on Tangle (should be set to the appropriate contract address) - bytes32 public constant TANGLE_RECIPIENT = 0x0000000000000000000000001234567890123456789012345678901234567890; // Replace with actual address - - constructor(address _mailbox) { - mailbox = IMailbox(_mailbox); - } - - function _dispatchToTangle(address operator, bytes memory validatorKeys, bytes32 accountKey) external payable { - bytes memory message = abi.encode(operator, validatorKeys, accountKey); - - uint256 fee = mailbox.quoteDispatch(TANGLE_DOMAIN, TANGLE_RECIPIENT, message); - require(msg.value >= fee, "Insufficient fee"); - - mailbox.dispatch{value: fee}(TANGLE_DOMAIN, TANGLE_RECIPIENT, message); - - // Refund excess fee - if (msg.value > fee) { - payable(msg.sender).transfer(msg.value - fee); - } - } - - // Allow the contract to receive ETH - receive() external payable {} -} diff --git a/contracts/src/TangleHyperlaneReceiver.sol b/contracts/src/TangleHyperlaneReceiver.sol deleted file mode 100644 index 1e0f430..0000000 --- a/contracts/src/TangleHyperlaneReceiver.sol +++ /dev/null @@ -1,36 +0,0 @@ -// SPDX-License-Identifier: MIT OR Apache-2.0 -pragma solidity >=0.8.0; - -import {IMailbox} from "./interfaces/vendored/IMailbox.sol"; -import {TypeCasts} from "./libs/TypeCasts.sol"; - -contract TangleHyperlaneReceiver { - // Hyperlane Mailbox contract - IMailbox public immutable mailbox; - - // Expected origin domain (Ethereum mainnet) - uint32 public constant ETHEREUM_DOMAIN = 1; - - // Expected sender address (should be set to the TangleServiceManager address on Ethereum) - bytes32 public immutable EXPECTED_SENDER; - - event MessageReceived(bytes32 operator, bytes validatorKeys, bytes32 accountKey); - - constructor(address _mailbox, address _expectedSender) { - mailbox = IMailbox(_mailbox); - EXPECTED_SENDER = TypeCasts.addressToBytes32(_expectedSender); - } - - function handle(uint32 _origin, bytes32 _sender, bytes calldata _message) external payable { - require(msg.sender == address(mailbox), "Only mailbox can call handle"); - require(_origin == ETHEREUM_DOMAIN, "Invalid origin domain"); - require(_sender == EXPECTED_SENDER, "Invalid sender"); - - (bytes32 operator, bytes memory validatorKeys, bytes32 accountKey) = - abi.decode(_message, (bytes32, bytes, bytes32)); - - emit MessageReceived(operator, validatorKeys, accountKey); - - // Send TNT to the operator - } -} diff --git a/contracts/src/TangleServiceManager.sol b/contracts/src/TangleServiceManager.sol index 6d66aaa..a16c963 100644 --- a/contracts/src/TangleServiceManager.sol +++ b/contracts/src/TangleServiceManager.sol @@ -7,9 +7,8 @@ import {IAVSDirectory} from "./interfaces/vendored/IAVSDirectory.sol"; import {ISlasher} from "./interfaces/vendored/ISlasher.sol"; import {ECDSAServiceManagerBase} from "./ECDSAServiceManagerBase.sol"; import {IRemoteChallenger} from "./interfaces/IRemoteChallenger.sol"; -import {HyperlaneDispatcher} from "./HyperlaneDispatcher.sol"; -contract TangleServiceManager is ECDSAServiceManagerBase, HyperlaneDispatcher { +contract TangleServiceManager is ECDSAServiceManagerBase { // ============ Libraries ============ using EnumerableMapEnrollment for EnumerableMapEnrollment.AddressToEnrollmentMap; @@ -69,12 +68,14 @@ contract TangleServiceManager is ECDSAServiceManagerBase, HyperlaneDispatcher { constructor( address _avsDirectory, address _stakeRegistry, - address _paymentCoordinator, - address _delegationManager, - address _mailbox + address _delegationManager ) - ECDSAServiceManagerBase(_avsDirectory, _stakeRegistry, _paymentCoordinator, _delegationManager) - HyperlaneDispatcher(_mailbox) + ECDSAServiceManagerBase( + _avsDirectory, + _stakeRegistry, + address(0), // payment coordinator is not used + _delegationManager + ) {} /** @@ -255,7 +256,5 @@ contract TangleServiceManager is ECDSAServiceManagerBase, HyperlaneDispatcher { operatorKeys[msg.sender] = OperatorKeys({validatorKeys: _validatorKeys, accountKey: _accountKey}); emit OperatorKeysSet(msg.sender, _validatorKeys, _accountKey); - - this._dispatchToTangle(msg.sender, _validatorKeys, _accountKey); } } diff --git a/contracts/src/test/TestTangleServiceManager.sol b/contracts/src/test/TestTangleServiceManager.sol index f670168..db6aba1 100644 --- a/contracts/src/test/TestTangleServiceManager.sol +++ b/contracts/src/test/TestTangleServiceManager.sol @@ -13,7 +13,7 @@ contract TestTangleServiceManager is TangleServiceManager { address _paymentCoordinator, address _delegationManager, address _mailbox - ) TangleServiceManager(_avsDirectory, _stakeRegistry, _paymentCoordinator, _delegationManager, _mailbox) {} + ) TangleServiceManager(_avsDirectory, _stakeRegistry, _delegationManager) {} function mockSetUnenrolled(address operator, address challenger) external { enrolledChallengers[operator].set(address(challenger), Enrollment(EnrollmentStatus.UNENROLLED, 0)); From d2b66a5832ee5c572a689011cdf5ce49b7edae3e Mon Sep 17 00:00:00 2001 From: Tjemmmic Date: Fri, 8 Nov 2024 18:25:59 -0600 Subject: [PATCH 03/15] fix!: contract and test updates from holesky deployment and testing --- src/lib.rs | 52 +++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 47 insertions(+), 5 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 4e04713..befc3ca 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -94,6 +94,8 @@ mod tests { use alloy_provider::Provider; use blueprint_test_utils::test_ext::NAME_IDS; use blueprint_test_utils::{inject_test_keys, KeyGenType}; + use eigensdk::utils::binding::ECDSAStakeRegistry; + use eigensdk::utils::binding::ECDSAStakeRegistry::{Quorum, StrategyParams}; use gadget_sdk::config::{ContextConfig, GadgetCLICoreSettings, Protocol}; use gadget_sdk::ext::sp_core; use gadget_sdk::ext::sp_core::Pair; @@ -120,7 +122,7 @@ mod tests { // Begin the Anvil Testnet let (_container, http_endpoint, ws_endpoint) = - blueprint_test_utils::anvil::start_anvil_container(ANVIL_STATE_PATH, false).await; + blueprint_test_utils::anvil::start_anvil_container(ANVIL_STATE_PATH, true).await; std::env::set_var("EIGENLAYER_HTTP_ENDPOINT", http_endpoint.clone()); std::env::set_var("EIGENLAYER_WS_ENDPOINT", ws_endpoint.clone()); @@ -166,14 +168,29 @@ mod tests { ._0; info!("Stake Registry Address: {:?}", stake_registry_addr); + let ecdsa_stake_registry_addr = + ECDSAStakeRegistry::deploy_builder(provider.clone(), DELEGATION_MANAGER_ADDR) + .send() + .await + .unwrap() + .get_receipt() + .await + .unwrap() + .contract_address + .unwrap(); + let ecdsa_stake_registry = + ECDSAStakeRegistry::new(ecdsa_stake_registry_addr, provider.clone()); + info!( + "Ecdsa Stake Registry Address: {:?}", + ecdsa_stake_registry_addr + ); + // Deploy the Tangle Service Manager to the running Anvil Testnet let tangle_service_manager_addr = TangleServiceManager::deploy_builder( provider.clone(), AVS_DIRECTORY_ADDR, - stake_registry_addr, - REGISTRY_COORDINATOR_ADDR, // TODO: Needs to be updated to PaymentCoordinator? + ecdsa_stake_registry_addr, DELEGATION_MANAGER_ADDR, - MAILBOX_ADDR, ) .send() .await @@ -185,13 +202,38 @@ mod tests { .unwrap(); // Make a Tangle Service Manager instance - let _tangle_service_manager = + let tangle_service_manager = TangleServiceManager::new(tangle_service_manager_addr, provider.clone()); info!( "Tangle Service Manager Address: {:?}", tangle_service_manager_addr ); + // Initialize the Tangle Service Manager + let init_call = tangle_service_manager.initialize(accounts[0]); + let result = init_call.send().await.unwrap(); + let receipt = result.get_receipt().await.unwrap(); + assert!(receipt.status()); + info!("Tangle Service Manager Initialization Succeeded"); + + // Initialize the ECDSA Stake Registry + let init_quorum = Quorum { + strategies: vec![StrategyParams { + strategy: ERC20_MOCK_ADDR, + multiplier: 10_000, + }], + }; + let init_call = ecdsa_stake_registry.initialize( + tangle_service_manager_addr, + U256::from(1000), + init_quorum, + ); + let result = init_call.send().await.unwrap(); + let receipt = result.get_receipt().await.unwrap(); + info!("ECDSA Stake Registry Initialization Receipt: {:?}", receipt); + assert!(receipt.status()); + info!("ECDSA Stake Registry Initialization Succeeded"); + // Setup Keystores for test set_tangle_env_vars(); let tmp_dir = tempfile::TempDir::new().unwrap(); // Create a temporary directory for the keystores From 15945e7a0d41949bc27e9882393afcb79efcdc9b Mon Sep 17 00:00:00 2001 From: Tjemmmic Date: Thu, 14 Nov 2024 16:59:35 -0600 Subject: [PATCH 04/15] feat: scripts for testnet contract deployment and holesky test --- build.rs | 1 - contracts/script/DeployCoreContracts.s.sol | 165 ++++++ contracts/script/InitializeContracts.s.sol | 46 ++ .../script/InitializeCoreContracts.s.sol | 62 ++ src/lib.rs | 410 +------------ src/tests.rs | 549 ++++++++++++++++++ 6 files changed, 825 insertions(+), 408 deletions(-) create mode 100644 contracts/script/DeployCoreContracts.s.sol create mode 100644 contracts/script/InitializeContracts.s.sol create mode 100644 contracts/script/InitializeCoreContracts.s.sol create mode 100644 src/tests.rs diff --git a/build.rs b/build.rs index e3190ee..d4bbad9 100644 --- a/build.rs +++ b/build.rs @@ -5,6 +5,5 @@ fn main() { "./contracts/lib/forge-std", "./contracts", ]; - blueprint_build_utils::build_contracts(contract_dirs); } diff --git a/contracts/script/DeployCoreContracts.s.sol b/contracts/script/DeployCoreContracts.s.sol new file mode 100644 index 0000000..771240f --- /dev/null +++ b/contracts/script/DeployCoreContracts.s.sol @@ -0,0 +1,165 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.12; + +import {Script} from "forge-std/Script.sol"; +import {RegistryCoordinator} from "../lib/eigenlayer-middleware/src/RegistryCoordinator.sol"; +import {BLSApkRegistry} from "../lib/eigenlayer-middleware/src/BLSApkRegistry.sol"; +import {StakeRegistry} from "../lib/eigenlayer-middleware/src/StakeRegistry.sol"; +import {IndexRegistry} from "../lib/eigenlayer-middleware/src/IndexRegistry.sol"; +import {OperatorStateRetriever} from "../lib/eigenlayer-middleware/src/OperatorStateRetriever.sol"; +import {TangleServiceManager} from "../src/TangleServiceManager.sol"; +import {PauserRegistry} from "../lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/permissions/PauserRegistry.sol"; +import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; +import {TransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +import {EmptyContract} from "../lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/test/mocks/EmptyContract.sol"; + +contract DeployMiddleware is Script { + // Existing deployed contracts + address public constant TANGLE_SERVICE_MANAGER = 0x5aBc6138DD384a1b059f1fcBaD73E03c31170C14; + address public constant ECDSA_STAKE_REGISTRY = 0x131b803Bece581281A2E33d7E693DfA70aB85D06; + + // Proxy admin for upgradeable contracts + ProxyAdmin public tangleProxyAdmin; + + function run() external { + IStrategy[1] memory deployedStrategyArray = [IStrategy(0x80528D6e9A2BAbFc766965E0E26d5aB08D9CFaF9)]; + uint numStrategies = deployedStrategyArray.length; + + uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); + vm.startBroadcast(deployerPrivateKey); + + // Deploy proxy admin for upgradeability + tangleProxyAdmin = new ProxyAdmin(); + + // Deploy empty contract for initial proxy implementation + EmptyContract emptyContract = new EmptyContract(); + + // Deploy PauserRegistry first (required by RegistryCoordinator) + address[] memory pausers = new address[](1); + pausers[0] = vm.addr(deployerPrivateKey); // deployer is the pauser + address unpauser = vm.addr(deployerPrivateKey); // deployer is the unpauser + PauserRegistry pauserRegistry = new PauserRegistry(pausers, unpauser); + + // Deploy proxies pointing to empty implementation initially + RegistryCoordinator registryCoordinator = RegistryCoordinator( + address( + new TransparentUpgradeableProxy( + address(emptyContract), + address(tangleProxyAdmin), + "" + ) + ) + ); + + IndexRegistry indexRegistry = IndexRegistry( + address( + new TransparentUpgradeableProxy( + address(emptyContract), + address(tangleProxyAdmin), + "" + ) + ) + ); + + BLSApkRegistry blsApkRegistry = BLSApkRegistry( + address( + new TransparentUpgradeableProxy( + address(emptyContract), + address(tangleProxyAdmin), + "" + ) + ) + ); + + OperatorStateRetriever operatorStateRetriever = new OperatorStateRetriever(); + + // Deploy implementation contracts + BLSApkRegistry blsApkRegistryImplementation = new BLSApkRegistry( + registryCoordinator + ); + tangleProxyAdmin.upgrade( + TransparentUpgradeableProxy(payable(address(blsApkRegistry))), + address(blsApkRegistryImplementation) + ); + + IndexRegistry indexRegistryImplementation = new IndexRegistry( + registryCoordinator + ); + tangleProxyAdmin.upgrade( + TransparentUpgradeableProxy(payable(address(indexRegistry))), + address(indexRegistryImplementation) + ); + + RegistryCoordinator registryCoordinatorImplementation = new RegistryCoordinator( + IServiceManager(TANGLE_SERVICE_MANAGER), + IStakeRegistry(ECDSA_STAKE_REGISTRY), + IBLSApkRegistry(blsApkRegistry), + IIndexRegistry(indexRegistry) + ); + + { + uint numQuorums = 1; + // Define the following for each quorum + // QuorumOperatorSetParam, minimumStakeForQuorum, and strategyParams + IRegistryCoordinator.OperatorSetParam[] + memory quorumsOperatorSetParams = new IRegistryCoordinator.OperatorSetParam[]( + numQuorums + ); + for (uint i = 0; i < numQuorums; i++) { + quorumsOperatorSetParams[i] = IRegistryCoordinator + .OperatorSetParam({ + maxOperatorCount: 10000, + kickBIPsOfOperatorStake: 15000, + kickBIPsOfTotalStake: 100 + }); + } + // set to 0 for every quorum + uint96[] memory quorumsMinimumStake = new uint96[](numQuorums); + IStakeRegistry.StrategyParams[][] + memory quorumsStrategyParams = new IStakeRegistry.StrategyParams[][]( + numQuorums + ); + for (uint i = 0; i < numQuorums; i++) { + quorumsStrategyParams[i] = new IStakeRegistry.StrategyParams[]( + numStrategies + ); + for (uint j = 0; j < numStrategies; j++) { + quorumsStrategyParams[i][j] = IStakeRegistry + .StrategyParams({ + strategy: deployedStrategyArray[j], + multiplier: 1 ether + }); + } + } + tangleProxyAdmin.upgradeAndCall( + TransparentUpgradeableProxy( + payable(address(registryCoordinator)) + ), + address(registryCoordinatorImplementation), + abi.encodeWithSelector( + RegistryCoordinator.initialize.selector, + unpauser, + unpauser, + unpauser, + pauserRegistry, + 0, // 0 initialPausedStatus means everything unpaused + quorumsOperatorSetParams, + quorumsMinimumStake, + quorumsStrategyParams + ) + ); + } + + vm.stopBroadcast(); + + // Log deployed addresses + console.log("Deployed contracts:"); + console.log("PauserRegistry:", address(pauserRegistry)); + console.log("IndexRegistry:", address(indexRegistry)); + console.log("BLSApkRegistry:", address(blsApkRegistry)); + console.log("RegistryCoordinator (Proxy):", address(registryCoordinator)); + console.log("RegistryCoordinator (Implementation):", address(registryCoordinatorImplementation)); + console.log("OperatorStateRetriever:", address(operatorStateRetriever)); + console.log("ProxyAdmin:", address(tangleProxyAdmin)); + } +} \ No newline at end of file diff --git a/contracts/script/InitializeContracts.s.sol b/contracts/script/InitializeContracts.s.sol new file mode 100644 index 0000000..8b612b9 --- /dev/null +++ b/contracts/script/InitializeContracts.s.sol @@ -0,0 +1,46 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.12; + +import {Script} from "forge-std/Script.sol"; +import {TangleServiceManager} from "../src/TangleServiceManager.sol"; +import {ECDSAStakeRegistry} from "../src/ECDSAStakeRegistry.sol"; +import {StrategyParams, Quorum} from "../src/ECDSAStakeRegistryStorage.sol"; +import {IStrategy} from "../src/interfaces/vendored/IStrategy.sol"; + +contract InitializeContracts is Script { + function setUp() public {} + + function run() public { + // Load private key from environment + uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); + vm.startBroadcast(deployerPrivateKey); + + address tangleServiceManagerAddr = 0x5aBc6138DD384a1b059f1fcBaD73E03c31170C14; + address ecdsaStakeRegistryAddr = 0x131b803Bece581281A2E33d7E693DfA70aB85D06; + + // Initialize TangleServiceManager + TangleServiceManager tangleServiceManager = TangleServiceManager(tangleServiceManagerAddr); + tangleServiceManager.initialize(msg.sender); + + // Initialize ECDSAStakeRegistry + ECDSAStakeRegistry ecdsaStakeRegistry = ECDSAStakeRegistry(ecdsaStakeRegistryAddr); + + // Create a quorum configuration with the WETH strategy + IStrategy[] memory strategies = new IStrategy[](1); + uint96[] memory weights = new uint96[](1); + + // WETH Strategy on Holesky + strategies[0] = IStrategy(0x80528D6e9A2BAbFc766965E0E26d5aB08D9CFaF9); + weights[0] = 10000; // 100% weight + + StrategyParams[] memory strategyParams = new StrategyParams[](1); + strategyParams[0] = StrategyParams(strategies[0], weights[0]); + + Quorum memory quorum = Quorum(strategyParams); + + // Initialize with a 50% threshold (5000 basis points) + ecdsaStakeRegistry.initialize(tangleServiceManagerAddr, 5000, quorum); + + vm.stopBroadcast(); + } +} diff --git a/contracts/script/InitializeCoreContracts.s.sol b/contracts/script/InitializeCoreContracts.s.sol new file mode 100644 index 0000000..6650628 --- /dev/null +++ b/contracts/script/InitializeCoreContracts.s.sol @@ -0,0 +1,62 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.12; + +import {Script} from "forge-std/Script.sol"; +import {RegistryCoordinator} from "../lib/eigenlayer-middleware/src/RegistryCoordinator.sol"; +import {BLSApkRegistry} from "../lib/eigenlayer-middleware/src/BLSApkRegistry.sol"; +import {StakeRegistry} from "../lib/eigenlayer-middleware/src/StakeRegistry.sol"; +import {IndexRegistry} from "../lib/eigenlayer-middleware/src/IndexRegistry.sol"; +import {TangleServiceManager} from "../src/TangleServiceManager.sol"; + +contract InitializeMiddleware is Script { + function run() external { + uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); + vm.startBroadcast(deployerPrivateKey); + + // Load deployed contract addresses from environment variables + address registryCoordinatorAddr = vm.envAddress("REGISTRY_COORDINATOR_ADDRESS"); + address serviceManagerAddr = vm.envAddress("SERVICE_MANAGER_ADDRESS"); + address stakeRegistryAddr = vm.envAddress("STAKE_REGISTRY_ADDRESS"); + address indexRegistryAddr = vm.envAddress("INDEX_REGISTRY_ADDRESS"); + address blsApkRegistryAddr = vm.envAddress("BLS_APK_REGISTRY_ADDRESS"); + + // Initialize contracts + RegistryCoordinator registryCoordinator = RegistryCoordinator(registryCoordinatorAddr); + TangleServiceManager serviceManager = TangleServiceManager(serviceManagerAddr); + StakeRegistry stakeRegistry = StakeRegistry(stakeRegistryAddr); + IndexRegistry indexRegistry = IndexRegistry(indexRegistryAddr); + BLSApkRegistry blsApkRegistry = BLSApkRegistry(blsApkRegistryAddr); + + // Initialize ServiceManager + serviceManager.initialize( + registryCoordinator, + vm.addr(deployerPrivateKey) // owner + ); + + // Initialize quorum parameters for the registries + uint8[] memory quorumNumbers = new uint8[](1); + quorumNumbers[0] = 0; // First quorum + + // Stake Registry parameters + uint96[] memory minimumStakes = new uint96[](1); + minimumStakes[0] = 32 ether; // Minimum stake for quorum 0 + + uint96[] memory strategyWeights = new uint96[](1); + strategyWeights[0] = 1000; // Weight for quorum 0 (in basis points) + + address[] memory strategies = new address[](1); + strategies[0] = address(0); // Replace with actual strategy address + + // Initialize the first quorum + registryCoordinator.initialize( + quorumNumbers, + minimumStakes, + strategies, + strategyWeights + ); + + vm.stopBroadcast(); + + console.log("Middleware contracts initialized successfully"); + } +} diff --git a/src/lib.rs b/src/lib.rs index befc3ca..fe9287d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -7,6 +7,9 @@ use std::convert::Infallible; pub mod utils; +#[cfg(test)] +mod tests; + /// Listens for a balance transfer into the specified account, after which it registers as /// an operator with the provided user information. #[job( @@ -83,410 +86,3 @@ pub async fn tangle_avs_registration( Ok(()) } - -#[cfg(test)] -mod tests { - use super::*; - pub use crate::utils::constants::*; - use crate::utils::sol_imports::*; - use alloy_primitives::U256; - use alloy_provider::network::TransactionBuilder; - use alloy_provider::Provider; - use blueprint_test_utils::test_ext::NAME_IDS; - use blueprint_test_utils::{inject_test_keys, KeyGenType}; - use eigensdk::utils::binding::ECDSAStakeRegistry; - use eigensdk::utils::binding::ECDSAStakeRegistry::{Quorum, StrategyParams}; - use gadget_sdk::config::{ContextConfig, GadgetCLICoreSettings, Protocol}; - use gadget_sdk::ext::sp_core; - use gadget_sdk::ext::sp_core::Pair; - use gadget_sdk::ext::subxt::tx::Signer; - use gadget_sdk::keystore::backend::fs::FilesystemKeystore; - use gadget_sdk::keystore::backend::GenericKeyStore; - use gadget_sdk::keystore::{Backend, BackendExt}; - use gadget_sdk::runners::eigenlayer::EigenlayerConfig; - use gadget_sdk::runners::BlueprintRunner; - use gadget_sdk::utils::evm::get_provider_http; - use gadget_sdk::{alloy_rpc_types, error, info}; - use std::net::IpAddr; - use std::path::Path; - use std::str::FromStr; - use std::time::Duration; - use url::Url; - use uuid::Uuid; - - const ANVIL_STATE_PATH: &str = "./saved_testnet_state.json"; - - #[tokio::test] - async fn test_full_tangle_avs() { - gadget_sdk::logging::setup_log(); - - // Begin the Anvil Testnet - let (_container, http_endpoint, ws_endpoint) = - blueprint_test_utils::anvil::start_anvil_container(ANVIL_STATE_PATH, true).await; - std::env::set_var("EIGENLAYER_HTTP_ENDPOINT", http_endpoint.clone()); - std::env::set_var("EIGENLAYER_WS_ENDPOINT", ws_endpoint.clone()); - - // Sleep to give the testnet time to spin up - tokio::time::sleep(Duration::from_secs(3)).await; - - // Create a provider using the transport for the Anvil Testnet - let provider = alloy_provider::ProviderBuilder::new() - .with_recommended_fillers() - .on_http(http_endpoint.parse().unwrap()) - .root() - .clone() - .boxed(); - - // Get the anvil accounts - let accounts = provider.get_accounts().await.unwrap(); - info!("Accounts: {:?}", accounts); - - // Create a Registry Coordinator instance and then use it to create a quorum - let registry_coordinator = - RegistryCoordinator::new(REGISTRY_COORDINATOR_ADDR, provider.clone()); - let operator_set_params = RegistryCoordinator::OperatorSetParam { - maxOperatorCount: 10, - kickBIPsOfOperatorStake: 100, - kickBIPsOfTotalStake: 1000, - }; - let strategy_params = RegistryCoordinator::StrategyParams { - strategy: ERC20_MOCK_ADDR, - multiplier: 1, - }; - let _ = registry_coordinator - .createQuorum(operator_set_params, 0, vec![strategy_params]) - .send() - .await - .unwrap(); - - // Retrieve the stake registry address from the registry coordinator - let stake_registry_addr = registry_coordinator - .stakeRegistry() - .call() - .await - .unwrap() - ._0; - info!("Stake Registry Address: {:?}", stake_registry_addr); - - let ecdsa_stake_registry_addr = - ECDSAStakeRegistry::deploy_builder(provider.clone(), DELEGATION_MANAGER_ADDR) - .send() - .await - .unwrap() - .get_receipt() - .await - .unwrap() - .contract_address - .unwrap(); - let ecdsa_stake_registry = - ECDSAStakeRegistry::new(ecdsa_stake_registry_addr, provider.clone()); - info!( - "Ecdsa Stake Registry Address: {:?}", - ecdsa_stake_registry_addr - ); - - // Deploy the Tangle Service Manager to the running Anvil Testnet - let tangle_service_manager_addr = TangleServiceManager::deploy_builder( - provider.clone(), - AVS_DIRECTORY_ADDR, - ecdsa_stake_registry_addr, - DELEGATION_MANAGER_ADDR, - ) - .send() - .await - .unwrap() - .get_receipt() - .await - .unwrap() - .contract_address - .unwrap(); - - // Make a Tangle Service Manager instance - let tangle_service_manager = - TangleServiceManager::new(tangle_service_manager_addr, provider.clone()); - info!( - "Tangle Service Manager Address: {:?}", - tangle_service_manager_addr - ); - - // Initialize the Tangle Service Manager - let init_call = tangle_service_manager.initialize(accounts[0]); - let result = init_call.send().await.unwrap(); - let receipt = result.get_receipt().await.unwrap(); - assert!(receipt.status()); - info!("Tangle Service Manager Initialization Succeeded"); - - // Initialize the ECDSA Stake Registry - let init_quorum = Quorum { - strategies: vec![StrategyParams { - strategy: ERC20_MOCK_ADDR, - multiplier: 10_000, - }], - }; - let init_call = ecdsa_stake_registry.initialize( - tangle_service_manager_addr, - U256::from(1000), - init_quorum, - ); - let result = init_call.send().await.unwrap(); - let receipt = result.get_receipt().await.unwrap(); - info!("ECDSA Stake Registry Initialization Receipt: {:?}", receipt); - assert!(receipt.status()); - info!("ECDSA Stake Registry Initialization Succeeded"); - - // Setup Keystores for test - set_tangle_env_vars(); - let tmp_dir = tempfile::TempDir::new().unwrap(); // Create a temporary directory for the keystores - let keystore_paths = generate_tangle_avs_keys(tmp_dir.path()).await; - - // Get the operator's keys - let operator_keystore_uri = keystore_paths[5].clone(); - let operator_keystore = gadget_sdk::keystore::backend::fs::FilesystemKeystore::open( - operator_keystore_uri.clone(), - ) - .unwrap(); - let operator_ecdsa_signer = operator_keystore.ecdsa_key().unwrap(); - let operator_signer = operator_keystore.sr25519_key().unwrap(); - let transfer_destination = operator_signer.account_id(); - - // Get Bob's keys, who will transfer money to the operator - let bob_keystore_uri = keystore_paths[1].clone(); - let bob_keystore = - gadget_sdk::keystore::backend::fs::FilesystemKeystore::open(bob_keystore_uri).unwrap(); - let transfer_signer = bob_keystore.sr25519_key().unwrap(); - - // Transfer balance into operator's account on Anvil for registration - let provider = get_provider_http(&http_endpoint); - let alloy_sender = accounts[0]; - let anvil_tx_amount = 100000000; - let tx = alloy_rpc_types::TransactionRequest::default() - .with_from(alloy_sender) - .with_to(operator_ecdsa_signer.alloy_address().unwrap()) - .with_value(U256::from(anvil_tx_amount)); - let tx_hash = provider - .send_transaction(tx) - .await - .unwrap() - .watch() - .await - .unwrap(); - info!( - "Transferred {anvil_tx_amount} from {:?} to {:?}\n\tHash: {:?}", - alloy_sender, - operator_ecdsa_signer.alloy_address(), - tx_hash - ); - - // Tangle node url/port - let ws_tangle_url = Url::parse("ws://127.0.0.1:9948").unwrap(); - let target_port = ws_tangle_url.clone().port().unwrap(); - - // Create the GadgetConfiguration - let config = ContextConfig { - gadget_core_settings: GadgetCLICoreSettings::Run { - target_addr: IpAddr::from_str("127.0.0.1").unwrap(), - target_port, - use_secure_url: false, - test_mode: false, - log_id: None, - http_rpc_url: Url::parse(&http_endpoint).unwrap(), - bootnodes: None, - keystore_uri: operator_keystore_uri, - chain: gadget_io::SupportedChains::LocalTestnet, - verbose: 3, - pretty: true, - keystore_password: None, - blueprint_id: Some(0), - service_id: Some(0), - skip_registration: false, - protocol: Protocol::Eigenlayer, - registry_coordinator: Some(REGISTRY_COORDINATOR_ADDR), - operator_state_retriever: Some(OPERATOR_STATE_RETRIEVER_ADDR), - delegation_manager: Some(DELEGATION_MANAGER_ADDR), - ws_rpc_url: Url::parse(&ws_endpoint).unwrap(), - strategy_manager: Some(STRATEGY_MANAGER_ADDR), - avs_directory: Some(AVS_DIRECTORY_ADDR), - operator_registry: None, - network_registry: None, - base_delegator: None, - network_opt_in_service: None, - vault_opt_in_service: None, - slasher: None, - veto_slasher: None, - }, - }; - let env = gadget_sdk::config::load(config).expect("Failed to load environment"); - let client = env.client().await.unwrap(); - let transfer_client = client.clone(); - let signer = env.first_sr25519_signer().unwrap(); - let signer_id = signer.clone().account_id(); - - // Spawn task to transfer balance into Operator's account on Tangle - let transfer_task = async move { - tokio::time::sleep(Duration::from_secs(4)).await; - info!( - "Transferring balance from {:?} to {:?}", - signer_id, transfer_destination - ); - let transfer_tx = gadget_sdk::tangle_subxt::tangle_testnet_runtime::api::tx() - .balances() - .transfer_allow_death(transfer_destination.into(), 1_000_000_000_000_000_000); // TODO: Adjust this amount as needed - match gadget_sdk::tx::tangle::send(&transfer_client, &transfer_signer, &transfer_tx) - .await - { - Ok(result) => { - info!("Transfer Result: {:?}", result); - } - Err(e) => { - error!("Balance Transfer Error: {:?}", e); - } - } - }; - let _transfer_handle = tokio::task::spawn(transfer_task); - - // Create Instance of the Event Handler - let context = BalanceTransferContext { - client: client.clone(), - env: env.clone(), - }; - let tangle_avs = RegisterToTangleEventHandler { - service_id: 0, - context: context.clone(), - client, - signer, - }; - - // Start the Runner - info!("~~~ Executing the Tangle AVS ~~~"); - let eigen_config = EigenlayerConfig {}; - BlueprintRunner::new(eigen_config, env.clone()) - .job(tangle_avs) - .run() - .await - .unwrap(); - - info!("Exiting..."); - } - - /// Sets some environment variables with some random seeds for testing - /// - /// # Warning - /// This function is for internal testing purposes. It uses keys that are visible to the public. - /// - pub(crate) fn set_tangle_env_vars() { - std::env::set_var( - "ACCO_SEED", - "1af56add54dc7e62d68901c26a1323aa2460095c58de1e848a7cd77cc2276aa2", - ); // SR25519 - std::env::set_var( - "ACCO_SURI", - "narrow copper napkin sail outside stadium fabric slice vessel cruel tragic trim", - ); - - std::env::set_var( - "BABE_SEED", - "305bd957e3b4483f44ceb51398f527aa5f1a862b02b782a7b5ddcaefdc55a263", - ); // SR25519 - std::env::set_var( - "BABE_SURI", - "accuse dumb company early prison journey jaguar inmate great toy input walnut", - ); - - std::env::set_var( - "IMON_SEED", - "42b3e4f84e95f871355ece387416cc974f5dfac60ed6b87e7856e6bc934a967a", - ); // SR25519 - std::env::set_var( - "IMON_SURI", - "decline ethics faculty coast invest two autumn insect arena burden tent cluster", - ); - - std::env::set_var( - "GRAN_SEED", - "0d124014884939f7e51379db995910d2603dfb6e36ea58103a45ef1674e866f0", - ); // ED25519 - std::env::set_var( - "GRAN_SURI", - "tobacco indicate globe immense blind fitness home layer furnace luxury level leisure", - ); - - std::env::set_var( - "ROLE_SEED", - "eab9b42be4d5a821f0519bd116982da96cc51f2b8ad02cc62230b743a5db9199", - ); // ECDSA - std::env::set_var( - "ROLE_SURI", - "item near scene turn jelly hamster noise butter move require duty hat", - ); - } - - /// Generate the keys required for Tangle AVS - /// - /// # Warning - /// This function is specifically for testing. It will panic upon any errors and utilizes keys that are publicly visible. - pub(crate) async fn generate_tangle_avs_keys(keystore_base_path: &Path) -> Vec { - // Set up the Keys required for Tangle AVS - let mut keystore_paths = Vec::new(); - - // First we inject the premade Tangle Account keys - for (item, name) in NAME_IDS.iter().enumerate() { - let tmp_store = Uuid::new_v4().to_string(); - let keystore_uri = - keystore_base_path.join(format!("keystores/{}/{tmp_store}/", name.to_lowercase())); - assert!( - !keystore_uri.exists(), - "Keystore URI cannot exist: {}", - keystore_uri.display() - ); - let keystore_uri_normalized = - std::path::absolute(keystore_uri.clone()).expect("Failed to resolve keystore URI"); - let keystore_uri_str = format!("file:{}", keystore_uri_normalized.display()); - keystore_paths.push(keystore_uri_str); - inject_test_keys(&keystore_uri, KeyGenType::Tangle(item)) - .await - .expect("Failed to inject testing keys for Tangle AVS"); - } - - // Now we create a new Tangle Account for the Test - let tmp_store = Uuid::new_v4().to_string(); - let keystore_uri = keystore_base_path.join(format!("keystores/testnode/{tmp_store}/")); - assert!( - !keystore_uri.exists(), - "Keystore URI cannot exist: {}", - keystore_uri.display() - ); - let keystore_uri_normalized = - std::path::absolute(keystore_uri.clone()).expect("Failed to resolve keystore URI"); - let keystore_uri_str = format!("file:{}", keystore_uri_normalized.display()); - keystore_paths.push(keystore_uri_str.clone()); - - tokio::fs::create_dir_all(keystore_uri.clone()) - .await - .unwrap(); - let keystore = GenericKeyStore::::Fs( - FilesystemKeystore::open(keystore_uri_str).unwrap(), - ); - - let acco_suri = std::env::var("ACCO_SURI").expect("ACCO_SURI not set"); - let (_acco, acco_seed) = sp_core::sr25519::Pair::from_phrase(&acco_suri, None) - .expect("Should be valid SR keypair"); - info!("Found SR_SEED: {:?}", acco_seed); - - let role_suri = std::env::var("ROLE_SURI").expect("ROLE_SURI not set"); - let (_role, role_seed) = sp_core::ecdsa::Pair::from_phrase(&role_suri, None) - .expect("Should be valid ECDSA keypair"); - info!("Found ROLE_SEED: {:?}", role_seed); - - keystore - .sr25519_generate_new(Some(acco_seed.as_ref())) - .expect("Invalid SR25519 seed"); - keystore - .ecdsa_generate_new(Some(role_seed.as_ref())) - .expect("Invalid ECDSA seed"); - keystore - .bls_bn254_generate_new(None) - .expect("Random BLS Key Generation Failed"); - - keystore_paths - } -} diff --git a/src/tests.rs b/src/tests.rs new file mode 100644 index 0000000..c17dc25 --- /dev/null +++ b/src/tests.rs @@ -0,0 +1,549 @@ +pub use crate::utils::constants::*; +use crate::utils::sol_imports::*; +use crate::BalanceTransferContext; +use crate::RegisterToTangleEventHandler; +use alloy_primitives::{address, U256}; +use alloy_provider::network::TransactionBuilder; +use alloy_provider::Provider; +use blueprint_test_utils::test_ext::NAME_IDS; +use blueprint_test_utils::{inject_test_keys, KeyGenType}; +use eigensdk::utils::binding::ECDSAStakeRegistry; +use eigensdk::utils::binding::ECDSAStakeRegistry::{Quorum, StrategyParams}; +use gadget_sdk::config::{ContextConfig, GadgetCLICoreSettings, Protocol}; +use gadget_sdk::ext::sp_core; +use gadget_sdk::ext::sp_core::Pair; +use gadget_sdk::ext::subxt::tx::Signer; +use gadget_sdk::keystore::backend::fs::FilesystemKeystore; +use gadget_sdk::keystore::backend::GenericKeyStore; +use gadget_sdk::keystore::{Backend, BackendExt}; +use gadget_sdk::runners::eigenlayer::EigenlayerConfig; +use gadget_sdk::runners::BlueprintRunner; +use gadget_sdk::utils::evm::get_provider_http; + +use gadget_sdk::{alloy_rpc_types, error, info}; +use std::net::IpAddr; +use std::path::Path; +use std::str::FromStr; +use std::time::Duration; +use url::Url; +use uuid::Uuid; + +const ANVIL_STATE_PATH: &str = "./saved_testnet_state.json"; + +#[tokio::test] +async fn test_full_tangle_avs() { + gadget_sdk::logging::setup_log(); + + // Begin the Anvil Testnet + let (_container, http_endpoint, ws_endpoint) = + blueprint_test_utils::anvil::start_anvil_container(ANVIL_STATE_PATH, true).await; + + // Sleep to give the testnet time to spin up + tokio::time::sleep(Duration::from_secs(3)).await; + + // Create a provider using the transport for the Anvil Testnet + let provider = alloy_provider::ProviderBuilder::new() + .with_recommended_fillers() + .on_http(http_endpoint.parse().unwrap()) + .root() + .clone() + .boxed(); + + // Get the anvil accounts + let accounts = provider.get_accounts().await.unwrap(); + info!("Accounts: {:?}", accounts); + + // Create a Registry Coordinator instance and then use it to create a quorum + let registry_coordinator = + RegistryCoordinator::new(REGISTRY_COORDINATOR_ADDR, provider.clone()); + let operator_set_params = RegistryCoordinator::OperatorSetParam { + maxOperatorCount: 10, + kickBIPsOfOperatorStake: 100, + kickBIPsOfTotalStake: 1000, + }; + let strategy_params = RegistryCoordinator::StrategyParams { + strategy: ERC20_MOCK_ADDR, + multiplier: 1, + }; + let _ = registry_coordinator + .createQuorum(operator_set_params, 0, vec![strategy_params]) + .send() + .await + .unwrap(); + + // Retrieve the stake registry address from the registry coordinator + let stake_registry_addr = registry_coordinator + .stakeRegistry() + .call() + .await + .unwrap() + ._0; + info!("Stake Registry Address: {:?}", stake_registry_addr); + + let ecdsa_stake_registry_addr = + ECDSAStakeRegistry::deploy_builder(provider.clone(), DELEGATION_MANAGER_ADDR) + .send() + .await + .unwrap() + .get_receipt() + .await + .unwrap() + .contract_address + .unwrap(); + let ecdsa_stake_registry = ECDSAStakeRegistry::new(ecdsa_stake_registry_addr, provider.clone()); + info!( + "Ecdsa Stake Registry Address: {:?}", + ecdsa_stake_registry_addr + ); + + // Deploy the Tangle Service Manager to the running Anvil Testnet + let tangle_service_manager_addr = TangleServiceManager::deploy_builder( + provider.clone(), + AVS_DIRECTORY_ADDR, + ecdsa_stake_registry_addr, + DELEGATION_MANAGER_ADDR, + ) + .send() + .await + .unwrap() + .get_receipt() + .await + .unwrap() + .contract_address + .unwrap(); + + // Make a Tangle Service Manager instance + let tangle_service_manager = + TangleServiceManager::new(tangle_service_manager_addr, provider.clone()); + info!( + "Tangle Service Manager Address: {:?}", + tangle_service_manager_addr + ); + + // Initialize the Tangle Service Manager + let init_call = tangle_service_manager.initialize(accounts[0]); + let result = init_call.send().await.unwrap(); + let receipt = result.get_receipt().await.unwrap(); + assert!(receipt.status()); + info!("Tangle Service Manager Initialization Succeeded"); + + // Initialize the ECDSA Stake Registry + let init_quorum = Quorum { + strategies: vec![StrategyParams { + strategy: ERC20_MOCK_ADDR, + multiplier: 10_000, + }], + }; + let init_call = + ecdsa_stake_registry.initialize(tangle_service_manager_addr, U256::from(1000), init_quorum); + let result = init_call.send().await.unwrap(); + let receipt = result.get_receipt().await.unwrap(); + info!("ECDSA Stake Registry Initialization Receipt: {:?}", receipt); + assert!(receipt.status()); + info!("ECDSA Stake Registry Initialization Succeeded"); + + // Setup Keystores for test + set_tangle_env_vars(); + let tmp_dir = tempfile::TempDir::new().unwrap(); // Create a temporary directory for the keystores + let keystore_paths = generate_tangle_avs_keys(tmp_dir.path()).await; + + // Get the operator's keys + let operator_keystore_uri = keystore_paths[5].clone(); + let operator_keystore = + gadget_sdk::keystore::backend::fs::FilesystemKeystore::open(operator_keystore_uri.clone()) + .unwrap(); + let operator_ecdsa_signer = operator_keystore.ecdsa_key().unwrap(); + let operator_signer = operator_keystore.sr25519_key().unwrap(); + let transfer_destination = operator_signer.account_id(); + + // Get Bob's keys, who will transfer money to the operator + let bob_keystore_uri = keystore_paths[1].clone(); + let bob_keystore = + gadget_sdk::keystore::backend::fs::FilesystemKeystore::open(bob_keystore_uri).unwrap(); + let transfer_signer = bob_keystore.sr25519_key().unwrap(); + + // Transfer balance into operator's account on Anvil for registration + let provider = get_provider_http(&http_endpoint); + let alloy_sender = accounts[0]; + let anvil_tx_amount = 100000000; + let tx = alloy_rpc_types::TransactionRequest::default() + .with_from(alloy_sender) + .with_to(operator_ecdsa_signer.alloy_address().unwrap()) + .with_value(U256::from(anvil_tx_amount)); + let tx_hash = provider + .send_transaction(tx) + .await + .unwrap() + .watch() + .await + .unwrap(); + info!( + "Transferred {anvil_tx_amount} from {:?} to {:?}\n\tHash: {:?}", + alloy_sender, + operator_ecdsa_signer.alloy_address(), + tx_hash + ); + + // Tangle node url/port + let ws_tangle_url = Url::parse("ws://127.0.0.1:9948").unwrap(); + let target_port = ws_tangle_url.clone().port().unwrap(); + + // Create the GadgetConfiguration + let config = ContextConfig { + gadget_core_settings: GadgetCLICoreSettings::Run { + target_addr: IpAddr::from_str("127.0.0.1").unwrap(), + target_port, + use_secure_url: false, + test_mode: false, + log_id: None, + http_rpc_url: Url::parse(&http_endpoint).unwrap(), + bootnodes: None, + keystore_uri: operator_keystore_uri, + chain: gadget_io::SupportedChains::LocalTestnet, + verbose: 3, + pretty: true, + keystore_password: None, + blueprint_id: Some(0), + service_id: Some(0), + skip_registration: false, + protocol: Protocol::Eigenlayer, + registry_coordinator: Some(REGISTRY_COORDINATOR_ADDR), + operator_state_retriever: Some(OPERATOR_STATE_RETRIEVER_ADDR), + delegation_manager: Some(DELEGATION_MANAGER_ADDR), + ws_rpc_url: Url::parse(&ws_endpoint).unwrap(), + strategy_manager: Some(STRATEGY_MANAGER_ADDR), + avs_directory: Some(AVS_DIRECTORY_ADDR), + operator_registry: None, + network_registry: None, + base_delegator: None, + network_opt_in_service: None, + vault_opt_in_service: None, + slasher: None, + veto_slasher: None, + }, + }; + let env = gadget_sdk::config::load(config).expect("Failed to load environment"); + let client = env.client().await.unwrap(); + let transfer_client = client.clone(); + let signer = env.first_sr25519_signer().unwrap(); + let signer_id = signer.clone().account_id(); + + // Spawn task to transfer balance into Operator's account on Tangle + let transfer_task = async move { + tokio::time::sleep(Duration::from_secs(4)).await; + info!( + "Transferring balance from {:?} to {:?}", + signer_id, transfer_destination + ); + let transfer_tx = gadget_sdk::tangle_subxt::tangle_testnet_runtime::api::tx() + .balances() + .transfer_allow_death(transfer_destination.into(), 1_000_000_000_000_000_000); // TODO: Adjust this amount as needed + match gadget_sdk::tx::tangle::send(&transfer_client, &transfer_signer, &transfer_tx).await { + Ok(result) => { + info!("Transfer Result: {:?}", result); + } + Err(e) => { + error!("Balance Transfer Error: {:?}", e); + } + } + }; + let _transfer_handle = tokio::task::spawn(transfer_task); + + // Create Instance of the Event Handler + let context = BalanceTransferContext { + client: client.clone(), + env: env.clone(), + }; + let tangle_avs = RegisterToTangleEventHandler { + service_id: 0, + context: context.clone(), + client, + signer, + }; + + // Start the Runner + info!("~~~ Executing the Tangle AVS ~~~"); + let eigen_config = EigenlayerConfig {}; + BlueprintRunner::new(eigen_config, env.clone()) + .job(tangle_avs) + .run() + .await + .unwrap(); + + info!("Exiting..."); +} + +#[tokio::test] +async fn test_holesky_tangle_avs() { + gadget_sdk::logging::setup_log(); + + let eth_http_endpoint = "https://ethereum-holesky.publicnode.com".to_string(); + let eth_ws_endpoint = "wss://ethereum-holesky.publicnode.com".to_string(); + let tangle_ws_endpoint = "ws://127.0.0.1:9948".to_string(); + + // Private key of the account that will send ETH to the new test operator + // let funder_private_key = std::env::var("FUNDER_PRIVATE_KEY").expect("FUNDER_PRIVATE_KEY must be set"); + + // Create a provider for the ETH network + let provider = alloy_provider::ProviderBuilder::new() + .with_recommended_fillers() + .on_http(eth_http_endpoint.parse().unwrap()) + .root() + .clone() + .boxed(); + + // Setup keystores for test + set_tangle_env_vars(); + let tmp_dir = tempfile::TempDir::new().unwrap(); + let keystore_paths = generate_tangle_avs_keys(tmp_dir.path()).await; + + // Get the operator's keys + let operator_keystore_uri = keystore_paths[5].clone(); + let operator_keystore = + gadget_sdk::keystore::backend::fs::FilesystemKeystore::open(operator_keystore_uri.clone()) + .unwrap(); + let operator_ecdsa_signer = operator_keystore.ecdsa_key().unwrap(); + let operator_signer = operator_keystore.sr25519_key().unwrap(); + let transfer_destination = operator_signer.account_id(); + + // // Create signer from funder's private key + // let funder_wallet = + // alloy_signer_local::PrivateKeySigner::from_str(&funder_private_key).unwrap(); + + // // Transfer ETH to operator's account + // let anvil_tx_amount = 100000000; // Adjust this based on network requirements + // let tx = alloy_rpc_types::TransactionRequest::default() + // .with_from(funder_wallet.address()) + // .with_to(operator_ecdsa_signer.alloy_address().unwrap()) + // .with_value(U256::from(anvil_tx_amount)); + // + // let tx_hash = provider + // .send_transaction(tx) + // .await + // .unwrap() + // .watch() + // .await + // .unwrap(); + // info!( + // "Transferred {anvil_tx_amount} from {:?} to {:?}\n\tHash: {:?}", + // funder_wallet.address(), + // operator_ecdsa_signer.alloy_address(), + // tx_hash + // ); + + // Parse Tangle node URL + let ws_tangle_url = Url::parse(&tangle_ws_endpoint).unwrap(); + let target_port = ws_tangle_url.clone().port().unwrap(); + + // Create the GadgetConfiguration + let config = ContextConfig { + gadget_core_settings: GadgetCLICoreSettings::Run { + target_addr: IpAddr::from_str("127.0.0.1").unwrap(), + target_port, + use_secure_url: false, + test_mode: false, + log_id: None, + http_rpc_url: Url::parse(ð_http_endpoint).unwrap(), + bootnodes: None, + keystore_uri: operator_keystore_uri, + chain: gadget_io::SupportedChains::Testnet, + verbose: 3, + pretty: true, + keystore_password: None, + blueprint_id: Some(0), + service_id: Some(0), + skip_registration: false, + protocol: Protocol::Eigenlayer, + registry_coordinator: Some(REGISTRY_COORDINATOR_ADDR), + operator_state_retriever: Some(OPERATOR_STATE_RETRIEVER_ADDR), + delegation_manager: Some(address!("A44151489861Fe9e3055d95adC98FbD462B948e7")), + ws_rpc_url: Url::parse(ð_ws_endpoint).unwrap(), + strategy_manager: Some(address!("dfB5f6CE42aAA7830E94ECFCcAd411beF4d4D5b6")), + avs_directory: Some(address!("055733000064333CaDDbC92763c58BF0192fFeBf")), + operator_registry: None, + network_registry: None, + base_delegator: None, + network_opt_in_service: None, + vault_opt_in_service: None, + slasher: None, + veto_slasher: None, + }, + }; + let env = gadget_sdk::config::load(config).expect("Failed to load environment"); + let client = env.client().await.unwrap(); + let transfer_client = client.clone(); + let signer = env.first_sr25519_signer().unwrap(); + let signer_id = signer.clone().account_id(); + + // Get Bob's keys for Tangle transfer + let bob_keystore_uri = keystore_paths[1].clone(); + let bob_keystore = + gadget_sdk::keystore::backend::fs::FilesystemKeystore::open(bob_keystore_uri).unwrap(); + let transfer_signer = bob_keystore.sr25519_key().unwrap(); + + // Spawn task to transfer balance into Operator's account on Tangle + let transfer_task = async move { + tokio::time::sleep(Duration::from_secs(4)).await; + info!( + "Transferring balance from {:?} to {:?}", + signer_id, transfer_destination + ); + let transfer_tx = gadget_sdk::tangle_subxt::tangle_testnet_runtime::api::tx() + .balances() + .transfer_allow_death(transfer_destination.into(), 1_000_000_000_000_000_000); + match gadget_sdk::tx::tangle::send(&transfer_client, &transfer_signer, &transfer_tx).await { + Ok(result) => { + info!("Transfer Result: {:?}", result); + } + Err(e) => { + error!("Balance Transfer Error: {:?}", e); + } + } + }; + let _transfer_handle = tokio::task::spawn(transfer_task); + + // Create Instance of the Event Handler + let context = BalanceTransferContext { + client: client.clone(), + env: env.clone(), + }; + let tangle_avs = RegisterToTangleEventHandler { + service_id: 0, + context: context.clone(), + client, + signer, + }; + + // Start the Runner + info!("~~~ Executing the Tangle AVS ~~~"); + let eigen_config = EigenlayerConfig {}; + BlueprintRunner::new(eigen_config, env.clone()) + .job(tangle_avs) + .run() + .await + .unwrap(); + + info!("Exiting..."); +} + +/// Sets some environment variables with some random seeds for testing +/// +/// # Warning +/// This function is for internal testing purposes. It uses keys that are visible to the public. +/// +pub(crate) fn set_tangle_env_vars() { + std::env::set_var( + "ACCO_SEED", + "1af56add54dc7e62d68901c26a1323aa2460095c58de1e848a7cd77cc2276aa2", + ); // SR25519 + std::env::set_var( + "ACCO_SURI", + "narrow copper napkin sail outside stadium fabric slice vessel cruel tragic trim", + ); + + std::env::set_var( + "BABE_SEED", + "305bd957e3b4483f44ceb51398f527aa5f1a862b02b782a7b5ddcaefdc55a263", + ); // SR25519 + std::env::set_var( + "BABE_SURI", + "accuse dumb company early prison journey jaguar inmate great toy input walnut", + ); + + std::env::set_var( + "IMON_SEED", + "42b3e4f84e95f871355ece387416cc974f5dfac60ed6b87e7856e6bc934a967a", + ); // SR25519 + std::env::set_var( + "IMON_SURI", + "decline ethics faculty coast invest two autumn insect arena burden tent cluster", + ); + + std::env::set_var( + "GRAN_SEED", + "0d124014884939f7e51379db995910d2603dfb6e36ea58103a45ef1674e866f0", + ); // ED25519 + std::env::set_var( + "GRAN_SURI", + "tobacco indicate globe immense blind fitness home layer furnace luxury level leisure", + ); + + std::env::set_var( + "ROLE_SEED", + "eab9b42be4d5a821f0519bd116982da96cc51f2b8ad02cc62230b743a5db9199", + ); // ECDSA + std::env::set_var( + "ROLE_SURI", + "item near scene turn jelly hamster noise butter move require duty hat", + ); +} + +/// Generate the keys required for Tangle AVS +/// +/// # Warning +/// This function is specifically for testing. It will panic upon any errors and utilizes keys that are publicly visible. +pub(crate) async fn generate_tangle_avs_keys(keystore_base_path: &Path) -> Vec { + // Set up the Keys required for Tangle AVS + let mut keystore_paths = Vec::new(); + + // First we inject the premade Tangle Account keys + for (item, name) in NAME_IDS.iter().enumerate() { + let tmp_store = Uuid::new_v4().to_string(); + let keystore_uri = + keystore_base_path.join(format!("keystores/{}/{tmp_store}/", name.to_lowercase())); + assert!( + !keystore_uri.exists(), + "Keystore URI cannot exist: {}", + keystore_uri.display() + ); + let keystore_uri_normalized = + std::path::absolute(keystore_uri.clone()).expect("Failed to resolve keystore URI"); + let keystore_uri_str = format!("file:{}", keystore_uri_normalized.display()); + keystore_paths.push(keystore_uri_str); + inject_test_keys(&keystore_uri, KeyGenType::Tangle(item)) + .await + .expect("Failed to inject testing keys for Tangle AVS"); + } + + // Now we create a new Tangle Account for the Test + let tmp_store = Uuid::new_v4().to_string(); + let keystore_uri = keystore_base_path.join(format!("keystores/testnode/{tmp_store}/")); + assert!( + !keystore_uri.exists(), + "Keystore URI cannot exist: {}", + keystore_uri.display() + ); + let keystore_uri_normalized = + std::path::absolute(keystore_uri.clone()).expect("Failed to resolve keystore URI"); + let keystore_uri_str = format!("file:{}", keystore_uri_normalized.display()); + keystore_paths.push(keystore_uri_str.clone()); + + tokio::fs::create_dir_all(keystore_uri.clone()) + .await + .unwrap(); + let keystore = GenericKeyStore::::Fs( + FilesystemKeystore::open(keystore_uri_str).unwrap(), + ); + + let acco_suri = std::env::var("ACCO_SURI").expect("ACCO_SURI not set"); + let (_acco, acco_seed) = + sp_core::sr25519::Pair::from_phrase(&acco_suri, None).expect("Should be valid SR keypair"); + info!("Found SR_SEED: {:?}", acco_seed); + + let role_suri = std::env::var("ROLE_SURI").expect("ROLE_SURI not set"); + let (_role, role_seed) = + sp_core::ecdsa::Pair::from_phrase(&role_suri, None).expect("Should be valid ECDSA keypair"); + info!("Found ROLE_SEED: {:?}", role_seed); + + keystore + .sr25519_generate_new(Some(acco_seed.as_ref())) + .expect("Invalid SR25519 seed"); + keystore + .ecdsa_generate_new(Some(role_seed.as_ref())) + .expect("Invalid ECDSA seed"); + keystore + .bls_bn254_generate_new(None) + .expect("Random BLS Key Generation Failed"); + + keystore_paths +} From 1903377fbf6379f7c4c0f68d780b29f8239fefeb Mon Sep 17 00:00:00 2001 From: Tjemmmic Date: Thu, 14 Nov 2024 19:31:39 -0600 Subject: [PATCH 05/15] feat: core deployment script fixes --- contracts/script/DeployCoreContracts.s.sol | 107 +++++++++++++++------ 1 file changed, 78 insertions(+), 29 deletions(-) diff --git a/contracts/script/DeployCoreContracts.s.sol b/contracts/script/DeployCoreContracts.s.sol index 771240f..c852d19 100644 --- a/contracts/script/DeployCoreContracts.s.sol +++ b/contracts/script/DeployCoreContracts.s.sol @@ -12,17 +12,23 @@ import {PauserRegistry} from "../lib/eigenlayer-middleware/lib/eigenlayer-contra import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; import {TransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; import {EmptyContract} from "../lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/test/mocks/EmptyContract.sol"; - -contract DeployMiddleware is Script { - // Existing deployed contracts - address public constant TANGLE_SERVICE_MANAGER = 0x5aBc6138DD384a1b059f1fcBaD73E03c31170C14; - address public constant ECDSA_STAKE_REGISTRY = 0x131b803Bece581281A2E33d7E693DfA70aB85D06; - +import {IStrategy} from "../lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IStrategy.sol"; +import {IServiceManager} from "../lib/eigenlayer-middleware/src/interfaces/IServiceManager.sol"; +import {IStakeRegistry} from "../lib/eigenlayer-middleware/src/interfaces/IStakeRegistry.sol"; +import {IIndexRegistry} from "../lib/eigenlayer-middleware/src/interfaces/IIndexRegistry.sol"; +import {IBLSApkRegistry} from "../lib/eigenlayer-middleware/src/interfaces/IBLSApkRegistry.sol"; +import {IRegistryCoordinator} from "../lib/eigenlayer-middleware/src/interfaces/IRegistryCoordinator.sol"; +import {IDelegationManager} from "../lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IDelegationManager.sol"; + +import "forge-std/console.sol"; +import "forge-std/StdJson.sol"; + +contract DeployCoreContracts is Script { // Proxy admin for upgradeable contracts ProxyAdmin public tangleProxyAdmin; function run() external { - IStrategy[1] memory deployedStrategyArray = [IStrategy(0x80528D6e9A2BAbFc766965E0E26d5aB08D9CFaF9)]; + IStrategy[1] memory deployedStrategyArray = [IStrategy(0x80528D6e9A2BAbFc766965E0E26d5aB08D9CFaF9)]; // wETH strategy uint numStrategies = deployedStrategyArray.length; uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); @@ -34,6 +40,10 @@ contract DeployMiddleware is Script { // Deploy empty contract for initial proxy implementation EmptyContract emptyContract = new EmptyContract(); + IDelegationManager delegationManager = IDelegationManager( + 0xA44151489861Fe9e3055d95adC98FbD462B948e7 // Delegation Manager + ); + // Deploy PauserRegistry first (required by RegistryCoordinator) address[] memory pausers = new address[](1); pausers[0] = vm.addr(deployerPrivateKey); // deployer is the pauser @@ -41,6 +51,16 @@ contract DeployMiddleware is Script { PauserRegistry pauserRegistry = new PauserRegistry(pausers, unpauser); // Deploy proxies pointing to empty implementation initially + IServiceManager tangleServiceManager = IServiceManager( + address( + new TransparentUpgradeableProxy( + address(emptyContract), + address(tangleProxyAdmin), + "" + ) + ) + ); + RegistryCoordinator registryCoordinator = RegistryCoordinator( address( new TransparentUpgradeableProxy( @@ -51,7 +71,7 @@ contract DeployMiddleware is Script { ) ); - IndexRegistry indexRegistry = IndexRegistry( + IIndexRegistry indexRegistry = IIndexRegistry( address( new TransparentUpgradeableProxy( address(emptyContract), @@ -61,7 +81,17 @@ contract DeployMiddleware is Script { ) ); - BLSApkRegistry blsApkRegistry = BLSApkRegistry( + IBLSApkRegistry blsApkRegistry = IBLSApkRegistry( + address( + new TransparentUpgradeableProxy( + address(emptyContract), + address(tangleProxyAdmin), + "" + ) + ) + ); + + IStakeRegistry stakeRegistry = IStakeRegistry( address( new TransparentUpgradeableProxy( address(emptyContract), @@ -73,26 +103,37 @@ contract DeployMiddleware is Script { OperatorStateRetriever operatorStateRetriever = new OperatorStateRetriever(); - // Deploy implementation contracts - BLSApkRegistry blsApkRegistryImplementation = new BLSApkRegistry( - registryCoordinator - ); - tangleProxyAdmin.upgrade( - TransparentUpgradeableProxy(payable(address(blsApkRegistry))), - address(blsApkRegistryImplementation) - ); + { + // Deploy implementation contracts + StakeRegistry stakeRegistryImplementation = new StakeRegistry( + registryCoordinator, + delegationManager + ); + tangleProxyAdmin.upgrade( + TransparentUpgradeableProxy(payable(address(stakeRegistry))), + address(stakeRegistryImplementation) + ); - IndexRegistry indexRegistryImplementation = new IndexRegistry( - registryCoordinator - ); - tangleProxyAdmin.upgrade( - TransparentUpgradeableProxy(payable(address(indexRegistry))), - address(indexRegistryImplementation) - ); + BLSApkRegistry blsApkRegistryImplementation = new BLSApkRegistry( + registryCoordinator + ); + tangleProxyAdmin.upgrade( + TransparentUpgradeableProxy(payable(address(blsApkRegistry))), + address(blsApkRegistryImplementation) + ); + + IndexRegistry indexRegistryImplementation = new IndexRegistry( + registryCoordinator + ); + tangleProxyAdmin.upgrade( + TransparentUpgradeableProxy(payable(address(indexRegistry))), + address(indexRegistryImplementation) + ); + } RegistryCoordinator registryCoordinatorImplementation = new RegistryCoordinator( - IServiceManager(TANGLE_SERVICE_MANAGER), - IStakeRegistry(ECDSA_STAKE_REGISTRY), + tangleServiceManager, + IStakeRegistry(stakeRegistry), IBLSApkRegistry(blsApkRegistry), IIndexRegistry(indexRegistry) ); @@ -138,9 +179,9 @@ contract DeployMiddleware is Script { address(registryCoordinatorImplementation), abi.encodeWithSelector( RegistryCoordinator.initialize.selector, - unpauser, - unpauser, - unpauser, + vm.addr(deployerPrivateKey), + vm.addr(deployerPrivateKey), + vm.addr(deployerPrivateKey), pauserRegistry, 0, // 0 initialPausedStatus means everything unpaused quorumsOperatorSetParams, @@ -150,6 +191,12 @@ contract DeployMiddleware is Script { ); } + TangleServiceManager tangleServiceManagerImplementation = new TangleServiceManager( + 0x055733000064333CaDDbC92763c58BF0192fFeBf, // AVS Directory + address(stakeRegistry), + 0xA44151489861Fe9e3055d95adC98FbD462B948e7 // Delegation Manager + ); + vm.stopBroadcast(); // Log deployed addresses @@ -157,6 +204,8 @@ contract DeployMiddleware is Script { console.log("PauserRegistry:", address(pauserRegistry)); console.log("IndexRegistry:", address(indexRegistry)); console.log("BLSApkRegistry:", address(blsApkRegistry)); + console.log("StakeRegistry:", address(stakeRegistry)); + console.log("TangleServiceManager:", address(tangleServiceManager)); console.log("RegistryCoordinator (Proxy):", address(registryCoordinator)); console.log("RegistryCoordinator (Implementation):", address(registryCoordinatorImplementation)); console.log("OperatorStateRetriever:", address(operatorStateRetriever)); From 9d4f05c734c643dab09d99d1289fc83b9709f64d Mon Sep 17 00:00:00 2001 From: Tjemmmic Date: Thu, 14 Nov 2024 19:32:03 -0600 Subject: [PATCH 06/15] fix: add via-ir to foundry toml --- contracts/foundry.toml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contracts/foundry.toml b/contracts/foundry.toml index 21570e2..2ff0c55 100644 --- a/contracts/foundry.toml +++ b/contracts/foundry.toml @@ -2,4 +2,5 @@ src = "src" out = "out" libs = ["lib"] -solc_version = "0.8.20" \ No newline at end of file +solc_version = "0.8.20" +via_ir = true \ No newline at end of file From f2a7b058d6f0281c947a426dbc431475c544f637 Mon Sep 17 00:00:00 2001 From: Tjemmmic Date: Thu, 14 Nov 2024 21:13:42 -0600 Subject: [PATCH 07/15] fix!: updating all avs contracts and adding deployment scripts wip --- Cargo.toml | 1 + contracts/script/DeployCoreContracts.s.sol | 11 +- contracts/src/TangleServiceManager.sol | 103 +++++++-------- .../src/test/TestTangleServiceManager.sol | 15 ++- contracts/test/TangleServiceManager.t.sol | 1 - src/tests.rs | 4 +- verify_proxy_contracts.sh | 117 ++++++++++++++++++ 7 files changed, 181 insertions(+), 71 deletions(-) create mode 100755 verify_proxy_contracts.sh diff --git a/Cargo.toml b/Cargo.toml index 5137e92..59b3248 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,6 +25,7 @@ eigensdk = { version = "0.1.0", features = ["full", "utils", "types"] } alloy-primitives = "0.7.2" alloy-provider = { version = "0.1", default-features = false, features = ["reqwest", "ws"] } alloy-sol-types = "0.7.2" +alloy-signer-local = "0.1" alloy-contract = "0.1" lock_api = "0.4.12" parking_lot = "0.12.3" diff --git a/contracts/script/DeployCoreContracts.s.sol b/contracts/script/DeployCoreContracts.s.sol index c852d19..d41f3f9 100644 --- a/contracts/script/DeployCoreContracts.s.sol +++ b/contracts/script/DeployCoreContracts.s.sol @@ -19,6 +19,8 @@ import {IIndexRegistry} from "../lib/eigenlayer-middleware/src/interfaces/IIndex import {IBLSApkRegistry} from "../lib/eigenlayer-middleware/src/interfaces/IBLSApkRegistry.sol"; import {IRegistryCoordinator} from "../lib/eigenlayer-middleware/src/interfaces/IRegistryCoordinator.sol"; import {IDelegationManager} from "../lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IDelegationManager.sol"; +import {IAVSDirectory} from "../lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IAVSDirectory.sol"; +import {ISlasher} from "../lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/ISlasher.sol"; import "forge-std/console.sol"; import "forge-std/StdJson.sol"; @@ -191,10 +193,13 @@ contract DeployCoreContracts is Script { ); } + ISlasher slasher = ISlasher(address(0)); // TODO: Deploy real slasher + TangleServiceManager tangleServiceManagerImplementation = new TangleServiceManager( - 0x055733000064333CaDDbC92763c58BF0192fFeBf, // AVS Directory - address(stakeRegistry), - 0xA44151489861Fe9e3055d95adC98FbD462B948e7 // Delegation Manager + IAVSDirectory(0x055733000064333CaDDbC92763c58BF0192fFeBf), // AVS Directory + registryCoordinator, + stakeRegistry, + slasher // TODO: Slasher ); vm.stopBroadcast(); diff --git a/contracts/src/TangleServiceManager.sol b/contracts/src/TangleServiceManager.sol index a16c963..5f3de53 100644 --- a/contracts/src/TangleServiceManager.sol +++ b/contracts/src/TangleServiceManager.sol @@ -1,14 +1,16 @@ // SPDX-License-Identifier: MIT OR Apache-2.0 -pragma solidity >=0.8.0; +pragma solidity >=0.8.12; // ============ Internal Imports ============ import {Enrollment, EnrollmentStatus, EnumerableMapEnrollment} from "./libs/EnumerableMapEnrollment.sol"; -import {IAVSDirectory} from "./interfaces/vendored/IAVSDirectory.sol"; -import {ISlasher} from "./interfaces/vendored/ISlasher.sol"; -import {ECDSAServiceManagerBase} from "./ECDSAServiceManagerBase.sol"; +import {IAVSDirectory} from "../lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IAVSDirectory.sol"; +import {IRegistryCoordinator} from "../lib/eigenlayer-middleware/src/interfaces/IRegistryCoordinator.sol"; import {IRemoteChallenger} from "./interfaces/IRemoteChallenger.sol"; +import {ISlasher} from "../lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/ISlasher.sol"; +import {IStakeRegistry} from "../lib/eigenlayer-middleware/src/interfaces/IStakeRegistry.sol"; +import {ServiceManagerBase} from "../lib/eigenlayer-middleware/src/ServiceManagerBase.sol"; -contract TangleServiceManager is ECDSAServiceManagerBase { +contract TangleServiceManager is ServiceManagerBase { // ============ Libraries ============ using EnumerableMapEnrollment for EnumerableMapEnrollment.AddressToEnrollmentMap; @@ -16,8 +18,19 @@ contract TangleServiceManager is ECDSAServiceManagerBase { // ============ Public Storage ============ // Slasher contract responsible for slashing operators - // @dev slasher needs to be updated once slashing is implemented - ISlasher internal slasher; + ISlasher internal immutable slasher; + + // Mapping of operators to challengers they are enrolled in (enumerable required for remove-all) + mapping(address => EnumerableMapEnrollment.AddressToEnrollmentMap) internal enrolledChallengers; + + // Mapping to store operator keys + mapping(address => OperatorKeys) public operatorKeys; + + // Structure to store operator keys + struct OperatorKeys { + bytes validatorKeys; + bytes32 accountKey; + } // ============ Events ============ @@ -49,10 +62,13 @@ contract TangleServiceManager is ECDSAServiceManagerBase { address operator, IRemoteChallenger challenger, uint256 unenrollmentEndBlock ); - // ============ Internal Storage ============ - - // Mapping of operators to challengers they are enrolled in (enumerable required for remove-all) - mapping(address => EnumerableMapEnrollment.AddressToEnrollmentMap) internal enrolledChallengers; + /** + * @notice Event emitted when an operator sets their keys + * @param operator The address of the operator + * @param validatorKeys The validator key set by the operator + * @param accountKey The account key set by the operator + */ + event OperatorKeysSet(address indexed operator, bytes validatorKeys, bytes32 accountKey); // ============ Modifiers ============ @@ -66,23 +82,16 @@ contract TangleServiceManager is ECDSAServiceManagerBase { // ============ Constructor ============ constructor( - address _avsDirectory, - address _stakeRegistry, - address _delegationManager - ) - ECDSAServiceManagerBase( - _avsDirectory, - _stakeRegistry, - address(0), // payment coordinator is not used - _delegationManager - ) - {} + IAVSDirectory _avsDirectory, + IRegistryCoordinator _registryCoordinator, + IStakeRegistry _stakeRegistry, + ISlasher _slasher + ) ServiceManagerBase(_avsDirectory, _registryCoordinator, _stakeRegistry) { + slasher = _slasher; + } - /** - * @notice Initializes the TangleServiceManager contract with the owner address - */ - function initialize(address _owner) public initializer { - __ServiceManagerBase_init(_owner); + function initialize(address initialOwner) external initializer { + __ServiceManagerBase_init(initialOwner); } // ============ External Functions ============ @@ -115,14 +124,6 @@ contract TangleServiceManager is ECDSAServiceManagerBase { _completeUnenrollment(msg.sender, _challengers); } - /** - * @notice Sets the slasher contract responsible for slashing operators - * @param _slasher The address of the slasher contract - */ - function setSlasher(ISlasher _slasher) external onlyOwner { - slasher = _slasher; - } - /** * @notice returns the status of a challenger an operator is enrolled in * @param _operator The address of the operator @@ -222,30 +223,14 @@ contract TangleServiceManager is ECDSAServiceManagerBase { emit OperatorUnenrolledFromChallenger(operator, challenger, block.number); } - /// @inheritdoc ECDSAServiceManagerBase - function _deregisterOperatorFromAVS(address operator) internal virtual override { - address[] memory challengers = getOperatorChallengers(operator); - _completeUnenrollment(operator, challengers); - - IAVSDirectory(avsDirectory).deregisterOperatorFromAVS(operator); - emit OperatorDeregisteredFromAVS(operator); - } - - /// Tangle Cross-chain Registration logic - /// @notice Struct to hold operator keys - struct OperatorKeys { - bytes validatorKeys; - bytes32 accountKey; - } - - /// @notice Mapping to store operator keys - mapping(address => OperatorKeys) public operatorKeys; - - /// @notice Event emitted when an operator sets their keys - /// @param operator The address of the operator - /// @param validatorKeys The validator key set by the operator - /// @param accountKey The account key set by the operator - event OperatorKeysSet(address indexed operator, bytes validatorKeys, bytes32 accountKey); +// /// @inheritdoc ServiceManagerBase +// function _deregisterOperatorFromAVS(address operator) internal virtual override { +// address[] memory challengers = getOperatorChallengers(operator); +// _completeUnenrollment(operator, challengers); +// +// IAVSDirectory(_avsDirectory).deregisterOperatorFromAVS(operator); +// emit OperatorDeregisteredFromAVS(operator); +// } /// @notice Allows an operator to set their validator and account keys /// @param _validatorKeys The validator keys for the operator diff --git a/contracts/src/test/TestTangleServiceManager.sol b/contracts/src/test/TestTangleServiceManager.sol index db6aba1..c17c6b8 100644 --- a/contracts/src/test/TestTangleServiceManager.sol +++ b/contracts/src/test/TestTangleServiceManager.sol @@ -3,17 +3,20 @@ pragma solidity >=0.8.0; import {Enrollment, EnrollmentStatus, EnumerableMapEnrollment} from "../libs/EnumerableMapEnrollment.sol"; import {TangleServiceManager} from "../TangleServiceManager.sol"; +import {IRegistryCoordinator} from "../../lib/eigenlayer-middleware/src/interfaces/IRegistryCoordinator.sol"; +import {IAVSDirectory} from "../../lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IAVSDirectory.sol"; +import {ISlasher} from "../../lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/ISlasher.sol"; +import {IStakeRegistry} from "../../lib/eigenlayer-middleware/src/interfaces/IStakeRegistry.sol"; contract TestTangleServiceManager is TangleServiceManager { using EnumerableMapEnrollment for EnumerableMapEnrollment.AddressToEnrollmentMap; constructor( - address _avsDirectory, - address _stakeRegistry, - address _paymentCoordinator, - address _delegationManager, - address _mailbox - ) TangleServiceManager(_avsDirectory, _stakeRegistry, _delegationManager) {} + IAVSDirectory _avsDirectory, + IRegistryCoordinator _registryCoordinator, + IStakeRegistry _stakeRegistry, + ISlasher _slasher + ) TangleServiceManager(_avsDirectory, _registryCoordinator, _stakeRegistry, _slasher) {} function mockSetUnenrolled(address operator, address challenger) external { enrolledChallengers[operator].set(address(challenger), Enrollment(EnrollmentStatus.UNENROLLED, 0)); diff --git a/contracts/test/TangleServiceManager.t.sol b/contracts/test/TangleServiceManager.t.sol index e8b207e..b9f39a3 100644 --- a/contracts/test/TangleServiceManager.t.sol +++ b/contracts/test/TangleServiceManager.t.sol @@ -53,7 +53,6 @@ contract TangleServiceManagerTest is EigenlayerBase { address(_mailbox) ); _tsm.initialize(address(this)); - _tsm.setSlasher(slasher); IStrategy mockStrategy = IStrategy(address(0x1234)); Quorum memory quorum = Quorum({strategies: new StrategyParams[](1)}); diff --git a/src/tests.rs b/src/tests.rs index c17dc25..2142dd8 100644 --- a/src/tests.rs +++ b/src/tests.rs @@ -354,8 +354,8 @@ async fn test_holesky_tangle_avs() { service_id: Some(0), skip_registration: false, protocol: Protocol::Eigenlayer, - registry_coordinator: Some(REGISTRY_COORDINATOR_ADDR), - operator_state_retriever: Some(OPERATOR_STATE_RETRIEVER_ADDR), + registry_coordinator: Some(address!("227327316CA7Ec350bb8651bE940C005f3B50c78")), + operator_state_retriever: Some(address!("38F984394c123375ACb7A638b66a78e2D15c987b")), delegation_manager: Some(address!("A44151489861Fe9e3055d95adC98FbD462B948e7")), ws_rpc_url: Url::parse(ð_ws_endpoint).unwrap(), strategy_manager: Some(address!("dfB5f6CE42aAA7830E94ECFCcAd411beF4d4D5b6")), diff --git a/verify_proxy_contracts.sh b/verify_proxy_contracts.sh new file mode 100755 index 0000000..81c75cf --- /dev/null +++ b/verify_proxy_contracts.sh @@ -0,0 +1,117 @@ +#!/bin/bash + +# Set RPC URL +RPC_URL="https://ethereum-holesky.publicnode.com" + +# Function to verify a proxy contract +verify_proxy() { + local contract_name=$1 + local proxy_address=$2 + local implementation_address=$3 + local contract_path=$4 + + echo "Verifying $contract_name..." + echo "Proxy Address: $proxy_address" + echo "Implementation Address: $implementation_address" + echo "Path: $contract_path" + echo "----------------------------------------" + + # First verify the implementation contract + forge verify-contract $implementation_address $contract_path --rpc-url $RPC_URL --watch --via-ir --compiler-version "v0.8.12+commit.f00d7308" --optimizer-runs 200 + + # Then verify the proxy contract + forge verify-contract $proxy_address contracts/lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol:TransparentUpgradeableProxy --rpc-url $RPC_URL --watch --via-ir --compiler-version "v0.8.12+commit.f00d7308" --optimizer-runs 200 + + if [ $? -eq 0 ]; then + echo "✅ $contract_name verification submitted successfully" + else + echo "❌ $contract_name verification failed" + fi + echo "----------------------------------------" + sleep 2 +} + +# Function to verify a regular contract +verify_contract() { + local contract_name=$1 + local contract_address=$2 + local contract_path=$3 + + echo "Verifying $contract_name..." + echo "Address: $contract_address" + echo "Path: $contract_path" + echo "----------------------------------------" + + forge verify-contract $contract_address $contract_path --rpc-url $RPC_URL --watch --via-ir --compiler-version "v0.8.12+commit.f00d7308" --optimizer-runs 200 + + if [ $? -eq 0 ]; then + echo "✅ $contract_name verification submitted successfully" + else + echo "❌ $contract_name verification failed" + fi + echo "----------------------------------------" + sleep 2 +} + +# Create a log directory if it doesn't exist +mkdir -p logs + +# Redirect all output to both console and log file +exec > >(tee -a "logs/verification_$(date +%Y%m%d_%H%M%S).log") 2>&1 + +echo "Starting contract verification process..." +echo "Time: $(date)" +echo "==========================================" + +# First verify the non-proxy contracts +verify_contract "PauserRegistry" \ + "0x06399b7f1Bc83942F44e6E84c44bd50A39A98d4a" \ + "contracts/lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/permissions/PauserRegistry.sol:PauserRegistry" + +verify_contract "ProxyAdmin" \ + "0x73dfBAB6836B466f66126b749eA83581c021d203" \ + "contracts/lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/proxy/transparent/ProxyAdmin.sol:ProxyAdmin" + +verify_contract "OperatorStateRetriever" \ + "0x38F984394c123375ACb7A638b66a78e2D15c987b" \ + "contracts/lib/eigenlayer-middleware/src/OperatorStateRetriever.sol:OperatorStateRetriever" + +verify_contract "EmptyContract" \ + "0x9547D0e9Aa14Ce946D3EA92e48307069f3F2C0a9" \ + "contracts/lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/test/mocks/EmptyContract.sol:EmptyContract" + +# Then verify the proxy contracts and their implementations +# RegistryCoordinator +verify_proxy "RegistryCoordinator" \ + "0x227327316CA7Ec350bb8651bE940C005f3B50c78" \ + "0x0ebA2dD3ddeB33E7B0F362265DeA4d4ed6FB77Fd" \ + "contracts/lib/eigenlayer-middleware/src/RegistryCoordinator.sol:RegistryCoordinator" + +# BLSApkRegistry +verify_proxy "BLSApkRegistry" \ + "0x132A0B5525170a5e7ca55C9933f4ED501519B229" \ + "0xbE5b158e847e53ff0F76fb89d23a115e45956D67" \ + "contracts/lib/eigenlayer-middleware/src/BLSApkRegistry.sol:BLSApkRegistry" + +# IndexRegistry +verify_proxy "IndexRegistry" \ + "0xDfDc051dF13b3437488a5d29C99A7f8c544a152F" \ + "0x65D92d531C375EDf4f2Da31e97308B9fa3554B20" \ + "contracts/lib/eigenlayer-middleware/src/IndexRegistry.sol:IndexRegistry" + +# StakeRegistry +verify_proxy "StakeRegistry" \ + "0x8Ab6DccB5768f8Da704e1c88a1D9E69e4b67C452" \ + "0x60DaAa39914E086686A9A77a3dA176a33da93c7a" \ + "contracts/lib/eigenlayer-middleware/src/StakeRegistry.sol:StakeRegistry" + +# TangleServiceManager +verify_proxy "TangleServiceManager" \ + "0x2ad7E1CDd225eD5FD86C9cAe60B965d434C02660" \ + "0x4b32ce8bC7d0659830a9B18b84A6CEf3cFA99D5A" \ + "contracts/src/TangleServiceManager.sol:TangleServiceManager" + +echo "==========================================" +echo "Verification process completed" +echo "Time: $(date)" +echo "Please check the log file for detailed results" From 2b145ba4e66713c4e873848a335d7107fb1c3c67 Mon Sep 17 00:00:00 2001 From: Tjemmmic Date: Fri, 15 Nov 2024 15:47:03 -0600 Subject: [PATCH 08/15] fix!: using ecdsa contracts --- Cargo.lock | 1 + .../script/InitializeCoreContracts.s.sol | 96 ++++++++-------- contracts/src/TangleServiceManager.sol | 103 ++++++++++-------- .../src/test/TestTangleServiceManager.sol | 15 +-- contracts/test/TangleServiceManager.t.sol | 1 + 5 files changed, 115 insertions(+), 101 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 499d4b1..ed218a7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -11386,6 +11386,7 @@ dependencies = [ "alloy-contract", "alloy-primitives 0.7.7", "alloy-provider", + "alloy-signer-local", "alloy-sol-types", "async-trait", "blueprint-build-utils", diff --git a/contracts/script/InitializeCoreContracts.s.sol b/contracts/script/InitializeCoreContracts.s.sol index 6650628..3c55351 100644 --- a/contracts/script/InitializeCoreContracts.s.sol +++ b/contracts/script/InitializeCoreContracts.s.sol @@ -10,53 +10,53 @@ import {TangleServiceManager} from "../src/TangleServiceManager.sol"; contract InitializeMiddleware is Script { function run() external { - uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); - vm.startBroadcast(deployerPrivateKey); - - // Load deployed contract addresses from environment variables - address registryCoordinatorAddr = vm.envAddress("REGISTRY_COORDINATOR_ADDRESS"); - address serviceManagerAddr = vm.envAddress("SERVICE_MANAGER_ADDRESS"); - address stakeRegistryAddr = vm.envAddress("STAKE_REGISTRY_ADDRESS"); - address indexRegistryAddr = vm.envAddress("INDEX_REGISTRY_ADDRESS"); - address blsApkRegistryAddr = vm.envAddress("BLS_APK_REGISTRY_ADDRESS"); - - // Initialize contracts - RegistryCoordinator registryCoordinator = RegistryCoordinator(registryCoordinatorAddr); - TangleServiceManager serviceManager = TangleServiceManager(serviceManagerAddr); - StakeRegistry stakeRegistry = StakeRegistry(stakeRegistryAddr); - IndexRegistry indexRegistry = IndexRegistry(indexRegistryAddr); - BLSApkRegistry blsApkRegistry = BLSApkRegistry(blsApkRegistryAddr); - - // Initialize ServiceManager - serviceManager.initialize( - registryCoordinator, - vm.addr(deployerPrivateKey) // owner - ); - - // Initialize quorum parameters for the registries - uint8[] memory quorumNumbers = new uint8[](1); - quorumNumbers[0] = 0; // First quorum - - // Stake Registry parameters - uint96[] memory minimumStakes = new uint96[](1); - minimumStakes[0] = 32 ether; // Minimum stake for quorum 0 - - uint96[] memory strategyWeights = new uint96[](1); - strategyWeights[0] = 1000; // Weight for quorum 0 (in basis points) - - address[] memory strategies = new address[](1); - strategies[0] = address(0); // Replace with actual strategy address - - // Initialize the first quorum - registryCoordinator.initialize( - quorumNumbers, - minimumStakes, - strategies, - strategyWeights - ); - - vm.stopBroadcast(); - - console.log("Middleware contracts initialized successfully"); +// uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); +// vm.startBroadcast(deployerPrivateKey); +// +// // Load deployed contract addresses from environment variables +// address registryCoordinatorAddr = vm.envAddress("REGISTRY_COORDINATOR_ADDRESS"); +// address serviceManagerAddr = vm.envAddress("SERVICE_MANAGER_ADDRESS"); +// address stakeRegistryAddr = vm.envAddress("STAKE_REGISTRY_ADDRESS"); +// address indexRegistryAddr = vm.envAddress("INDEX_REGISTRY_ADDRESS"); +// address blsApkRegistryAddr = vm.envAddress("BLS_APK_REGISTRY_ADDRESS"); +// +// // Initialize contracts +// RegistryCoordinator registryCoordinator = RegistryCoordinator(registryCoordinatorAddr); +// TangleServiceManager serviceManager = TangleServiceManager(serviceManagerAddr); +// StakeRegistry stakeRegistry = StakeRegistry(stakeRegistryAddr); +// IndexRegistry indexRegistry = IndexRegistry(indexRegistryAddr); +// BLSApkRegistry blsApkRegistry = BLSApkRegistry(blsApkRegistryAddr); +// +// // Initialize ServiceManager +// serviceManager.initialize( +// registryCoordinator, +// vm.addr(deployerPrivateKey) // owner +// ); +// +// // Initialize quorum parameters for the registries +// uint8[] memory quorumNumbers = new uint8[](1); +// quorumNumbers[0] = 0; // First quorum +// +// // Stake Registry parameters +// uint96[] memory minimumStakes = new uint96[](1); +// minimumStakes[0] = 32 ether; // Minimum stake for quorum 0 +// +// uint96[] memory strategyWeights = new uint96[](1); +// strategyWeights[0] = 1000; // Weight for quorum 0 (in basis points) +// +// address[] memory strategies = new address[](1); +// strategies[0] = address(0); // Replace with actual strategy address +// +// // Initialize the first quorum +// registryCoordinator.initialize( +// quorumNumbers, +// minimumStakes, +// strategies, +// strategyWeights +// ); +// +// vm.stopBroadcast(); +// +// console.log("Middleware contracts initialized successfully"); } } diff --git a/contracts/src/TangleServiceManager.sol b/contracts/src/TangleServiceManager.sol index 5f3de53..a16c963 100644 --- a/contracts/src/TangleServiceManager.sol +++ b/contracts/src/TangleServiceManager.sol @@ -1,16 +1,14 @@ // SPDX-License-Identifier: MIT OR Apache-2.0 -pragma solidity >=0.8.12; +pragma solidity >=0.8.0; // ============ Internal Imports ============ import {Enrollment, EnrollmentStatus, EnumerableMapEnrollment} from "./libs/EnumerableMapEnrollment.sol"; -import {IAVSDirectory} from "../lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IAVSDirectory.sol"; -import {IRegistryCoordinator} from "../lib/eigenlayer-middleware/src/interfaces/IRegistryCoordinator.sol"; +import {IAVSDirectory} from "./interfaces/vendored/IAVSDirectory.sol"; +import {ISlasher} from "./interfaces/vendored/ISlasher.sol"; +import {ECDSAServiceManagerBase} from "./ECDSAServiceManagerBase.sol"; import {IRemoteChallenger} from "./interfaces/IRemoteChallenger.sol"; -import {ISlasher} from "../lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/ISlasher.sol"; -import {IStakeRegistry} from "../lib/eigenlayer-middleware/src/interfaces/IStakeRegistry.sol"; -import {ServiceManagerBase} from "../lib/eigenlayer-middleware/src/ServiceManagerBase.sol"; -contract TangleServiceManager is ServiceManagerBase { +contract TangleServiceManager is ECDSAServiceManagerBase { // ============ Libraries ============ using EnumerableMapEnrollment for EnumerableMapEnrollment.AddressToEnrollmentMap; @@ -18,19 +16,8 @@ contract TangleServiceManager is ServiceManagerBase { // ============ Public Storage ============ // Slasher contract responsible for slashing operators - ISlasher internal immutable slasher; - - // Mapping of operators to challengers they are enrolled in (enumerable required for remove-all) - mapping(address => EnumerableMapEnrollment.AddressToEnrollmentMap) internal enrolledChallengers; - - // Mapping to store operator keys - mapping(address => OperatorKeys) public operatorKeys; - - // Structure to store operator keys - struct OperatorKeys { - bytes validatorKeys; - bytes32 accountKey; - } + // @dev slasher needs to be updated once slashing is implemented + ISlasher internal slasher; // ============ Events ============ @@ -62,13 +49,10 @@ contract TangleServiceManager is ServiceManagerBase { address operator, IRemoteChallenger challenger, uint256 unenrollmentEndBlock ); - /** - * @notice Event emitted when an operator sets their keys - * @param operator The address of the operator - * @param validatorKeys The validator key set by the operator - * @param accountKey The account key set by the operator - */ - event OperatorKeysSet(address indexed operator, bytes validatorKeys, bytes32 accountKey); + // ============ Internal Storage ============ + + // Mapping of operators to challengers they are enrolled in (enumerable required for remove-all) + mapping(address => EnumerableMapEnrollment.AddressToEnrollmentMap) internal enrolledChallengers; // ============ Modifiers ============ @@ -82,16 +66,23 @@ contract TangleServiceManager is ServiceManagerBase { // ============ Constructor ============ constructor( - IAVSDirectory _avsDirectory, - IRegistryCoordinator _registryCoordinator, - IStakeRegistry _stakeRegistry, - ISlasher _slasher - ) ServiceManagerBase(_avsDirectory, _registryCoordinator, _stakeRegistry) { - slasher = _slasher; - } + address _avsDirectory, + address _stakeRegistry, + address _delegationManager + ) + ECDSAServiceManagerBase( + _avsDirectory, + _stakeRegistry, + address(0), // payment coordinator is not used + _delegationManager + ) + {} - function initialize(address initialOwner) external initializer { - __ServiceManagerBase_init(initialOwner); + /** + * @notice Initializes the TangleServiceManager contract with the owner address + */ + function initialize(address _owner) public initializer { + __ServiceManagerBase_init(_owner); } // ============ External Functions ============ @@ -124,6 +115,14 @@ contract TangleServiceManager is ServiceManagerBase { _completeUnenrollment(msg.sender, _challengers); } + /** + * @notice Sets the slasher contract responsible for slashing operators + * @param _slasher The address of the slasher contract + */ + function setSlasher(ISlasher _slasher) external onlyOwner { + slasher = _slasher; + } + /** * @notice returns the status of a challenger an operator is enrolled in * @param _operator The address of the operator @@ -223,14 +222,30 @@ contract TangleServiceManager is ServiceManagerBase { emit OperatorUnenrolledFromChallenger(operator, challenger, block.number); } -// /// @inheritdoc ServiceManagerBase -// function _deregisterOperatorFromAVS(address operator) internal virtual override { -// address[] memory challengers = getOperatorChallengers(operator); -// _completeUnenrollment(operator, challengers); -// -// IAVSDirectory(_avsDirectory).deregisterOperatorFromAVS(operator); -// emit OperatorDeregisteredFromAVS(operator); -// } + /// @inheritdoc ECDSAServiceManagerBase + function _deregisterOperatorFromAVS(address operator) internal virtual override { + address[] memory challengers = getOperatorChallengers(operator); + _completeUnenrollment(operator, challengers); + + IAVSDirectory(avsDirectory).deregisterOperatorFromAVS(operator); + emit OperatorDeregisteredFromAVS(operator); + } + + /// Tangle Cross-chain Registration logic + /// @notice Struct to hold operator keys + struct OperatorKeys { + bytes validatorKeys; + bytes32 accountKey; + } + + /// @notice Mapping to store operator keys + mapping(address => OperatorKeys) public operatorKeys; + + /// @notice Event emitted when an operator sets their keys + /// @param operator The address of the operator + /// @param validatorKeys The validator key set by the operator + /// @param accountKey The account key set by the operator + event OperatorKeysSet(address indexed operator, bytes validatorKeys, bytes32 accountKey); /// @notice Allows an operator to set their validator and account keys /// @param _validatorKeys The validator keys for the operator diff --git a/contracts/src/test/TestTangleServiceManager.sol b/contracts/src/test/TestTangleServiceManager.sol index c17c6b8..db6aba1 100644 --- a/contracts/src/test/TestTangleServiceManager.sol +++ b/contracts/src/test/TestTangleServiceManager.sol @@ -3,20 +3,17 @@ pragma solidity >=0.8.0; import {Enrollment, EnrollmentStatus, EnumerableMapEnrollment} from "../libs/EnumerableMapEnrollment.sol"; import {TangleServiceManager} from "../TangleServiceManager.sol"; -import {IRegistryCoordinator} from "../../lib/eigenlayer-middleware/src/interfaces/IRegistryCoordinator.sol"; -import {IAVSDirectory} from "../../lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IAVSDirectory.sol"; -import {ISlasher} from "../../lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/ISlasher.sol"; -import {IStakeRegistry} from "../../lib/eigenlayer-middleware/src/interfaces/IStakeRegistry.sol"; contract TestTangleServiceManager is TangleServiceManager { using EnumerableMapEnrollment for EnumerableMapEnrollment.AddressToEnrollmentMap; constructor( - IAVSDirectory _avsDirectory, - IRegistryCoordinator _registryCoordinator, - IStakeRegistry _stakeRegistry, - ISlasher _slasher - ) TangleServiceManager(_avsDirectory, _registryCoordinator, _stakeRegistry, _slasher) {} + address _avsDirectory, + address _stakeRegistry, + address _paymentCoordinator, + address _delegationManager, + address _mailbox + ) TangleServiceManager(_avsDirectory, _stakeRegistry, _delegationManager) {} function mockSetUnenrolled(address operator, address challenger) external { enrolledChallengers[operator].set(address(challenger), Enrollment(EnrollmentStatus.UNENROLLED, 0)); diff --git a/contracts/test/TangleServiceManager.t.sol b/contracts/test/TangleServiceManager.t.sol index b9f39a3..e8b207e 100644 --- a/contracts/test/TangleServiceManager.t.sol +++ b/contracts/test/TangleServiceManager.t.sol @@ -53,6 +53,7 @@ contract TangleServiceManagerTest is EigenlayerBase { address(_mailbox) ); _tsm.initialize(address(this)); + _tsm.setSlasher(slasher); IStrategy mockStrategy = IStrategy(address(0x1234)); Quorum memory quorum = Quorum({strategies: new StrategyParams[](1)}); From 680cfc558899a8188956249c21c7033ec63d2998 Mon Sep 17 00:00:00 2001 From: Tjemmmic Date: Fri, 15 Nov 2024 17:38:00 -0600 Subject: [PATCH 09/15] fix: fix local test with contract amendments --- Cargo.lock | 386 +++++++++++---------- Cargo.toml | 2 + contracts/script/DeployCoreContracts.s.sol | 370 ++++++++++---------- src/error.rs | 20 ++ src/lib.rs | 5 +- src/tests.rs | 64 ++-- src/utils/constants.rs | 3 +- src/utils/eigenlayer.rs | 121 +++++++ src/utils/mod.rs | 1 + 9 files changed, 571 insertions(+), 401 deletions(-) create mode 100644 src/error.rs create mode 100644 src/utils/eigenlayer.rs diff --git a/Cargo.lock b/Cargo.lock index ed218a7..f211476 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -167,7 +167,7 @@ dependencies = [ "alloy-transport", "futures", "futures-util", - "thiserror", + "thiserror 1.0.66", ] [[package]] @@ -223,7 +223,7 @@ dependencies = [ "alloy-primitives 0.7.7", "serde", "serde_json", - "thiserror", + "thiserror 1.0.66", "tracing", ] @@ -244,7 +244,7 @@ dependencies = [ "async-trait", "auto_impl", "futures-utils-wasm", - "thiserror", + "thiserror 1.0.66", ] [[package]] @@ -358,7 +358,7 @@ checksum = "2b09cae092c27b6f1bde952653a22708691802e57bfef4a2973b80bea21efd3f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -411,7 +411,7 @@ dependencies = [ "itertools 0.13.0", "serde", "serde_json", - "thiserror", + "thiserror 1.0.66", ] [[package]] @@ -436,7 +436,7 @@ dependencies = [ "auto_impl", "elliptic-curve", "k256", - "thiserror", + "thiserror 1.0.66", ] [[package]] @@ -453,7 +453,7 @@ dependencies = [ "aws-sdk-kms", "k256", "spki", - "thiserror", + "thiserror 1.0.66", "tracing", ] @@ -470,7 +470,7 @@ dependencies = [ "async-trait", "k256", "rand", - "thiserror", + "thiserror 1.0.66", ] [[package]] @@ -484,7 +484,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -501,7 +501,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", "syn-solidity", "tiny-keccak", ] @@ -519,7 +519,7 @@ dependencies = [ "proc-macro2", "quote", "serde_json", - "syn 2.0.86", + "syn 2.0.87", "syn-solidity", ] @@ -558,7 +558,7 @@ dependencies = [ "futures-utils-wasm", "serde", "serde_json", - "thiserror", + "thiserror 1.0.66", "tokio", "tower", "tracing", @@ -943,7 +943,7 @@ dependencies = [ "nom", "num-traits", "rusticata-macros", - "thiserror", + "thiserror 1.0.66", "time", ] @@ -955,7 +955,7 @@ checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", "synstructure 0.13.1", ] @@ -967,7 +967,7 @@ checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -1115,7 +1115,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -1132,7 +1132,7 @@ checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -1231,7 +1231,7 @@ checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -1605,7 +1605,7 @@ dependencies = [ "regex", "rustc-hash 1.1.0", "shlex", - "syn 2.0.86", + "syn 2.0.87", "which", ] @@ -1812,7 +1812,7 @@ dependencies = [ "subxt", "tempfile", "testcontainers", - "thiserror", + "thiserror 1.0.66", "tokio", "tracing", "url", @@ -1850,7 +1850,7 @@ dependencies = [ "serde_json", "serde_repr", "serde_urlencoded", - "thiserror", + "thiserror 1.0.66", "tokio", "tokio-util", "tower-service", @@ -2021,7 +2021,7 @@ dependencies = [ "semver 1.0.23", "serde", "tempfile", - "thiserror", + "thiserror 1.0.66", "time", "toml", "walkdir", @@ -2075,7 +2075,7 @@ dependencies = [ "semver 1.0.23", "serde", "serde_json", - "thiserror", + "thiserror 1.0.66", ] [[package]] @@ -2263,7 +2263,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -2294,7 +2294,7 @@ dependencies = [ "k256", "serde", "sha2 0.10.8", - "thiserror", + "thiserror 1.0.66", ] [[package]] @@ -2310,7 +2310,7 @@ dependencies = [ "pbkdf2 0.12.2", "rand", "sha2 0.10.8", - "thiserror", + "thiserror 1.0.66", ] [[package]] @@ -2330,7 +2330,7 @@ dependencies = [ "serde_derive", "sha2 0.10.8", "sha3", - "thiserror", + "thiserror 1.0.66", ] [[package]] @@ -2624,7 +2624,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edb49164822f3ee45b17acd4a208cfc1251410cf0cad9a833234c9890774dd9f" dependencies = [ "quote", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -2683,7 +2683,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -2740,7 +2740,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.11.1", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -2762,7 +2762,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core 0.20.10", "quote", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -2858,7 +2858,7 @@ checksum = "d65d7ce8132b7c0e54497a4d9a55a1c2a0912a0d786cf894472ba818fba45762" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -2869,7 +2869,7 @@ checksum = "62d671cc41a825ebabc75757b62d3d168c577f9149b2d49ece1dad1f72119d25" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -2882,7 +2882,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version 0.4.1", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -2902,7 +2902,7 @@ checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", "unicode-xid", ] @@ -2915,7 +2915,7 @@ dependencies = [ "console", "shell-words", "tempfile", - "thiserror", + "thiserror 1.0.66", "zeroize", ] @@ -2990,7 +2990,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -3020,7 +3020,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.86", + "syn 2.0.87", "termcolor", "toml", "walkdir", @@ -3188,7 +3188,7 @@ dependencies = [ "eigen-signer", "k256", "reqwest 0.12.9", - "thiserror", + "thiserror 1.0.66", ] [[package]] @@ -3211,7 +3211,7 @@ dependencies = [ "eigen-types", "eigen-utils", "num-bigint 0.4.6", - "thiserror", + "thiserror 1.0.66", "tracing", ] @@ -3226,7 +3226,7 @@ dependencies = [ "eigen-logging", "eigen-types", "eigen-utils", - "thiserror", + "thiserror 1.0.66", "tracing", ] @@ -3251,7 +3251,7 @@ dependencies = [ "eigen-logging", "eigen-metrics-collectors-rpc-calls", "hex", - "thiserror", + "thiserror 1.0.66", "url", ] @@ -3275,7 +3275,7 @@ dependencies = [ "serde", "serde_json", "sha2 0.10.8", - "thiserror", + "thiserror 1.0.66", "uuid 1.11.0", ] @@ -3300,7 +3300,7 @@ dependencies = [ "eigen-crypto-bn254", "eigen-utils", "serde", - "thiserror", + "thiserror 1.0.66", ] [[package]] @@ -3359,7 +3359,7 @@ dependencies = [ "ntex", "serde", "serde_json", - "thiserror", + "thiserror 1.0.66", "tracing", ] @@ -3397,7 +3397,7 @@ dependencies = [ "parking_lot", "serde", "serde_json", - "thiserror", + "thiserror 1.0.66", "tokio", ] @@ -3418,7 +3418,7 @@ dependencies = [ "eigen-types", "eigen-utils", "futures-util", - "thiserror", + "thiserror 1.0.66", "tokio", "tokio-util", ] @@ -3440,7 +3440,7 @@ dependencies = [ "aws-sdk-kms", "eth-keystore", "serde", - "thiserror", + "thiserror 1.0.66", "url", ] @@ -3473,7 +3473,7 @@ dependencies = [ "eigen-crypto-bls", "ethers", "num-bigint 0.4.6", - "thiserror", + "thiserror 1.0.66", "tokio", ] @@ -3607,7 +3607,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -3620,7 +3620,7 @@ dependencies = [ "num-traits", "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -3709,7 +3709,7 @@ dependencies = [ "serde_json", "sha2 0.10.8", "sha3", - "thiserror", + "thiserror 1.0.66", "uuid 0.8.2", ] @@ -3726,7 +3726,7 @@ dependencies = [ "serde", "serde_json", "sha3", - "thiserror", + "thiserror 1.0.66", "uint", ] @@ -3805,7 +3805,7 @@ dependencies = [ "pin-project", "serde", "serde_json", - "thiserror", + "thiserror 1.0.66", ] [[package]] @@ -3827,7 +3827,7 @@ dependencies = [ "reqwest 0.11.27", "serde", "serde_json", - "syn 2.0.86", + "syn 2.0.87", "toml", "walkdir", ] @@ -3845,7 +3845,7 @@ dependencies = [ "proc-macro2", "quote", "serde_json", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -3871,9 +3871,9 @@ dependencies = [ "serde", "serde_json", "strum", - "syn 2.0.86", + "syn 2.0.87", "tempfile", - "thiserror", + "thiserror 1.0.66", "tiny-keccak", "unicode-xid", ] @@ -3890,7 +3890,7 @@ dependencies = [ "semver 1.0.23", "serde", "serde_json", - "thiserror", + "thiserror 1.0.66", "tracing", ] @@ -3914,7 +3914,7 @@ dependencies = [ "reqwest 0.11.27", "serde", "serde_json", - "thiserror", + "thiserror 1.0.66", "tokio", "tracing", "tracing-futures", @@ -3946,7 +3946,7 @@ dependencies = [ "reqwest 0.11.27", "serde", "serde_json", - "thiserror", + "thiserror 1.0.66", "tokio", "tokio-tungstenite 0.20.1", "tracing", @@ -3973,7 +3973,7 @@ dependencies = [ "ethers-core", "rand", "sha2 0.10.8", - "thiserror", + "thiserror 1.0.66", "tracing", ] @@ -4001,7 +4001,7 @@ dependencies = [ "serde_json", "solang-parser", "svm-rs", - "thiserror", + "thiserror 1.0.66", "tiny-keccak", "tokio", "tracing", @@ -4058,7 +4058,7 @@ dependencies = [ "prettyplease", "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -4402,7 +4402,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -4493,7 +4493,7 @@ dependencies = [ "proc-macro2", "quote", "serde_json", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -4513,7 +4513,7 @@ source = "git+https://github.com/webb-tools/gadget#0f9c6feec49d955187594214d0494 dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -4532,7 +4532,7 @@ dependencies = [ "sp-application-crypto", "sp-core", "sp-keystore", - "thiserror", + "thiserror 1.0.66", "tokio", "tracing", "url", @@ -4601,7 +4601,7 @@ dependencies = [ "symbiotic-rs", "sysinfo", "tangle-subxt", - "thiserror", + "thiserror 1.0.66", "tokio", "tokio-retry", "tokio-stream", @@ -4696,7 +4696,7 @@ dependencies = [ "gix-date", "gix-utils", "itoa", - "thiserror", + "thiserror 1.0.66", "winnow", ] @@ -4716,7 +4716,7 @@ dependencies = [ "memchr", "once_cell", "smallvec", - "thiserror", + "thiserror 1.0.66", "unicode-bom", "winnow", ] @@ -4731,7 +4731,7 @@ dependencies = [ "bstr", "gix-path", "libc", - "thiserror", + "thiserror 1.0.66", ] [[package]] @@ -4742,7 +4742,7 @@ checksum = "9eed6931f21491ee0aeb922751bd7ec97b4b2fe8fbfedcb678e2a2dce5f3b8c0" dependencies = [ "bstr", "itoa", - "thiserror", + "thiserror 1.0.66", "time", ] @@ -4791,7 +4791,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f93d7df7366121b5018f947a04d37f034717e113dcf9ccd85c34b58e57a74d5e" dependencies = [ "faster-hex", - "thiserror", + "thiserror 1.0.66", ] [[package]] @@ -4802,7 +4802,7 @@ checksum = "e3bc7fe297f1f4614774989c00ec8b1add59571dc9b024b4c00acb7dedd4e19d" dependencies = [ "gix-tempfile", "gix-utils", - "thiserror", + "thiserror 1.0.66", ] [[package]] @@ -4820,7 +4820,7 @@ dependencies = [ "gix-validate", "itoa", "smallvec", - "thiserror", + "thiserror 1.0.66", "winnow", ] @@ -4834,7 +4834,7 @@ dependencies = [ "gix-trace", "home", "once_cell", - "thiserror", + "thiserror 1.0.66", ] [[package]] @@ -4855,7 +4855,7 @@ dependencies = [ "gix-utils", "gix-validate", "memmap2", - "thiserror", + "thiserror 1.0.66", "winnow", ] @@ -4907,7 +4907,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "82c27dd34a49b1addf193c92070bcbf3beaf6e10f16a78544de6372e146a0acf" dependencies = [ "bstr", - "thiserror", + "thiserror 1.0.66", ] [[package]] @@ -5153,7 +5153,7 @@ dependencies = [ "once_cell", "rand", "socket2", - "thiserror", + "thiserror 1.0.66", "tinyvec", "tokio", "tracing", @@ -5176,7 +5176,7 @@ dependencies = [ "rand", "resolv-conf", "smallvec", - "thiserror", + "thiserror 1.0.66", "tokio", "tracing", ] @@ -5804,7 +5804,7 @@ dependencies = [ "combine", "jni-sys", "log", - "thiserror", + "thiserror 1.0.66", "walkdir", ] @@ -5868,7 +5868,7 @@ dependencies = [ "rustls-native-certs 0.7.3", "rustls-pki-types", "soketto 0.7.1", - "thiserror", + "thiserror 1.0.66", "tokio", "tokio-rustls 0.25.0", "tokio-util", @@ -5891,7 +5891,7 @@ dependencies = [ "rustls-pki-types", "rustls-platform-verifier", "soketto 0.8.0", - "thiserror", + "thiserror 1.0.66", "tokio", "tokio-rustls 0.26.0", "tokio-util", @@ -5916,7 +5916,7 @@ dependencies = [ "rustc-hash 1.1.0", "serde", "serde_json", - "thiserror", + "thiserror 1.0.66", "tokio", "tokio-stream", "tracing", @@ -5938,7 +5938,7 @@ dependencies = [ "rustc-hash 1.1.0", "serde", "serde_json", - "thiserror", + "thiserror 1.0.66", "tokio", "tokio-stream", "tracing", @@ -5957,7 +5957,7 @@ dependencies = [ "jsonrpsee-types 0.22.5", "serde", "serde_json", - "thiserror", + "thiserror 1.0.66", "tokio", "tower", "tracing", @@ -5974,7 +5974,7 @@ dependencies = [ "beef", "serde", "serde_json", - "thiserror", + "thiserror 1.0.66", ] [[package]] @@ -5987,7 +5987,7 @@ dependencies = [ "http 1.1.0", "serde", "serde_json", - "thiserror", + "thiserror 1.0.66", ] [[package]] @@ -6191,7 +6191,7 @@ dependencies = [ "multiaddr", "pin-project", "rw-stream-sink", - "thiserror", + "thiserror 1.0.66", ] [[package]] @@ -6227,7 +6227,7 @@ dependencies = [ "quick-protobuf-codec", "rand", "rand_core 0.6.4", - "thiserror", + "thiserror 1.0.66", "tracing", "void", "web-time", @@ -6266,7 +6266,7 @@ dependencies = [ "rand", "rw-stream-sink", "smallvec", - "thiserror", + "thiserror 1.0.66", "tracing", "unsigned-varint 0.8.0", "void", @@ -6290,7 +6290,7 @@ dependencies = [ "lru", "quick-protobuf", "quick-protobuf-codec", - "thiserror", + "thiserror 1.0.66", "tracing", "void", "web-time", @@ -6361,7 +6361,7 @@ dependencies = [ "quick-protobuf", "quick-protobuf-codec", "smallvec", - "thiserror", + "thiserror 1.0.66", "tracing", "void", ] @@ -6379,7 +6379,7 @@ dependencies = [ "quick-protobuf", "rand", "sha2 0.10.8", - "thiserror", + "thiserror 1.0.66", "tracing", "zeroize", ] @@ -6406,7 +6406,7 @@ dependencies = [ "rand", "sha2 0.10.8", "smallvec", - "thiserror", + "thiserror 1.0.66", "tracing", "uint", "void", @@ -6475,7 +6475,7 @@ dependencies = [ "sha2 0.10.8", "snow", "static_assertions", - "thiserror", + "thiserror 1.0.66", "tracing", "x25519-dalek", "zeroize", @@ -6518,7 +6518,7 @@ dependencies = [ "ring 0.17.8", "rustls 0.23.16", "socket2", - "thiserror", + "thiserror 1.0.66", "tokio", "tracing", ] @@ -6542,7 +6542,7 @@ dependencies = [ "quick-protobuf-codec", "rand", "static_assertions", - "thiserror", + "thiserror 1.0.66", "tracing", "void", "web-time", @@ -6603,7 +6603,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -6637,7 +6637,7 @@ dependencies = [ "ring 0.17.8", "rustls 0.23.16", "rustls-webpki 0.101.7", - "thiserror", + "thiserror 1.0.66", "x509-parser", "yasna", ] @@ -6667,7 +6667,7 @@ dependencies = [ "either", "futures", "libp2p-core", - "thiserror", + "thiserror 1.0.66", "tracing", "yamux 0.12.1", "yamux 0.13.3", @@ -6825,7 +6825,7 @@ checksum = "3b51f1d220e3fa869e24cfd75915efe3164bd09bb11b3165db3f37f57bf673e3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -7000,7 +7000,7 @@ dependencies = [ "metrics", "metrics-util", "quanta", - "thiserror", + "thiserror 1.0.66", "tokio", "tracing", ] @@ -7194,7 +7194,7 @@ dependencies = [ "anyhow", "byteorder", "paste", - "thiserror", + "thiserror 1.0.66", ] [[package]] @@ -7208,7 +7208,7 @@ dependencies = [ "log", "netlink-packet-core", "netlink-sys", - "thiserror", + "thiserror 1.0.66", "tokio", ] @@ -7356,7 +7356,7 @@ dependencies = [ "serde_json", "serde_urlencoded", "sha-1 0.10.1", - "thiserror", + "thiserror 1.0.66", ] [[package]] @@ -7398,7 +7398,7 @@ dependencies = [ "ntex-service", "ntex-util", "pin-project-lite", - "thiserror", + "thiserror 1.0.66", ] [[package]] @@ -7456,7 +7456,7 @@ dependencies = [ "ntex-service", "ntex-tokio", "ntex-util", - "thiserror", + "thiserror 1.0.66", ] [[package]] @@ -7694,7 +7694,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -7808,7 +7808,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -7963,7 +7963,7 @@ dependencies = [ "regex", "regex-syntax 0.8.5", "structmeta", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -8093,7 +8093,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "879952a81a83930934cbf1786752d6dedc3b1f29e8f8fb2ad1d0a36f377cf442" dependencies = [ "memchr", - "thiserror", + "thiserror 1.0.66", "ucd-trie", ] @@ -8117,7 +8117,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -8190,7 +8190,7 @@ dependencies = [ "phf_shared 0.11.2", "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -8228,7 +8228,7 @@ checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -8320,7 +8320,7 @@ dependencies = [ "polkavm-common 0.8.0", "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -8332,7 +8332,7 @@ dependencies = [ "polkavm-common 0.9.0", "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -8342,7 +8342,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "15e85319a0d5129dc9f021c62607e0804f5fb777a05cdda44d750ac0732def66" dependencies = [ "polkavm-derive-impl 0.8.0", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -8352,7 +8352,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ba81f7b5faac81e528eb6158a6f3c9e0bb1008e0ffa19653bc8dea925ecb429" dependencies = [ "polkavm-derive-impl 0.9.0", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -8427,7 +8427,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033" dependencies = [ "proc-macro2", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -8503,7 +8503,7 @@ dependencies = [ "lazy_static", "memchr", "parking_lot", - "thiserror", + "thiserror 1.0.66", ] [[package]] @@ -8526,7 +8526,7 @@ checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -8597,7 +8597,7 @@ dependencies = [ "asynchronous-codec", "bytes", "quick-protobuf", - "thiserror", + "thiserror 1.0.66", "unsigned-varint 0.8.0", ] @@ -8615,7 +8615,7 @@ dependencies = [ "rustc-hash 2.0.0", "rustls 0.23.16", "socket2", - "thiserror", + "thiserror 1.0.66", "tokio", "tracing", ] @@ -8632,7 +8632,7 @@ dependencies = [ "rustc-hash 2.0.0", "rustls 0.23.16", "slab", - "thiserror", + "thiserror 1.0.66", "tinyvec", "tracing", ] @@ -8773,7 +8773,7 @@ dependencies = [ "futures", "jsonrpsee 0.23.2", "serde_json", - "thiserror", + "thiserror 1.0.66", "tokio", "tracing", ] @@ -8795,7 +8795,7 @@ checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ "getrandom", "libredox", - "thiserror", + "thiserror 1.0.66", ] [[package]] @@ -8815,7 +8815,7 @@ checksum = "bcc303e793d3734489387d205e9b186fac9c6cfacedd98cbb2e8a5943595f3e6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -9021,7 +9021,7 @@ checksum = "a5a11a05ee1ce44058fa3d5961d05194fdbe3ad6b40f904af764d81b86450e6b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -9095,7 +9095,7 @@ dependencies = [ "futures-util", "phantom-type", "round-based-derive", - "thiserror", + "thiserror 1.0.66", "tracing", ] @@ -9141,7 +9141,7 @@ dependencies = [ "netlink-packet-route", "netlink-proto", "nix 0.24.3", - "thiserror", + "thiserror 1.0.66", "tokio", ] @@ -9198,7 +9198,7 @@ dependencies = [ "serde", "serde_json", "sha2 0.10.8", - "thiserror", + "thiserror 1.0.66", "unicode-normalization", "uuid 0.8.2", ] @@ -9520,7 +9520,7 @@ dependencies = [ "sp-application-crypto", "sp-core", "sp-keystore", - "thiserror", + "thiserror 1.0.66", ] [[package]] @@ -9587,7 +9587,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -9613,7 +9613,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -9635,8 +9635,8 @@ dependencies = [ "proc-macro2", "quote", "scale-info", - "syn 2.0.86", - "thiserror", + "syn 2.0.87", + "thiserror 1.0.66", ] [[package]] @@ -9870,7 +9870,7 @@ checksum = "de523f781f095e28fa605cdce0f8307e451cc0fd14e2eb4cd2e98a355b147766" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -9893,7 +9893,7 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -9944,7 +9944,7 @@ dependencies = [ "darling 0.20.10", "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -10117,7 +10117,7 @@ checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" dependencies = [ "num-bigint 0.4.6", "num-traits", - "thiserror", + "thiserror 1.0.66", "time", ] @@ -10340,7 +10340,7 @@ dependencies = [ "lalrpop", "lalrpop-util", "phf", - "thiserror", + "thiserror 1.0.66", "unicode-xid", ] @@ -10414,7 +10414,7 @@ dependencies = [ "sp-storage", "ss58-registry", "substrate-bip39", - "thiserror", + "thiserror 1.0.66", "tracing", "w3f-bls", "zeroize", @@ -10442,7 +10442,7 @@ checksum = "48d09fa0a5f7299fb81ee25ae3853d26200f7a348148aed6de76be905c007dbe" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -10563,7 +10563,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -10583,7 +10583,7 @@ dependencies = [ "sp-panic-handler", "sp-std", "sp-trie", - "thiserror", + "thiserror 1.0.66", "tracing", "trie-db", ] @@ -10640,7 +10640,7 @@ dependencies = [ "sp-core", "sp-externalities", "sp-std", - "thiserror", + "thiserror 1.0.66", "tracing", "trie-db", "trie-root", @@ -10759,7 +10759,7 @@ dependencies = [ "sha2 0.10.8", "smallvec", "sqlformat", - "thiserror", + "thiserror 1.0.66", "tokio", "tokio-stream", "tracing", @@ -10843,7 +10843,7 @@ dependencies = [ "smallvec", "sqlx-core", "stringprep", - "thiserror", + "thiserror 1.0.66", "tracing", "whoami", ] @@ -10882,7 +10882,7 @@ dependencies = [ "smallvec", "sqlx-core", "stringprep", - "thiserror", + "thiserror 1.0.66", "tracing", "whoami", ] @@ -10988,7 +10988,7 @@ dependencies = [ "proc-macro2", "quote", "structmeta-derive", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -10999,7 +10999,7 @@ checksum = "152a0b65a590ff6c3da95cabe2353ee04e6167c896b28e3b14478c2636c922fc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -11045,7 +11045,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -11097,7 +11097,7 @@ dependencies = [ "subxt-lightclient", "subxt-macro", "subxt-metadata", - "thiserror", + "thiserror 1.0.66", "tokio-util", "tracing", "url", @@ -11119,8 +11119,8 @@ dependencies = [ "scale-info", "scale-typegen", "subxt-metadata", - "syn 2.0.86", - "thiserror", + "syn 2.0.87", + "thiserror 1.0.66", "tokio", ] @@ -11164,7 +11164,7 @@ dependencies = [ "serde", "serde_json", "smoldot-light", - "thiserror", + "thiserror 1.0.66", "tokio", "tokio-stream", "tracing", @@ -11182,7 +11182,7 @@ dependencies = [ "quote", "scale-typegen", "subxt-codegen", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -11235,7 +11235,7 @@ dependencies = [ "serde", "serde_json", "sha2 0.10.8", - "thiserror", + "thiserror 1.0.66", "url", "zip", ] @@ -11264,9 +11264,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.86" +version = "2.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89275301d38033efb81a6e60e3497e734dfcc62571f2854bf4b16690398824c" +checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" dependencies = [ "proc-macro2", "quote", @@ -11282,7 +11282,7 @@ dependencies = [ "paste", "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -11320,7 +11320,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -11386,6 +11386,7 @@ dependencies = [ "alloy-contract", "alloy-primitives 0.7.7", "alloy-provider", + "alloy-signer", "alloy-signer-local", "alloy-sol-types", "async-trait", @@ -11404,6 +11405,7 @@ dependencies = [ "serde_json", "structopt", "tempfile", + "thiserror 2.0.3", "tokio", "tokio-retry", "tracing", @@ -11512,7 +11514,7 @@ dependencies = [ "serde", "serde_json", "serde_with", - "thiserror", + "thiserror 1.0.66", "tokio", "tokio-stream", "tokio-util", @@ -11540,7 +11542,16 @@ version = "1.0.66" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d171f59dbaa811dbbb1aee1e73db92ec2b122911a48e1390dfe327a821ddede" dependencies = [ - "thiserror-impl", + "thiserror-impl 1.0.66", +] + +[[package]] +name = "thiserror" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c006c85c7651b3cf2ada4584faa36773bd07bac24acfb39f3c431b36d7e667aa" +dependencies = [ + "thiserror-impl 2.0.3", ] [[package]] @@ -11551,7 +11562,18 @@ checksum = "b08be0f17bd307950653ce45db00cd31200d82b624b36e181337d9c7d92765b5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f077553d607adc1caf65430528a576c757a71ed73944b66ebb58ef2bbd243568" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", ] [[package]] @@ -11656,7 +11678,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -11851,7 +11873,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -12003,7 +12025,7 @@ dependencies = [ "rand", "rustls 0.21.12", "sha1", - "thiserror", + "thiserror 1.0.66", "url", "utf-8", ] @@ -12024,7 +12046,7 @@ dependencies = [ "rustls 0.23.16", "rustls-pki-types", "sha1", - "thiserror", + "thiserror 1.0.66", "utf-8", ] @@ -12266,7 +12288,7 @@ dependencies = [ "rand_core 0.6.4", "sha2 0.10.8", "sha3", - "thiserror", + "thiserror 1.0.66", "zeroize", ] @@ -12332,7 +12354,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", "wasm-bindgen-shared", ] @@ -12366,7 +12388,7 @@ checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -12475,7 +12497,7 @@ dependencies = [ "object 0.30.4", "serde", "target-lexicon", - "thiserror", + "thiserror 1.0.66", "wasmparser", "wasmtime-types", ] @@ -12555,7 +12577,7 @@ checksum = "a4f6fffd2a1011887d57f07654dd112791e872e3ff4a2e626aee8059ee17f06f" dependencies = [ "cranelift-entity", "serde", - "thiserror", + "thiserror 1.0.66", "wasmparser", ] @@ -12711,7 +12733,7 @@ checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -12722,7 +12744,7 @@ checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -13010,7 +13032,7 @@ dependencies = [ "pharos", "rustc_version 0.4.1", "send_wrapper 0.6.0", - "thiserror", + "thiserror 1.0.66", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -13050,7 +13072,7 @@ dependencies = [ "nom", "oid-registry", "rusticata-macros", - "thiserror", + "thiserror 1.0.66", "time", ] @@ -13139,7 +13161,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] @@ -13159,7 +13181,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.87", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 59b3248..1bcb4e4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,11 +21,13 @@ structopt = "0.3.26" tokio = { version = "1.39", default-features = false, features = ["full"] } tokio-retry = "0.3.0" tracing-subscriber = { version = "0.3", features = ["parking_lot", "env-filter"] } +thiserror = "2.0.3" eigensdk = { version = "0.1.0", features = ["full", "utils", "types"] } alloy-primitives = "0.7.2" alloy-provider = { version = "0.1", default-features = false, features = ["reqwest", "ws"] } alloy-sol-types = "0.7.2" alloy-signer-local = "0.1" +alloy-signer = "0.1" alloy-contract = "0.1" lock_api = "0.4.12" parking_lot = "0.12.3" diff --git a/contracts/script/DeployCoreContracts.s.sol b/contracts/script/DeployCoreContracts.s.sol index d41f3f9..2534ff4 100644 --- a/contracts/script/DeployCoreContracts.s.sol +++ b/contracts/script/DeployCoreContracts.s.sol @@ -30,190 +30,190 @@ contract DeployCoreContracts is Script { ProxyAdmin public tangleProxyAdmin; function run() external { - IStrategy[1] memory deployedStrategyArray = [IStrategy(0x80528D6e9A2BAbFc766965E0E26d5aB08D9CFaF9)]; // wETH strategy - uint numStrategies = deployedStrategyArray.length; - - uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); - vm.startBroadcast(deployerPrivateKey); - - // Deploy proxy admin for upgradeability - tangleProxyAdmin = new ProxyAdmin(); - - // Deploy empty contract for initial proxy implementation - EmptyContract emptyContract = new EmptyContract(); - - IDelegationManager delegationManager = IDelegationManager( - 0xA44151489861Fe9e3055d95adC98FbD462B948e7 // Delegation Manager - ); - - // Deploy PauserRegistry first (required by RegistryCoordinator) - address[] memory pausers = new address[](1); - pausers[0] = vm.addr(deployerPrivateKey); // deployer is the pauser - address unpauser = vm.addr(deployerPrivateKey); // deployer is the unpauser - PauserRegistry pauserRegistry = new PauserRegistry(pausers, unpauser); - - // Deploy proxies pointing to empty implementation initially - IServiceManager tangleServiceManager = IServiceManager( - address( - new TransparentUpgradeableProxy( - address(emptyContract), - address(tangleProxyAdmin), - "" - ) - ) - ); - - RegistryCoordinator registryCoordinator = RegistryCoordinator( - address( - new TransparentUpgradeableProxy( - address(emptyContract), - address(tangleProxyAdmin), - "" - ) - ) - ); - - IIndexRegistry indexRegistry = IIndexRegistry( - address( - new TransparentUpgradeableProxy( - address(emptyContract), - address(tangleProxyAdmin), - "" - ) - ) - ); - - IBLSApkRegistry blsApkRegistry = IBLSApkRegistry( - address( - new TransparentUpgradeableProxy( - address(emptyContract), - address(tangleProxyAdmin), - "" - ) - ) - ); - - IStakeRegistry stakeRegistry = IStakeRegistry( - address( - new TransparentUpgradeableProxy( - address(emptyContract), - address(tangleProxyAdmin), - "" - ) - ) - ); - - OperatorStateRetriever operatorStateRetriever = new OperatorStateRetriever(); - - { - // Deploy implementation contracts - StakeRegistry stakeRegistryImplementation = new StakeRegistry( - registryCoordinator, - delegationManager - ); - tangleProxyAdmin.upgrade( - TransparentUpgradeableProxy(payable(address(stakeRegistry))), - address(stakeRegistryImplementation) - ); - - BLSApkRegistry blsApkRegistryImplementation = new BLSApkRegistry( - registryCoordinator - ); - tangleProxyAdmin.upgrade( - TransparentUpgradeableProxy(payable(address(blsApkRegistry))), - address(blsApkRegistryImplementation) - ); - - IndexRegistry indexRegistryImplementation = new IndexRegistry( - registryCoordinator - ); - tangleProxyAdmin.upgrade( - TransparentUpgradeableProxy(payable(address(indexRegistry))), - address(indexRegistryImplementation) - ); - } - - RegistryCoordinator registryCoordinatorImplementation = new RegistryCoordinator( - tangleServiceManager, - IStakeRegistry(stakeRegistry), - IBLSApkRegistry(blsApkRegistry), - IIndexRegistry(indexRegistry) - ); - - { - uint numQuorums = 1; - // Define the following for each quorum - // QuorumOperatorSetParam, minimumStakeForQuorum, and strategyParams - IRegistryCoordinator.OperatorSetParam[] - memory quorumsOperatorSetParams = new IRegistryCoordinator.OperatorSetParam[]( - numQuorums - ); - for (uint i = 0; i < numQuorums; i++) { - quorumsOperatorSetParams[i] = IRegistryCoordinator - .OperatorSetParam({ - maxOperatorCount: 10000, - kickBIPsOfOperatorStake: 15000, - kickBIPsOfTotalStake: 100 - }); - } - // set to 0 for every quorum - uint96[] memory quorumsMinimumStake = new uint96[](numQuorums); - IStakeRegistry.StrategyParams[][] - memory quorumsStrategyParams = new IStakeRegistry.StrategyParams[][]( - numQuorums - ); - for (uint i = 0; i < numQuorums; i++) { - quorumsStrategyParams[i] = new IStakeRegistry.StrategyParams[]( - numStrategies - ); - for (uint j = 0; j < numStrategies; j++) { - quorumsStrategyParams[i][j] = IStakeRegistry - .StrategyParams({ - strategy: deployedStrategyArray[j], - multiplier: 1 ether - }); - } - } - tangleProxyAdmin.upgradeAndCall( - TransparentUpgradeableProxy( - payable(address(registryCoordinator)) - ), - address(registryCoordinatorImplementation), - abi.encodeWithSelector( - RegistryCoordinator.initialize.selector, - vm.addr(deployerPrivateKey), - vm.addr(deployerPrivateKey), - vm.addr(deployerPrivateKey), - pauserRegistry, - 0, // 0 initialPausedStatus means everything unpaused - quorumsOperatorSetParams, - quorumsMinimumStake, - quorumsStrategyParams - ) - ); - } - - ISlasher slasher = ISlasher(address(0)); // TODO: Deploy real slasher - - TangleServiceManager tangleServiceManagerImplementation = new TangleServiceManager( - IAVSDirectory(0x055733000064333CaDDbC92763c58BF0192fFeBf), // AVS Directory - registryCoordinator, - stakeRegistry, - slasher // TODO: Slasher - ); - - vm.stopBroadcast(); - - // Log deployed addresses - console.log("Deployed contracts:"); - console.log("PauserRegistry:", address(pauserRegistry)); - console.log("IndexRegistry:", address(indexRegistry)); - console.log("BLSApkRegistry:", address(blsApkRegistry)); - console.log("StakeRegistry:", address(stakeRegistry)); - console.log("TangleServiceManager:", address(tangleServiceManager)); - console.log("RegistryCoordinator (Proxy):", address(registryCoordinator)); - console.log("RegistryCoordinator (Implementation):", address(registryCoordinatorImplementation)); - console.log("OperatorStateRetriever:", address(operatorStateRetriever)); - console.log("ProxyAdmin:", address(tangleProxyAdmin)); +// IStrategy[1] memory deployedStrategyArray = [IStrategy(0x80528D6e9A2BAbFc766965E0E26d5aB08D9CFaF9)]; // wETH strategy +// uint numStrategies = deployedStrategyArray.length; +// +// uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); +// vm.startBroadcast(deployerPrivateKey); +// +// // Deploy proxy admin for upgradeability +// tangleProxyAdmin = new ProxyAdmin(); +// +// // Deploy empty contract for initial proxy implementation +// EmptyContract emptyContract = new EmptyContract(); +// +// IDelegationManager delegationManager = IDelegationManager( +// 0xA44151489861Fe9e3055d95adC98FbD462B948e7 // Delegation Manager +// ); +// +// // Deploy PauserRegistry first (required by RegistryCoordinator) +// address[] memory pausers = new address[](1); +// pausers[0] = vm.addr(deployerPrivateKey); // deployer is the pauser +// address unpauser = vm.addr(deployerPrivateKey); // deployer is the unpauser +// PauserRegistry pauserRegistry = new PauserRegistry(pausers, unpauser); +// +// // Deploy proxies pointing to empty implementation initially +// IServiceManager tangleServiceManager = IServiceManager( +// address( +// new TransparentUpgradeableProxy( +// address(emptyContract), +// address(tangleProxyAdmin), +// "" +// ) +// ) +// ); +// +// RegistryCoordinator registryCoordinator = RegistryCoordinator( +// address( +// new TransparentUpgradeableProxy( +// address(emptyContract), +// address(tangleProxyAdmin), +// "" +// ) +// ) +// ); +// +// IIndexRegistry indexRegistry = IIndexRegistry( +// address( +// new TransparentUpgradeableProxy( +// address(emptyContract), +// address(tangleProxyAdmin), +// "" +// ) +// ) +// ); +// +// IBLSApkRegistry blsApkRegistry = IBLSApkRegistry( +// address( +// new TransparentUpgradeableProxy( +// address(emptyContract), +// address(tangleProxyAdmin), +// "" +// ) +// ) +// ); +// +// IStakeRegistry stakeRegistry = IStakeRegistry( +// address( +// new TransparentUpgradeableProxy( +// address(emptyContract), +// address(tangleProxyAdmin), +// "" +// ) +// ) +// ); +// +// OperatorStateRetriever operatorStateRetriever = new OperatorStateRetriever(); +// +// { +// // Deploy implementation contracts +// StakeRegistry stakeRegistryImplementation = new StakeRegistry( +// registryCoordinator, +// delegationManager +// ); +// tangleProxyAdmin.upgrade( +// TransparentUpgradeableProxy(payable(address(stakeRegistry))), +// address(stakeRegistryImplementation) +// ); +// +// BLSApkRegistry blsApkRegistryImplementation = new BLSApkRegistry( +// registryCoordinator +// ); +// tangleProxyAdmin.upgrade( +// TransparentUpgradeableProxy(payable(address(blsApkRegistry))), +// address(blsApkRegistryImplementation) +// ); +// +// IndexRegistry indexRegistryImplementation = new IndexRegistry( +// registryCoordinator +// ); +// tangleProxyAdmin.upgrade( +// TransparentUpgradeableProxy(payable(address(indexRegistry))), +// address(indexRegistryImplementation) +// ); +// } +// +// RegistryCoordinator registryCoordinatorImplementation = new RegistryCoordinator( +// tangleServiceManager, +// IStakeRegistry(stakeRegistry), +// IBLSApkRegistry(blsApkRegistry), +// IIndexRegistry(indexRegistry) +// ); +// +// { +// uint numQuorums = 1; +// // Define the following for each quorum +// // QuorumOperatorSetParam, minimumStakeForQuorum, and strategyParams +// IRegistryCoordinator.OperatorSetParam[] +// memory quorumsOperatorSetParams = new IRegistryCoordinator.OperatorSetParam[]( +// numQuorums +// ); +// for (uint i = 0; i < numQuorums; i++) { +// quorumsOperatorSetParams[i] = IRegistryCoordinator +// .OperatorSetParam({ +// maxOperatorCount: 10000, +// kickBIPsOfOperatorStake: 15000, +// kickBIPsOfTotalStake: 100 +// }); +// } +// // set to 0 for every quorum +// uint96[] memory quorumsMinimumStake = new uint96[](numQuorums); +// IStakeRegistry.StrategyParams[][] +// memory quorumsStrategyParams = new IStakeRegistry.StrategyParams[][]( +// numQuorums +// ); +// for (uint i = 0; i < numQuorums; i++) { +// quorumsStrategyParams[i] = new IStakeRegistry.StrategyParams[]( +// numStrategies +// ); +// for (uint j = 0; j < numStrategies; j++) { +// quorumsStrategyParams[i][j] = IStakeRegistry +// .StrategyParams({ +// strategy: deployedStrategyArray[j], +// multiplier: 1 ether +// }); +// } +// } +// tangleProxyAdmin.upgradeAndCall( +// TransparentUpgradeableProxy( +// payable(address(registryCoordinator)) +// ), +// address(registryCoordinatorImplementation), +// abi.encodeWithSelector( +// RegistryCoordinator.initialize.selector, +// vm.addr(deployerPrivateKey), +// vm.addr(deployerPrivateKey), +// vm.addr(deployerPrivateKey), +// pauserRegistry, +// 0, // 0 initialPausedStatus means everything unpaused +// quorumsOperatorSetParams, +// quorumsMinimumStake, +// quorumsStrategyParams +// ) +// ); +// } +// +// ISlasher slasher = ISlasher(address(0)); // TODO: Deploy real slasher +// +// TangleServiceManager tangleServiceManagerImplementation = new TangleServiceManager( +// IAVSDirectory(0x055733000064333CaDDbC92763c58BF0192fFeBf), // AVS Directory +// registryCoordinator, +// stakeRegistry, +// slasher // TODO: Slasher +// ); +// +// vm.stopBroadcast(); +// +// // Log deployed addresses +// console.log("Deployed contracts:"); +// console.log("PauserRegistry:", address(pauserRegistry)); +// console.log("IndexRegistry:", address(indexRegistry)); +// console.log("BLSApkRegistry:", address(blsApkRegistry)); +// console.log("StakeRegistry:", address(stakeRegistry)); +// console.log("TangleServiceManager:", address(tangleServiceManager)); +// console.log("RegistryCoordinator (Proxy):", address(registryCoordinator)); +// console.log("RegistryCoordinator (Implementation):", address(registryCoordinatorImplementation)); +// console.log("OperatorStateRetriever:", address(operatorStateRetriever)); +// console.log("ProxyAdmin:", address(tangleProxyAdmin)); } } \ No newline at end of file diff --git a/src/error.rs b/src/error.rs new file mode 100644 index 0000000..6e6bcd5 --- /dev/null +++ b/src/error.rs @@ -0,0 +1,20 @@ +use thiserror::Error; + +/// Represents errors that can occur in the Tangle AVS +#[derive(Debug, Error)] +pub enum Error { + #[error("EigenLayer registration error: {0}")] + EigenLayerRegistration(String), + + #[error("Tangle registration error: {0}")] + TangleRegistration(String), + + #[error("Other error: {0}")] + Other(String), +} + +impl From for Error { + fn from(s: String) -> Self { + Error::Other(s) + } +} diff --git a/src/lib.rs b/src/lib.rs index fe9287d..a905209 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2,10 +2,11 @@ use crate::utils::tangle::{bond_balance, update_session_key}; pub use crate::utils::tangle::{run_tangle_validator, BalanceTransferContext}; use color_eyre::eyre::Result; use gadget_sdk::event_listener::tangle::{TangleEvent, TangleEventListener}; -use gadget_sdk::{error, info, job}; +use gadget_sdk::{info, job}; use std::convert::Infallible; pub mod utils; +pub mod error; #[cfg(test)] mod tests; @@ -35,7 +36,7 @@ pub async fn register_to_tangle( info!("Successfully registered Tangle Validator"); } Err(err) => { - error!("Failed to register Tangle Validator: {}", err); + gadget_sdk::error!("Failed to register Tangle Validator: {}", err); return Ok(1); } } diff --git a/src/tests.rs b/src/tests.rs index 2142dd8..b504c82 100644 --- a/src/tests.rs +++ b/src/tests.rs @@ -27,6 +27,7 @@ use std::str::FromStr; use std::time::Duration; use url::Url; use uuid::Uuid; +use crate::utils::eigenlayer::register_to_eigenlayer_and_avs; const ANVIL_STATE_PATH: &str = "./saved_testnet_state.json"; @@ -53,32 +54,32 @@ async fn test_full_tangle_avs() { let accounts = provider.get_accounts().await.unwrap(); info!("Accounts: {:?}", accounts); - // Create a Registry Coordinator instance and then use it to create a quorum - let registry_coordinator = - RegistryCoordinator::new(REGISTRY_COORDINATOR_ADDR, provider.clone()); - let operator_set_params = RegistryCoordinator::OperatorSetParam { - maxOperatorCount: 10, - kickBIPsOfOperatorStake: 100, - kickBIPsOfTotalStake: 1000, - }; - let strategy_params = RegistryCoordinator::StrategyParams { - strategy: ERC20_MOCK_ADDR, - multiplier: 1, - }; - let _ = registry_coordinator - .createQuorum(operator_set_params, 0, vec![strategy_params]) - .send() - .await - .unwrap(); - - // Retrieve the stake registry address from the registry coordinator - let stake_registry_addr = registry_coordinator - .stakeRegistry() - .call() - .await - .unwrap() - ._0; - info!("Stake Registry Address: {:?}", stake_registry_addr); + // // Create a Registry Coordinator instance and then use it to create a quorum + // let registry_coordinator = + // RegistryCoordinator::new(REGISTRY_COORDINATOR_ADDR, provider.clone()); + // let operator_set_params = RegistryCoordinator::OperatorSetParam { + // maxOperatorCount: 10, + // kickBIPsOfOperatorStake: 100, + // kickBIPsOfTotalStake: 1000, + // }; + // let strategy_params = RegistryCoordinator::StrategyParams { + // strategy: ERC20_MOCK_ADDR, + // multiplier: 1, + // }; + // let _ = registry_coordinator + // .createQuorum(operator_set_params, 0, vec![strategy_params]) + // .send() + // .await + // .unwrap(); + // + // // Retrieve the stake registry address from the registry coordinator + // let stake_registry_addr = registry_coordinator + // .stakeRegistry() + // .call() + // .await + // .unwrap() + // ._0; + // info!("Stake Registry Address: {:?}", stake_registry_addr); let ecdsa_stake_registry_addr = ECDSAStakeRegistry::deploy_builder(provider.clone(), DELEGATION_MANAGER_ADDR) @@ -205,10 +206,10 @@ async fn test_full_tangle_avs() { keystore_password: None, blueprint_id: Some(0), service_id: Some(0), - skip_registration: false, + skip_registration: true, protocol: Protocol::Eigenlayer, - registry_coordinator: Some(REGISTRY_COORDINATOR_ADDR), - operator_state_retriever: Some(OPERATOR_STATE_RETRIEVER_ADDR), + registry_coordinator: Some(address!("0000000000000000000000000000000000000000")), // We don't use the registry coordinator + operator_state_retriever: Some(address!("0000000000000000000000000000000000000000")), // We don't use the operator state retriever delegation_manager: Some(DELEGATION_MANAGER_ADDR), ws_rpc_url: Url::parse(&ws_endpoint).unwrap(), strategy_manager: Some(STRATEGY_MANAGER_ADDR), @@ -261,6 +262,9 @@ async fn test_full_tangle_avs() { signer, }; + // Register to Eigenlayer and AVS + register_to_eigenlayer_and_avs(&env, tangle_service_manager_addr).await.unwrap(); + // Start the Runner info!("~~~ Executing the Tangle AVS ~~~"); let eigen_config = EigenlayerConfig {}; @@ -302,7 +306,7 @@ async fn test_holesky_tangle_avs() { let operator_keystore = gadget_sdk::keystore::backend::fs::FilesystemKeystore::open(operator_keystore_uri.clone()) .unwrap(); - let operator_ecdsa_signer = operator_keystore.ecdsa_key().unwrap(); + // let operator_ecdsa_signer = operator_keystore.ecdsa_key().unwrap(); let operator_signer = operator_keystore.sr25519_key().unwrap(); let transfer_destination = operator_signer.account_id(); diff --git a/src/utils/constants.rs b/src/utils/constants.rs index a42b8f3..41263d0 100644 --- a/src/utils/constants.rs +++ b/src/utils/constants.rs @@ -1,9 +1,8 @@ use alloy_primitives::{address, Address}; -pub const AVS_DIRECTORY_ADDR: Address = address!("0000000000000000000000000000000000000000"); +pub const AVS_DIRECTORY_ADDR: Address = address!("0165878A594ca255338adfa4d48449f69242Eb8F"); pub const DELEGATION_MANAGER_ADDR: Address = address!("dc64a140aa3e981100a9beca4e685f962f0cf6c9"); pub const ERC20_MOCK_ADDR: Address = address!("7969c5ed335650692bc04293b07f5bf2e7a673c0"); -pub const MAILBOX_ADDR: Address = address!("0000000000000000000000000000000000000000"); pub const OPERATOR_STATE_RETRIEVER_ADDR: Address = address!("1613beb3b2c4f22ee086b2b38c1476a3ce7f78e8"); pub const REGISTRY_COORDINATOR_ADDR: Address = address!("c3e53f4d16ae77db1c982e75a937b9f60fe63690"); diff --git a/src/utils/eigenlayer.rs b/src/utils/eigenlayer.rs new file mode 100644 index 0000000..d346e4f --- /dev/null +++ b/src/utils/eigenlayer.rs @@ -0,0 +1,121 @@ +use std::str::FromStr; +use alloy_primitives::{Address, FixedBytes, U256}; +use alloy_signer_local::PrivateKeySigner; +use eigensdk::client_elcontracts::reader::ELChainReader; +use color_eyre::eyre::Result; +use eigensdk::client_elcontracts::writer::ELChainWriter; +use eigensdk::logging::get_test_logger; +use eigensdk::types::operator::Operator; +use gadget_sdk::config::{GadgetConfiguration, ProtocolSpecificSettings}; +use gadget_sdk::info; +use gadget_sdk::keystore::BackendExt; +use gadget_sdk::utils::evm::get_provider_http; +use crate::error::Error; +use crate::utils::sol_imports::TangleServiceManager; +use alloy_signer::Signer; +use eigensdk::utils::binding::ECDSAStakeRegistry; + +pub async fn register_to_eigenlayer_and_avs(env: &GadgetConfiguration, tangle_service_manager_addr: Address) -> Result<(), Error> { + let ProtocolSpecificSettings::Eigenlayer(contract_addresses) = &env.protocol_specific + else { + return Err(Error::EigenLayerRegistration( + "Missing EigenLayer contract addresses".into(), + )); + }; + + let delegation_manager_address = contract_addresses.delegation_manager_address; + let strategy_manager_address = contract_addresses.strategy_manager_address; + let avs_directory_address = contract_addresses.avs_directory_address; + + let operator = env.keystore().map_err(|e| Error::EigenLayerRegistration(e.to_string()))?.ecdsa_key().map_err(|e| Error::EigenLayerRegistration(e.to_string()))?; + let operator_private_key = hex::encode(operator.signer().seed()); + let wallet = PrivateKeySigner::from_str(&operator_private_key) + .map_err(|_| Error::EigenLayerRegistration("Invalid private key".into()))?; + let operator_address = operator.alloy_key().map_err(|e| Error::EigenLayerRegistration(e.to_string()))?.address(); + let provider = get_provider_http(&env.http_rpc_endpoint); + + let delegation_manager = eigensdk::utils::binding::DelegationManager::new( + delegation_manager_address, + provider.clone(), + ); + let slasher_address = delegation_manager.slasher().call().await.map(|a| a._0).map_err(|e| Error::EigenLayerRegistration(e.to_string()))?; + + let logger = get_test_logger(); + let el_chain_reader = ELChainReader::new( + logger, + slasher_address, + delegation_manager_address, + avs_directory_address, + env.http_rpc_endpoint.clone(), + ); + + let el_writer = ELChainWriter::new( + delegation_manager_address, + strategy_manager_address, + el_chain_reader.clone(), + env.http_rpc_endpoint.clone(), + operator_private_key, + ); + + let staker_opt_out_window_blocks = 50400u32; + let operator_details = Operator { + address: operator_address, + earnings_receiver_address: operator_address, + delegation_approver_address: operator_address, + metadata_url: Some("https://github.com/tangle-network/gadget".to_string()), + staker_opt_out_window_blocks, + }; + + let tx_hash = el_writer.register_as_operator(operator_details).await.map_err(|e| Error::EigenLayerRegistration(e.to_string()))?; + info!("Registered as operator for Eigenlayer {:?}", tx_hash); + + let digest_hash_salt: FixedBytes<32> = FixedBytes::from([0x02; 32]); + let now = std::time::SystemTime::now(); + let sig_expiry = now + .duration_since(std::time::UNIX_EPOCH) + .map(|duration| U256::from(duration.as_secs()) + U256::from(86400)) + .unwrap_or_else(|_| { + info!("System time seems to be before the UNIX epoch."); + U256::from(0) + }); + + let msg_to_sign = el_chain_reader + .calculate_operator_avs_registration_digest_hash( + operator_address, + tangle_service_manager_addr, + digest_hash_salt, + sig_expiry, + ) + .await.unwrap(); + // .map_err(|_| Error::EigenLayerRegistration("Failed to calculate hash".to_string()))?; + + let operator_signature = wallet + .sign_hash(&msg_to_sign) + .await + .map_err(|_| Error::EigenLayerRegistration("Invalid Signature".to_string()))?; + + let operator_signature_with_salt_and_expiry = ECDSAStakeRegistry::SignatureWithSaltAndExpiry { + signature: operator_signature.as_bytes().into(), + salt: digest_hash_salt, + expiry: sig_expiry, + }; + + // Register the operator to AVS + let tangle_service_manager = TangleServiceManager::new(tangle_service_manager_addr, provider.clone()); + let stake_registry = tangle_service_manager.stakeRegistry().call().await.map_err(|e| Error::EigenLayerRegistration(e.to_string()))?._0; + let ecdsa_stake_registry = ECDSAStakeRegistry::new(stake_registry, provider.clone()); + let register_call = ecdsa_stake_registry.registerOperatorWithSignature(operator_address, operator_signature_with_salt_and_expiry); + let result = register_call.send().await.map_err(|e| Error::EigenLayerRegistration(e.to_string()))?; + let receipt = result.get_receipt().await.map_err(|e| Error::EigenLayerRegistration(e.to_string()))?; + + + // let register_call = tangle_service_manager.registerOperatorToAVS(operator_address, operator_signature_with_salt_and_expiry); + // let result = register_call.send().await.map_err(|e| Error::EigenLayerRegistration(e.to_string()))?; + // let receipt = result.get_receipt().await.map_err(|e| Error::EigenLayerRegistration(e.to_string()))?; + + if !receipt.status() { + return Err(Error::EigenLayerRegistration("Failed to register operator to AVS".to_string())); + } + info!("Operator Registration to AVS Succeeded"); + Ok(()) +} \ No newline at end of file diff --git a/src/utils/mod.rs b/src/utils/mod.rs index f0e7258..9872b80 100644 --- a/src/utils/mod.rs +++ b/src/utils/mod.rs @@ -1,3 +1,4 @@ pub mod constants; pub mod sol_imports; pub mod tangle; +pub mod eigenlayer; From 746de933c8257cd0fd0e5344e6cf54f84038a252 Mon Sep 17 00:00:00 2001 From: Tjemmmic Date: Fri, 15 Nov 2024 19:14:18 -0600 Subject: [PATCH 10/15] fix: holesky test fixes --- src/lib.rs | 2 +- src/tests.rs | 127 +++++++++++++++++++++++----------------- src/utils/constants.rs | 35 ++++++++--- src/utils/eigenlayer.rs | 78 ++++++++++++++++-------- src/utils/mod.rs | 2 +- 5 files changed, 158 insertions(+), 86 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index a905209..23afd8f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -5,8 +5,8 @@ use gadget_sdk::event_listener::tangle::{TangleEvent, TangleEventListener}; use gadget_sdk::{info, job}; use std::convert::Infallible; -pub mod utils; pub mod error; +pub mod utils; #[cfg(test)] mod tests; diff --git a/src/tests.rs b/src/tests.rs index b504c82..ae429ab 100644 --- a/src/tests.rs +++ b/src/tests.rs @@ -1,9 +1,9 @@ -pub use crate::utils::constants::*; +pub use crate::utils::constants; use crate::utils::sol_imports::*; use crate::BalanceTransferContext; use crate::RegisterToTangleEventHandler; -use alloy_primitives::{address, U256}; -use alloy_provider::network::TransactionBuilder; +use alloy_primitives::U256; +use alloy_provider::network::{EthereumWallet, TransactionBuilder}; use alloy_provider::Provider; use blueprint_test_utils::test_ext::NAME_IDS; use blueprint_test_utils::{inject_test_keys, KeyGenType}; @@ -19,7 +19,7 @@ use gadget_sdk::keystore::{Backend, BackendExt}; use gadget_sdk::runners::eigenlayer::EigenlayerConfig; use gadget_sdk::runners::BlueprintRunner; use gadget_sdk::utils::evm::get_provider_http; - +use crate::utils::eigenlayer::register_to_eigenlayer_and_avs; use gadget_sdk::{alloy_rpc_types, error, info}; use std::net::IpAddr; use std::path::Path; @@ -27,12 +27,12 @@ use std::str::FromStr; use std::time::Duration; use url::Url; use uuid::Uuid; -use crate::utils::eigenlayer::register_to_eigenlayer_and_avs; const ANVIL_STATE_PATH: &str = "./saved_testnet_state.json"; #[tokio::test] async fn test_full_tangle_avs() { + use constants::local::*; gadget_sdk::logging::setup_log(); // Begin the Anvil Testnet @@ -54,33 +54,6 @@ async fn test_full_tangle_avs() { let accounts = provider.get_accounts().await.unwrap(); info!("Accounts: {:?}", accounts); - // // Create a Registry Coordinator instance and then use it to create a quorum - // let registry_coordinator = - // RegistryCoordinator::new(REGISTRY_COORDINATOR_ADDR, provider.clone()); - // let operator_set_params = RegistryCoordinator::OperatorSetParam { - // maxOperatorCount: 10, - // kickBIPsOfOperatorStake: 100, - // kickBIPsOfTotalStake: 1000, - // }; - // let strategy_params = RegistryCoordinator::StrategyParams { - // strategy: ERC20_MOCK_ADDR, - // multiplier: 1, - // }; - // let _ = registry_coordinator - // .createQuorum(operator_set_params, 0, vec![strategy_params]) - // .send() - // .await - // .unwrap(); - // - // // Retrieve the stake registry address from the registry coordinator - // let stake_registry_addr = registry_coordinator - // .stakeRegistry() - // .call() - // .await - // .unwrap() - // ._0; - // info!("Stake Registry Address: {:?}", stake_registry_addr); - let ecdsa_stake_registry_addr = ECDSAStakeRegistry::deploy_builder(provider.clone(), DELEGATION_MANAGER_ADDR) .send() @@ -157,6 +130,11 @@ async fn test_full_tangle_avs() { let operator_signer = operator_keystore.sr25519_key().unwrap(); let transfer_destination = operator_signer.account_id(); + let private_key_bytes = operator_ecdsa_signer.signer().seed(); + let private_key_hex = hex::encode(private_key_bytes); + info!("ECDSA Private Key: {}", private_key_hex); + info!("ECDSA Public Key: {:?}", operator_ecdsa_signer.public()); + // Get Bob's keys, who will transfer money to the operator let bob_keystore_uri = keystore_paths[1].clone(); let bob_keystore = @@ -166,13 +144,29 @@ async fn test_full_tangle_avs() { // Transfer balance into operator's account on Anvil for registration let provider = get_provider_http(&http_endpoint); let alloy_sender = accounts[0]; - let anvil_tx_amount = 100000000; + + let before_transfer = provider.get_balance(alloy_sender).await.unwrap(); + info!("Balance before transfer: {}", before_transfer); + + let anvil_tx_amount = 300_000_000_000_000u64; // Enough to cover registration let tx = alloy_rpc_types::TransactionRequest::default() .with_from(alloy_sender) .with_to(operator_ecdsa_signer.alloy_address().unwrap()) - .with_value(U256::from(anvil_tx_amount)); + .with_value(U256::from(anvil_tx_amount)) + .with_nonce(provider.get_transaction_count(alloy_sender).await.unwrap()) + .with_chain_id(provider.get_chain_id().await.unwrap()) + .with_gas_limit(21_000) + .with_max_priority_fee_per_gas(1_000_000_000) + .with_max_fee_per_gas(20_000_000_000); + + let funder_signer = + alloy_signer_local::PrivateKeySigner::from_str("ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80").unwrap(); + let funder_wallet = EthereumWallet::from(funder_signer); + + let tx_envelope = tx.build(&funder_wallet).await.unwrap(); + let tx_hash = provider - .send_transaction(tx) + .send_tx_envelope(tx_envelope) .await .unwrap() .watch() @@ -185,6 +179,12 @@ async fn test_full_tangle_avs() { tx_hash ); + let after_transfer = provider.get_balance(alloy_sender).await.unwrap(); + info!("Balance after transfer: {}", after_transfer); + + let operator_balance = provider.get_balance(operator_ecdsa_signer.alloy_address().unwrap()).await.unwrap(); + info!("Operator balance: {}", operator_balance); + // Tangle node url/port let ws_tangle_url = Url::parse("ws://127.0.0.1:9948").unwrap(); let target_port = ws_tangle_url.clone().port().unwrap(); @@ -208,8 +208,8 @@ async fn test_full_tangle_avs() { service_id: Some(0), skip_registration: true, protocol: Protocol::Eigenlayer, - registry_coordinator: Some(address!("0000000000000000000000000000000000000000")), // We don't use the registry coordinator - operator_state_retriever: Some(address!("0000000000000000000000000000000000000000")), // We don't use the operator state retriever + registry_coordinator: Some(ZERO_ADDRESS), // We don't need this for Tangle AVS + operator_state_retriever: Some(ZERO_ADDRESS), // We don't need this for Tangle AVS delegation_manager: Some(DELEGATION_MANAGER_ADDR), ws_rpc_url: Url::parse(&ws_endpoint).unwrap(), strategy_manager: Some(STRATEGY_MANAGER_ADDR), @@ -263,7 +263,9 @@ async fn test_full_tangle_avs() { }; // Register to Eigenlayer and AVS - register_to_eigenlayer_and_avs(&env, tangle_service_manager_addr).await.unwrap(); + register_to_eigenlayer_and_avs(&env, tangle_service_manager_addr) + .await + .unwrap(); // Start the Runner info!("~~~ Executing the Tangle AVS ~~~"); @@ -279,6 +281,7 @@ async fn test_full_tangle_avs() { #[tokio::test] async fn test_holesky_tangle_avs() { + use constants::holesky::*; gadget_sdk::logging::setup_log(); let eth_http_endpoint = "https://ethereum-holesky.publicnode.com".to_string(); @@ -286,7 +289,7 @@ async fn test_holesky_tangle_avs() { let tangle_ws_endpoint = "ws://127.0.0.1:9948".to_string(); // Private key of the account that will send ETH to the new test operator - // let funder_private_key = std::env::var("FUNDER_PRIVATE_KEY").expect("FUNDER_PRIVATE_KEY must be set"); + let funder_private_key = std::env::var("FUNDER_PRIVATE_KEY").expect("FUNDER_PRIVATE_KEY must be set"); // Create a provider for the ETH network let provider = alloy_provider::ProviderBuilder::new() @@ -306,23 +309,36 @@ async fn test_holesky_tangle_avs() { let operator_keystore = gadget_sdk::keystore::backend::fs::FilesystemKeystore::open(operator_keystore_uri.clone()) .unwrap(); - // let operator_ecdsa_signer = operator_keystore.ecdsa_key().unwrap(); + let operator_ecdsa_signer = operator_keystore.ecdsa_key().unwrap(); let operator_signer = operator_keystore.sr25519_key().unwrap(); let transfer_destination = operator_signer.account_id(); - // // Create signer from funder's private key - // let funder_wallet = - // alloy_signer_local::PrivateKeySigner::from_str(&funder_private_key).unwrap(); + let private_key_bytes = operator_ecdsa_signer.signer().seed(); + let private_key_hex = hex::encode(private_key_bytes); + info!("ECDSA Private Key: {}", private_key_hex); + info!("ECDSA Public Key: {:?}", operator_ecdsa_signer.public()); + // // // Create signer from funder's private key + // let funder_signer = + // alloy_signer_local::PrivateKeySigner::from_str(&funder_private_key).unwrap(); + // // // Transfer ETH to operator's account - // let anvil_tx_amount = 100000000; // Adjust this based on network requirements + // let anvil_tx_amount = 300_000_000_000_000u64; // Enough to cover registration // let tx = alloy_rpc_types::TransactionRequest::default() - // .with_from(funder_wallet.address()) + // .with_from(funder_signer.address()) // .with_to(operator_ecdsa_signer.alloy_address().unwrap()) - // .with_value(U256::from(anvil_tx_amount)); + // .with_value(U256::from(anvil_tx_amount)) + // .with_nonce(provider.get_transaction_count(funder_signer.address()).await.unwrap()) + // .with_chain_id(provider.get_chain_id().await.unwrap()) + // .with_gas_limit(21_000) + // .with_max_priority_fee_per_gas(1_000_000_000) + // .with_max_fee_per_gas(20_000_000_000); + // + // let funder_wallet = EthereumWallet::from(funder_signer.clone()); + // let tx_envelope = tx.build(&funder_wallet).await.unwrap(); // // let tx_hash = provider - // .send_transaction(tx) + // .send_tx_envelope(tx_envelope) // .await // .unwrap() // .watch() @@ -330,7 +346,7 @@ async fn test_holesky_tangle_avs() { // .unwrap(); // info!( // "Transferred {anvil_tx_amount} from {:?} to {:?}\n\tHash: {:?}", - // funder_wallet.address(), + // funder_signer.address(), // operator_ecdsa_signer.alloy_address(), // tx_hash // ); @@ -358,12 +374,12 @@ async fn test_holesky_tangle_avs() { service_id: Some(0), skip_registration: false, protocol: Protocol::Eigenlayer, - registry_coordinator: Some(address!("227327316CA7Ec350bb8651bE940C005f3B50c78")), - operator_state_retriever: Some(address!("38F984394c123375ACb7A638b66a78e2D15c987b")), - delegation_manager: Some(address!("A44151489861Fe9e3055d95adC98FbD462B948e7")), + registry_coordinator: Some(ZERO_ADDRESS), // We don't need this for the Tangle AVS + operator_state_retriever: Some(ZERO_ADDRESS), // We don't need this for the Tangle AVS + delegation_manager: Some(DELEGATION_MANAGER_ADDR), ws_rpc_url: Url::parse(ð_ws_endpoint).unwrap(), - strategy_manager: Some(address!("dfB5f6CE42aAA7830E94ECFCcAd411beF4d4D5b6")), - avs_directory: Some(address!("055733000064333CaDDbC92763c58BF0192fFeBf")), + strategy_manager: Some(STRATEGY_MANAGER_ADDR), + avs_directory: Some(AVS_DIRECTORY_ADDR), operator_registry: None, network_registry: None, base_delegator: None, @@ -418,6 +434,11 @@ async fn test_holesky_tangle_avs() { signer, }; + // Register to Eigenlayer and AVS + register_to_eigenlayer_and_avs(&env, TANGLE_SERVICE_MANAGER_ADDR) + .await + .unwrap(); + // Start the Runner info!("~~~ Executing the Tangle AVS ~~~"); let eigen_config = EigenlayerConfig {}; diff --git a/src/utils/constants.rs b/src/utils/constants.rs index 41263d0..3fd9ff7 100644 --- a/src/utils/constants.rs +++ b/src/utils/constants.rs @@ -1,10 +1,29 @@ use alloy_primitives::{address, Address}; -pub const AVS_DIRECTORY_ADDR: Address = address!("0165878A594ca255338adfa4d48449f69242Eb8F"); -pub const DELEGATION_MANAGER_ADDR: Address = address!("dc64a140aa3e981100a9beca4e685f962f0cf6c9"); -pub const ERC20_MOCK_ADDR: Address = address!("7969c5ed335650692bc04293b07f5bf2e7a673c0"); -pub const OPERATOR_STATE_RETRIEVER_ADDR: Address = - address!("1613beb3b2c4f22ee086b2b38c1476a3ce7f78e8"); -pub const REGISTRY_COORDINATOR_ADDR: Address = address!("c3e53f4d16ae77db1c982e75a937b9f60fe63690"); -pub const SERVICE_MANAGER_ADDR: Address = address!("67d269191c92caf3cd7723f116c85e6e9bf55933"); -pub const STRATEGY_MANAGER_ADDR: Address = address!("5fc8d32690cc91d4c39d9d3abcbd16989f875707"); +pub mod local { + use super::*; + pub const AVS_DIRECTORY_ADDR: Address = address!("0165878A594ca255338adfa4d48449f69242Eb8F"); + pub const DELEGATION_MANAGER_ADDR: Address = + address!("dc64a140aa3e981100a9beca4e685f962f0cf6c9"); + pub const ERC20_MOCK_ADDR: Address = address!("7969c5ed335650692bc04293b07f5bf2e7a673c0"); + pub const OPERATOR_STATE_RETRIEVER_ADDR: Address = + address!("1613beb3b2c4f22ee086b2b38c1476a3ce7f78e8"); + pub const REGISTRY_COORDINATOR_ADDR: Address = + address!("c3e53f4d16ae77db1c982e75a937b9f60fe63690"); + pub const SERVICE_MANAGER_ADDR: Address = address!("67d269191c92caf3cd7723f116c85e6e9bf55933"); + pub const STRATEGY_MANAGER_ADDR: Address = address!("5fc8d32690cc91d4c39d9d3abcbd16989f875707"); + pub const ZERO_ADDRESS: Address = address!("0000000000000000000000000000000000000000"); +} + +pub mod holesky { + use super::*; + pub const TANGLE_SERVICE_MANAGER_ADDR: Address = + address!("5aBc6138DD384a1b059f1fcBaD73E03c31170C14"); + pub const ECDSA_STAKE_REGISTRY_ADDR: Address = + address!("131b803Bece581281A2E33d7E693DfA70aB85D06"); + pub const AVS_DIRECTORY_ADDR: Address = address!("055733000064333CaDDbC92763c58BF0192fFeBf"); + pub const DELEGATION_MANAGER_ADDR: Address = + address!("A44151489861Fe9e3055d95adC98FbD462B948e7"); + pub const STRATEGY_MANAGER_ADDR: Address = address!("dfB5f6CE42aAA7830E94ECFCcAd411beF4d4D5b6"); + pub const ZERO_ADDRESS: Address = address!("0000000000000000000000000000000000000000"); +} diff --git a/src/utils/eigenlayer.rs b/src/utils/eigenlayer.rs index d346e4f..7af2ffb 100644 --- a/src/utils/eigenlayer.rs +++ b/src/utils/eigenlayer.rs @@ -1,23 +1,25 @@ -use std::str::FromStr; +use crate::error::Error; +use crate::utils::sol_imports::TangleServiceManager; use alloy_primitives::{Address, FixedBytes, U256}; +use alloy_signer::Signer; use alloy_signer_local::PrivateKeySigner; -use eigensdk::client_elcontracts::reader::ELChainReader; use color_eyre::eyre::Result; +use eigensdk::client_elcontracts::reader::ELChainReader; use eigensdk::client_elcontracts::writer::ELChainWriter; use eigensdk::logging::get_test_logger; use eigensdk::types::operator::Operator; +use eigensdk::utils::binding::ECDSAStakeRegistry; use gadget_sdk::config::{GadgetConfiguration, ProtocolSpecificSettings}; use gadget_sdk::info; use gadget_sdk::keystore::BackendExt; use gadget_sdk::utils::evm::get_provider_http; -use crate::error::Error; -use crate::utils::sol_imports::TangleServiceManager; -use alloy_signer::Signer; -use eigensdk::utils::binding::ECDSAStakeRegistry; +use std::str::FromStr; -pub async fn register_to_eigenlayer_and_avs(env: &GadgetConfiguration, tangle_service_manager_addr: Address) -> Result<(), Error> { - let ProtocolSpecificSettings::Eigenlayer(contract_addresses) = &env.protocol_specific - else { +pub async fn register_to_eigenlayer_and_avs( + env: &GadgetConfiguration, + tangle_service_manager_addr: Address, +) -> Result<(), Error> { + let ProtocolSpecificSettings::Eigenlayer(contract_addresses) = &env.protocol_specific else { return Err(Error::EigenLayerRegistration( "Missing EigenLayer contract addresses".into(), )); @@ -27,18 +29,30 @@ pub async fn register_to_eigenlayer_and_avs(env: &GadgetConfiguration = FixedBytes::from([0x02; 32]); @@ -86,8 +103,9 @@ pub async fn register_to_eigenlayer_and_avs(env: &GadgetConfiguration Date: Fri, 15 Nov 2024 20:39:52 -0600 Subject: [PATCH 11/15] fix!: debugging final bug in avs registration wip --- src/tests.rs | 18 +++++--- src/utils/eigenlayer.rs | 95 ++++++++++++++++++++++++++++++---------- src/utils/sol_imports.rs | 7 +++ 3 files changed, 92 insertions(+), 28 deletions(-) diff --git a/src/tests.rs b/src/tests.rs index ae429ab..252ffdd 100644 --- a/src/tests.rs +++ b/src/tests.rs @@ -1,4 +1,5 @@ pub use crate::utils::constants; +use crate::utils::eigenlayer::register_to_eigenlayer_and_avs; use crate::utils::sol_imports::*; use crate::BalanceTransferContext; use crate::RegisterToTangleEventHandler; @@ -19,7 +20,6 @@ use gadget_sdk::keystore::{Backend, BackendExt}; use gadget_sdk::runners::eigenlayer::EigenlayerConfig; use gadget_sdk::runners::BlueprintRunner; use gadget_sdk::utils::evm::get_provider_http; -use crate::utils::eigenlayer::register_to_eigenlayer_and_avs; use gadget_sdk::{alloy_rpc_types, error, info}; use std::net::IpAddr; use std::path::Path; @@ -148,7 +148,7 @@ async fn test_full_tangle_avs() { let before_transfer = provider.get_balance(alloy_sender).await.unwrap(); info!("Balance before transfer: {}", before_transfer); - let anvil_tx_amount = 300_000_000_000_000u64; // Enough to cover registration + let anvil_tx_amount = 900_000_000_000_000u64; // Enough to cover registration let tx = alloy_rpc_types::TransactionRequest::default() .with_from(alloy_sender) .with_to(operator_ecdsa_signer.alloy_address().unwrap()) @@ -159,8 +159,10 @@ async fn test_full_tangle_avs() { .with_max_priority_fee_per_gas(1_000_000_000) .with_max_fee_per_gas(20_000_000_000); - let funder_signer = - alloy_signer_local::PrivateKeySigner::from_str("ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80").unwrap(); + let funder_signer = alloy_signer_local::PrivateKeySigner::from_str( + "ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80", + ) + .unwrap(); let funder_wallet = EthereumWallet::from(funder_signer); let tx_envelope = tx.build(&funder_wallet).await.unwrap(); @@ -182,7 +184,10 @@ async fn test_full_tangle_avs() { let after_transfer = provider.get_balance(alloy_sender).await.unwrap(); info!("Balance after transfer: {}", after_transfer); - let operator_balance = provider.get_balance(operator_ecdsa_signer.alloy_address().unwrap()).await.unwrap(); + let operator_balance = provider + .get_balance(operator_ecdsa_signer.alloy_address().unwrap()) + .await + .unwrap(); info!("Operator balance: {}", operator_balance); // Tangle node url/port @@ -289,7 +294,8 @@ async fn test_holesky_tangle_avs() { let tangle_ws_endpoint = "ws://127.0.0.1:9948".to_string(); // Private key of the account that will send ETH to the new test operator - let funder_private_key = std::env::var("FUNDER_PRIVATE_KEY").expect("FUNDER_PRIVATE_KEY must be set"); + let funder_private_key = + std::env::var("FUNDER_PRIVATE_KEY").expect("FUNDER_PRIVATE_KEY must be set"); // Create a provider for the ETH network let provider = alloy_provider::ProviderBuilder::new() diff --git a/src/utils/eigenlayer.rs b/src/utils/eigenlayer.rs index 7af2ffb..0e397a7 100644 --- a/src/utils/eigenlayer.rs +++ b/src/utils/eigenlayer.rs @@ -1,6 +1,12 @@ use crate::error::Error; +use crate::utils::sol_imports::ECDSAStakeRegistry::{ + registerOperatorWithSignatureCall, ECDSAStakeRegistryCalls, +}; use crate::utils::sol_imports::TangleServiceManager; +use alloy_contract::SolCallBuilder; use alloy_primitives::{Address, FixedBytes, U256}; +use alloy_provider::network::{EthereumWallet, TransactionBuilder}; +use alloy_provider::Provider; use alloy_signer::Signer; use alloy_signer_local::PrivateKeySigner; use color_eyre::eyre::Result; @@ -10,9 +16,9 @@ use eigensdk::logging::get_test_logger; use eigensdk::types::operator::Operator; use eigensdk::utils::binding::ECDSAStakeRegistry; use gadget_sdk::config::{GadgetConfiguration, ProtocolSpecificSettings}; -use gadget_sdk::info; use gadget_sdk::keystore::BackendExt; use gadget_sdk::utils::evm::get_provider_http; +use gadget_sdk::{alloy_rpc_types, info}; use std::str::FromStr; pub async fn register_to_eigenlayer_and_avs( @@ -31,15 +37,19 @@ pub async fn register_to_eigenlayer_and_avs( let operator = env .keystore() - .map_err(|e| Error::EigenLayerRegistration(e.to_string()))? + .map_err(|e| Error::EigenLayerRegistration(e.to_string())) + .unwrap() .ecdsa_key() - .map_err(|e| Error::EigenLayerRegistration(e.to_string()))?; + .map_err(|e| Error::EigenLayerRegistration(e.to_string())) + .unwrap(); let operator_private_key = hex::encode(operator.signer().seed()); let wallet = PrivateKeySigner::from_str(&operator_private_key) - .map_err(|_| Error::EigenLayerRegistration("Invalid private key".into()))?; + .map_err(|_| Error::EigenLayerRegistration("Invalid private key".into())) + .unwrap(); let operator_address = operator .alloy_key() - .map_err(|e| Error::EigenLayerRegistration(e.to_string()))? + .map_err(|e| Error::EigenLayerRegistration(e.to_string())) + .unwrap() .address(); let provider = get_provider_http(&env.http_rpc_endpoint); @@ -52,7 +62,8 @@ pub async fn register_to_eigenlayer_and_avs( .call() .await .map(|a| a._0) - .map_err(|e| Error::EigenLayerRegistration(e.to_string()))?; + .map_err(|e| Error::EigenLayerRegistration(e.to_string())) + .unwrap(); let logger = get_test_logger(); let el_chain_reader = ELChainReader::new( @@ -68,7 +79,7 @@ pub async fn register_to_eigenlayer_and_avs( strategy_manager_address, el_chain_reader.clone(), env.http_rpc_endpoint.clone(), - operator_private_key, + operator_private_key.clone(), ); let staker_opt_out_window_blocks = 50400u32; @@ -83,7 +94,8 @@ pub async fn register_to_eigenlayer_and_avs( let tx_hash = el_writer .register_as_operator(operator_details) .await - .map_err(|e| Error::EigenLayerRegistration(e.to_string()))?; + .map_err(|e| Error::EigenLayerRegistration(e.to_string())) + .unwrap(); info!("Registered as operator for Eigenlayer {:?}", tx_hash); let digest_hash_salt: FixedBytes<32> = FixedBytes::from([0x02; 32]); @@ -105,12 +117,13 @@ pub async fn register_to_eigenlayer_and_avs( ) .await .unwrap(); - // .map_err(|_| Error::EigenLayerRegistration("Failed to calculate hash".to_string()))?; + // .map_err(|_| Error::EigenLayerRegistration("Failed to calculate hash".to_string())).unwrap(); let operator_signature = wallet .sign_hash(&msg_to_sign) .await - .map_err(|_| Error::EigenLayerRegistration("Invalid Signature".to_string()))?; + .map_err(|_| Error::EigenLayerRegistration("Invalid Signature".to_string())) + .unwrap(); let operator_signature_with_salt_and_expiry = ECDSAStakeRegistry::SignatureWithSaltAndExpiry { signature: operator_signature.as_bytes().into(), @@ -125,23 +138,61 @@ pub async fn register_to_eigenlayer_and_avs( .stakeRegistry() .call() .await - .map_err(|e| Error::EigenLayerRegistration(e.to_string()))? + .map_err(|e| Error::EigenLayerRegistration(e.to_string())) + .unwrap() ._0; let ecdsa_stake_registry = ECDSAStakeRegistry::new(stake_registry, provider.clone()); - let register_call = ecdsa_stake_registry - .registerOperatorWithSignature(operator_address, operator_signature_with_salt_and_expiry); - let result = register_call - .send() + // let register_call = ecdsa_stake_registry + // .registerOperatorWithSignature(operator_address, operator_signature_with_salt_and_expiry) + // .from(operator_address); + + // let register_call_data = ecdsa_stake_registry + // .registerOperatorWithSignature(operator_signature_with_salt_and_expiry, operator_address) + // .calldata(); + + info!("Building Transaction"); + + let tx = alloy_rpc_types::TransactionRequest::default() + .with_call(&ECDSAStakeRegistry::registerOperatorWithSignatureCall { _operator: operator_address, _operatorSignature: operator_signature_with_salt_and_expiry}) + .with_from(operator_address) + .with_to(stake_registry) + .with_nonce( + provider + .get_transaction_count(operator_address) + .await + .unwrap(), + ) + .with_chain_id(provider.get_chain_id().await.unwrap()) + .with_gas_limit(21_000) + .with_max_priority_fee_per_gas(1_000_000_000) + .with_max_fee_per_gas(20_000_000_000); + + let signer = alloy_signer_local::PrivateKeySigner::from_str(&operator_private_key).unwrap(); + let wallet = EthereumWallet::from(signer); + + info!("Building Transaction Envelope"); + + let tx_envelope = tx.build(&wallet).await.unwrap(); + + info!("Sending Transaction Envelope"); + + let result = provider + .send_tx_envelope(tx_envelope) .await - .map_err(|e| Error::EigenLayerRegistration(e.to_string()))?; - let receipt = result - .get_receipt() + .unwrap() + .register() .await - .map_err(|e| Error::EigenLayerRegistration(e.to_string()))?; + .unwrap(); + // let receipt = provider.get_transaction_receipt(result).await.unwrap().unwrap(); + + info!("Operator Registration to AVS Sent. Awaiting Receipt..."); + + let tx_hash = result.await.unwrap(); + + info!("Got Transaction Hash: {}", tx_hash); - // let register_call = tangle_service_manager.registerOperatorToAVS(operator_address, operator_signature_with_salt_and_expiry); - // let result = register_call.send().await.map_err(|e| Error::EigenLayerRegistration(e.to_string()))?; - // let receipt = result.get_receipt().await.map_err(|e| Error::EigenLayerRegistration(e.to_string()))?; + let receipt = provider.get_transaction_receipt(tx_hash).await.unwrap().unwrap(); + info!("Got Transaction Receipt: {:?}", receipt); if !receipt.status() { return Err(Error::EigenLayerRegistration( diff --git a/src/utils/sol_imports.rs b/src/utils/sol_imports.rs index 1bd8b24..3652f3c 100644 --- a/src/utils/sol_imports.rs +++ b/src/utils/sol_imports.rs @@ -11,3 +11,10 @@ alloy_sol_types::sol!( TangleServiceManager, "./contracts/out/TangleServiceManager.sol/TangleServiceManager.json" ); + +alloy_sol_types::sol!( + #[allow(missing_docs, clippy::too_many_arguments)] + #[sol(rpc)] + ECDSAStakeRegistry, + "./contracts/out/ECDSAStakeRegistry.sol/ECDSAStakeRegistry.json" +); From f5305456f06bd94a6db977bef235a9e91b0dc3d9 Mon Sep 17 00:00:00 2001 From: Tjemmmic Date: Fri, 15 Nov 2024 20:41:45 -0600 Subject: [PATCH 12/15] chore(clippy): fmt --- src/tests.rs | 26 +++++++++++++------------- src/utils/eigenlayer.rs | 20 +++++++++++++------- 2 files changed, 26 insertions(+), 20 deletions(-) diff --git a/src/tests.rs b/src/tests.rs index 252ffdd..40b43a5 100644 --- a/src/tests.rs +++ b/src/tests.rs @@ -293,18 +293,6 @@ async fn test_holesky_tangle_avs() { let eth_ws_endpoint = "wss://ethereum-holesky.publicnode.com".to_string(); let tangle_ws_endpoint = "ws://127.0.0.1:9948".to_string(); - // Private key of the account that will send ETH to the new test operator - let funder_private_key = - std::env::var("FUNDER_PRIVATE_KEY").expect("FUNDER_PRIVATE_KEY must be set"); - - // Create a provider for the ETH network - let provider = alloy_provider::ProviderBuilder::new() - .with_recommended_fillers() - .on_http(eth_http_endpoint.parse().unwrap()) - .root() - .clone() - .boxed(); - // Setup keystores for test set_tangle_env_vars(); let tmp_dir = tempfile::TempDir::new().unwrap(); @@ -324,7 +312,19 @@ async fn test_holesky_tangle_avs() { info!("ECDSA Private Key: {}", private_key_hex); info!("ECDSA Public Key: {:?}", operator_ecdsa_signer.public()); - // // // Create signer from funder's private key + // // Create signer from funder's private key + // // Private key of the account that will send ETH to the new test operator + // let funder_private_key = + // std::env::var("FUNDER_PRIVATE_KEY").expect("FUNDER_PRIVATE_KEY must be set"); + // + // // Create a provider for the ETH network + // let provider = alloy_provider::ProviderBuilder::new() + // .with_recommended_fillers() + // .on_http(eth_http_endpoint.parse().unwrap()) + // .root() + // .clone() + // .boxed(); + // let funder_signer = // alloy_signer_local::PrivateKeySigner::from_str(&funder_private_key).unwrap(); // diff --git a/src/utils/eigenlayer.rs b/src/utils/eigenlayer.rs index 0e397a7..810d885 100644 --- a/src/utils/eigenlayer.rs +++ b/src/utils/eigenlayer.rs @@ -1,9 +1,8 @@ use crate::error::Error; -use crate::utils::sol_imports::ECDSAStakeRegistry::{ - registerOperatorWithSignatureCall, ECDSAStakeRegistryCalls, -}; +// use crate::utils::sol_imports::ECDSAStakeRegistry::{ +// registerOperatorWithSignatureCall, ECDSAStakeRegistryCalls, +// }; use crate::utils::sol_imports::TangleServiceManager; -use alloy_contract::SolCallBuilder; use alloy_primitives::{Address, FixedBytes, U256}; use alloy_provider::network::{EthereumWallet, TransactionBuilder}; use alloy_provider::Provider; @@ -141,7 +140,7 @@ pub async fn register_to_eigenlayer_and_avs( .map_err(|e| Error::EigenLayerRegistration(e.to_string())) .unwrap() ._0; - let ecdsa_stake_registry = ECDSAStakeRegistry::new(stake_registry, provider.clone()); + // let ecdsa_stake_registry = ECDSAStakeRegistry::new(stake_registry, provider.clone()); // let register_call = ecdsa_stake_registry // .registerOperatorWithSignature(operator_address, operator_signature_with_salt_and_expiry) // .from(operator_address); @@ -153,7 +152,10 @@ pub async fn register_to_eigenlayer_and_avs( info!("Building Transaction"); let tx = alloy_rpc_types::TransactionRequest::default() - .with_call(&ECDSAStakeRegistry::registerOperatorWithSignatureCall { _operator: operator_address, _operatorSignature: operator_signature_with_salt_and_expiry}) + .with_call(&ECDSAStakeRegistry::registerOperatorWithSignatureCall { + _operator: operator_address, + _operatorSignature: operator_signature_with_salt_and_expiry, + }) .with_from(operator_address) .with_to(stake_registry) .with_nonce( @@ -191,7 +193,11 @@ pub async fn register_to_eigenlayer_and_avs( info!("Got Transaction Hash: {}", tx_hash); - let receipt = provider.get_transaction_receipt(tx_hash).await.unwrap().unwrap(); + let receipt = provider + .get_transaction_receipt(tx_hash) + .await + .unwrap() + .unwrap(); info!("Got Transaction Receipt: {:?}", receipt); if !receipt.status() { From 7248cb0c290bf5ffbb97e582d9858e19f95a23a2 Mon Sep 17 00:00:00 2001 From: Tjemmmic Date: Mon, 18 Nov 2024 18:03:31 -0600 Subject: [PATCH 13/15] fix: tangle avs tests now completely work --- metadata.json | 4 +- src/error.rs | 12 +++- src/lib.rs | 8 ++- src/tests.rs | 115 ++++++++++++++++++-------------- src/utils/eigenlayer.rs | 142 ++++++++++++++++++++++++++-------------- src/utils/tangle.rs | 21 ++++++ 6 files changed, 197 insertions(+), 105 deletions(-) diff --git a/metadata.json b/metadata.json index 4da20f0..1ffbc31 100644 --- a/metadata.json +++ b/metadata.json @@ -1,7 +1,7 @@ { "name": "Tangle AVS", "website": "https://www.tangle.tools/", - "description": "A modular restaking infrastructure for complex services.", + "description": "A modular restaking infrastructure for on-demand decentralized services.", "logo": "https://raw.githubusercontent.com/tangle-network/avs/main/logo.png", - "twitter": "https://x.com/webbprotocol" + "twitter": "https://x.com/tangle_network" } \ No newline at end of file diff --git a/src/error.rs b/src/error.rs index 6e6bcd5..c672a42 100644 --- a/src/error.rs +++ b/src/error.rs @@ -4,13 +4,19 @@ use thiserror::Error; #[derive(Debug, Error)] pub enum Error { #[error("EigenLayer registration error: {0}")] - EigenLayerRegistration(String), + EigenLayerRegistrationError(String), #[error("Tangle registration error: {0}")] - TangleRegistration(String), + TangleRegistrationError(String), + + #[error("Signer error: {0}")] + SignerError(String), + + #[error("Transaction error: {0}")] + TransactionError(String), #[error("Other error: {0}")] - Other(String), + OtherError(String), } impl From for Error { diff --git a/src/lib.rs b/src/lib.rs index 23afd8f..e77a6bc 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,4 +1,4 @@ -use crate::utils::tangle::{bond_balance, update_session_key}; +use crate::utils::tangle::{bond_balance, update_session_key, validate}; pub use crate::utils::tangle::{run_tangle_validator, BalanceTransferContext}; use color_eyre::eyre::Result; use gadget_sdk::event_listener::tangle::{TangleEvent, TangleEventListener}; @@ -17,7 +17,6 @@ mod tests; id = 0, event_listener( listener = TangleEventListener, - // pre_processor = balance_transfer_pre_processor, ) )] pub async fn register_to_tangle( @@ -84,6 +83,11 @@ pub async fn tangle_avs_registration( })?; // Validate + validate(&env.clone()) + .await + .map_err(|e| gadget_sdk::Error::Job { + reason: e.to_string(), + })?; Ok(()) } diff --git a/src/tests.rs b/src/tests.rs index 40b43a5..65289c2 100644 --- a/src/tests.rs +++ b/src/tests.rs @@ -1,5 +1,7 @@ pub use crate::utils::constants; use crate::utils::eigenlayer::register_to_eigenlayer_and_avs; +use crate::utils::sol_imports::ECDSAStakeRegistry; +use crate::utils::sol_imports::ECDSAStakeRegistry::{Quorum, StrategyParams}; use crate::utils::sol_imports::*; use crate::BalanceTransferContext; use crate::RegisterToTangleEventHandler; @@ -8,8 +10,6 @@ use alloy_provider::network::{EthereumWallet, TransactionBuilder}; use alloy_provider::Provider; use blueprint_test_utils::test_ext::NAME_IDS; use blueprint_test_utils::{inject_test_keys, KeyGenType}; -use eigensdk::utils::binding::ECDSAStakeRegistry; -use eigensdk::utils::binding::ECDSAStakeRegistry::{Quorum, StrategyParams}; use gadget_sdk::config::{ContextConfig, GadgetCLICoreSettings, Protocol}; use gadget_sdk::ext::sp_core; use gadget_sdk::ext::sp_core::Pair; @@ -236,7 +236,7 @@ async fn test_full_tangle_avs() { // Spawn task to transfer balance into Operator's account on Tangle let transfer_task = async move { - tokio::time::sleep(Duration::from_secs(4)).await; + tokio::time::sleep(Duration::from_secs(10)).await; info!( "Transferring balance from {:?} to {:?}", signer_id, transfer_destination @@ -255,6 +255,23 @@ async fn test_full_tangle_avs() { }; let _transfer_handle = tokio::task::spawn(transfer_task); + let mine_task = async move { + loop { + tokio::time::sleep(Duration::from_secs(3)).await; + tokio::process::Command::new("sh") + .arg("-c") + .arg(format!( + "cast rpc anvil_mine 1 --rpc-url {} > /dev/null", + http_endpoint + )) + .output() + .await + .unwrap(); + info!("Mined a block"); + } + }; + let _mine_handle = tokio::task::spawn(mine_task); + // Create Instance of the Event Handler let context = BalanceTransferContext { client: client.clone(), @@ -312,50 +329,50 @@ async fn test_holesky_tangle_avs() { info!("ECDSA Private Key: {}", private_key_hex); info!("ECDSA Public Key: {:?}", operator_ecdsa_signer.public()); - // // Create signer from funder's private key - // // Private key of the account that will send ETH to the new test operator - // let funder_private_key = - // std::env::var("FUNDER_PRIVATE_KEY").expect("FUNDER_PRIVATE_KEY must be set"); - // - // // Create a provider for the ETH network - // let provider = alloy_provider::ProviderBuilder::new() - // .with_recommended_fillers() - // .on_http(eth_http_endpoint.parse().unwrap()) - // .root() - // .clone() - // .boxed(); - - // let funder_signer = - // alloy_signer_local::PrivateKeySigner::from_str(&funder_private_key).unwrap(); - // - // // Transfer ETH to operator's account - // let anvil_tx_amount = 300_000_000_000_000u64; // Enough to cover registration - // let tx = alloy_rpc_types::TransactionRequest::default() - // .with_from(funder_signer.address()) - // .with_to(operator_ecdsa_signer.alloy_address().unwrap()) - // .with_value(U256::from(anvil_tx_amount)) - // .with_nonce(provider.get_transaction_count(funder_signer.address()).await.unwrap()) - // .with_chain_id(provider.get_chain_id().await.unwrap()) - // .with_gas_limit(21_000) - // .with_max_priority_fee_per_gas(1_000_000_000) - // .with_max_fee_per_gas(20_000_000_000); - // - // let funder_wallet = EthereumWallet::from(funder_signer.clone()); - // let tx_envelope = tx.build(&funder_wallet).await.unwrap(); - // - // let tx_hash = provider - // .send_tx_envelope(tx_envelope) - // .await - // .unwrap() - // .watch() - // .await - // .unwrap(); - // info!( - // "Transferred {anvil_tx_amount} from {:?} to {:?}\n\tHash: {:?}", - // funder_signer.address(), - // operator_ecdsa_signer.alloy_address(), - // tx_hash - // ); + // Private key of the account that will send ETH to the new test operator + let funder_private_key = + std::env::var("FUNDER_PRIVATE_KEY").expect("FUNDER_PRIVATE_KEY must be set"); + + // Create a provider for the ETH network + let provider = alloy_provider::ProviderBuilder::new() + .with_recommended_fillers() + .on_http(eth_http_endpoint.parse().unwrap()) + .root() + .clone() + .boxed(); + + // Create signer from funder's private key + let funder_signer = + alloy_signer_local::PrivateKeySigner::from_str(&funder_private_key).unwrap(); + + // Transfer ETH to operator's account + let anvil_tx_amount = 600_000_000_000_000u64; // Enough to cover registration + let tx = alloy_rpc_types::TransactionRequest::default() + .with_from(funder_signer.address()) + .with_to(operator_ecdsa_signer.alloy_address().unwrap()) + .with_value(U256::from(anvil_tx_amount)) + .with_nonce(provider.get_transaction_count(funder_signer.address()).await.unwrap()) + .with_chain_id(provider.get_chain_id().await.unwrap()) + .with_gas_limit(21_000) + .with_max_priority_fee_per_gas(1_000_000_000) + .with_max_fee_per_gas(20_000_000_000); + + let funder_wallet = EthereumWallet::from(funder_signer.clone()); + let tx_envelope = tx.build(&funder_wallet).await.unwrap(); + + let tx_hash = provider + .send_tx_envelope(tx_envelope) + .await + .unwrap() + .watch() + .await + .unwrap(); + info!( + "Transferred {anvil_tx_amount} from {:?} to {:?}\n\tHash: {:?}", + funder_signer.address(), + operator_ecdsa_signer.alloy_address(), + tx_hash + ); // Parse Tangle node URL let ws_tangle_url = Url::parse(&tangle_ws_endpoint).unwrap(); @@ -378,7 +395,7 @@ async fn test_holesky_tangle_avs() { keystore_password: None, blueprint_id: Some(0), service_id: Some(0), - skip_registration: false, + skip_registration: true, protocol: Protocol::Eigenlayer, registry_coordinator: Some(ZERO_ADDRESS), // We don't need this for the Tangle AVS operator_state_retriever: Some(ZERO_ADDRESS), // We don't need this for the Tangle AVS @@ -409,7 +426,7 @@ async fn test_holesky_tangle_avs() { // Spawn task to transfer balance into Operator's account on Tangle let transfer_task = async move { - tokio::time::sleep(Duration::from_secs(4)).await; + tokio::time::sleep(Duration::from_secs(20)).await; info!( "Transferring balance from {:?} to {:?}", signer_id, transfer_destination diff --git a/src/utils/eigenlayer.rs b/src/utils/eigenlayer.rs index 810d885..d4b776c 100644 --- a/src/utils/eigenlayer.rs +++ b/src/utils/eigenlayer.rs @@ -1,7 +1,5 @@ use crate::error::Error; -// use crate::utils::sol_imports::ECDSAStakeRegistry::{ -// registerOperatorWithSignatureCall, ECDSAStakeRegistryCalls, -// }; +use crate::utils::sol_imports::ECDSAStakeRegistry; use crate::utils::sol_imports::TangleServiceManager; use alloy_primitives::{Address, FixedBytes, U256}; use alloy_provider::network::{EthereumWallet, TransactionBuilder}; @@ -13,7 +11,7 @@ use eigensdk::client_elcontracts::reader::ELChainReader; use eigensdk::client_elcontracts::writer::ELChainWriter; use eigensdk::logging::get_test_logger; use eigensdk::types::operator::Operator; -use eigensdk::utils::binding::ECDSAStakeRegistry; +use gadget_sdk::alloy_rpc_types::BlockNumberOrTag; use gadget_sdk::config::{GadgetConfiguration, ProtocolSpecificSettings}; use gadget_sdk::keystore::BackendExt; use gadget_sdk::utils::evm::get_provider_http; @@ -25,7 +23,7 @@ pub async fn register_to_eigenlayer_and_avs( tangle_service_manager_addr: Address, ) -> Result<(), Error> { let ProtocolSpecificSettings::Eigenlayer(contract_addresses) = &env.protocol_specific else { - return Err(Error::EigenLayerRegistration( + return Err(Error::EigenLayerRegistrationError( "Missing EigenLayer contract addresses".into(), )); }; @@ -36,19 +34,15 @@ pub async fn register_to_eigenlayer_and_avs( let operator = env .keystore() - .map_err(|e| Error::EigenLayerRegistration(e.to_string())) - .unwrap() + .map_err(|e| Error::EigenLayerRegistrationError(e.to_string()))? .ecdsa_key() - .map_err(|e| Error::EigenLayerRegistration(e.to_string())) - .unwrap(); + .map_err(|e| Error::EigenLayerRegistrationError(e.to_string()))?; let operator_private_key = hex::encode(operator.signer().seed()); let wallet = PrivateKeySigner::from_str(&operator_private_key) - .map_err(|_| Error::EigenLayerRegistration("Invalid private key".into())) - .unwrap(); + .map_err(|_| Error::EigenLayerRegistrationError("Invalid private key".into()))?; let operator_address = operator .alloy_key() - .map_err(|e| Error::EigenLayerRegistration(e.to_string())) - .unwrap() + .map_err(|e| Error::EigenLayerRegistrationError(e.to_string()))? .address(); let provider = get_provider_http(&env.http_rpc_endpoint); @@ -61,8 +55,7 @@ pub async fn register_to_eigenlayer_and_avs( .call() .await .map(|a| a._0) - .map_err(|e| Error::EigenLayerRegistration(e.to_string())) - .unwrap(); + .map_err(|e| Error::EigenLayerRegistrationError(e.to_string()))?; let logger = get_test_logger(); let el_chain_reader = ELChainReader::new( @@ -93,8 +86,7 @@ pub async fn register_to_eigenlayer_and_avs( let tx_hash = el_writer .register_as_operator(operator_details) .await - .map_err(|e| Error::EigenLayerRegistration(e.to_string())) - .unwrap(); + .map_err(|e| Error::EigenLayerRegistrationError(e.to_string()))?; info!("Registered as operator for Eigenlayer {:?}", tx_hash); let digest_hash_salt: FixedBytes<32> = FixedBytes::from([0x02; 32]); @@ -115,14 +107,12 @@ pub async fn register_to_eigenlayer_and_avs( sig_expiry, ) .await - .unwrap(); - // .map_err(|_| Error::EigenLayerRegistration("Failed to calculate hash".to_string())).unwrap(); + .map_err(|_| Error::EigenLayerRegistrationError("Failed to calculate hash".to_string()))?; let operator_signature = wallet .sign_hash(&msg_to_sign) .await - .map_err(|_| Error::EigenLayerRegistration("Invalid Signature".to_string())) - .unwrap(); + .map_err(|e| Error::SignerError(e.to_string()))?; let operator_signature_with_salt_and_expiry = ECDSAStakeRegistry::SignatureWithSaltAndExpiry { signature: operator_signature.as_bytes().into(), @@ -130,31 +120,61 @@ pub async fn register_to_eigenlayer_and_avs( expiry: sig_expiry, }; - // Register the operator to AVS + let signer = alloy_signer_local::PrivateKeySigner::from_str(&operator_private_key) + .map_err(|e| Error::SignerError(e.to_string()))?; + let wallet = EthereumWallet::from(signer); + + // --- Register the operator to AVS --- + + // Get the stake registry address to register the operator let tangle_service_manager = TangleServiceManager::new(tangle_service_manager_addr, provider.clone()); let stake_registry = tangle_service_manager .stakeRegistry() .call() .await - .map_err(|e| Error::EigenLayerRegistration(e.to_string())) - .unwrap() + .map_err(|e| Error::TransactionError(e.to_string()))? ._0; - // let ecdsa_stake_registry = ECDSAStakeRegistry::new(stake_registry, provider.clone()); - // let register_call = ecdsa_stake_registry - // .registerOperatorWithSignature(operator_address, operator_signature_with_salt_and_expiry) - // .from(operator_address); - - // let register_call_data = ecdsa_stake_registry - // .registerOperatorWithSignature(operator_signature_with_salt_and_expiry, operator_address) - // .calldata(); info!("Building Transaction"); + let latest_block_number = provider + .get_block_number() + .await + .map_err(|e| Error::TransactionError(e.to_string()))?; + + // Get the latest block to estimate gas price + let latest_block = provider + .get_block_by_number(BlockNumberOrTag::Number(latest_block_number), false) + .await + .map_err(|e| Error::TransactionError(e.to_string()))? + .ok_or(Error::TransactionError( + "Failed to get latest block".into(), + ))?; + + // Get the base fee per gas from the latest block + let base_fee_per_gas = + latest_block + .header + .base_fee_per_gas + .ok_or(Error::TransactionError( + "Failed to get base fee per gas from latest block".into(), + ))?; + + // Get the max priority fee per gas + let max_priority_fee_per_gas = provider + .get_max_priority_fee_per_gas() + .await + .map_err(|e| Error::TransactionError(e.to_string()))?; + + // Calculate max fee per gas + let max_fee_per_gas = base_fee_per_gas + max_priority_fee_per_gas; + + // Build the transaction request let tx = alloy_rpc_types::TransactionRequest::default() .with_call(&ECDSAStakeRegistry::registerOperatorWithSignatureCall { - _operator: operator_address, _operatorSignature: operator_signature_with_salt_and_expiry, + _signingKey: operator_address, }) .with_from(operator_address) .with_to(stake_registry) @@ -162,46 +182,70 @@ pub async fn register_to_eigenlayer_and_avs( provider .get_transaction_count(operator_address) .await - .unwrap(), + .map_err(|e| Error::TransactionError(e.to_string()))?, ) - .with_chain_id(provider.get_chain_id().await.unwrap()) - .with_gas_limit(21_000) - .with_max_priority_fee_per_gas(1_000_000_000) - .with_max_fee_per_gas(20_000_000_000); + .with_chain_id( + provider + .get_chain_id() + .await + .map_err(|e| Error::TransactionError(e.to_string()))?, + ) + .with_max_priority_fee_per_gas(max_priority_fee_per_gas) + .with_max_fee_per_gas(max_fee_per_gas); - let signer = alloy_signer_local::PrivateKeySigner::from_str(&operator_private_key).unwrap(); - let wallet = EthereumWallet::from(signer); + // Estimate gas limit + let gas_estimate = provider + .estimate_gas(&tx) + .await + .map_err(|e| Error::TransactionError(e.to_string()))?; + info!("Gas Estimate: {}", gas_estimate); + + // Set gas limit + let tx = tx.with_gas_limit(gas_estimate); info!("Building Transaction Envelope"); - let tx_envelope = tx.build(&wallet).await.unwrap(); + let tx_envelope = tx + .build(&wallet) + .await + .map_err(|e| Error::TransactionError(e.to_string()))?; info!("Sending Transaction Envelope"); let result = provider .send_tx_envelope(tx_envelope) .await - .unwrap() + .map_err(|e| Error::TransactionError(e.to_string()))? .register() .await - .unwrap(); - // let receipt = provider.get_transaction_receipt(result).await.unwrap().unwrap(); + .map_err(|e| Error::TransactionError(e.to_string()))?; info!("Operator Registration to AVS Sent. Awaiting Receipt..."); - let tx_hash = result.await.unwrap(); + info!("Operator Address: {}", operator_address); + info!("Stake Registry Address: {}", stake_registry); + info!("RPC Endpoint: {}", env.http_rpc_endpoint); - info!("Got Transaction Hash: {}", tx_hash); + let tx_hash = result + .await + .map_err(|e| Error::TransactionError(e.to_string()))?; + + info!( + "Command for testing: cast code {} --rpc-url {}", + stake_registry, env.http_rpc_endpoint + ); let receipt = provider .get_transaction_receipt(tx_hash) .await - .unwrap() - .unwrap(); + .map_err(|e| Error::TransactionError(e.to_string()))? + .ok_or(Error::TransactionError( + "Failed to get receipt".into(), + ))?; info!("Got Transaction Receipt: {:?}", receipt); if !receipt.status() { - return Err(Error::EigenLayerRegistration( + return Err(Error::EigenLayerRegistrationError( "Failed to register operator to AVS".to_string(), )); } diff --git a/src/utils/tangle.rs b/src/utils/tangle.rs index a17729a..b1498b9 100644 --- a/src/utils/tangle.rs +++ b/src/utils/tangle.rs @@ -13,6 +13,8 @@ use gadget_sdk::tangle_subxt::tangle_testnet_runtime::api::session::calls::types use gadget_sdk::tangle_subxt::tangle_testnet_runtime::api::staking::calls::types; use gadget_sdk::{info, trace, tx}; use std::os::unix::fs::PermissionsExt; +use gadget_sdk::tangle_subxt::tangle_testnet_runtime::api::runtime_types::sp_arithmetic::per_things::Perbill; +use gadget_sdk::tangle_subxt::tangle_testnet_runtime::api::staking::calls::types::validate::Prefs; use tokio::process::Command; use url::Url; @@ -132,6 +134,25 @@ pub async fn update_session_key(env: &GadgetConfiguration) -> Result<()> { + let client = env.client().await.map_err(|e| eyre!(e))?; + let sr25519_pair = env.first_sr25519_signer().map_err(|e| eyre!(e))?; + + let start_validation = api::tx().staking().validate(Prefs { + commission: Perbill(5), + blocked: false, + }); + let result = tx::tangle::send(&client, &sr25519_pair, &start_validation) + .await + .map_err(|e| eyre!(e))?; + info!("Start Validation Result: {:?}", result); + + Ok(()) +} + /// Generates keys for a Tangle node /// /// # Returns From 5cf26622351e35b24e915fa4448483847dd5fc69 Mon Sep 17 00:00:00 2001 From: Tjemmmic Date: Mon, 18 Nov 2024 18:17:56 -0600 Subject: [PATCH 14/15] chore: cleanup and formatting --- src/error.rs | 29 +++++++- src/tests.rs | 7 +- src/utils/eigenlayer.rs | 21 +++--- src/utils/tangle.rs | 145 ++++++++++++++++++++++++++-------------- 4 files changed, 135 insertions(+), 67 deletions(-) diff --git a/src/error.rs b/src/error.rs index c672a42..c21409e 100644 --- a/src/error.rs +++ b/src/error.rs @@ -17,10 +17,37 @@ pub enum Error { #[error("Other error: {0}")] OtherError(String), + + #[error("Invalid URL error: {0}")] + InvalidUrl(String), + + #[error("HTTP request error: {0}")] + HttpRequestError(String), + + #[error("JSON error: {0}")] + JsonError(String), + + #[error("Invalid session key length")] + SessionKeyError, + + #[error("Environment variable error: {0}")] + EnvironmentVariableError(String), + + #[error("Job error: {0}")] + JobError(String), + + #[error("Command error: {0}")] + CommandError(String), + + #[error("UTF-8 conversion error: {0}")] + Utf8Error(String), + + #[error("IO error: {0}")] + IoError(String), } impl From for Error { fn from(s: String) -> Self { - Error::Other(s) + Error::OtherError(s) } } diff --git a/src/tests.rs b/src/tests.rs index 65289c2..96cf3fe 100644 --- a/src/tests.rs +++ b/src/tests.rs @@ -351,7 +351,12 @@ async fn test_holesky_tangle_avs() { .with_from(funder_signer.address()) .with_to(operator_ecdsa_signer.alloy_address().unwrap()) .with_value(U256::from(anvil_tx_amount)) - .with_nonce(provider.get_transaction_count(funder_signer.address()).await.unwrap()) + .with_nonce( + provider + .get_transaction_count(funder_signer.address()) + .await + .unwrap(), + ) .with_chain_id(provider.get_chain_id().await.unwrap()) .with_gas_limit(21_000) .with_max_priority_fee_per_gas(1_000_000_000) diff --git a/src/utils/eigenlayer.rs b/src/utils/eigenlayer.rs index d4b776c..1f7e8aa 100644 --- a/src/utils/eigenlayer.rs +++ b/src/utils/eigenlayer.rs @@ -148,18 +148,15 @@ pub async fn register_to_eigenlayer_and_avs( .get_block_by_number(BlockNumberOrTag::Number(latest_block_number), false) .await .map_err(|e| Error::TransactionError(e.to_string()))? - .ok_or(Error::TransactionError( - "Failed to get latest block".into(), - ))?; + .ok_or(Error::TransactionError("Failed to get latest block".into()))?; // Get the base fee per gas from the latest block - let base_fee_per_gas = - latest_block - .header - .base_fee_per_gas - .ok_or(Error::TransactionError( - "Failed to get base fee per gas from latest block".into(), - ))?; + let base_fee_per_gas = latest_block + .header + .base_fee_per_gas + .ok_or(Error::TransactionError( + "Failed to get base fee per gas from latest block".into(), + ))?; // Get the max priority fee per gas let max_priority_fee_per_gas = provider @@ -239,9 +236,7 @@ pub async fn register_to_eigenlayer_and_avs( .get_transaction_receipt(tx_hash) .await .map_err(|e| Error::TransactionError(e.to_string()))? - .ok_or(Error::TransactionError( - "Failed to get receipt".into(), - ))?; + .ok_or(Error::TransactionError("Failed to get receipt".into()))?; info!("Got Transaction Receipt: {:?}", receipt); if !receipt.status() { diff --git a/src/utils/tangle.rs b/src/utils/tangle.rs index b1498b9..3b8022b 100644 --- a/src/utils/tangle.rs +++ b/src/utils/tangle.rs @@ -1,4 +1,4 @@ -use color_eyre::eyre::{eyre, Result}; +use color_eyre::eyre::Result; use gadget_sdk::clients::tangle::runtime::TangleClient; use gadget_sdk::config::GadgetConfiguration; use gadget_sdk::executor::process::manager::GadgetProcessManager; @@ -12,6 +12,7 @@ use gadget_sdk::tangle_subxt::tangle_testnet_runtime::api::session::calls::types }; use gadget_sdk::tangle_subxt::tangle_testnet_runtime::api::staking::calls::types; use gadget_sdk::{info, trace, tx}; +use crate::error::Error; use std::os::unix::fs::PermissionsExt; use gadget_sdk::tangle_subxt::tangle_testnet_runtime::api::runtime_types::sp_arithmetic::per_things::Perbill; use gadget_sdk::tangle_subxt::tangle_testnet_runtime::api::staking::calls::types::validate::Prefs; @@ -28,10 +29,17 @@ pub struct BalanceTransferContext { /// /// # Note /// This function does not currently utilize a proxy account. -pub async fn bond_balance(env: &GadgetConfiguration) -> Result<()> { - let client = env.client().await.map_err(|e| eyre!(e))?; - let _ecdsa_pair = env.first_ecdsa_signer().map_err(|e| eyre!(e))?; - let sr25519_pair = env.first_sr25519_signer().map_err(|e| eyre!(e))?; +pub async fn bond_balance(env: &GadgetConfiguration) -> Result<(), Error> { + let client = env + .client() + .await + .map_err(|e| Error::TangleRegistrationError(e.to_string()))?; + let _ecdsa_pair = env + .first_ecdsa_signer() + .map_err(|e| Error::SignerError(e.to_string()))?; + let sr25519_pair = env + .first_sr25519_signer() + .map_err(|e| Error::SignerError(e.to_string()))?; // // ---------- Add Proxy Account ---------- // let add_proxy_tx = api::tx().proxy().add_proxy( @@ -50,19 +58,30 @@ pub async fn bond_balance(env: &GadgetConfiguration) -> ); let result = tx::tangle::send(&client, &sr25519_pair, &bond_stash_tx) .await - .map_err(|e| eyre!(e))?; + .map_err(|e| Error::TangleRegistrationError(e.to_string()))?; info!("Stash Account Bonding Result: {:?}", result); Ok(()) } /// Update the session key for the Operator specified in the [`GadgetConfiguration`] -pub async fn update_session_key(env: &GadgetConfiguration) -> Result<()> { - let tangle_client = env.client().await.map_err(|e| eyre!(e))?; - let _ecdsa_pair = env.first_ecdsa_signer().map_err(|e| eyre!(e))?; - let sr25519_pair = env.first_sr25519_signer().map_err(|e| eyre!(e))?; - let http_endpoint = Url::parse(&env.target_endpoint_http()).map_err(|e| eyre!(e))?; - let ws_endpoint = Url::parse(&env.target_endpoint_ws()).map_err(|e| eyre!(e))?; +pub async fn update_session_key( + env: &GadgetConfiguration, +) -> Result<(), Error> { + let tangle_client = env + .client() + .await + .map_err(|e| Error::TangleRegistrationError(e.to_string()))?; + let _ecdsa_pair = env + .first_ecdsa_signer() + .map_err(|e| Error::SignerError(e.to_string()))?; + let sr25519_pair = env + .first_sr25519_signer() + .map_err(|e| Error::SignerError(e.to_string()))?; + let http_endpoint = + Url::parse(&env.target_endpoint_http()).map_err(|e| Error::InvalidUrl(e.to_string()))?; + let ws_endpoint = + Url::parse(&env.target_endpoint_ws()).map_err(|e| Error::InvalidUrl(e.to_string()))?; // First, rotate keys let client = reqwest::Client::new(); @@ -73,14 +92,20 @@ pub async fn update_session_key(env: &GadgetConfiguration::new( RpcClient::from_url(ws_endpoint) .await - .map_err(|e| eyre!(e))?, + .map_err(|e| Error::TangleRegistrationError(e.to_string()))?, ) .author_rotate_keys() .await - .map_err(|e| eyre!(e))?; + .map_err(|e| Error::TangleRegistrationError(e.to_string()))?; if session_keys.len() != 96 { - return Err(eyre!("Invalid session key length")); + return Err(Error::SessionKeyError); } // Split the session_keys into individual keys @@ -114,20 +139,25 @@ pub async fn update_session_key(env: &GadgetConfiguration) -> Result<()> { - let client = env.client().await.map_err(|e| eyre!(e))?; - let sr25519_pair = env.first_sr25519_signer().map_err(|e| eyre!(e))?; +pub async fn validate(env: &GadgetConfiguration) -> Result<(), Error> { + let client = env + .client() + .await + .map_err(|e| Error::TangleRegistrationError(e.to_string()))?; + let sr25519_pair = env + .first_sr25519_signer() + .map_err(|e| Error::SignerError(e.to_string()))?; let start_validation = api::tx().staking().validate(Prefs { commission: Perbill(5), @@ -147,7 +182,7 @@ pub async fn validate(env: &GadgetConfiguration) -> Resu }); let result = tx::tangle::send(&client, &sr25519_pair, &start_validation) .await - .map_err(|e| eyre!(e))?; + .map_err(|e| Error::TangleRegistrationError(e.to_string()))?; info!("Start Validation Result: {:?}", result); Ok(()) @@ -166,14 +201,19 @@ pub async fn validate(env: &GadgetConfiguration) -> Resu /// - Fails if any of the required environment variables are not set /// - If any key generation commands fail /// -pub async fn generate_keys(base_path: &str) -> Result { +pub async fn generate_keys(base_path: &str) -> Result { let mut manager = GadgetProcessManager::new(); - let acco_seed = std::env::var("ACCO_SURI").map_err(|e| eyre!(e))?; - let babe_seed = std::env::var("BABE_SURI").map_err(|e| eyre!(e))?; - let imon_seed = std::env::var("IMON_SURI").map_err(|e| eyre!(e))?; - let gran_seed = std::env::var("GRAN_SURI").map_err(|e| eyre!(e))?; - let role_seed = std::env::var("ROLE_SURI").map_err(|e| eyre!(e))?; + let acco_seed = + std::env::var("ACCO_SURI").map_err(|e| Error::EnvironmentVariableError(e.to_string()))?; + let babe_seed = + std::env::var("BABE_SURI").map_err(|e| Error::EnvironmentVariableError(e.to_string()))?; + let imon_seed = + std::env::var("IMON_SURI").map_err(|e| Error::EnvironmentVariableError(e.to_string()))?; + let gran_seed = + std::env::var("GRAN_SURI").map_err(|e| Error::EnvironmentVariableError(e.to_string()))?; + let role_seed = + std::env::var("ROLE_SURI").map_err(|e| Error::EnvironmentVariableError(e.to_string()))?; // Key Generation Commands // TODO: Update base-path and chain to be variables @@ -192,11 +232,11 @@ pub async fn generate_keys(base_path: &str) -> Result { let service = manager .run(service_name, &full_command) .await - .map_err(|e| eyre!("Failed to start service: {}", e))?; + .map_err(|e| Error::JobError(e.to_string()))?; let _output = manager .focus_service_to_completion(service) .await - .map_err(|e| eyre!("Service failed: {}", e))?; + .map_err(|e| Error::JobError(e.to_string()))?; } // Execute the node-key generation command and capture its output @@ -207,14 +247,17 @@ pub async fn generate_keys(base_path: &str) -> Result { .args(["key", "generate-node-key", "--file", &node_path]) .output() .await - .map_err(|e| eyre!("Command failed: {}", e))?; + .map_err(|e| Error::CommandError(e.to_string()))?; if !output.status.success() { - return Err(eyre!( + return Err(Error::CommandError(format!( "Command failed with code: {:?}", output.status.code() - )); + ))); } - let node_key = String::from_utf8(output.stderr)?.trim().to_string(); + let node_key = String::from_utf8(output.stderr) + .map_err(|e| Error::Utf8Error(e.to_string()))? + .trim() + .to_string(); info!("Node key: {}", node_key); Ok(node_key) @@ -233,7 +276,7 @@ pub async fn generate_keys(base_path: &str) -> Result { /// - The binary download fails /// - Setting executable permissions fails /// - The binary execution fails -pub async fn run_tangle_validator(keystore_base_path: &str) -> Result<()> { +pub async fn run_tangle_validator(keystore_base_path: &str) -> Result<(), Error> { let keystore_base_path = keystore_base_path.trim_start_matches("file:"); let mut manager = GadgetProcessManager::new(); @@ -245,15 +288,16 @@ pub async fn run_tangle_validator(keystore_base_path: &str) -> Result<()> { let install = manager .run("binary_install".to_string(), "wget https://github.com/webb-tools/tangle/releases/download/v1.0.0/tangle-default-linux-amd64") .await - .map_err(|e| eyre!(e.to_string()))?; + .map_err(|e| Error::JobError(e.to_string()))?; manager .focus_service_to_completion(install) .await - .map_err(|e| eyre!(e.to_string()))?; + .map_err(|e| Error::JobError(e.to_string()))?; } // Check if the binary is executable - let metadata = std::fs::metadata("tangle-default-linux-amd64")?; + let metadata = std::fs::metadata("tangle-default-linux-amd64") + .map_err(|e| Error::IoError(e.to_string()))?; let permissions = metadata.permissions(); if !permissions.mode() & 0o111 != 0 { let make_executable = manager @@ -262,19 +306,16 @@ pub async fn run_tangle_validator(keystore_base_path: &str) -> Result<()> { "chmod +x tangle-default-linux-amd64", ) .await - .map_err(|e| eyre!(e.to_string()))?; + .map_err(|e| Error::JobError(e.to_string()))?; manager .focus_service_to_completion(make_executable) .await - .map_err(|e| eyre!(e.to_string()))?; + .map_err(|e| Error::JobError(e.to_string()))?; } - let _node_key = - generate_keys(keystore_base_path) - .await - .map_err(|e| gadget_sdk::Error::Job { - reason: e.to_string(), - })?; + let _node_key = generate_keys(keystore_base_path) + .await + .map_err(|e| Error::JobError(e.to_string()))?; let chain = "local"; let name = "TESTNODE"; @@ -297,12 +338,12 @@ pub async fn run_tangle_validator(keystore_base_path: &str) -> Result<()> { let _validator_stream = manager .run("tangle_validator".into(), start_node_command.as_str()) .await - .map_err(|e| eyre!(e.to_string())) + .map_err(|e| Error::JobError(e.to_string())) .unwrap(); manager .focus_service_to_completion("tangle_validator".into()) .await - .map_err(|e| eyre!(e.to_string())) + .map_err(|e| Error::JobError(e.to_string())) .unwrap(); }); From 263c182367a5850be9602d266d28219bccc663de Mon Sep 17 00:00:00 2001 From: Tjemmmic Date: Mon, 18 Nov 2024 18:27:13 -0600 Subject: [PATCH 15/15] chore: remove unnecessary files --- contracts/script/DeployCoreContracts.s.sol | 219 ------------------ .../script/InitializeCoreContracts.s.sol | 62 ----- verify_proxy_contracts.sh | 117 ---------- 3 files changed, 398 deletions(-) delete mode 100644 contracts/script/DeployCoreContracts.s.sol delete mode 100644 contracts/script/InitializeCoreContracts.s.sol delete mode 100755 verify_proxy_contracts.sh diff --git a/contracts/script/DeployCoreContracts.s.sol b/contracts/script/DeployCoreContracts.s.sol deleted file mode 100644 index 2534ff4..0000000 --- a/contracts/script/DeployCoreContracts.s.sol +++ /dev/null @@ -1,219 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; - -import {Script} from "forge-std/Script.sol"; -import {RegistryCoordinator} from "../lib/eigenlayer-middleware/src/RegistryCoordinator.sol"; -import {BLSApkRegistry} from "../lib/eigenlayer-middleware/src/BLSApkRegistry.sol"; -import {StakeRegistry} from "../lib/eigenlayer-middleware/src/StakeRegistry.sol"; -import {IndexRegistry} from "../lib/eigenlayer-middleware/src/IndexRegistry.sol"; -import {OperatorStateRetriever} from "../lib/eigenlayer-middleware/src/OperatorStateRetriever.sol"; -import {TangleServiceManager} from "../src/TangleServiceManager.sol"; -import {PauserRegistry} from "../lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/permissions/PauserRegistry.sol"; -import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; -import {TransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; -import {EmptyContract} from "../lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/test/mocks/EmptyContract.sol"; -import {IStrategy} from "../lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IStrategy.sol"; -import {IServiceManager} from "../lib/eigenlayer-middleware/src/interfaces/IServiceManager.sol"; -import {IStakeRegistry} from "../lib/eigenlayer-middleware/src/interfaces/IStakeRegistry.sol"; -import {IIndexRegistry} from "../lib/eigenlayer-middleware/src/interfaces/IIndexRegistry.sol"; -import {IBLSApkRegistry} from "../lib/eigenlayer-middleware/src/interfaces/IBLSApkRegistry.sol"; -import {IRegistryCoordinator} from "../lib/eigenlayer-middleware/src/interfaces/IRegistryCoordinator.sol"; -import {IDelegationManager} from "../lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IDelegationManager.sol"; -import {IAVSDirectory} from "../lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IAVSDirectory.sol"; -import {ISlasher} from "../lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/ISlasher.sol"; - -import "forge-std/console.sol"; -import "forge-std/StdJson.sol"; - -contract DeployCoreContracts is Script { - // Proxy admin for upgradeable contracts - ProxyAdmin public tangleProxyAdmin; - - function run() external { -// IStrategy[1] memory deployedStrategyArray = [IStrategy(0x80528D6e9A2BAbFc766965E0E26d5aB08D9CFaF9)]; // wETH strategy -// uint numStrategies = deployedStrategyArray.length; -// -// uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); -// vm.startBroadcast(deployerPrivateKey); -// -// // Deploy proxy admin for upgradeability -// tangleProxyAdmin = new ProxyAdmin(); -// -// // Deploy empty contract for initial proxy implementation -// EmptyContract emptyContract = new EmptyContract(); -// -// IDelegationManager delegationManager = IDelegationManager( -// 0xA44151489861Fe9e3055d95adC98FbD462B948e7 // Delegation Manager -// ); -// -// // Deploy PauserRegistry first (required by RegistryCoordinator) -// address[] memory pausers = new address[](1); -// pausers[0] = vm.addr(deployerPrivateKey); // deployer is the pauser -// address unpauser = vm.addr(deployerPrivateKey); // deployer is the unpauser -// PauserRegistry pauserRegistry = new PauserRegistry(pausers, unpauser); -// -// // Deploy proxies pointing to empty implementation initially -// IServiceManager tangleServiceManager = IServiceManager( -// address( -// new TransparentUpgradeableProxy( -// address(emptyContract), -// address(tangleProxyAdmin), -// "" -// ) -// ) -// ); -// -// RegistryCoordinator registryCoordinator = RegistryCoordinator( -// address( -// new TransparentUpgradeableProxy( -// address(emptyContract), -// address(tangleProxyAdmin), -// "" -// ) -// ) -// ); -// -// IIndexRegistry indexRegistry = IIndexRegistry( -// address( -// new TransparentUpgradeableProxy( -// address(emptyContract), -// address(tangleProxyAdmin), -// "" -// ) -// ) -// ); -// -// IBLSApkRegistry blsApkRegistry = IBLSApkRegistry( -// address( -// new TransparentUpgradeableProxy( -// address(emptyContract), -// address(tangleProxyAdmin), -// "" -// ) -// ) -// ); -// -// IStakeRegistry stakeRegistry = IStakeRegistry( -// address( -// new TransparentUpgradeableProxy( -// address(emptyContract), -// address(tangleProxyAdmin), -// "" -// ) -// ) -// ); -// -// OperatorStateRetriever operatorStateRetriever = new OperatorStateRetriever(); -// -// { -// // Deploy implementation contracts -// StakeRegistry stakeRegistryImplementation = new StakeRegistry( -// registryCoordinator, -// delegationManager -// ); -// tangleProxyAdmin.upgrade( -// TransparentUpgradeableProxy(payable(address(stakeRegistry))), -// address(stakeRegistryImplementation) -// ); -// -// BLSApkRegistry blsApkRegistryImplementation = new BLSApkRegistry( -// registryCoordinator -// ); -// tangleProxyAdmin.upgrade( -// TransparentUpgradeableProxy(payable(address(blsApkRegistry))), -// address(blsApkRegistryImplementation) -// ); -// -// IndexRegistry indexRegistryImplementation = new IndexRegistry( -// registryCoordinator -// ); -// tangleProxyAdmin.upgrade( -// TransparentUpgradeableProxy(payable(address(indexRegistry))), -// address(indexRegistryImplementation) -// ); -// } -// -// RegistryCoordinator registryCoordinatorImplementation = new RegistryCoordinator( -// tangleServiceManager, -// IStakeRegistry(stakeRegistry), -// IBLSApkRegistry(blsApkRegistry), -// IIndexRegistry(indexRegistry) -// ); -// -// { -// uint numQuorums = 1; -// // Define the following for each quorum -// // QuorumOperatorSetParam, minimumStakeForQuorum, and strategyParams -// IRegistryCoordinator.OperatorSetParam[] -// memory quorumsOperatorSetParams = new IRegistryCoordinator.OperatorSetParam[]( -// numQuorums -// ); -// for (uint i = 0; i < numQuorums; i++) { -// quorumsOperatorSetParams[i] = IRegistryCoordinator -// .OperatorSetParam({ -// maxOperatorCount: 10000, -// kickBIPsOfOperatorStake: 15000, -// kickBIPsOfTotalStake: 100 -// }); -// } -// // set to 0 for every quorum -// uint96[] memory quorumsMinimumStake = new uint96[](numQuorums); -// IStakeRegistry.StrategyParams[][] -// memory quorumsStrategyParams = new IStakeRegistry.StrategyParams[][]( -// numQuorums -// ); -// for (uint i = 0; i < numQuorums; i++) { -// quorumsStrategyParams[i] = new IStakeRegistry.StrategyParams[]( -// numStrategies -// ); -// for (uint j = 0; j < numStrategies; j++) { -// quorumsStrategyParams[i][j] = IStakeRegistry -// .StrategyParams({ -// strategy: deployedStrategyArray[j], -// multiplier: 1 ether -// }); -// } -// } -// tangleProxyAdmin.upgradeAndCall( -// TransparentUpgradeableProxy( -// payable(address(registryCoordinator)) -// ), -// address(registryCoordinatorImplementation), -// abi.encodeWithSelector( -// RegistryCoordinator.initialize.selector, -// vm.addr(deployerPrivateKey), -// vm.addr(deployerPrivateKey), -// vm.addr(deployerPrivateKey), -// pauserRegistry, -// 0, // 0 initialPausedStatus means everything unpaused -// quorumsOperatorSetParams, -// quorumsMinimumStake, -// quorumsStrategyParams -// ) -// ); -// } -// -// ISlasher slasher = ISlasher(address(0)); // TODO: Deploy real slasher -// -// TangleServiceManager tangleServiceManagerImplementation = new TangleServiceManager( -// IAVSDirectory(0x055733000064333CaDDbC92763c58BF0192fFeBf), // AVS Directory -// registryCoordinator, -// stakeRegistry, -// slasher // TODO: Slasher -// ); -// -// vm.stopBroadcast(); -// -// // Log deployed addresses -// console.log("Deployed contracts:"); -// console.log("PauserRegistry:", address(pauserRegistry)); -// console.log("IndexRegistry:", address(indexRegistry)); -// console.log("BLSApkRegistry:", address(blsApkRegistry)); -// console.log("StakeRegistry:", address(stakeRegistry)); -// console.log("TangleServiceManager:", address(tangleServiceManager)); -// console.log("RegistryCoordinator (Proxy):", address(registryCoordinator)); -// console.log("RegistryCoordinator (Implementation):", address(registryCoordinatorImplementation)); -// console.log("OperatorStateRetriever:", address(operatorStateRetriever)); -// console.log("ProxyAdmin:", address(tangleProxyAdmin)); - } -} \ No newline at end of file diff --git a/contracts/script/InitializeCoreContracts.s.sol b/contracts/script/InitializeCoreContracts.s.sol deleted file mode 100644 index 3c55351..0000000 --- a/contracts/script/InitializeCoreContracts.s.sol +++ /dev/null @@ -1,62 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; - -import {Script} from "forge-std/Script.sol"; -import {RegistryCoordinator} from "../lib/eigenlayer-middleware/src/RegistryCoordinator.sol"; -import {BLSApkRegistry} from "../lib/eigenlayer-middleware/src/BLSApkRegistry.sol"; -import {StakeRegistry} from "../lib/eigenlayer-middleware/src/StakeRegistry.sol"; -import {IndexRegistry} from "../lib/eigenlayer-middleware/src/IndexRegistry.sol"; -import {TangleServiceManager} from "../src/TangleServiceManager.sol"; - -contract InitializeMiddleware is Script { - function run() external { -// uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); -// vm.startBroadcast(deployerPrivateKey); -// -// // Load deployed contract addresses from environment variables -// address registryCoordinatorAddr = vm.envAddress("REGISTRY_COORDINATOR_ADDRESS"); -// address serviceManagerAddr = vm.envAddress("SERVICE_MANAGER_ADDRESS"); -// address stakeRegistryAddr = vm.envAddress("STAKE_REGISTRY_ADDRESS"); -// address indexRegistryAddr = vm.envAddress("INDEX_REGISTRY_ADDRESS"); -// address blsApkRegistryAddr = vm.envAddress("BLS_APK_REGISTRY_ADDRESS"); -// -// // Initialize contracts -// RegistryCoordinator registryCoordinator = RegistryCoordinator(registryCoordinatorAddr); -// TangleServiceManager serviceManager = TangleServiceManager(serviceManagerAddr); -// StakeRegistry stakeRegistry = StakeRegistry(stakeRegistryAddr); -// IndexRegistry indexRegistry = IndexRegistry(indexRegistryAddr); -// BLSApkRegistry blsApkRegistry = BLSApkRegistry(blsApkRegistryAddr); -// -// // Initialize ServiceManager -// serviceManager.initialize( -// registryCoordinator, -// vm.addr(deployerPrivateKey) // owner -// ); -// -// // Initialize quorum parameters for the registries -// uint8[] memory quorumNumbers = new uint8[](1); -// quorumNumbers[0] = 0; // First quorum -// -// // Stake Registry parameters -// uint96[] memory minimumStakes = new uint96[](1); -// minimumStakes[0] = 32 ether; // Minimum stake for quorum 0 -// -// uint96[] memory strategyWeights = new uint96[](1); -// strategyWeights[0] = 1000; // Weight for quorum 0 (in basis points) -// -// address[] memory strategies = new address[](1); -// strategies[0] = address(0); // Replace with actual strategy address -// -// // Initialize the first quorum -// registryCoordinator.initialize( -// quorumNumbers, -// minimumStakes, -// strategies, -// strategyWeights -// ); -// -// vm.stopBroadcast(); -// -// console.log("Middleware contracts initialized successfully"); - } -} diff --git a/verify_proxy_contracts.sh b/verify_proxy_contracts.sh deleted file mode 100755 index 81c75cf..0000000 --- a/verify_proxy_contracts.sh +++ /dev/null @@ -1,117 +0,0 @@ -#!/bin/bash - -# Set RPC URL -RPC_URL="https://ethereum-holesky.publicnode.com" - -# Function to verify a proxy contract -verify_proxy() { - local contract_name=$1 - local proxy_address=$2 - local implementation_address=$3 - local contract_path=$4 - - echo "Verifying $contract_name..." - echo "Proxy Address: $proxy_address" - echo "Implementation Address: $implementation_address" - echo "Path: $contract_path" - echo "----------------------------------------" - - # First verify the implementation contract - forge verify-contract $implementation_address $contract_path --rpc-url $RPC_URL --watch --via-ir --compiler-version "v0.8.12+commit.f00d7308" --optimizer-runs 200 - - # Then verify the proxy contract - forge verify-contract $proxy_address contracts/lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol:TransparentUpgradeableProxy --rpc-url $RPC_URL --watch --via-ir --compiler-version "v0.8.12+commit.f00d7308" --optimizer-runs 200 - - if [ $? -eq 0 ]; then - echo "✅ $contract_name verification submitted successfully" - else - echo "❌ $contract_name verification failed" - fi - echo "----------------------------------------" - sleep 2 -} - -# Function to verify a regular contract -verify_contract() { - local contract_name=$1 - local contract_address=$2 - local contract_path=$3 - - echo "Verifying $contract_name..." - echo "Address: $contract_address" - echo "Path: $contract_path" - echo "----------------------------------------" - - forge verify-contract $contract_address $contract_path --rpc-url $RPC_URL --watch --via-ir --compiler-version "v0.8.12+commit.f00d7308" --optimizer-runs 200 - - if [ $? -eq 0 ]; then - echo "✅ $contract_name verification submitted successfully" - else - echo "❌ $contract_name verification failed" - fi - echo "----------------------------------------" - sleep 2 -} - -# Create a log directory if it doesn't exist -mkdir -p logs - -# Redirect all output to both console and log file -exec > >(tee -a "logs/verification_$(date +%Y%m%d_%H%M%S).log") 2>&1 - -echo "Starting contract verification process..." -echo "Time: $(date)" -echo "==========================================" - -# First verify the non-proxy contracts -verify_contract "PauserRegistry" \ - "0x06399b7f1Bc83942F44e6E84c44bd50A39A98d4a" \ - "contracts/lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/permissions/PauserRegistry.sol:PauserRegistry" - -verify_contract "ProxyAdmin" \ - "0x73dfBAB6836B466f66126b749eA83581c021d203" \ - "contracts/lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/proxy/transparent/ProxyAdmin.sol:ProxyAdmin" - -verify_contract "OperatorStateRetriever" \ - "0x38F984394c123375ACb7A638b66a78e2D15c987b" \ - "contracts/lib/eigenlayer-middleware/src/OperatorStateRetriever.sol:OperatorStateRetriever" - -verify_contract "EmptyContract" \ - "0x9547D0e9Aa14Ce946D3EA92e48307069f3F2C0a9" \ - "contracts/lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/test/mocks/EmptyContract.sol:EmptyContract" - -# Then verify the proxy contracts and their implementations -# RegistryCoordinator -verify_proxy "RegistryCoordinator" \ - "0x227327316CA7Ec350bb8651bE940C005f3B50c78" \ - "0x0ebA2dD3ddeB33E7B0F362265DeA4d4ed6FB77Fd" \ - "contracts/lib/eigenlayer-middleware/src/RegistryCoordinator.sol:RegistryCoordinator" - -# BLSApkRegistry -verify_proxy "BLSApkRegistry" \ - "0x132A0B5525170a5e7ca55C9933f4ED501519B229" \ - "0xbE5b158e847e53ff0F76fb89d23a115e45956D67" \ - "contracts/lib/eigenlayer-middleware/src/BLSApkRegistry.sol:BLSApkRegistry" - -# IndexRegistry -verify_proxy "IndexRegistry" \ - "0xDfDc051dF13b3437488a5d29C99A7f8c544a152F" \ - "0x65D92d531C375EDf4f2Da31e97308B9fa3554B20" \ - "contracts/lib/eigenlayer-middleware/src/IndexRegistry.sol:IndexRegistry" - -# StakeRegistry -verify_proxy "StakeRegistry" \ - "0x8Ab6DccB5768f8Da704e1c88a1D9E69e4b67C452" \ - "0x60DaAa39914E086686A9A77a3dA176a33da93c7a" \ - "contracts/lib/eigenlayer-middleware/src/StakeRegistry.sol:StakeRegistry" - -# TangleServiceManager -verify_proxy "TangleServiceManager" \ - "0x2ad7E1CDd225eD5FD86C9cAe60B965d434C02660" \ - "0x4b32ce8bC7d0659830a9B18b84A6CEf3cFA99D5A" \ - "contracts/src/TangleServiceManager.sol:TangleServiceManager" - -echo "==========================================" -echo "Verification process completed" -echo "Time: $(date)" -echo "Please check the log file for detailed results"