From 64ec928c89cb6fcf17e08fecb333112d9d67983b Mon Sep 17 00:00:00 2001 From: Gabriel Martinez Rodriguez Date: Wed, 20 Nov 2024 15:17:27 +0100 Subject: [PATCH 1/4] feat(txm): mutex in tx monitor --- bun.lockb | Bin 1002912 -> 1002936 bytes .../lib/LatestOnlyMutex.ts | 33 ++++++++++++++++++ packages/transaction-manager/lib/TxMonitor.ts | 20 +++++++++++ packages/transaction-manager/package.json | 1 + 4 files changed, 54 insertions(+) create mode 100644 packages/transaction-manager/lib/LatestOnlyMutex.ts diff --git a/bun.lockb b/bun.lockb index 9abd24e5f104f70191c7af93d93e6351f17403f8..02376203839d061b1845454caf6ec60d0ebc0f82 100755 GIT binary patch delta 69883 zcmeF4dz?*W-~adCGn-i$=feyp$1oU-)1GMz5h15k3f*WhF=ZTPoTi!v9Z*!-bdiJ* zlcpN#Mm3eX3zei2DwU2#w@OD7@_T>Qx@OFM|9YO+?|EL&^ZNZ`y?p0$ec#u$u63Q) zVQ+h_S(&Qrh?&pYP`MtjXz2*=q4M99J#% z(_$}K4}7&~#*~EVD&LJ$J?(mD_`!?24sA%ZDtkQ*r3TBIq{91rryuaDcl#2rQKq1Z zpBLk0H|IgGTCddf4mS&5hn*abZPBR4u{*pFQ;a`M~ zwE13+s*@UR@cWvfXV!cA5z2A%<~&E>Vj`BH&Cx7W84X37pdHAdE*i7R>yK)v+Vkdl z-hf}0@5N6*)t$}J81xkBq}B0NfZNbmbcl`bhSu`s`R4q-+1v38cF=*AKIvtA7_OQm z6?irL64eabjW$5%KIQk-N7E-w%9uJmV_YG;9{vFerha(-X)nL0Pp7m0al6EGvE7#3>nBzBj}E_#RD4pi2JrRxftKq$y+B$(NozH7g@C z&G%zCExuk}wdcH4-=G>KlhS8SR;o`d-(&TCRIN8YJ$-6IMz$|#d0KYPPd!P44 z;nHxE)-6ZmLe*A=$)!$9pFS}?i^h4i$ZOlQ^y~yRRx-ZZsa8LDQJvIa4#nrA_jkCSHD-l8UIXMqAz&S=dN5|;j6dXpxS@Jl<6wDZ`ffkT_LK$-y5av^5%5%0&`yZ z$QxEqq8cVmZt)Jd8egZNGl#qk>yTarxj8*&rZRr<6K{Ytvl-u)>>VHq-#v95@%Gz; zs)9e-d`^ELKU|?*&G>gB`&y!Pto~5!_qD*^V|6{MWjW94^{AHTBviwp9;)SedUnF(DdW?9 z5kGkKd}OZAU1opy-fQa5Q1!_^PwUTl*@CC7Za~%9E5rNSxA$j;{T)Jium0q<=gm_l zP07m0o<4I%I_KtbzF}|;fW{n5?ft=T-V*%0)wQVB_DVt@{m|w&wt^Sm2(BgWdAR21w2A?@TbII_ z40&_b5TWzVEl~lt2ky51aJ%DD$K#VMpI9m2HcB5GU$?TCap@J`RW@DqDqgydHr*%q zD!`klR;o{<12hgN%t=!wPtfdmtEyMi7p!i!x*Syv=A&A|W?F5IYC4Zb)e8eqrAtP2 zfOj~6TCRu#s^yYw!Ln<51*@WhgFX+$kAqJ*YaMnSl`e_Czt0N=uuacmviHK-2o z9;#*FAC{jWV-;vmU9W3CWIq)=AFg4PhpOPdn1C-&J3dbWtrO!Wd5hxxXS{J$>gV8V z$4OHra3W5h^hD7(^Y!*q>Ra|#!FfR++`yh)y2~=tG{3D)#ws@ zWxSx3H@KSMtIH~(ZiPsvE;rDkj}q_c?r)ZDE_-kkRc zG$uh2st(+Us>5{^#RY+HMh7pW2B@mFoOl&fS4e4-vVG$cy^&dhs-v$)Rqg3%Q{DTv zyGSpdm6kbne45YKs*_hSuNj$x(@3C^Sig%`^T$!ud=;vaYs7S+;{*5_+Rt?L3h--Z zZ*F~ys>SXN1>95XmSiu!<|ST*)}hMhSdynaJo98ECF8L{;M~ zt2bDFIjRwvh^ob!qG}P&Vp-`E(r4Ge*PJ`e0o9U8Jv={*s-h?1>YDe^JSBLQfJ*dt zR5jm-D#M3StsW1c+Tj*d>Bpfe*fprqz1GWXfnNA3cmk?|#aN9(mH!D^NF(+Ds+K&^ zIgsb>@G4EHJ{q4sc81o&jrdAfI%poi*8yL=+)H;GzG^ZC)m$2istfv}D(Llg4E3?v z0@aPsFHAK}k>C0U+%xdD{>(u|tOlq=v#;=4p!6F3L%0U#2ka=lZlHI-9;nhsld&?) z9^`2{s)7`eUIlJ}sw)EZy%y;@r1XR_X-e97pKsG}fSR}(s%wa^W4%H0#g*O;Z=gDJ ztQhLGh#_80e9cu})92%>#&4r4$X2T(!#k2fd7ZEE_KHJQoNB0wxB6OdFTeH8bzXbk zgQ_&aRzA05=i+PV?i%jJKaVPYY{t}1$@J4r#4Fz+sQRlbs!}xac$+yl#CVr1Ls5;C zZ?5(dzHr*REW3==T^S^t2|t$H)rr8>!1*nFGpwx%n$gFZB0zA=J$UR?%BPi zvzr~&^Bcm`y7%?p7v9mmy?;iyxO>QdAl#%!5C4I!X+3rY{C&5^_gWqB@7}tnccX|v z#G2xDE4RjEuBmg!EAzI!GS7cQn{eYtqMW{5_;n|H zU$}5}d(-$Se?R{rlkt?lZ;h%v6w(No*{NM3HTShM{-^!zYg`M~HQda^cFBs!@$gnK z-kg~o+J)M6@cF(nJ)ics^cR_or~N&g67Cl|5?jF}Uh5A<^`7hZb;C71iz7R@#aINn z6cPwedoAR=jmL%QoXBwEZ=pcrdFF{{{N4ShOz|`R9{y1#zK|@}-s$(HdV7RJQJ>=J z04D8tMK{Ml^}EdRLiW1Z#BU+_vpjz4O#;7}mhBHYr*L&Vs$CRvl6V?*30_pVaCykd z!t3hBO?x)vY{F|V&lGm{hk~CgsY&P&=oU5K?+X#(4;SW#oS}G0cmXr5xj*C&n~Y~U z>M^KSt-=){r_}Md8_lZVfqMJo;l!Fnp4BdJV6v<;~|K0*+FPR0yB^JmjR@ z>-SyhdEtx4(I z4xrUvG4U_3$Inm|n}R$RauV+M4pvdE=8VEqAp>qf!gxBMH|+M~*&;It9iG)GCH=cR z6x9RI9bi3Adjrgw22rE?Ok#gV)N{D%yb9sO)zpv&d+pqePktS8I^n5}eJXU+eR%!w zOlek8A40Tm8F3o&;7`?Le69^Si}6zM7#Iwr-FRO0)F6Sd=S8^f+|7DakCZd<)asFL z+~ath)|Jb;Q1D~CuHl5$DS;YG%@eQqyE_AxddKv;4OM{Glhl5b*oW$UkEZ?^o=N!D-z`cZQblT9I=OgiUiSGd zoKL1Kmn!nwQ^N@_Wqhn^Bs|xexC;Jjb2M)zTUFn?&UHGZ$w$#>v-xPZ`!oj@y z9U(Xbua7DCicTPOzEof0*@k{N6dYbaRZZr*q$1>|@@9C)r~JMlWrtmfH>k`zhNsC| zAw2E*kkj~Szpt<2yd5XtDj#nVcHYIkMy|VzG=IjMF{~6Ed^}z!Q}7DsEJN`8n)p7R zRw{Q^n>BvF<1aL=KlFDG_9~>k!U>j-IDZhQITv9P zU+{+lU7j^J9cEd$@ma4doN;GxRqz(>CE#>Hd2nD~vyTlY+L>o5VR@x$oOxJ7iw3A)= z9>mp>O1E%D;`{?wgPJqLL!n^R?etkV;qjE<07Biu1<$8A^9kwvP|019-^24xjanS5 z@9-8I?<9I1o;zOMWpp{7DoGQ?a#@3?`B8S+60G$+3r;w5Q;O4vx(68 zd0L3)wUFlNPi1jBdde$)Ut7vj(VYB{u`>a;b2wo|inEf?`7FM|b7z^mw6xh-zDSet z%Ch%AZSueN_Xu44syY5OV{`ngcJP>!XIV|~)KcycjC$94=dap)uX+8&s2RgBxx~7W z=41&w)ZhcNDD?uvAJC#0o8V%k$;M|F;soxd(VtW9dT^$%C zci?F~V2Co|-on$O&9(k!R@}F|PIPM){2N}93gcgD;(ze>t@8^&BdYP+-c4o#+RCh5 zTcLq_b2SY2hSHq2A4uY=0vnVC3uwJU@zGI9lvj& z7reDJ*e$X&loG79uPlDd`QT=PS9p8e`L06l0q!~<+<4A>qsoHLW`Y_I^Z;Y! z;sbVyxg#wNPvb61H?L7E@!VN*GOmJqV-)-ja%ng-oZ?*ZAuXv~OyVrYE1q3qi$cM; zgN)_yiEmSa6A3ZczDjY{6BC?%*XazD;9NX1H!03eLb_9};tpAd z^Hk~j!A;gqynZJ0^+31CkJK5NT>{-q{AsfL7++Uq-nCZ8kG)H8ZoS`3s)*xFc=tYi zyAuV_h^D3{6czP}H-yR-&ZvG6cZaeieGx><54m&YunW(-;@1AbBb13aQ`%C_Ac!}E z6W4Qnj;Eu!Hxj{5@h;U3i*wPZrKwm0qK4yXAeWWGS#IMwUvfMD9-fXFWfD8EoK*kJ z>pE|d$iN%x9zxFn-ojH>EH(R+Dt>PBEqh2Y9HR2LOKI?7yi3dpT2v`@gtCVZPR*m< zsWj3Q-o<@sUz6bv^l)ZEuOuDUoX>~+Z1VNKH!WTkOSK?`4 zo0GGH-hKQEh_~Qs#omjj{k{9k;MZQoSftj4qAtNx%JX?ohG^~fE}fsnQ{k!bj--m; zcv0t1Jp&-_8taaxxp-QC%g!$TgQmDbpoc%h#8;%Dp7@si!v<eu~=#D>l6OU>v4fz+Ee8Gc2jS;W8 zTmI;sUTTMRfp??zYKC{Jp!>mo13Zyx;xoFm)=Wo0`u=S#fq%| zi)mdw(A_`UWK^dL&;8;JM=oVsG92;L1uS8oCPn_LlS*dwK#DV(pj%P*Cc^)e$*(~t z|M8pOH{2A|2&4qB`n@dp1i@=P>N~}5UhqnSqrKo$1Z{%I5^g^{I-KBDUhs+Y^iP5V zUFux%hgUXE$KQsWd3c&Q43D)TrwC7Dx2F4q@SKgSX{H_YC;3mCo9YB!ayFjv24cV@ zRu6>yADN80)S=y3cd4yQC1(;;<+Vzf-of>N^vgbLq$!AfGNC>4$sEbicl$>$OUK3 zh=4cx+-INuCrx~P4)rtCoek#XMGT5iWWbjaE_gY`$s(lXjHCV*@;_tZ8<6@qP$Q+H zJIi8%0pD;piSAFP;^{0!hhN3PUo3N#u@hCH{LzDXxWi3mbAO8FcSEvnz=zb=y1ToN zW*6aJcPNDJYCpu`N`v$(baM@FXL$xx+%@XW`Qc*8tJUx_UiG;k$OylS+>jZdQapF$yV{aqq zb#mf(a{UI^>m*jaK-apabt}5=7CvCt^9e@6QWAZRYX==4DL8HG1>8FUpL@oQ%EZ-$ ze%Z-}r^y-dRIzr9c_N;*>UvX*>nw}$`i179e_zM5!Ts4a~61G^+=Pn(M_*{M{aSYOMC^!|bZ}@~siF%WehVuE7XG1=S zx9bCaH3qLY@zva-eTt{l9D!?|4t#X4GiTWqNAO0GaKb|=QI8PP<0J2?YRv{G3ZTV+ z$KgexD5inC%9WjFopgwXPgS>`oAFfKD6K%jAfNg3Fy)~X|79klJq@-5pi;3o&|nAf zyrn|xK&>X;fxL6qAUtIo?M{F&p0f3>YQDl#dzmHk>_tbYsh6);h+Fa05qR$=Rm5=< zmwnPOvRS}4PMNvqGp7!pxNDW=Gl7>v{*fl5BL)3CUkbKwS z$yEw-^EjR^$|>3ld=|u)3%tQs$ive0cq%rxVO;kAil-ZN_WPAbHu2toXPKr;@Koq%Gi@HT9#2;mZz2!$TBl}tP>JwY>Vejq6l?-I>&=S$1!yOklQ zQGz$T8KqoB4Z+hsj8dB9UhC0#MV#&u%uO9x7S2H3M{!YI+j)gA8@s{D5XK*m>DCic zbCNGt-#_7H;8k%)@%8P!hUcDq2bIRtN*{EGT8|FoU`{mTw3(-%o5jiRlPcn9l|4UT zD<^u(MGdzbX5gtItA!IE4><*RS{7J#pXC8*$I`OsetRUIeZKNZ$XSP{gSdAW&S5;Q zEYvsRj3cJha6AotckzsR8BdeweC30o(nXX}=k&$XpkQAv z)*dn$mooHsCVM-18Mfq07T(H1_Q5Cd=tCZ4e4~(eAg+cRr+973Veuy7c@Jc!?MsTp z@pkzqAx(ET<6!GztHcc%(9jSJc@&4u=lsWJwo?A5U zL)nJi%gX&^C^!}`$$c*NFd?rrI%|D}cTG6+!xX1~505iB$$BH6CNAeTPO-n^X*_#v z(CJcdq`A%H%*WH|#+%gp@Vs-PZg;Bn^vb{*#u_{fua{Tc{7}%~c@Kf!C!~>UTew&0 zb-+oUap&S)?%t>FC**ZbA|icN1Ru zH{;nMLR>^2o3EbHIYaO?jv3X=>PPW3v{*B~4h7%E>WO_ImM~fFW^2n_O3?y;i+xhryWvPQ#8WeCpIO1gcS}3?mUN~V#igSvPonJhL>o(Yq zW%uJ|X92GJ@Xvh;vUp2%lNM*OC&*5o3VZGo(&|NmRZ z2`<6yViK<5Qi+f*CcUBEeW)#+DI7{~;pxMwYHp3Aukupj9ZrhEQKh^SPClMKA@mY{ zj;AMzp4a8-^4>jonwIp^@{oUsDZYkF;0H|nFyt+hfjAMvyz2&rCu5|0nWt4K2hY9a z^zJ@h$5r3CxjC`ddXb)&j;B?}anDT^@ia@_4-3raAMtgBviQQGJiO1pjzgci&YOka zYI_M^$x$66-On|m=HMzrcRe+qPxU)d5G@1|?(^fQHY2>f&(E|>h&L;^LJqFR8=w_2 z>Np|yLZkG_N>u7dZ#I?f8?^}HUR{-@aSlRM2XBPey51{J&=hW?tMHT~UkV6^woSY~ zuxMQ#Unla7aeO{MdIPFW8bHUQRnW;cehM0ipN$65*{C*Y1bVCW%d7b9mP>V&??7P$Q@~ZTASuT}-H(Cu{X8B*K;@8`Fsmhy=syt6xUQYA$ttQ_qM6^S{ zM|GedY{K$d5&oOy|1YY1ez)nR@=u{^$TQYI>$vsz`OeyeQYHKoRZr+UX6{x_Rp8qA z$|%P2|4fx%Ea{~6QRUmv?$mfE?D*q}Qf3?+Xy!g>R1yr(O zsG4+y7x6Eu0$mSRMx$-KRQv{1`=?nhRl4!=&Eh~ry*x$VXp>E_$)r*6DV9&QI?cwH zSM8r=`CqBxvx(Orx(!vaZb!xG;5@fS?*yn^^HFV5`S+mOVG*jHUt;6St2$!2<^OeM zjO#!vZ3a>uXbq|ou0?f#O*a0&qsp(q?q6QjB7fHyR{?g|1X3ONdCQBe|B}_0QMJfU zR2jT!`CF(C^sbG6&-w>ZRp3+We~D_pf1(=uc|X|%C8!Sk2dcggRQCJ`R0j;A+NAO; zT3@OPRI+Ds zT3@OHcSe=2i{+lu|Njd9)z=PP?T#V4qf{-_!}?Mkpr`ev+OL=O%d7ZhaJAUwXh3Uh zKMMw+N-z-B_E)L{4JQ5~bP}plWsXfRRs5}1b5R{=4yse;B2+E5#KwnF{eKJJMho&$ zZBmATZ!4;%+<|Hx+l?y2x6l~$OH>8^%JOefZBp@L)|YC(?=1hP<*0X#DF@tyKiC9P z)##+%@h4PG{|Bm?oI|yhSFMu~R98_|Q5B?`s&7>Vsfn+AYggg;3e>d;q}rjL)fmgA z%DAERrP}WzROuU8E>!_r+W2_O|4OxA>pT*uLihdfa~1?*t`M6{w-=_CSei5Tw!ejo!?$um)HQVp(bR5iQJ z#@~)={x3mQvt_6b^bo2|D&L?QLu*l`+kh(njc7xiC0-+-`THiSS+LJ0*pDiM_pH8e z;}4 z5M%xFs&p5@Rnx|(S}xwEld2^WsuEqr#wh>!C-+3u+i?Y3DtoLtZuPo*zI;jR)dsOiqYgA~N9cbeRqdLA%0c9`*RZWJw5uU2a|Aw!EjJA4% zjh8BZy!E9@ccb;Cx*)y^CU6RJ(B z0{v|D7t5vMzoN?LcT~swqZ;imaK?gjs16)a-Ahmb)s7XdU&(5;)#_Gjp;{Fipvo@} zRX$Bn?cdaDGgJp|Vf~iXX@4bbV?kR~eg{-d)zxY@RGU;8rdsWeDt#|h>HDE7$d#xH zauupgs{O7;m2QNMzdnzEE;MgM)fG2eor)^qOjMgxCC{QEgJqh8Hb=4OO~bsA{;+@()pMQWfZ+^`-I;SzoGi-Pfop zdK@L6Jl{_?fwTb;(OSN&Dub%{+MyPzCar^t*R|=S^6Ob&ssc7bRnvDpTu(qvoR6x{x1ic_tJP;w z4W5@!ZBoU*Y<;ORe#81w74RKY`Mz)CKeF*s9p}p$YJV?KrpoBJO(@lYe?e8V-z=A^ zMrTl^kErP#ureyYCaMC~LREkmRQuOQm0xoke{oHdRWG8Z``oe>Oq*1Bv`4jXXH-R;qNyYo2+HZ*EQt>M-zYbNSj6s#(L>r$`lSa_YmO-h9der*stZqWpC{LlW=q^+R*o|tFs@vbTzEr)xuO^+Kgzwsj@~Q;y!&QJosL~xq z)tVop%J4HA{}rn3KU3}ZjZIgkdH)W|`P}pPe!|y|zo05e396=c?**(XKA?Mpe^c>D zxU_s&uVTZBpgm22}+* zSS}@9p06_jWz^LsNI|tjcT|1a8`V}`b%1_w?RSNZFR$9~O1uBHsK(4_o36Y@XcDH` z2&rm5*81hO4t$p7QWfAI=jM^&?@E#HEwATL<|B~+VK`MqNGRa6Cf)B10tZcEkXw5tW^Q-GTG zGgQ;=JJe@ZHRO?%@Cmv9rrQ4}%cb@39rg47tZIP#uVnmx<*Np(Y%3s@A6;jh*Fg0F zYM2(NdY~<;o@s9rCZcMoj;J=NhDNfDPqCVcDqVL}o2w@7qKJBapGiR6_U=WjjyBk) zDzDmm2wVg6YE=F;Hl0-dFjU3A4%L*Kh${Ug8=r})^ixr7Qtdab4g*pLC+HL%IctLoPnuJSiQHB;lQCffAnRfp|l`CqB_Pa$6EQf)dk z&#lL001d4nsAm4(Q1#>uR>z|%NII%bs`}q-eW}t_bGd}O)$&qtyc3;?J&>!cca>*8Uo8u9pE9$rKz7yMv(j>@Dz>Jc9YSkugj5OFTVJY#`PP@pe+pH)LR1CVf~tmpN41q#6=*wLBj9D5 z{uP_<71dB%87Swg$=|@&f%c&4x&5dL@FA)LAGH1_sM3FdD&28Z1^OPi!;7qK)WiwG&!x+o(?hrs;+6 zd(lvQ@9V<%y}U7Y;rm_}zVGF&qvgNn#T;?J|D^@~zy3Wh?XCUnW$K0RdtLax*I#|_ zOQ*OC-}k!keXk4O_qtrSAZ-5~)sun|cK`Cq?7HxMufP1>moB9*eBZ0=>s=SV@AW_V zJugjT<)@R|h3|V^_`a9!=P!KU>%#ZFE_~nXMjmhKqp%C#_qy{%2N%BYRrWnEeHPF5&4urKUHHD&h3|V^_`a979Q?)i#rR-_?Jpw!$GJY&zVLmo z3*Yzh9%x0-|NEnz5YLc--{0b|F7?R&EGLOV%v_%k>R^c z+b@Cx&GKI&tC)eskpulx%!*$kuQUCAjeOAq*{0-Iz^30Kqs^$_A_w?qnEc-W!+!@v z{|=aCM*I$lIt3^a$T7|-z;=PmQ-E8|4uOd!fVdJsF0Tdv#QXu+E0AYm{{ZY3$o&H_ z*X$9PeHxH(8gPfnISpua25>~+E)#zSa7bYB8NhsVSYW|fKz17gMlUM}4)BMUl>})D zKe40y_{&VbA22)shzHZQG8vJ8m>^)U zz-kj41nd^b4FcAhJp!{U01_$y)|s3NfL0X&M+7$Tlk0*fmGHk!i%3!(t2QGk52 zFba_508R*OHpvd)n7}FrP+*D$mRAA{sswo2tf&O&R~c|tpwRTM3^*lFP#Lh*ln899 z0vJ^V@SMr70vH|*h>iwqGb5q_QB?s&0y~UT6|h|(vnt>PvqNBFH9%Z70Ka5i4G>cu zuvg$^6I&gyTOhYOV5iw5FuMjIp$6bJlT!oGswUuw!0RTyCg703;+lY6=CHtmT7cAA zfIVhmEkIIjzzKo3Omc0&F@aUJ0eelc!16kPL3IH8%!)dIesuw71@@c%bpfXY3hDyh zHzfj_>H$X8103MT(gDL`0MRjkgJwhwASxD6ByiX`v4HIYnX!P6%?^Qy^#O790Y^+m zeLzeDz+QpROl$+dZh_nefTL!Q!0d*Agoc1GO-@5Vt2n?Bfv-(`9N>_^;yA#!=CHtm zivXz?0gBDSivUTD04D^#Gs%qr#{^b20-P|#0?Qi%1~mr!U{*8+^lJh*D{#{EZvr?a zP|yVMvndhS)D$qPDd1O=-xM&s86dhD;CC~k86c`Tph%#^IL!gu1u~lhPMaM96E6nD zT?{yDGA;(hv;gcCIA>y80Co%HwgC9e9)Z~{0SPSu5hkZ4pj9it5rLqIZv{9cu(%bV zqB$(EARdq!4{*%FctBEXzzKoMCb>1>n82#mfM`=Ju)GamP#Zusv!V^4Ut7Rgff}ZN zTfixSg0_HKrbJ*<0$@}EppMB;01R&jh;9d{XGXLGM70ML3B($wJz%>)W_v&bvqNBF z2S8j0K%B|w0EkHh>=kHaViN(o1#%MsP0SvF*&P819RbZuPDeniPJkl<7n}G_fI|X{ zI{{jn!vYIB15!H!;?2U&fTS*f69R2aau>icfmK}q38q+Jc~`)ou7LJtMOQ#S-lAyE z3M88TA;2ktf)JpSDG}I|1Q?YB=wkAd0K=03(aC_28IcT#x&%-pkZhbw0NVvJF9D>O z9Rd?m0CBt?%%5s9QUEdC0DA>`nAmQB-2%DY06onff!V2mgjB#~CMOlpsypC_Kpzv| z9dJlsad$vpb68+O4?t=UK!3Ba2O#NEzzKl?CizmpF@aT=0tT64f#p2`gL(pnm=!$% z{dxh;3Jf*j5jx4uOe(1H}Ceu*zio4G=R5uvcKUi5&&lEs#43u-5Dmm^~VhFdDGV&g`i%pe6(}_Q#{o_W6pRCGH6;R@#sfx;2Rvu;#{-6^1ESLb+sue`K-7(Z zB7q&oxe>5kAoE7R3ucGF#0h}734kJ#F#!-W5wKU_WfMCQuv;K^B4DT4BQQGykdOg* z&E#YNTHORVBJjG2zX@^E(>tPWMlzivH^PqJ~Oe|fZYPQ*?^;FkHGBd zfQ0FQFHO#LK&u&mBLZKW_!)ph0*hw=zBPvh7R&^s&IA;jg);$3vj8UqzB9?Q0LNxA zf*zg42s&Yk1(wfd+7Fz~&B%|lgX7H^Lb{^JA?j2PI~U}z^UtP4VACytQMUkoHTkyy zhTjT^z7_Dh8F4Eh>NY@;K#6f~18f(_ybW;L>;U-Bm>RjrS(Aa7nA?fon@jXL6MK7* zUvREqvThGvtBVO-f50@!Ln2I$B+~4c1Wo)Lq=K0%sb~%(X2D!?N}Wqij#)StkTef) zLZGrqo(DKKkNQ0_Pq$rn5H;uyqNg zsAKZ)0t~+!5PdhGo*8jBAZk9KNFdfY^8wohGUo#tm>mKW7XacG0OCx>0zk|{z+Qny zCUzlUw?OVfKohe^VD>$LgnIzZOwK)kR`&vq2wZI9?*$wZSbQ&_r8z9HU=bj75g^_y zTm(p33^*as#w0HW91~cz7?5C!1(x3j7<3l-uv;K^DWIp>BQSdzAYmEcGLy3m(CQ(^^QX%g&wWh%Lx4jMkz(;fr08o7 z3oI~zR0HU578*d(a=;0J0Va7l;F!Rw<$yt^SYY`Iz@Qa?A!fx2K);6pX9b3u{tp9A z2^2gGxZ0EmY+4BzwGuGQZsOMh4hbw? z3z%RI3oLjHkop)P!z_FZkhBhPLf~eTybf?oVAVQ6rYRO!z8)}WJz$Diu^!NG1K_N{ zG}C_r;FLhY20*qc5!m!NVASJ)87BX6!0?TL=#79`X2eE7)FwcYK#p-X0k#WdZUWqD zb_h(&2gKzAa!p1)Am$0cUV%Il`vhROK<*QOxn_^R?9G6L&44>h&SpTXCjmzU?lSRD z0uBi*eiAU>92Qtm07xwWEHn!X07*{)P6*sOY)S++6#_;T0+yNlLcs7Xfaom%V@7NNL~R8W39K;AR={?F z%&mZxW{1GUX901~0#=!fX8|$K0rm>4HnGnEb_?V_2Uu(N2+aOFAmQ(TbtdQUfL7Z8 zM+7#Q_-%kg0*ki+Hk!i%3$_DNw*&Ic!tH>h9e@)8n@#c#z%hYUI{*cySYY|{fI-g# zo;E9<2lRUZa8{tu^nU?xN}%8cz*bWtu<1p>s22gxnfw<4!;1jXMSyK)L=hnBB|wqD z4&%H8*e;Oy65s{1Ltx^|fVh_dMJD5AK+G$Ey#g@<4>X72;$}K za&`h*y$U!Y@VbeA6>vyk@vDGc=CHtm*L2PG8Y|2mv+y-Q(mzOX;x$sdWs?5^I3}>_ zAAr54SYY|fkuyOVPwhLtL0eozB2uyqv5cekFh{<>p5c3vbufS&}_AS6}f!wzM zN6j9A*>3|9-UfVWa^42C+6y=$@U@BG3pgaOcrV~vb68-(JAl-80L5nEJAkBpfD;1W zndE(dV*;!80Zy1=f#vT42E7aT!K`=}&~HC&`scf}=}FUnKj74UQWWeb#m}ZhVAFem zQSSkMHTmxWhQAMpejo6=8Sy?K>H|QLK#6fa0Bje?`~Yy;>=2lE01$ToaMolT0K|L< z*eh_(#C{0aEs*;mz;E^l%svQ6I0%R^IR^o)4grn`1Wo)Qz#)OfhX57LVSxpQ0jY-p zj#+pZkn|DYgg|AJ{1M=oz^ab`(WY2n`Nx1k9|NkH6(0loeF8WuP{Z{91aL~A;1fVC zQv&eUHbajfbxb~DhJQ+Q^ruAEGb26)M12M*5{NamKWKL^Bp4u~@u zp95l!0`>|tGO}XsV6F!s9@wezpwJPlSe9?4)Ai}NOR~^g-OAb zEkM0+_%gGoq(W4%^;TX)Y?_o*Xb@LY=-01E%~=U5&2z?tNf|fh+?4(Ow*4g)Y6YB+ zp7+vxwe7^|3Rg!&=kp?G{-gMuEoe12o4Ql8(x*?)NYA>7H#qaXR<~%Cc5S=;T!qPg z|8vissMtQ>U%M?XqT+za;N85kw3fS@`LU=%lzE_H#XFrMUN2f-d2Wk~s@NkcdT?~W z$4?u~8ILwoeRf4YR8V2O>eQt4V8M$6`cVS+VCmVDGA2*=`3AwFmHxX3xBh1eD?IXd zb`0>RpI<20r#V?~n|rRp7{41szH{8P9Zu3VWevD1(v77LqTJXYKdunD?UDG3$$zjz zqWRp=El*t(HM%U6@Nc1Q?+lCDUeC?szxrpf-_1)oEYB_r{x>so>;9krsp~h|MpSVk{B<_*-?;Px1p$8UK-uf({+>3| zqB(M3qExs@8x=?R3d@3)>1XN(+y4nx!LmlME6vVmr)7NUOHv%7^lJf4F=Ojm#U^hC zTW)Gp<%p|nR8<>wF;S0NR?TM70=C++nl@ca*cy{o)tMDv!!}oE8>JuVtO-*Sb+N2H z;hx4{jUx`QKa`YYqY{Z40#oZHTh@{A)i&KFmUV(%YlbR|F*d53jp{;Fnq{e$b%mwd zY`eqM79lLdtW_2_+2p-!a$X(pn_}5zFbxx4@Z+0hSs$B@SGD?Po0H1oQQQ4}ZSJW= zt+nh5o1FKS`PNxBz_K2&^`>Wave;mwuC`h9B)TO zzuDaT5cPy*qhK1Wmt&hPOS7ymtiT*q7Nx&#HqmC$pQtRGJj1dpV8blC$+7{kZ%twi zviPU{QsX2WHHfGeEz7iQFs$^~B_~@p1eR^)DvOzR%1pIULy4Mg*)*8yeHEsk-qe0yWOU{9`>-ArYu(5s5v%j6j8_Qgq>>{uT}FETQ<+KF|gxiCt1|lWuq3_s5GL| zOmR);iXtQpwPwq(!PY-hrLv#ijvS+Kokt+F_1qqf?p9HKtA z>{-ihfjz~_qt)g)m`ZjlR%lKti!F9h+F_$|iF(#1f5EcbVcTrFBAAv}eX;I&)3c6K zEB*x=^$#00m#8Ak-h}z_=V33I+&WH5{Ez$umbQI1>TbdQh8%1^nDbEg@XjCjZiA_#mtvEQEe#(}f9Vn*GXRGEqsm#Wwje!u@R)$1QsZ)(WPT z@;l26;kBkoJ+c^NTjqp~T0vABm=?_MVJh^)ST&pOq)oRHw$Dsc7W$1r-f8Chg(&s( zDlBN(ZttELvURYorbY}| ze9tO(DQ?h4Z6N$2tS4FlrUmtJOh2jE3#|lG;4Ng!=QZ1O#XGq*VnoLl{=y(+m;zKJ&O z2yTDNGA#QPrk8YRoxRDj&j_zEI~$U{UKFBDhfxO|#YXamai=BE2x`Pphh4;In`%>h zP55oXT4ASI_6^~^HeD8~I(&=0W73qxKAU`|O zWsg`^5yoxr7mb`t>YTHS={g%%nYfTiY|M%65*xL_Mnw~)pFq?0xMfvgg(kDH(=zpQ zyV~pBi8_GZ+Vh=dPgqtHb^>-E@ta{9cC}z{oBbRywX02DXp`3=DjB9zmCn@a@Vc;j zU}3^KQ;YF)pT4Q4NfWX-z_P3p!giwSp|M1LR?Fvmgs>(7uCG3Sw!u~reix>Ns{!mQ zGfi3iPShHZ=7N&P@#hcAKD6v2n6h0<{6Wha!M2&5$|99gtRw0Z8`VTnBwr6Z0@D$j z!aj!SOmNhuYXkxn z=g$w8MZ?q^JzzhYp3ON2{bGhS=N#l`5!NCbV^ds4iY&9Fxw9*NEpu0kVGEn#V4^bZ zirCV!A+RUS+>0sGOpvzHw?hskYL;bsQzWkMD*ohH*4DDCVYit5%3=aYt7YkXB!>~D zS1@X|)Vm~=#kKs=G9lK%vg=?SOp_L5p`(9CR7X@b9zoQPgteY^w#i4rYS@Z&vFv)- zRc4y9NC#<63fZVpM5z>7jFK!H4O1z^k}Vqpt8aFa1)ruJXhGw4)G%l3VN;AF#avUP zB?rl}Q9W%`I#JhHrZX3=??(Q-%Y4!_yv(u*g!h{?WzmhO+PHmeR0iRHGOjeQE{AE% z+(cMoO>^i9%WhUWQ>ZMIT=V5B8XrohHCY%ch7Ke=A0^qBPjm8am=M z!te0iE$80U%k9nFWTMm;IYebvBfvHlhU>e9Ka(w+X4$PUZo|nv^#&WIH)1MzE`QQs z8t~ICyPfbbm!YAhnYdHgwR)7@g(9f}}Z zrMuO#I|)~`tn}racfq1z+Dc#4c{i-4$9Vq_J8P282gaJC@jO+z!H&NBZNB#r^#EaQ zQe5Bt{7E-+TeIA2`V7Z?&_*pGT+3z=w(LPSc~NU;NS*3-9O+lzpgzN&v8G8I4&0wE znT`9nje3;uK+85-wi?#i>}ROUY!IgBc0;f$v7y-2 z*f8u`>^f{X)*5SrwZ&%9HM8lRmLVt3eX^%(3tdaBz;xlT3e)2{J)T>Gt;HIe%#bss ziC#OV*OR=DeSqm_MD>%UdR$ivt8M&APOTA52}lI(O!o=k8mrl(NZn0~-tPoD;01F^xFUINe;)Bmge7CVL&o5jgaz2J`o zpECK$P6Pkn&Fjfdv%o7g&GBUC)hniO!qjWl^c<=q)(Pv3=@o0!u^E^iM9sqV@M#LB z2Tr@OJ=mMrTiDyx%^#OIgDdD+&zh=caEf!2vy-&1V&e_3aBoy+3|;XhefSmjEv836 z#pc%(r&;tH1oepL29l(0i|fYCf*F|VG|YPe_#&pa`#r)+q?dA@!SvAQPwW|ZA+`n6 zLm$14@L_Bv_6W8LdlU;}OR;6xLzo^0Ey8j!{Sed~Og{;F5!MK6g7K?jm3?g(aJpiA z+%Z3;IwRA2ldun#fGr@d5!x7Qjgi0@euF6ZY!s))(b%i3g!?KUU%)A*}$0E5N+aSY#9NUQLC!Zg|R$-4~zms`m)|)0+Q>+=LpNoFa?7Y;e zm$;4S4cOz@BbeT$5yFzNn)tP`I+&giO~Nvb)6;1*;tGO#*Vwn%G3+?j zf;26$BUJY@>~riW_9gZWb_^@V4r3o-Yq8#DZcnFP&jAGWgeV@Xis>nk-n_66TY%kz z-HR>4;xRqq(JLjIV!J8%Gv+`~CnfJTf{p2y>(JrY2<&gzD6Bu$1FMQv#~iE@7R3Hw zK{$iy`N%o!GwgHhDE0;RB{q|M_0E>BF}*ZKum5=heG+>FTctPD=oLJ7;@pGXi_O7q z$Mn*o+qI4m)=wQwz(!+zuoSEtrq}XR!yK%HwBKS!u@|spOuyNzhc$DtdDtD;d~5-> z5W6RuNp>%R#iq_>G)61-iO1Sv?XX{1mwv-eVI|lf*lFw>rVm&HSOgY@Ianp^7;ztA zVQd+83#OOo={e1_m|hWhlmYn#_9gZ;_6^1xAqV?Dq$~%qyGS$!8;gy@nqn7YEwQ@T z9BdLc5*vi|!Wv>#u^-s~TWq&!(wos6O|Uvv3)3@&aoBk5Mr;D6CpCHsb2Fw#E}15y zxAWS_?yO(BB<_dl0gkR?*RV9{>CD~OeC!VFPE2>UBhkNMqcGjw7LtAowiSC8dk))& zedIIu^+}y!$x2uvC&vMrpGFJjB+#9K<}!JprDah6jlWrLgDo3m)_z$ny_96U5x3$ ziC!K3HTDg*0UJmB08~#zQnBus9~On_uCF>)3#$yTg6Y{tRjfKz3yZ1DB#a{9V0uFF zC&rf%p1Ry=T~$vY{=oFkgtWTm_~lOhVf$E(x?&+L2|GjFS?o{j9Hv`)J)Y1nt2>w; zOX%ev$63krJM;QY`e!lyM*T*5>v3$I8P?ZnnRkfYKgK@A^vL2U_67DO_7(Oub_~;_ zi#M^iv6rwen4V8ug005ZV0ydIWDcvBAf`y~X2MY#X*6yB-^jjlc>UF!wmVA z*b?kPv$&r#tLc5r#s{!k%+%W0OH7!Tu~#&C@E@yg+Vyw3CjN~73pO6pD^6QuZLkB3 zkPk6E;L`)WTQNNV%;M|+&dsR{7)XE6<~O1fu!&d(b`v%U)1CZeY$~Q#Nq<7uZKCgW zslS>3FyPd4bd#W)f=A3K+~7k5jmf#fX^^LTB;6DJ$??u%6A5Qvldw!|I2MmJ#Y%|( z1N#B{8T$qM9;?Pdt7Ezo*Zt?E)a5${VINGdh_3^yi|M`fEwOkk4r^T57w|=z=mC@? zijF!%!|P=ppE97@W4h_qt0VN2{uL`QxG@LoOk;G#60rw~pNmb!vM}9w>(z3L$VYD= zX-m%~V9l{voWgk^=}xpQ9g~2y!`fqsSR1S<@y)RoSTv?v(<*d^UXd{qn}m(5 z=QA%4a;7EBroED|6s!w&8^zAW#$bA5sa|W^8Ec9);eVSrV;sG5d@Pn@UdPSUYeetC z7Gw8e_hVsfDYgtV*mCSqY&EtPdkkBLt;aTEo3SUc0_-X58LSZ7f^Ef~#h$}1HcN&$ z65=z?Ndmut*9Y!~)m}l5WSI-xhbJ^ReI2n@wNDinjT$a`OCrHc|SgvA&qT z4Wg&L-*GMQF8l7s-op-H`qG8INujSjOvd!y-!Dji94j)fU+r8r=w5>Qo)6Sf!IhrNdl{6CeQ2Yggj^Y^n00d{Xf=p@-d=v4wC1QL1`5duU& zP>`llq!*E%gd!+BN_9{aPys=tM8uU|1nE^kP>P5cic~?Q$@`sKNWz0Y|2KYq&M9-| z%$YN%-pgK~4`TIhSMP20f_8(nY3&)5q@TYy#=z9)n))15Klh~ZHG~&|!weREM5&*N zssN&ZK8n<5j>UjJQ*1z*J}lHHfLVb)^*g`-3W4e)J$-~%8R%oXDxfN;2Ka1QQot1$ zuYxsTEzpN`KY(MPI7~T#K9SQWaNh%c>b4bZ1K)w|U>R5rQbBHRVunKX*;{Uq73jzR z^b44uFgZWR!7K#x=LRKnx5snI_#6A{Gc$cgrq9GS0et|b54ZGl$2-Alumt=}|Lc=2 zedc@xgWmu*!EK;VvhILAfD4)DJ#~`wqHaFX>C_iSxD4U<2+sogAZZ`a%kjfNZ@7;E zeYB%@&wAH<0bBxwDVGgo2VRhfEPZPv79TiE|1Jc2iK*9g&k%kV@MI+^pfQ1JAP(qF zb0F{neP*K1Nb&&v<#&Amq7OXsfc&5UC!XgShz z;7MUjy%{~FOkffTB%X%x0?-E#RkRSu$Qbrmd^B-=($F6yf=X2KHK+wLmird((8mtP zzzKR!J^DPr6k$ed-y-UicwDlU zRusn9B0((H=}5dY$PReUG`yXsdN#e_56LY#U-H!F&D96(JmqsgpzHKXehe1t2l`6< z3!Y9%2^d&k7g<2IUdzt{y?{Q`{DM5a9@X1Zy+D5rI6d8&a2ud^xov@7qE`atfa7JQ z3I9b^*T4->h3WYkX>ZV>&*O#gNx>IA!B6YG_$$B>-VlbXT=|BR<^$@!-%+3-v>bUQ zzhE&F$+)rHZ!Vdzy z_;w~6hYlreSONL*MbC?YIgt0e*-gRP4flcGQd>#)8S%?@OLhyktK0B~N6c-UI8suYN6BzaXtY==ut%2y}ker9{6@UK?m#_3XTA z(CV57^m14)gDU`DKI-U+DfCra`ybfrd`LRAM5HN%|%@4Q*txmx$(0FJy zpxe|~5Ce32EDx|^z&r4iBb=Q^l!fL7e-h3K%>jmyukvnyi{Jt{pOrcGHv*@?_uvpX z2o8WrU?12CRDn%kIs&z28wqa!tHI}B0r&*;r1kTmpMsCUJW!J~Rd5brRq}1{CKwL} z=(Ctn1k@}$5I&Oda8Q@H7d*88MvyiZWP@i6GzBCB{dDPQFb?SI`W94|=?T!<(1}oO z$bZ0O@DcbBTt*>nNYZQ~RbV`dmLCuf0kgn+U?$LKe>0%{$cHUpI^h(;W5BzFXOlP$ zIu%R-zmT36>VsFH?*n~nArii!P?cGj@LVVsljVawVOcthQXS2lc4s1I{qI(d+8y#1MY&qzyoj}+y?i+ zpTNn}G>2Ei+KWmR%A@}6V#KPcT0EUWD+>e}3u$Yz$?D0T;z=qem~2f7g6i1tLUrF020Vlt(oY6d zU0A8+N4S~(pdsKCeI5!e0}6o%pby=2FYpO`#Xv#AI>rh>^MSk|PasaVhs69uR6ubU zbAty6Br_l!WE_}z$twg(lYR*vt*8hn3?e}ZPzsa;dh@O~@Ol%k=^9t6GIXlb27K#g zZmmpWIa*c;S{51wtpF+l^?JQ;(7T6M$WyHi(zX!RiM$sUx{D&OLF0(m1jER?1=R4` zW9nx0pbdd`LQ|;rVtwfCBm#8_)B(=|?Mm%Z?e-=>T|s^I8N%vYji3#Hx`g&>Eszzc zFRCj!KB*OH1&)7f9a=`~QTbY?Hb~N`$8im%s;Lv#=}85u<{5p`5vIJVgdz2f2zHj$m##b`(687E7Pt}fguQP32kAc4YU>Liet8hz5vuI+d&l?9*z8$213#R6$p1FuM5z9 zoT3}y9^e(w9lUB&O$QxKhKw5bB12o*2Q;GswT_O8{=}V1Uq!IKr=p4tBz*wT4c<^N z1Y9Bi4d@hEI+fFxZqL?&HDEO`*L_5PNjMdJfEb+xW0~E=xi|?+BGXaz5+ojh2*s7_Tn9$v>b^CoURL!E%aUf?fm{z3%vvW0(Hq#CG(@uZD=;= z4f%M6r*zRjiT0(~0C0=&P4EX8Xs6wj3o|@1xs;8n&1}_0Dvk4$kd`w&x$>w$t^7Vz z708iI`p)!31uL6gb?2ZmLzd3;l=f&Z=(*>roSf;2^>>D+I%PNy20Vq0yG09YNaC@^=2?dD?odJBn!eCU%-Oum(s{Vby`Qj3^sp7xVg;Ap24fC}ggvM}ESg6tq0ct~1*a2Je}db2%w69y3M3A%w-z{{X6 zV_c^KJtKD|t|IkMr;S%_9(^BJ`Fhy=%G+HQ%=Sdq(i-{!&FYgOThA)55m%8aDuE)s z3HJgnrqsTgC$0~9q4W)cL%=|wtXymd3?du`9SnWlPIsypM*M4A8?92cajMhus*+Nz zdN|Oy@@d)~=qRAA(Q<#OPu(El61W8}f(zh0SOz`^^T9kY7t8@4fg~^*=+dEknfC}g zyUhO(*8R(eP(2puJ;`Lk`bb!}2D1r&0QBhdzWUTmBD%5BP0cQ737GCsa2n}T!4#ld zgmr0?}r&Q<)JFG76M!&C! zKT9}c+zI>1I{|(I`ZB+!|48^aI0jl0*Rse+3iyG9Bj7N2n#Av+hd?93`VR-1fQFzk zI7s>d(2VeY=svI=>;-EZx``I zsD^jT>Uo|9xz&ujfwuN2bd3am%&n6)TqP;z<6*UWMopAQYgD7Dku*=k8F^G&bqu}W zG#v!0mo4hr8Trn_LnkEtS7JsctxyFjbH;Q{Q$@6w)U^~kGdZ)A#&x`2fnEmJ!SBFH zzeZSH{{;1$VwNyV)DziLcm788En^5x1v?Lg` z|5SSwk_V^>oz`nbnqL^I-BbvweH#Jw0c~+OR4dbd9!R_(@nKZh89YSc*GN;DdM$Z} zcmeWNety6Y_Y_^gooX22P@uG-mP3{!SG!tes#W!VO%-<gcpl`OCmpny0I zp|Xy|{lpi71x~tnmU$Xz!DXI7{CL;qWxT5PI?d7T%|}IUqXd5Gxk{zCzVtNC zuWDW=$Jqf`G7?wvFTcF<>Pk-w$f}i|ijZ?FJvAUjzw-2R^_8h#dG-_QvdUA@qeArO zPbT=^U**Z`4m5?z$Ci+7eor+RANW1xA!WZYE!F57PcLGr-*~3;gLI8ndt!(UTkTm3 ziCv>He@`XQkJh4u>mC2)b@Y+z9exANbI`8ib z!|@D;s)bh+gzEIGmknyf1mb3c(Z4?Faa*ttf4@uc7EftE(Gq`zPbNXyaQaDH)b?P_m=Yo2)4c)Pon$$&N9 zFn(rj5~Ojl(fs%l!s5ntIkRM9sVT*>pXc9!RVSs7ofC24t)chFb!}ZNdn_q&*+eNReOGdAsq;$4%B#V=o!C9=%6NQI`=WE7p5^_-63$)p$uHdBD{{!z*_41XH#W zwNv(EiP=Dz< zW^ZM8#5h^B*_)iN>Nu+tW162|+OE`7wcW0AFIzU#I+4idrNw5^Tx!Um|&H> z6I^Un{<`z7xm^eBl&t8$L(JsBADX%be-fLF%otjU@`vQ$He{ZZOG;MC)cxK9Sz~lp z8Tp;}f@_a>wxi+?(pJeOS)k;W{IQ){8%z5g-tO)!lV$4;?^muH{$V@4yO_Xv$Q$-fODbEw7q%NR?P zPK?Faf%9EDJtuo=UV46F$yE%lN>S!m4VX$!334v=ey--XsWp11=d6;Y6!rZGLopcI zUaYr$SE&vC(iwP13I=!N0=a*b2_a;WlYby9rBl?5_9KTEG>U$ z)-ADE`rm}sT>RcKZzz**(H~*zE{Vq>BW3eXkeSkt#K(&`Oqm7RsS(j@Qm-(%!hYZTk2+99srX~#_PXTh*~Z=K7p&d2)YP&5B4_X8kJS zjqS&BF7-}Wk*s=^-z;chKxCZBqf~lUhu8^#@fTYSn){6g)A?;O+%_N9k7~gm&D&F z+E{x1hU^0}S7Vd>tAF!WbFp4uPa}#o&NCaHrEBugHHGudzE*WND5#1MC+mU=h(@JDNH1vaX#uDo#*9C8AZ2WqQV@k#KlM@>J zT_T;Mxt+6jM1d-4FSTHXv7Ia67kTLd^T0wQ*E> z&NQiT5hXsii*CsM&f>~*`W#DV7%5#~aHYry<=X-u7oW);0v3ndx$|yHI^Pai4nyqm zB`!T;Cimz)wqWqByGPO);^@mF8KvnPWF5;thLc&vK*0%(1|~^s244)t!#-*ekU&i+^&{ zd%$;Vv$bCcTmEL`!B!Jr!o{mb#Ya`+noRz4%NtfT`xcAg^(D_P*>mUvw%cqdD(mSh z7dbp}POeyKceP?ojx+k$N$7q(Abg9QxW%xr&2M|X@4sg!r>4b~Z!?Z|%GulA+17y~hLiou zzesE^X-dqkb^(dL!*Xz*ujsMuUM!J!y)hB@zO(kmCzm%mSUYS%YpT=jIj!?wn!D)09kS^jbLA5_bW_IhD{+Tac2cK8cP?%% zyvweIh2x$C-$$Eu^6h<2A-zP8eJu5j9+22l?ma;HWm55P$TfKx;;y;ZKkIKVdhVWi z*@&?Yp^ZFe4qMH*CjDGScTOeOTd=BLav81MS&v9vw^7-h=ZFk;8{OQ#BXaE-BUEm> zjc|ThJS2;e;4XhuI%Y9KebtUyE8mJ95f9h3J#^eOzB#AOlBrpYFxRiL1QKx{K0Qn4 zj6V45>aA5e!e<}0bN?VeBZ*t5J6Vhrlpc|lV)tclpb_TIaa>kpHA3C_k4wvJs=|M~ zc|EZ>6NV^$T>d7{7jxV?AThxU+xF-{BgWST2CX|J>~d7>thRCK zI;Kieppjr##*gZ!!S4D(eA&==(~s67Gq$Ct*w8s|ETI&49eR?mm5E(fc5?Cwr~n({InOSt&hdzg(uM@3hVETx^A=w-!v}>clB}Rf^`s zyRuxBnmLWoh$2_5?i$}=N9UAg-i!HMwQEI3#YDx$mc8olpVRo=#n(m#Y``RKH`~Px;os7Y<*a=2e5n3`&@o&UaWU zhQe?K2EFas{rr1-4;>!UDc>W@S*`Jp3^m?#`Ch;0(kJH0w{L{5>s4TI-7-3;WA#?( z9X_f^eG8;oI0jlPy_DEC+###OvEd2H?j!NM)bJUr@ayY7{5s2hsT+Y2LhoBcw!-qy zize2bSf`kthGMHS`YMp48`ZRidwj9^W>+M~uCsysCxSZH%4ZQqg6~E6^i2I}-C9BgnqGEf&pr?*MhNe{;*{Dx1WvCogg~lh5 zqjO=W*|RUKxKyaS=5Uf{#hD?|Ptn4~FsOYy*DaQJ>zSu6nzD7eT2-8#)4s*;pX8hT z)@r+KEYG8*P-&FtZ8O~cCFZ9&pUhrvGf?zRNrZtr=3dIT20pz3ZvRc8>%O$aX;u~5 z9Y++ajYzPiFBA&*2UzimeaM=Qky8mHQ#xPF6b}SH;%a z@<>}<8Cdqe+GnT5K~=`w)2uL+k_?bY6P+$8T>>yw%{c$zbkgW|5=Q&iS~P z2bG<6BS(7CC6W+>?6olH3f%02x2xCf{3pkDvvOqbmXsJKZA;Nm*DSdZW0dz4$m2G* z|7J@cb0*(EPjXg=`36y1*OU%zB){qt0AH)23Ot2^HBJ1NJiv!NHPxt{sWUMAFan9-eK>ki8= zUogQtKJtI|-QH3m4)@tAjpOi}Loz~%Wgy=_uSAx3jz15y@IU)>=Arc1(9AS{IK#~5 zu|~xIS}UFY2?(_ot2~tlbZ!#zY7gz7X!8lz|5h!N7ILKqy&7YSk6Ec6Y(2eNDFbR^gFP|{;yVYQK6%Oe^u>S$eg2r7&UZyN!r*p?OU?mo z7z>8G%?qdl=L;U|u@|3POR?3LlDMNhVnsSOd_RqEA(jFQNH$QO#~zH5m5r($U8 zr~4^}BkIvHRq733lx~GVSLX&lpM0+Ch^aGSU`aj^mlP+gCW~{8oG2@0D>1Q;MO7#t|6seDquSkvhh`29p z>KonN)r!c5`grzOxn7@LUPi&;rZHr40}7ex1+vnzFJ*HB7|l9kEVaVrrG_}NZ9`jA zQ@1cV)zAo!D8+kkI-9MUF(F@MaLxqm#F0?PbhYA=uMr2M_0pvgN*$IFkcgY`>lD!K zc%3iXRERqVKNq-h7&f?stZ1aWZa&VV+r{M_U&=qX|75mQ9W@^g^RqqV%93UB zud*LvPiyx6dP!1-LogJ9VNFo}2Q6>@Cqi|wt`=_iS3a$~(08TJGZou-iyXh?`^_m)m_~LJ; zrYLj7KddQk$9KFQHZye#OJHHCTizNzuSh}ygC%g4b#&}iYsSO@-=E+irD;!G>YsCV z%IpN%{Jrc)0!NSw8v9KOH791~*-sHP)~h-8;911H=EhL((u!8yzDiQ8g;Cj8xstWq z-x)gg`q`3m!t}^!`-}8zfj_@4>suh(yjRh4*}`qkCvsthh`s%)OQ zUzR#8(czlB(9)P4aR)wKlSfxs<~j88m~HTx+jL%fDkZrR8P{#3Y$9j*GBNU9qS1}s ztMDAPHI^>VAtg~pKzyBePgjqF-kP;imb<1bHv6G+6wA;^S+0Cj_#iV!rO)8get30q z-Wt<(uk32p78AubdW%H2GE#g;V8{c*%BiXD;3@lb2Gvg#l?M4HpOMF-Q=3D90mDr~;p(}R_ zR=>&fFXL(HVN0CTsg~DC&?}BNCfHq1KQDd-k+viJ`G~=GS6jc1uNns&CDzGqbdf4u zjBpv*%@k-VXQn4)bapBBGJa)=;6}H5cP5UEV_}8t?@ryekA?Lxs=4h2iKNW;!YM83((X0mL%xz}J~z!&q15k1Gt9*)%#poA%tfY-EMcv2Thms) zKwVJV%4uDGEM2)y$lIGH-jv2lY{jfnTneFWjH9MKhyGjRqWc)#eXk~1cQm&bb!|58 zc%;7VqlYD?y+N|F59`Qe7mey+u(KU~#A4^& zm&DhxiM?%1uP0ox4dGJ#HwhVv-yy#L5LTp+)-rM!+nPeHt-0}Rqxj?1W>g$sI^QR%3imnj7ny#pB_p>mP_7YkSEsP%n_Su zOY4Zm&!dM^)U-%>nKIlcX7AG7k!@w)a8`ZGDSTD=Zn|z~yPWR%P0P(ExJoob^*g{(gFrH>pe$sXh@MuBOC*p`~4nP?P0FBADj0$o2Tqp>pY9Nfb9}I8oo7BdNhlsDKAV;jHU-N?(jKP*qeX+ z`9t47k0q;f)gsR(JBHN>AT`-Y@Q0=t;lY?B@k35A&E7Gx=5$^06Iq^zOJCP=>R&4# zLG%n#eTA{lU3Hw_n`-pP?rP*8^o`Lt&|TratXpq~8iN_4XJs{x3EeaV{bs z?=lMb?`<~vX+(2m&bLf?R)%cbZiM=KZZ&E-tg?QaG1tj`u)`=MQ@%64wi5D5ryWM5 z4ByVkNiRP>L*@i0osyR`gbPXGUB(zIAq8UUfrjDIe>b;`>57F*sXYv_BYrrtWYjoZ z?o+LNx0hb9TlmaAJ@c80gh{vkj+O`<;hH|TD=0x$+@i|9 ze^G;-@ZxdWVuk%DjvH(Ap@_-(&26K(R6c>F?A(ZxYEL_N@*Sg!|L7^>ZMQ4U&oMG@ zpp&!ZH{+rczME!*bNKKVIB$$|v5$3mgTnk@T`-mz4hQ-)x5NHse;S1!RY3IzGBAb9 zwZGCislC73DfaArV^J2Z<>o^pg7SXU-W>6$=QbyMdY7zb6SJr7}*xu#$#|%x2T}WJ4&yb)i%AO0Sw~XjMeb=H|R#Qt%=vgbs-?LV5 z-%&CrN3c&G-V6?uzd8gLbjA7)t_iMrN;bK2X7@k$e$HJ>J)QM;QTaPBB^!q@ delta 71313 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ΜbVv>@cx^Ax=5=&q!cTr0;YMM4 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 diff --git a/packages/transaction-manager/lib/LatestOnlyMutex.ts b/packages/transaction-manager/lib/LatestOnlyMutex.ts new file mode 100644 index 0000000000..6c4f3422b9 --- /dev/null +++ b/packages/transaction-manager/lib/LatestOnlyMutex.ts @@ -0,0 +1,33 @@ +import { Mutex, type MutexInterface } from "async-mutex" + +export class LatestOnlyMutex { + private mutex: Mutex + private latestRequest: ((releaser: MutexInterface.Releaser) => void) | null + + constructor() { + this.mutex = new Mutex() + this.latestRequest = null + } + + async acquire(): Promise { + let resolveAcquire: (releaser: MutexInterface.Releaser) => void + let rejectAcquire: (error: Error) => void + + const acquirePromise = new Promise((resolve, reject) => { + this.latestRequest = resolve + rejectAcquire = reject + resolveAcquire = resolve + }) + + this.mutex.acquire().then((releaser) => { + if (this.latestRequest === resolveAcquire) { + resolveAcquire(releaser) + } else { + releaser() + rejectAcquire(new Error("LatestOnlyMutex: Latest request was not this one")) + } + }) + + return acquirePromise + } +} diff --git a/packages/transaction-manager/lib/TxMonitor.ts b/packages/transaction-manager/lib/TxMonitor.ts index 45c621ade6..184eaf7290 100644 --- a/packages/transaction-manager/lib/TxMonitor.ts +++ b/packages/transaction-manager/lib/TxMonitor.ts @@ -3,6 +3,7 @@ import { type Result, ResultAsync, err, ok } from "neverthrow" import { type GetTransactionReceiptErrorType, type TransactionReceipt, TransactionReceiptNotFoundError } from "viem" import type { LatestBlock } from "./BlockMonitor.js" import { Topics, eventBus } from "./EventBus.js" +import { LatestOnlyMutex } from "./LatestOnlyMutex.js" import { type Attempt, AttemptType, type Transaction, TransactionStatus } from "./Transaction.js" import type { TransactionManager } from "./TransactionManager.js" @@ -10,13 +11,32 @@ type AttemptWithReceipt = { attempt: Attempt; receipt: TransactionReceipt } export class TxMonitor { private readonly transactionManager: TransactionManager + private readonly txMonitorMutex: LatestOnlyMutex constructor(transactionManager: TransactionManager) { this.transactionManager = transactionManager + this.txMonitorMutex = new LatestOnlyMutex() eventBus.on(Topics.NewBlock, this.onNewBlock.bind(this)) } private async onNewBlock(block: LatestBlock) { + this.txMonitorMutex + .acquire() + .then(async (releaser) => { + try { + await this.handleNewBlock(block) + } catch (error) { + console.error("Error in handleNewBlock", error) + } finally { + releaser() + } + }) + .catch((error) => { + console.error("Error in txMonitorMutex.acquire", error) + }) + } + + private async handleNewBlock(block: LatestBlock) { const transactions = this.transactionManager.transactionRepository.getNotFinalizedTransactions() const promises = transactions.map(async (transaction) => { diff --git a/packages/transaction-manager/package.json b/packages/transaction-manager/package.json index 666bef07db..a8ebd7231d 100644 --- a/packages/transaction-manager/package.json +++ b/packages/transaction-manager/package.json @@ -20,6 +20,7 @@ "@happychain/common": "workspace:^", "@happychain/configs": "workspace:^", "@happychain/contracts": "workspace:^", + "async-mutex": "^0.5.0", "better-sqlite3": "^11.5.0", "eventemitter3": "^5.0.1", "kysely": "^0.27.4", From 682b147ee91656383cb4ff11d3adf0a1546ed7cc Mon Sep 17 00:00:00 2001 From: Gabriel Martinez Rodriguez Date: Thu, 21 Nov 2024 16:09:28 +0100 Subject: [PATCH 2/4] chore: pr comments --- .../transaction-manager/lib/LatestOnlyMutex.ts | 18 +++++++++++------- packages/transaction-manager/lib/TxMonitor.ts | 18 ++++++++---------- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/packages/transaction-manager/lib/LatestOnlyMutex.ts b/packages/transaction-manager/lib/LatestOnlyMutex.ts index 6c4f3422b9..bc3521c5df 100644 --- a/packages/transaction-manager/lib/LatestOnlyMutex.ts +++ b/packages/transaction-manager/lib/LatestOnlyMutex.ts @@ -1,5 +1,10 @@ +import { promiseWithResolvers } from "@happychain/common" import { Mutex, type MutexInterface } from "async-mutex" +/** + * A mutex that only allows the latest request to proceed. + * Previous pending requests are automatically rejected. + */ export class LatestOnlyMutex { private mutex: Mutex private latestRequest: ((releaser: MutexInterface.Releaser) => void) | null @@ -10,14 +15,13 @@ export class LatestOnlyMutex { } async acquire(): Promise { - let resolveAcquire: (releaser: MutexInterface.Releaser) => void - let rejectAcquire: (error: Error) => void + const { + promise: acquirePromise, + resolve: resolveAcquire, + reject: rejectAcquire, + } = promiseWithResolvers() - const acquirePromise = new Promise((resolve, reject) => { - this.latestRequest = resolve - rejectAcquire = reject - resolveAcquire = resolve - }) + this.latestRequest = resolveAcquire this.mutex.acquire().then((releaser) => { if (this.latestRequest === resolveAcquire) { diff --git a/packages/transaction-manager/lib/TxMonitor.ts b/packages/transaction-manager/lib/TxMonitor.ts index 184eaf7290..9c9c010e05 100644 --- a/packages/transaction-manager/lib/TxMonitor.ts +++ b/packages/transaction-manager/lib/TxMonitor.ts @@ -19,18 +19,16 @@ export class TxMonitor { eventBus.on(Topics.NewBlock, this.onNewBlock.bind(this)) } - private async onNewBlock(block: LatestBlock) { + private onNewBlock(block: LatestBlock) { this.txMonitorMutex .acquire() - .then(async (releaser) => { - try { - await this.handleNewBlock(block) - } catch (error) { - console.error("Error in handleNewBlock", error) - } finally { - releaser() - } - }) + .then((releaser) => + this.handleNewBlock(block) + .catch((error) => { + console.error("Error in handleNewBlock", error) + }) + .finally(() => releaser()), + ) .catch((error) => { console.error("Error in txMonitorMutex.acquire", error) }) From 4ae447b9d7488cbcc0e09073212608990c155cd2 Mon Sep 17 00:00:00 2001 From: Gabriel Martinez Rodriguez Date: Fri, 20 Dec 2024 11:45:51 +0100 Subject: [PATCH 3/4] chore(txm): refactor mutex --- .../lib/LatestOnlyMutex.ts | 37 ----------------- packages/transaction-manager/lib/TxMonitor.ts | 40 +++++++++++-------- 2 files changed, 24 insertions(+), 53 deletions(-) delete mode 100644 packages/transaction-manager/lib/LatestOnlyMutex.ts diff --git a/packages/transaction-manager/lib/LatestOnlyMutex.ts b/packages/transaction-manager/lib/LatestOnlyMutex.ts deleted file mode 100644 index bc3521c5df..0000000000 --- a/packages/transaction-manager/lib/LatestOnlyMutex.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { promiseWithResolvers } from "@happychain/common" -import { Mutex, type MutexInterface } from "async-mutex" - -/** - * A mutex that only allows the latest request to proceed. - * Previous pending requests are automatically rejected. - */ -export class LatestOnlyMutex { - private mutex: Mutex - private latestRequest: ((releaser: MutexInterface.Releaser) => void) | null - - constructor() { - this.mutex = new Mutex() - this.latestRequest = null - } - - async acquire(): Promise { - const { - promise: acquirePromise, - resolve: resolveAcquire, - reject: rejectAcquire, - } = promiseWithResolvers() - - this.latestRequest = resolveAcquire - - this.mutex.acquire().then((releaser) => { - if (this.latestRequest === resolveAcquire) { - resolveAcquire(releaser) - } else { - releaser() - rejectAcquire(new Error("LatestOnlyMutex: Latest request was not this one")) - } - }) - - return acquirePromise - } -} diff --git a/packages/transaction-manager/lib/TxMonitor.ts b/packages/transaction-manager/lib/TxMonitor.ts index 9c9c010e05..3de02f2e52 100644 --- a/packages/transaction-manager/lib/TxMonitor.ts +++ b/packages/transaction-manager/lib/TxMonitor.ts @@ -3,7 +3,6 @@ import { type Result, ResultAsync, err, ok } from "neverthrow" import { type GetTransactionReceiptErrorType, type TransactionReceipt, TransactionReceiptNotFoundError } from "viem" import type { LatestBlock } from "./BlockMonitor.js" import { Topics, eventBus } from "./EventBus.js" -import { LatestOnlyMutex } from "./LatestOnlyMutex.js" import { type Attempt, AttemptType, type Transaction, TransactionStatus } from "./Transaction.js" import type { TransactionManager } from "./TransactionManager.js" @@ -11,27 +10,36 @@ type AttemptWithReceipt = { attempt: Attempt; receipt: TransactionReceipt } export class TxMonitor { private readonly transactionManager: TransactionManager - private readonly txMonitorMutex: LatestOnlyMutex + private locked = false + private pendingBlockPromises: PromiseWithResolvers[] = [] constructor(transactionManager: TransactionManager) { this.transactionManager = transactionManager - this.txMonitorMutex = new LatestOnlyMutex() eventBus.on(Topics.NewBlock, this.onNewBlock.bind(this)) } - private onNewBlock(block: LatestBlock) { - this.txMonitorMutex - .acquire() - .then((releaser) => - this.handleNewBlock(block) - .catch((error) => { - console.error("Error in handleNewBlock", error) - }) - .finally(() => releaser()), - ) - .catch((error) => { - console.error("Error in txMonitorMutex.acquire", error) - }) + private async onNewBlock(block: LatestBlock) { + if (this.locked) { + const pending = promiseWithResolvers() + this.pendingBlockPromises.push(pending) + try { + await pending.promise + } catch { + // A more recent block came while we were waiting, abort. + return + } + } + + this.locked = true + try { + await this.handleNewBlock(block) + } catch (error) { + console.error("Error in handleNewBlock: ", error) + } + this.locked = false + + this.pendingBlockPromises.pop()?.resolve() + this.pendingBlockPromises.forEach((p) => p.reject()) } private async handleNewBlock(block: LatestBlock) { From 89f8e7e58537c6316d7253123038c1544a6975bf Mon Sep 17 00:00:00 2001 From: Gabriel Martinez Rodriguez Date: Mon, 23 Dec 2024 15:15:44 +0100 Subject: [PATCH 4/4] chore(txm): remove unused dependency --- bun.lockb | Bin 1002936 -> 1002912 bytes packages/transaction-manager/package.json | 1 - 2 files changed, 1 deletion(-) diff --git a/bun.lockb b/bun.lockb index 02376203839d061b1845454caf6ec60d0ebc0f82..9abd24e5f104f70191c7af93d93e6351f17403f8 100755 GIT binary patch delta 71313 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ΜbVv>@cx^Ax=5=&q!cTr0;YMM4 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 delta 69883 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 diff --git a/packages/transaction-manager/package.json b/packages/transaction-manager/package.json index a8ebd7231d..666bef07db 100644 --- a/packages/transaction-manager/package.json +++ b/packages/transaction-manager/package.json @@ -20,7 +20,6 @@ "@happychain/common": "workspace:^", "@happychain/configs": "workspace:^", "@happychain/contracts": "workspace:^", - "async-mutex": "^0.5.0", "better-sqlite3": "^11.5.0", "eventemitter3": "^5.0.1", "kysely": "^0.27.4",