From 2fa802079500954d2478045a4325473ae6ca7cc5 Mon Sep 17 00:00:00 2001 From: sotnikov-s Date: Fri, 26 Jan 2024 14:23:22 +0300 Subject: [PATCH 01/87] add astro PCL pair contract --- .../astroport_pair_concentrated.wasm | Bin 0 -> 552519 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 contracts_thirdparty/astroport_pair_concentrated.wasm diff --git a/contracts_thirdparty/astroport_pair_concentrated.wasm b/contracts_thirdparty/astroport_pair_concentrated.wasm new file mode 100644 index 0000000000000000000000000000000000000000..b481022142689e6647c3984ac08c006d07464b4f GIT binary patch literal 552519 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

kAL`Y6&^}q|0xwFQz7i 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 z%0A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 Date: Fri, 26 Jan 2024 14:24:32 +0300 Subject: [PATCH 02/87] update astro XYK pair key in vesting lp vault test --- src/testcases/parallel/tge.vesting_lp_vault.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/testcases/parallel/tge.vesting_lp_vault.test.ts b/src/testcases/parallel/tge.vesting_lp_vault.test.ts index 6d703b9e..2f14f3c1 100644 --- a/src/testcases/parallel/tge.vesting_lp_vault.test.ts +++ b/src/testcases/parallel/tge.vesting_lp_vault.test.ts @@ -23,7 +23,7 @@ import { waitSeconds } from '@neutron-org/neutronjsplus/dist/wait'; const config = require('../../config.json'); // general contract keys used across the tests -const ASTRO_PAIR_CONTRACT_KEY = 'ASTRO_PAIR'; +const ASTRO_PAIR_CONTRACT_KEY = 'ASTRO_PAIR_XYK'; const ASTRO_FACTORY_CONTRACT_KEY = 'ASTRO_FACTORY'; const ASTRO_TOKEN_CONTRACT_KEY = 'ASTRO_TOKEN'; const ASTRO_COIN_REGISTRY_CONTRACT_KEY = 'ASTRO_COIN_REGISTRY'; From 934eff7eda3180761cc98f99bfcb7eaaaeb30aa1 Mon Sep 17 00:00:00 2001 From: sotnikov-s Date: Fri, 26 Jan 2024 14:28:12 +0300 Subject: [PATCH 03/87] add xyk to pcl pairs switch and pcl lockdrop init to auction test --- src/testcases/run_in_band/tge.auction.test.ts | 178 ++++++++++++++++++ 1 file changed, 178 insertions(+) diff --git a/src/testcases/run_in_band/tge.auction.test.ts b/src/testcases/run_in_band/tge.auction.test.ts index e52ed2cb..8ee9e501 100644 --- a/src/testcases/run_in_band/tge.auction.test.ts +++ b/src/testcases/run_in_band/tge.auction.test.ts @@ -19,6 +19,10 @@ import { queryVestingLpVaultConfig, Tge, VestingAccountResponse, + XykLockdropConfig, + queryXykLockdropConfig, + queryLockdropPool, + LockdropPool, } from '@neutron-org/neutronjsplus/dist/tge'; import { Dao, @@ -28,6 +32,9 @@ import { import { Asset, TotalPowerAtHeightResponse, + NeutronContract, + NativeToken, + nativeTokenInfo, } from '@neutron-org/neutronjsplus/dist/types'; import { IBC_ATOM_DENOM, IBC_USDC_DENOM } from '@neutron-org/neutronjsplus'; import { getHeight } from '@neutron-org/neutronjsplus/dist/env'; @@ -2532,4 +2539,175 @@ describe('Neutron / TGE / Auction', () => { }); }); }); + + describe('migrate TGE liquidity to PCL', () => { + let ntrnAtomPclPool: string; + let ntrnAtomPclToken: string; + let ntrnUsdcPclPool: string; + let ntrnUsdcPclToken: string; + describe('replace XYK with PCL pools', () => { + test('deregister XYK pairs', async () => { + await deregisterPair(cmInstantiator, tgeMain.contracts.astroFactory, [ + nativeTokenInfo(NEUTRON_DENOM), + nativeTokenInfo(IBC_ATOM_DENOM), + ]); + await deregisterPair(cmInstantiator, tgeMain.contracts.astroFactory, [ + nativeTokenInfo(NEUTRON_DENOM), + nativeTokenInfo(IBC_USDC_DENOM), + ]); + }); + + test('create PCL pairs', async () => { + const ntrnAtomClPairInfo = await createPclPair( + neutronChain, + cmInstantiator, + tgeMain.contracts.astroFactory, + [nativeTokenInfo(NEUTRON_DENOM), nativeTokenInfo(IBC_ATOM_DENOM)], + 0.109499708, // ntrn in pool divided by atom in pool. add calc? + ); + ntrnAtomPclPool = ntrnAtomClPairInfo.contract_addr; + ntrnAtomPclToken = ntrnAtomClPairInfo.liquidity_token; + + const ntrnUsdcClPairInfo = await createPclPair( + neutronChain, + cmInstantiator, + tgeMain.contracts.astroFactory, + [nativeTokenInfo(NEUTRON_DENOM), nativeTokenInfo(IBC_USDC_DENOM)], + 1.09500203721, // ntrn in pool divided by usdc in pool. add calc? + ); + ntrnUsdcPclPool = ntrnUsdcClPairInfo.contract_addr; + ntrnUsdcPclToken = ntrnUsdcClPairInfo.liquidity_token; + }); + }); + + let lockdropPclAddr: string; + describe('instantiate PCL contracts', () => { + let xykLockdropConfig: XykLockdropConfig; + let xykLockdropUsdcPool: LockdropPool; + let xykLockdropAtomPool: LockdropPool; + it('retrieve XYK lockdrop contract state', async () => { + xykLockdropConfig = await queryXykLockdropConfig( + neutronChain, + tgeMain.contracts.lockdrop, + ); + xykLockdropUsdcPool = await queryLockdropPool( + neutronChain, + tgeMain.contracts.lockdrop, + 'USDC', + ); + xykLockdropAtomPool = await queryLockdropPool( + neutronChain, + tgeMain.contracts.lockdrop, + 'ATOM', + ); + }); + it('instantiate PCL lockdrop contract', async () => { + const codeId = await cmInstantiator.storeWasm( + NeutronContract.TGE_LOCKDROP_PCL, + ); + const res = await cmInstantiator.instantiateContract( + codeId, + JSON.stringify({ + owner: xykLockdropConfig.owner, + xyk_lockdrop_contract: tgeMain.contracts.lockdrop, + credits_contract: xykLockdropConfig.credits_contract, + auction_contract: xykLockdropConfig.auction_contract, + generator: xykLockdropConfig.generator, + lockup_rewards_info: xykLockdropConfig.lockup_rewards_info, + usdc_token: ntrnUsdcPclToken, + atom_token: ntrnAtomPclToken, + lockdrop_incentives: xykLockdropConfig.lockdrop_incentives, + usdc_incentives_share: xykLockdropUsdcPool.incentives_share, + usdc_weighted_amount: xykLockdropUsdcPool.weighted_amount, + atom_incentives_share: xykLockdropAtomPool.incentives_share, + atom_weighted_amount: xykLockdropAtomPool.weighted_amount, + }), + 'lockdrop_pcl', + ); + lockdropPclAddr = res[0]._contract_address; + }); + }); + }); }); + +const deregisterPair = async ( + instantiator: WalletWrapper, + factoryAddr: string, + assetInfos: NativeToken[], +) => { + const deregisterMsg = { + deregister: { + asset_infos: assetInfos, + }, + }; + + const execRes = await instantiator.executeContract( + factoryAddr, + JSON.stringify(deregisterMsg), + ); + expect(execRes.code).toBe(0); +}; + +const createPclPair = async ( + chain: CosmosWrapper, + instantiator: WalletWrapper, + factoryAddr: string, + assetInfos: NativeToken[], + initPriceScale: number, +): Promise => { + const poolInitParams: ConcentratedPoolParams = { + amp: '40', + gamma: '0.000145', + mid_fee: '0.0026', + out_fee: '0.0045', + fee_gamma: '0.00023', + repeg_profit_threshold: '0.000002', + min_price_scale_delta: '0.000146', + price_scale: initPriceScale.toString(), + ma_half_time: 600, + track_asset_balances: false, + }; + + const createMsg = { + create_pair: { + pair_type: { custom: 'concentrated' }, + asset_infos: assetInfos, + init_params: Buffer.from(JSON.stringify(poolInitParams)).toString( + 'base64', + ), + }, + }; + + const execRes = await instantiator.executeContract( + factoryAddr, + JSON.stringify(createMsg), + ); + expect(execRes.code).toBe(0); + + const pairInfo = await chain.queryContract(factoryAddr, { + pair: { + asset_infos: assetInfos, + }, + }); + return pairInfo; +}; + +type PairInfo = { + asset_infos: NativeToken[]; + contract_addr: string; + liquidity_token: string; + pair_type: Record; +}; + +type ConcentratedPoolParams = { + amp: string; + gamma: string; + mid_fee: string; + out_fee: string; + fee_gamma: string; + repeg_profit_threshold: string; + min_price_scale_delta: string; + price_scale: string; + ma_half_time: number; + track_asset_balances: boolean; +}; From 4cc040b17673b3b463fb98a94693ef775b684c6e Mon Sep 17 00:00:00 2001 From: sotnikov-s Date: Fri, 26 Jan 2024 16:32:32 +0300 Subject: [PATCH 04/87] add pre-migration version of lockdrop contract --- contracts_tge_migration/README.md | 5 +++++ .../current_neutron_lockdrop.wasm | Bin 0 -> 535384 bytes 2 files changed, 5 insertions(+) create mode 100644 contracts_tge_migration/README.md create mode 100644 contracts_tge_migration/current_neutron_lockdrop.wasm diff --git a/contracts_tge_migration/README.md b/contracts_tge_migration/README.md new file mode 100644 index 00000000..9dad0f81 --- /dev/null +++ b/contracts_tge_migration/README.md @@ -0,0 +1,5 @@ +# Contracts migrate + +This folder contains contracts involved in TGE liquidity migration which versions require to be fixed. + +- current_neutron_lockdrop — the pre-migration version of the lockdrop contract; diff --git a/contracts_tge_migration/current_neutron_lockdrop.wasm b/contracts_tge_migration/current_neutron_lockdrop.wasm new file mode 100644 index 0000000000000000000000000000000000000000..a29be213a1b009730b38932ed6cd2fc97a8c88ff GIT binary patch literal 535384 zcmd?S50qWkUEh2D+am z*u{~I<2X*9Y14SpI6)Kxf;d4?w@ZC5A!=Vj#Uqb8!IXiOQqlUgh8KbYp%ulnrkK=} zv{j2K@ALis_Br>?NV1(jkhNNCdG0y;?6dc8|Mu_y{_TCT+u!qRZz~_vb&tRN=!UYK%f3qZ9r%}vTu=HBzLWn{QGY3V=WSVb+c4^=x?a9obNKL+<|f``&c_omr;ac|ZKF zH^2SPY2~-R@%DSNUi<1jcRp}`yt;Jz9e3P!>)UU?`%QP;&iig|)n&Z!=6l}sMxOlD zJF{GGM%}yK_FcE%)0I_kz4MLte%;sKc>LwJzWvVo-tvSS!Z+N0{~Pbx^r(Nwoo{&CcgAQI-}1IQ@B8js z-+0&UZ@LF~f2H?iugLhgUq`ihlcF-V*4f2YQOmZqB1XMLpM%;CC%lAwJ4U$vdr?i zxjgR;%3{##0bBQ9mQlIrmt{^Z{uIm0KtCw>SMtk$rC!SB1z*3&SF<8726;a(=5zj| z5C&TuW!Yd(<6Fuo1oC1b8_v&Po%QoDl!C&z2`iJL(H{J8r`)|MJ{x^xC{!>18=L2`X@oilG=X~zF-t?XKsq{yRtKM|a{deB? zS8jjfog(zNzUj^P+zB}J~D~%t2 z(>>ow?bX?``@U1J%@!gM=8lx88Zr9c8|F>#cX)dHcP$zTx(_-dPs& zKg%GSeDMd0{Xbm%!{Xum$9uord#d=lKmR|!>Y051ulC-RzbD`S7ysg4eDJ;bdj386 z-^d@zKh%3)x&NojkC*?je60LL`7`C?<|%kR(s>RANb+?NAd@LF#kaQzz^i_%c-;f)*qnizsmRjcKI6J{z3ll^Jnwl_rK5O z`uG2o-(Tp-z3(gZ@7?){JPIiMM6q9w{MO^e&lD%s?f!dzrufBTqqz5Bb@20rpZ-Fz z|B2$C75jgwc(V8x#b5j7;#Z3Qth+x{+aD_TyYkb;{(tQjHj4L@?(&d@nhxwM|(e6 z{#1Fk{J+b8Sw5Wq^WMYx!}(KO?f*CB@09fapUVBul>e^$z4Fih+wzx+-z_he|E2t| z7DOA-uv0!Kk9wD z_iMd{r_StuviGxd#o)p6onMtTHyoezuF2|NGdwmK)OlT0zfy9y``Eb8(`U2elaj|J zkLyA8>t&OV^Ww1n)#dfsu*u)j^VNLwN7<{Fa_anlWnJ>~%lxbr**NEpnmua1GP{nO z{KjI9_HH=FpS5GvhiFa}ZaAujnkTbk<2ioM^E)iv(X_jlPx7XGOH{B!k5Iv_ycYocq$OV>LM_R*!X>-cixrQ@=x zX7Tg+eAHK=S{YQI_I!1t@4H{)Dy#dvNJW}WK=d_>z0q(n9xWU!RS8JvxoVhnJsL9j z@d6_$ZyC=Y$;XT8Y&z{R=}Vc5jjva2nx$8OF1@i^NF2{=klUfA1WSGF>x=B0Kv3#d zR{<2{&~JJI&sWP_EsAO>Rt0DPsy=oN6l5yytrfdPdOe6S0PZz)>QZcA&Zs^GPf*eG z1C=vIwUh}j9(>jge#9)yG_Y3e17_D#2MOj>yT~++zUdt(_G!9P&1({(dFnw?F3{EV z4S>G5-Y|#K zH_+N4D2u+TPvp_mA>pWKAn9>=q!Bsi zY;dIbcEcM4|J?U%WKCH?@Nhu_NrU^vTut6`lo?I!0ZEb+EhO8;B=JrzCNca;M0n}~ z;52o!V~ME~CuE|dIWdXncNka0V@I-jPy_2<+8b(;3l( z9Xe{xNnn3+GuW>(>lBG~27+0vQfU)bNc+zG&8S zQQ&W3D?V6Aft)Rpim1V<W~=k)lU|dhVnGO5pLl6ANyro4Nq8)*RIXXnn5wkIYieRo?XP zAB&=U$HrNCm_~cTDo-+gTrGnL#?WU|AD`qVq(1b-^r?-KDb*CeXJ4`H!9`8+I#V1% z2J}kEFtZQx@12@q|N2UFS%pQw)oQW`Lga*a3aK*`U90lQM#00tDukZkw>b;x6wQhJ zSoJu!*Jo!L5ej7}&VUQ^V`!A3InVD(Q;e7NXjT*f&hz|JgFl&1FlMaam*<9agMP0> zP(i3e5VRx7f^!fkhQx>7vynBcG9=t3(tC8Zz(|k(wjK{>ACI>OkYeE-V!J2uG13ry zxNouEe#_FXde<#W^Yw0709`Y`s%Cc2HZ$5IfcmObS2w~x{I1?ud`!R4s1N8KJ#7oj|#Z1rQa7cdtR_5wCT|f85-#c@Y+fE zbGdoVqkPUY`l-B?Iu@)?K-P%kknWZimhR8`y_=S<5O-uyAWC)T!D?dUKu(&c=+H$7xv?5L zmmggk=|a=3>d(8nG3`@81|aN<0OS`nMJrNg%L%q|4=#n5ZK`9;nL{;p z3~OXcveENqGBwdP%t7@TiR;}Kx?=q8z6v?Y@W%+(wPF;;*ANqX-j)(dYp!~v7%^02 zPrb->J%{~Cd;hVt0d(YD>vDh*s6t=Qw-<8VGUL5^UP24LkhttgWG}`Q($FGQ&WPoz zV5*TtEs~k1D#>_in(|%e^A*4Y;HKiD+$AYybp?bkrCvzIvB{|}z_oSxxQo37m zBt{;XS-cWv#&gI%q8J0j#K6L2D*gtYLBiE)^BWFPEXoHONW?744H^JBI2)`LLL2pD zm5k?U^zgAspGN!j{3|mMD!CwklXMBA$M5z{p#DKXb`u3d_-mprD}gp)~yMv zl%dyeu1U^?q+nkr*gWPL@6^(3sP?s@n$Qs?l*FcxtUs1Ul!q3qu>{OW|RDhUrE>+o?;uN`B}7VSzw z&1>HFY2FwDDAZ&!t-tE|+$}#-n4AkUc`jO?(`4A0ac~7?l!*j=Ge~~;oCs;ageCDc z7xOqL^9wLF#~QzI`GSLIrjJkh9{jvSZ!c-dxmHWkKUy+w(URPPlmx-r6oN~jo{mdI zwg|im4kRhj*YB021QG(IW141?O_xduJ?ELsiy0|VNlL7SVw}nq^}+;LxQ+K zVA`+`B-iC={RfrmqTu-`xMy@Z~AVn@N&RY13esU(a}0TdLQjo;HwH!8;R8N z@-S{&>(J#bpXK5+1;;v4!@$q#k+s_m~!Yy zv4qz!1&fD_0DH9c3tzj0egG!i+}fd<5-#-7ITd5ysp;1J64urh2Ah+P&tBCq=$d2_YN%CHKzl_5g`cS;(Z2nO|RWsG1Q ztc)DK%IlG=417_I3qc?aorjf?ORMG8UrMwM*UQRawI*2^0}Wc%4=N(xWMx<`j3hG% z!5&3H@>@+7^kW+%*RU64W9Y#cs^oWwttJ~|xgI5(Vp-Kj{ORt&zz8&S_W(Eo%5={t zl8w=Vu6D!5cpYh6{ zST;{gg|B$@o2SA{lB;intqm(M7wpICj4aa)ptQDNb zBnoYz3pcp{n}L8Y2VToqSir1k5jSLsConZcvgj(Whg!)fB?om`$q*PO?9Xu(*zegk z0X+o%RZHr~aerC;GJ4FSu_&WqWkQdU5`lpzgMm}*AD$KQOFyA;w%Sc;Rp8R?27VN7?TfyF0>XH!B%UsN)myRVaU(T< z8u6?rBMNP$Vgy^W@K}K=NUoJDUV5?wt(3rJ25!fDNPi^S#<0_vN%|ubpLar8c z6f|+#p@mtB37O_lSYCa#VqZg#z9pgd`2g*4eYP^mUzuT))q}6imL|nF=3$utp93=6 zWde*DjALlBWf4Z-m}%DM5TJV1M7J2S5TTmLPqZg2m{A1GxP-lsAFh!^(aCP#5OpxKd!@JtdK72aZ{Wv%v7jlW zf>nW0O%@O43`QY~eUs6_T+7eMdzY3q1?sS6A=^iaCJL1@-GrbyBZZO>9BsyxM|vS+ z5mp|6fSv1viP*2syCe>-+8nDndCoaiiC$vj%E-u7lenI9teAM^Smnqo{*Yt!5B>NC z;K`LXkvCnY4G#_!%Cu3I15Laf5E~jq+UN((BQ2jZ3b}!Q@;w__v&2e>*4qY>NVyjS z0Ag*@4<9y1hTsNLbTee=If+Vr+(1fSi!H>@El4?jUL)A4YS%=*EWiPz%)5i$uc&ooq8r(H{RxCz-joCVe9mZUQ^bUNwgjICK_cag~+RL zW+;&Q<&nrU6VVzk5kif(XtT8&X?r_7>ZgJ*!B#@cG}#hyuJsrwQu$As1h^vUD)djH zXkv8MRU%Uel^YX$&lFtuLLMp9!e!q4F_Cu`2}QWJu@dXIPLg#{7*egil9IPnZVRRg z>`E`&K$}h)5j4rbPR4d_RhURw;#gcK#>%^wVNIn!{^_#j&wVkh8RP>;l1Pz@Q^pII z;np8gK&!u*TbWl8T$}JH2}9aqn~$|1+H=~WSHbg{v_n`vr5y(87QxLhuBjQRGDLiJ zq>jxCK?XNomghU!lo0S|$D#=>UjY_nO?WT*uZ+p{0Ix>$X1MTtzONo0y8JqZSa*nP#}$3t-sk2ks~HX^g%X=25k zFU@rBJAO?yv@rfjHpWa>&CtU4bA!aXm$@do$zP_b`a4v)K6^m4PAVH6FYwD^>3Er6 zR#C^>juhkVP#2%@}lGKmDzCBmO6+Y znHB_!ZY56$uiHX#)WPN@26dWh63mm4p1!pO` zO+@ykcAKcv!-)|p`p{wlM7G_MMk7X8QtFeaHgN$j@??8t6UUQJi{N)F8;B<^;;)$d z7ooqvuEH3>U|QZ|>E#rQg&mcG0b@301%2sLo%kAvyr=~Dvx9U1GNu}bJuTWO))o{) z3HC$e-jrHrbMB2o9ZJ8Es#-gy3>>aBk_VKwTGlT)Sl-MJ**C1t)h|6*vXBA-<$m1F zRjtGwOwxM0aHs6%n$mHbz;jhf;9*5g$VP;In#O1OO16ZkT#S@OG;fy45XQ1>F@9tS zm$FvH_3iS_QE~)n?lxI|kXtk+7v@5w-XQM9EBM#T$h65grNDTi#xFghY!?LMHpQX# zYS5?iF)L@9M%dIy+(eh2P5KM=c4n!ByWszr7r0FgKnKewHnn7kiMmGOTTEc`@kCKI z$Y+z3Gre7({SX@|6z&%2B;y2FO3~RV7tW=7Qt3-5b#_f6Q%SLHVX3}U@?Mm?nJd6BSP0mQJyu3fB=+c~{OB$V(9Ailyj(UwHt~{b230;mrfOF|Jr_uCMoLtVF z17mpE%-cTA8$-ZR^TwAYrO~KhlKgnmKE-dF7SJ@84j{>#m7DCFb~}snu~K(Y(~L`k zq8iFI#}VkBQ*J|{Y3$bb7-6jM6#%I)fd(JR>Q19k!n+*A!PMiE`it8xjV3|h5M)5m z`kWoqM6}Yl1RN_zj`K=_z>OB4i9KhyGK4{0C}V?Yi3Kl4K&R1pbGx5t`Ad~26HA$u zdh+3MC9r3Cd{(qFF^&N_S#jcmiR>^oWLtW{)&IBLjf-mD%s6uMp9# zz!p#KP!!%WS*s!%$A)&46k>c9RAaM9Uosur9s`}Hv7v)b`t4p27GvAJAb6(jUJ%*y zX)lPDY3Z!n3t~ebO~Yb>J5ju_+Y6$q(TDOfm3NUgbpV9Jhm>loM+!U;rgA`q($?te z$6k?ktH*XpjJ{TS+3K;Q+v*X^KsEU_a#lob5@8O0xT=($!y|n)6uKf+tck{K;Tca# z#-zNc#UUr{MdYK89|Xo1-;=XE#M`e*Q%Z>Y5KJYANb!wnrtF(j8KJDM?3Pppg1R!V z05OTYa#tJEk9~`xhjzJ%#Nh6Y2h_^qe_bw?BC@@Kd)9_Vk>Cil*o;atmUp9W^xH)x zrnZfgN`G$7F4DX@)Z~b-!=y0tmh7VE;B3w9MSh#}C6n7+EMmW#Ns(61ljqlzFpbsq z$NS;0JqareR9r%_?LPtWnG!)+cH2{nZhI;Yoy6Cl` zBd)~q>(JUo036$*KT)VYZ{c{v#wjh3Jxgh!xH|hox%8eS3_LDVmdsOJrZB?=E}hR^ zHlO8kBw5I~xlDO9pXU-7{s_K46N z&UkU!P|9<5zHAm5Qyw-A7c={9d3B`?em-Qhe99um0Lq4XqIa-(PFTTFycqeS%|+%b z?YX^J5@e1|w-0Lw&3ex&TjP`Hy;vSB9x7xpr5Vt|2(=1Fw5K}*F`feU=n?jn{9w~- z2TebWkbbf{ug}(VxeP1@kj{ieG+d{C*5 z{GRSB>EZh9vA$9vP217Uv=gZ740y>Mw&K?)nu z5ri?YSq6vD(i1|DdGvYO5$erGCJDqdMsZ6oU8~3gXhp&PO(H=9J1+t1yuTo`r^+_k zX<$EVG82&%Z$a9Ppob+BgSM3orA662BQ1*9pi-+viN1yw#kx@fXCW(8irkQBF8_ZsF#ztz1cbn&FT$oO+qyW3d%erX{-w8Qoa9HXn&g z8J6t!R4Eo`yW111Qwm9?11@WYlGDb_p0{(z$w)h}+0mh;5?I(;Q?=W=v5B*cb;cL9 ziPNGnG`oG0%*m8V^_$L6y4b%rW^bW8@(+c9y~szQwP*9I*N_O^%?WtX78A|My}Z#* z3C_c1G`_2L8s80p0#P?y?;lBYxwi-za&MR!?XQBwxcXA}c=nnNn*hK3)y3`ydkT%7 zB=+h2UXVQ@^DuO;W&;08rYv=yq)wLrS#|!QCD@iE$T$t6l8mxgt>hzOc}WXn7_~XR zcXPvF@1hcxDt}3}tbU3rlCB~~%sdAXafLBk6e>lVZc@GKy@lXi+T7W*j$JOjv9n$v zWuR@O`M~-{%GK?A0j}SC(9_qMYmefvA6DMGUlG7}wc8rG#*CNQXt16zxV)Yw&DI{T z7oXGsvDG##lWf0|zj2+~+VE~9v_RWChD~xW^?JF{_73k;fVbBCxF8;;&1cp(LMRXZ zmL4poI21X5k^vN_5fThSR?&>MsMNYUxS390GuVqp8vZ^`k3Mad2 zvx-!;_X`qLOT8Atrt0z36O}MMAMAky5qqox?SlE@s-xumFLJ4&2i`q@D-L;Jn0f{v z5YOPUtn*L02WPkT8)medOLWttY5o+apF2V*2qw@n+Y;CN`2Qtb@8owsjBz1r4Od`Y z*~}Qd&OGI+-4wmj1y5ESJP~8yY`1ZfS7!UT0SIKR1fu-$>ZcK^*JpKz=)=dy+hz^W zmJ7@YR2xsWGQ!?l^ya=>mPnO_x_ZneLcaMMN?-RTW`wP6bIb9=$C(epU&y~#jRy)M zw=Y~2;rVox%e|nenrd2bwyZ-VhbDu-d(WO!uZbKp5rU;AM;5$RI$RDL!~nnW(k*)F zrX{>tiTNP~dt2TCm3rzMKbP^dY>AnMkm@rZdt*+wc&+0B^} zHL}Rz;wt5Em6|RG3`%X8)h;6evx}?9;o8nsWO{h#(P+He8_KY?oU($6RBx|-R7PB_ z>s?&e+m(-`ls|<7Ml)I(?Gm@GQ_efPMeBsrgfJyu*Sq2h9kV^I6fxzhUG?&Sl_D@Z zO9#rsfw~s|fzMa9g`o1kX?lB-E11kZy`V7SKH{Dxt-Z0AHKqxi?)DtdOjcfR^Aw47 zy)~_!I$#UENhgVhQYRvplEn#4kutpah2}KrQ-Tc05e}Z#6$vcQsI7k-5eX_N12R&Y zD)?zfDC7{S^N$eJtCzIgA(5f|ye1#mAPt*U;n`l1sAdDLdv#g0@Z(NP!8ysYl$+bi zGWSh*T%7_E5pw%JMx>&&djkhS{T=o_7TAp7>nk(TF z>9yegaPY@FRqrqsysMkvwn`n_qza8CE=0z665<*_hlaZhY{m?s$8FFsPg_V9jxqy^ zFNM@5GfI=vPLZZgWE|+*%XA7Q7rf4G4TYwg>d(t*Zx4(iSmD)@?V(xF%8HK5G^3%j z`FKIUAIr%ON5egqre;R(Yj?g6x4^te+EMzOIp|}F;hC2W}B`8|T1)7ouh8qe~ppLVw&wMpycSQ}joR%@rZqMMutVV(?;tfEaZR;Fp1Gw(H6{D-W`6K6znLHU zJFI268AERFOE=_tU{F|GLiulEwb^K*m`s$@@>d&8B;17)19qIBuIFvWC9JoZzdjCs zO}UB8OZwD45B*%qYonR4Av(T2)o$QW4J0XE`$6&ATqG};*9cQP?}bQ)q9w0ax|LQN z?8KVhM;*PtZW?1Fic1|{?kGH7ehtkKVY@ka4F+fPD1rl8@8WCj7Jf-&qi)NaQ$%@$Pk#a}2phCO<0HRJi6klh<($Ya3zZg3d?}+V&w~c{!t$4jQA+T3aHk6mm zMZM@A3l!0Sw==$8l@mHs)U`DV95{_Kk%v=kr_B0s3-A|a*1=ImexHiE)JIm1? zvIJ0~fgX$WASqC08>2NS1L~QbUjn#e<5OCB7ME$pcSu>1ONA)x*E@VA!d)~U66?#y zd&ID(a}JCM5nxa2GM>9dQ0wIqI__G<>3YasE|P1$1u^V}xb5r(>qJq0a)B|;+6FJD z_I09BYg6E+y?V?^O^ZkCtB!itv)sZ(s^Bx!SI6G1Fh8`PE!u^uCw5WoiXWc%*pYb! zab$(m^MT-SK7}x1V`;B!Z-mJN&ZOP)6n?yeWt_*jCIGYr zqFukjY&DPJ3K4coj=uH;g}0tH`1xrUl(dZ4(F;@&e$~yI?Cx;g@mq#i%=}@oj2RDf zGG073q4N;cTXbfDPV6T!D-@VO)Zu@r4>yyfRMe}P28n_K&W-gXA6pjNriRKTVO8r< zjuqzU?(ptrwh;L2Qci}{_A&1zNT$?M+E1o!1%!95Kfc^6@;n11ZAgIp^}q7QF}iR% znwKBiU2?ff<2QT@b-v+Sv3{il;`Q>QM;6{W znbYzx73V$-xwP#lZZr56y)IwEUC>b2faHFopWLRMyjOmUH#{yjjHk)R*cvdg=PSIP zf*A%oB?J56K|V-3`nzn8nN3W+%>j!zG{qyeboJSh&i1eiHdKH&WqT-vgze0c?J>|k z4D`BSC`5)^vpsG}3Q}nk62)D%2k`5qQp8d;vxlZ=5Z(sNJ2xmU3Ko>@fz>dZ?a|kU zW<3xZ_*D>08=CPof>gu1kVD_yGlz2FyL&i8ZhpGg!d4ublCnK+QM-}t@j`$bl9@wO z4D3*QiOP~;cWVJCn^+4dHA+S72v77aNi{ktSdB%FE5xZ@FFiD+UquyEJ)$h z3*WMrWfW#r9^%nl5&Y z4#Xe`$81)|s&mXLHO0rkqyE?x=rTyC`jH-(=6MgBO7O&5HHY^I3nF(mVC0L{DOJ<( zeB!D2cF?TdEh#vc_%K%Vr+n*7dc|D2=kV>^lyB8G_jUVRCj@Qc5W3AtT7 zg8?@QAY&tW8zs|oB`)JR4c^COYj_g_3P$T`*+e!P`uf!OejZbeNwX6T&aI=Rx zE!r|-9h4n{ROkMNAts9urfuy$c)%e5i+YJI(W`BV-{cDp-DdBww6F#xGciE0vf6*L zRMx_$=IX$tw2_tbZ3k>}Q~=!tf#Sk>=beoW^~bKZlA(-K7C>iuA!eor6(=JMMz@88 zi*@{?NB$&#_qZ1TsCz_bYlmrN1Usy3?J(XVcvc`oIH)o^vT!7;K7+Qx7Cw@FJJi9I z42-VXcT5lvua)HifYBu#gi)4s9f}9-p&}gEPsyN3o!)fDvQ^TV zf^FF74&-_u*WGPJF48`AFI}LJ#lJz;Pe(SF%@TK~5SpaxzlcgftyNjl8FEw`_kxVsEzP@9ol4x|YF@(ei?A z88>P$YuH4b3m&d(FZ3ru+$gUsO0wxzcAur%kfrsx4Xrf)24^zN%YDw9UscJ75*DpuDExp{g(}<%2m7g&`0z~5L~UxtN1n{K zqFD)q#H6Mj*6l9GFu;ncZ2@@}oORZ&*r!)XE2nqMa zbciOf1e}2;db1prQKr{r<#lhQZl|wNprLo7-_E?2r;~;e4Z|84P z#xD1=-Q_NHq~ZF&oh>LZ{eyzUx7V6)mU3Eu(2S#Kv7S}`!VKU%lcKRq+*(YSWpSLR zLDYy?amOrnK|mM=g2z@wm?*)49nH0;N@2HwE;-}XwTzRT(s%hOtGh!R63_oi!r=9MK?6K2*sGaT( zG`SReQ9Iq^eZA(L?l82DswfZzNP(+cY>on(^|9(nW3wjUx71;Cb1|;frPws(brULV z*5P9qn_hg9(QhB554Jgz;2Sexo5Kd+?iGUiaOX4B+8119uC%qne3Op~vT{R)5qZY#$0BwD@Ps6?Yy0e}C>f-RUr1Dj!qW+Dfn zBQLIIL>hKzTCGOC#dHZXxDj9`O=HQlL4d3{iNx|X8vpg**vR<3iM#>d|I7B?V=<>A z8z{7FU|dEYBF|SXlX(3Y>saktrM%d-`_s0iBs(tia>~pM&8W9-IzsB1L{b@2FBzv0 zLXv-*NkA;*xtDZf43^NIWfd^0&^$hCCt^@VSVRB*D`D$Ze>64nxZY~rO)+8Nx0zU{ z7GEnkUzAShWcG)OD{I{^fGkCfFXkW|$g*r!OqR`OFFpg_qCcofIvXVb>Wgf2oY>bof@#VgZldw!45}wAhmdS@y^3~64 znYalolQ2tWnn-5Jw241+v*Zau{{@*P-5YfhR-X77e(y;9pG-;IDjI=m`@0C~YvMv# z(@a`0oHZ&PtFQ!?0!KL#%5RU@7r|O#vb2j*=gg;QQ8zwEqc6YIE31X$ToPM2Wj44& zUm?Jf=0bp(y|H(&$8OdcNif1skzh_5A!ET*$n~+6g7-JQ74IuTfEB?uCRs3QN*zg2 zMn_3Lx<=T8G8`;b{jHcH1#Z--0zHUn37UAl4B_~*ixF}@O$KQ=GlyjCY_;&FXffYqy$%avZoxP82#UAzua-lf2!ma{f}V8Sk-R;ng*Q1v8z7Otb< z4y{^1=V+1ZNLxY(_d%!EubZEkYt%XO)SV%;(O>Rb#dx zMCSl&GaRG9bS?xwAZwTt86XRDZm3z41F59MG7Bx-C68H#GgIy88=xK3Cg8(ZlJF4l^*>aXPvJ|N}}X~f?ad<#-kNB!aE4Wc25swMIU~|^}NiI*#KD~9gdx?|Q zyQC2JZ((`bYpTC6&+3Rj7kSC|<|JC;pRhb5P)%QXqOXp)6iqUJ;6@^6UKPZ}*Fdyz ztk2F>XC2~EV~2ydSRNN~@!5;!0+NW856K>F`fhuk_TRug-ecG6&irN*Up=}-3H5v} zBXVgTTHi=1%<21S(_ETDYmcl{YGPkcZi|lDLRqIpx2}chAwn&-u=VsS{Sf@OlZg0y{*h83~aj`lMdEG3uBNjg5R>RX21q zSnkl9-c#a|7dTVH)3d8m1!e-9%TD)M|@-ahpx_9Tgj)b%Hdgd$wjRplv=EGOUKYwn< zKY#Ae)<6Gtc6YOUkOHci;)Fwp$6H?H3Y;Y*_M@mg|PEq=UriA9Rf0OGc z_*4Cq7iA+J^@TL~%e^mqlkd}p>=%ae6C=+1@}{=4Wo%eun`Li|4KGsH(E(?)f4H+U zVucpd;k1%2*cFP7B44!(tM?>rgv)Y{{i1{B!uJsm!|WY4Po=As8asHjT4s{4@lRBG zu3#5D0DpBjV;Je$1^&n9HnIa*b})lXfuMQMFU{N|Rlk4se)qBF{j>KkIoABx^xoe_ zIr1S+m3y)$mZSL_wf(G+UA@6Cb4_AP;YBj>kv zRrbQ@J4&TMm9gzyg|rDo2_f<`3mu|0;Uv(IOVQ~WiWVq}NU-6+R+-2Jp04(5^WbDe z(KL}qw&-MuqAq8^1K?u^4%0@C9++eR1|Ox$3zaBmRVagr5z5U&>>vN6juS#CvUs1i z7HCdUA2hb)_jQlWLVxX-6mt7bqk6G>jw%M~h3@_$_Y2*zG`S#I2RS#_WC9H1q?R7} zm)vDzSgc<4>{YSRKW{$IWcV9y^u*<~-3#1Jdp*zH6ee;RXCOYuU2K&Q{7?md8Dk5f zAi7zE1wElPpXFEI?%}Ty!npuCnE(Ul9}~i8)?u~WA7brQ>%>jOgzK`&fDeAkn}^wN z9_FgX$|uwhmKVVPTJd>gl763!Q!8?vmk@8w)Tb`fq>i9M6usE1`D$+IxB4D290Wgs z^+gKp2z2fN88mqV#k6JIK^eX~=d6p2)|LpTivm3h&ld0i*{jr~FJQn{8rCcIcBSm) zIz2*Vh=T2_1Cn1zm=XP=PZ?t*Z9?Z(s0Ye(KpjqFmy%}gnC7`)^2dP=!g0qSLQ9^| z5^T#z-EkB?*A}u>9B88OM2o;vGlh?&LehB)Ef;H8@%h~uwQJes^xMdDQdNtG)>!dsFXn<#k72*(toz3l7*_=3zH1NRzHoAN$lY zw43^{<>o$s-iSf)Np~awJ2j$*(NO!`?RU?4y6@OTh=r1(d0*2~>U{CxJe$Q{U~Mk% z7sQ`6RlzGmjN03Ok#l!hSla2l z(!+53H8-A4ceMopX_nfV3F@4Z&hwAn=+aeOjuO@Bo0PhnloO=faFV2dHqH?aqq}`N*kupS7};uR zMwn@KqPo_7;E9b0wl8<3tFwKs&OE4QA8>A9_r}WXgBSjC!3(i~pF5t|vWRp2Iu`Ns zHDRTFe#tjGUeP`kXoqxjbZNzQoIe_1lp2BJ5uO@{I)j9$++}e{&aKd_RHKALQ{d61 z<&ja8?v^6JefjpkusKRCj4(4X=uGGQcMbzoX>UILKowX^JIH^nLzXkoFKhcHcpU3KX{vvxwNVN8mPMe(zo8E~%FQFxkr$ouwr6S@cFCtWx$#`a_q^qwm zFmIT>QV(AQHEk7j2~#s3%DQ-$Pa&FS%Ou*y>Do zGO>9U2mbJi_Ud1G&M##NPk<4Koslwx6w$U=z|=w^-7tM{I2)D zO$#Ml{)M+t>AqKHM5DMHy}h}hI|4o24c^{8UTWfVH_{DSWcCEyM2y8hP#WivSur+xWcx#^F7nc!P9};!oSq?l*S}-Gi>~F zl#cwgNqPKRg-H^t^6FpUHBsg)Mt*CDBCz(udR925Jca=*1G>T@CBg1nMFNW0T)Ele za?K)6Y>~4p6K&GgALcPnu~`5Fcpk?y3);*b|9IlwmWwRM_$y*5nn-8v&=A{@g-+XW zk)8&y3Xj^WQP7aFxA$`Ec!C(VyHNdDB>4(4XnMR@NfFtT1WQ;uRwpw5bFF1-LfW-# z&25ARvsheiSGI8)RE}sbasIE#R<^82f2S$hMn#K7ucU#WCzviCc*R-At_aDGnwvK<`v{NweYu*Fwjxu0LUq@QQAyVX)UCT~+ad)*Ec;Wd0yPAsk0#p18c zu@p1V_BJiW=rks%=>ar1fvp~8;$}8Yw8_uKVe}2=vKCy|j)Up}7~&86O0*ZMF25ap zkN2af#bR^jdkIEG2!sue6pfnGvqh{BO_rKdvqdM{8@YAFE@-<8w)DNuFte>Hj>(+a zcg0Bx?(a6nqy5;iA5ANJI?ZUZOtNFwT2D(vGmZHqkeRj^o7=j9p|U_k3&^(34N$PT z1%^$5T}P2_+r%w2!LAyeF2nv!;`hVJ3fIEO0ynG>)+?`NMM{xv(A>p6M7I_S9OOd^d=`(ijG z&R0-1ffk~{iyk+F!ZB~2`CC7aE!CWO^yjncCuFI!EDzkOqOV>ON73dgV_78?TZ|~_ z;%!>EB~GW!fvJwql7mKB)K4WNR!xG!mbxI9cibW&v~fv7>yNeF4ycz2q5Le@Y<+@& zB~B@K|NP#dK2$Yxz=36{h8zpA4CGF!;wB?rB8vsd)5aH{IN60;HO0-RruVYRq#{$gsleVd@{gjdaL-`Jjbw{SDS>dG{BdrfoF^H{AG$!x!0(#9~ zfFDOrB=AqrvIr{Op44Z>rfO%dIpG4BIrI=gKVPi_LCyC8pXQurhI#&k7 zoMW=>+mnF^lW8GT);2)+-eu3YEasn>SxlMcgIfxLrb#`;QCcW{Yf{v>`WP^{20t3KE8v+=nNXt8c`oz$vHDw(~e*Kj%lCtdt= zY(dQU@j@_oY$=FCN-?)`#D!%jN33J^x#`#NLq|7DR`5~P-|X?#0d;wc8|DvU87P!K zQa#)ml4{sz)#qgM+tYPy%>|Jn$VH^R21>eypMUcQCek3nW;@%? zP~2J;DxGo9kElwbvcwVbIguu4&$&zv$~j(!Lv}^b3|VGy6(^W+CS5cn_kn6^TAvJ1 zvK~;phMz>w9N}VmcDal`+SP<(NBJ1IS$d}ZboOGU5c41%aQ3y8O7~KAAMpZW@mQAd_G29!38jkq-WR9qzf{ys21lx5ivVfn)S1EMU{!^WoPpX+Ch%lqtBZzi<*eGOl zGwD9RBL*hBqoZ}rk`gBUbwd^=g1upvwMo^TL3HzEd!*q!|9M}WW_VjHEWsvq6^WX+ zDL09Tcj^{K6HBLV%iGc!MCo%^dT&eLx3zuKMEb(rq7c9Ns4u#nIqIv54+VW8M}0lC z4u=nPb|P{5K!Q&y1e%-iu6*Lyg8NOMcw7ka9KjtCI}%#S)p8s3$V*gyL#tE`;$M%h zV(=W)%o#e?Srv^Pgy~3e zqAX6hw89?=T^hXN4Q&H7rCsqHlPM&rg9Ni{3uaM}Z|2i3xK#6+WR>#Nn5L3aj?}bw zv%%6*Lw5B9>JIcFUG&5@A~~e`Fy!yBQ$wjnC!qDUa^C3F(2!ws->D%nHR1J!a} z_+pXt(S`gLuke96tSKuj;XWC_SeI!sY=nko=tL6X&cyk46tq z`uhrUyluWB`FquKQ?pO)`kT0091vUtc>$dRGO?wjgwma4!0cFJwT$!)jKor4Dy|_li~ZFj)Iy50Xcx@ z?VVwASAUBU$~s>vj%4FK{C~A5DrUWPYA2EyYFBQpDCI)($rXdt1NoYoNhFt1RDG{` zdaj9X3DnIsXAJ>-1)Pr##%e)d;AmkDv^+;iIB9aeo?%exVsqQyud@+aV0r(<;8^u9 zi>0hn?{px8PRN&wyXrAwy3Iw|hLMKrJV6h14tu#iM~0684WtS;FXv7n1!ehTU+6YK zW?1d3GA@IEMVa(i8VB8ehq;E7P)(L9or*yzlz@z#YaZ+7?}xD4CgfD>+Cl zzWZXDMe|bOT#qB3=e(JKJF2QVbIeDysgCOAum{1 z>GRbs*+D@ys7t-eRk7|nr@Sn$s7)3cP771opQ8=Tp)k)BG8QJ&p$%E;GKLZpFbC^Q zid>JA`o$JIp-Dnp3i%R_Om!f31*?E|L=iS|s`u+jJHbIQxLQ1)M(1W`adv|LQJM$r zZiBd2@9^$EK)~estk6k<)cFBCujA)ALNEex;|01r4{AmX0fE9XfITA3{A5I$DI{yK zcxQR|2w}JSDpLKg#s)Ipl$$NvQm!6{c57)Q1^4O&-K=u!KnJcb2U?7=_)=09y*mOY zdlZwBUOA;RTO_JHo&?IkOFan=CR&__jEAZ8!-*W(JK46TgUt zF@7%-D%>*g7{Gv<7QP978Cg0tr-K?uzB-8Iu~t0pqjkA>%=x4=>+xYVK5}X!Yp#{m zIM;L*6c~EGV6PH&Tidt|_6mgAKyL(fCFqP{6Nss9Q=r$ty?~jCere52JmQvax?!2| zJ*?E2kjEPrZI}vyFV>y~1#L&N<@si7eGuc^-r1ATzBdUVoqe+%bPv@O-2XBS}(naLW&@2zOIJW2uVIe~?jFNVNMn;Lv z;N)A#EV2HV!>dk{nGy%7qI~2S=_FN~CRji6!BkO8A?Y10g7_HQIZjxG_-sgR#5d8X zD_VK1yVHoyc6aXJ42u#rXhZ0xRS{7Q2Agb>)2?6duf0^Xt|mx_hJ>nb_DQhez@f3g zza_KJJK7?AE+d{Ge-9zkpjw8JA8#(w{-(AtxTxh7H#KD`nn^6>ncd{|nBMI5nBG2% zBjlpaVTIGTZ=gQ;{VrQg{|m9QDTRHMuS9;8*Nc+XiLf`U@N}9fjA~z{6@QZzbSd2DNDGiUGp#v3BioOZJJ!CAzlWby z%r+PkyTjwQQo(FLqK!4;XJfxSKSwvVDIQbq2p^xsP% zsFOn^OfCq83)}=w7OQ6?#qmrRu#^jWy1ToIyHnlWcJ5AgcRTB=6V$uwz3FOCy>B`a z?e8wv5N6$;d=W}LDUTd_FF8nS?>(Yimi6_GKgr(x5Cywa!G*u@ZtjM0_v}mG{g56G zPpJ0A6+POm>*wbD(i+$QtyJlu6AwM~kiHoQkq}4tQ|?Av@ag7;Kjm&XR6yMv`cv+P z1SsZ>RaAb4Eco-o+2s1!JsyPGfk8h>+Er7_#fG){hJkeEf<(q(^JH>==)Di|cXmbx zn`e~UZbqrt%_vQ!8Kn`;=;TE-uD)jIMR#rE24kjm+T?NS19H&_5O4i0Bj|es{Y@k2 z&-U>UuXLSoJskl}r4i7GNAMyVcXLyUpKV-^W?Rg*f8ox{&#Lm^={3H3`N)rwu*g<+w|@iVxLmpe1y)t zO&+b#Z2TBEXZaKRDd)GT5n)c@*8uf zxQv>26t^HMZnPtjVW#|r>oe>;y5{0{xgd8!nPnlJu-<+`c^nsc%(N8G@Y_7? zqNjaH#ZUbMn*2K~{K@hGlzHu)W;n5o5~j18#3Y+2CzTrDn!l_SsjTNR8EVhu6YO-^ z&=|zA+G2assjQR&ah+;Y4+tE+vGF?1z0}&gKV@no)ZO87*-rJ1TrpeWX>#UkTc_m> zls=7Vfd5C1jZJFAg1>*7D@zrFxKgH|QapGSVc)KNgEB3#3n5zmN~_pm6)PUY2hJHZ zgE0QQ#B&AEwdwDOEg=PE+N)t)iE;qZ;BQ9p1((s)42m(f0-npE_!b_0DJUie^Fmaz zj^#|iuBDO_+_qHG;?IGn7F)~>f#C=O2m|WjNq@umS3cA$CJ&C3IeP)OZpGVA4o{uA z=ew$V*Jqj1T^6!@LAw}-a|6zzSrMz++za1g1#ENQ`5IWvpiRK6*kdVTO+|#dVq;b- zWQl%O^raxgRA*tX$cUw&bH!GaZ%RRDU9Nb){EWrURus2}$+|*UWLi+S1r5Jl*;4I2 z5hXpTsflqr%{35c;w!@8Q_v7$6wE+^6-&Vs5^jfaUIGB7+ZUS=nUen#UQ_&EAx5%5qQ?4=<4N>0{z$O9Gx z_V8d2`H<}qg!LX%g0il-%JDrXIu0pMhf5EA=+0?Wk26u?c0+`yxb+_3q^$$My$2Y0 zSx2?$D~*!UN*Ad294LG`jq@n>L^2(^M^C+MOro7qYpA}+iEO~gPO3O_l6Kv}gwyuD zK9!m$91)*219NQ=)-0_w0!j*#exU}-7m*iq;!TOtd7wl!b04TAdJ;Z>UDLtuXuK~F z7&&ab$3*4mCVm#f`pgScwHbG%Qd%dHBIeM($g)db}%C{YC^=L5i4 zUAnP2L?xu~Duh)1cn%t=;N!nm6(wVJWK}dZF8TQPj@jh3Y2OVf@X23!oczVd%nC1F zDTJ%!wNocHvSwZ%&|7V;VI5qd6>$o<03M(AwNIN#4}2IMx7xn-)9>M}>IL2+``9mN ze24I(`EDp9(8*p9g3df#ZJvX#+$EDG^tWB!uhq45ve&A7NMcUc>D_yk@~4YEE7AZypH#kARHbeccsSu=35Mw>e@^1nFMMrW z(clgfQO4@!4%NE^6EP1RE=)~<585(K@t3)|B0~NrQ6dO|FP{e?m=sj|%K$+=1*XS; zj$X>!#$QW%-T}QjCGH??r{|>>r^kJnDmd~y(q#>BOvh=eEP z(B3XTZ*P~MM|R-eS_g*GBw})^9m8UQI@`3mHLgPUUdz?mF$AK+Sms`5sG_YSH#HfA z^PG;#vF^+(Y;MWsFU(osU8_lQa#?{X%nbP?m6;yGCh}W?Af@o7cL6s^M25xr7$O8; zNxtdmP03Z!hs;H#?uDRr0f|A7l>>-oaDC`V8!RadhL^zBKEWhC7G=4ChsA{QHLhAb zEOvO1@<8B{u&DYbV0dpfVbNoE)}hC4dtYOhVK&oZjN1-?dYnyN)O2bfZiE=6PasV- z+iVA=E{ZSYB`|z7?bJoI-nv|mWm(xyBN=}UH`oBqG8rG>hFFs(b-?8fEI2SC+X~X) zYr5~Oh-HFLVMQ$4qO7Pd`NNbhd)=a%8aT_6m30-!iyF9Q6m(|Ave!2%b=S55KUC^2 z-6#8-b0F)TQ>b!oWeUay~kh42k)7Hpq>$U%N zsn?wR0aWY0=CL2d^8Y{OAA*OeVLXZEWOBBq@r0)7!Rt!NIGzO0#i}WYI-S>8cL^4+ z4Eh~=60T~G(CmrX5Bs1s8W>4i1aNM@inlF7bSgne7YxAf>$VI^gf#DdctamVxG}>c zfmV+^tQf0L)l=izZ|Ku`z9OUXSwH~sC`fItj)YPT2=Tk9BVz!H-4vtd6f2qJI$Crw zMhW%7IOni;Kd5fVYl0piP7;R z0e}&s2IV4;;FvGPs8TMCaZqQgCZxGA+2jSH+$o^HU4VfHqp9~zD>MBbEmvSyG@a| zHj8eXc+m{C4M`9axJ}l#dQa7_gTJTK=YI5sK2c@RT=n%_(bEhy3h7s%LrHKdKQA3Z z5SP$lqQE)ygFe>itxG7qaX|roq+Kyiv?~rb4>N-REQ_Jk_{!#|{vLBWSN(IgSFE+0 z-Y^!pxrV1Uq^b+)8)n`&Q>W!ki&qhDDY2uEEIO{hx1uouhnu1GzQ zVWk2V>@8~DfErVO)GLowzhQ*8okvuUty!nH8=eqi3)xXU{h7M$NOK!vUz=``N z$VoTl<*7x1w>hYu;`F!nq+cCYvh_UTLHImoA`N4f>M+3p9s^`|^Iru77QQs}Bp3Md zdAL6xNpEy6r-uS;2#Zn*L^84=(&Ys%cT){ku*Pny$z!s`&=#2TP--_&`H-H$vF$VY z|IFh|fqbUUxG)@YnjGfsdZw|P1D-P+EO8s{D!T9VL%*T0Po&O(*!t=l3t3%9-h(~* zBwFEN<@RFGpj4_?a|z0Ye^{q_C2oX`CKyhxgVW!3BETn^3>mp#l=4uD&JTA~uTXHT zwOPJ&qlv?Z6T6>l*?rcG;-e*IZfAmG)wUf!d5N`lep;f@r8^r-NqXw-Bt6AAv)zQi z*tzeOZr=%jN zLPi$mVqrzgYdi=iP_4OTDN#-9S}?a7gU#%}SXi*4rHIIv5mMB(ohPuE#0SjQ8WOgC;?6Wi+<~q@LINRZDPRmc zOm5_Ba5Ll7>^|D^5@4Kasre%=oS2Jr9Gq3$2X(@AAfsczj>m+2V}|94UJR=_Gt=}3 zqv=HjBjs6FS1(?kkK1?TsRwI&MFhT%BkE>g(jwQ3hi57n;+)|f(I9iRgP2$dir50L zL|DpvDlWjXMeG{cq^(TH107r<)OU5Q?P^=w1xgsiQcqtAx~B8fceO+|>!<$!8uCDv zbtkKTVD_F2fWI?)Ph8^1XYaAde}em2zy5>r>k|cFFxmRyOW{SmO_U1jIcT=5bVmoK z2#vA4&jHZ~%bI7TCH&UUZ)A;vaJ6^Z>T&j$6msH9K{G?Ui)%#x^_hH0(gO}78q8#l znu#LKb%>J`wtyiqhu}ojt`25m)_dz96`cx;N9H!h2h2kfkWmU=Dj<`Dju`czlwXC#EzQ zCsmSvzri=61_rPNKUyr}dxN(|E5RbDNnUce_P zra{m@{Z(ETeDHm`0PTvzCIwwMbVbe`w9zih?v7>G@zvN`r}<>TK8&q>N;Rdtjb$Q; z70WCY%iQNB^$>oC2qP9(4miebTcG~QotlZ3=792by5QSXm)+nBSa zuSGna`lg!;Kd{k$Rhf0BoEc$g1*eZe8=h5_QdNv-0%?i9K>ozS%3#qsuuVCc!w?1)N&I~Uohh^Qo}c9D@1QOSK>R1#3k zq7G@ksHo)JVjCX4`2B?16dt{_fW@yAw^aMB_nkK%VT7}S@ME+0OUIgzPwypYj=Wz6 zV={D-pi^AQ=+N{rw@|)U5q!knWUW0jZ*r|%Dp>ra^z}}W6jUH$kUOJG2x1MqBieR0 zk3x()o6})iAYwc{Vdm_VnWO2ckuuDUrBBQUW)8sUectrCh6JJ}FM1;fmTM7u4^ww% z_3Km>KsXsoTEUO0JwWRr)^J*PHXqq+${CVbQ_jG41xP{(KV*I*od1Y|)jQ=oh2vMm z&rbP&m}omY|L>G;h^&g(L~1Ng7}Ci3YzArmKpiR4-?yQ&L-4sQJ5AT?wz_F_x zYAjGxs_}#Z%W^6sFw(<%N4iqj#nw_BiEh7bCx+|Qp;TppAU0*$g##ekgz&KjQ;m?T zVfrOu%NF1ewTrdHuH`Lf#sN@>+)iIB3Sbpp00k5`qj}{!^OV>3yTVyj|HwoFHiUbf4VpAH@gHmhKkia(^cdfQX)d4CV^i2QLS_5% zzIdwCDPoamSEo>s(L`z(dq{Th`y{{n_~lShsrZfF@kxb>uOtO2Mh_~QO9V-=-N`no z_(~G<(xZJ_m9I6|Q(mmByksnOnieayG~4QW;vqCV&I=qeiq%O$)1*mqDd9s$YdkEJ zxGvX3Pvb-*1?BwoHGZlSEx9DWGU6QclOH=`+Zi-WFIj|XOP`j)ZX5K{qY;MIl7gw6 zlvgD^7A5C+qw0c$)Iqo_XR}h1C;1gh*UR$Fk*ighZJ$Pv_Ex161ckKtKx4O;oocI^XCbe$ZBW!mCrn6(C9wj)&y+x^l(53s))AII&jhM0c(NjWvxPua&#MS5trNg9mNY4%_G<${>-zQ*2um>Ko9uuh2oKhzDE!GrobPjm-!~7QTUHk!eOnPD5aOldkdT5gVx3 zFC=4OVK!qy-%GOopLGDfn2ZH-`YHvo`1_bGbX*6}p0i z2`MjVT$%n=^GP#4^dZ>Nm>zdoh$!Yr@HZcGSqL&FNoACVsM883q>?7e&|&=gMTcrG zKPF}C%jyg%JRMVn3&n(KOrW?Mg7>WyDFm}+Jl3CIx$!uV^hJ!vVz(RM<}qo8p79)G zNgy$wZi6};_o2P^6kYU33c2`v`|K$vLBtCeLOAPjJ`J`at2w8|A6&_ZD2TTqBi_jP zvGJ<897~epaug0A@W!(t`t_WXAUMUf&NT8G#Y2h$ST z3&vt+z}1>&j45DEfi=d6`x|kvooyTp_n?i%V%PL!j&nqG4-~)@xa-N`!COzR&iH!m zj7Yl;{(A_K+2+2SMc&%ndoZGvVm==>_Q;7J&yp!P#L6Bj`R*`32<$`rTz`=5KttR4 zHoft-GxiMg)8oWbOz)v=nQ_^g+Aro;=i;BYIX={mk%(NHg@beyyv{*7ayJyDQ_3u<_#7nH zk8wsS;a+57K`LPyUIJNbbyJvAD&erfXn~}=+w)j%AV?o?5ihWxI=K_rAD$RRGxQZz z4dQ&ksUh@&p5Z&Ioemh%WARyx>hl8dDH1CzO*lx}i|NC<;)E<9uJ>|6mVOCd@bv=L z-92aL^ub0lazCkGrcdXQZ3uS3#$VbSHaZY*C^wAr-?xraZ?$uCA4W6V}G3M8cF@TOWAGAtI3@_q2x(!3)Q90*XV;2JgHyyj>+10P;0IJ8U|4UamYGU#~r_kNu z@z?4A*@5h+=Ii3Q)*;&GxA1%#di?zRH&SM%mfO|#Uq6x^`MM)n^%;ytc1<72z8&|3 zV9Z|!Ec$op4P%7|v1qQP@>6VAOSRW@5TBw}2tQt~$Ja7+rCM!+!JHnpR{a)>D>fp5 zNG!$;Tcj1?vjKXoE68lzCcBbnL#`sV;|)g1w(GM)bi>a#c>SXxw?2%yZO!A)C@g$) zy-isMuj0jzx!@32hsc=xeFp1oiZrV=7+JxAJ7ovwvHG%2m~(9A|7Y+0gYCMq`p*0N z-Fx2;-6uUs&-&$aZ;RHG+iDA{v4y)U=&0;&GtE@Fsje=D>Zv$04e3Z`#_sBx;t%M4 zWW=DR4Xp+zylEUt0Vl1hafio@10rJvK}-;dn}~@45e$gJ5D^ThCT8NAm@uF3ckO-d zc~6ohx!q7nu*&b8v+p_k$J*=nUVCkReWSWBP@T55xbBNp-RU@!n2iz8?#-5G{_gok zIWAx1vcb{&Vh#K+r^&Q?IlgZ2H7l+uiuUFFa<1;=v^svG{^xT6UQ%zMXcz3LfJDGQ zh6Kjq$Fej4F_|3-V4B=t=}g|i!_}lgk%BN0432$nt^0~=CJU zP4n|}9NI@~XykIdsbV|aAz~NRy!8ygMO9zurcDuPp!pwHKql-D_8M=N?b#;+teEB99*l>}{x63SoPBPz2g&@W$dS>Suv5W@H%1lbUr zx}8wV%Kt6c5V-RHQijcDDpPs+r_56MHPcA)7(gC);4b6HR2~Il9BJ55fJFw?UP5v^ zHa`D2hL{rw#c)=T?MMep{ArDbHa0@66iF51HRu&&$3^V`OVigiweuV~Oa|7EvQ9Qa@LlVtu*~4Vy^$$0MAipb^pg5p&&5{OlsujdtuvkU2 zs=uIGct_e-(TFGrTtnrNf<%l3f5Y_EJoFWFs`AP=$KgOO3A5Mls0*iXo~%}ik@&Lw zG{qslMI@3Ck1OA$uv?xkIwfnK%VsqH~yM^52 zv+f_Q(SfRt^F*$n>7hRyC4keii|Y~&vck9*V@m+da9=}5aL?b5_+UIr63i@{!E8oE~_uU^- z%#t72HueP-t$YZT=x&|Y<@{L8>UT`;Dc<21{jgFrdGVfj@g2M z9d>5@r*=}=R*xy(JThIe@|WmpdBw`ls7jp>yMEtbxUXFxC5i1s&7m;@R6gAEOhFQlY*V3i_Hd;Xms%YGY)lyJI8n1mxqdYKu7Re1R!`7Hd8Q(B@*C6o>2 zB(#v=(f75l#$!b``W%H`mX8PuLyrwwHX7jF?xBnZRD>W|8AL{o^x3yWBgru>T|1K` zsFlg%EoF5yk>q}G!h;Z(rrB~P6O~W?v>yIf!JF>Li=XD+X3X%$@>)3FgV?ohfMo1ldDJZ}RifqcB;{I4v7p zKRJM)d7}Jt{%b#8v>jU6!!w~o34~4mf=Hky4i@#2E`?g=An}Rg9{jd`se*_5<-hS;bgbSX zWzZD07ab0cGY7bbPQAPFdsNJJA5w=*nqMczCw1iVMz#P-(FBrX^vzSY@LnwDtVQ6- z02qxDPdALS@^aWKZ2biqi#PBJTPvyxOkk#XYaH3t9PW{~s8Ygivh;>!1rJFRn0Uw( ze3|*=jHARy12G0y^aEgfso+kqIRV$~Npgf@j{v>sbQr3y*K{UvbvvEtiNLAMeca-j zdOuhYIs}MmBCTGO<4G^FOlX!L+*osiDw0q{np4IWl%1>0V6{>t&Y+c|ORc;KV=LdH zVMLJ5kE@$YTDG&MpRP>hyRx^V%B+I=qo?CHcTS?OFLW{2&7)owBCj_4**_wbgb=`k(octHy) zJX+Xz)HX$WY-|BhF0a=1R3!Fo+RB5|WNBpJ!zUU?gjKuw6z(jwS$i zXxQs)^9ZfQTBaBzqqEv#B{LW3n^k9%2B_p|<~FSx_R~2X@ts*Os$l&)BpbUcylz;@ zFE_&4AtRf-=Pvk0n|b7YHvW_mMJu9<{(Ygud0{onikX&>pT}p ziu>hrW@tix_DscwQ)>10j?mM!cPKA>L|pEGwaYtLyF}!hp0i34goxso3Eq-g{MeL_ zP@-m=y74B`rcS&t!?&ELiTP|As@CFbW5rw~;>1Nhdr@CJm&dF3B3`~Z!Fyl(xv@F`UF&|Dcn_d4a`ccu*Tyk`DEWA(<(a~NjlDktr z|M`*#j$%L6B!)g;?3d_opK0?O-H7EF4cmh*wy`L~!Q70QuBCo(XmT1%wF)!uFc@vY zaZZXD(XAo}gcDkW}Stt;y36z>-E_cXqM z5_h#%%pYoauT%655YZE}6WB}aC`|*E;mVJ+FAhk{!fjQ0%6`(=hbqOQL+#Z3?#5nT zL9u8g#iAqgRlJG#j56&QA$8(c@K(~9*y{1*4_4k$vBB~Qo|AV}noW7K{*3SE^}k#D z{nhD%dV4JG6LDYh;+jjV*WodmAML^noT6IXvF>aIcE0?A16LRjp!KbwEzRVNlYzOk z0!SEKzz$W&Q@RA zs?X_kOFuM|Lb-9l75o@4K!fMmVXy=ZE=edA#gf#eWqud&kRGR_n27{=&x zmCM97cRr3+Ow@n^SuBfemRut?;N(tC906o(6;b#DwMBRZwLh(Bey(Stq{-{>6$;kV z56`3@ie0Qc1E5(z`DTF4LXP?tfK~&WTE4c)?c%SpTV>g8r<-BJ^5U{EL#eX*nk>Ku zPIQjywKh-z5Zl8;ad{$d%b1e+5@?fb4^mGt`|07!>FS(9z5Ks1}gO^Onh?F z`aG-KuY{m=9o*kIsVhfHt#S?A6nS&M%HLhAetSfMcSilMfOaf6f_AlX9gq0kn)p|h zYiV-eE8c;Z`%qzZ2XzJ{=W~vHsb<;JtGEUaNocdP);3n7kNA8m{{rtJ}i|Sks6o?AX(sM%j#$VcNgrnphW6il%+BQ_mNpiL4dR2@M*u}Lr| z-q1*ll9d$lOLaMwzq$^B5)T-_duPFF0&&r7#uC&lE0f?G-=l6mOw0hkthJJCVYeOA zt!+|RINn-~ut@gEoxsy3$(_&&vZpcKd&w71CJ}Ht1>-R}yZ!b)?)GULUxU+DZl_Y& zDTtRjzK=uO*qr#@`7WGW!wYFG<{{xvr!^QbL4u#Z5xt_x^0ddiEomaZ9)x4Y9s<6I zWWz}-gfV~A{1!n&#-sshAdJ3raLlPj0ix*7x0N}nAMCVG)gkPP2;3;be`S=?dW|*% z(UU#q*p`QgKKBZCtt~jx-$LoOJ%Z6J5V%zi@*tcfz&uF_5vmw>_a;Lo$?EvW6clDZ=)KJ;|x8Q z>bk~NNkmk+$v~bttI*n;aF$;WHP$+KZn-{-&w)IhWI~@?lo5_R$;ON*+}4cEq{IVk z(U^E`$^c_;K4$o+zv+~b;Q7|*!)!+kn0tjKmewAU_HR#-m=~J4o3}V~yZ+{S4H7-E z!asRM6FgW4{U$+bxz+phhY^IsBxBi8p)TS4eU7GL!5sYh=z~N7W{f!NBWUyNzm2sS zc0nMDy{&Y<#L1azHI`3JM$d)%R;|*{>kwM@WO{Aztf(G1 zR-F3$`0d4k&(Dr`*9to`j`;jBK{;NUznXXH9TNrT@d3otJnF6}-|(5yd3 zi+OU0st{mBqIg&beDr-hu7CjO0~B*O9T*pjj79;&ld`9P93wNG819sDu9V6|F+6F3 zGTpw$ZF&>0e8^>ii|yZf+w6ubVV}`SvLvViPi9Yf4>J~F4>0a~iZ-2PaHCJF?}_?Ds$bF`IDCyFI^h_wXHH3u$O%)X9OtKkyW<@vSDo=+-oJAsG;kF7%F% zw_-~d5o4U-iK;$6z+|?QS;2&Nz(LPD!IC}N>XnU$04LD^T3XN?v8hw+4BvEY>tzM8 z?EX($Fz{+C-h3%JdNR-zw3oce_R!zkTH+@b#zu5UX;~H!77G7E{jv)R1A|Rvd@t-gUk%;E%BtfE)kOi*gVUY-ZratIfFqyO^ zg8Z@f8~Zy4Y*-q!MJY`G=zE~#AfQ=Uzkp_;^$CIbh^*F}9AvzrqNA!CPlSHJIbkJY zfyoN0TTnGDvT6?Quxc&}y+ghTCHogt{LK4W&#swfi6TnmvM7$zlXtos zGPd7IZ~U1X82$BQ%=fXzEOz8pVNsjSfWin(Of(;CV?h`!gwdFSYuqVAs9)SEg{gr* zgdUlNu}X9p|3!CRc|$J1eFhdn%=5ZL zW*>Ed}Oh1PuX3|-!nBa zN_s0w)~6)`p7pggY}$5k5Ni$Q`D<|H#KcBNxl><{aJ@(uiK9^)&%3v$Yc-PIm8g8n zI?|Db`hkY{Q4a|^{RCVy`L;6)mvpL}*<$b*xYGjlsNued&A(fs@e((` zLo#*ga9Vhg4mV#uVYw92JA#(x%abk(DGvb}M!=c3afOR0Z6eb1P?$7d}P+DkuLlQZb7Iyx1uH9jM;ec_%wx1{_;+LJh6z8FxR zaW5S?g-YNuWW9&VvRm^EEd^@yaF|_Eq5eZ`9t(uc(z6#&Ib*(sod5+^7JPqal zi}G3SQ><$>0oLv-bDeS+M^+Jp)1D%_m<@UgMC3wKenz$RJ}X=c5M*Q^>ByCk^$C%l z=h5^hf#d?Dja7*#D4Szx`d+?p^_p}Ay9c!Xf^3M?0};%`w#$ZDV!_Q*Qkx~#=QhvM z&Y{V#mRbZ@hD_dQhSoln2esJf-`y2m6+?jCZ zn(aR2&|Zb)V{>Y;0Nd+LMD`{|U0ao$GHL`;xHSySbej_E%vTXQ(yAqDEq7p8G;*d& z0qX9Oj9PYpBqyd5QsBJ+nZOLNCu}s+nJF>Yeh?o1J`gPSI*njh>d zzjLyR9br_fX?8SEHV@gt&5TUFt8K=7(@c+T*?wvG)5%Y3YtbxAVm?%yHqV4J4~&5L z6@}6QGd67^Zqn>cHxW10Y|~JmB2={cwy2PKcw3G_dD}D!g|di3nGl4bZE#5Jc6>3$ zehlPfQK}W6uoT-$zjA797Sk-D+zP@x{75$E^(O+}H8~ z1^Hm#I4(|!J@U^AIAi%~i@XYipl;D&K185wI1>)3wu*?Lr_PlV4baK#MQ zj)|+?6O$oE%~1U6eUt6?Hx954$&v-H6hy5Ei`$Ap!t0<&nqhgKwSTPjH~Oc=%X8kl zJQRPONL@+sGeZSYS6i3eQmmpvA;osWR^n4Rt*756NilSu?<^;97!2__H$hISQJx#F zYw%9&z@d0AUfiLU>`!x*LyK+q=-0)sNGJ13sr(abum+ zm9b#g;s+Vk^ktoN0cztUcE+&07-oSL?qT^lK56AwjS)h$r z6Q>T&5f&dqC**Gc%JAnYI0hOU0pTGcxfs>;%=!QVgKy>YeNI=Nfecqr8LFSr>@`yl zXB0w%Dc7eM+F;|{$GF3dyH(!e8F^tl9DINvngJgCIjlL?KxgDA&e7a6GW};1`%_gc zf?T1D3zZi$@_OSZZqwtfauKTl2&x9w9A@OI4q(pY(@)tKnvm3>caM}t7XXFXrk1KSR%A`w( zejFhmGzzUiqf?bY1d^~^)12^kN-I!;UO$g~W^hyL(0Al+({F0T=rsB}yq(CZNbk;6G@oB3Orn?r^gO_G!O4*OmeVq<$>SAukJ@2V%<&Jneou8!hyr7i_eK z8hxpwkXhmFOO;(44h6xl6Cb>>Dv98bQ{#=aLB^5DFO=ixugNdK6$Ox=eRdw6eRdiA zm8yfL1eg1=jN{9!5<3^O^a+XTse_>v3-+*-ol(pPvI)oJ znSXm_H_tG#)G^%6zH65M`=@K>Gv@L?sXt>*|6Ki<_>O;Gf8KYzyf}T9KsojgWl?WD z-UQJgFPNe+oD2^&S1Wb)u0e)!c5GQ`Ju3DCXP*}1)QV!ZwDWDmgZ8=WE0~B~@U%DX zU{A=;5Nuq!zx@UsxfgWC4=P*aVN@XKPXD&doeoGRIIOUKo1VdC3)$(U})4PSQ%0T)qX4Az`Xc-rPBWS$c{aZH?6j|b<6K}lwY@;<|pW? zW#uQh2snyvS+)?*6k||;Fr#5i${<6&SoE0gUN3 z?ErQV|7EmGqbKcZgEe$lTB~97fiW&5C|9LVsB{XM4QICmWLnokCVAvDWVGgbdyuKm zN^4eXcI@%%mS5~1N6l(L)soDiadmY$-z^*Cp_nPSjB?@5C3Nw-lq6vbhIGqc^E=?? zp~#tGoD}+;=dJ*GUeq;V&#z!=Qokj7SE}5l?zQ|ON+6)fLL!c9!V4|$AK-;0AObC~ zs}m)k6yz=50J5ZQRLPNQr)T-@D%iP$PQ!WR#!$? z<*etkAPA~}kg2U4z>BUlTSu!Ld-SoH5*k4EW3e>ERm-c@s|LmJSXbi1(xjB60gc>5xNQm zlghUYV)01?(MadeIY|@{n2ybWqB#6#lbl79V#C^m=+|+pzh|0;lT^cU-bf(c+f#ix5&_#y85S@EzYZ`tNx(t?9=rl0cCG zYxHNToo0~d&C%;Ttk5O#NM|%;s1{Ta@z!-lLqp3+gCpiG&tyg>*dyp96cP0bdN4^% zW+%3vv8!G1Xof${T8x0;NXZz=@3|XmJ-pkh=4=o~`!tiwBNXSkI>n<FWT@&4Bj>}i zs>7?9T}-r|flA}4i+Mh)^^C6UJLXQKR*pVEK$=x@n=!o<^CvvYq*x7FywsAC-j#ac znGhzJa7^(^wHouz$IBCa?zQs?EfKwLILowFGnW%qgqFvoQmCFu8`3SGq_m8HMwmpQ zQ9#^Zo=#x{NFnsr_?ZV2R!sJ(Hcw{4cw%!;->7;I;!QTea$HK&s~$1VV=i& zyG~9HinwO@{Vp7uA^jvCvWaGV-DILM5VM!7Ve0~LYj@=U-I@)Fm} zT+RJcJtS<*eMPOB^jn($@3q6bTRvlQ3(#eD^K>ZrhF)eiPq_?*oaU#jCR89X8Z;1t z&Wr4Zzn9jNznX3t_k@+#13U^5%Os<(EDJ)oOAkv7*|W_qkf!F2L|%5VbAeW*TaC~* zOlNeXV(w7KG+H}gAv8yhB52I#-#sr1P2q`Dyx0_99BAM2YZYi$Ul)2uR$ zhg#wyY1v+E%)RBjl%>7WCXxU_7N;TZjffYlg_cF`-^2JtY30YWKg!0jWWzX9qFDvqsvQy$ zEpGrSP*7^23`0Q`APi*oWv~u>2UPFSLaokL$}6z}N5ZgjFA30-j-Irn8vNAN2a2IQ z%6n0n$J#lB2WN4A!|LJ?<40Qk`{}wCYJuT|W3E0E z$}p8f_t!o3sy`8m1!c!%dw)kW?eAb@N5@1t&lZaUozFz1qs)$R1m#AU;NA0JN>iAS z7kIT!uEX$*Fna?ALu~}Qc9K~;#qk9qn^c(P*m&Z`UHX86D|zgP-+o`gh&wE8y6$~y zm6~;gACkrr7M+--v8s&TV)N+*#MWN^q&eLuX113<)iXkCuTUmXbqENDnt>r*R0c`; z?EPuD!q&dFWoeUrRSRpz8F|p6{y-ABrA7-V` zS)!@*TyFxo%N!I4U(l6j%tEeIYxemfyhO0g&_xQN$jYmqrEU;X3r zjnU7rwMtm-7@#&kJV9%Tu!3a7zjeS!!kR_1Z|yG@&d~$iaTYco(ULkdy!@H;IsbA)G&WL@X@z7gU?T^ z*5L;DXxG(E`?am=*E1Sf=XUy~Z*SJG^$aht(%jz)OW9DzZ>b+zi-u_F}Fzhc)i1U3K!fgRY-+q|@le_h$0H$8YCcsFIy9q_%_)UO0 zBf#92w9&UW15CwnZjU49Zfyk2lp1aYV>Z-LaU7_!;yCS_!-w_u1fQpG8$SB>X7H&f zyBf3+iES!jL3vXN@fVv)Ff})o;F8%`qUn)YEvtML z14KlkQ7yB}OlX~CN&Pav>Htrm!}V$kST0ZDwe(k&je}Wn8IxsIM*n%)6XlaX z%k1C5BR0k8yH)-keRQGbR$MHf$G5U5I~1!V+=`1jy^S)AP?gz_Efb1+e2X8(g5mNm z8|mTXo|W0`#SaBNM^?C5z0@yeWkq?Q`(prwEz~f=zR=QQ6{G6o+2GP4Ckhvx86htu z30wxUF8#7?qQkYr0G$iEY~n>LCslNi&UnCRnZt_2tH;R%(R{N!v--1*gAFe<%P=g@ z)}M(GTCYD7A#|?(jOBNp=X83PB8ZRu2rGhTwCO_*x1J3`8KWjUC*n``ALsme9U&Q4 z`HZ_2-dquMSwoO1g*!tQmhpm88N)q=j~Vto!FGvO7}>}sG(SQ%r(jVrKC009@~TQ6 z2=^(x7+BiEwP;Cx2_7rE*gN*Kvqr-T?`}uldBINhs&G{yesWw0&h}dbg7uggTxjaA zrdW7|KWwq)XEa{fc*f0{-;@0-KO?&sxLa*L+&M}_Key+MDzj=iG@iBT(yumJyFECssqM;Cor=04E8c(-0 z#RS?t@h7m1`xwNz=JE2(RUS_BXY_w)0Z26I>BqYir?E!p0*QO_{`I`ps!h!)>`1=; zCVqZgN*8e{>H1<%sd2mTa<35a`8DA=BS69|MRuQ9#nFMoD$>#sE+Gz9zs(?&0;hztI_V6`{8;BT}^mF~u>u$i6K3h{eIKeW!<5bE4~`6cy3IOCPTT5gTh zLsyiS88zIzoaWY|0Hn^%M*)cKiQ!2VvksyFMZo;-=P@fJ=;@1Uj| ztk7=v(mpP!Q~g+IS>@`K2h)XriK)B{t7hqfO0+y1j{&BO)36ZbxX!^1goi|MLj0qrdC)+AHRdK+|v#5y-66}fuuUVyv;EE$LXG(v=N_8ZM@qF9yNf}G$HI#YPqlqw; z>55&%u}G{E-FJH^LkoC5M=u*@FDZ!(u)7pVWH$70jp==Nbk?_8@q@gl^UeHISq|sm z9j*OQa*OjjO@$OeLv%<;uy*bI{%TWB%Qrj6LKsasDJ#HHodXP}(UmyewT5{G z>`VI&G;b~KJ9rs1Lx<)KFBhf|pT=HHTy28j-+?2~#9+u+n=Pzu9?r zL%fp_{dOlD@V}-_fV2lEvO(uV!*K}nSURhC?2xknvOaR9K(|Uk?#kOPO zUI$?fYjtfPM$b2bJm%EsV}OrCi!REz9!TY-YXe2Jr3MED@c=KvQr9WhHd?*Mf@v7x z0|ysn&0Ozl%TAk_8^|tVLcbsbd`C1Z1AJg>dyp)o2<#cy+8&f)A%&VSa0c&zq92lW z$$-rBCwJf1`Uv-2-ov?t=$keXx1&La1-@Nu+JQgY^-{ms9ws8)zFTS_S8cwLZZObp zYeh+5xG~_+w`?sj5^LECpy2l^_2@vR2tS@z-UZNqARE>EcObGkLIKk<#|5(KbHO6= zvgV+?+)zy*T66UK%>er&hWaIDWKh0RO|oJBkpSaL>pcPSBeqipN(bs74nC?)5g@;> z{Rp)L)PLf6p#IO)I~s+;40wWIC8*1%1e)sfpc?;%9Zkye8oUSK?r)}I=9${AF9Dqfz~%4dBF7!YORl- zc26g`{sx0H1PoGdQ@kD&u3otb6!PdaCgu!G;pj~PX*!=V^661j8ptCH-Da!Z>tWZp z129T$adWpBc%aBf5{kSEKhRK^UJ13Ezhp`PQ>YaKnff3T{$?W4mWdjo0wI3XRGHuf zArt&dQxGxl2}JazhA7Z&dD@8b$P`f?qwt78Ko5i{br2n?LFlNWON=2EJ-_Iv5@S~G ztT~dW@p_%475X;%x59MOBQFWQoe_zX$ci9Pi}M;W4Z%bV+xY;}^HWN0E9OBdbZa>h z;Ala&NBA5E+wcB7M7Y8m;Qy&sN{&DS>a-iZXeO$M$Q2^yKzasGv4UdoI}y?)4!>%m zBohjmeZP%FC|n-HX_Q4qzUow^wdTTX16-Nw%*}OsGdS62Md9N`xry^F{^5L!V>sX9 z5ze=`f_)2kfCkk*6%2p2d`5NgBYb4+OoKOgkKesJ_dz1L(^pbNU6nTCiszZKhgX$n1?5|V@>9k*>>hL4Ki0UwTD^-WPLv=X#U#9Bd^f;qP_y1p} z>Hu#l|4*eLX^(!ijVgh9f^LOZ2vzb-6LXB~8oBk*_L4ewuBLri9b2yzfZ{ffN3!0s zIwoUHi{9-k=&W+XU6$^;Odg;XR~egjeyAz(t)cYMgVBE{<*k@K)Obva=Ap*pGSO$X zjXONov*mNI$fjDQRJP{F`SDqoJjNZBmQVc=%X2@BTFq8p-4$#Am$cv`JTYwiHaZ<7dz9F=;pl9Y@-7Zhzl@#5+P1ckrdQU_LAmz&|K0+dvJwZaki zpOP!Jl7Q`{%6lr)oE0kgirYI#CyeI>lYnY6> zdykQMr6s?R39sa=L#jUQ_G1^_tj;>5>{OK5CpK%xS|*Qhwh3kNk$__IvV47j!mE0= z#QdFL82&ZUJg%+4cXuWF79OgYxvwTE3sJ^lKJDUS*TiyFq+KvBqQhQzC${3kr(jR_ zsk6yrI;wlJk{$Ua*EX# zM`D5QUO9bm;72M4XG>_7f2=jL-Qk1g$M8Ut>PiE4fY-vK+Y=KWNT22*Ow-}^q`btSMi`%Da9`90oT0O3s@mmphQWsEHFjn z=@pbqWYapW0l>N@X_3(j37&gp@#i-(D%HQa65r^2qvq&+bn|WjezmPBk0mKQxLd0S z+`HAZ(5x4%a)404NT`@!4}`2GsRE|2ccBNauSEubmdPW(|8+Mi0TidMdc(veQJ?dc zXaSou9D#=pMPr=4m)pnW#QJ-7TF`^1UC0;QuQw<0Zpj|X^j(l3+d^yKB+tGM>Etb1 zp5fxUl~#)ci_;}XQ1LpW1?S}W=}+{r{27ofYpjos8*GZwPPwQyc{*TxP+uy-2b>!d znZ}1FCJk>OqpepGWUnO1B7M4UhTkrA{rc6$qvJhlNGA!1IjELBT+>0;>heq71hh+e zhGHwNt70`wCu{TCdY8_Qn>Xq;8{AYg8{B+CHWL#2&{Ey&x$fukh^aEAOzf5~xNuX0 z&pXlfZ8S(ew16B{KObif+%g^&3YQZzd8^SVjsFes2;m#ue#6vgF!Vl7(6=UOm=Z-O zYnYs%x04P`D+gNPOdeh*HKPFGpru1Ho27-qk5a4jrq*;1?-mP^7P>@Y`H{Q76?(5f z*0K|yRGTfgXyt?gi=%ksoC_?BqP^IByRN)z_@miz7&-iR;JsUA;ctlBcvun|sLhu@ z_LMYD6@aV*-Ykw!wgdW!Ho9`t8Smn=qsO%|mtZ_nGxDSUbP8m4T1Jr{a(3}*FV&w3GJU!JTpTZ7;d!OexVM3W955Vv zT4`r;kg0a^jumC-;H7bsz7q~RL*Hkt?*89xau4&$0#dh?;IWNgw@GBrjQ%y*G2&mb z?NFmAn~%ewxEq)Mp+PhrZ~Ut^?;@9HM!(G6p~jwAdL{^AdD7?mvc>Tgl#lopfJhi` z(=r0dFDYH*h|T8X|2SdNZHRVzJ+`^r; zm8CllH4xi^19z$pFt`(n-R17rIqLy{fB~e@OYxF0M;&^gvfWxNngf@(a1L=HQ$TIO z7TYHl+RZ_Og@)bbPyg+oRgA%Jz;OmjNwK^9IhC|^&c+Ps|4?T*4qOMiHR!x6Xh#Lz z20r->6?Ek-uUF7c6|nK2cU@V7ONYfQDIu(B)XO+i+}WF}GL$YSvEHfm$2}qz9YR>_ zjynR2tjf4%9(J>8`Fx9`l9&T`xLG!4m6Q#U+;V0^X+3J4SNHI0YJB>Bd$>~5Cztly5Pj7+sZKBVr+o*!-CZ|_#>-ac>q7((y1}-8|e2o)hF<% z=tjd*!jx?X+mCPxWOIB_G`TMT8WpGEQ8B2nP3!%fv#LHwr^l352O#)gb>COichRZN zB~|x{A87CZmZ$@1W)?!zT@Y>%2cx5V4OM^x>rvec;v!zxRvyr>C0$E8Ig-kC=45n< zDP*hy9`-wj_-f1~0@+S*5=Hzv-np5e%jUQlL~Uw$Q)CSBCNhSgO~z59i5WsJnjqM2 z_!Mm!t7Evz)>$K&L?{eM#G?W2*7>s?F8Q1f5l{Y>_xuH#6Xf!non6oagr_o?wvRyD zshT=bo=7u&exQnwl)utnm=yGZl7MKWarS*~V+XdW5U|3u}Jl%tMG1)(AWos9(P$eI-%J96Wp?kTll#PpwlSwjj0R^J zK{0el7cpCuS+%p^NGh`Ef(GDhJZkrf4JX$MRzJkE@q#}vh>A6k!0v7~hCc|d7rl>t zOw%P46owy`z9GaW+=W&X@*c_G8nf;CNcbDrtS?t{CI;#JP6VLy3{;!WAlR=O5Cb#7 zQ+GPqz?utf`8b4`(Tn^VsSdVFlGyXq-~ut&Tj-#EOBrguLD^d|qYBk1|5WkmN z6x@|_A{;mNm}nW<44UcoPcz=QulK-Govx4|7O#byr4td~vF5JB7+}K#*8Wj+JZOjf zEKc<{#{(((fmt!{qJbopEky!o-vfnvvR3GwOH10}pe23I&se0DaT_W|*V?LJy-Jr7 zomp!t_bUjm1+RpIa8z?>RLao_!`fOtaq?%KcR@z%OKmpFbByfqa=&2W&17*WPLsCa zWQ&$x<0U3Rd^iAt6yf+RjN7lnluTz`NO9M(TgIcUa7u4^ncITna8_ste30OzDD(@9 zeqqXl67v`yY!{LVL-D;K$97FT-#Wa6vLk|_Vjj^lm7^N0=<5#f&>I~aGQ#=fPBQ8P zpBEPC01tuo!mr{cIE300J5(Xx^09&g+pPoK=;6!IB-uc*5(!g(cv=R)B0nz^| z{pN%7Tlp{z6HxgM6kpxg_KQ5HzPXtv)C}(Z0FFYyq|cSRsxc{X+%>iSoA2CM>z~x0 z8S%fbKLe3J=lPySrR2x9yqq* z4Tr#id@+Q4s$u`yA@l)_`e?^<453dODoR7>zsVtJFCSTPnMkQt33?nWl!x^W?kofe zKP4-{8!qa-9(NEkMq>;wH1o z0M@~s0OHP+=M>eyS%}{FS*JLy`y|B~IeL*B>P^ zm-`-U))oYW&;YiuJotU*0YmxRX_f+i6j4=fuT+9+>l3Qk@$#p5v98@bTYr9L`ru~& z4kGg+6DJs7+bpRuI6%!v5%U(ysbI6qKnlUk%c3({P7%nX%>Nj_0<9T}ZyS9!9zm%rCC>1*m5GJ?OCqWf%r`~Rp)870lqS+3$o zmLPQDqf^2hS3MKSfWKQrvb+Z2p!?5LoYd<=>m?x;30FmA{GjlPR51}M+twCJFR<%#?Y`10*P9+A#;LMpa& z8ZLP6O(5mVKLXLCII&)h9{nied~fHIWrOYhJmIrq@!^D0qW*dN@dBw?w8uU0T8;)z zCin%;|I*fyzCbPJ&I>)XadfqP<&us)go8GZ&yGG(j3C9(uIbtm4{?CFd(UzTg_oMh zJFb_TwdEk5ADiIwWY{aMkL#K?FR-qvAeFr2tOMTJG64e4N$iAv$fgSyR0`stnDbAU zXh@+m*|e{N^{Rf8?iRbvxaYk+ocY2y9~&Q_*g$7$u=%A6!D!=f)YWt zS`8q)8{vD*Y=5`djXiI>1v%A`zAn;FxTAKfiIIF1yTy35q0SS{IpLDx0}88W_o1@e zciVja-$U{A3JvF_Db3WZ!AY8)tuuh-kMm?`9gI$BkU*ukVO3(Z*Pf(4Q zUg}E1@dl#DwVm^)l1_e9jY&kn1rz!sC&e$%Bz`I8&Rgb}(rnGWLwjDcTsTXp+P4Jf zmW%9t*;>F;OeU6a9b@`yJ@#_L$%|k}5RWzZsCm*HJxbwW^=kYM?o4Lmy9B>te9)Nl z2`HJzW%(8l9&3IBBkSR%Dehvt$x^T;D=|V2prdr7myg3e$SrOeYL}0>7hcFQI}p_m zW?$|V$k(=hTZC>0Wjn%!+d;{=*451Tpt&k{vsBQFSJ=NT%da*pbxv|`^k1nn%dmN$ zu1KGpcDY})1Nq#pG8s`J{fO@2!t&G)A~p1v4d0q9YnI<0PB+SYuLFtPD#@n4W_P z-GWmzJpf3cSf)x~)C4Jv(Qr=l8_@QTN7ATcnl&9vLYjQPCa?-rvW3*O%Q{v#P@UCJ zu}09gLL^yv!Z?n!gqN(h0vk7?ENCp0LlgSu`b*+naM{EVqlnG|*Y!KQ^)=Qvj zBHU(5sEiYl{u+1UvKlnxTb+9u+yPGDN>TLchawRT2a9Ug4RDNazuPLGR##aokh>At zL81+D12!NY_GjcnS()1HoWJ7F+WAByAFbIdKlK?Z0eU*0Jgwa*@KCE3JfDiwTEG)8 z0K=811^VVSANFlC83xx{<~0z*qEPhU?^aY0huOHm-|_NcUOuAVR%?e@!VhS*Rv=QU z*q`fz5136>m7y!Q9%8LJIBM$=>Xjot=WO3<%>yA8U2t9k!#?(1G9&5flMo*b z2_370FfDG=7Y&gbGNS65Eqgww6+oc50o$ax2gZ1qJqtUHSX~C;V7kAnd3!xa?t${J zg*FE&JEG9Wh}KuLzg2!4dubO&UsEg+%tu~dV-uZ}N+D}Rw+BQTFDaZZ^z1qSXUbRL z`k}~+pIGCD;?cOnbs=danokC+b&cpM8EWXjgB<-%^{Y}gb*vJ0Hljza3&6>lQ_l(u zU-_)!mMoswMW5*8N$n|?%FYYW4Eu}qD$Vg1z(XRH-+((9AMPeiu8eMA>yajuj?Qsd zWcDt+PJ{L?RA1t#@|T{s7b-7Mnm76^wRKuIZmy~T#;@_nS#5Jat8LEAE22>Q`mC;1v&!#B zPxt`f8NGyuM3Z`iIh7*DElNe2U)UedH=19OMK!S_{V)l46w z1cZ{R2N+kx75&S0JBn$Bx=EQJ_SasqxZqA4084N4Jr^6--wy z)^mvH9aM?8X52>wU+8Q;Jv;$bKMBGdf=WJF2T(z<)e_h~OGhNj}pq z7L>N=tfCq73dw@(1c0Cw5+%RTGKu^ciZ>{mV@160Ec$}dR&bJ=4r`48K!8T51_v2O zT}rRxg}<~ILPcvWED>I2nik5ZD>5kLjXRoTEx)nemAM8STR*NE|7hJa9 zR=gBHo^|BFqq6Z)apsEUW2XW1DzdPHOUV3uS;EvH_hFU_vIM383XZ)Fp8`H}lO05Q z0u@sdsfn~^Nw}-_THUld}dwK^I>&a?(RBvNBeuCSh-!e+9`3OM@o|1TRweV6FMvIKWpya25<3HP|KR? zh|neuijCuzI9D8*DNPlvDG*kUznE9JZ6NG!Fe0YaMIv?i6jhWERvx%Fg|Lb$0HLym zydVvk0}mF;=e}1O@|td;#b@A0+?|zHe3mlqe^L(av*J^5XZ|wB){r6I8W#brP?Res zQ&*r(37(G8{ZfT2^E0}J)`jAfaXJdn6f)vR0jhAu=+GckE7WhP;0P3Pdf$kjS&anf zuz3NURs%WBW_REyyB>QLcH$ilo{S_C%3YVy3T@@QcKV%#lFUTlg@k(8O~5KMTLo=6 zJ}#Ksc5h5wP+TfBxlruD`ctdGw0wbyDCc1!c8g?=N4ZUe|&iSSH1z%VFY9P%%QlZQfW(v+4!!}cI7 zl+RWgge_5ntuj1K+n|0`U>deTVY)+C1#4pa;Et?BOD_n{$~+4P*{Roqj|3lE+_*+M6KGAb;&kV|e zKzQQ%q%w5q4eGV01$`RYrAw$|Tf`l><>pkB?dEnhmDy^WE4Hvjvo+qK>ys_?B(6`i z(2}^m-elQvi)^pXv>8x)L$DRxK^UD42mD7eAr!K7J2r)u?Si`lIZ|uo+ZBeUz7wUUeQb_6*P_c1i;wPhfFc*R!xJ5P^aP>KBm^C5X=J<) z+Ylm{@xnJ~)f#9G?)cRue<{+a5$y9oTJ!)cQjteehr_L05=I@8}{%NL8x zKO8?k2#xL2YXoBH9FyN}d+UyzCO&$vI;>Kjyeg1iDb_!bI4#EmcZSh zI4Ub<&cL8e>}0wa$vTJ0=5gMOv zjMO%rLOv{=w0V~gDkwNmTN_RjRM^$Us-@t!Z5pS&O=?ey(>AY(MFWv`EtH-hi#fz_ z65>K_^$4t4t%BZ#?B%V5(xY^y9dxi*x)$+1+ms8zTg+5svs6H)D3(jHU(|7)@sQ{h z=2NkKNTpjp}7jalb@ z8MW|XdH^&8IHe1%AVeF2kXS^#ASO)z8!@CQJzI5hOO>XC>SP{X6--s9VCjK--dGsO zC(mCMJ`Y09iHx}RjhIQH0aqniTr^v0EfOj&y0Nd34=Y#W^>QXi-BI$BP3jI@;^yj3 zN1Q(5?4?ZvNd@_(Jz%uH%N^Xq-EQ4+-R_c|4;DKf^nNpKr=KktwwH3al}9fsBN#Xa zsAXsFCsre6pF=QoU487JVRu8&x%{WT~gsjs;PB0+liC6do0Rs-Pf~+I;5il1K^CTOesy@8Ajy0TJ zllq(!gOk@&dXH5e4)WFf;Pwm6M=qYcm5O_&#k;BSm>dt@s*QE&PF$8eUKN)`TN0Or z$iwBk6Aw>z`C@b9NdZC1XQAe_1*d8DyAm#6c4W(+$tlcjwu`bMbgtN0bMtx!sp76K z@_q90%F9w-sy}ZzUjFvsjmWck-nu9pYdvvEH z*4{42`CfV=>8{vc>|50~!zJE)fZv+*#&+sa3J)vK5)A1P*bPi|b}A9fegr@mXs{y! zFtjJKdWQK3tkpBjO`93>vl3ZZziEVpIyHY{-DJvZ!Zjv4iLoX3>y-9HRX4STYRsWB zy_zIVK22WiOVVS|}#xCjRi7Q2EC>J+T7seSWCtO?c|U&jXG_y<@9UJvmJ8bl1-Nx%~{OYLoK z5^2gp%w3BnGsZ}}Lb|T~PnBI0-$IwT^QMcL?h17-w3;$CraDmSlj*n_ zCZ~Jq1SqNW$Z_ed=^GEt#aXOOeRHY6q*9Q`Gram-r>g9h`FFKn1 zDTqDrDY!iLtlMpbmiO&n1N*xL+UZ)4mbt4`$2gSqt^)mqIOMLo)(TlY6a|l*`5eOOoE8XTm`FO8;8jnmincMNitzP6r7jG^O@eE9_=yFl;{w{vPr&8I0$hG4`-CI6q)yb~JJuxCkGu=dfh~uiZ#opsyYbYCR~b z9!!XBsP|zIedyn$4>I;QwQpj&rhP05JCB-Dm}~@^hzi^xqko0&A(XbJ)gSlEB1|lp z6~b5;y(cbgGcSg5UYEef6RJ4@GX-uncFby%lnhKzy~Dno^FOIoWbQIC;PyfJX{U5L znmH??YE3udt1>OPNFCy$eM4Nr2Ir=T=RLtT)HoVf5Ew~2Rr~C}cw1}klO5@Dp zu0Va6!RN+T+tJ8@dBsghXS(5+#iV za$lFZXoC+GNcrLklb^rjrv95;*f}Hkj?hWDEGZ;vZn04{tPY52oo4ZKy02(!+E>(U zD5PXYFRZo4+qAEN?;DHVhGVJ#h?cK+kq$_VeMW)@1TGuzyT9?7GEh4WOi&19f2T|aQUpfBNC(O5uC4Z4q`??EBXFzW}*<}%FcaO#w8 zI-cOvX_=JIc$1QcO9T=mIK~-j$Z@;Q4nM{Q za4TYL3U4jr=DA*LA4fm-f*muk()cXnJPn+A;Ysucc_Ds4m~q-?366>Q;7dFxsfOy? zl0amA{{t;$DO6Qdb8q9b0t!+}V z4CDv7l%9;>a9%v+PzP>KhOwK71U}qOp;j>+6GN8ZemkOK zUM2}E5YfCHb22g98L}p9vYlW7Z3&+G~-e9(F4H{Bw7=*zg3QuIOQC!yQ ztmrfT6~jY~Q;uBX=2JM(;f9AAGm|Zln^(gw#@ToSy^&ZX_8dSc;_jFZ*&Qpgvz+7vgZt)*X7|+5M4}FByN%682yp(Blw&h)3ND+sX z8Q^qOTY{L8(Qds@Jf(0B3l;x?5!Mrdbqe6(?=EN%9??%v$1ERa!!DksFsx-M)3gBR z?b>o*B15_q~on3_y(Upz zfzg|Lt-xj|A`5ah{#`0KEO6^)zy7RDdgeH;gIl~-=AH{Ld4ObF=RUZsR?(hb_8-rl_hbwE!XnNN$8uxZiScG01P0c1o zqbHaK;(HULk$Mf1nbDBMs4wFwF&cT@L01o0`aAky$)SxPt;9+R{tMb9@1&#(Aww|BM45v_RnS2mJmhhSH(60+7QW_=eMW z=b1}!oC#||SU}Q^Sr0nYu%9bYM$u#N;-8~`fknhC-GX^gUyhe|ON$|@f>QXW;17=n z5ASbi{~i%EG+akyBMC*(O zkII%z)vBiXU#DtX*Q@47UUf<}RiP-pzF5$q#z#x1`(VG<=oc-HkXYP*CyaMXF;5SG z2sZ~?Z0A#44rcs(c!w}j%4Ya=8aPICXUCm zm}CCMLsQHMVIf{q@w*8-cvrJ4o177#afpY?QsmEc^;qgpM1%0g1A1d6MT4}Rn@=A^ z!{9!w$^jwbX&_-1CdN6P%IYAC!~%ux4ziG202UX|$cFaR^Rf_blnAnL^+zY{fx^2% z1Dez(dAvEF`19sNVf{+NrXY)0&d5O)Z82amq7c$tLP+Bz50(_hAJnSvNg*7q07+rRJP4!yoor_^U{6I zA8r;3dZZ1ia9p%MbfBeQZy?+YMmiuw zfB+yRC0#&BwdO=bj%*l)S5%ac@=r!$Qa?i(O3i8P*O%JK;d)V%ts#?9J%khL@SS!< zfmUM(AZf!SS`mEv<((mwBoYQ$_mtR~3%Sq>vO@vIp_6v1(0@rY=mJ&&Gk~3=^bV3- z(35%mR4()oX#;O7uxw~wS2iff06~q2h^YRggwBDZf$t!;WP?}gHV6jOWC#Yf?`oV< zSP%?@N-*Fo8Njl>Ec~EZ{`xPRZhKU=*sc10z>^$_|WnHFf~K2g(T8*JlTU zH0(fX+%@bVtU}_~&G~BVKnf;M3%8C0Xs`p#q*P3y;i~k`*=*j9#tvrea*R{MKto9yaYTqE zP=7R<$}DU6{X{n-%Qw-|B6n6h@K&aeNN^4^kARvJoST+K(#Y>b+^`wbmUxlPd#N6| z9_mIFWByIwlB0A|a@udRKh>hx4=f%L2CZMHv0v%3;Fv_V30l-m^vLhZJ ze4r!3ieXqm>g43X){t^Hhw8Vom_u5_aFGm^AgiweywfnHj$+%BdxY(_j%S&K8Mtgjh-Y+O`t!t24198(!=)d34( z21q!8H6fg4nQ%#+gYBa*KQ2d(HIy6(9`X&MH#&q)tUYn_BpJf~&p^QsBJYEGyS4tg z{U)2}QX~nJc5esjBLpqL9r;q|6tm^VbUF+rDye)M=oH6vqEkG0paZ0Z5|!yxPZ-z3 zH%X_P4ea4{=@d9(AZqmi=`L}eZEcgQNLR$is*)~pBq0qKDwWC`(F;OQP3Bc91l66aRs_oD!MOAhViYN(yu{v00QT~b%tFj+5m{emVW%P` zaqj$!E0i!S2%=n1Nng|-7NnfCm-^<#f!&Dk%r(SUEN z9_GrW@YubWtB!&j^>-E?pNy+PLL(bjgNQR0KH0b$U~FY$O87MZzw&csT-Bw%c7s$R z$*M9_f~s6zMR66qa5`wZlZW2iAKy|tT!4TaiT$zBi*^C7&`HQ0lPo#?3Q1fG8U0zF z43i6xT85PiaCywmaEYcsdDF^c&ZcKTy11kyw+L_=hzWLTk~Y zD7q*WnOd*Mnq)dmRS4E8;H7Xe8FsWKtO2r;^_G$tb}Wf(GVH{YVr5LyR1Au-NO7z& zB6VYu84=VWz)Bf`5zSVNsOaKte4HV@^{$>~`OH5!sdo$Qkw0+W6g=m%<9mL-~)|f>fpbjpw zG^QQk0sX2=emz+oMAkXK9_mucuh$4&#{5CdGuV-s0x6?VYGzV?J%|3dX^JAho;^qI z0!5KuPf_jk0-xcY$>2UP7Q0)%U~e-S2xH9)?65YMNNI`or`Vzfi|_De$U|9<=nElf zW@4_`oupdT0`a(gTsj(g`VdK#VZxUlfhqwqSW{z}i%QIwAsA{S`)G>rpi^V(0lH6@ znGZE#qxe)i`cN|s-G1t#hphQjSK%LNmfcPDF?UW~yDa3HU19*x892fPikn+(HfB$s zXzl)FFFObb3MLYYi6+L1NkP^!>ZYcf0x%*M&|b~Kr^8Hm&a=n|j3G-$R{$4pQy8<% z?}znl1vDBsqUTEW1c}|!QMwv-l;Vc3(1~=^L43rhC@`M7Aj#NoEOho!6LcP{?{KOf zjAxa@0J>9$hG^iLf7eN;Lj|DYq>YXv-v{xs-A=pJgh6viF98<ig{AX z53c9o;0iRGHlTXeWXLek8%cOEv3+BsVsLdt-o517cTW z5%nXHRE$ojhCb#27fe~gDrUjG10Jmm4|~4Ju9(y`Jf|4 z($I1*e=9Tt{WA`((*gtcUEeVp*nmedyAS+)~q+J4BI&m6A1H(|F)vh3}as_e0 z6%^8&H=k9@T-TE)5+qC|&!rOh`J}*><2|1%#mnT>);CM3KZ0kDxv^C6#30b5)Kmj= z8ehBQXZTJ|1v3jtuZ_$ksn!*!Aey08gMa;Ti!>5!IJ)#EGfm_MrmcKrZYT|w=1E+tn8 zkjP$KNpz%d{+3XUU2BleS;ZiXIzd<@E#27_kDZn4KvV)67LuHD)k9JsP_xETl56=% z3AFL*`yCNoKb^c~M8cUEs?pI~J=aTgk53&Hg|UD~Es-mtkK~k2T)X0u#79DGeU!)v zF1aA_k;>#XAm34x;YU|lPtD#u8dY-|Cbr_>*%s1`f%g4_)Ygs~=68;y%=$v3edu93x-}iV0XMpR2|mv#>7>7AEIc3=Yr1#em5mN}KT1 zg;NTF3Q|ljMxxad3T_qwq0TH~j;E&>zCYR5_nw0Gt1oa1MH63uLHuU1xJv}xYk&qt z+BIPq(1NtH`V_&-kBD-^sia$)AB;%?1upX#p!!$R0HaP^1_x#RUV712{8oUDsvKSI zGI)y0Mv`Ot%5cix7}0p_GVX&hjjuagK1sg=h*Vcj3I^pX0PgCgCW(rjMK-nPp{T2q z;kk?8XzIQ+1r1be>9lEUi-+Cmf{S?ADKT4fRdd>b^`9;*=Rc3$vMM|YCziHRKsenr z2DX@`hb~x6*d;~G5Jg5kMosu#9yP^j)V}hledSU6Dy$#JIW$nKNMO*m2s+Rj7H~8E zhXj^6vnJ{SqCzWqGY8hYpkaHSL~1nRm!$#M(f_5{bsAYGAy;T7d2tR^ur&oEFR! zRrW^N=pAi3sNf+>*z`=|KYtjs?ZxzIgY9_0zf1lX&%9u67>Dif0RPxyg>v+(_kq(qcenm-BKp2gvJ z>#>lB*<$3N&hRmcG=sjqC8p7no1-Y$_{jO5gjW#$jkicVP6#$u+3V#lSC_=T=Z3%H zwx}4S4U$Ejn_)M-x9b3iUG~9>yz?Hy>RcP`c4CU5g@I1O9@gN^LVD@3HR?5$1GDz&7Gd1y5*wSG;hyO-4M5P8RzR<0 zW0IuKid&Fw4Azq%ul#n+dpP4~j%r(U0WA&OZm{RzHf-Zw^6Zn>$vSZ6MdBMu;6n%}e1lNn zZZL%!D2>Hj$S(oMc&Iyq#E4TYQ<)|Y@dKxLWBi;_2r?5!x+pG8S|rk$RTy?4mvD2J z)Ovo;b_0Fy?V4F2dW;o(N4l{=9i1L`NXcqaeK+U?Y4HY(%p>0CGP>Ae5)$4BcaAdC zeQ^nzPFw=N^Oo7fce>4Avf|R>6TjFMqwt`kU#xqAuMKSt$nb)EqG@$UqfGjvYeCp2 zykxfFC82q($xDJ{w6r{6oyQtXYsiVhY5+3I%Q@|1iQE`8QzFIhqk_; zf;nfrN~{K-_Jq}Z6BWUh#A=KHa2z23q5?aDR-u5IO~QdBE(Egy2TYy-5t)LOo)6<8 zzxM-Nh!2t8Zzl^`i`VSq6O!}f&`ahU_@fIN(U(+yesoSUh`;KS#ukY{yqd&Y`w)GN zl{HMu|&yK6>R00Ej z0gu}+xw;=RaI?=t^nh_62p+mjP%~5kEpa|VfXo@+0ddQ`E?Q~b)=z2rJ~XjWt^U}T4;MS*3;bCyg4 zzz<5%z}lk}Vc8=oV2`AL>MA^OWOb|E^f(DwNh}W|grN*56O=;) z7h_5?*D}E1ysnVBjzF%0_`X8o)-{c|bx0ud2KOXwX^$J@@E*4XcyX4bc6h|ZCumJl zha>qyhFWZ7D2lQSh0~ax zLGzxn#q62=)oW+kSLLRuc3b+!Md3OAJUO0s1baSE=a`SMPw)_c}SN zB$hgddJwXTpdwQzSFCz8EQNZ=Hp3t6@Mq4gbZQQ#8&2vi|XF94#Kr*W%mk!_BdrBe0hEuiO(Q-=gTMVn2HqQf#xaw0tp1%`KtE|3F;yD~ z34qY1v>yI2XQ`_@xI7o?uN7})Yu4~Ft6=muZ5wf*&Rodpq975`69(+CdofS~d+cc< zZqD_!w)i0RHR;}7LaYTPjGl|sw6}(+epH?8NKsUV@Gl|pysp6DNfuK|Qp^bM0QG8~ zR>0S0M+#bGenK%j(_1}s-ANBMl#SYx@-IO^Yx4qoex3C~>lfo`bYAOrKekdCv#4}O z!L0IoDp*P=jbzGb*Ve(8D2yfo=&t|#A!bkMC1fEcRK1iUnGLw&0;Vmt{Xu!6fK{AL zw^0D4Ns=>jY@OrMj>QG&Vi_Pb!AeAoW=spqdLLjFfJ>Q*lDSvnIb}MGp)pN+rS^2X z$trRyoA=+mHCE>^XV{Id3(%zz0kbqp;G4)Y<4r_c*rbD{`t@fK1do|Ip!X;B?JB#iNIovZk7CCJS&KJ<~qX$wN`)N#z7! z*rdFqY%$3IzDpX}1i&9@>TERr>SPa>JB zSR`BBOcKfbd|D)vp6+c7BZ*{GkU-U4Umo*be2%rLx=19-%W<1vDY;CYY2-3>pe2{# z6qj74Qi)7!!qrfn!?E8RevOQYfX8AN*q7ukeJz$!-MLusqGL%qQZgunrz{w$-lE|hd)VdgG6w%M#Q)R`sg7Y(Z;7HVqC4a z$7jKEGCpno+^{`GBW(0dgxuP%WNF-Dw{_?MWG~)a7IFJu!J_T4~kp2oh*qSx1B7BCBW_gXc(XpEf=v* zmm>D5qKJKJM#O&eWL=SXBI}B3UXQGMB?y`ApQM z9c7|Uk~Hht4Plg02(6kBpGy<<*%nb(yIUpd@y_2WQJ4Lp*_#GgX0yo@QCAmDWWW(A z*-ItXU8$H8qTYKu7Tu-e;olW^GEXpp=jF|URP;PBq_MK}wrXXu<#PBV*}?+Dk@z54 z;Lb0woUxVa(2lI`qUnlmw$xp2)}Wiy>TW|fv${*(2lEBfP1$l8v}mkp*`?cS)LlUt z_9cVIhz)V@NVIvjA#0x@%!{-BrmO}`K;kggu_vlMydg8MMlB}^^@Mr3{)D(gZuulA z5Zh#JHJEQRFV&CnOqiFrlUCDe=4IxjY!z+hgiX24oM1eZBp?T;4TjocPB5JO1R5~S zoK`Vkg~4suo;=+feN)_igF1ghjOU?GgQ zFp=#c{?PTV#I$Eu_5O`d0=kz6yZPJa*-!b1tW_G|g>s83;FE3zstWus#Mu^v7h08G z)%4R_ZTgg3iKd^=VYFzT?-ShIhqCl%C+9>0pb z!)JhYM?S9CLD>|nFw*8RrB1jw^nEIULWeJ!1UMOj?1w4z-O3#5UlaO1lSALJZb0Hi z^Pm2cCiJ~K9r`{u34K@eQPQQQ>PqUc7VXV3VMiR#<;eGa8Z-8JNuautbvcp-*qF;+ zcXk-z0qBt_K{3opOzJ51;TB4;kKfJ@Rxow~F&OPP)#uUkl`J9Td~r`cL9E86qt9O> z$!R$yB2fBW^)AY^wI3KN+rm`zdD^~H@zFyv5sXG$dE}$9+LHH*AA7G53J?O>Ri}Bj z;OFgpmIm2!4cwBF!1E>?eHIuo4^8Z(Ulz|yMpZYVdCK=qpu(*8ZC9z~b||{rU@S*9 zRsKLH?XZf19Et9>$t9~wvRC^`j%LQ-&j_m^OK`Dl=Vkoa!V3V>jud2_h;;=R33_2< zO@gr8TOl3`EOH%d#AhF5fjfYP88!XpDHR7)J$$#`8WlUOI5^Cot>fdRVS6R(}?xLHmxs|W%r$> zc4R5vbjcH&)=8PoPNU&(cV#cC%7dh&E8YqmxZ1%^$^)s`LU;#K2n4pA^QJjYHNszfU*ez&>J*%0(aMQcQ* z`$~O)!I!MWG26F>FXdakw~d$;!WATPms&w7lfJA-jL!+T$&*DymbdJ=lzEMmNm=Y{ zUPLlg<>p0_bfgz!UmtsqF=$|ypmFsC!U0^rXO>hr&TD+Wfh(gnTzf6JwuV3MX1I3O zfh#lu!NHWU!w=+HI~J!Q+%trso&jF^mB1?(O9M~98(RYWQoMXCP|duL`3J-Fj8$4cu^s#t9}!k!#)y zIDDfjz7cfd=S{E;r;RHVr`da3EyR5a^Wej$RyxDKD8x*?S5Hk3xWtNV%b>m^zMyh# z=bJSDU#o*D#+!6Ww-9uvy3srzooXJCDEGehdI}%a_xYyf9iD^Up(L zJVSoRow@iu8aOZ#q@k&*muhs`)e0JQL-p{m#8tga6LHrjLki%CO~Fl!Hk}3{wjl^S z#A7-Oz80YVc%Gj)jZ(PJ=1@Q6&=f|@wETvrWqI7IcfS^pi>S+ql2rXeH%>;afNsT>+0B0V0NSSB|`SrjA!N0l{P@ zEBb);hccs79|JX3re5&MQxUn(R78ViVr=6j7jYkX1GXLZelaM6Uzd%f@>>=jT-gE! z^|a0=B!PNmf-qk;OA`J558lF@!=3mGt`Ap=XzX?pjFzLm$W);%5nk_@*+lP! z<=ECni>lE*8gwYrqPLD0>h4>WHoHSh#1q`gfhe7Fft!9^ihpf`2=r(oTC4AXxYUE; z?-vwlD|MkH-|dzB-oksR#eq!$+@r}(J4(>rc*xAG0~|Bm76A1x9ugREZq=%(Q4nZGJp+~{GVg-d2-gi}oE5xwSAhkQ-}fnAhF>NN&c_+j zg-&*wUQuGfw-fkhtOyKvI`{_2#T4!@-!2SqO(lrcHIr*3hqw)%#}Ht%{+coKy$m>E3nsE%5TIdydJnIsWYI>7YtwwcF-`M%do|5B zUr}UA(EJ?@%}-RFY4uyC`L1l5PrdbNzDGctqWO#<(fnvIMu5C!u2o9_HMKALYx*a_FJA8SN6O(dqoU6xh?c3M3dUxs{c(P3&{zTxHb|58MykVq@H;2oT_}o31#em8(M>}mn97nDu&f#JhtSOGqu|47MvnD-Q z1bJN{^Cv0&k`lS1CpICGI|I%%6_~%63WVI=PyyuSLOR|=kieGIM^m?bBnI;3O-f$$EyeC^cwBQIA z5-lymASu>sSejIdqS}V%&e5e30vs>V%-&HEb@lEm%Z~8HG&m7dI9yL*x$0RCxI83g z_jd=JS3VcO`MeG3S+yZO(dJTUnz9wig0iseU-_<;PQ4&2PpK$n{<3w?@+9hx^utH7)7+-Oe!rrg-bKT<5$NVz zkxdz;bKm%VMx({iywARAQrc>ZZ!mgAo)yCbdjC`@2@wlK{yc$d@b9Er?PuSkJ|D&< z`i_iVYR7G>AJK|>Av4a5`h17nDGvXkHk-Pe{?La!k0rp;lEL;`!SY|-Zu*8fk38)zUmaZZR+B{d01dXs*Of50JghDNj9KSk?oWGzM zgiMp};s*+$sIKR^uIA)ocXS1U$za-85x0%8g3ZdvFinJvtUAuL6=AHJgs`w#-0dM7 zg)QP7Ml&S24D&UoTpOJj_2M%R^FI>K%?^P%M!7(%Vu*85*u>B`=$CONVQ*?_BkaYl zR66-gskC9Bm+ai&r!3&$OZN<>$&l<(dayvoLri$uZ*taeMA5P=e5GtU!cjMINS=#m zP8Oh>z;ui&Lu!FxtnM#(b-zWLkPLoKT?mTartc~Efr_lVgrR*KUGT_C6^acpUP%Fmgv2sx5lt#OiQp6Oqhl45k`SA&H53s zZc=svDx%H()?$F5#jO{ES|#ii^d^k&sFqe&{w`&ROA`*fQFc@mihNADZKgiqh(Ti5 zb1h7!PH?Lto7S|A^WkU+1Dg~)%z;UTV=|JXg_*ddNzRH2?`EY>@enkejEaT>ACgfK zI3%SnJ`!-S_JkuzTX3YMJa78BT(No+rk`_dp*k>TmFZ_w4%pmG7M`Cs{h*koRkL5^4fAP2~;Ps9ph!ZJh@9?>$3i{MWPYbKOpG|{>O5JiM-Td^cN7& zk?e+lDPau;*%|(!&iCMhMO=yJA*c;WX~fT-;oi1vt)jCQy?gSpjyt@H2tK|hamb!r z{74X-O2Y58O(~Hc2o9WG(g+Sd_+zY3KTOSCO-AMK*I624=F0J zGkP)4@31qL#5vN%MpsipBoLX88GAJzkLV3EFe;99M%MvQMO(#*KJ1YrY8p6l8ja2X z8FhG!AiW)?yqz=48bO*vB$*+3akwhbQpVwc{i}|0uZF^P#vv#&%(YlP62NxJ+JoV; zUe%ev>3Immem=k*cCfR3>;s?3ZgWFtX*_s!q3kvxi0d>|9~C#cj_y)-QG4-_lwaME zsc{BWP)-k{m=bJq#W$T&oo+*~Bt8ug{9|}ShNs+G>Qx(8()By5Vd^QrbGariaca*p zc1wjrx+d^nhZ%FACyPis&Ya!t^#?PvbBs)-)Iar(x2j4r0=>#SEsTI%P}4O#4%KDT zKs9)q1WWI&IGU*iJ580*LZKWH{(w}HXG{LoJ)Wx=j_$8Uft3y{5YQ}(XyB-*gPmR6 z0toPiGv}Fa9J|yA9Uikj?TqG1{3X)m`_|==?f#ls@7ElMSIv=j2Yaj%AM--_R6$g|UZDaVjs*3Gn+V$?nwOg!I{RN;i25#jZ%@IM<1;b9 zmn>%y19TaqhGhMi3u-YJ0sFuRua>le=s*M|np~^bo#gA~bH$!l130V?>eV&5S4t-+ znv~q64t_F*YvEZpH-_X@ZKzgW?djtet#+?* zR$PnpRNdns$jq(v|M3srhT3l*9rzP9A{TbM2CALI27&<*V8Qx&e!cx2SZ~4=dBC1u zZ_nlRHdwvhWSX4{`OW+-xY5PoeZkujV++bxhyjIh_9oZ@bPcW{OGbf2HT;+#%kUtk z*F8F6mo=mqP8cE%5iUfu-F4?mr=F7m%#mEBEr|*$Xg$QHRVbcoEroG!glsvqP;8|e z=2%$F?VQGJiNYufcOw1?`7w?GDQaS)5;MS3dSm$}Niq@5&>g;5<9j1)T1D%ASRq>V zNH#AgJ}c@g)Wz#E^`_YyI-F~&csGj?!TI)x<2L3mdbL-a&*m?EEA^?deu=j_6-iax zPz=Q-hz}F@kR7ZpMaTPM8~Qqohp~`&?^_H{)F%)|4Mr`P^ zgc&0jXwe^@XXMXWM&3_^CEQgA&a)7f(@os4Md7UGhyn;Flj6ZGz0j zP>_5JM86F;1`AXRXFZTqCGnic-?n5)dbXuZ;&F-FP!c3sD)I`7Si1G>Axf|@J@!X1 z*Ed}U23YbB1d(791B!s?RDnSO66sA04Z-y=F<^MdLe>eEbAYW6-JrPxf~dEwwd`at zC^budIB6Z;vEa@^s>nLvM-uiO{Nzn;)>hSI9ON=9p&C_XPc)8DonoM(;~Z94)ZZ*p zIyP|?>v_4UTmRL?K5ncg1a&*W^h93|b`FWUv5#Jzg64_3&03syxnzD*x9Ghl>2!;_ zVW+p6;!x!7L`~^RP3cb56xrSzHHDj`rgR%MMOJ;WXl?WiHHEVkLQP5jUB$P{!Fvfc z#h|n1oD_XSwZrFHYKpoR{06lJh?2j4qNZpZG1pR4x;1J_8bzon(e)6U)Mao8hysOu zR^3@bX-EPd+L?g5Wi_QgrKV(rZmTKn8hpiSO4oKWmVKxx&r`SOshfzHDExDrx{*H~ z3iLd6d!D+55#|!q%?GJsglVYT9Mo=N^n9jdx4j{|iOtKYfEG0TDNAlO1E_|;v%f;BVg~M8Gah``^ zT(l^4^j0_+8F|sHj!Duw*r_?Q4@v8$(JU=RcdF|`&b0K27i7GM45&&cazr<+?k^EJ z8|e>eG;u#Gko0j9=HU%S7(y3`@}Q9;;>Ynt^?c2KPWSF$=O|GNWN=1?IXc>RtQcJ< zX)!_NwHYcCy;@-NR|KpC6x40HcHN1P?xyUr3R4HlbF?V=Tj}!6|9xni^Bc~I##pxV znP)pBb16++$XpU<>prwdbDR~}Ru28(qEwIR;C zF9$o{GV(Z9uhnET2zgRVD9f0V-kTNlk{IXySV8+3AX>%Tw2~3GjgqkrzC#z9RxetY zLX&J##uDVjh#s%=K$z_7Vc9gK$#4KvnS$Tgzk{JO}Z z`MhZUTocX9)uQ<&nU@ybWtbh-U|l~8p~i|8By&C1r79x~k7itWuQKDx4QFUDZ?T<*ZZ4 z`i2}8i>-{qo8YKvoG`M)@-OD7X0>a=K;(VW%iySDIunkHpLEvV)oG^bAWdbQOEzp^ zK4G*b=u^Bj8K5`G1#LTE0_I}^;58dDVQcEEm@vFl>=-6I5EG`yEw(w$Wg7eV(OW}= z*&3HwAHHj2?u5&Psil#qrkQ!_)g^Es^Sz6h`KlhZnE9&NhMCXWaiA(ZBU&LdbI)RC zfqBhumIeAV4GWx+^`p%Ko7*NvV|}T?O|6z17$D4UwqbU$BO9N<6tgoTJ<6xRLuKz?)+Mt}21KG)E+K#+L#QEH}NkeOraPaYz zgaf#z1V2w)?8jTzZVaWm?jA+^XKQntm96_0%ayla&2krMA>T~6%_M8XsU~ZK;!~25 z-p4pi8|g77w~X|&p`5jh^o1hRFEVwDR_yQIp0qIJT@9SLt?Wyf@CN$|m#wT$IG2NQ zU>Me_WM-Bt(OQ?x=EUC%7?WTag2PUZN&gV$X<2(T?8%q&#Su8b{IS#*CegvITY8V zbIi1(NKu*k6_Kns74(qQg$235bo3D(_gE5KzvSe&&(Eu~7iEDP*1Bj6jxp|T=zPno zi)BiWSjp~ig;z~$YE*C?CI&V=Y5#=|!5)5|SW~{}^$tZ`qKRTzE0{cs5(<@qx$^2< zl80;%W!Pg@&Am=Eg`4Pgc-#iZ@j|7L zG{~YoISX=?5|H|$dm>I(JN|mwIY?-(j**OD;xpWrK8w=#)FAf6Pfsg$ndABDr{BL~ z_z^qI-6PE%TgB@8)7_QT3!5e%gb`gO;O^E2q(f?VS2aqHudQAjAO1YG_NW%&&s_HE zCpbLQW8zY*%+J)q(Zk)d^hJqeAJFgBHhI|Jv9sZn6NLL=Ii^ne=!EmZx15&%6w z=98ZT-bBd1S0|OG0j)H7%Wh6BZZ-R`OFq&np)txi zoj2DJ7~fZ>?$EvSse9+z-8|R5uLs^V3~CH{C@BH~bE7!rTXy8hh0+XFd&k zr)&T$cB6#D_*+OZnc^$!Km9qT;(F?7Dh89On8fjG8Wg{;p%;}R_6-E#raTp%)Yb3@ zSN+j8{Mi&L_-p(g+$P}fBTwTPp*^x2UY*CN0W;Jp-}`iLjoI^s$XnnMAz;4)0r7z> zg!6M=7DS!5IwI;$ywR!u=%*OIB7y&rl-gAIJ1XQv+u=WkadW5^>&qwefI%8PXi{hh zlci8QkY10=U9HFYSQ0hR(>M9H`dAk}V2K`zz&SfA-DI_?W3h-++liuhg=wFJfz8f{ zOkOAwZ4o&b{(&It#TmefBSBeG+Dq8rLaWy-Ot0LgRTlTk3PbaDDrjJ&v0|*Cs~gl?{yaHhgq4Vgg5Q1 zA63QA^2g6ef(zth68i#@witjxWElsDI(vbWQgxh#9xzo*6y+xgOM*w$g_1`25eF41 zJ2K*MMNq}?VNd`hAmgx+z^zK&Z?#%ZT9rB7t-eZ(Z@NLT;NI|$NOHsj+8e@#_}RlJ z^s7@@A|gTGf{JeTQ-5t{+Wr>Cj)A5RsXU!v;NT90+|e{_#+bX_L%nBFLECE)a8?pr zIfdal30I)0B??j)l@mChBM{X25DSlgdvSHb%$ZoeCrQOP6XZqsqE+k@FLr~!z?u_qL?D7W_6-i zbS^$zbx+oxz8i8g>l4LX2hm)FLU3SfS=0Ah>*Bvi&G= zjFNm&m(5{fNY$Pjo#29VVP z<3$-5px51Q9P_(&1IB>q28>)f=C>;hkk-%@21MsD^6=q`V}5`1elVbG3~-(Jy2s3p z!KUvC160Kru)3Lq0e+q^0B|qm&}Xfs{C~A0L&_WCin2Syo;Z|FpKvjVHKk-7`UdI zV9Zn-){$_!Q9BaZH>v}(*r<+B%EF~49_eGV^B&Sid*YEk=4{-O(%{4Y9P2L`J`G)_ zuJs=3k<<8UhcZ$qrbK8}eIGM5{O=>~WtObb&nV{qh|pl>*~I+32D}0$X7jubL|5jA zc^!a+8=>LjdIP&kdmVtiV#!_yU&+r|2YH=<0nKxvF>iA?+y`TotbxRk)s2uwvy;Z~ z)u}PC#y9ouM&mq(jb@H1sa6)W2`e&9n!J8W58>FaJ@?0f6fazIavhNqES$y_L&1x3=B`u&` z8F``W8zSa^x{o(FkD^UlQ0k`{9Qcve{m}m>MMFYd`@h!bx5N$g?z04# z+%0p%|64s18cbxK%>ZVqjStgCKqqn3t+v3+M{k{g7Sq&5g2v`${1(%c0dJZliy%K2 z<#$mVtnpAz4B=5zokSe{q(TZH7r<+*|xm#Y5->aTsYHzK`<4c@(ztNJgLC0geOD)W7 zWo&x)SsGjJmdEx%^-Kr$K}oT2$$+sL_)N7C_N0JMBISzg-4H$#t?Og%#a7^>cQ=Ah zGjA9xaxQ@ySCF^ip;S>~zbx1a{HWa0<;;yH+`c=E5m7H*pGy z*YHAe37AgVC4l)5GP|qg6jHm@B^p@e6jB3Kyu%@E;S`!f+{jL$^xCelZBHIT!(BBNm!`#-k-owWPoGD>xa zpYci5D)^Y)Eh+$|RPa$1%&36Hpn@Mz!6F5~rrHTaa1wBlY_z)+pRlvB(bffftsHZ( zlc8vS(j;%w6$4DRbQ+^1sn^>g6lR;662avgvUJm-4eQXyjp_umr7Obcuh&BD(4&5} zt!<%Jzf+g#&bkk6yjHB%HbX|>jX<^fPT{w8qooiB$l;tolf!KV8im(QzOz(O*)9jJ zCacCxDjKdn?N*t<@Of;dX{}bbahKZY(?%$bTWEtJXug+XzBN>98G9TN0S0lAV7NzP zo5UDQFi7FUOq-p6_yW}_dkB9<2swv~i^$*M4<#>QcVgMMmr%hF;Uy$mVwIPWnDh1g zTy|)?^p%NqAcu8bfFG-E%ps!Y6ut!5f8AD)^iV`lboUoeThguIrka%xL&#Jfl)y*g7Q~AryRZ_`CM6QIZgUA!x#akYjd& z_$X2Ni6KLh9?nZwDx4k(sEqGUY=XJx!Omgwar*$w?_cey-K5@c|>=c=ZD>?7m!*%`1a0M8z zm#dWZR1?BQYWgZQt@_dQWI~h(l_fTBrs|LcM_JUrM$AIBofn2@%XnJG`jQv^IU9#D z$Z;5hhF5|E;`NHd_@d%422C8spdE*SpCPTUZo_hkvskN{hUHGhVaS)h9V#4Q*E=M` zhAWiF38Wpb5o_$hl}8JddFAxveHS^Z_b3))L9rP2A1tI;47yK9hvGIIi$U#)B$GzB zT9OgbV!8+ph`bFD&N9Vfs8bfYOykTxxSFsJZG`d~s(WZqXdOsN0J$leo<1p#EtQI>*!{_?#D^*ckIB zbn-GY8xsnE7MYDTs2Y;(#`xfXqlS&?^|9I57Q>z5okp^SBdxVQzNBT=YnB<`nuI$^ zl1QOiTU}sYM4f8jiQ?#{rW3I%0RbBX+mOtBgsS z6@70}WRR$>39q6gAvX!=B-bs9%Fa)a8(x*4P(0M0uJQJS+^(y<+zGi^EE~4RV%e|` zi)5oZ3v|XqQ(zyfdb0t85wXz@79?WB=|OgLN_0eQ>=p<#w#k}Z_u&HD9unNdgv98a z)_Eq$AJuk6MR$mbriY#bf*Td}3#)frs&?nacOoiUk0UBNJ}iSpo~Iowb{7_~H;? z^8;}av9dsZ&PY~-Gqij7kAYltUx#S*STiO|5bYF0gz)Cl577VzLF3tvsa)QP7X zR6?~Dk~-*751?|ZXIXnv^eD};8F^8ah(i&lZf`~A<8FKtrGMH@B@p(hx7uoI^DJl%$%PPL8ZMN2k2iZy2s z05U!9Xb_3d6dhpnPQhvQ|CKgdY+GDdD9VL&@&GubT!+f3053eLZLD zU+-k`dAx;o5PGYCHZPAPSfVXS?nQuxg})A6sp^r6m0_q%TC$*m8mvL^K|~7X2b~(6 z+VfA@wpR#n5}^xqF$PVMI%`;JX>+Zjz>-v|##u(lhJ`oy_Ng)Ov&0?#-AuVXjtbXi zdgN)qBWSQEQ@|Q;BL`O99r-j~o$H|f5pW+L0SwB+sSfLG51lf79@ar(*}%`yqL7Im z11#`tyq#f{@8Aot=GifMMGz{~Aelnz{@a}**(lDzBK;WSXlOxmw4+NyyeM6~+5rF& zQ(d)MiklF-hSk#WiyRpQV0(Pf4MS39IYgo)BdmxG9CmaCS3cv6892u6vChJ1XLO!m z@SO-g?9h^Y%J1-JtsmUt#m?xI;PWktFxP=wW43N}I2ES9pR>7i(wbg4KY78G4|h+n z%2o4l_l>;A{+;3PIG?N}PWmX(6-M!cvOHkH7^7pPBg(Wtj8|_gZxNl?-@WB<_mt2n zwq{~UrR>CLcgQ##JrO`t+A`dU!_S29Gh+EkG+@yEx6|cn*I^EK=vBL8_Zdx`V)xn5 zFu^_%yVBZn5dB--QD<^#dTD~^UV;MZr3#eGr`j1KxI#zHKz|R7iTzfFvM#e@V>k^5 z8QPJU7fi9xjE##Ro1`qEv6+T28T4D8)x?F0DAd5-e#ZIs8AgO7& z(eWm8v4}=95YK)iA=V=3x45; zd*$pqyP|dXv3#Xg^~iZ}?9{2#|Mq9T@UaU^$2!ADp*XBgL1s}{xU6G)_yU9I@-UVa z+nq(3=m_=3-8+=(uT!&+*>Wqn9Xg~l6GQfz@Bu2rpenwwJBL=B(d(s`E?C~mwOi0c;5Hkvdl;5i$>{h(lzR+BM_(IS4%AsEw|Lb9CxH773sFf)qJAsDu7L zndd%uz>%dhnpa515s;|w9{1JbG^)Plfbx`epLybu-%cJrqSB(nD zg2w%3qk5W$z7QeJqvxWZ&S}(C>T5@DO;7s*FcR^ndc{C0(xD6;QpmnAgaUA0oH-a6 z@4k@KogQ2@n(@+MoXg_@S_|h9&1$*_b@%Ng@a_#iUW&z0;yfWVq_o&P-gO%r#8ABI zj{NVtZi8UyqQ`JYg#e-M?V)q@gwYh>D0D{_nPce{Es`RRUr-kd z3FCXUM*N05TwhNO5RrY_$BG5l0s>l|vDvf;)SwFn!T0x|y}(qvQTZ8q?e-z7Ub>oX z)%e2!l4l`m3?@nPB#q6D<=*=7(<>J2V3_F&OrYERA^hU=kRoRM> zbHbeUp5*50_ zr!F!N_%uJkr#Xh3#KpiTCzWJ;=R2`f)Rl3v52_hZ33S#H8_%`qQA6WSW4Wlg2GD^k~9Rc%)y*#8-rbOdKaDWaf(cr+)#+T_5wLUFwNo#tFbc zz??0yfe=Vca+ghD^<0Uc#I1#@BHP`goZbtSQ2Qb*1wz$qwRjJ#*mPKB2vxgCvq4WI zLkSWV5EG$<(QDbnLgObE+Du+(S_WEZ-#?cZ+EMtB-cY6|O?9H|EIeOT^#lJpue}G; zmDb)Ntvy22{+ZX_p~>1i^4wf|uh6U}TCTOHpp&)No&s%S?G3#4bj(rJ@{~;0UeJ2* zYSU}*$@3r!#^*KH;Jd%XL!}~NmEE((8vH>$=Vc*ovq+J%sUM5H*8EsqmO8h)N(CD%K{Cn?~A%KpydCQD(P@ z#QYW^z|xVQ_ycW1khb+@TaY&AZP*@`k`3!Xpf;?7Vzgl$2-AjjyqGgF%p;wKL5naE z`Xa)lpho^Mzlquq@8lFXhZGzm!o*Jyrh$YuztE~0gh^T;gz5iUVX|II70qTQObVaU zy3T}2VW!PJglPcoof~1a;7i5J<^cACt){xhar3Xbs~K1VvVw@lwrhbtrs|&^S~(g+zV^ zk*%1p2FN}&q{3k4d<`|A%gXgV{HH1hS?cm1Ad=<0z!J|WeT{jWB|~NAP2-l7Ckz_O z_dKT_;K^)yP)&NEWY;_vf9KQD1J2>OoF2e**64w>MCL=PClcU1H;^ccspat3k!2Ay zWkZAJjOOYpBs-sTjU5be5j~q9D5)%r&@;)9P^}QYd)1?tNUBqv+x6Dqc&NziymT1c~xh&KJ~r9cl-4n>8eGF$Az@0u0&uAsBe=93<+KyV?DVI z&~Uv^e=1ZQKf%xirjCnS{~^6HK`)TgN&cnc5xB*#j+c{a1x)OnwF!r#OCcsellNqG zo_c|Sb0*M@`j$XlF+O)m>c(Vcc4~5%?XBQ#niLsmVx3C=LC)dJ0-ZWwP{|Uy5p1$d z(yy~j@(l|caq$*I(@jPz9e#I)QwQIhg|$c1l`KMcl_DFc>OvZ5 z%UxyCy}3S9ZlHWi9?|@6R{4gYSy{4S%gPd6NXn9^tYg)zEUmA6)33WrkiyzGT^E|G z<3j>n`0;t=p>0=T52vsi7s62wR{H(2XcYP`kM1gMAUkB|L9!B&ODvS$r1~-kqBs*p z7$V&{W-}UW2BUn5ohsr{?&=Dht(b@D2BVp5z?oUofFni=rCUqkZVWgQ`a}Ef3v%xDP-Zuw5Co?| zA^dhKtj0=%?=j+%kwH%oD1Z#+h)}+jUxrcmJa)Mpp`tHPQ+wt8GB~)gZN*QeQ7N6K z3L(zBbtvh;C@2aljvS$VvW!cX_Sv4P{=Uq8OHuC7r}+&Q6Xa8) zc_ZHnZFISOlbY{HC+`sp(V(`j`m)pVcaoUV#=|!q?%qx*=h_$bm;c?0LJ9g>2SR7# z;k1E97r`7DI&7fv|@25b_eSED! z%!}}lb>GHRpmW5XT7{qLP^O&>uSGk#o6yb)W@^qP2)=h%E+t-^9Y~TlZ(qY^DSt`u z0d*IV4YGW5vYc>v;$q9mY#>HhErX#7DZu(Qtd<;P*+L8mXcbmVa9R|UuLoJN!XY71 z6cj6{Fk^Ot855HweR{nxBXJEtYbHE9#*-y+5i3+fLFJUDkVCD6_?i#CAjWM9TI2AC zieBg>{=y`4swW2+4L>Kc@`y~F)KLtvj5Cd$b8h(C-MYx6l}`{mn$BS1Dj)qiH~e*( zK_HZKLymrh){290K`fq=pzq~IGAxxq2NCAsk5l1boWatCOySbAzjd@72jgtllsxEp z`>$RZK@WR!XBOMK+P1rZIsFPL?_Fpmw59%6?*S*T&}m_A@s)6p9WtgJ4OP(j>~q}@ zsqS!f-5{H)KF_YrT=yqb_sX^FE`-naCc^E|rS(Q|oMD_{4MdL6Z67h)m3e_G_==bs zu>}C-bG6=}FWS3a4TlHRzzMzd+9kFP`>i~b@(rB9!ntAdG6Kg7!QXVAS$<6*5@gl5 zPn`;Xwi}8ME9%8vO)T^#sT1_{_!809j06*r$DRhx0WBDLW^3}|^A!O*L5~MLR93L# zietsMPj_jd-6b6e!#t}$4BHu@+ueZ(x!E*<@jZ8NVR&WgnR^JBRh6ZjA<{hxM2L@Y z?YZF>42A~enTPxAvc$tD;19m7qsm-whonAja+1!;v1z(tA>dt$haKgCJj$;KK!|v6ZrRGqBEzFe13sTJvQS}aXd_EYj zUj&H2Ts}!)6ZO6YhaO^%ku8IYmmFVkB+u{!jLq8v+;Jmg-Rk8EnNoX)GUVYq;xcY= zA1yM6B$z?U3Gr&1uIPM{jSTx8I&Z+BR{Vm#lq;|lAU}x4pb}L7gwR{u(3W=|htDBcCKhd6vGx2{B{Re1w>Rb!~2{839TJD}06TG9of?3f+fq&9#$J>x* zeIgA2lfBZU7PBTL4!139QgVMoa>b}64Sc91S8$tUfJ#!MV9a@!Wrr9e>?0t@9~bmP zB$x(Pm136R#oZ-p$2@V2ll%EwGgq7|5$#1GYst!RZUIu3?$ zS@YfI3uYQ-^MnrDz2l**tqb&M`mh#cp)-@O!#9Xu0U44F|uEM#|H^wan||X@NtLD z87F8;Oigjz`t8v!Kk+FsZsB!(H}8@c+kEl9GhCnHkJDoRAPl0 zEX>c%&J6lae`3N8e=F-dKE#IxN@_rdQeZzqFt#ngXR3_` zKE!)8@FAFGqxsv}z~`qmlDVzGNAEsM@X6gWd_Jk3DJB^Bq|J24m$q*_HV!OJc>QU$ zFj+B6OI1c^*N}5Hh12r@1Q+{Bi(^OA$iG)3&K9a!KF(=~n{H&-H1b<&WXD#Ztamqp z@_)z>+8P$-ZW+p7F^mGrKa^M4+{RG0LS^dlmulh4t&C0YZZx*0Uq}Q^zh*Y>7YbOK z{eSU8^vlVNHoH9a?neDu1LjI1wBd>aZ&JVBr+zgEwHb<}cQ317-HrQ&f|UC80rkt7 z05=OSy?a^xLVVeXLQVMIkEvffw}M}K_cHpmnW>;@x{iDxMb7E1QOH)6X#2`^9c^Tp zF42~j=@M;jnJ&>b7nMwL_z3e}RcIM>s#lhHr%F)grrX!VYeVD06Gg}@jg2WpWgCZh z#S$|H{a;6VW>+EOmKVRWB#k;flzL*-Mi!({*f6H^Ip*MCXYN&<>uCeUzP?ssHwMBR z%bWD9zMeb_M|E{$d4yXGF!JeB&$6V$WK>TI?83P;(kvM&T)Coo?5(nbL27;v6393BgZ{(lm}mG8qZg&PIvRXgb*-ykIk8U~{s%y7?@XP8et2oAUVNN)F!|EKZ=@4QC7&(pIJBZ_|2i!)a{1nAGyPxU24 zHsKsIWQCLBexculvQ6B^obFw(ppVVe7y3DvZKXGwUt4}vfX2hU@q#q49!H@t_3WN_ zyW%8dzt6#?IQ?Xy#p*E6bGZoSle0^A_!yY2R&*($Afq{q_}2C3WU9r5I_)sU+N<3` ztBv>zOi>eE`j8~}d20$X6pR$NrY%X1q7iBfHgs*Q&<;$+mH?_9*@mkTJDMS^&@Zj6 z_RT45*@@E?km#`GeyA674lvpuVaq-x`28zQ7_&|iu79|FPuTLu+V_MU|5W?_`jhp8 z+%I=JH+E!VA&mLQ2xGpl&!V#hM`)@zZ|gwAtE)bCSE4NJYLlsjN3?mq6~;VpRJ`JX zl4-%wRD>~~l79l3yNQs(&@l;PrcsA6&l!{h#W;KOaV?NI^aCt-pH9Kx_jES_oPA=% z?L#DF3O2=1$Wv(D;m?440)MO>IR*=AGLyO(+f!UXUu>NU`XXz;ul_gc%I~}eV&iqD zVO;#4-V~8}x)c(ti+7b5BP`pc62jWXbav)s{kWLV_ATQqCijf6jw(wY{>>ol`{d!z z2+Q&tEhUWAnI+n$K2y`NG4m1jI{i+gt8!k9cWN~zbY%sWaV+2>_FbdvQlKly@XHN) z%KBHIZr_8hceU?9*E8*VQ0r{_9(4V2?i0Eyr_waKD%A>(MIEg|A05Aap3R8!jLc~p zwzElYAm_)t&g>h_F>)~_JKu%O+r#lOn9w0*caTLGm~l17@lx_7Zy;hZ8KS!U#Lb}2XeT|CGtz}5pKzKp^wQDJd&I8$Y{KHm9p2^Cz31w=~|V8 zg+%>vyXn7H?Zx$)-q)`B-QPvko$FP7QM>Bhs=8~vsxQ6=4@K_oeX42~PHSvUcQI4g z>&)B?$5(_mhU-JX%-$GVbE$GuQpYrVKBUslm@p(?fiuQNWZrr068f57%231^GsYTX z^8Ml%gRRf`gRNIF?5cHpKkQ6w*^OlfNJwQ!KJ-9OU04}s%4|YWl(v*K)JxG{B4^T)}^>7qCF-e` zTXxkHZ;#=Po{`}tlF<786*$@A+ejSiO>)M`?eejyc3w!5K+@8YaD%?yT2#mlas*)x zm~%|X^^)Z0?4?d?vRKwK@KtPaK%4uqG*6<@v~u5d~K z{&3sPLD5fE#MA0idrltfRM%++zU|s5p@%Qep1iACp1gs&xecB_ez`q)R|TcK0Z-mY zF3~G_G&-olqobF_v+EooA5JHsTX=op{s8Di22i+$k}p*~q=*t26NenUr(a<0i{8PWb_3SSgt=O(-J z#1o({W6vwnwYCVT;vp)&Sp8eg!|V){H!jga1VHt~4eX@>KFG#0%{={?tL+R#-pR-n zSiu9PVkD=aacG>Jf)F`Z=%Eml*9FkP@uwmr`R&jHXdSvhn{}Kwel|jJ|gUfFPrujkquCZXris=!=(G zIU8%2XMz<%FrAU>)uOfisRX3W9Gj&-HtKbhL3yS=k4XPJC4AbNUH$ZjSMcCfJA5GA z@XeH>C63B0;Yf0Ce^D7LVn-x3C0Y+Aw|63i&(u#e=i#!^e}DHp`t>P&m#I8QiGptGl$E2)c|4YXZ0%qdAqHb z4wJcnG#Ll!L6N${A5$C;pyAwHHVw|!1flW{;xkg_{|Y4_kK)r&5Wz0TGvYODT*pJ)ERDL$%=CbP1E@b}?x zA8SEzr>zUK^&?SsU6iq>nX+?HwlA<$$~u@_zM1$per_VGS9P-TL*>t_{OWcs4L7`9 zm1e8$A?4Hk10r4g$|@rCorTn~1%6iH&kT6%q$80ll&$<)F|%rR7H*m0;oyt?-Mb3) zL(lhtaxr?A*bxeV+af;{D*q-ilKlX?D83hQfA|MQfc+LjT`-)jNu!Xzp*)sv4loi& zp*lpqc&W^S+}gBnz_+Rs1$?-B3&nzZzy8ESK>btd9UmQ+0eD4nW`M@fF1RGXt`fBy z6XWNiu-Hb_?4cW(dVr2)>MnjYVTs-VTjl|j`J=G>Xw2Z63|4_@0)dQFjNz;fyfr?J zMxgk2FnuDg`k2y1igf9UkK{@7Bx$?<5rO+beVP$6a4rN-C6K5__l#dCbsx_qbS2v? z^ud5H1El&XV^R#9K~fU&2~i@rv6WJ>X&y8m&}ZMm$=Len7nxK8U{*2N>jL4z6B_^_ z4^C|}WgyCStT%iB97xj{*g6Rm&^R6_w)IKFJkTMG?g5-d94td4P~^e9C_gK$k%tUZ zJaiMaycQT4?ZVpV2@8e4d6_JiZ*E~KFiL&RFghz3JvxEW*$IqjGZ>Q)#S?him?E(9 zl2PShy?#VspbNs4HkgjIpmg-sDIf_n_ZDeQpVjDNQOAN>yPJH3-VOhQND*Hf4b@0z z#H}oagPLGO{w*9sRN!|f|E}cURoq|4zkU3B5&vGyzw7z8%)kBodkOzu%D)5rJIKG6 z@$Uxy9pc~1rN6TkgR?dE0s{K;ULGq&=JURohj?^Mhnk7{G%y*`LbzbeBQ1Q9C zI;r?eQt`bBV@X;*$UkI>5qxv7v&*99=cU)Nu82-1r3YwF+zi9Nm)nD#a|Jw*I32)1 z)MkB(9w~Xxo%~kl`XlU)g9t&L?#t%x^o8Fl-~o#=0F;VyS!nt6krJ;H8z&yrcvt`6 zyC7N%=+%oaTBxk4HIF{3M+$G$qZggPh56zWOWUgJr{4c$}pK9P!-$?^w8VE3jOi9S>Qw0(wP=B&u zvspph%@{qXn%A%@4E^T?{k=DqkLq_G?q5_dIdPnxHzRvm4bNS=VQMpTLmDI2sIXOx z@Jc>*o${I_=slr^Y?bgtrXFf;L+nkRRA44=I)&^@Vu%u9c=`xarGQ8-PnY94nG*`q zqqBSEeWf_vHi@Ra`tB^-ELQpJX$+`qxd`HZr5d^*aUp$q@r4W373#}N6>ALOqz$}e z@oM#G>8do4Gzyyfrcfx;G+b^Up?(3OG=VfsH(WI7h^hXvK^ zqzO|#3Kcn?{7XIAot{L4v9vzLTw4`bVtbL+)SAe`3{)~sroQk-3;q`h!{1K0-~rbtpR50r?7l3qAO;`=tL?qtP5-*X-}Hn=gJgDsl-V~@{d~NDV8#|m3Hn3w)d^ZuEulu`+ zWbxf=Cf^-p{2`N6P?iNOp&qYocmz9M=8A1r!>@=QE(v)(fyNjNdBy?7b~N8jwnJO) zo`LT^sPFF3clS)j+k6)vRvvG%7$z?8b&ogk559{@Ipcn!P(Bd3)6Jz?iznfSZ z-^JE@(RbPUn7>QNkGJ+!FEDeG9Neq#Wg)XoU6&GAd(vBz{L`x+bP1a`o02n>*d*m> z*sw&gI4QL$%JH~ii*g#Uus%7@SM_oU!H(knd%lvyfJ~?KSKV`H7AxucG@RgmU1RV< z59n3jY{jrwy+Ue2uX?3&pY*C56;Ir&4j=ATRqt4*8i{nuwskwDN0jNSSA9#QIeXP= zGuJZx5I!!+h-ZXEf`At(AGa7#Hh}Dq>R<|!06@Nc!D>gi?FYvpV5VH*1MNwt6$|yI zN?s9hU1l&=tGxL#o<3w4A78pwk5?>HW||;xMZ(}!g1|*=w!v?`lUCb??|_>zMwD6< z0vj=Qg#Cx*BHlTERWkbpl|Bpyy-vnk^VPqXX!nhj?$iE>sPrw|zDV}6xIMz{i)9n^ zJ1(;=_sWKfdmqJR7P*dk+S)VP zO{2s(D6w%_?bab22;ahyQb1*kk_D+ zH20wPZt%Ogr-QrcWx7{B3n^HPAaz~s?m3RhbHi@CCkjRY3WC<6dovm^h{YzVSZPDO zE*3RFRUwdfK=U2|4sZ`hdo!hP2~v@7anZ<1L+J7){g0KYG^~mkW|q7;6ZM8Pf1}FN#pr7NB28bD zURjXF?^S#-t17gt!zG9zj(CcY#0o=_+1$1T0*7RG-ubr5U6Sn<*a zFQDIw#hVOB*ttf8W+72=^I=IVN#)&0T9LIws`BV6)I`ijA#k-wqjciGIlwQi}1j!y@Ga6mRzintgSP81~_}k!H*FwIp75OHFZUdBPF)nY@azGJn zEgY|C_kUJvSJT?n(b~f1TLW}(74t~+JIo=VuDu!Cd zs+ubfC1jf;+Q9Swtddj&)aH6om~@^(>-hLfDNGT&p9m)lCO)Ia&NsOK-H3Lcv#b8E7( z;}DSpM<3PKU+AyPoi+UD%m9uPdyJFoG`UPgU&2c(pJ~!)9EgZW+1%oY93H0LM|z5i z!{Pf83|!pb>rHMFtHZ%LsBlRP$q=Ly03Fcd*z<}4-#glFD#PVE>1T$qq|1s^1b{@a zZ^`hnE}e+o>sB$QUe{W9O?9u4OIHV0ewRIUmeE~1^;avqjD=QKL-l|}c!&>1vTm?j zg!H!wEX(CvfM3Dz++MTb3n^?Jt@k}(7aE9{`@qY+Ru&Q9?WD^bkRlGm7;h#LiqC2? zyT_McoI(cXN~rKyj|3;>@Lo`8xjd>>#Rrte%s-lN0`~Xt#vg)DchDg&_n?%W(gnWj z7)>Fsm+|Ev-ev>l^m05T1n0qy)*G` zrHr|}htNY%DKATGpcnhg*JuNQ`+IZz&=YkVw+^%DtQ!g}?Xp~qOX|ybqPS7W{5z;P zwqFAfQx0thVAMq4%d=i_NA|2hx%$x${=7Dn2F{{-Yp(=-9`}elWqdeT>b{PVd{u|o zdmhM7&g2Wtq|g2?n51ZOpS}b_qf^&2fXh*BB%7%Zr0o%JmTQI=C`bhxg-Lq^%ukZg5H&2}bbRXCDh?rD~a)qOKT5}L+ z?f@GT4d&|uzW~|3mZ~6@Ho+H)NpO-vq^by0D1aM9X~(<75AI%}qVur{-jNe(n>UE3 zP)ar8kJ0aQH==;A%AdoWu2dAx55 zn#$0`Ex?YIo-j~3D5(g@0Jzq08aWo!nfg%xi2yT5@aE}E{dt$&8D(B4GxcX(b}Gue ziqs9l%F_CJsDZk_$g1#*3F<1->S~}4A@J0&CB#j}Trq38FP>9uw*AqFnow<^GpVV` z&2907rD0qGHVL1l7RI!u{U;$q2QFz9tJ^JH68lh5!X@oOfog0Omt>+&sWG4#kt3u2 zo)51u)cRh2hW`dyn6nHpbR^X2Gy}~lWMNFN!Z6}(auxdJOD#jKxRE~aq*visUhP6s z`y9YVYVBh~Oh+p51kMtl@3XF885ld`7zx2RuVZG|gn}8kvmA@Iu)|*sQgBN4$SpJq z-6$<;>s3((q#JsxAT`gsgc|N1;f~M3z;w5g?qCVJJyizoKd#$@ou|k$tGbWG(+jCG zcuHNxn&}}#T3BO}86`(lfUgRCh=OGmJkTnrRDf#O)G)51|1||LB&raD(kwraYcdU`+rOHu!+9_UysWG@~J^uSI16%UXfc`%~~vwDF2 zrl|kr52pumJQnqj=i8-$>TOd!=v+~MxOvdmgGD`%U{^oXJP;8%HPi!$6Ow52psNR0 z=z&Fu@BV1+OQ{FD^nev#)DNon3v?2DnXsm)-``Z#44=AERk3%YzW~CsJj6Z!=LL@v zf88$PYxm!l`uc>DkCxqxt_8C~5j(PWw z(887wO7Ctow(nP~bM$LM{m|uQr2hGLc<$20~o!#QNPwesLeJFh#?LT-!);5 z46qT*l}|>El=a6owk_p+(Yw#m*mAel9~;ujMq``gv-uf~tsw*wdpFH_CxXE*s*x+& z)MT?F0Bz9ORf$KC1TQW`3UndHvS%bm%9PY1g;3p?G>$yCssu~SsuBdbRVCPPSCv?I zST#T)mUE>1SW)zq*9~)YMAb+FlNg43adAhdQ)1ww#F7^Fxya5S34lVf31`E75EPY3 zK8WK|u)3TZ+4@z zD|iGp>}_Q5w+Q^~^|q8Ic2S1~G&XE17+X#f!9Y;FzYrv}!2!sX2RkH#*6l~6d_ull z&njf2jmrFw;#i=Krp%30)eJ>7X`_mNLmTbMOHLe#_fE*xBniE&Zxoc#>d5SiMXBf< zF6c@9GFj-Di+ulL-6Qg+dkoFG`lg!x3Y+?`>aZqtOi72OiG{7)U+hs!q^nCd?^1_?`X;Y z+{dMTGCB8B|6|8?y<@zfcv(Ei3->_N@b}3%lC#^`tRZi1muSqKgsE45l?2*2&Xq@- z7}8m_&)4eiTb=u;8h{zyNU)nOjaojaSX0i5!C5A*h#lEj1STu8ksj+TS^3Jl^!yTU z#i_>yi!@&;!ItQ$PvtV@$=|@OW8#$WVK8?1k3Kq+w3iBB?Y z;&g!l!$t!dTAf~o@`(4TlM+dRXwGO1%dOwXp;*HYVnq`J9)5_6oXR&@a?gK)IUUsx z^E3P~k3ZKfdMPPvAqTxkrSeMHrKo$zjWPt~d+qp#M$IB`$V;g`a^gEqKGJ=YFs)oPyejhj_Xdz10(ibw*DbO4J-AorgMGi-iBr~$OjBo8_r-PNAK=APMy z&f8?G$+oMqCj5$U7unT=-o*&ngrIx}%!CEPKk1g;cYHmwD(>xBmFl7igyks$gR|l_ zt2mWaI1f_eV)l7p+CwCdGUb|8%T$ZQA(Y@9nsmGB%jD@4RwS5$8J2ArCs8JTOKobl z^;VwkQd^t#Nze)hdQ30U=pc9?63I-%4T&CSm1y$Qlw%CFH=D=>=+rSKT*9&n^#Oto zmr!3)<3xUl^Gn>KOAGF)w!yn8Ag{0iD5;$FLiqas{Nzff{tVn(@dC`U1t-R$5qfGh zKvIk`IJ=6nJ&Q~RhIi@R%L#uPTr z)%1)}fbXwc^X>Y{NFu@fO=2WLE9GXWA9tLY;Ug@06iw%m)RTO=7iibDGrmj?e0<{xfA6~^U2Hx8iwe$iTQN6SX#bc z*Lz&YI%C*Jv?B0rPpU=QBO<3cTce@@-DA za#+@?`HZZ25jWV(Cy{_Ut&O#b9FXz=B6{ZejCndA^OWWjT%`WFsrh`uWsj_$&xbvq zw>(qxd8R#|pZi-~pVwaY`qY9WTi1umkw z^TAtTqvAzoxQml*{wgJ|GxqEwn7pMb399Jc66?V$6cM0ad2mINfBo@a2ACCU=V!IF z>T?t$)R*<=RsJYv!$m|>;@Ggf-u{lbmeP|(+>6&4LS&c3osjp3wF@~!Dw=5)QJWaV zHI)3AWfpkVvE}z1V?z%At$eNXZtjn~=MMhvNu}q%Rb{hrcj1NazC#aZ@6;<#aaax& zb^Y|ryH&o-^;f%Y3Xx6O-6CW9FcM zKl4Eui$P8?Y3RP8bvuus6B7H)`jw?briA!E#{hHu7BUPLS6FTRrH-(8Q2&44Ge}`k z|3$upi|5O3{d>AZL`MXYqUEE4T>VKNxVf_avwYdD|HPMsxlvVbF}aA##L3i-CDpN( zG=yxyNyEfV*N^|jN(Zbz+|dmd{x47Noy_*M5Z3`1PCYACLR!^8Dj!M81PR9Bm@s`x zpHY0BMlQ=>5{SsQQ5rfx2`yos<4rG5TKZjc*OcPQ20h7?b6GO_%iyGG@y#riUKC%y zXtdxJAsd*GAQ0ZCn646ye4c3*jX2dbiAH|iqOV`_%4;2cn!>oM83giJj9-lpg#!S0{JI;i4f4bO1YP zCVdgTpBC8r`(=6Aq<$?OSqLDhnjhO4Wpl!!G5KFl60z?oq?g^>BKFoYrJAfJ^Sx;@ zFI{^zrB_g|KBskSN-vc%;u(`_j{3EhK5ng>m9w@gu7lk+R>ga-EN^aTv($8G^W^)P zHcMqQQHGj7chqpHZ?bm?JA?mOM-fMQR+(EYWPeq2-w`j1XysMP{{PS3+W^~jU3H%4 zj3}a{q6mWu|9ijvS2AoFeNx*@0+B5CxHjt0`{ny(2 zoO9pTeNUE*v1OItJ!hYD_FjAK^}W~L`{U2W5)pYWwM5(w2|j+XLuLYTzRRTB5?kcv zA`^&6J%v7GqO*8ok|n}Ur<05kkx1l7;tU8+C^iNcS_2Z(2@yb=Ra`;A1blf0Y^Y!Y zoT5u&2Abi?mc$iAx>Z~O4Hx1H*b)0GT2*17RR?4xTD3OCTU4@I{J@q`JzwzyCskx$ z@J6v!+#9u^h?yRLC*#Sk(_c7xLAXic85?=8NR(It}S}I`PVmA!K3Hi@`RL zd?(RvZF+hrM27U`qK~J>4CyMm;9-#F-@ijc`t~LRykq@_G};(6J~M7ee+AKSMus$f zEo&zaP2I4heF7`SVa$>~;XBDZ?lO_wm4#>1gTz`#zgm|Fn=PMOlB&Tev$a8rZ<7jtBX3+wxKIJde@ZRvu(+?x zz5{!>BY{Vq3Kvp(qd5zN?kcVyuUB^l_iDKt;R|OaY zIm#~FEBB_#nISonCWr{+2|ej6k%u1GPDpZ56d6RLwzND2#XvBL={{mY6qd~GWd->3 z;Z|&iim^g=B)y-`(^;7Tiqfu#e4*EouUuD0{!E2@CFpy~9D0Z$wR7r0K5NJW@;3#< z-;234TWku5zt;vhFBOf<%VQSEaLf~Qq~vH_qHeS4TmGPCU$B!=!3RHg z*6C1;yYh!1Cwd;kV(Phlq96)GKcxh>Da*9r>vt*^XS+5rK64r$rs0>4Ps;e9zfs(- zu5*uj_Worn9cX+OR~sLVg^!Ofme3$*S%5RgELT20HX;dIv>S5__{rW5j~Mw8o-y*L zw{h6!!>~can~M1`Y71f)EQdo_$&fx{(WFn?Gf(UhsaYepuqS^?yZ|dP{Cyid?)Y@h zlhSzSZGo2AcZFA(UA4cDr&yBQJ(fD9pYmm`x(f^6IMjO5NYo48GzgJNh--!fKs&U- z794s)pkkqnFo_BA9;3~c8v1>!e7QP}6bUaVseyt&X%rX_f38tL6*=?f)hFO3-LD{C z?n{^kP7_lr(S#B=YMNM-1>gI*Jl$lb`)UGHoa!_o>TsSFbvR9kI-Dk;4w1_ofN&g? zNQ1mC(F8&ZnuxSuhb>Wx;F~LyNvC1q2o71{&_ahtr;HXV!3Fg$Ar2E>wv)M0T%ZI} zEVMMQn5}5x=0FSV4oxEurlK^~MW!_e>d1tN6wCB+ ziEsN?TP9G@0D|`*o`df%z+Uh^MxB+$$aZF`_?FpL#^{eKwYIq0D4k2ShHc+aYwYhV z;*xH1T8(NA6-P-!C53LjjZ!$hR%>F{sMZ#isI@|M;C)3lcMfQby)i(gw?t1%WP&L% zR2UxR1{4+!F^IjpwbWifv1f$iRGE=;t@zs-^k_xMVsNIAN^_Si;W9#21FRGEy9QBWQ*Dx!9b%2soXO8yg*l#r=tX0N(fr7s(Zm|oW+>SR|D zT;wtGMw!bR#KbbFm38H2%SokYX0jSjID1)bGJFRAB83`|8Fn_R+O+YE!YmA&pW5ze z*=O0K2Q4i-XKboY9kaA-Nzqs&{^DF#wtuowt^0NqsTb0+r6o=3mG^k&y_q?I26afO zq$J&@q?Ur(#AKor%p?VEI3)!Y)DrsQMInAm1da>iv@UN&%R zb$5a}Z#t0Phi=amfQZY|29lv|mKYqSq;w;C{D6lbjP}>S4w?LtU zYdvx>XFYHSec;e`jE<=8(R65<>ycCvWOs6lY%8s#kP#D>R=BAc?U)UYqbjTuWQH0QqRL>Yh2&?2W>3g{gL&L{d3~o^^Sd08ijEmr)6y_ z+xriBR7p|SqmU3n&yz|LdDgNT-7nd>VclP=B{+E^&0uq=b zOxb@5H_-GEVQuo9Oh+QXO?k>2Cw9vYPNk_j%k9R?-^L3BXcl}ryx@*$K?w_j#$ksm zZjij$;0w9L`$AUW=8NYQJ!dZz>O~iO(zIB=Bx;<5-IBt*D&38{K-o6zOLl>Rh@&P& zx&gcPnM!@#`c!aXCzI(gP1*upSs++DtN-@Gr?bbcB`BAyOl9>e?aIs}3(L##sXoZcd0$S!b~gKy z{WJTM!5?E1sT!6kcFO5Du(JjyS&@(ZCU$eunO3X|=zRE2)^&B?%+zdZ)rI;ozko#n zhGqpK8nwx1G&1w9JBOM8uFN%aXf%BU5wYsBC4s9hg)0vPabx*HX-{cAa(BQ-I7;3v zBB(?vf16jNA(axFU&qn$e7V}`@lQ1d{hXX0|Gpt-thZv!P=iW-iEY|uV{JXF&NOxf zLz2j=oNTT=wErXII$@QG7Ip>xka^~Goonl|5F<-pm)_t6RPaOLc0PfCwcjCZCVOG< zUSo9${Q94$bs%HS*x=FZkhY*>#qLP!!aVAg!nZ$a*nOB-7$R1P{#8az(U0;MpxLi+ z!Q~U$s_$79vTJ6beX$dVAmrs2fASN6bHd*wAai|oQpJSN_=}+>j-uhC8HB^{{TUL1 z-($)@Dz6-7<&~vP;bBsU3a>a+euf$s5=D3#4(AM@?`TKneuS+{zP?C zUTM3n5(oek$EL>S5$O_cAI{2)##-J)OAjIRktFWp*s3}w}z4x6pQ*LdSjzVk2Qh?ZLn^Fk)f)&^4<^7 z!3q{dGs`2Ph!;hj1V+onP&D$QXMfH=V&5x{jEWIdhMsGNeQ?ytQCoY?S|}ZMemFB% z+hZ-chL(!Yey)y(tB=bRX)BmpFhT1J9= zx#|=5@c9>-_kUd9jPdzVy0(}L?^V~hVx%fQx2+YhT}Sia8$Pdw*?D~0?r-H8tUK(M zn~N!8^yTI^u+Nrp^=2MbEPfF;Fu!PCn;syC;eapQA3Jes4ZQGtePlO-cpRY(#k&0jVyQr2u#4w}FWnGt*> z!FyM9I7B^1c!B9ys0RP;s1Df z$vWG)40DgQu`S#5+jvN=8;PDz3EioV0kFbr>8@WJWMZYk=yCYA?5B=xRcG}%3FqWRNpdp z8kW$*rpYC9r0d-Tq5}!Fv(KxmrbP7ZJ7&xMkj?6+6POxfNK}Rs?}MQmi?kqry-(W7 z(d;(rtpVwB8NdTqwo!|{W^34nX|^w#74kRIa#q0#91gWc7Vra~&{kic$3U}3%ILHA zl?KN9ex}4US3X6KRbvQr%-5E)<6ZoIFF0Zs|77x2GynAnOFNM#LSj$o1 z3SSUxx=qi}wAW|1+m(V4Z=-~n6cG<^2~BrWa^JsG4Uq6|Y9O|VO zb#8mBe3bDqyNGcdZPL~vt&q8kk)pDJm-%)PC`OgdTN(2VT+i*v-U?j&+(3UJ8hdEj z7xt;;U0B6!y~Hm0!DwB`cG+ylLbed5uVm9%928kiCq}mEz0Kca3XpCh*pM(Xw_+d3 zBaw!y$fRorL-kHjgi85 zde1$mEHBOoWv-oOd8cD$8eesNCck7>t=H-q3$O{b zMkZMR@eM)+Ljh6=2g8st{F60`VD^9_iCEJyMkw%Yd9M))w92&+3a6+-BK!dY5lRz9 zd!=3ihV~sELy*w&xKCe7enntSBH1vm1SG9U5dEbno#uvcD6a`yP>zLp<6eN0x-%F$ zcD%i9Qq>7UIYlTd*uaw1Kgmn7ilVFSzY4YMXlpRW)ifvD-^AsNPWZ$l)A63d?T{1_ zJtvBO$7_>a++gG_P%raK+A3-AQ}+1US)csj&DW?x0j=*BMpHW6oU2<$vwpU@9ZZ2U z$3ZD?m1MGAkkW=&NegVZH;N+cqz#3cerORnF{R_$m50F}gsxPJSV2W5!&aTmxDTi#pRrKeh}V0wH;r{=0j zqAM3OaYAj_ye2Sg3B)EuM+q){`)}*P4Pza+P931f_O^E@7|zz$Kq6*gw;VGBm1@L1 z182xqL=Jiy>K4Y$U`WeCXMukkn6kP}8F)QfJk18?c0+%}hA|u?DP<=XWp1EQX+}k= zeiK)ynhe4UoA_*to$gAdBo^`TzH8NWp}zY>l2<@gIvI&sAmK<21o-T2!6#vAH>}RH zGmFBTI|4r|ox^ej-7M4`m7NUOW-B82<5p!wnZ#~}FSK`73|$bUat|4k%M@BLQzR#( z&}4IASU(|~fI|bN7>;E7Q(NjBxEaA7xY^F->Iab)&gFt>mGA*Pn)i|k$!~YK*}$Si zt+y>dR7bB;;HpJTqjPwx0!%eqVIK=Py;1KTfV#iltA-#N#3KD>CSfmtA9#(Xmh4x4#bx3#fBTgUkZ85%X z8w*Gp!Fh=%k|v}CmD;^YOq`T{6o7Ww*ISH|-_9^_y~s!ihi+AhNw?^!M4dm9EDGutr2ufixM+DuEh_Ovg11{Y)q zFUE=?H>qYICTcd#Q;nLiu$PwxQzO_OwWS) z<#UWve*|0HvjWvy^G5agB&vreR-k&QeM*K20jaN^lo6m)Gem{B{y5PpOF0_DsfgH} z2GbDNS^YZ}QdZv?LF+qYqKO5Oj@b=Hux5oAnR=TZRT33KkGKMXTH$I@Yei`&2afg= z+(rn?2n~DGd_W_#xJe*&I@vroLTeeZ_kJZ1+W8Z;b_B}bk*Hmf*q)<^g{DxHgRiHO z2fFTX?Nng`#i*hdUNwExWfi5kavr?is>y>OqjG+j8NB+=uF8Z#^O+<4}s$|_g zf5ZpU^psZWE-lcyBG@HBOg;ZVXxmbS_oDo)xnjMXvYJ?R)i2d5HEOCH(g>=YtCdta zmVB+s75xhS;<=HqrpmwCu8i69#3^=s)r*N!^2jN0Nq%^)m14%4H&UCi@RN81cF0SG zslP}NJCZ$?6{QLvfBX?j^HrIlZfEMeweymr_Y0cgoM?uu#WIi$Y6fy!muLWIh2{EU zotoi!1>z;gDd*qz-ahW-J+EPo^Jshjb;I`l>zAJG{r%_N_I~kN6xjAexDU_Gq)G1o zWx1>cLPE8zErS}%B9%eCf}!oU#Tl$`J9TtrL%XsqXi+J4=eNa|ob3D!omfMBwVL3H z{-+{McuFmIv?PRTFVv$?^P@JqU707^TIz|$C^4Rr7CKwtFSP?)8*#D_sPcByf_tLG zW95m4xM~a*x0OLj>VSoe)5;&EA&V7b){>G^!5oFA`-`?rg-ZSFa&Bk^Ay~%rN(h$O zj0Z9K45vpPDIsFbo#6C^`I+=Ukso-wR@%tzBKDeUl1-811&=N(5*dT49@SLn$`e}r zim<09J{3T-Sh}K`ni^_(6pHRxOq1@|WAo)=fD^ZTsMu-IQkd7LVS0a42cFK8TV&?| zznI)2{C|ZF6fbO-U;F8k?(me!>sR#j^)~+fI^KTC36Fbf1$tqA>Fnp1IJCQ)r1oD1 zuagWFgH;D+SDt11!#{y&2l(R_oF_Fx(<;2W@+{MO>K~tL8n6GtT$5(hCeAfoki;8y z*vBOC`#!o6NxbIU7bI~sAj`dD@lB6zo)p1(iu}qx^(Xbh%z7P($+eGr663XB z@FdpdNj!TY`EH|Ws?CXO7Kf3fn&z4-ujk26d>%UA44sF0^4v1;ep982?W?rP!26s^ zFY(e9l8%~!=uxyFKhF1|bmk&mmNnz2#g%Mll zR!a%U5Fx-bzK-xYuc)G-wpItU(&_1hZO+-FrJmiL)}(D-ep)43YcR_~ZQDSVA6qIn z9amRb4efS99>!P=Z8?I?8dw=^HLw$kayH`17$z_+mxLwA%`#g-V~H$b{XooKS+XQh z`}*=B*(8d(XPJ;plAi3f95}p zgxG1CC)lj#?U$VK@wL@N?>So?_9D+v#WZc*pRuE1vBP3KJf%ZsubWL zaeZ0imsNV1mrnE>pPzPLa)S4Q1G!hpG154*$Ke<>C#=X=!kgxR~gp67q|PQYwz z_AY+0dgMV1=-B}Dg|KVb`QIDnMY=EJ-!%4y`J0#C-Y^$T$FnpYFLCvKOzw~J)z((u z>v{Vnr@qg>%vv({@M2j_^Zkw0G~fTyTTOEz&bZ+?qs@Kh!(zz{k$n%E4&UNo}X4;a#raDkLWBtq8ayyz7pwpZI5U@Z@=Vd@BDj2 zFVc15-)KZ}zHuRnqs=+(0IUm>Ft)#`RFs$HXHOQt>)r%=|tWUBh&?}c0R7a7aySamlD=MK8eO*xwspIYbFk1{*1tGO^Q zwL^nykK4WPwEU_al$z?)BHJ%IE${h320kDBk$Kl$wuH7bKodU>Q+qAjafsSa*+1ZX zQl0EaVsc?mIlDLE%8u2nj)MeP9gkU^2IMoRrd;2PsJSvLwiS;%vz888wMuf%JOf)} zm5@zrEB*#L-tO~Rng>K%miic?ITh`^AR6@2>wsR47*7Y+0B%dC3+J4YstvRQx+#d~ z##-O_Q*}qZQY99* z5RnZ&Mxn0#(<0+5?y@0xN(uyuD)Jq`ohG0<(N^!%Y1XZ@C^$i@$ zsnHQJ0L(iyU_$zLTn^``6RkH~KFUA5|LNpiqt5=~$iXsy2P4@zuH5*d)uO*eVxuSj4)r+5X^nk``P_p1hiTSc zotQZJ%=@h2WxwfF#^A&Ix4mmLW%QJ35T=d~J5Z&Thd{%*7_v!MZM_d!sT3rNsyOrX z-1h5tpF353Gij1lYn-fF&m&neMm58;b(%ALkvYTbbh?V^&vuM#nLR@tc%LIYsxd;s zYmA83>a5eiE|P6XyO^nWZb3drL$PHIc3EjCwm7?-zoA$p@%gSyIwhQGisRg60PW;PIngpU zurd1cN#a@(ZJ&2hBH5cn2b{S&g!YQg!Py)oiMJNiW zeHGo-aUYZ6+XO~qAl|hO=)L`cdcEfo4WCsaXZgl_JyA^juJ)6 zV-(my-bMOheH{)j{(+XO!Nv6OC?%f?YSsXt8V(s{>rXWRB@Z}3Wt5cJO|!{my5TfW zUjDDiAv0DM4(&{nJt?s2?0NoBHu$t*P!{Dto(<=yE@WG-&$_yz8MZQcZPK?EtlH9d z-Jw#9o1d_d&j8a*5cqT78VAGlet&50lG(P(_3aP-%+6_sHg{%Q+!=D4N5?Yf<#sUw z(%cadtsyGMAsD4*&R`#p;v}s@AIQ<`(1OAMkiZ`M;*9fpBOl-f(nzfE+4{H&j44}N9` zpEdLjB>nXA7G8dB@*&VC751Recp?=V9!w7nevaGS$%!<~W7!5Tr#Zu2gYg8vF9*ad z9}|J&;H>XXjeHb0q@2@Hz^%F2x!HbiX1Y7oX}5AVT3TL9(c{Hw8RWPtiuSSB>}C$^ z8pzHZ9-M6zqk|k~bmc(~INEWLsLE9bXS>BK4wCK)=%-SRW%-4>PbTF>gD2!ESf47D!y!Z$2=Ee5X7fUdK;2T~c%6crtGfIb>_dJw4&w9lc`9f!R&P#j|tu;Qr7L0L(Hfs0O!xWoSU7{9rnosv^--&3jB zX@=9gE{`aEM)sGTb~>ZA*BXGr)wi23~vR0D?eSb!Z9$1io?WMp{L02VtU17bTioH;-gWTg9Oh?F>P5Zwsbudv7S64sqlu zSL&*5su4)8s(U@h!xLgtc*58X-nu5Lw+O8_j;6eV@W%1s*5ZoeL*5_E=KXm-lMEXb z;Za_?d_zeVyk(oUt@#2ji1Yb9k|Wc|5$>xx3{F#;45I4kk9x)C1I0E@C7eat42sRz zokcp_R@j>q~WSe_36s7_^L6=faC$S>X z`ljlGj;4IjD|!|Oweq0yXR)xqO*l-pl1yzr2UbZGQPIzQiSd`3#qr z`lVbFC7DsflU!crmv{5oykBB17nl3xS9oEQUp~dOJ`aKiBNZujOago_sGq#hx7cD`u|G?o*Ag z+>_tT$0D!U!5^ANEv)f>L6gYU_^Y);otQ%5NJ$j&? z;rV^f+Z&y`^guCtpuiUlrL*?#_5*k!#U)kg7Aw8%KrwTm$o%seE1E0V=Cp;}vlxU4 zSyLJ&e6L{QQXPF-ag`#;hyxUzh3rHw+;++b6+Y+p;k=Tc9aCIs6sP1T=Z8G7+--U=EqR%-_Y$42&B5QQDXRolsC zZ2~Mr6>0gQTvmrQ$lpQTDm_1;(0qqz>>ge#RDJpNQ`i$%@g_YO9Le^lJ!v;uXeqq% z@&7*S`<&02$Vf0(}~mc>?=f z*l2Q9jiys*8!Avlc{D|LM(PX!_$dxNckyC0Td-k)s5Y;u7Q{Q%?i%aWhC2qY!?b!Dk%P$|_L91>)|@>SxDHMtkRwwQg7#PDOrG zHR=Bls>xQW=I5SCUS}i29ysDS=MJ06TT5OTDUYC769pE(^o_1f2EOkjz;>y|05TcK z@zBLuvF=~c7urg@RmZy3Evl2RSbkW~HyM>zv2gi0@%dj!Mj%;agEzwAwrK?xo|x)P z-k;;VWf>h74riuIPDXo4INU5;>&2ITkveB%FF@kDzCDYcuD9x{w~q)LxE&NkY#adY ziSU`3Y<>HE;cLrA`lfFu^{pC(ZaoUPsT1Kc3((*?{vqHp?iJ;%2Qm6~5?nw1plThX zuJu-3;rw?ah1NLVa2*wX8dQqAJ`q0{@kZ*M@?+xqsf~=AzCBO)iC`Iro+W<9>R1s! z?aBDD%|48Neo6GRA)eK@lkoG1YMpla`Ej3YThG`>uvWv5LN61?9)&XT9sH7s?=agw z@f~~$-jNv+B_?Lbk`h$Vk`k2ok`grcc!}uO%m#=Zoq;~(!V>$)Gm-$76y^Z}Ic9!H zGE23a8kagIw@8q&z|&+o8lRFN%bAptEH?`xs|}WVih@X-mt8qU$hZ1tH|DIT19;*Dp+*ED$*-v6)mkMSVi_c zSVj0Vn!}cbVs_7P8ruv9hE9$^0?vtn=!Rogv-!i6GE6a2K1Qmk^^VaDT}}@SbA=$) z4Sh@}94yC&IY)Y6&Jh>O5Go_n2P#z>S@T~p&HHlB@+?hcEK>K0k3k-tVwy$<|Ffmb zQ}`+EsNWaO$cB?3>NpF@hQf`&NFrxgMy%Q7l^cOP5WJt$=bid*-qr%lh{J zs&BGf+-mi4yL58jUS9R>Z&ia?RO{`VzCBNUi(pybj>w0BU&s2kb#mXBS_$L!KGjh1 z%7NL7u^`-#us52SP-a?4>^P@t@+4Gpzbe@p8ScRBMeDDG*_BYq$5hFDtYkgItZye_ z`O%0W_o~-BfDtUi^6#h)**H+pPdkSlAgVIa_F}#y^sV+a*9(BYoz%C=S8!j`DSOjo zxR^Kza6O}*ZQBUW_3b3M?rHc6WbLiD%MmQYdByonuAQCSH|C*2-+ok3Y~D!U^zEd+ zRdChxq`1RGT3}W?z;#@3RnfWi(7C=n3%J%>wFJ1~yrL&?P6Wy6X?k+sm~abyt9{S) z4!XXb)VC$Rr^7Wh87}6r0$iUI&U+i71${dSt`%ruJvfhG8O~1&vUy|+NtnkX&fAmw zrbQ_PO55p5(9(f65=LW9_PsOHW-1FIHo{zkp?IR-d0}SvE zKL73{8BM=7*;0^QOHHinn!@=Zw0nKF%W9J!Rqi^3Lj(5Bq2YdTXf%Vr$tN@DTi=XG zSLTf3y^eWIz1jsO7`U3pgpseXysDEnE9l1HF_K5ZLI~W7LOtMj2a`}~xggMI-NQVq z7Udh*nT%>orbN549^?eMgXJ#?80#rOnuTGLU4q465*3~m2;NV;8+Dd-P^ynE1*mof zTLx&DXxf3hCueH)hw2ZQPwSu`~{h0CSD!WIz$F2&Hc#=@Zj9n?`#($_upoqR)^+@x>QD@wY0I;P;}=!OHtJY7`#OG8b<9%7b!T74 zXH*9ZZkRA1d?4x_7Nt&#Co;c1@tt{l2ac^Gm1NoRRkMWrx+NvdOf4yKyQ=vWGcZfu zLEJ4VA)LOXgdp^i5+cf0!h%|#4pkTh23TH5%y`MSM2MG^z*tL4VAUlhh?ONJ$dd6A zagjxcS(#RJ7c!-@c3E~rc&w}JL6;~+x9IN7-mHW^-nmilEM)sEjig&XK?0zplDJs! z<=5`X5Arq2BrQL#WQxKwBL?ry3T_T@#}cbttNOV|v2`h|?h%?@3afk4yHmd@E!(}z zwgSAtGAh~}ncHZs?i60-mh(o%R$eOzTpSfk-pJZ z`bNvrH*!?sM$ut;S~fc!80C>Pr0_nihKgN9j1Yu$L zsMau%TZ@TxRV_7T;_9gC@Niv2)NHJd52y|WK5B6#w{>DAu(*lycKIRI(Ao%o^z9^Z zej>tEyHHT^y1_F1{Hp2*0jtVY*)+KlL{sS7Zx|FC>6^Zt)VEWrHBegZ`cCXy1Z(xa z%}(wcLN@g6(;M!azCBNUi(pyb{!oxfh1PEUdd7aNj%w^tp<(PdT*rS9915Cx29ldP zk`fd6AGH;5`~}s}Gz`xYjfF5vxvQeV<^AnKYAGUil8KCB8#z ziSN)_%XetWcW90I4%X_vQD>>|KtU_`4z1ujd^pR}I`uoVh$WuvCvzfka#7U(%+^C? z@^F90_wKO*&0z72(mQ&ETrI}cUpH4PYoH6}3FzV-p^G0!S2l(&z31o>OMtH5`(4oW zT8E%QSGELQ8nMc?GQ)ojS4%s%QD4*5vR3zv@}=maAfhV^==#7+HhovFjR=_KS8j_` z=zTwOQhPp>NBviw>(A$jhapJ|_N)qF9`tSy!TG&@PkQzbH}45!{j26ZF~XnZej!P&=X+p1wEuy{#l@2? zEiHlM6+Ij(=iCB>mfTOk)CZq%HLgz4(yj{f>Fw#$_?0QWwIQEotz}87L+BP+=2~^h zpmH@GwojPWO3RcLDD0geKbk0As^`p!vUkERZV1{gP~Wu*@?n2|JQcz1POi1UsXMJa z!4Dty@_lt)ir#t6s9WZDlsP+{@DYv2jl}!Mwf~yNmaty=8(PDEiPp@^I_1yfY)7J0 z6#Ahs-y8R2TNJCX4+Q1HC@l8k`es(f*h=-Z)N(@mIK%_u$8V(?mj2!9ao01v)n&Ol z-`>jhhO@|{&@5{ZMV+D9{8lxKMC*%JQqk4Ywr`DXgS4I5TlJ+aay3vYAZYrH-ZcHC z=}T12&7|K{4X@N+8kWz{zz=IQk*1D>X)Rl{-sj$XZCw*^rIa|BtBDCx>RE21m0$K~ zPQefRVwNkC@^d}v(fJ_>#yj(a!`c1m5M|yRb{}+tw-wkojE&NDpi7U8rP)RU=(a#j z0hZ#>w`R$=fgo#^eHyuPpcE%6wHnA429$GL^-8E#!6KlB2DA}Q#hmc0%{pW*TWBbA zsiMVuG|nINI;(#4;z-yb_}%ecCvCM(U!B+Toki-o?53UR}@G(%EI8RVY0k0@r<|}#;zqFH({HhE{lqc>lgHfZ(s?q zB*kgZ%DmuPB#b0Zxq}z5&Eg6ni3+vE=cR;}Ht~byY=wjEe8d%}Gb3XxZswUry)UJ{ zWepw|OPFd61qtKufB7Qzw5_T&?@7VY%^cNx9 z(n_kSDinvgF*R7s==OOqE`*%&Dw?c}3&=4V50I77NHi|&Ui;$&ZK`{5sX~|{mtaJ& zh^)^$w!#ebXgZ~Pe1w7sDpW(cWxkV0m>Ch^%o~kH3*+l~+)(f|S_E|%_2h6WYR+L7 zUAd3#d{8lBWM6sKl5)_JDkH*CN3(0fnyCn&Tga}H4&e&>Y`1ni+QlW`s7IwAK}Jp~ z_NqPtzE-(I4{wM8VD&IVzHE09AzYvYv@!E8HaybJHZi$OIIs{B7y~NkA}eG~$XKP< z+DuX)9*GxQZiLh)xkojKud5m&U#p3}0K*^_?$|BVK80k!1nb<`PL)10XJ>uJ2}FO5 zrZpmBZpf4o>0*OSYeYihs|<)s0I7-wkY1x!v8z7ptx5=B)mda40*XRK1j1X~ySZie zAg#Ru0ZDK`gaoI5xVvl@)k4E1)4tku3*IMnFDvKki- z^+o{+2iVjpV1bxaXju8V0XAB*auaxtG2bmuxCRZ*O~uLyN7%|)u8PzzpUROxA4%%2RYhz`&Y$khDWf+L!j9o<;DFmju4<|4z5g#xp zi)WAn1eTd4lfV*&KyXbGfMc&3d#AcEyheaw+|NHmKFR_}1aVzG%Gc`B;G}#Fd}+>K z^IPkEJ88V#>-~Hun{jXR-fD|Bw1u|RU@NsZ^MieJke?hmZX0ueT5hDzK8qaDg8SmQ zxd_H`^KFQLHS(}ui>~q0Whz#^LpVcTyuN?|ha$hWob`P!v`>hMi~&1WLQZ8t$OUJt z!}lGt-HLqw-B<;KJ=t4_i3XxZF0J)%G;NtyeNg3I!$Ddf>DP<+LUw4NB@fgCo>IOG09( zP;r4NK9)pGy#Wyx)6&6^XDnb8p7wZdXF5eqfVASi%4jSJ3?6bL@Pb-oZd;A|@kob)2Tw;Ex8$!DIfFksP13vwbDb zb=rG*l-@@GD^g;Y9tEfx?TynBHsmp>w2g>n1Hmqf%oa-ve3B0?0$_cpwMme?H=7bYBh=q`haN-8Cs}c_K z0m6AQt4;(UnuCk-#;T|d zPsxj6qFVS?RdB%L>a~15Wtbfjjw7&dMld`Zklsc<9JOdS5vk~r*M)ftN*A(46PRl^ zlhsyCTC%^E!($&?p9puZRP{X@tr|&JReg_pj;S^Ws|t_C!Uxd`2wli1f4!`$HIRrp zSi5(X6R=h-8}I>opG-a0p$Mr5JCM+9FeC{rgJ8!YUj>ry&j@5u@C1`QN@-;cpVC$# zHKb;c=1{6U+FW5JB$r~rlCAsjTlm4nyzlo;CWGHV@JK48gMW)$DnCS7xrd^s2zx&9 z8E#JSXYesIi6w-umFI~`FR5$_EyrI5%_gNi2-f?hE2=XWf_Z`P2>(PmsFA~SZH@*o zOItRu#f3wJM|PJHpqa*!29TSifgX^=frzGxdSjLj&-KVf0yxOZM;-(4*3ykx)?2Y{ z%+jpWEu}Pu_tX`6*@>BsLS9yW-$!ZDmcP?K+jB)7wN!4z2mH9(H&Ir&lzU=Le{(`# z$e^;V66`aHs`&hfYDA(?psf__IpeDfGBv_lV~e#K0AE#gaor^Q2NpEDVF1*j`8w<+ z*l^myCUjk1=V}l2$WC(-gJG>QSP7)^D-h@49}8*cf%1Qe%9n3Rv|bFXhw>vMS6m=w z);7_J^~i|veNO?!w6eI2Y*CSui1AR3$U966cS#xk2Af>h3Qag2tGCy;WBN!jU{C zAZ#nm3Ebh6R5nb%E+}l3p@wNa0BC~iEc&J}(Il?bELOnzrv+Cf%M>KYgWj7sa5j}c zfkL2DBTVI;n_yO&vCF5XY;|eWEOFU`RBe1HpkIi>hW?xf@p8Y!OMX5TtBV&?uk}=H zpo^2HG9xc)c6Jgi{a-NZ^>UR( zE+%N}3R2942q_WSiCk4%2wp?Pp2D%~<|^lywZ-2075q2@S!7M)SXnhMRF*;@oClUV zDwaC0w(6LsMo(KmOac7yUo=T|Jq-2d_Qe=Ot-vr4^acp?zo^c*>BhR$kcfH`>#qRm zdNf?*7qij-t3l=}HtvYH9#vLbLVv9q+L7tj1Ax9gPkoDES>L{~Qs2>08aOn%l=!?ePhIOZN4w{L*R%lkPoo&KFTL(R39heElMw!VenU(cX~P0ZD>o2Q?zF$Xx08p1Z{411+5pr30!Bf;67M~3@qn}NIYRuZOzW2 z8^gYSBK9d1W}s8DOw^KwAWWBpyI;=I>H2I;fTZSha4L&vQgRYGcEqBJmiFr8=MC;p zvmiF(9?{S2Q^&ZQDIcc%TNdCqcnRE=TW(VVV4EOLnJAXA<+gImVdD0!@*7Mb<%et@ zDZiuW(C@Y_z|Ms5slji{xFda&R0%~zZDwXlllD`j=xt$JVPba#d=#7os_#T7vu~2V z(i9P2;>YPvYw&6F=eG#O7I74IJ9d>B?Sq`tpFWwC!}26QgAXXsMU8`>)rI|`8H)cW57KFVmLLO73h9>CCBss533)g&0X*JIuJVLjWg^< zc$+Ssp^Gs?hgnS>Uw5a@C zd0)6v8Xw`)S><0@8nf*u4ITKT8r(Cx;j`5K+x-C8EoS0&spjm8!vUxKrXDiYMRX!Q zm$k*h7D@43Qryo{qa>)NDOXLl)z|o0YViqGd+=jMg9Pc?yJ3Al;zHa!sXlnbXci#= zmmRcGVE~1edPyvtw`QKUrbVPi^v^PAQ(~%p--w-cHGGzgP;6ondal@Vd^AN7lZ}!V1N63Mo=ur}m=2j|nP$tC zK;_w0{P?UL7uzID_{`qdo)QH4vR)}#mDDiW)P>8_@xPX)HOhR7z71=Q6jfky322l3 zi}(H2llkJCAqE~5qf7L&ZM1cN`p<9SM74JLMNb`o>f7r0ZRCTth56B(Sg2DsmAjOd z+P`HquQ*JrJWA4nGBE@Cnd{z}aX!htO2cE5er9*zz%G)u=W)(aZ#d0Bx9pHSoBQgB z3bPU(^TY@kmQmF92r+GpNmpg93qisT8hs&qIGxK|olMR_xo}u1taKH=TOb)>fAS_t z^pML=zov>{WNDnsfB%#4q9>q>4$9x+ey1m}YfQ_3*Sv>uKGwYdV0|Oyx&Hy?n=N~t zCeY#P1y_7!{UM`R)B4CHP4bg-$xlKufUFX|^ciY{BnIz6@JBNcq1p=MXqExw7!xJ! z9&$B#=>k-3c^V+Ok%TnI+7Y52Nk?{!fWsjoZj~IUAR@Wg4g+FS3JrkKUCwx2%!$Z) ziP2*e+MbHT?+r%TjAnn7Ga8XBd@wYIt@2Uk!)DdP&ECkUuNxb$M|3h-UFp8VJfYIS zFRIWhf=aE1iwgUe1W$E=jEef($DGI7%9>X#jgQG!5k<uD9$>E$ITPsua zHBK$nP;B-~&E|(3M`a9HrT~?2X<>KE$b5upFQaVcFbkdB5UVf9fw%>GZidWvei(bu zQOud*S~R}vawZ3SH_!=4mbV`TmMW%FrS!BkyLLN2dk^h5?by=KwbaB(LU;0WiH`bd z62$*HWkcuzjyXN$}MN7AN(0-ziG30x>vk!X0m*j4p$)R6r~7Da&Rb!I&W ze>(QQCMXsTc_MiNMe;F7(|quLh<@>8xP=Lr&2Xv@uh{cNTQ6d8T*gS-#2!?F@VL%s ztu5q&Krh=D${2>K?2T5|g|9}*;EO57T9y9AJN7UgT&MG$%#J1R*XTMzNvBRX3JUSf z6O95fPGAL$EDUKp4`V`|A9J=f_F=5?+I0Aobn^daYYtlFhoGGZh%|}l@Bu4xXh)ZL znU151T^en*vI^eO#d~zHlSYMs52FHk*cAf8UN_Oeiy9hpF_qBk$Cl{CO+S~U;(ey4 z3sj$BEUQFGZ}nlN}_P1-y6qzg__SAAAnjC zh9R|r=8#H&gweDkVB%m>5d#f(sCRZkZ|t3|$w)l&+7c-necL|PH7#VTx*EK7SrL4o znFeWDj;v|9#{??|mFvQSa(K&y3`V1U-eLkB6QWfLg%WJzhe4dqC zi87$1Dt(E5JXWhfIUVKE=Ka0(jp@gqL{gmKtQisEa{Y*bqejiZ;iTKj_^z6#xg&Lr z*4$$A{#o!BbhkBkRFY}6=CsNNrK9CkAu^%uZ;kQWY|aHTW%wI5SXCl;%wIcu*@YI! zl}g8|3lnR0y^y^{qKjv?PNnO~KzbzOz@!=%eWa20UZH3t5sBmR4uH=Qfu5P^pYcTQ zseL8m2K|jtI6O)$*|!#$xxJBkg?yyhgisVZo~UfW%Fvc}5D^ZSCH;LSOK@e5Req#Y z<(MBSg{iSIeMdzAX~vt&Lhj9RY&eoI?wBLFp!r~r~xcA5$rkSp6(akJR9;GNzAC^Ed2a;xv~tYv`n zNA9dG=;FYs6eKD{_Jy%zxWepccIdLk}8aW}0Jy z#EBm!r~qFs39Be$$cXz#OXDhhc8)?T2bJy(pBa$OhEQh&J29})J_wQsw!%OHTckj- zqHKz+=_s0n?7gpN4(uWv*2X);4O1+EFdnKwc6OmGPg&ySV(K@v-Z(8~7m{v6ml_y;8Y!wU?`F?aGt7*zE55>}IOMU{f=&_Xui+hO4YD z3pp#Ri#Q^U;sYVoQGv&5f{LTKw6H0jb{UXEezKSD;w}!u*#|5f1$I=!%YZZNUZW7ugR{uYwlf{ z0{!>4Emk@BZ%PzJ)g^cwE<)e2lrkw6jt_^91dG|?YmKhrnT5qi|3F??E`MwE3R93+G$U4rs@X)> z-?}Gz6p4+B;nZi@gG3pq|5Q30d9%LKXkqk9nUGqWkm3Zi_b0;z{@=-9p2>VuUo?AHA0%FS%|Sw_yAJAj zD|z{SHrLM-fzmDpKlB49lky^VdFbzwVG>Hixzt}uDSFUJL}6DtD8g9~g6>bv6`$|F zs_|Vo=X%n2V{L^qvnPIYb)%hdG&)c(G)lwC?UcTEXP3_=-kpIQO2?s~V-J zt9N%aN~^P@`&WiiA>f^(a1u1vM>S-&-vz1IMjr%AAaN--n-sVopZFnL_>|d+wmr7G z;JXv{-A%K04gw#FD?l_SpQbukxqo1GTNsouPV6?ZRbCmBK)$5wgjy3YDJL7(Rr*85 z%PSN2+eq@)n~@1*d(<=H@X^ckDMQMDt2d$~##d*cJ52->So5$*8|XxTP?b@B1%*&j zL&54KObY9c1cAK!F#w1#d-VbDR=pQ-+OF}TU}0j!>8;1H>elQv=cd^}1T+hEGvm(vn<2b*e>i( z-*iq!H*hNr+m@$G8iod9!)%X-{L+Lm@039>@EO5Vgd0FVVb&#Km|wgaCe4K7;PQ%nP69@)Eyfa;v!9FBK24r6w6} z)S+U#mnwE~v0W{eJlD_$ixB`aRN zColM6y(J>0c#Y!mj-O51w8n5F877w1#zx{=2`#p0QlKPL^fw5!YFZWX26yv#uti73 z`{?|^yAikT!81a?e)7>Gj?WpZg^FWfVwY>O6H9l6>{fu%{5@$eoKz z$+oqm3Z9+!Oef4+%N8*UM8>l?l$Z?AnhhiIWZr}Vw(Iv;%0vji2*j=+ZGbav2gsil zIMb8CnGWD+!#o4$(g4my0i0hp*Y6 z4i_}J=eO5#yHj%%e*0=}uhw=(e)}qJuTfrpJsAE(L3Mv+H?Qo{3XDbgXz&$@hv{_@PtSn1;kqo~=aTS+4OY`&4CbN*J~M^f zgT`OT?uI|;)DbhWdcy@I52w4^BKJ*--%mA8yRUBjwELBjRGVp>{!ZZ5r&4APVBcP( z`|5c6d5)b|VAsN`-2>PFa|cLDX&pdNzMTiY#=6f5@_saZ-(KWI`I!U7l|hJl_-h7H*ygrYYafwIHUvuWmMF7alqx=ntSmjp;TEKGiQ-bdZdn~*n1m4*@ zfV-=zyQAEhA6=Ckvyw0Re4;tx4_e7r>JmW4$7O^Wu7&JmiYpeOW9gM9s#Tle=5fGG z6xELfk68g3Ke0e#5}a%QUnhfma{N%y-&3~Q)yP2AoMC?cApydes#hhi558Lpz`LZFyZUKy z4C`^#ozE+Ks^C3wNTWMpH!dEiE68g9+Q!}IK^!+{(FMhMG#=~i26FZ?%+R3_>-GJEFN8JFGMFqHVG zMrO}i|C(g>w3Rf;49ZZSmXjG|WjJ^^-~gP6k^sIzX5a*e7BW-F&wCG2gY7C-0F_I6 z&nJWLE=F|LCn=TYw#_ysD7GT>he^(pYA#a(#1JI@MM9^V%hb+T7$s7qTkYY?sbgqY zSE#VCORy;X^5c`30mb}mi_gJwVptZ%7(uIt*`dK(1cJhFynTyDA;pj43jhl8(?e}& zoHz(km{N37xI$76{#@*(D(~d?-ZuJ129?XhP@S`-vstVP0e1RRjOZ6caSW*v6>Ya3 z{x%2nDHA}=0djw_8{-mxlKta$g5dT29eONW=Np}yIO$z{Ytu%5Tt^<{Hzq@rTCQD z6m6Mja2L}vRiL&l%}$V)8JdbZZTf~}uD0TkLB`k&&Pel9Pc_Q$_|SaqfGn8;svUF@ zBIYDsdvkP+mnz8XmppRJ>CvrBN%6x(m|RK5ofvOhFBgT96@!?QKr&1ijwvxasoa-@Own7lZxT~XA7C|77USow$c;B)IKh!2c z%@R(Am#eN@ha*OsQK*2UIQ4t^UEQs3M^{@l$G_ zxk-%`#}WfbX?L<|l!aYbUY*R2TCYpdZGa}+cet{oo8i?6BHrzDtQl9W*CmWYIR(V} z)Xwq3%+nPOTdE%BFg&JKLK3a_cTSOLhqt4McXD{t2VjzS1?npQIL3H)VtX_2o7&4n z;gp&<$~-FBr(FmHFe%lRu3Bk2qum3iy3;c~vA-Vh`r^Cp7`6(X%7s|h`+P}7Jw}Wr z6%q?}te5r1_FP3JQHJMYyJNi_;~k$6&`(r>_-9FoSDLx@EKBK(WnRqHp?OOvU>wrj z3GtS&6Y_l63E2>0XqyY0A$I{Kwf!J0GXF+yfZ=AU70=iLg2B()3kPjfwM7SheyT9g zuvccoB;U6JA{$VA7i&P;7G;=gb=rBRZS#sLBQR}}lxZh2%kNhJ{pgXCTKP{P+4k9m zn^k&`O8dTfGVO|3l=2^VRyY7E22FsyI%S_qb?A;E3osV4+lDO#1_|BI7uOso>{Ye( z<@Zu+S8WlJ@)ZWWfAh$L68iRSfFAZ;hV82sHAcX^GrMgMj;4GR&l;Kb9hVnVeRk6< z?rIvvg}{Yv1UcWnI(?5)4*~KAQbD;pxm&T3Eno)RSUA>etl$wevEHvl zu^9jp@p%tJ_Xyw-M)2-U69rbc4$RKz7u4uU1C5ScdSrlDfcCiqa`z&5?hwOL03!lo z8$<)hR1Ju>tphoPsYn=KI*_}Q+riMhSlp=QCJYkqXCN7>$GV-eSi7`9BpS-Cm)A-! z?2#7j`s z%0M1?y`T{NBFK2(hDYG8*DFX?Gk0xaRFrML3`YDQW3G~I|HvEphiYUYdo#5Yy_y*hX8COu%yKS4 ziUvOXk|F1vVzDr4K~~yu8Q(cd>(N~qap5z@yypXpJSk>naQg}v0?@A?LV>dfV9R2Y z&ky*cnIeB(I#bLPz1Jqw{1AU9lRhwqn8tGPXB5{ljc8oeMf(eV7?O%tnTR5k_)ecL z*2egmg3<5+#vsg=$+Y6{v1kff8LSfHf?}i$w&xFZ2L8#!W)|_T3gAOC9y9W&2r%g@ z-hgcF4MqOpd8uHxo*J*46Qwyty~Fqjf9XR~e34|HC~&4d-JE z!U?+S9<;{l)<~NX>ZUeu)VK_J}n+L`b(J@)8yj$q=z5yQ>ds6_iB2OpOMU zs5&;sA6_H&-3RxZH1*d$;yO*d)OgK>HFh4HbptXae4yKHqj`^=bG0R|XJ$1-hz?jeDeOWn4E8uyvUAa?}H zCO{ETp-%D~)a;wZG_JquRd_D)sJ7PPNE|gpf`=*by_z%h4(q{Eq#;pRe=IyvNkAL0 zL8@9xYZXN$YIwPc(#+MN@m1iwU16zCCbnT_PMjN6xACwkZk_4qvcuNXB3ASsjI(RM zcAVYx?qbu2_ZRQE8=jF)vIZRC;l1WqWG;_zn#2Ipz~!-fCP~@Fmk5Jti$FI4>#Goi zTRs|1BZXE&(b*W7<*@n~K&ghPmTO@!p018@6t0{Gy>O#z+I=qTZ=f8sUxGjx?Xq=X zo1C(*sdXEaSW(suPRM&9WZTcG0^c(=#LR(&)(8GDM>a&Ck<@^gO(a)O#+4Woj|=aU z?)BulnP=G>{IRZVm*=6frz}IB$>r!bT7qz&)fj}5x`^8?k_maygL96W@u%yHxGrn~ zV^1R|@{8imjb^_^Yq~{|Yu;D^GBenegJ0N0wC(g|6VbV(zLt+gw^QhtI5f5*$cDy7 zXrG%2Hz>_{xoit&!L@NrTs!!%>|j_ly%&1{MOU}3`&FgMAx-zkiKmv7GX74kX{5Is zrYu%AeZZ!uTuD2f2f~kRAQW7qsR-j5X;^`LMvGg6GG^)BKs8Re)&kBch7EEXUc;3w zCd5#ff@9ohn(~E)L(P#}0x!sz@>Lnk*G$n{y{GA`s9&dQ{mSK-e(eiBQ_ga-U19gB z%&q&r#DCLFRju!ZXrYe~8mdNz-ct=Y{ z1@Vq5+7#j)7G;pokkQqWdBL^P5T!)S>LS5Uferze8QG*s$@uzE3_%$W2R260OU%)mZ;b-+w3_3TEst#HM`SmeE*c?A&5)aF<)hmLt0j<$IRNe*!noGX@Z#6Zi;=DbH})gUw0L4hAY#RvVEHFf2C>p| z{cIU%#GcIrwZl#lcv~cgNvd;CsG+iNTjDmGw2RN-v?P$Iy>GBM4bu$FV_5iPg$0lt zv9LRNG?mk#H}czM*K)Ox{Ilzm*V8aP%oQobEKxV;h%)9OWbf}n^7`xb)cUHyIdj3G zc)>Un-R0b`Xy+oy%1gO_Ur;-6sq=s2e%TLebN@qdkci`iI0^3JFZ?w4O>TE558H%= zvAm{;uH+%J3Bw(EXi&}Sy@Ga(8Ir^fG*XJXXqdlJN;=?~8(UPV z{PL|8M61ZTx?UMztBk-Wm+Tm0iTGc7~r?+*(Dh@nQ5bT9Tad8@RERPhlnA zUbefDDa4i4wa2J+U|(q z`j*ko7$HWAVh<5=2x9|mJF~a!$=(5AJ6YuK%}OY5caQFNNo2Hx#UL%9F44)b=u4!U zqK=YL+vGiH0yeHJq-!K#s&xpR=nA&nrjR+b$&5K3y>)2L*{$vYyam(~akdC)nR@Kh zdV{=fIRqAnisdGmJ*f21*awZU_a7FedtJ=gu3s*suB=HaDXz4Exl_htVk_bpgOrjn`0sSV(O0lnH1-c@+Xlz`h6l*EMNg6n^{PbJ2hr2C~~)^ zgWi2~T<>bDi#ug!Hsj~;N;7^AYygaxHVI;L!HjqrBM-aUu!OLyg|f{>obj-$BVJIG z4^es07sATzg%#PPRoa}!>)(px$oZVtj)?Decq z6&oYH!#yK$^6fS~tch44)ZF-H{b+971`zYe>2k^3eaJT02*}H(@XrEdj97uJNvOtj zKGO&SdD=xnAo~BKk}vr7OXEXatl8#f7A2=BZmeU zX`Wpo?$zmyqv_YB`(R4c9y9guvB$S(is{#B-oET1Nvynb0?g2{0D81=E=<_FqXp#a(?% zXsMuQmg4 zh0dA57-f}OpjsJL#^tLfA!4#EO=rADlyTZLzwDPNnL|`G*dA(tSXO9YLM~!u=lD!v zb?bAJ>YYTr>RJ^ut0xtP6}EL!Au-sHROpXpCM6XTMHSZ&AhpR8W2Os9g~balsj$7= zM(HwJbgaq%sBM%g10dKZOv{a}b+8Pgm;%rprbVKeJD)LP37F;pZ^3YY*!jzh$lwFK zvOBrer^1jDw#Ff6okJ@`V?xv?S|ssTU;VF4l39MCHY(4RU&x0F;8$VmdU*qTci3)1 zoRIx`^5?2Iep#l8?XN?Uj)!xJa^4abC2-B=G%@Yqe!N4AIl@w+ZT?x1_r5R(N6ed8 z%`U}B?@jgDO|$seiEXQqls{=11Tx?Gw~+i8xH!l|Ds>K}M?Y#&*xku}I=7qqe{E|e zbgDPX)L{+)n<6x0!Zf+X+tsc^-h_bME`fO;(N_Y&axG$;-UYz0sH|6CD|8F=BR=R6 zQ?knYRSLyIcIOa8$3DGxyie~AeF}yUkz;KLrNn{VgyX$W-)}pjXrzd)c%!w_M}#Gc zhoqiR#B7vJHeO0;M|#@Q2$+4m%)j(7h=B7YAZcOiGh*mno3rvF6Aod(h#RWYYz8ci ztt2-zHd&(%1}5d0#_swAP^i*Z33Q3<@OrgMpzCQDRj{NB^gOT9FuIyyYNTNpNHIWf z#37=wfvZ9e+&TFuN|Kb)oj!mzZvk#8bgF5Lpbd(KD<>--bTeGA*7}Bv7G!-3BR+D9 za#6?s=~I}*ei%H@TGWF;&+i@|`@5W+9od>R*q!`yANe~~vy4#V^>-d$*}+s4{rS&TM8UZGuwx_G3SdKF#DHWi zc!2aZX>1rdB-5i?XRg(^uE;U?BhFXhw`Bv^?24g79r=E8cvKa0X876)e%Z;btZ03G*Blu8kh8{dGm@CEANAiJuT`KvZMxe(?53`)K=8i59=w>OF zxxv+{#MYzw^NN5sYdtE@HjP-#rFJ)KJu1=p7N7ch)QqdR9(79Z+ImzhSFJ~#(t1?; zbV>%LP3`#>Op<}V;flh=HV-6VhFURuZOmdq2m@S(INhCWGh<_Saw$o#QUN^i3`3os zWeEVOR=&!kGcE7yH)+NLh*F?oV&B$+CZ2jAFf93jA5$-aMiadJ*tI3xqFfptQotc%H@$|~9m1TL& zByNw%nkC{#q687lAcg=Q@POP2*aLQ2BmvxzrWG*3fN2CBz~lo2ZNQKKf-#K&6Xy5- z?{n_GRqso(4HFt$%dhS|_k8TL&pvzav-dvd6tD&to_^u=g$yzD#Hj_luJ5Dr=hoSymQvoPy=Pnsdcre zR63D@03yJL6MZ^gRQwCIh~8%|1_02ju>7L?Os1)xk7tce9QIABLyUGqd6dqf`pjAJ zSeTH+t5yqBC7)I$mq!p8J=_S4R9Ko<4YP1XebyECNRF&azB!Z|i%m*pV4jLc_w0_q%>O3LT-Ujs`){zvus2LWuj*3j4_ag1q@q*# zB4)J)QNX6QP^3htj#>@BRgs;QMdDoz6AOI6M5wMm6vaLbn+#sO&Qo9Lk) z$3`PWG&)wJmo!2c80H>tEY-vcADeYXHXQ^W5o1?E%w?@QdIM>|w@<-70&to(mwQ`5 zU|!m$=W7#GhWe>G*=d#)Mo4w^TLiqw!ls)(WZLNlqexYSqS&p*O<0D{?9HYeHX$$gA z8qa^rh=6w+FkVc{-J2)Z9!dK#Gs${#0+{MH3H}d3g8zMx;2UCYy`H&c?Wyi!eFR;* zi`x(z^E*@43q5dK^=_+KPG6+Q=`(v+6jkRymN!hSeK*`q6DP%}NnX}SLt9FHl-sGE z^Z!+J_eOPBJAddU^Q|23VP5Ug=_`B2tB5o0j~icFpT2S_RXGCZQpkf?v_0COv&V`g z6jcUAF~91~G6>uHHH0Y$;ob^u=Olx^B@CQKdXAY7s=*6}ac z^wz}A9S7&VWXasft{}PKzeN3&ye@c2YaTq%@~nUHmlb0Y4;mv9T`w`3$cnHK!mwzk zJt&;%DD6N(Ne%@CZ)gyC%sWafk1WouYU<|5*dO8})a)>~*ta~!m!~<2V(>-9SbniZ z`Nafr0#+MHWZ1Jedr|XH{Y&Oj=(?!>QQf&vN1{j5^2>^=`T7!x>)7>kElU@}m3k^% zEC#+8$7S942E{~NLj%{+lGyJ9rc3=V@_;>xJP@0_`-C5T$>dRrJW7K7AdjBOgAIqs zniL4a3sYP#P(!qFT8i1TZ=mArsQo%F>JiiM7TkPO$wCe$wU$QgsB zm5G#m=!|}*^h!&wR zMvm(KOXfX4M+j}|m>5s0|(4!!U%6ZPQyF8FfhzqV~7}tk8fS9S%0056KKBDaLVhh^UOt5UL!xbwk>F z%ZXWh?qNKm&`m02+nGy=n`k7Eae4%i*LD7R;Qwm^|No8fe_coW^MNCwTsAYKd~=go zv{-}NYL|_RcvoV7?jCWj3`LsMt~4PK-3LRNd)~uNrXEY{;um7jhfOJIQ~E*t0KcwU zQ{0goX}n$-#zd|Vls`235pu_^Td`5|8R5GPxiL%_nWRD+`NXGd3Z!^KZf zT)ENJn$r@c%xQOvpL$>LZZT%Z^twWC;oDss_;-VOZ4FqaVA|{^uh1N#H9c!&2W23H zjc*v35yoGLg|QaGjYSBnhjzmlgI;h@qj$5}ndc8Uqrg9%45gkLNt8PjQeh0Kk(Dofr zDtC_D0l$J}O7Fvgcet^tE^TWwfJTZRFe`%TOEgr1srdLOJ53=B_V}PQNHReNAxJtLZJ$d-trN zEM99n1H$N46P<_t3Z~Kc(g?c=DF$7?3=Ie>HHnV*N_k2XAWsKP6Yn-QRVPY^14u1V zch0r8-*RWFl_y_kyClL$%F~jRr=>=DTH>Wvo_I;h(^9QGE!E1?5-e1hDJT*fc++*d zR-Tp`<%!1&Q=UA{H&LFJ+RBq42Km-*G}#F>Z|BcmW92FJG?XW=q-@nmn%m!j^2DanMtSo60MEVhG*c}v9Wzvd7$n(Hp5S9)rb2;~ zfeMvl%DR&sNK!H7Bqh=BP}(J^Jhhg-oCs}ML$ll>v}F<6azkjG@X`<(FNx3;&>2%} zxhAybL};A8o(L^PJNR6c<%ZCB%!Fp!nm1otOJ9*NFnM`{wuOPV7w3K7mK`fV5n4L? zt_5sOXx{q0oCs}2DxUh+5ZbZ`Ep;vkEqWA$rk;eB4t7LnhAZ_{gvRmKl5B**NK1F) zCNx7Bo5w8zrDe5ujay4EVE3qtw=)l|rT5U%v0-Uy@WTy((>;ytkAV7BrIosR``|=-M{3tL)-IFsVw_-FzQ^~yNeQdW*@V{8`Nz_z_7^Mpfeh0v-?ZTn4zla5F--aX{ z;&T|`+w?*~KeOR-DG=IWZ!{Spe9|NVU_*?46E5eobR4;r!j&&5M&IGj$F=uy2#P`S zHc@MC0kJ7C;;6nQDZn{CFF=I;ZqpZk3Enc%g)e!;skZ->|v#5g-* zii%oP;E)&U(OP}AL;ygbzr%K69@;8k^%^rtMEDc?pZ3n7a_Xi$SAnDAS6LDR-n1Kw zs)(CU@o7Hcy*(uL3GY-P_#E^PP;o>&Kf+I9z^ljzvebU;Rn#%wYd`j?7_>GpBpqi} zvM6r~aLXxdO$uo%^ndfX@(UOx#AS5)8ON2IdKd>`EOr3o!(i&j@)V(%HrFK5ynsl0 zSIwpY4+h%2j%ZRKnSJB}T#H%T(?*%4SUhA>+BW>0%5w;qMvYZ(nz=fF&Q_(>mI@3t z$7^jJBr2Ufq{C2s^R2Wq5$8UwfeEXKb1aGJ76G&UbREDd7DmM8s${lvdx&jT^y&X5 z-F)o-^AYEtOA+VgM$!5Fc`o%yCKqy^3tdXTS+BP)BR! z37@nyQtSZ7^mBXztc-O(tGAI>a{N6VX`EE6G(s)(!|5G~=Z#np5Su$vfM1=&UYwGo z`&&te@mj``W+ZbJcTV`Ez!BL9cXi1z&kAMLMG3mq%HU~TqX6#x;dt1u70T$E?pUtP z{aT?cq*nK9d6GBE?AO{PUy!q3Y&r$lQU)HKRw-I`r3%Zt91QKRBOO|TK}QS3{oxeZ zuQgW>$j0eR-jS4W-pPs0DNdW9FV|3yPWiowf;lE_Ki#Hm)TGNB&iKHUgZE)d`X~3X zjE~zXbY+Hm@2fbbf<0>WbsVIgHG?j#vzQ%9Lwf4HW zW4fzOWu%Fj@e;EyfTqMuxfXJsOwoc7|vX-{3_DNdCvN_p?%s0*7mCbbr?wBD_dB(`_zRVhjX-zQ2os>E=oA5j@kq9vCSEZKzku9`|=em$GeM zBLzdznAP1$7kF*xPG&-$t2KXu&VeMeE;oMBUCRhRpiFV6oWebO zbxK?|$6b3lMPv6kcdwn)4MCvzp@ibodI!N%A^P+TqII!ey1y$!`Oqw~PtPNpBD%i| zqSgIUak&&Py1(lSY-s0Y=Kii0owXsIp|YnRhRUu1JW*L0RQ8yA+@`X#PH9saltH15 zR0dTU1$QSDfD#cdu-Dgj86||_`TDNhd2pJ4Z38LBf^sVO)|c;BtT5^!l!ZUVdgU%zIql6-dt4cO`PBhmSB7 z>g&76bgqnQ9a=QpUH;F9g}6c?T48sf6E;~5IUxia71<*vs4UFU!3%`lrFGfFHhKoQ^TnZ&8Ae+#7z-%6G2leMWQ%dzAvW>o% zw@;Quac8wU=?0$W|I&s2(Os8xmY0{i%l+l$-g3E6EG{n(Fj*JXnO~)`{^%3ERh@3x z4KwpSzfR&MN+hU|L?03IekG1b6qd`J`V%>Ib+PJ_XlKMDzed(2m0w^yy0+t1|DK#o zViNmRpG3k)Fv!-4y=s9(oLEKmdpS`pE#}mx+NlGlR;!h)y5IQmRI`p)bRgn)<&@Q; zS|*XZt+2V0^}+l>Sqr7&$*g{=m8w`ydo(+;&=$jw7s4)3Y=YN;@Vc<5|8Q6Ncd^$O z3a;sNj(q0aU;nE=|HF@e;Ey_A4IYGCUpcV;36QfV@F3(G55EcoM(!%R5=k^3zEwGQ zD`(fZ?GCHOO1A4$`fz{`>IHpUtkAxyhm?9*N~Ld$6{J`F5~)TzdFT7~K-rn^RlGwp zy`#IXDmn{;K{*)o1~dP47xmgVRs5wIHT^7(J35Fvu18wy5Cs1l|MovFyvnii1j#y} ztEk@bN%EUC5cria93*p>(yvfov5VF>PW@ z_ai+icos;QgknDA<;1Zk<5c zPB;nQ{u_MI2(K>b0~gFWwyCJTOCMJCf#B|HeL){Qk?-R}OfL<@I{pWpR7n4Sxc;DB z3+v1J;Gz53`h$jIeMKKUeLquw&{(YR(g&07ll6zLK8*Ci#`i7-=P9ISVu6= z;V*78SyztkTJ0__YQ8c@7Z(fn^~rOz=s8w2Q}i9bMWV5f=9;JIcPr63TT}E0lo;fh zrYIQy5hbeAt4yQz4E4F5zRn@_BzjOc@O7s)e7*0Ed6>n*t6l0CQ5%%^5H~EmYrbvU+{hU4e>)#2H)LTgtWW|Qwp<)zEy??G*RUu((}DO-R4iQlIDReWc& zS+0Mv^<6|+$rZj1fIpBLP~c#0;FGxmj`*uHus@>CAOfy*f*v-h8pP#RhQCw|oCqh= z#^}D(L`+(8fx)}}W6GfQ;diABE#y}*BdLJ}M6N;VGD4aFcLheSjDEALuvk*ADfh`( z1V5L`n^?$|X}O?1Y59vmRKOU)4GtJ{Ua5Dnv=A@eu|632j(OnFJLZ8|@0f?Fy<;BO z+Kzdc;ydPH#_yO12C!ouX&pO_i3IXac@XA1lL-ZWj>JRul094Rx5 zHbW4@wlX|uW^0=vh<8^U4hX_Gh7-^b1OHaC!RUhSp+7Q<>Y z1G9Yx+>E|Ivw~2&v_D4tVmj2~m^HJu*A6+2R;-{Oi}^8|PwvE;RE~b0H5^%Zv<(Cc z*|q3%d{QclwJDK|Oeg}!wJTZ0UGH`kOgC0A7A)iPXtno70fAKBJNm_Fd6F6)W1*DP z;>)Lcmq(sx-BdA=Mc0N1Ra0nXt7^*4s`*z>cD~Gg;QK9rA9xvn7e}^DiOJ!P0(P0Q zAfT5RXnr2yHy)5I9BI#~qFxHpID|mA`!2J0O1p;FZk?blzG700mjT8bs0vCfs}@u< zDiB@~z{0CiX@S$XNKberj5P2ntO6G@IA5nXUQRMtR}aPAO1^|h(sq$`bS-VYFHNz{ zRg!wEqA(R&EuyO{bX6JL)9C^&DpE9&0ISVg0BGD3s0*x`0aaO8>JuEtH2~MTY*qbqerWuNPu=xVIhG4E*c*9ZmGUSQgCPzaGq$L-e8UD6BwFc zPb8o$CV}~C5()TwB7wtH1zvhGC1T8wu~u&*dc)6Yu1p{OyBSa$N)Kzt~47Ydbk-JV4W{r@4@osY&OuDu5*Ez}VCBm>aMxyO9&TB-zdUlF{VRD#$9R$q;s}SOxi`_Sw>?ONV_c zbP5(B{;uOSu%-0Px!~wx&{NSeLVY1|^lsvc7U~#P#nF|;LY;>!e7t&V3H5~#>MHJf zL#S_FfjRnY1r`>P#=FJQDaOJdjvm0FtI)87dNR;Ss5?&*>gx7H8rQ5)R~B>h`DzkJ z_xFaQhY8#qy$p_CQtxy?Eg$>+%+a+fp{`N9RQxU1`b0oH_busG+)^ zs^IABpXT}eA5i57Wn0DzMt%!Wyi~ooTo+a(w$6tcj@}Pe~LaV6)*& zX4O2LM2ky9eCFdQB@7wL(P95O<^rzvgj*gGZcDNGop9R^+%Dv)qFVA)=|9V#3r8FLtU#nWNQZ8Ml{hhTCME&bYm-Jyo6siopwdrdWtqOH+|LdTbw#6_a7WMTb^_ z0n?}cSp8p_I_8>Z2pENUih)`Rk|u5c_UTIRPFz2IT^Vqt>*7?7KH`PeIQoc*Nmikq zxuxD?vqIqO$zy^_ou+a}L?k|YV_nO0FX>I&o z%^461p#p9gu$T!~_{_Ap*tCc!+@eLnY~oX6(owXsqIv0EEW5%Y5}5#oK8-$5((eq& zGj2CJw+!NAVz@#&l3=;EfuX#nyc+f+t#9j(>IJ>;pqfX#L^ICHx*#dqHX?B)(*`41Z&rg!<})|Y)?w$3WHu)4P@j!SJLIu3 zX@@*EChd?1a-qlD_YbPsDGxi*Jv77j6wLSh4?b#0%o0lC#j`#=7pf7JP^k`(eF z_K98R=xa>0tlCFs&EPr{(GTC4Ex7QRR*POnTWMn)QJS=YH2KkK6wB5lsnJ4>F0>j& zD9<*^G=XuaM(L;;Rhs>!YSeK9h=T<;YE79Arbfe!FVzgY<3=>7|AC2rKxp`%@xlaI zj-{BI!Ypk%uQsDE6qTWqcWlyCP^d;fjwZ4r(1`9-s9(^M6eK>SU>VK$Sw9mbhTUTyG4zENdqkMdm9ZViV8{UHKMyedbn!`a{{3SClnBXi~H8z zNvjq34rAE^@c=gy({zns5-pkBo9)G6Wts0=l@xTFTxJ#Yr~WRw{mF~#cDj#nvu;=W zZgjUT@r(hcf6Kmf5k3FmJ>~Gu?%No0ZCDP&{$WC*M?amc=ZL(~?-qgY5e%VQog+#b z7E%i~#uUwFpW>z%lb0*cT6x&u$mxfIE?b_+P8qwe*KLGdMN7iGe&pdZo$8|+LK)UZ zL`rqh!uWF{#a`=^^fr0YL=hO_l&6WK>ZSli)p_ux~V=QE)JB+(5^~#r% z@*!4eFI87~J_N71iC+S}_39LD z8R2dnp6zuZDQh$4uKS2|&gZcx30AnWr<YHiALWlUK!~J`s>9besCpzH z12hg)2|;i0MtGZ`t zU}@>|2my2^9WS~sVrn!)8R$dP_PD=(ItXa;Rl2~A2Ic9W z4uutDajQJ)8Jt~r=@Nz{?Me|vJqgWJ#N5U;?GBg2nEf2_1hhWATE@ij0wn@LVjV`% zLOzp|xAh`l@fv&6XHORZ!JItMy%`));~O-A;tJ`7(RHdz2XiWE%aK8O)K(0!NdntB zR+FE%P6$}g26k^YfAhpaFAePk-9-FvRJ`$KWiCHj&@E)T@HJG=bRMD_Vunk-4ZMzT z`O>nZEf_`>yq728M5b1+7*T}k`-M50lJ3;^3wL2yt)1XfWPQ?d8SIv}%HXy1OXfUv zbi`Af8;Pm|pN8DyN(*COCjmtB{;jN+v(dozIh=ua$+uM|R3xvTTsh-}ijRmcbbgxXLt z#kIsJ-)6S%1+JiM%VBF^Z8>b&*cQbSc`$R!sKF6~lg~(Nc85rGmA78sJq#md8UM%s z7B=uA3L=3|lt+r8C_Ol*f5kb6QgK%FKt48Qu_*Y>vQ~%1lJw7u83fWo*+rvm(t5kf zLKjM_xru}BB+3~+n4!`_gy=h=$Bw<*_PbWp_3~Y+ zam)d$nY%Lc}$}(G9;*b;3=05{=N_*7{|{TdFT52I!qr_NY%yOiaM@- zNk<5E92HXMV)wjTsMj1qXykDqWcQ?3+{cuM3oSf*+y?NuP;N^&If*Q|iDaPf);hTd z55%LC8|VCGls&sOfS{be^{zQ(s*hwrm3BVY`O@-sfPzoGnJmP+g}x<^dU=eLP|Dvb zxWzqQ%GOVwnCASY?^3zwz{vu|90L^B%@Bc|HS;ut?UiI+;93TV>8pQlg;>gK#ZCn| z3k+ll0_HyLdeF*3ZzMHpIZtcGF0@9LZTcNJ709jL)8xUxsI+r+-^knw1)-g9ivqEL z+%>uzV+PdL)7#_OF?w5iI$gP`(bEkF^HlnICb=My*Ci4`m71tKjIV^z&Y6T{&2wr+ ztb$6I3V*52LN|6wWjghlfu?cw0VIh`t(XUv827*uV6+J3bz};~9FpSMgmNJ2j;WJlU}qzeJceC;{o7kc=QJ{-c#5i z9$rbxwp|x_t4KiI6L_Caq4V*Xi%!IDDH}7hV|8K3Nca>SVHBML{?miei1F+LYU&08 zvlgbnqrKt1FDNg$vnOtJuI5G%cVb0n6pkgv0RUQDlK!;;@7cn%t-ZF!e!Z($lcoF^ z%-}TXYvsevw^p7Ja!d-LX*ONdA#pP8X}+>G=%+q%MscxjF!;v99v?zb#g1PPda*8b zale#yAktW@lg36$rCsJUsg#}RrPr5l1mXPLKAeirK3TrX9|HL_94j?V|?lL-9sdRjun3T z7G01{ulM*L%DZl7uRz0m%~z$E9HDi7-|l_L6zvGMoBwQnXBQ_90&PHg*(#+NZ`O~)HZ3BFDLd4|+Xu0&lT{+>6Yn|EJ&-*kWQ^Lf5~B8YqE&ReKu zX_yeA31Dd`9Ef)t2_DKV5fR*b8$@j6-3*?|)GAUlu$%Gjo7=pb!L4~WbOBC+R^FIs z1vOh@QtUB!_fDD2yQ5Z&z|=R-yYC8Y2E{@uZ4#8$;K?t$N2f97sfP8v1F^}MoWI1!- zrZ}V({wd>1DdUO)$|ehZEcmF~YvdgF;%b0V;^VcuNFL5~gAGsl^!R0&S-dV=mZe4B zQ3eS=c|JY<23{~J9wHO^ZC}&prwceW84hFV=iGR)E^iEF^tlG!yGAE_^`(0_Ryy%l zMJn|0?pvzvD_1+zQ8wlm+)=NBT>4sSF57g0b9dobV$g54EqFg#u5piKc8=IWjAKrra;LXzO09Fl-08P*;U z;Zp&xWX~17z{$a7x`q?t6=;X1BkUS_dXs>BrM`_vx}kyILJMz^J47d3W0N4IsQ!qs z+QZ~9+EvM@y6YQhzdQQ1rW*RnfciQYLrMM@tBuM^re+93xP(EQEo%Q ziqk|NLJ&@MpRAsnNqEI7g%!z{c!5l>{XI6Si#B6iV#rieZ@dcx?KaaWUcnyU+ptA> z22qRmJ`1ka9WT7SemV>z*Itd6EnIsga5<2nmScU<&aE}EGI=;U!ADe@ei?Y3CR~sE zC4Rb68|29KR*n{+_`y2=uk%T8T6 z7&=_Z1>3&aW-8f=9R()=#uyWGy$)_k%pPQK!R%M>n`(lX89YmVPc@hr{&r0<4J&(g+#WsD3@8lg zo7q`d?>Q4o-K~u=?MxD_vPy)O>)JO7bYT+x9UEmDl>IGpe|h(rR>B$*VA4Ip>N?CZ zGXXE%I^add8u=#+76;Pe9q_^$u&)&pYbK&mE+FisKQ5G$xB+eiyOtMLL~GP{Q0oc2 znI9;ks)Jf^c(WFfIS!YYthDVfs^p7_x@fE~+@h0%UsmsP^vfe2-s;`!Fy+No^b5Q; zty6&In(`|Yg2KAk=RasxtxXr}=$BV}S!Y;aS>&N`;zqgf8|ej0s+*;*5oJuSbiu{V zv!O3Zf=W}9E`M{1d|8!iG0M%geRFOb49I3pNt?Ecs^Ok)`YWPo`b*Oof4QB*M~0=C zlFj<-c#(*lU+v&-Lu*rb`9vkupK0@Zp3V#?Sl6d;4L56P zm4L!dM9iwd^AmQn9w(hCAln%j3|Vlm?j$Nklb#7rSsj;Dt|k?z!U|qK`8oha*um*h z8}Pu3dAzMd>by8su7Ii(Vxq0m_w?`PRz2v$yQ@ytnKGdGA*p(ga)HG8$}aW++1pZgw|43hi5YQ(E$%F?&d3 zg`zaO!DP7Ld4FhT{3OlHAFY`s9~r|OKC&^HcGAr39l;6!cew~x+1-WUNV-{amF?d` zH*;izr5+t(J~z<~p_>VZy%ulDD!tISrK^lWZSCxS&@SyvSl?DV3xrA`@=AlhXKQst z9)lPdf1h=g-2*f-iQlckWx!gFk9k)abQZ2MQJJYZ0vzs7uCfP;$^J$=18toP(9S^j zhZ9}VajF%^hZ}KD^nKI4n=i!!zjTo7>vcEXNm6j1K~I4S;VpTUa+;LhH(lR-NR7%( zW(0U8vLzDQZn900&`ELCs+%Ee)|t(4ZnhGCsAw<6A0oaaM>haBC_s`yDId<0^3ft( zWQ=8KWjp4wS{C(g?jw7nn$UUH{0$?2y)Xbrp78RJB^)vC8Amg*Fdo2&aS&Rm%UF6u zC_bdB0U?}Z7p#vxklkbVH}0|Rz@!nN3-1`M&3VU=C|1e#qjVjHBG9=cc&5aD604bG zkQexR78hBlWN@3^wS!FJG`Yuk%I>kkg}AC-~J0i@zs; z^2eR!q|b>j1h>>?otQ-raV2neBftCF`dOnCertge(Wq&}MP@Z^f2e6uU3I^_I7v+l zRSWLl*3;nr#h+?ND+m&s~Wrm{{qM8w}vdk7tP=kYk z>{4M#NPSpVjk=Bym_)M?wW>-s$&<>YSX2ADD2-*GeVZ!ESaWV`Qam^W#{*zPY@@w&<{G_;#wiEb_FB;qB!F+^W> zi7!ptg7`u_X>8W-(kxDrC82%EKA~MQr0s9kGPj0ck~S&h^L=R=z1y^!(a_ zpc-%($SKoxtJw09K+v$I;n-AjkVC9NtdEvRSLRR(F(*2QUgUxGYR39GA%@p32oO@yIq_OwLDfg08rQ z_y{%a%tsc*M;1*XkT}@)!lM;TkK*x=1r&^4BK)yh&$3G1)-P={ZL644<6tzV-&q6q z!$E}%x3%F9quwS9_qm^93cZMebBiP?0^}Co6o`7+yZIt%m)OKdbdt%Q(NFb;|7!J^hoT0bGn5sjTIHVo8#aXz&1tz0@9N~l$Jq=QpZp?b|;kAi2h*?SmV;%_( z9u3&=C;LTL`%ml5h_dancTVFvApIQ19-^*Ax?=ydHSL#gv-`>@(d>!N9 z_=#SSv!Hk6i}ubKr%Bq#+MM4(9K1#xQ3z-M_UBjLRtxrEm4ZPRmRSAr?G3`!>F@ps zS2%U9@92f_(}&vc7&Fea--!)*r2YQFTdH5=eXY}ZDdilBHfX#-g>JeTYan; z>h{5q;ObepMUo{ljw%xt;)rx`$N0(rPJH)B!q7pNT6zX~K;_9C67MhuyWsP87=gX* zeh(LXTnXPQ6?;Zn#k#eVKB|El+@LmjJ_!zpRb=MMpu+w=9<*!k&3+p2q&<>~I;V5w zI#Md?yjwl~X>EvPZy(PX!5nq&-FK|04V#_<(;TAJwW=G6E%Q}8Et*F)(9woS zO*TIqWO$<90s1NPX)yY^LXZz8M8mlQFja%CH6euv;iiYTAg~X;YOp6}F}= zTwj|N`IC>h@qelG1n0Kvxivr@lHY69vwdLTV%bb?*O-i)N}j|`%ihrk4hkUo-7 z2-6I}X019oE`}d<&%9poTqaWSL1uw?QM{vT==^hK$NVz3VKSJ%s!{0D)t%wR*zL=wO<|Aim-6Y@J?X6wm$Z$ z8;c7;T};CBU`3;q!GV!vklP`;C&H3ODD`&aF2R%|hCn`%b}FtBib}C!e@{BhC{&Xul`^{O zswWDbF00j7X+wG`V?p)w|1I5wq7|Bcb+&%{FmE5K-sve+NFAN00?Tn9c4V6|(v2UxCZRdXdk^`G% z$xQOehdjX{_)8b7yFYVAJC``_f`rGM451}S3|nwYatAuk6HbAE>pbV3LY#4(@|06z zuWVwzqd|c^_U#3s4 zl0%h*fZXh7V8fv^mA=Zb)b)FH3e}O5aHX80PAgmqSPa|!3AR&u2bQTIJT(I$@CJk$ zFrgc%F$?9Xc_=BOJJ=X#-T4$7!+FtZVECHZ=w+ipkP#TpcuS;qrj-)p2!?YW;r29_ z$a&Oeky}De7IZYmMOvpR;mACm0Z$#eA(;q)F*ztE><7u7TRTe z4ceh0CRTIN8JW%|0WD$?y)xm_3`X$rjBMrBM-yV6&LkZsg?;zGt1qhY7{BLA8D@>a zR%K=euBxdBUYqYZ^We&bSyqAeHc7_}ZxO(9xUMQgdi0x<%(1fSpxkumdUFst z_NmQIGT)|xxs%LQ0m5C-jN=G4+Qkz3i+D`5rb-Qu`;a}!I>{4}$m`T4Ylx4=5%xOz zusOfHDO}a(m-Ah#ER+;Zjnf_`#2>K^Y-Mt2&9;Zvv#f*Kq@#hKQVUZce+8QmxR{1z zzo-Q)QX#dtOTr_$g-4~LLm?6yJYuS-mwj0LC38prp->|oCW{tC6MPBOkH&*Sg;G&< z7_GT;!GS8B-RSKIt#iTKRz8a;txH=MkHq$cm<-UboDOy$Fq;4Y*m+1*JN`}i`9RjH zK3-iWLzZK|`#g1Feh~FNH`E2GR4cd25etDyvrYsi^Q#Fg=1dS6hs|aJLo#hcU@XlU zKQH$9)nUy+YY>^t2rKe%l-N!_cj@e7Wtcyiyfqi2PXnEKkhoaB)?z`((fNrWM_G78 zt)<@^uH@jbmxhb^N)Gd*Z7MJq!z2{bcd8097hCX|jx-irEP#uK#|sS?gURt4C2NQi z7gMlNa}h^^n%tR-`Mc{PnU>oVL1O?HEMv??q#qO-`{}?@@~~Vo zm3dunCS=$XnW`F->3lUw*!sK3v_vqXKgt#;5%;q`Xh5dWNfC$+TLDH(t}5-8hsn7R8114SxUQ(@bKwS=j^(!% zwX6eLQEPO-Mo|mhZurRa0u%*E0yYUybfVE)r0K>qTU7=71V9)+!T zOG_Tm`G_ggy2G+ShGTLmY7Sg-g#y#n!cw9Vya{>w00YK>W#s*p4m`K=8lS?0#!8V3 zXn)+?<&h94YEEH~JY&_tc22xzGy#T9DEUC8Uiu$GjFS3{$YCD zAN_lXK9P(SYy}ng61&kkD=+mqktk%%MV@nt05y7WYr_}sq1XSJ*L)L8{=2j%x$}pP^j0`n2|&biB~s@^^EbW(ag80 zU`{i)2}`hG`l=Q}S?Y7-Z`RCH!!~}AEaR8B1j|O3tRb%T@nrmpo+Y)uUo&cz4XGy+ znoUjEENI>eM7{vT3PcK|m?2EXF`}{l8Fx_3+Yw_qR*SuQJ^P>k3LH^J0Fq@(?sd4* zMPUWrmAF{5i1n5@=mbt90o6xj245Jz^~&FR9@8z(FHEPE+$^3+9Uu*!NAa_^A|_&%emsX_yd9&DJ~I@b?`;$l z;nAtZMD4thn85rYiK{HwRsVByH_f1UA-F|jz!58v0Ujhsbm#k%r8C-G6{_c?pcV!w zxuB}v?Vycl$lJq7Aoo++U#Yv3lX4JdMqi(-s^vY}RGG1nktGFc!3TVxn>pT^eB zY=v1uxfiWcpL<^7?=119RmoKMj0FBC7K;A7gG>BS`zYr;GutfRu9XevZ)^RxoauFW zb9!B_>2>+p(rZW_F-Z|EIN*?1+a1_EzwNT+;_`Wh`E0`E%e_xwl?{ zjF8Bgl(S+;i;|0xL4XGT7EkfEx!NDZoU%X2p(pkS@r0S*Db7VV!baD8{7rpCy};~}zlYW%wL{lGXMfP5?!)v|m051dHm9>*>5n8DfgJgZ>)%GG zS^DizANr2{L0&C5_Je&Siv5r`>%i8r9}G&eC;8saCP0Hwjx2fONp6cakj~#Yt<)Vm zm!5%3;SU@3^|@*Yw9qS;fQeuuTPXArPt{ zhd?Z*5D0dB2;Bi(3V~Rh4S~Sv;F2}ObqK^_D+D4zJzlJBS@fh1wSi&Ofn17klAM@P zr1Q4!f!t*)5%$M31kWfgi^)81jWi1l>~b1&V(409Tb zP4Rm*%zA+^W#ERfsbZA6nHH_;M~eWqMT>&jUS>6Bu0Tg=UbZ2u^9okw=pAPQ82S{q zFlRuXal6quxhy2f)uFMjA4s5F+kgP~y;>lEw5>l1K02Q+VWu*j&CVsv9JHF4VlTLM zV`TU7vKun|4zcs-YS5`KmP^eg%u8uAKhfZ-xwV;psb;tF#7)p5 zo;JsIkv7L21j}cuGfmkByVQ0LD1VGe>yF~> ztA2#qbl$tGKAWrlnSwj5Vj@b=ponNs9fPEeV&1zd^QafG>I_GnAD}b*T&B+S*<%}h z>8HM|apVGh(QWI|7Y^e_r)c$sEo@_CFm2_%0qP3vDMeI7PqwW$I+E(GJMwGghReCi z!_B|3wgc=M5<1`Q^%oWgOUs~DH>*^HZ|Y<33SDi*(Ez?~rK6+GQ%p1c)prL&D^8zm z@b#1pHkzJ@DciaL)|X8`<~_-(7XVWmSE>!X!l`Cii=+oyMG`2AIZr9Ni_73)Hzi~{ zHKIo^MD;PM&fnc){hhB@?rlYK$*L@zG%d)>0=fFuVHLGb6# z;0%#35QSm13XjmkcEL!GsDyS`a{uzZDIQ4o6>dH8y#W~s>+DL9V^vbTflBZ^ntiw4jxDrmx zOOU+lPk>~hfdp2P26snDe0~m8#0CmgvXm>i5PYia-_meruuRkdY(TSv>(p1K|LK%zV5fnsM{j}wB?F&YXx>6<5RhJwf9`FxOC!dePt8VFek-l5$+ za?|TP51F(Ab|kxcVektG2k1*J9OM~crUWVT;~c|3D>u_dT$iRoVpwOzupDy47&(5~ z^EKAfX>Px)!x1k*t*G&Lsf5l=YnYLgEEQ|`gK=)Q`YX!b=rPQ{of`No8n^Y7rh!fL zlwd8}>l(pnw$BrcXZt+Chqle5aW`jLVl>ex|F}DR_agfm@`PZdmR>8g!y5j$%c(>~ zCB?N`Uq6OkJsABpr|$UYmWmU#c)jIl^|f3R#h%6rP7yiE+Zk+emm9AbcfXP<*vT!$ zJbmsT9d}=Ig|k9EozXYg(4B zHpl8C=~bO+DcKEN7=kF@KgwQ4Jb;88ikWxm zOofF+&ydzpy~4ma*%Ofchsw1MKZ?GNQK5Q5>H4Eab;1Hf_!^zRR-M%s{m~Z@F^j|- z^#yj6u&RX~(W9@SgCJgb1bQCcDO+?e|NKc;gLx)u@&>_i`ISwPC`%C=uo=XvxJ?kN zfRD#F?&F5(?y&msOg%U1EWJ5spd{9mv|e?DurLG#d_t?h#FWy2c>;9E;?b+#_7)l* zdU$=nmm90^wwBF8xLAS$Vw-ADmy&q{`U++R#pq(1sUEl&#OV*2tG7V{-8;UPirKpr zvdcQTVXE|3W{I^WgE12*G;Ssyy8-dY_qpdc)y=4KHMZ^+q2oX@U#M^z1{EAWAX2QbsVw z-=`pQUjl8!y#;Kb{(s>|=lCNFX9w!&4S(?^`DV{`h(q>2jA%L{g7cYlGT*>Qadi1* zL4WE`(Hu}iIC8lZd&l(A9etbik%12aXdSLJ;AkzKeN!I*G|+(>B(TRlPFEUKYy}?Y zBb^4-;>$X3r5$$hPJ6mdbWok=h|6xcG6-ib4`0Z?1aaKhc68TrXKBEav|vq&ek!}h zWRV(~gED+mK-209-uNQKpOh2e*Hgz(>k_ShC;FU3$0iI(ld2NZwp`( z>Y)GF$OF1zGd&GYtAn0RzLO^K(t^-gccAg2PHP&&!q38f0I5+KGT*9 ze^eiFY-1uAeP4W6f6V9D9+X@=5IQMIjN~9*nev*mkVMq^i|g02122nAqI@8)Hg|z8 z@hC*sj`cCgcFH4@fkc<>wGsqYMi`_z{+$Wj1f)_UIk3z{RC#-7VMGgps#^ydcLj12 zlA&q2|f5uP^a#VTtHC|}NTTmXe zV&g26OD~1ch$gG|{y8mAv^Ip^MO-$++oB_{VC_y+_uX^YD!cw4LJlfFKlwxTu&Ua_ zcUHU5qrYp)<0KerAfb_|?7H%!3^-bLDY==Yw2?es(WEUno8jj@FL2H1bW@M2-OQ0n z>r-x;V}-b67XfsFYew~MSAktKvlZCJJYG3kT`o5>?N*n|H50%^!{e1(s$WsBF1M%I zd7^c9+b0Jn*prh+S-dl3zM8Z%#NWNmMxkChZJ+}thTs_pcpFUFoQq`DzcFgM&+z94 zM-JSVlV&v5ZH{9*X_j8r**BJ-w|_h5@k$`-ak7eP&LsseEw6R8oN7G8${WM5B#Pjj zqtqY+tuYONFGJLmM`pTgl=2$mvD}OYYCE0_Mj@5XzQ!-ny(!)8fX zzxt)+0mSwaLI+}eS?5X@;Pl*mKsLD~czOZJEP>WO4%7kLfI1aQ%?_9Vam zuOOM8Nyd57*4rBBL@WAcTA44OXvN<}DY{d^m>U=w0~a% zyIoAcuc^c;S8K*{#>Eg3Cc*IfV>&@Jqy|2s>|QUWoI3^`{DMK6X+QvPY=M*{e2Osr z>5M(vt>X$1K0D@tz3-UEn%(woslOIFKFC=PC?1jnYFEg_jSeUYT+u2N4*N9ei*BnA z2m=e_ed2}sNbi?)l;%<#Y$}<;9I#h!MG|%i{-}&hjq5sBj((FPr=jT8k|mkHy66Vq zBu7MA5U)szZCU@2Bc^GJL$`aJFb#f{6B+`DbP(lIcmTz6IJa~KG{BcuwUA$BAwM2o z*V(6YvLP>`^%1G7Fd6l>^QzIOx=JTHQg9AcyZD(+leJo)+>H-4Wx6_nz{jDF+lAoZ za0%g~sHs7?Zdw_|#lpjY)*^CLTDWPQL(U5pZW4e= z>Q#Rz2`z3L6UHse)tbMbu>|*g(Y|Vb2d?`2Bl<4k$T>u(;=AUc zJ|Ova%!5s8$2@S#9rIwf+A$AYLZ73(F*RVQq<6^e*Q^FVYjG~P_VS6pQn9%udUX0X4%kB zE{e4c{f46Dld+3W*IJ{iEa3vxan-5`74t_uztF0MHP`WW&7oyaD$OxtPrjs`;3H4!+j~^Q=U+_U zRCb5H0Z?ef7uu-|k2{qZhqU9|sS82OOdW~2XfK=e9*fRC#N)sVzL1ep$**H%P8;_Gw#m4Uz8z**0(F-ah z0jrv1n5|A*asVW;#OZtJIFiBI6xzfR=aW?1I!>>VDAEN&a>+U}EB@v-$Vdp2X%n5P zsSo2&=meP3z#Do!4@u2*FkK_lo4~RZ{TuX*e`qIqM(s@W{1J`efy_*0JI;dBIkuDK zD0iunbE;%-uH-_vmdb8ADWXbG_@u^OEYrwfJtL0XE?m{zG>k+SI^k#PsJS|a9$y4k zrw#^Dq)0HIR|<078e?FnR=woCoy{ii?Q9BDY%T>2cP_;y$C>7!ROe}HdKz!5s{~h` zCkCv*=&hqJ2i4Q{6+i^$UQ<4a4gV}(*UHDWr;Xopu~!MRzVlNG+Lp$t{N%m9dtSAj z#`0eBn=SBMFo11E)4sZ<@>LZw1aY66)~naRd2o~A-jn~Kh}Z?KaB<*pQ|8m*G{9Im zdbkU$I+~-pMs1q9;z|A(dD_HasvL%3Ifbl^M29+j`= z!~Dsh9+cl`pkq(-hzY|Qq;Z|1G1N6cYcZTeXDB!dR_Gx{Bhdh%v(X*h!T^#L3n(&8 z8D3Inz4n$PDFfXi_gdt}CbRAwM&&AUMejUy}?p%kX3A+|o zy!^f2-|(YS$>O9fT*=S*{s!R-Of~x(j723VcnIS_1UKhBqF5HB=r*PfLbx55E&Blj z@ng>)Fag$VJPC7X@UYF;lpJ8^G1=qWguTFqMvu$2Dzky9U4P_g(XaTPWogXd!O7sUI3Z2xq1I{8#_kM*@laZL`!O7%J2$fF1=I~!^@GNa;;uSQ|Qp*#&l z)%oF3h#}#sPC8GLA~jl7h?`&EeG^q6`KE|m-PJQ4jQ$vn6|FBC@8^5n&;*xrZ3+Vx@R{8dGD+DYd- zNm{yAj2bpYag2OTH6!AN67`*At?hU@=ZIc>>zV-z4j*bL|A=Vf9!$ z;cR|6tqO!01to$h;YUHMVA$P93ZDmKM`&xr&z+J#{y{z?f2RxjqUVFRX z&zJI*hbvB=r5vD6F{A2d^{a7Tt-kJx=>nHu=Z$-QTnZ z6Qnc5(}o&MTh0(q8#0*EoFSg(Geie! zTp^ErOb?Ge^8>nXO)zH1hPko%%<$d=jW)wS=`o?TWd@y)wqO=5wQoG5_A$?cGWw%; zDNsc7UIn=GQF@}TQB4KVQnIS3u$rez@rJ5=S%<3(8l6y21huRfNcVFsw2@L;jWCnm zxqGk!%R{efser_w&g*~??J2iaCu>Puj%G5&yB<&SQ4kSG=p`d00@gk!lcip;nFa0X zWtkV#nO=e+X>R1$SRTcYI5?_33SvmA-_+xR;ws#d^(OFq*s3>Q#a_xf3NOt=uyLgG z)zW{7o~@t8_0wAYbg+IpbdxSiDdxrvWm4SteJ4NS7$4Z)=#Lb`RDGC~EZWX~E6->6 z6QWHNi_6E7NC(LXb}#oje zlRw}zF0iq3lP<|(32?sfgn--w2cQB>ZDc>FOJcuKCG9AwZ8FkLIZtQeWirP_&C6nrWg$`i?j5mU}rDR z-c+6V%Tyurs``*#&hsZKgvVN^=7`L}oshyhfwkV#t((9OAccGx8lp^mmMA&;8uAtA z_HStZIIJQ)9VWbs4SH}jpZHC$+C(V@lBhMjRe#CA3mHk@UE!TGl zS-;|nmNbX^6;hA%<{Fp2gUI??ktI~(9=N8wLD$7pkGuood~q~cJ*k(6_!FpHq`!Q5 zjB;rTi(L9*5_N(N$FPW;z~_3#_dy8k1SF}?{Uht^Cx86Me)Ylgt4G`&xqv16VO*c3 zLr3mBawokkCBW1&HL`dU^7K@G^_W#KGHhTOCYw>t5KkL2gw#+C@id|{Z-jFSOlEwDrwd;QQV_S$#d;!fRzkr2C2-)zb=3YocMqepws$pY#jh=rDLu{8^*=V+<4S=Ap+!=UNMLP=J? z=0;kiM;?K$ZWh&!qw~P05kSlsX9$%v0(#Poq-*?o-gPxk5Aw#mlNQ;Ucis+Bj6T4+ zwt8Po7^@Z=CX7@PrXbP3x}sG0#{M8RD9tX#m>%_vbC;USQq`r0 z-!<1IU8Z^iA0BzTKCm~4=b$n@>HbxE#Z#-dua4bQ(mP@9?k?AJCALJO7R_{51P+qf zWWBLZ$bh<2o+E6ds&Rw5!gt2$AGnV&_~{__eqNow_RXGkXDg`59B^AU|U|8Kvjp1ZF6r zSH!v^5Qg7fl*QYcaCfaAns9e)zY3n7iF5Z+&S4OkmPZb~Yg`^#dl#}=|DE}p&O45i za3Cd|`|@}2Hi)nwj(pSO zzxVBb`p~!h+Cz5^-&7xB-eK+{X}(beD`V@m?ojpg2_*!E)ln=-^qU{9wLs_+knVyp z>D_-7#zFQJ#8PQ3QH-AMc7~tFx8TpmOXPd%Ld{*09qJDVA&}>GB2G zrc1;Wu*O-sQK7!Ro@LzEz8W!8axdVGM2@E$%~O>N8r)*y{SFIN=hZ0p1Pu$=MRtfP zdaO@(1E&hER+qhSP!EbRs_TG*lz<>n;uP_=-g|A@p%bWPU75ltrNKCiQlbOkJr1~R z08Daxa65&cUgT(v>cH){Riit;ti#Bu47#6&mHoINl5{s^p08V{LyZ|D$h=QYKAM{x4{4^H47xPX{L>jBAj&MoJcXKc z+=u%f>|>F&H=JWp{t>85rqVPRi8vvMOq|}()rtEtAx(|;5|P#|(p(PG zgmUXq)+VpGdrfPMhBRRUVi7U}F$P?@U6bbW3~4GxFm6Fw4$_SKlctlaudF6NFxY^^V5)p3}!KwVl!}t;e%zIZgm)&5dsNmKr#IxtYT$Pr;|rA z7D{;6g^q*(u)L4;Qmv9= z%1>Tc8JU1dngsR5c6iz@D4ZX*f)cX{a4Ck$f|z)hS>0NkfbSZ4{)0 z7hSt`CdGJ2LR@;vfQlvHU?dry(r6rjEYFh8@7WZwzg&i5Bx|u(1L`5wjee=DNl^V1 z0d}pMYY-A{KtuGrO`mX-j7yoL(bWw@BFCAcE8RENuWeC}@Zu@y=QzWq8s4AP`1IKC`ny^U2s%5S&$mWww5|5U?!lF3(}t z2oQt`0p{@3I0D!FfCu_dm&dCObRb0j6F$F01!-RVM=>zM2!j&;yiF@nfoUMd;%b_L zdybj*GXuRQ4O@c^Lf$2PrC<)B@eDDu>l_ zpbW%gQI`x`$ z&kS0Ynkl^?@=xQn&`_Hog+-6i{bq+4NSVT(ZZnXs1*94kX4)*EaZ2u*$ZJXD1^JkR z1NcZw0*KU|Wura9MS_2{XE)j}Y6c1rKPZC@#6IS+7fL`wXkK^)s1uzYk=LlmY7rn# zLjADESu0i~XBY`siir8r#MK}_0f#)~WxG}BhG%xO{fybcOkQGrDg^-%DO;y0S>U3335L>BVfY3^?IpZnJ+jw^}0{55+EczpoHboQIklsPoBh5|$5OiorIl*4{@8F;GH- z?7x7%ZHW^bO3=G)OFZ#^%(r0)3RE&3HL%>D@^z~3e%WC9W0t8CNo>rj7{dF-Eaz`Z}zhm!1$Z& zrroN`qCvxlHqqnM5BQP^bn%uo*fTKzx2r2@Np+i^@4z$OeG5+q?zru?DGPhl1jmVs z7qiHQn=i_dJ3*y{_Nvq0453Y`kMU!x0=#Ac%}On@mc0O_ig4;ssxGHeqI^*P7l&Fj z#bmdd$vQ{!*~IK&wTc)|C{JBD9sm2F6XtT(L~GjY*R<&qDse+r>xmwuHB={f@oAgP z#GrWEvsKKki!LCjq{Cf%ONAH|X?26lAOD*mLG~yGWwq%^GjEOBmy3Sg+j?dGTk ztB`1nwT;YvJq%i`sUW;;%^0Y5GN582wzSYG)2fxuq-#t0j&6Ol@|{dHjx5O53-J&o zpnZ$EbY0i9>-A{14T!LB8!z7W(vEnc?Q9D=1xVGRVsvEGJd04kNcNsgxES|OeY=yM z{?0_p)%m+j+~@cSLz-8MS!|3L)^NJh3d>?UqTHTWAtKteJRa^LD~YB6evjWY{GZAa zn>L)LdrTO89frci2fc4tfCp@T>Ru*|M zI>RNhu$p=eZPs8Ab_a^kf*X52q>~*<$cLdL8xyu>A^jC6M zShAD$@%IEnDh1_dcu6M-*ZgpkG7q%Ne5fvy<~_irEic+PzzB%N4j*eysyB$CCNKfk z3!Mz+!PAK}>m%8M_?00ZGY*em{uVOb_Oi|{zpdQCaX-A_VdmSy9rfqc%BLcMK3!m{ zX#gTUBN+LgH(v3Z1Vbp`w4jj;W0*m~azg4xyRp?={TVk_m13>!47>ey$sNR4Z3ayZ zY=(Zd>d6uU903`>@EX~Trrl)6M|TzHQknrx;K?=47a8l2$N-E)5#yE)hI!?Yz2z$L zvgP40BUpDUv>W%SZ~ehC6r2voOZ$Fz9OZ4*>CPPs1|B$DEu_Peu;UeT3H6ERam<@f8ZJ19jiabo3KVdq{^&P)91~v1 z#*VcY*}?w|_ER4*)psepSY2@=F)ny&s>@Lc0BZ3yS4@@>A=;vK`7KZjxv<|uSJSjB z%}2P=m(jga$=CnPocRHMLd(FeuU!wYLk?P*E?k2)vl~y}badopC+>@*L8SO9f{Ts+ zyXX9WWP8bp`yjI>XPI-h9fP}P9D|hl!nsmV8ucGpn@dKjDS0}VjJdrFERA<@cgwp7 zjLEx5NANCAci+eQ`BF`W21-<=?iiE$Y${eM>K%`cAGva_MYtVm725QOVsGXyDSU=swb<~A-AMH_p(OI2)!y50J)0d?4$grJoz5ws_RH0wd$gn}-~ zIWG!9dtGV+1zD@zNI{n>_p_p)7pR5}XxQ(1H=`iLq7Zb+mI%5`87^pwU7mAZ6oRgB zsSOBXztUzD^m)0BXHG#^sR}4)VSe(xP#=h;Y)`%dqt7x-3`;Y@O)DaqV(96j8J8F= zOpbq5_s!Gc(dn`zBNk3e#7U_Y)H(6CN%d&vZRKGYW3TE;)0U$Q#wedA6(wd~YCVSb zrb90Inc)?>9Re49|B?S%WBMw7-+SOt+tnBm&>2^Ec3xB7F zw^vu*aobEb^Gs^EeY{JbubTPH3URzJrK_)9)j~s_%fLxy=EpOrA%!;i>-7-CiXEiv z6i9QNm0yY9h)%zDm3Afa=q0c&BL&orVy1_^+pB|bu{gv^yYL!$H?$A>aW(wCh?S_% z>y+27;t-sz3zuSzEo{j`=HhEPt6WlregOhQ9Yr|W<#t9V!>|EWrQNatbr+}s^Y-e7 zw@7)AAfsqEkBino6RaNe@ilaHSatuUNC)?c;e*@?DnP^&H!Dh)33?uV_L@@~aawwM z|L4FuCl1=$T86gu=+A|w+o`VeDz&=D37t^53;opLHHvB7I=trLpQJymQc-ghUK4Bc zywF2oVizqZAl2>>o5EK}2ev`=*FQ^P-lT8et>?P{!vUtvk`NUu7SdAWr0rb^lv1m` z$u-s`q1)->LnR^pg*Hr`%O10^cA`)6oq@LXwH*DQ=vO5~kbP%>=?EDKSXMF7mQWet zZE9J1on2J~#UCISX+#KWi8ba8uNKq@va3&iFP-3+Pr1?1RewwC4%#6TrdCq#1rmN` z8BjrDvBT!3s>+v;a?jlworuhng$*zPo2jE#M&BhH1HI^tzFSWO6Y>FbF}zK^Nv2!% z7NfJ@x(c85VdhT)8X>*j8CHGhUS6I$l`ww#y7G#*T_F$bS)2_oM00+jgT=M+cY1Yl z55ADq2Ypg!zo1UiCYXW%yy-uxlL%!b38nNO*GY=-)&7#{TAc(`B(XNVrcNTjoFqE? zqMXD~%XfYg;IQ>-`eN7!09~6uS7%7PjzmEE!a9*HSko^e5ugs%iEOxzI?S0()0g=TSOe zs1W?=g#1&sb@8g0%Fov;yG=&FuC%MFrxq0-Fg|e8bb7_)$}zbQO|H<-!O3O%S>r%K ze#UGS;pYI}27ZVR(T`5(qrO9v{rWjLxkNu}lfC*GbG#ov2PV7qGvesPtFGyuUz~iN zUI){CH}&3jq|*n0b3iIk_8BG;o(PD@er}NkjYmf!*@E>l;}YdzeNR0-CN1ExhhQFm+XR!i^kboJbk5_+VoY|bXq8@xj>7)YD(COzEZ7i`l@R^CHP!JhA+`qO%*NtolG^g>8q~k zr10lbbNE}3#e8e}N_DpAtB-Nrg%&e?xe?J9^93Y^wq2BtJk6_(N`h|&A|=) zD^=5`uezdh7}#d{L&8r@6)pUnO*OUYtFGy+u8(!8Is7#IVGI71YHib3UF#XaH^Uzi zeWjT`%fC`hZThNfIxUnXT6(a}scTBuioQ~D!yJ9pRMEoU$y8IDzUrDz z3V$v&hrh*R(972JmFjHKS8vMdM}?L%eYp|Q7v$8UFP7XZGxXK1>8snKDbZIVhfV1# zRnw-gx}tMk@Z-XB_^GL)g`cyjrZ#=mHJ$B(AD5cLPs1O!ps!SGo4)E=&j`L5{*dS^ z&GcFNN;S3VtFGy^P?l(EhQ4Y_*owYVt!?_MYdt0ST*DmxYN}}A?_{c}O<#3QCxt(k zn#14nG3aG$`bu@S=&L(j8N1L*rY|=l`huKV^u-E)&kTKe7qs=SvPDy(uS5=;(pRdc zO<#3I=SuK1!ymTMAI_$l+VoY|bhZRPiK{SvjsDf}hb`zU)!L@7y4Ev-Z-zf4`bsl> zmcCL=ZThNfIxUnXTAHD+ni966uT*QBzUo>}2|m{_M_)BnwCO9=)TXbxrjx>-OU=>O z$}#9=Yx+ucw&<&z?ist#o=jhEMDztYwdjjQ^JO#itFHBw;ByUg^i@+uo4!&_ZThNfIw}0Q)Es^7IR?FK zO<$?b7JU`d%f>ErS*9;HBKm69j#x~tn4vB2z!z=3xkXMQt<3WSJqI?ZU#X@xdDV5@ zJmrc3txxu8&9_h0?bDjCrim7IuyGiqHg(k%-83CVp^+*YsiKi8YM8@;ym;I_CY&ML zC=MTWor$(sIo35Ep6-s)yIte>z%df2b9ua50%NzAW-LQvtxZ_6(3L3bDvU{KrF{@c z5(NR+E*0*McL}tb0s?Wn=GTqmsIo;?-pH;Y7*F>`@x6j=ud3XuDr-_`p$(UsAZyW- z&pS{xqv<74&DsM_(kJvX8huDwl03jI2#qebewI8*NJAng}WD!)1s`hRW3`#myT|OUCKo4)&A+O>m znTxUV+E_TgO6SJdZRG+H7up>)1&FN4Cg#$)9Z=vSAF$l3(`nNum8;%WJ! zARUG6WE*#EmyidpO7`K7X4jm3n5aeU-?lt6JZuP27r-WFSl^j|kcmdqM!+YU0O;bR3r3?a5*-yw>!rcB|4X z%dK&TS#eweVFWmh0MiICiPACH0h=h`GzK&iIWcJio<@K>h{U0l;2t#HX<7qjmZm$w z^ZW08?)~mpReIQoA@n$k>$~^d^W1x%efHjGpM69Z+kA@oci_5>#QHm+-3H0j??87O zfT`aB@HV>Y@9f3AiJ@UcwZID>?%?dvldXSuIHlzPP8`5yzU^YLJ@yl3k0;*|j#H&L z1qFXWf#?Q!g49x%W$-*}xX)*rCnWW}Zf{LdH)+W_T}7*~!W zDnH1vpDCbnnzMw8po=G;HaO+s&zN#;cP{MB`{{1>6=tqaPvTdXZ6Ly^em7p9KC55m z&T;*&zdq%@AGpEw=~4a8UY|auUjToEtuA?sY1ai~G$B;<-18soih4tR(hp3*^I;u_ z03m|yxvXPn#lJSazK9NA zR9|nsg_4KJe<0)+)?or=rT|H5*~%}!43J#yHwKt3wXHg*zon!^F} zc}Sdn9dqM*=qGtTNom_i`|W0&I$D2Z4Q6WpwOkg<*! zKvlt~he|wR0O!vj`!Qz{-qk{DtcBKi3%sgUi%CGnx&^8VEl`QKu!|Pb6)mLJLORw$ zI^F`Wbqi#yTcE1Y0+o0R7Sd%!3yQOFAp2UyRmj-GP9RuK*G`GgO3WX8n1sI$cWd&# zZS;Pn-me_JzftdR9KBz!_v=UR->Ua-t#;fyW%Nxk)j~bd%=OWXep8XwLWF&goliU- z@m+Wmo7{@A6={PShqD`s*EF<*Se%;K^%^&$eRi5zc#WHZuc?{rHEsqeL(R;+#?55j z%)FmrYAs((C9Vi$OH*(idHwx4f+ee<&m zS)U(H%jqX${_zvB-N;X`K#b>ih&IH}T+v6WVP?WQv$g~oxVISNLQq+T z7b{HPS^eUtulSqt(m$==E)tA>Q5;U{7m4PCekTy3^ox3OT)(NgE2Q!fFzH4Li^3j- z5t(?Jjs_Gl6u#Hvk%-QFJsk6OZ$zFn5BYR77!!`=s!`RiqthmI(UB^;x14(m{Xy#T z8zti5Z?*c*#bf8k+~KAYRFmEQ&sKhflj#np+gk08Je11k<~$;4W#) zX~UdiF5HbjwDw-pe)Nwqx!uPb}8-UIQ-vD88 zSqE$ocygT{F{e$(hcNKI7-x0Eggd@9V9zm}ZG%2SUDAdpdOrdKD|y-0F{Be!kWJ zjW&_jTNgGiJfsEl6Y`Oi+Z=0hK($#97^PNSYywPGT#fkY71K@A!HLLB2U^J<1I>!J zdqls}*QbZ|i%|`;6AU0U~u8Gri4yW_e-94a+shTFq>I z`(AeVO%`?I!yKjvndR!@!LaScdBF%xakhn3yi0K!(T%Sx@U?I`0SWV7%a(*!(|awB z>DpEo$0j5Q%IC9w$4;3vOCku$)3f@nt}@v&=8T;v)kVr&g!IGsjk{G8K@njUc&kt0 zSSh^;$4cpkEat&}IpNa$Uxt83b-+@K#bYkAiVJSSFga~R1(AG13OzRmSw)?03e30* z+tmUH{`8@7C&DQvl!A8Q%sN?>Q6Og~qJ~&ZRf%Dcw^9)uPT?B-fu#%&8*(JfnpIvm ze|g)upNA(@{JI*4vZ?_pqq`XZ%&2`}v$9utj<{cnD1NU$ld|WV+N`(KQu`CXlfJepN9E?)qF) zoVC#;xk{V4i@Yr5z(ls`n|TB9Xeef9uZ;PIKb9gw_nW-BlZ!DDSfGwP8cbNJur@l$ znNRn4XWVzX(HViULH|`}XkHrBvNR+J^xc}R*Qa;$0|~3AhJCF1Je~&qT1AA)F%TQb zYe=lE2?5Fx)tl-!?u332aeUkfJ!b}Kag)`<;$_2^9OdCoi~gU*75Zwu0koeNapmEM zVU(AYPx9kuF3kUZ9C!|^2JkfgHGn7H2Ji$lU?-pfJAfwG-N{d?DQn1axLpjK0C+{Z zO^wkuIetibA<_j3p`G@I1^|){-yVFNQ4JKSM8^C%&Iu^c^iL>N)1A|uae0I{)6U4^ z-;e4$B4zpIkBmN%*}p!u`YSvJPhU@+1ul!D6)4ICq=9miJlY- zlk$OpW{mV>jj;J(0VGt=ss;Duj`}em{yLF>f@vj+t)WWK{G!VyN%=T^*=i&rB)^3x ztqIZTCgVtgU;;fI-a;+gy<61KQldj*BA_F&3KVUO=kia*c92IrvIgyR%G)h z_~7IB=*((RoiH;v>rrF;ztc~qohzS$D+>gPBv^zFk#p8U$gfFIlO z)Yf}si`|&9ON-r@wTl6gu!?!zMPVr5R#>?$c7_+NA?kRw*s)8h(!SUcsWU8giaJM5 z#@t-&*q^kf8taV~yRpttWUbEJ%u2#u>N31Wd#Uf{hpp7R`9YRYPg(4&XZ)o{Lb3wk z@K*0)+oc`R$ZTj=Ey#8lu%%Eq8oTR7aIli!iRR?-9eh387q52s1L@m@Pwkl4RXm_%pTV9{S7t&AQOV zUi`1R!_Qfq5Be_+*JH#7g1~tfFAzg`)_L1NR@$h4q0!LA(NGlVm!X(R;Z+SKUNIDn z;ce>v+xLkR5w46g^7Kmvjh3C0rvNb#hfwe}(T=wYl@hx7X%)$h`wUxzj=7woM)W>L zOg&XNu;$g8f0s#HPNK^2*$?tc%ONm_Sf_%PIG+QEu)9saT!tX;uKx&_mtFLnG|W$vMlO>^>e_e{}IpbJ)5pC%oHbIntWy zNp08FtWcYNGYnLoX4)BOX)rh+se5{3_F#Fb`=+DmgnzP;Sk^huia?;Oppeejx#7Fw z*o|SB0As_D;NZdBVC?cnY7RrbPvO0#6@6?NEt3YuwZA{=HKojzn_mflul||*2|Jjc z@{O==Z(iU)0yDH6T6#&HmB_WT4(ykF-g_V#Ba`;;S+l15&aTA}J3dq}T+Ou%!N-`8fw~J&)D2>DPZ(%f*x}EU$XW`FN*k|EO5e zTEFLJPb^`N|01H*Ol7wb_@qYvv}_oX&6tzN$RVrEl(-Njeo!Tb=PU7WRYJ^$5--c# zVf*$Kw^JJrDpg7>ZB#ZH1vOELKi9X~npE{_%@SfAl=zfN)Z?fOEx)f+7y)fye|mwp z%Kl`GLEZS0vPjmezD|in@cwK1aB;mBC!oYHsYHJzWY+ApCOjqnrAqWxmiPsw!r8_k zqj^ngw_;snjhd&__?&87HL4~} zJx>m!DNRR899^>y%@W6|5}I|CIH(fqR`$AC;z%e#{)VCN`{L%b@v3BRtBLKe!*sbu zC;s{kiEmv6h*x7c{jn>P-g~EmezmdMa87n-kpdr%{{z~DG(>k&k5CZP-6jAny^BgfxO3PqT0%n+=JJ&q~o=nuv>Bp7|p9`#a^?KY^w! zh|zSJ-dn7DVzKkyB3;Z5K8iA*K3Ytx{%radeyAjyRzSy%NQC(&{q%BTbqumia><#N z`rcPS#B38q277}GYsfvwruXI>)G?yn^vWn7ln4LfY4emp3v2#kxZQol%ycJeBN?{s zGMyO|nQ}6pVSl#l^Mn33mCOAI=*-Y8KmA+gif#q zrL}n716jKG<_F{`el34Hcu{iZXtCgLZ*ePsCl)vHcXDy~zyV-~qvZ-8?E@qJk zZQx@wu`a*furbVMYitZ{Bx5tEoFy)jurb^CR$*gZ__nU`t-{9o@NIqLTZN4c;oFAB zw+b5@!?%r%ZxuE+g>Rc0-zscu4&OF6zSYu~y zA}P0pZ`&H*go$^s1a2l)=hqp`IcU00rsip_)ax-#5Z7y(5MOiIpx|Obv2WtBYXRaS zfqDT-2AwJ7wc`Y+zx=k zD92jM?Lf<|q$**+2|&v&DxQ|xuQ%eJhIKifo z6RwCfJ|=d(SW$f$M; zF>g)HOE9&9vn88S>of-j*}7W>%ncFzdM1;q1bU+SnLzb}T40d?HiL{eq&@yE9|edO zy%l+vE%1^(mkkuHriB-Dt}RF;Z({=Lvrl;c?2MZu@!T-M%+qI|5dPVDHz!8fp<#aN zv(Eelb0;VSSD<}JNN|UHI-yGqT3qBA!FHWxf77EO2=EC#D{NQcu`EdV>>kTi}#5hA= zVRAEXA52vrj|gR=`!eC*(Hem>;KZ{|R#}hNS<@0{u|`(ZKdZG@Wj$4AZI!L^Od~5B zsg|``hvL30k5;na&+Q@3Wn_)2mAM^1#Yq#u{CmLB% zFzLW81C}p%*tp72m43d4SWIMICaY*aC-_31GI!STpXSkk|2Feq!c1h@lD8f7ZaNwB zX1&O!Uw*SD4>`XbN}tjUqACk8E&jQ<{9ht*&l#;+z<;0RH5?6ey)ve(Y%mW8iE}0t zylcIhVS&DhYhl(g@37W_anDyq|HC}hOMzsO997QT3_yA4$qLjV;gOXIPgV(tDw8)3 zx~Qc?o9s4csae-BXb@@zT?_D8TN=c4-OlrMEd+5?k2jb9>$}Qt+4lsB6*(EnIvdew zGzb}DNC0zM0Odacw`N#Pwg;p(PfrXZbnnQ{C*gpCR*nA&b}@XJ%t9`=kVHFvM?NZZ ztv-E-4_ol8`kM=xdx) zs=tW)fND@N{*RhulWh(}tW9S+hPbBX)kHGU#LMybK^F%W6A=Ywk_xt*kWxxlZHqbbeamgd` z2k}XLI8ckd1r; zA$8fjk0MdOTHnC;UzJ>T|2iE-Il?8iDHokA>&isjtZyiG|D`Qq`U9O`e21$M#1#-e%j~ zgrLfD-loJO+vU@d37?1*&^31kC}2nD-eM@eh|>tEdX=577*L2C-3E#6R>%n}w*Vjj zY9Ze)cx8E^pSk>UgI<26etJ3Hj^xgFW-QC{9~U&P$ae5AUoQCb-utqA_*wa!-~=fD zUqV&9fj4}2D3|4n7GBv;-)_&YP>$nqT?W@jr4aCfFLK=(D|3jiMYdfzj*QAIdznLV z!56uKjg^sC-{q8|%<`zrDN;$fyWm6cQX6$mzIRtrhzxhuJ=+ae*qPp1kSy1vu{Jnb zus{jE@2>M_*1)cUWcRfj)sHL1P707ctFr55Sdhj#(Wu&7`Q+892}`%CM>&I+|?mdpOH^|E)%C68g-BGsP4uWKbd`Y70a`#rh(y#N94ygcz~wCYRB=l*rYWX;E2J-nfAbXWbfP(Nk$Q}BMLgazKP(eTIH_`nOf39^OVX_OTx%L;k8omF-yYxw_7J2u_SzdXX~WHmelb4 zWrNc`9wK^|?gE^lD&kERNUZDmkmq{mWkc(>zvw&g##gV|D3;`m<>mD@*SRpT*OqSFC9J z2LH?j9JWwJ+2j&lq{pLu$Wmg?+p`|PIQX7o`|VtDl4;fpEH5Vx78|0SvVw;L7G=zK z+(y=(XBAX*l}Kj{G6skVjo+x6vcMH6jf!`@I5%W?htbiP6e~&qxbu|&Tq{ce%kz~0 zf-6e^-gA`@>F9i8~{8BSq=vqoV8IjQqp5?e+~S zUE|vh`vyIBIe9E2D?X-;YIoXah;NOe3-*nfyT-R``w~$O=2upNUN#{^TaM_p9Vu)_ zp1XvaO~@ZulRC++;@{<2>xtqG54@+i>h{3^crcq+6+hy@16bmC{8FC{BQx`ne-pcqeyGv8S-Cd9=MTj~4PBKor7* z54W>xB^I?M9qr-=&bYu26F%d|#G(&!AQWi0G70=WqQCZ|4|BA6qj z9Zw~h?@XUcbA)aL>6D4W?_;Ut8N}u^zgEA8)BKJ4J(T9VsC@DkoEV5QN-Im|$%_BO zX0wlA@X2F@u{cveS@t4WFys$4!OdHX_vd*{vEEPAdFHD61^6$2rzW0skvO9m&ekfX zbE3-($qNW=nw8?T+2yV{oFRrEeOpec12$))%`SJvAwhp1RoBBWAwvS%nVw1R%O%ST zSXG_*b~>Jx1Ov=qGTD`0gQ*Xvl6OicP;5hM{GHTNykj1E7J))^I~L>n)Ti4q&E~n* z#3H-=Jw=~Bf`t<7H>I`Q%eNP__dWN&Ey)`>|$}=4D45ynJ zm?vDKK=ZFLl^w}$NR9V#zGAw1>v zka_Mife>D{7B# zT2XC=A;HrdAAdr{RWC-Z<;;kL0gEf=aAmxza!8*kvYmiCKxvRo@^7$bo^^}C+m*VU zWC3IY;eeu?XW@qxLtK{wLWnnPJs999R{qt?FMsR4CA)`%uj9}QfG|x*)7y_l()EJA zzQ-XZ32Fqf$pF}I1Xw$6qpw%rE{Np-P2kN1u^rhr+;&fqJOSGXK$DEC6E^}Hoog-i zbGztv1hiE>aS%58F=|gRTW>5nV3(EwoVG9FgT5G`4yOE$q=vOJEUe z2B_iWh~Zgw8}PSD^@^94Um_ZT*{7?>pPKfvUBAF@ z`J#mbaUqS27V+}~G7yjV6~;emMeOEat9V0p#X&eEFUzgsD!mv-KAUop885azok@#p z^S_A{D&3{0od>A#YCT;ViWa730N&ckDj(~AQkFqf!3FuMw2RD+KZNl*6c8i^!0WAS0WA}h~0-A!!2vCkE zpe?X^G;(B0KwhYGpfzAGYb2mKU{7cyp!cRF5`-7g`gEji2UIQ`!S$siY1d(gvBqXZ zkAQ9IJPqTcFUas3DV-o5ot|i&2t9hDS>oA5%;rS9N}Q#NO3syAaGr8Pu9ch?ggWUD z!$#g(oUE2hD&~3gPNl^9t=|>@H@v`lVf{X#`E~nP>M98Drf?wgLm`>sqxZDB*(<@= z;n?*nF<-cwkyn{=#f!uzxgbFXOq6QdOwe6uz1uJYOe!c0Ozk$Jq`|~m)H$6^@Ydl; zn_!)JWHXYo);vp!*k6~ctWDa13wOvdbNfD4CT1qf(wigN>-*K5b^!hV*^+F&f7&i~ zgyWbIytZ3!&9?;8^H#Sy*9L6NDrN+)4cJ@EfW2jv0eik&PMQYnxnfIIm06XCve1O8 zETKmRG55MEOO^3?OC{myH)~~E#*EMN7c@R=&$?lJp3v*`D&sTVgWk-*JZ}cTd>gnm zbDs>Omu6e}w`IBD4+iEfE+ zziku{5mnjsGAtA|&PguhRa8Y6^`Z6pskVG79=zbvr77;h8TqL7lRrW(_;) z@lUU^qh5@CG-Lk3I>yYS40_Bu3iBCh@wH)7!$*vQRE-|AF;vRn1~E&#zb~m z-Iz!h*$Wr=bWXk4P(9PBjp5mToJyhJV%wv|CY@VO+&I{+jDx{6IFH7T5dmx17PIAb z%TL5^14F3O_OTS0IkyjH*_HBrmi(#;x?_?05~MSx+>`l;{tnz zbX$9$m3`1Y!(xJs4%e~DMko57myK=+u62ebWItvt+LT| zJuCjlrA|90d*;=0W!4HsaGYKkT zvj)Dc^+1%8AWJeWb4QB>K)9xbHks%pc@t(pEsdq-IcG z8Hl9Rk^;JAM4}TFy3OX=u=r4kHh=jJ#S7y2D+t$Wh;Mw#^*c{>oq+KUM|Wkw5w{b{ z^Nh~q7%R5kE@Ot_I))JDsjIdu={qC=-KbmoPY8~)E&P)>pJDcJ9;KXH?r@{Wabafr z2s3W*zzwS{<}}9-$RF~fTPygni!6Y1whbCSBjFPbw!$8&U-fvTepJd~Zp)UTLb{Z+ z)sdlMa<2lF0E;{`<%)Y+;eMy%+@!-(F~S+|Cu0OMeow>*aCl1H!d5tn1fyDly-AVV znCplHeo_rP#B^a13n>{4G} zj_RwnCw22{7)-`ig;tnxI|RY~x?q#cN8|gr>~_4){4xY8L^7&_TC>b+xJ=oP#P8Iy zqc||uxZbv!9b!wqRd$FiQnKii><|bBMjDqw4wW6^5S3!s$e04Y@GX;YMKeMBUE7-p z5?}L1g8IScDb%0|rnlwT);-@!eNSBMEXBL~@fdAEJ%vIl)fbYA)W zPW#TK5c-Y~J^GH#BFQ$m_TDYAxq*UWohk3q3r%rkn&1%8P~Ll$@~)*v1h=kM-siI| z_h}SJ0onZRtCe@@=xZqN2zz|MR1lQ+IjAk>zgl^}L@VH|ZHE~lz*78aR^COH-Ww5* zIs&jmFGj63m3K%;$~&w_bhX8m_i5x;&Lpi+-X+{luc5rpSIYY|fSXjYN_n4z4fAyz zdI1nx-Aq;x=q%{VWe|{=ezeexl=mIxF|F}jE@0h8Ukg*-xi#1zwlzS^m3O2?0G!A4 z1fX4v^4{!;nrZZ7)Sh65x0{I7u?u2r<-P4pH7M`xN_lUsQr;mHobZh#d#o^M3_*Fv zL!E;}P365csla&V4&7> z=J~;-$g*v$P&Vlk?47(oR6ALpF-q}bJdMSG$8FgrW}|pTlC6KDxb%T+{s1MnXFP2? zz~@{~TMtks)61yGDXvt9$;^!Krcgd+oLDA zwri$D5~N+8QaEzXz^x2Ox+(s=J4I=QqIZFr(t+_;X$d8zpyXrq|8 ztoYrARO$Q_7#3U_J4!V_14W!da~-83O@(TEx-s3Wg-dcUtdR@u&l#~sf&}ledXV%( zJ;PBwaO3fMo?2PY>6P^W`cTiD#_Roo&s#lp!n2{CI^k@nCnO-6+1{RT$`e)T=VsKr z5W|XqssuT8-G?s=u8_YQeLO{S)U0AxT}y}+yaPeYls$c5Lx&G`4C@6a`>#H79_#cZA(Aiw@MQS3O)E9z!T8-Y+T?FZYTznZ){8cr@U2U{8 zur{Z;#0}|4f&_*kF5n@%h0a2wAF4j<0vGWN`M~0wo{(1o%PkBt~%uH_w15htTCZwc!3t% z6P|y9tJM5M-5F>RKgpDWR_M2op#Nb!9-)5^AQ9 zSv|w?dX_`3x*o`BydJPPUJopl{@Cmu_2g~^IwCT$}7jJL_Sp5V$* z*0gFl;!{3|m+V7oGC{OH`K|dojfudUy)w;;sxmG-9N68A8=zJSZd8@H7;d6x@K6<) z@X0Mp-n6pVd^!;`dn(yn7Cn8zYZ6lBPv54nSYD875h8606CT<*3d4n+%+wPJMM7Ky zcB>|PSO}?a2KK>yg@J{giZ$TM@v)z6(ig(HiE9v0(VB!+Fu63>PI^sTZz!xV;p zC_**8s9Qc08yev2YPsv2fgLO73_Y8|RG_hIJf5v1&OpndTDTEp=o6Inz=sf~usA6_ z=#bT>uyHJw?;b`f2%B5sSSp|m#V*tnlZNPpc+Tgu5)p|1M+q?ooR6<0gX@|qQ9Z44 z6zqS#ope3M<`H(76D-$>+ES=U=u^gNJxy|UI>f@1Qin9^gsWwR0Hc~KSwWckU3{Qd zQ&_3%0zUB*NK>XVYP%0Qp#T@paKWT%xS1MQXYMO7jn~JjNa_1+dXj6)m!8JHcbuln z?wgW-=uKi%zsvfvd+ANdoqRe#kUEdDQ+~M)npZA=Qf}7o<~s)pQ1i>P)b*z1ZYv5q zQpm#Pm~=5LkI*>^T1W#3i0Pfcmym^UO5*yH3H}ff_zU%yf(vSVA-PK-{D8$m@(&U5 zlsXDm2nHCFodlTuCUI>$*{HadALI5qqcK~E5z)xT!$;{c(_7r`=fA$olIBD;5W~pEd09# z`-?1;i6Oy`bO>}eH&;aZCYs>ZIyPOVUmg6Tc9!;@F&xABGpm*O3@1r z1A2w%G4vXZ3%x1mwR)u>Pq(6piI@{W@f)F`FF*8j#P5xqPbFwkT>cgBWm~}>yFSF2 zAKkvknIWq}SL;wkyB)XLB8R5Nt7!|e&1%w6jq+*(qJ~=qUyjB#(+s|LElj`z@D&8f zq!0rBB!$hNfUii)YnB%S9OuAKFotCK3u(z|ZO0WOFbYkDTf$^wLlsSnh=n4EeN-xR zXH<{`L7*nuuQwe2@S$-WzMuD3fy26*fWuKWe*-vtNMm@#IIK%u5Qo1o8Mnn;kJple zDfKmn9Zkk+Lf&EgwtD*?i?sY)v^2fF6;H(H``=_d0p+A+u{7OJqUwJ=qb5i@9)6B# zdQHR$oxsg!^EBN}0l&8D>Kl3de01YI{CtHUT<@BE-V0BNwO67m|l#ttbo0;g}`I zu0M;)jiC*H(wR7<1I;fBm572>wY$3>WeN0dg2#k*u}W}dk#*=TxVD&(LL)a6ZF<(VsCEN54eWqs`7e zWeD`n89{)UKpF}>r_Bc;n6Twlc-z2e8Cqbzf#v#*UB;x1nOkiV7@P5Vav%I7Hui!tf@NafDBY=hEW(`NVzn$D~j*xoQDMViBP5hOl^+@alaX1Eh zOc!$h6l6y+*;_=PcNeYUNfVd!hOU=Z;C;wyIaY(j!22ZNdN3BxCk!JQS^+Nyt)OCE z^FbEAq@+B+5-_dggA%a?mht|nOZ3hVQk8Tthmx9AXcUsq>EOfOK}9R8Xznu=VL)^8 zvko8@*e^_dh7v=Lp~MiT)lQ^wXM=1RQW%V(K8QBTu8tfxLG;Jdq<4QJV+x`uafg%L zESRYj^Y}J&@b(h`qJ^$a2(jCE9K1t5fOHr3#&us2PY@3mfU%6aGf<~&-BU(X0%n2q z4{0Wwh{~@^Fq5*At7ln9!B(cIgF{ALx}ey{<`|$0O00rsllPrG2``EdYOejLE7{Eg_x79w8-klnkI1~@FGlOPuT*q$u< zaaSX4qhAJ?b{Q7$b@b!5h?i~i#?|y~QPqm@$3Sn&wSgS(J}e`80e3bP6~h_H`IowJ zR}0t~7O)x~3|8P{!B8 zs(n_OGzZ#Z82o*fE7=Y+#{`MH%zvkCifCKgfPR*Uy6Lxh$+cydwc~Jw?FP`G)x~s^ zo=(5Xsj8T|QmnDScwxAg$Fy$S^IBt3U>1R4MruE50Lg zMYmIa;aSve5UWan#6}6kgSrGgv^wG6fs(BQ)CG5~QiQ6T9k6Iv6hwBYBe#Rn8ja0 zH@7=A(()zE82dO^e-dnuD?h^t_;ftRj!IpS7-*J_odY}go60>^5ybTVY%Cj_ zal8r>f-sVdB=256i9bx&yQHlTqjI>-Sa(=i4aQJ84~G+xJ5nC|R`#g+9!%J+$3;_c zL{`>P+}>OM)Cg3a@}c^Lp4mMn{I<^pxc39N69JBz)HUEv$ZJAPKFJXNTFC@;Cy+@C zvfwI!kJTe`GWkgJ{X?Ud3zNxVM!Rebzey$~E^S!t%5}Q(6YLqW5K+gdBA;HIBz#8qCe4|w{^eR}t ztqP@AbsQYk(HqsVJgQ^)z+e6RAAe!i>dCwwmQt@LeDk^xH_aWeb|O;0hNC*~t_JqG z@BR3H{Nm5Xxh(sb>d*YfXTJY_15y}obod^oxM>cAD*jDkhRg~T-D}6Xw$X{3#w&< zM1L}xWGBR$G#0l@`+suKFJdA&L3dN+AbQ$uV0H?v0cph;y{iYhTCAT zR%KfsWaD2+XygX}&V=Pm#ZI92o3o32`%;Z^R&7gpkzTl<0l6FHyf8`uc**muJ!g{g zIU``II79Vk^>R|QY?}#^7x;qM&MGZ1^i1#4*$k~^CO+6u@WYTeNyv_h55`CsENRlK znk!#io~HJl)q=?adZzgf=RDhdpW_yECc`z6%%cXi#h=oQ6h9Po9ZF4#vvxJbE+G>b zEA)r#uHePP-)i;$flEjARtM8h=4=pVuE7o|xPjgglEOQi_Ig6_mbL!CGf#^bat+~Q zDr;KO2U~7#-@UhpkeMP0ID$>R&a-n3NZDocJFm&dUQ3DH7{1(ENZ3U$ANjsd!rL(@ z`Rz@lPR+KWK}3!im=|da7A_No;v&5daBko=VdisFhHB#ZE%hBPFoLT|c#=A+t6CIZ zALWzXQ|(OBc`Q~kpHMkkk$$Ynezf?*FaGII{P|Nq@`q2|uT9vx&F}phv?&7zE#YEI zFLvw|D-B(Yd{&T3Il%s%vT^G4VEA71kosMo5wC~)F{9Fz2_Naj!K)r_RO9j zMO?Je%M&A!JS_>i7#8g~qf^40{jh|a$sb7s8b%6HftDAKf>5GbaRxgBUfGFLSeo)- zsH1%8Q(^8{?IOu{t|UBw{xzb#Psd(&eIK$0fqRa?CCLsb^929Wy)+w0I7Sx*$+Y|s zAFeh5c)@@!4k(~6@Jp5(%mW5fg_aF?Y092%MZ~;lmJELxkW>IL2Za?7fC0enuv%yW zgn(dLtVYHP^GrhZc*Wy5_4PT9mlMawa&0j&d|>|oAIWY_c&MmdUbnY=4j@bE21VrI z$x+lUpZZNlQ9GcBS*trpk*|CX%l4yLf*k`uzA3?)#FL}0E!3g0i}|P>lxuJ&Yg3Io zGcyTytc0|R^UO;8n4WJm8Vm##71dpQc&v-xW*v}|fpQR8%lzNsqUJ1ebv$+u39qRnSX#y||3R5^{?| z&2q%$tW)F=JBVGKj%PxEX%#c+QAPCd!8lICW_@fNEeae-RZ|Hp3a^X5w6(&RRBQ_r zCJx;SsI~x2c>=qF-Bk->U=`f0!*;B3K4_?Xk{1gcdHymlHp_geDzhB>h8IgLFt^Z* z^ejquLk=cL#KVud5K)-T5piNpGQ|dz5q_pLHLT-0B$aEXxS0pjFLr#hXv%zE68n+i zYFfyo;SA2#;-8cmIhGmOS6Ld?5;ts{5y4kG!HPw_g?4MK9oL)dlk0q`lY@>E$%jsq%1L96C&aK3X`Hu=lSU|0lg8b(OM)mv z1cC4ji&{YzwrxHl3(T`l7Ixt$0MMw_XKB7+A4)W3fUr?WBs8f^i~#YJv7StP+W2kY zw5^b#G0en*e5#aY!SYatbu=fxbsyjEd2_^818<#sF>LcjY-b5fk{=M5v{eA^ZfxBT z0@C5{K#qKXMOzM3Pj@V^RA`y$WzrUoLw12ovl#`TjmvfSVvkfaRijlerY&LW-ch&8 zmWJD`qRw+_%_=zOqzOYGz1RG55(0q_(Qiqyd>8^#fs1C8CYg!BkS4NcxsHdQ=ZYEe zCz;fYc4RJO7Jh%b=CMe$!s_Us)d8NS$&*F5>(=Stc@^DqH3E3QRdHiOx7b;$x+TS9B-%4C1%PL&mh5_SW-4h4{cFC4 z1_8T^yn=x3G8@(nNUQ66tgcVD6<)YLCW7_K7!#YBzomiGxcG)4DAd=$g43)h@Em=3 z>9+&)E^bWffmYxw>VGr{!7MwrE>>%-77$EhYR`UJ{D`2K{;grmqAAiZH3sXP%?H^B zAbryKVN1Lvi6k+uBOb&|6?Z}IuNGxe&a<|zy-t37)L}HnWVbqm)DT1iWA9L_`fWe* znbnl2GPo&P%b(O0TLpuG0=76l?gBtmK6XNoM>vuI@Zj$S z0iYgX{qWz_Juo4sh5&%F;`*r<B52-G2q`+)36s8buDqf^KuG{sW{R})r) zGONWxd?H*;1HfTZ1rH56xznvAVru2_<~vrBXPfUV&nHIjTKgA|$Z!eyLdYtvUWgB* z-YN^NZSuPeMFxi#w9axSe(w{5A1Q1;0v9-J-9W4x39KB$_jwX#$R9wgMClXFDyR+e zg{U`+U8;!7GxXFXP(I2qvEZ%fOtv;&YFLC`OM=r>HbKthACVPhbxCCtc><_#W@EGm zYg`kY+?8-sccT(i)NWY|DnHxeREJ5BYoUB4!T}@7f+Kv4$6#l6K;!t?s>lPVK@N+@ z5lalv>X^7ow}33f{8^CSio=rlj>JNr!rJaPG^!ba#|9)=i;8xfpNh_osKTgd`S%-C z1r;4^z5|Ct&3Bv`4)Y#1yNs$HfvAqJpem#h#58uYH9W>)@Rohin5Se`z<(j4c#4L; z8lo@>aSfs{Jct-Zb6X&LwdC<*X_7R_gH^~(jFR<%ft<+nuf{lZYph7JiJ=c&2Kbbp z4dfw1T$LHzlWFm@MjntA`NS`okiEh*0fVw;t^pScG1!_^A1K78v*-qfYf`aGc|Kd6 zBc5-z!kUDuRWtVFg^+Wusp>0dSWs8bScAeCa=i6dHf6t%)CRT~xil=Jy%u=j@Cl<< zKs5tCSP<|-4(XMv~wRTD*Px^E(H zC*pry*pVSf_43r(TS`&m!iCBw86$u@yvcu;3xqgEa{VlZH*S`bT^LBAtEUe=5{J37*;HStM{nbCMXgUVtPzu zuvKT3%4K{AJld>yW#B#9053o{pGqLgQw3Ha&V8A&?l^D&O2z;;E2Kn&MBq7 zoRS9%^K%dm2 z#Wq?c)Rz!uKP`St^x8I@mM9jxK$%OZKs0IPg?@VZcIQ)U!$y1ajoYJA2ODQlr0t%q zsVvX74}YHsz;Z^+*YO>WzlqPA@E5JmhHbhgf)C2inkQ80vQVg?1cz(+!>_Y5Tt{SF z*IMMSNWHwW7Htymo*I6DYh^f3ASK*0oU;6ufooOyHdB}*-==KS8>2yyepB3{to!cj zX@mA?^BshCBJb3jBi(73epAFfQiQJ0tmryvFFPbWD+sEs?L2AWlg2-Vt3Kn?)EqFt zfpsboh2NhI7@)ewuVf;9JIRlUxwuL*NL{(e);%2{)l72w1r*D~X60ZyO?&^8k#c>i z@wWLH>z23;eNUvwX03a)&Pb$g?WS{>u_x)yT=3o_Hi42Hsj`7V^-7<6-(+P-~3*F?G=w+S_%*@Fy+jjT+Ir?Ro zkr1peQ&N;7#W2$8&S_bHuE;0qB^=!+zpxnf$!Q<5Bt@FP6h zV2W_dV`llLYwI3GP`M_W)oon+%%e|p_fq9bN3g4(vikT6r+uL09xBKL&P|H_McqSx zoc2zEDRn^g>+Fvj=VDUjC1oPVQrRkto4gp0U*W{X6vt2cI-6qM%X?0?v%q84>T;ZB zvo+cB6jKQt#2Qu1Bc3=RGz&~XNS^WJ=SwfMP)ABzpUr|rW*R>_fG7ns4INd$F(`^J>#WPb93E{L?p>%wLj6ydv0-1Q zb8Y6Sn#%2AH29Bb@EWU*yP5g2$`Ho(5j&8Er&gq0#4QeO1fm5h#{+_^9emADF=qQ` ztVg@50ZoYVf#G%P&4h6PKpn)Oop^WN)Nvaf;c^!aEWR{>}Q9z zxF@jxs(n4dW=ukxU`k~;Oox_+{sdu}*r%>oEjnOV0WchPG9XrcR=~aF06>efORf7t zN{tTs`mUM=K*3dpK&V5N0{*QOk%JYbQ?4-4({;w(4(_DMmhrdA-PZl2F!7hImtM3AK9Tc3oyUIUhQ;|cDr@HM;9#VtI3*rz0O{Z4CR92 z6y3&bL@w4Tor2Pnwl5^6WNn9tcmj{HEfNWz>^NveqH+Xt3C(=+OeoTJpxqzHLJaRS zvNbWnNYum#(~J_QR9Gs(`JIGo30bbnyyl92GKN%oj0w9#Y2Q5?VVu^d0lwScdv^u3Qizl<#iDT zbJ^=6%zr~7OzZq2%)+?+#l$NF^o806vvb@AgEU&%V0Iubqbo6IvdRX7KVlWw1QU2r zYx7H#dWjof*#9!a>6UTB%Sw|=*Gw)QshQ~6m|W~Jm|T!_E0c>twz$c~GSCi2o`%V# z6HG1>m|Qy2{M_WCAO={{hL~K2R#%W|hc1XC^Yhd+xeTSbnaO1sOfK`;5V2HZ{Cb|; z>N=YZ-Q>bgZE}&yv%YL8dc-WA0_8Ep5q@t{KP`+w#GYPdO;P6gi^;6((y{*pLkXeZ zWGEpf8_KvCI`VfjtumC-iK|GNHedquD7?`{#0s&7PjUj02?x%laQwD}Mg zKfHRH)&+?9l`el1z6D_>t~o79*xP-b!!9>k`z~h9>y6etdz|oX2DpP7QEj6&&oYoQ zzUE<@Hw%*1yxwTdYx$bjg`aZ-ow~xB*R9t)p2C`EjoOMZp>2k4So3Ci@-=UoCtve6 z=#a(~`{n#-&Fg46*40?krLO1AHk6N78wfI3BV@OH3xQqqu!W%9vlo>+o7SqgA*_1r z=4jQ^W!Cko*G#Kcy*dpb+6srmA*;F8FWp+~3|O_80Zl9CD_`|`;+Q)gZ7zFHY1!*u zVA&H#Z7zEgU+uCtF=oZT@Upk#R$FqlxQyCfjw|am^jj@0CIg*sX_**q*D`^qAcnna z52Rk|Z58o#Ho%Bo0Xqu6YYm%!-&V9>^Y24-R&|g+peAhxQ)3^>YOH%~X#vc4#*rGT3K5{fbN;)RUTEZ(eO zVa3AJ!FwE*Sf~VxGuy4=U)Fu3sMpQTl5$=*I|s9K5|%CEyy5G|o_QPIEjJ9`Glyuk zZBQ>;cDPdHE4nrJD3P+<8<^U@cOH~BsVnl)Z$LP$SJYy(~qa%2=E!}26q5xw^I8LfQ31?Ra<3ta8|X2F4+-bo5k!sg!!xj zwrm(@FpgDi)zJENeK-P+W7;3I3aQ;TRlKS&f9*x{m+j1Y+lXj+wr$h_ca3c$z52Eh z9%nNqgiHsZPo$pRf;xuv)8`0BTf%meQH+eV$nwvk2^ znAv%^jTA?a9U+AkTzlK7t&X$oTBd5-sLgiFcw)78GnRV3Z6j;g;~9<#c8zVLx@l#r zwvFnh>%_69t5hfuvRZT7sN>s4@k+6C+~;NCb(@RqH-C*bmm{yl=5o%=f17MBpZMEn za|vDk$ltupMGWzEn@c6ZzV0*8So~i1nK+9k~2t5Q@00FbGB1 z`E<$XWDtt5a}Mpb;Y*{h4WVeV7K$c=P(+BYAQW+#mkULcBcX`LF`;NcUc@=vy#}=} z&A=p4<~wO9kS5{{q-2__xSW*Tt42=BepFyk`_fE0U05cKDhNdb_oX4YT~KNUBNr$7 zi%`ThVBJ=>|)@%!5<; z^*B?SllWj~a@cxVklC=U?D`BLytaG%YgRaY{wI#PO zZvq;qYc-Ubc*p5iGo^`E+}AwAekR+TX<$6h%IzP|U!02M_8$|$?|qyOJ%StmoV;6Q zRmqO4x9XXrJ0SpN1 zSS+xh!_uOZ*F67`UFB?^%GunC65A`NHf97d6#$JAid8F`xKhVWd9;4^=qE#-L?e~2 zeKu93)>EeU{TUO@G#-90L72A;sq{q6`l9dW0W?#=Xubn|i##ZJ8j*gYB(= z^MbQ)rcUG5t1lHA^)!nqRX*U%jj}I2l#?U)j|B^)eo2<{h?$mwp{Ht}6D)M_f+Ib! zw;b5=5%+68C{Rk->I+r=&L)SS+wWOt#Eop!#)E9sD6K{SVSM;y1~z&z0~FL&4A3nF z8sNk$AD{-R0ov^h)c_3*3xZduV`(c z1wiLjwBad~)(M&|q(eXFDy%tFbAK}1u_GOn(%1rHR*+03DZ%Go*M`q42NyU^ZKrBv zRhR9?n4xXGiaAk@tU#o;_S*Rw?+Noha4ehL@&omEwPB_ToieIc=WGU#T}_3V@1ausJtFwn8_mV;~kkX7QW>4MeAzDZ@^xB@qpZ8!lzXtaII<_~o|Ta))oYlv;7| z?c@}H2@?4{)zEk`#laL1v(aG853uLf-#N9mk=8saxxKK0%R}71$orsv0S)S`zYFj) z3dhc0k0;J>)KTh9_7|65k8NvX%>p-Omy6wR^c5S_gdQaOwYF>&hOHV1O(^$#*~V-N z!hqNq0`YSqCp~}9EUZskCvs;r!}<)^wi$E&@AS%R5`S)~9$6sd zI~!^_BF|-=TD(iR)LC-=I6i#ru^<@-tO*3<24MVg+!j}O5>Sl;x{50;iFe=RFBa?? zSd}tx+HHbXlY$>)R)HNowsKKM_9!dfip4J%(X;szBMd+madkLColvwfV!G=@qWSyk zG-IyqDh_vrxJmTd<2dLn;Z*shA7X3epaL&(Ekz=#;VdWzz^P5^V4+3ug%3V$m+k35 z=nIM;p(T$(!l0%_^=Mcmh5i$^%suT(+kZDhV~AfsDKIPXs@!mkJcg+u;DAIAu8_F( z2j*_QwR8I~(F?nXjsu!ceu(F@N9dM?j*Zn}on>Z5@^_({IkC~LP!nid;BxUOKr1E0 zyr9Ln@3h09=^ear2!xr+p-^2y@UN@EC&LF*RxG59z1en+U7>EW!k<8O?oUVq+`f8; z=-pzZ5nsPH=ted#NDp#YMd;065#9~cQ!_JhGGnL6db)DS#+HlD5VTkjITa-WuoM6S ze@k@^YE>FR-dCmJHL)rUhn`hw>;)+e%9lVq^hOv2 z?i|p0;qvUW6~QTLnV3c`p>G2;WHrvw|Mzjt!79Wui@HnGgQU&>Vm$r1ajs>9{RNI1 zmqX5k8K?R6>W$M-kuH~L1aI&;|J%wjr5o);iJW$fJmU!-m3*njHxsQ=;E5B?*} zinkD-PEcVS7HHRyl$6VVDCiQSk13jn!yL8*CM(aZTU;_pujsQR11o53rOxi<;YsD^ z`M_}to-!i&P$N%Q^OV_>f_+^*s#L69l288)3JJB0yyDS!S^Mq90whF>%RQ}D&@xlE z|K-#p2M%p_sO%vPh`Vum(+=vT#Q1}2AQ4da8{j*|i3{_xP%1O&i1TE!G$;4kS0CO#x3*#j&+sK`38| zxst@9F`-1ZSpQq)W*tk5^iSq$eC0*6WyfSZRq~P!&2523Hc4F|~{n<+}al^75HzpY-{(F5`J5`ExjHjVKiGfu-qrBExh!)xF05 zVpeD_C5~jHNNM01RHCljk3@wT9;@d9-3!KAR>1Be3pu#8{$6B(aSUCkkYhD8!t#Bg z{I6;#U-a>ZRv_8eq?MP(T7hm~lUDw0tQEAB*QAyIbF39s?$@N1KObuaUKYYmL*1EJ z8AKl6Vw%7*x2ecQZ<%EV!TA{g5IMtDnyq_%rCZ5GFI0MhVlcVux!`TyIv*y|g~959 zG6Kt%O5H@9Zu~G*)$xcCXPOyi>}?cDcm-zhX>`PoP>qpJYnKnGUa4)tQYV@#wRzI} zf`v=XUP3x)na1dNlexB3D}R%#hBa^HniOdf3X2)St^-FYa=B#Ddj}CWtL4pBr9uLI zku2GDMJ7$Qw4^FEHzC>T(|Y2vgDtRJW%6hL;bVW&K~(5VrdBx?+-KAN-{)D;LTYiv z7lK4fmTD07*Lj05p z><*Fk2qHmj*^8y0k(V+6H%E``Re=}b!ZvAOM-3<&3eOGaH;;j{z(R?*0D80J++|jb zRl56FE!2UCYO*tnec16pOT)m%A1a6B(4u_POTr|ir=a0>$*e!gg|?aN)LSw*>P)m_On5D{4S!BXHw7%Oi+_W50Zq$ z69(UOH#dAmh-lXU@CmR~Zr)QO>g_Lo9In2P!vo0{pibYocP8}4=3==~M&|y%O5)D_ zU@A>Um{1ce2-X;T2gz>#m-1V#vz+)dsX^4MiKXcsQPl17|CRr1CZ%SgMgC>_Y1HZo zLOkY9RAafdeIBU`(L8+K!}3H{>#sptA?R0sqXyP3B=u&0imrp8I|9L~cClS)zhV`% zS0#j=36~0=B8A%aUizPmxx}D?OijZExf(f$$u+#%2Cq(lSEmzoR{gJ;q(l9yV8w;n zXlAyd(g~LPHGtxzX{x_>dG(;e7#@ky8?5i>Xd*1(+UTkv!jBXnSp=&3%1L|y*|>Ro z(bi57=%tI82heGX~uL-&6* zMzt5D&jaOlph|&XIz(-7;E;q!6@#rv%S^Tiaq`smFDpRn7b(lmN3vVU z=`6-BZEpZ0$|otIb8X~F>7RB}5&Z`6f0nMad^%d1z9O>!_0Rdg>N^&rbdP3+HsRTz zRx~r3m>?ZY;I^qt=Gm#(KxYBPMAewACp2WQ9l<{>zfirteK5=GA4W^`(!AwSih(H| z9~)m<7E9B&MKg{6jlDF|*L?KMG2fE#J>|DG)1DH=L!zz*Go`iGlYsPtn5u0TAE%`; zOg2L?Mqi*r+0zQFTD%0N>I;=%_r6&IwfRCNCdW&l17E1bV7vsf%!Nu!jF$i+?8}t1 z(BOrE5Q5!RK!6UXB*{Z2<->o(+W*0pnI*0V^G=<;ds%Iv8w+G_L<-TiN0cKeqTQq% zIfILGI+~*GlA1cO3^pH(*oUFI$%+i4i>z+4u5PkX-Q2xS)fV%v>Rp4bUGHqrwPvAu z*H(3@dM6o7TO)WP?|0)5^HmeFwf`Qw0-9%RJ?6I1DVNWrT)=WPb*s(GFQ@zH!1B>g z-2YF@T9WydD!u{4a4SMB_@rPx0Q7oBGPwu}*dNe#&-J%y5l9s$Lw5+!q?-2vwrP8d{ z+gqiH>4p+h+^WySdL*H7r^{@h$e`jd9XU^oiUXZu@HToyhK1#GLIH(FG^H%Ep1BRc zx*_Y~yn1PZC%+g0gbh0XcCoKU2kRb~5nxpZXE6dmvy^zVTz-VfW@)^;v0ZsALRNLsvlnK|R<_O%1iRNIXEE0X;2F96ipl@!@R1 zlFI_5_^B+E#`t}i&_vFr0F4^tkspQNE<3W$;&6a$k}U+x3+^}a$GWr zAZtVDew9VPoFOOGNQk0AZK*&BJdLh$dI}S@U6G?59$n?MjNV}zG%U~MK`9|0PbK&(0lMTwR{5#LQFg2~OpAN6ri<2ki2gB=? z+TTvfKmB9Re1qaOCgn%#S7u^TzAwC9Ys+W(e|_FF&*@xaQhqkP&d6wa8YPHAg3 zDSsur&YN>udANQRTP%O;1+VIN&2uR!-yh!JVl1nC9-W(6Q2zHeJ&kqVHaC64QR(``;GTqoU?`dAj)P(FJPhZit0XIoQdY# zt^abe)||*9CJ+pJ8rzhpdxS8sq>q?kv@;97upkI?Fg$bZwCiBCk$v)u!nk&(|6M?3 zGTNCohRCO`;jqS>(@GVVAI}<_HI3czj~%OhkdpW#oYlm(;c(Z;>gc0J0f;U8$h^+sym$T$LN zwz!@l<#q=186GYb(GC&o;s4@2iR@4#2|s8FPSiQvR0}Tvlz5X;b5&4=p(%JR-DkCd z=F7(@Si*c+W528mpPOskX&WztsMfeMmOy|4CX>`q{1{{;OUraW#tTiPJW6(_yM;S> z=gYk#(d-jwR@L@pudP{^+NW<~4O~U1W%a=StC2!0#8TQjVMQu zlQBigVUI0ni6&xRLCO+EQxUYix`jUpEodN?Mc`T(wcs)UPGHJN4XVrM$ztlgeYoyz zvo4tr$!^`VxwE3)ngTaD0s~6|ht7{KHI64I6A(lIAj5TS7QNlf`GUO+?rJIl>OkJ? zQUJkk?c$cNn4us@n7u(gT3OW$b|%X%X=^H4Jn_3{zwp2dCx7#w^gkNAF&ifVju2D7 zs!F)}c8^T|&V~z6x4%&32w%6%V5ra7&)1|Iz5_@ z*Z;h3t#q1A>KT$?LDJ}utIf77a8BvfF0Z6$t$}cl0B(nrk8GJl1z;4+3v9vf20k+y0Y2Gj5SgT_BL^wTZz;5xuNFZ@oTbPqn~viQ$$u( zQD0pd`b^))udbxW0PHln03DXRR(0Gg{j097lpCjAUHMLDrq$7efO6(9Y=iD`dV^5J zDX5daA%VDhH*r|Pta?;F2d!J58u!89DuOrWChL_u#E4q_#?8p|8)yuPw(2(1#&$d8 zCm9@KG<^~=5GWApuI~LcGn+_Q(&`v>gSc~1H!y;_`77%7j$v&ZQMZe~PTc~Zam5C8 zlU7r=p2bTW)NN`)(xmP~nvPDZ{Do#qZY7}4+=d)&F=A5y8CAudcnoGh=h4dZw2X2+ zI1*u#p!P|-b`=edEUdaxwtgk)7h)hlNO}-x4^(AZQ7&!5&5D{-HV6AZkOD&M3;m&z z38qg;z>ncq=ofnuBJpT=CZ#IeTm1tSLG8EZ*PBBkQGHl(Iwt;4%Tm zgpL&VCu-lPTo9+#B!mp#C*tLkFuatdd**fXcSMh5xQ~Vh>;^Gd)$sd`wyK~1+kvOq zqr!pz(hU(G@TQF1PlZ`8!E>gDOFv&a|i)X90k~_NcbmwC1&CelWt8Hi-$De(@b!O{Pcym)={p z_CW}~nA}9TbBs7(409DNWD)X#t^&!@+!X9YcZgGMiD`cS@UPNpr2DiG3C}O5ca3*g z(P~nY`0>?>%^n5deK$@0%zg*6H>GAUZ+u}2J)Mf5fhEnvP~mUb#| zv1L2EbiS7-?&>1iu;Yb(#(bs!1CfDFa;CB?}X+1ImC1#!dMaLp} zF;jZBxk6E_tWZCT3$=iT@|Z9rimi-7bkfmQn1$9>70jw)#Uo_3%lBr{KilUVL><}> zGU)1qE!bEWJ2lP6<+goAEE*Q2?B6HYt!h=vy|q5xs_`kcihxzOS`Dtzc7T$Dkx8eX zi1J%wK!el_W(|@Y!K_J~%*mQK4QM0c>=Kx!7?7uu~VWBwaa%U4vD1%ih=(88+9ByFxq{)8E<*1qbuF|lLqcpk52Ija{N zXujq#iB>Lq5(8neki+oa-4VW|=L%0flkd2COXW~>E*iX3q4$-tMyjuMBe0O61}$s2YcMx;Dq zOI`@m6Ww92pnOg!;Tcudp6QW!R1lI#ozNfkn~BN4~I$iw)k_|EB2Mf6r`i1*wxu=5$w@JGzse|U%^Ja}%H49X%K>Mc5NGpUW5&?Gv0 zq>I4Ht+G*#fQ%}wQ#_`ev}gv_0?A>% zcR?$!#jq*s8>18dC^$4Op>2{oyC^3Qg~*5(27$0Q#q}utz3guPf8D(afL>L7_kZtw zo@cgal1yX^B*2{!On@wtJsGwoe zVN1CwsN!i1EimE@fSE1W&>X>H(ulTVlI2A#=|VF>f`1?+n5IVCh#+N4=t9!b_%IBL zv7THd?bJG`q@yXzf|&7Ky~^*9Atdm~2by|b6|=I06sm&rmclht3ehUMjF^@4@&qhV z)J}??=BKE;V-^iUciegE4f}Z2jf7Bpz`!CP_PY}fh4P4ho1Wzi6XoR59CTwQ!sw|Z z`JAmpqh?rT@`dpM=P4aR+}B^{xG`C4fKE5{)U@ebs)lv7*5ZmlrPFI8zLOgQrhA8Dy+7HfH^l zc<5<#7Cxf531g!(5Ox|1{!087J(2S83u+J%un*Rnq?P5s88prch4effPMYY1!l&Z9 zz8+}tPu1RoCu(9o`DA?nUTl(%vVK7k$wG=KOj90GMZS`xC`_|GqR6+B z6oqNFpD6PEBt>DG?QumOOHvf3*?z6aPm>gdX}0lq6ZvJ5qA<<&8%2D|4a%k`>fC{B z~V3MLR&GxV&UrACFrr91*6b~0!Zh0rO8HHaqA<;Ni&75oN8MJKX1h(1o01fTX|_8Q zxiv{qm}a|Mk=v6Lg=w~X6}dA>QJ7}?h$8P#QWU1yK9o&K_-#sJII}Qe4GDG4at~3j zP$bg2C7SE_xi*9q;O8OyJYhcx^?XhwOe%Efi7Iq7&lbSvO2D1-8}~<8{9c}gjiR=q z$5FIO{~&+YnYbrznzMLnl7Xm`JJ)t2{r3z|=LN_@Cia)pnl=$y&w@#Un98yOBgS^% zYy*emjF8@hGZw@dF;IvzLgJs2Ge&LK%11)IRw1%%w92!eI8tFzroE0U*a+5f1(_eet{Y7`Dhhg2Cf`XEn_~$B{Ojx2^=LKOlOwG@@vg9S(9!u31v_5MinXY9C~6>n&CQl zJ427!%=~L@*U}|=!s#jAw1y>yqO?>~EdxB3TzpStbCRv1Y5~H9GNq=#ux1LxYeI@l zfsr!>MyV+fSjp!XCH6o~WB1Ru7;7-C8to`(d<8hn0TH%BS=eL=LXKs|y7ObyQ%yn} zc2n$a4TIiq&ua((S!x{Y&~_X~0nL&s$iV3M614~zD6{RrOYVj}hA%=J`Y&fH4`%>H z#AFQ^&rwc*rb9IgT8qPB>oumO_%Y9lOZcvwZrMQVKn|)Du0o?^kyB^spqp=OOh5xb zY-2~M;fa;QgM%m9p9`Hipm8<5+q6FcCf%EQ-+}E*2cw1ODaywgZXp_XC~i7!ijFL ziEs9Ma1pT4LQf^bgi0o()}irB>}}RWPbGyxPp(1%Uo)}PsAR&h1brzClMwHsso3C+ zY~^Mu6B&Xjh&%uSVEK@ZKY^@n6R|_I&=gUKmb-~ckSEV;=qjVb ztdO?f5sCdLWgr(gbB>u$$U*~C0|=&9Peo-ThpcKQCAO3V^;`A4?U%Wo;uMl(D8Tm= zw~4bWTmx9dyo>@-3E=xh&P_HcD0&6wk0W4HRN8UV#B1OxhqatTrc&di=B6JoI-0T; z=Bb!`aap+YD1mc!xE{7!_=V}oD?uBcT=1Cj6ddJBeb*hxC4R=Q@1B+ z3QK|;tf+LSd&pqvuJnb^szE{Nj^uGS;4-&B+-W2)s3V*awqe!38M-gTAgErLY}&uX%X>^3pyvG6DLg}Tc<8)R=eDtmm>=+n3x4! zhr4j%4~J>cmxw|-#8Pa2D^Zi)wSdiWERS|4wrE~7P_~`!^1q<+f_Cks7Zo@|_AU*q zaX1x)c4E+wNy7+M0l{lKS2DCm^4OP5J*-gL zDPZ9Q(W)A}!Ys#uVBp6UqC-w4P{NfVC2rRwLOJh9(Av4HI89K&78wu^c2@810uq0x~#dXBCp25Wutybo<@6hN702l zEd;7bxU+aHt54M2whjrUp-h+N7cM6KYsCpyyWMRt0FSMQJBkN$5o?~WuEAck6TsTk zM&MGk-9~ms=}iYd4P5EQEa?Ks{nPV~0I@KXLDi~eV}%;of_W!x1Q|%kLwf^ttU?F@ zWkabO+8ih)mVjeyoLFOvHJp~fm(`q?6rls7A1I>NL?&jG-sl>V%Qi$?qSRJ>)w`B+ zzjD&DY|g}itI{a5D>#N=$&S(^*L~V1wIUPR`Kc z1gc#S-WJwRkcgB5u6=6*L+RxEi+ zV8+h2k7{WnF)em`ibi~wwmt8yC_;Q8>>9!BVpGO$M(N-Gm~jLrvbZJ?=x`|}Qp{mr zo~{#v4znPZK5or7v!qnIJWwi%`C9ahvOsx7vzO`EEMHN_v+@MGfI!DtojI%M^r z_6bP>w|zn&P`Zrpsh8(zqMP<9sm2z&J^gis=H;kWcIcW#xpy+Hc^2ypi|zExw~Wv) z!^RNCyll}ln{JJ_CX}x=0HXXj z`3P;vj>U^4q-ad+^f#shDpgMMUo3x)NH?hDsB*+o0Ma1Az(nIjO*7zd1hJ?q<`bQx z{f-o$k6l(Ukyx(q$D7?48CKTGy%4raB^E)a-;g7wtuI;?l3ZIvC-t7#dfkBq}!r?h=uax1-+sCv5|Av-yad=oLTU8VEH zWqFs&5|-{xQ`F{IV0gp%XP0(E1FP29*DHi&NyQXJ=W8e|^QB!M*t zdxRcr))HzWh)Q{mbyS4a)JUJ{NscI4ImAdQTRH_&r$cgU!XBqTRMW?ukMM1SJ~ zf&wv^46cp5vzog&O$&F>g3>Ca7DNu32o07a1xn`EPIE(=ePUZAhxydrNF7iYx7a0W z`xM8yT2sO75ma0<1v0^6qS`+f+$UU;LjKP3d)NK|4$r4^AZyHT|uGHz)8=et$x|8fiolX{LB*5Y)L4z1a zmk>$<`Jdk5Zrk3SX9ryzEahp~_N{#JLkY)|$pEn}r8CARKw~2=Q7P8i|MV@E9Y_)s zwg-SeVgMz~CKd*-+~>^1kgGE>U|FCwvNAXcD>X2PP}R%|l$9|nP#yE`aMdLSjo)Q$ zCS{E$)(+s9+_8quzC{oe#|vRgvNP7<$VpBZ1_dyz!L01Sgz>ytp@bgdS`JGTv^g+4 z{kcUHO%{E?iD&>IB+|B9(AEwW6pe5qGV`dT(P*_7r3(@_QHqSMgYVp*luV3dgs2#H zDG`=ZWy#V+M0jQV6`(q4>LH=JZ_PL&rfm&Eo5E;2fKM6#F=rmziAOXqw~7LsJTGri ztr0=C5fVb6UoG-_%-R8F8g!VPMzlbz+oGdLYXz82oXKE_P~WZo8pkry3kwT%Y%3+F_+V>i6zszG12gM2ot! z@9>zaBP0UY7D}&B7+p!XcNP3N7-v{0B^Lk3sex3M`dAjKx-|8mtGIH!mn_* zn!HNHaY7j#C1&iu_CV8sPOCP8)4}I(;1^W{qHC&XZc5#`3#HQVQVESpXiO52J;<>) zk(Xoee2ClgI$pm5>%NLtRJYGdC7WH+Goc z-B~E?7!n=P#EY;&TI$ptIe3cSE0{5#s-y�zlXZ@Kn{>nanbr6$VjEvr=^v8%%DM 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 JT07qM{{w+N!yEtr literal 0 HcmV?d00001 From 8d646596983aed43a14a3ff9e120bc48678f08ee Mon Sep 17 00:00:00 2001 From: sotnikov-s Date: Sat, 27 Jan 2024 09:54:27 +0300 Subject: [PATCH 05/87] add additional tge participant for lockdrop+vesting migration --- src/testcases/run_in_band/tge.auction.test.ts | 138 +++++++++++++++++- 1 file changed, 132 insertions(+), 6 deletions(-) diff --git a/src/testcases/run_in_band/tge.auction.test.ts b/src/testcases/run_in_band/tge.auction.test.ts index 8ee9e501..8e89adea 100644 --- a/src/testcases/run_in_band/tge.auction.test.ts +++ b/src/testcases/run_in_band/tge.auction.test.ts @@ -1,4 +1,5 @@ import '@neutron-org/neutronjsplus'; +import Long from 'long'; import { WalletWrapper, CosmosWrapper, @@ -23,6 +24,8 @@ import { queryXykLockdropConfig, queryLockdropPool, LockdropPool, + LockdropUserInfoResponse, + queryLockdropUserInfo, } from '@neutron-org/neutronjsplus/dist/tge'; import { Dao, @@ -207,6 +210,7 @@ describe('Neutron / TGE / Auction', () => { 'auctionVesting', 'auctionLockdrop', 'auctionLockdropVesting', + 'airdropAuctionLockdropVestingMigration', ]) { tgeWallets[v] = new WalletWrapper( neutronChain, @@ -261,6 +265,13 @@ describe('Neutron / TGE / Auction', () => { tgeWallets['airdropAuctionVesting'].wallet.address.toString(), amount: '1000000', }, + { + address: + tgeWallets[ + 'airdropAuctionLockdropVestingMigration' + ].wallet.address.toString(), + amount: '1000000', + }, ]; tgeMain.times.airdropStart = getTimestamp(0); tgeMain.times.airdropVestingStart = getTimestamp(300); @@ -308,6 +319,8 @@ describe('Neutron / TGE / Auction', () => { tgeMain.contracts.astroGenerator, ), ).rejects.toThrowError(/Unauthorized/); + + console.log('TGE contracts:', tgeMain.contracts); }); }); @@ -318,6 +331,7 @@ describe('Neutron / TGE / Auction', () => { 'airdropAuctionVesting', 'airdropAuctionLockdrop', 'airdropAuctionLockdropVesting', + 'airdropAuctionLockdropVestingMigration', ]) { const address = tgeWallets[v].wallet.address.toString(); const amount = @@ -406,6 +420,7 @@ describe('Neutron / TGE / Auction', () => { 'auctionVesting', 'auctionLockdrop', 'auctionLockdropVesting', + 'airdropAuctionLockdropVestingMigration', ]) { const res2 = await tgeWallets[v].executeContract( tgeMain.contracts.auction, @@ -466,6 +481,7 @@ describe('Neutron / TGE / Auction', () => { 'auctionVesting', 'auctionLockdrop', 'auctionLockdropVesting', + 'airdropAuctionLockdropVestingMigration', ]) { const res2 = await tgeWallets[v].executeContract( tgeMain.contracts.auction, @@ -532,6 +548,7 @@ describe('Neutron / TGE / Auction', () => { 'auctionVesting', 'auctionLockdrop', 'auctionLockdropVesting', + 'airdropAuctionLockdropVestingMigration', ]) { const res2 = await tgeWallets[v].executeContract( tgeMain.contracts.auction, @@ -896,6 +913,7 @@ describe('Neutron / TGE / Auction', () => { 'airdropAuctionLockdropVesting', 'auctionLockdrop', 'auctionLockdropVesting', + 'airdropAuctionLockdropVestingMigration', ]) { const userInfo = await neutronChain.queryContract( tgeMain.contracts.auction, @@ -975,6 +993,7 @@ describe('Neutron / TGE / Auction', () => { 'airdropAuctionLockdropVesting', 'auctionLockdrop', 'auctionLockdropVesting', + 'airdropAuctionLockdropVestingMigration', ]) { const userInfo = await neutronChain.queryContract( tgeMain.contracts.auction, @@ -1081,6 +1100,7 @@ describe('Neutron / TGE / Auction', () => { for (const v of [ 'airdropAuctionLockdropVesting', 'auctionLockdropVesting', + 'airdropAuctionLockdropVestingMigration', ]) { const userInfo = await neutronChain.queryContract( tgeMain.contracts.auction, @@ -1153,6 +1173,7 @@ describe('Neutron / TGE / Auction', () => { for (const v of [ 'airdropAuctionLockdropVesting', 'auctionLockdropVesting', + 'airdropAuctionLockdropVestingMigration', ]) { const userInfo = await neutronChain.queryContract( tgeMain.contracts.auction, @@ -1462,7 +1483,7 @@ describe('Neutron / TGE / Auction', () => { expect(res.code).toEqual(0); tgeMain.times.vestTimestamp = Date.now(); }); - it('should not vest LP all 7 users have been migrated', async () => { + it('should not vest LP all 8 users have been migrated', async () => { await expect( cmInstantiator.executeContract( tgeMain.contracts.auction, @@ -1523,17 +1544,17 @@ describe('Neutron / TGE / Auction', () => { ); expect(vestingInfoAtom.info.released_amount).toEqual('0'); expect(vestingInfoUsdc.info.released_amount).toEqual('0'); - // NOTE: magic number - 3269 + // NOTE: magic number - 3065 expect( parseInt(vestingInfoAtom.info.schedules[0].end_point.amount), - ).toBeCloseTo(3269, -1); + ).toBeCloseTo(3065, -1); claimAtomLP = parseInt( vestingInfoAtom.info.schedules[0].end_point.amount, ); - // NOTE: magic number - 22337 + // NOTE: magic number - 20950 expect( parseInt(vestingInfoUsdc.info.schedules[0].end_point.amount), - ).toBeCloseTo(22337, -1); + ).toBeCloseTo(20950, -1); claimUsdcLP = parseInt( vestingInfoUsdc.info.schedules[0].end_point.amount, ); @@ -1658,6 +1679,7 @@ describe('Neutron / TGE / Auction', () => { 'auctionVesting', 'auctionLockdrop', 'auctionLockdropVesting', + 'airdropAuctionLockdropVestingMigration', ]) { const member = new DaoMember(tgeWallets[v], daoMain); expect((await member.queryVotingPower()).power | 0).toBe(0); @@ -1696,6 +1718,7 @@ describe('Neutron / TGE / Auction', () => { 'airdropAuctionLockdropVesting', 'auctionLockdrop', 'auctionLockdropVesting', + 'airdropAuctionLockdropVestingMigration', ]) { const member = new DaoMember(tgeWallets[v], daoMain); expect((await member.queryVotingPower()).power | 0).toBeGreaterThan( @@ -1744,6 +1767,7 @@ describe('Neutron / TGE / Auction', () => { 'airdropAuctionLockdropVesting', 'auctionLockdrop', 'auctionLockdropVesting', + 'airdropAuctionLockdropVestingMigration', ]) { const member = new DaoMember(tgeWallets[v], daoMain); vp[v] = (await member.queryVotingPower()).power | 0; @@ -1763,6 +1787,7 @@ describe('Neutron / TGE / Auction', () => { 'airdropAuctionLockdropVesting', 'auctionVesting', 'auctionLockdropVesting', + 'airdropAuctionLockdropVestingMigration', ]) { const member = new DaoMember(tgeWallets[v], daoMain); expect((await member.queryVotingPower()).power | 0).toBeGreaterThan( @@ -1803,6 +1828,7 @@ describe('Neutron / TGE / Auction', () => { 'auctionLockdrop', 'auctionLockdropVesting', 'auctionVesting', + 'airdropAuctionLockdropVestingMigration', ]) { const member = new DaoMember(tgeWallets[v], daoMain); vp[v] = (await member.queryVotingPower()).power | 0; @@ -1822,6 +1848,7 @@ describe('Neutron / TGE / Auction', () => { 'airdropAuctionVesting', 'airdropAuctionLockdrop', 'airdropAuctionLockdropVesting', + 'airdropAuctionLockdropVestingMigration', ]) { const member = new DaoMember(tgeWallets[v], daoMain); expect((await member.queryVotingPower()).power | 0).toBeGreaterThan( @@ -1931,7 +1958,7 @@ describe('Neutron / TGE / Auction', () => { rewardsStateAfterClaim.balanceNtrn + FEE_SIZE - rewardsStateBeforeClaim.balanceNtrn, - ).toEqual(44); // lockdrop rewards share for the user + ).toEqual(40); // lockdrop rewards share for the user const rewardStateBeforeClaimUsdc: LockdropLockUpInfoResponse = rewardsStateBeforeClaim.userInfo.lockup_infos.find( @@ -2627,6 +2654,105 @@ describe('Neutron / TGE / Auction', () => { lockdropPclAddr = res[0]._contract_address; }); }); + + describe('migrate TGE contracts to liquidity migration versions', () => { + let newLockdropCodeID: number; + it('store new lockdrop contract version', async () => { + newLockdropCodeID = await cmInstantiator.storeWasm( + NeutronContract.TGE_LOCKDROP, + ); + }); + it('migrate lockdrop', async () => { + await cmInstantiator.migrateContract( + tgeMain.contracts.lockdrop, + newLockdropCodeID, + JSON.stringify({ + pcl_lockdrop_contract: lockdropPclAddr, + }), + ); + }); + }); + + describe('execute migration handlers', () => { + let userInfoInXykLockdropBefore: LockdropUserInfoResponse; + let userInfoInPclLockdropBefore: LockdropUserInfoResponse; + it("get user's info before migration", async () => { + userInfoInXykLockdropBefore = await queryLockdropUserInfo( + neutronChain, + tgeMain.contracts.lockdrop, + tgeWallets[ + 'airdropAuctionLockdropVestingMigration' + ].wallet.address.toString(), + ); + userInfoInPclLockdropBefore = await queryLockdropUserInfo( + neutronChain, + lockdropPclAddr, + tgeWallets[ + 'airdropAuctionLockdropVestingMigration' + ].wallet.address.toString(), + ); + + console.log( + `user info in XYK before migration:\n${JSON.stringify( + userInfoInXykLockdropBefore, + )}`, + ); + console.log( + `user info in PCL before migration:\n${JSON.stringify( + userInfoInPclLockdropBefore, + )}`, + ); + }); + + it('migrates a user', async () => { + await cmInstantiator.executeContract( + tgeMain.contracts.lockdrop, + JSON.stringify({ + migrate_liquidity_to_pcl_pools: { + user_address_raw: + tgeWallets[ + 'airdropAuctionLockdropVestingMigration' + ].wallet.address.toString(), + }, + }), + undefined, + { + gas_limit: Long.fromString('15000000'), + amount: [{ denom: NEUTRON_DENOM, amount: '750000' }], + }, + ); + }); + + let userInfoInXykLockdropAfter: LockdropUserInfoResponse; + let userInfoInPclLockdropAfter: LockdropUserInfoResponse; + it("get user's info after migration", async () => { + userInfoInXykLockdropAfter = await queryLockdropUserInfo( + neutronChain, + tgeMain.contracts.lockdrop, + tgeWallets[ + 'airdropAuctionLockdropVestingMigration' + ].wallet.address.toString(), + ); + userInfoInPclLockdropAfter = await queryLockdropUserInfo( + neutronChain, + lockdropPclAddr, + tgeWallets[ + 'airdropAuctionLockdropVestingMigration' + ].wallet.address.toString(), + ); + + console.log( + `user info in XYK after migration:\n${JSON.stringify( + userInfoInXykLockdropAfter, + )}`, + ); + console.log( + `user info in PCL after migration:\n${JSON.stringify( + userInfoInPclLockdropAfter, + )}`, + ); + }); + }); }); }); From e2d6251bc9f0611523d5718cb6933dfa23abd65c Mon Sep 17 00:00:00 2001 From: sotnikov-s Date: Mon, 29 Jan 2024 13:38:38 +0300 Subject: [PATCH 06/87] add PCL pairs filling --- src/testcases/run_in_band/tge.auction.test.ts | 97 ++++++++++++++++++- 1 file changed, 94 insertions(+), 3 deletions(-) diff --git a/src/testcases/run_in_band/tge.auction.test.ts b/src/testcases/run_in_band/tge.auction.test.ts index 8e89adea..3a5897a2 100644 --- a/src/testcases/run_in_band/tge.auction.test.ts +++ b/src/testcases/run_in_band/tge.auction.test.ts @@ -38,6 +38,8 @@ import { NeutronContract, NativeToken, nativeTokenInfo, + nativeToken, + PoolStatus, } from '@neutron-org/neutronjsplus/dist/types'; import { IBC_ATOM_DENOM, IBC_USDC_DENOM } from '@neutron-org/neutronjsplus'; import { getHeight } from '@neutron-org/neutronjsplus/dist/env'; @@ -2584,26 +2586,115 @@ describe('Neutron / TGE / Auction', () => { ]); }); - test('create PCL pairs', async () => { + test('create and fill NTRN/ibcATOM PCL pair', async () => { + const poolStatus = await neutronChain.queryContract( + tgeMain.pairs.atom_ntrn.contract, + { pool: {} }, + ); + const ntrnInPool = poolStatus.assets.filter( + (a) => (a.info as NativeToken).native_token.denom == NEUTRON_DENOM, + )[0].amount; + const ibcAtomInPool = poolStatus.assets.filter( + (a) => (a.info as NativeToken).native_token.denom == IBC_ATOM_DENOM, + )[0].amount; + const priceScale = +ibcAtomInPool / +ntrnInPool; + console.log( + `NTRN/ibcATOM pool info:\n\tntrn: ${ntrnInPool},\n\tatom: ${ibcAtomInPool},\n\tscale:${priceScale}`, + ); + console.log( + `NTRN/ibcATOM raw pool info:\n\t${JSON.stringify(poolStatus)}`, + ); + const ntrnAtomClPairInfo = await createPclPair( neutronChain, cmInstantiator, tgeMain.contracts.astroFactory, [nativeTokenInfo(NEUTRON_DENOM), nativeTokenInfo(IBC_ATOM_DENOM)], - 0.109499708, // ntrn in pool divided by atom in pool. add calc? + priceScale, ); ntrnAtomPclPool = ntrnAtomClPairInfo.contract_addr; ntrnAtomPclToken = ntrnAtomClPairInfo.liquidity_token; + const atomToProvide = Math.floor(NTRN_AMOUNT * priceScale); + const ntrnToProvide = NTRN_AMOUNT; + await cmInstantiator.executeContract( + ntrnAtomPclPool, + JSON.stringify({ + provide_liquidity: { + assets: [ + nativeToken(IBC_ATOM_DENOM, atomToProvide.toString()), + nativeToken(NEUTRON_DENOM, ntrnToProvide.toString()), + ], + slippage_tolerance: '0.5', + }, + }), + [ + { + denom: IBC_ATOM_DENOM, + amount: atomToProvide.toString(), + }, + { + denom: NEUTRON_DENOM, + amount: ntrnToProvide.toString(), + }, + ], + ); + }); + + test('create and fill NTRN/ibcUSDC PCL pair', async () => { + const poolStatus = await neutronChain.queryContract( + tgeMain.pairs.usdc_ntrn.contract, + { pool: {} }, + ); + const ntrnInPool = poolStatus.assets.filter( + (a) => (a.info as NativeToken).native_token.denom == NEUTRON_DENOM, + )[0].amount; + const ibcUsdcInPool = poolStatus.assets.filter( + (a) => (a.info as NativeToken).native_token.denom == IBC_USDC_DENOM, + )[0].amount; + const priceScale = +ibcUsdcInPool / +ntrnInPool; + + console.log( + `NTRN/ibcUSDC pool info:\n\tntrn: ${ntrnInPool},\n\tatom: ${ibcUsdcInPool},\n\tscale:${priceScale}`, + ); + console.log( + `NTRN/ibcUSDC raw pool info:\n\t${JSON.stringify(poolStatus)}`, + ); + const ntrnUsdcClPairInfo = await createPclPair( neutronChain, cmInstantiator, tgeMain.contracts.astroFactory, [nativeTokenInfo(NEUTRON_DENOM), nativeTokenInfo(IBC_USDC_DENOM)], - 1.09500203721, // ntrn in pool divided by usdc in pool. add calc? + priceScale, ); ntrnUsdcPclPool = ntrnUsdcClPairInfo.contract_addr; ntrnUsdcPclToken = ntrnUsdcClPairInfo.liquidity_token; + + const usdcToProvide = Math.floor(NTRN_AMOUNT * priceScale); + const ntrnToProvide = NTRN_AMOUNT; + await cmInstantiator.executeContract( + ntrnUsdcPclPool, + JSON.stringify({ + provide_liquidity: { + assets: [ + nativeToken(IBC_USDC_DENOM, usdcToProvide.toString()), + nativeToken(NEUTRON_DENOM, ntrnToProvide.toString()), + ], + slippage_tolerance: '0.5', + }, + }), + [ + { + denom: IBC_USDC_DENOM, + amount: usdcToProvide.toString(), + }, + { + denom: NEUTRON_DENOM, + amount: ntrnToProvide.toString(), + }, + ], + ); }); }); From 64531d5eda4e8beb66ac6f2d6fb413a1a06e9e19 Mon Sep 17 00:00:00 2001 From: sotnikov-s Date: Fri, 2 Feb 2024 14:25:30 +0300 Subject: [PATCH 07/87] add user liquidity migration tests --- src/testcases/run_in_band/tge.auction.test.ts | 1264 +++++++++++++++-- 1 file changed, 1181 insertions(+), 83 deletions(-) diff --git a/src/testcases/run_in_band/tge.auction.test.ts b/src/testcases/run_in_band/tge.auction.test.ts index 3a5897a2..56bcead5 100644 --- a/src/testcases/run_in_band/tge.auction.test.ts +++ b/src/testcases/run_in_band/tge.auction.test.ts @@ -6,6 +6,7 @@ import { NEUTRON_DENOM, } from '@neutron-org/neutronjsplus/dist/cosmos'; import { TestStateLocalCosmosTestNet } from '@neutron-org/neutronjsplus'; +import { BroadcastTx200ResponseTxResponse } from '@cosmos-client/core/cjs/openapi/api'; import { executeAuctionSetTokenInfo, executeCreditsVaultUpdateConfig, @@ -241,6 +242,7 @@ describe('Neutron / TGE / Auction', () => { ).genQaWal1, ); } + console.log(`TGE participant wallets: ${JSON.stringify(tgeWallets)}`); }); describe('Deploy', () => { @@ -2598,12 +2600,6 @@ describe('Neutron / TGE / Auction', () => { (a) => (a.info as NativeToken).native_token.denom == IBC_ATOM_DENOM, )[0].amount; const priceScale = +ibcAtomInPool / +ntrnInPool; - console.log( - `NTRN/ibcATOM pool info:\n\tntrn: ${ntrnInPool},\n\tatom: ${ibcAtomInPool},\n\tscale:${priceScale}`, - ); - console.log( - `NTRN/ibcATOM raw pool info:\n\t${JSON.stringify(poolStatus)}`, - ); const ntrnAtomClPairInfo = await createPclPair( neutronChain, @@ -2654,13 +2650,6 @@ describe('Neutron / TGE / Auction', () => { )[0].amount; const priceScale = +ibcUsdcInPool / +ntrnInPool; - console.log( - `NTRN/ibcUSDC pool info:\n\tntrn: ${ntrnInPool},\n\tatom: ${ibcUsdcInPool},\n\tscale:${priceScale}`, - ); - console.log( - `NTRN/ibcUSDC raw pool info:\n\t${JSON.stringify(poolStatus)}`, - ); - const ntrnUsdcClPairInfo = await createPclPair( neutronChain, cmInstantiator, @@ -2696,6 +2685,20 @@ describe('Neutron / TGE / Auction', () => { ], ); }); + + test('setup PCL pools', async () => { + await cmInstantiator.executeContract( + tgeMain.contracts.astroGenerator, + JSON.stringify({ + setup_pools: { + pools: [ + [ntrnAtomPclToken, '1'], + [ntrnUsdcPclToken, '1'], + ], + }, + }), + ); + }); }); let lockdropPclAddr: string; @@ -2765,88 +2768,1177 @@ describe('Neutron / TGE / Auction', () => { }); describe('execute migration handlers', () => { - let userInfoInXykLockdropBefore: LockdropUserInfoResponse; - let userInfoInPclLockdropBefore: LockdropUserInfoResponse; - it("get user's info before migration", async () => { - userInfoInXykLockdropBefore = await queryLockdropUserInfo( - neutronChain, - tgeMain.contracts.lockdrop, - tgeWallets[ - 'airdropAuctionLockdropVestingMigration' - ].wallet.address.toString(), - ); - userInfoInPclLockdropBefore = await queryLockdropUserInfo( - neutronChain, - lockdropPclAddr, - tgeWallets[ - 'airdropAuctionLockdropVestingMigration' - ].wallet.address.toString(), - ); + let liqMigContracts: LiquidityMigrationContracts; + it('fill liquidity migration contracts', () => { + liqMigContracts = { + xykLockdrop: tgeMain.contracts.lockdrop, + pclLockdrop: lockdropPclAddr, + atomXykPair: tgeMain.pairs.atom_ntrn.contract, + atomXykLp: tgeMain.pairs.atom_ntrn.liquidity, + usdcXykPair: tgeMain.pairs.usdc_ntrn.contract, + usdcXykLp: tgeMain.pairs.usdc_ntrn.liquidity, + atomPclPair: ntrnAtomPclPool, + atomPclLp: ntrnAtomPclToken, + usdcPclPair: ntrnUsdcPclPool, + usdcPclLp: ntrnUsdcPclToken, + generator: tgeMain.contracts.astroGenerator, + }; + }); - console.log( - `user info in XYK before migration:\n${JSON.stringify( - userInfoInXykLockdropBefore, - )}`, - ); - console.log( - `user info in PCL before migration:\n${JSON.stringify( - userInfoInPclLockdropBefore, - )}`, - ); + // This participant has two lockup positions: ATOM for 1 and USDC for 1. The user never claimed + // any rewards nor withdrawn either of the lockups. Expected behaviour: XYK lockups are marked + // as transferred, all pending rewards (generator, lockdrop, airdrop) are paid to the user + // during migration, liquidity is migrated from XYK to PCL pools and staked to the generator, + // PCL lockup entries are created in the PCL lockdrop contract. + describe('migrate airdropAuctionLockdropVestingMigration participant', () => { + let stateBefore: LiquidityMigrationState; + it('gather state before migration', async () => { + stateBefore = await gatherLiquidityMigrationState( + neutronChain, + tgeWallets[ + 'airdropAuctionLockdropVestingMigration' + ].wallet.address.toString(), + liqMigContracts, + ); + console.log( + `airdropAuctionLockdropVestingMigration migration state before:\n${JSON.stringify( + stateBefore, + )}`, + ); + }); + + it('migrate the user', async () => { + await cmInstantiator.executeContract( + tgeMain.contracts.lockdrop, + JSON.stringify({ + migrate_liquidity_to_pcl_pools: { + user_address_raw: + tgeWallets[ + 'airdropAuctionLockdropVestingMigration' + ].wallet.address.toString(), + }, + }), + undefined, + { + gas_limit: Long.fromString('15000000'), + amount: [{ denom: NEUTRON_DENOM, amount: '750000' }], + }, + ); + }); + + let stateAfter: LiquidityMigrationState; + it('gather state after migration', async () => { + stateAfter = await gatherLiquidityMigrationState( + neutronChain, + tgeWallets[ + 'airdropAuctionLockdropVestingMigration' + ].wallet.address.toString(), + liqMigContracts, + ); + console.log( + `airdropAuctionLockdropVestingMigration migration state after:\n${JSON.stringify( + stateAfter, + )}`, + ); + }); + + describe('check user liquidity migration', () => { + const atomLockupKey = 'ATOM1'; + const usdcLockupKey = 'USDC1'; + describe('XYK user lockups', () => { + describe('generator rewards', () => { + let userAstroRewards: number; + test('claimable generator ntrn debt', async () => { + userAstroRewards = + +stateBefore.xykUserLockups.claimable_generator_ntrn_debt; + expect(userAstroRewards).toBeGreaterThan(0); + + // total rewards amount equals to sum of all lockup rewards + expect(userAstroRewards).toEqual( + +stateBefore.xykUserLockups.mapped_lockup_infos[atomLockupKey] + .claimable_generator_astro_debt + + +stateBefore.xykUserLockups.mapped_lockup_infos[ + usdcLockupKey + ].claimable_generator_astro_debt, + ); + + // rewards are claimed during migration => no rewards after it + expect( + +stateAfter.xykUserLockups.claimable_generator_ntrn_debt, + ).toEqual(0); + }); + + test('generator rewards are transferred to the user', async () => { + expect(stateAfter.balances.user.astro).toBeGreaterThan( + stateBefore.balances.user.astro, + ); + // claimed rewards are transferred directly to the user + // assume fluctuation because rewards amount increases every block + isWithinRange( + stateAfter.balances.user.astro, + stateBefore.balances.user.astro + userAstroRewards, + 0.05, + ); + }); + }); + + describe('astroport lp', () => { + test('lp tokens marked as transferred', async () => { + // lp tokens weren't transferred before migration + expect( + stateBefore.xykUserLockups.mapped_lockup_infos[atomLockupKey] + .astroport_lp_transferred, + ).toBe(null); + expect( + stateBefore.xykUserLockups.mapped_lockup_infos[usdcLockupKey] + .astroport_lp_transferred, + ).toBe(null); + + // sanity check that there were some lp tokens in lockups + expect( + +stateAfter.xykUserLockups.mapped_lockup_infos[atomLockupKey] + .astroport_lp_transferred!, + ).toBeGreaterThan(0); + expect( + +stateAfter.xykUserLockups.mapped_lockup_infos[usdcLockupKey] + .astroport_lp_transferred!, + ).toBeGreaterThan(0); + + // all lp tokens are transferred dirung migration to PCL contract + expect( + stateAfter.xykUserLockups.mapped_lockup_infos[atomLockupKey] + .astroport_lp_transferred, + ).toEqual( + stateBefore.xykUserLockups.mapped_lockup_infos[atomLockupKey] + .lp_units_locked, + ); + expect( + stateAfter.xykUserLockups.mapped_lockup_infos[usdcLockupKey] + .astroport_lp_transferred, + ).toEqual( + stateBefore.xykUserLockups.mapped_lockup_infos[usdcLockupKey] + .lp_units_locked, + ); + }); + + test('staked lp amount decreases', async () => { + // all lp from lockups is unstaked from generator + expect(stateAfter.xykAtomStakedInGen).toEqual( + stateBefore.xykAtomStakedInGen - + +stateBefore.xykUserLockups.mapped_lockup_infos[ + atomLockupKey + ].lp_units_locked, + ); + expect(stateAfter.xykUsdcStakedInGen).toEqual( + stateBefore.xykUsdcStakedInGen - + +stateBefore.xykUserLockups.mapped_lockup_infos[ + usdcLockupKey + ].lp_units_locked, + ); + }); + }); + + test('XYK lockup lp token addresses', async () => { + // lp token addresses shouldn't change + expect( + stateAfter.xykUserLockups.mapped_lockup_infos[atomLockupKey] + .astroport_lp_token, + ).toEqual( + stateBefore.xykUserLockups.mapped_lockup_infos[atomLockupKey] + .astroport_lp_token, + ); + expect( + stateAfter.xykUserLockups.mapped_lockup_infos[usdcLockupKey] + .astroport_lp_token, + ).toEqual( + stateBefore.xykUserLockups.mapped_lockup_infos[usdcLockupKey] + .astroport_lp_token, + ); + }); + }); + + describe('lockdrop participation rewards', () => { + test('ntrn reward marked as transferred', async () => { + // no claims whatsoever happened before migration => ntrn aren't transferred + expect(stateBefore.xykUserLockups.ntrn_transferred).toBe(false); + + // ntrn rewards transfer is processed during migration and is reflected in both contracts + expect(stateAfter.xykUserLockups.ntrn_transferred).toBe(true); + expect(stateAfter.pclUserLockups.ntrn_transferred).toBe(true); + }); + + describe('ntrn transfer from lockdrop to user', () => { + let expectedRewards: number; + test('ntrn rewards received by the user', async () => { + // expectedRewards = one time NTRN rewards + + // airdrop rewards (same as NTRN rewards since airdrop multiplier = 1) + + // a bit of unvested tokens (say 10 more percent — *1.1) + expectedRewards = + +stateBefore.xykUserLockups.total_ntrn_rewards * 2 * 1.1; + const balanceChange = + stateAfter.balances.user.ntrn - + stateBefore.balances.user.ntrn; + // assume fluctuation because of uncertain unvested tokens amount + isWithinRange(balanceChange, expectedRewards, 0.1); + }); + + test('ntrn rewards sent by XYK lockdrop contract', async () => { + const balanceChange = + stateBefore.balances.xykLockdrop.ntrn - + stateAfter.balances.xykLockdrop.ntrn; + expect(balanceChange).toEqual( + +stateBefore.xykUserLockups.total_ntrn_rewards, + ); + }); + }); + + test('no balance change for PCL lockdrop contract', async () => { + // no funds directly transferred to and kept on the PCL lockdrop contract + expect(stateAfter.balances.pclLockdrop).toEqual( + stateBefore.balances.pclLockdrop, + ); + }); + + test('no paired assets and lp received by user', async () => { + // during migration a user can only receive ntrn and astro rewards + expect(stateAfter.balances.user.atom).toEqual( + stateBefore.balances.user.atom, + ); + expect(stateAfter.balances.user.usdc).toEqual( + stateBefore.balances.user.usdc, + ); + expect(stateAfter.balances.user.atomXykPairLp).toEqual( + stateBefore.balances.user.atomXykPairLp, + ); + expect(stateAfter.balances.user.usdcXykPairLp).toEqual( + stateBefore.balances.user.usdcXykPairLp, + ); + expect(stateAfter.balances.user.atomPclPairLp).toEqual( + stateBefore.balances.user.atomPclPairLp, + ); + expect(stateAfter.balances.user.usdcPclPairLp).toEqual( + stateBefore.balances.user.usdcPclPairLp, + ); + }); + }); + + describe('PCL user lockups', () => { + test('no user lockup info before migration', async () => { + expect(stateBefore.pclUserLockups).toMatchObject({ + claimable_generator_ntrn_debt: '0', + mapped_lockup_infos: {}, + lockup_positions_index: 0, + ntrn_transferred: false, + total_ntrn_rewards: '0', + }); + }); + + test('no claimable generator ntrn debt', async () => { + // all collected rewards are transferred during migration + expect( + +stateAfter.pclUserLockups.claimable_generator_ntrn_debt, + ).toEqual(0); + expect( + +stateAfter.pclUserLockups.mapped_lockup_infos[atomLockupKey] + .claimable_generator_astro_debt, + ).toEqual(0); + expect( + +stateAfter.pclUserLockups.mapped_lockup_infos[usdcLockupKey] + .claimable_generator_astro_debt, + ).toEqual(0); + }); + + describe('astroport lp', () => { + test('lp tokens are locked', async () => { + expect( + +stateAfter.pclUserLockups.mapped_lockup_infos[atomLockupKey] + .lp_units_locked, + ).toBeGreaterThan(0); + expect( + +stateAfter.pclUserLockups.mapped_lockup_infos[usdcLockupKey] + .lp_units_locked, + ).toBeGreaterThan(0); + }); + + test('lockup shares are roughly equal', async () => { + // sanity check + expect( + stateAfter.pclUserLockups.mapped_lockup_infos[atomLockupKey] + .expected_ntrn_share, + ).toBeGreaterThan(0); + expect( + stateAfter.pclUserLockups.mapped_lockup_infos[usdcLockupKey] + .expected_ntrn_share, + ).toBeGreaterThan(0); + + // equivalent of locked assets should be roughly equal before and after migration + isWithinRange( + stateAfter.pclUserLockups.mapped_lockup_infos[atomLockupKey] + .expected_ntrn_share, + stateBefore.xykUserLockups.mapped_lockup_infos[atomLockupKey] + .expected_ntrn_share, + 0.05, + ); + isWithinRange( + stateAfter.pclUserLockups.mapped_lockup_infos[usdcLockupKey] + .expected_ntrn_share, + stateBefore.xykUserLockups.mapped_lockup_infos[usdcLockupKey] + .expected_ntrn_share, + 0.05, + ); + }); + + test('lp tokens not marked as transferred', async () => { + // on XYK lockdrop contract's side we mark tokens as transferred meaning the contract + // doesn't have them anymore. but on PCL contract's side the tokens are still locked + expect( + stateAfter.pclUserLockups.mapped_lockup_infos[atomLockupKey] + .astroport_lp_transferred, + ).toBe(null); + expect( + stateAfter.pclUserLockups.mapped_lockup_infos[usdcLockupKey] + .astroport_lp_transferred, + ).toBe(null); + }); + + test('staked lp amount increases', async () => { + // all lp from lockups are staked to generator + expect(stateAfter.pclAtomStakedInGen).toEqual( + stateBefore.pclAtomStakedInGen + + +stateAfter.pclUserLockups.mapped_lockup_infos[ + atomLockupKey + ].lp_units_locked, + ); + expect(stateAfter.pclUsdcStakedInGen).toEqual( + stateBefore.pclUsdcStakedInGen + + +stateAfter.pclUserLockups.mapped_lockup_infos[ + usdcLockupKey + ].lp_units_locked, + ); + }); + }); + + test('PCL lockup lp token addresses', async () => { + // lp token addresses should correspond to the ones from PCL pairs + expect( + stateAfter.pclUserLockups.mapped_lockup_infos[atomLockupKey] + .astroport_lp_token, + ).toEqual(ntrnAtomPclToken); + expect( + stateAfter.pclUserLockups.mapped_lockup_infos[usdcLockupKey] + .astroport_lp_token, + ).toEqual(ntrnUsdcPclToken); + }); + + test('lockup positions consistency', async () => { + // all positions should be migrated for the user with no previous claims and unlocks + expect(stateBefore.xykUserLockups.lockup_positions_index).toEqual( + stateAfter.pclUserLockups.lockup_positions_index, + ); + + // unlock timestamps should remain the same + expect( + stateBefore.xykUserLockups.mapped_lockup_infos[atomLockupKey] + .unlock_timestamp, + ).toEqual( + stateAfter.pclUserLockups.mapped_lockup_infos[atomLockupKey] + .unlock_timestamp, + ); + expect( + stateBefore.xykUserLockups.mapped_lockup_infos[usdcLockupKey] + .unlock_timestamp, + ).toEqual( + stateAfter.pclUserLockups.mapped_lockup_infos[usdcLockupKey] + .unlock_timestamp, + ); + }); + }); + }); }); - it('migrates a user', async () => { - await cmInstantiator.executeContract( - tgeMain.contracts.lockdrop, - JSON.stringify({ - migrate_liquidity_to_pcl_pools: { - user_address_raw: - tgeWallets[ - 'airdropAuctionLockdropVestingMigration' - ].wallet.address.toString(), + // This participant has three lockup positions: ATOM for 1, USDC for 1 and USDC for 2. User + // claimed rewards without liquidity withdrawal previously, also we call claim rewards with + // liquidity unlock for USDC 2 lockup in as first step of the test scenario to cover such a + // case. Expected behaviour: the withdrawn lockup is ignored and untouched, other XYK lockups + // are marked as transferred, lockdrop and airdrop rewards aren't transferred and marked as + // transferred on both sides (XYK and PCL lockdrop contracts), generator rewards are paid to + // the user for remaining lockups, remaining liquidity is migrated from XYK to PCL pools and + // staked to the generator, PCL lockup entries are created in the PCL lockdrop contract for + // remaining lockups. + describe('migrate cmInstantiator participant', () => { + it('withdraw one out of three lockups', async () => { + // to cover migration with a withdrawn lockup case + await cmInstantiator.executeContract( + tgeMain.contracts.lockdrop, + JSON.stringify({ + claim_rewards_and_optionally_unlock: { + pool_type: 'USDC', + duration: 1, + withdraw_lp_stake: true, + }, + }), + ); + + // wait for several blocks to collect some generator rewards + await neutronChain.blockWaiter.waitBlocks(5); + }); + + let stateBefore: LiquidityMigrationState; + it('gather state before migration', async () => { + stateBefore = await gatherLiquidityMigrationState( + neutronChain, + cmInstantiator.wallet.address.toString(), + liqMigContracts, + ); + console.log( + `cmInstantiator migration state before:\n${JSON.stringify( + stateBefore, + )}`, + ); + }); + + const ntrnToPayGas = 750000; + let migrateRes: BroadcastTx200ResponseTxResponse; + it('migrate the user', async () => { + migrateRes = await cmInstantiator.executeContract( + tgeMain.contracts.lockdrop, + JSON.stringify({ + migrate_liquidity_to_pcl_pools: {}, // no user address passed means the caller address + }), + undefined, + { + gas_limit: Long.fromString('15000000'), + amount: [ + { denom: NEUTRON_DENOM, amount: ntrnToPayGas.toString() }, + ], }, - }), - undefined, - { - gas_limit: Long.fromString('15000000'), - amount: [{ denom: NEUTRON_DENOM, amount: '750000' }], - }, - ); + ); + }); + + let stateAfter: LiquidityMigrationState; + it('gather state after migration', async () => { + stateAfter = await gatherLiquidityMigrationState( + neutronChain, + cmInstantiator.wallet.address.toString(), + liqMigContracts, + ); + console.log( + `cmInstantiator migration state after:\n${JSON.stringify( + stateAfter, + )}`, + ); + }); + + describe('check user liquidity migration', () => { + const atomLockupKey = 'ATOM1'; + const usdcWithdrawnLockupKey = 'USDC1'; + const usdcLockupKey = 'USDC2'; + describe('withdrawn lockup consistency', () => { + test('user XYK lockup info consistency', async () => { + expect( + stateBefore.xykUserLockups.mapped_lockup_infos[ + usdcWithdrawnLockupKey + ], + ).toMatchObject( + stateAfter.xykUserLockups.mapped_lockup_infos[ + usdcWithdrawnLockupKey + ], + ); + }); + + test('no user lockup info in PCL lockdrop', async () => { + expect( + stateAfter.pclUserLockups.mapped_lockup_infos[ + usdcWithdrawnLockupKey + ], + ).toBeUndefined(); + }); + + describe('already claimed events emission', () => { + test('emitted for withdrawn lockup', async () => { + expect(migrateRes.raw_log).toContain( + '{"key":"USDC_for_1","value":"already_been_withdrawn"}', + ); + }); + + test('no emission for remaining lockups', async () => { + expect(migrateRes.raw_log).not.toContain( + '{"key":"ATOM_for_1","value":"already_been_withdrawn"}', + ); + expect(migrateRes.raw_log).not.toContain( + '{"key":"USDC_for_2","value":"already_been_withdrawn"}', + ); + }); + }); + }); + + describe('XYK user lockups', () => { + describe('generator rewards', () => { + let userAstroRewards: number; + test('claimable generator ntrn debt', async () => { + userAstroRewards = + +stateBefore.xykUserLockups.claimable_generator_ntrn_debt; + // sanity check + expect(userAstroRewards).toBeGreaterThan(0); + + // total rewards amount equals to sum of all lockup rewards + expect(userAstroRewards).toEqual( + +stateBefore.xykUserLockups.mapped_lockup_infos[atomLockupKey] + .claimable_generator_astro_debt + + +stateBefore.xykUserLockups.mapped_lockup_infos[ + usdcLockupKey + ].claimable_generator_astro_debt, + ); + + // rewards are claimed during migration => no rewards after it + expect( + +stateAfter.xykUserLockups.claimable_generator_ntrn_debt, + ).toEqual(0); + }); + + test('generator rewards are transferred to the user', async () => { + expect(stateAfter.balances.user.astro).toBeGreaterThan( + stateBefore.balances.user.astro, + ); + // claimed rewards are transferred directly to the user + // assume fluctuation because rewards amount increases every block + isWithinRange( + stateAfter.balances.user.astro, + stateBefore.balances.user.astro + userAstroRewards, + 0.05, + ); + }); + + test('generator rewards are transferred to PCL contract for deposit', async () => { + // as a side effect generator sends pending rewards to the depositor which is PCL contract + expect(stateAfter.balances.pclLockdrop.astro).toBeGreaterThan( + stateBefore.balances.pclLockdrop.astro, + ); + }); + }); + + describe('astroport lp', () => { + test('lp tokens marked as transferred', async () => { + // lp tokens weren't transferred before migration + expect( + stateBefore.xykUserLockups.mapped_lockup_infos[atomLockupKey] + .astroport_lp_transferred, + ).toBe(null); + expect( + stateBefore.xykUserLockups.mapped_lockup_infos[usdcLockupKey] + .astroport_lp_transferred, + ).toBe(null); + + // sanity check that there were some lp tokens in lockups + expect( + +stateAfter.xykUserLockups.mapped_lockup_infos[atomLockupKey] + .astroport_lp_transferred!, + ).toBeGreaterThan(0); + expect( + +stateAfter.xykUserLockups.mapped_lockup_infos[usdcLockupKey] + .astroport_lp_transferred!, + ).toBeGreaterThan(0); + + // all lp tokens are transferred dirung migration to PCL contract + expect( + stateAfter.xykUserLockups.mapped_lockup_infos[atomLockupKey] + .astroport_lp_transferred, + ).toEqual( + stateBefore.xykUserLockups.mapped_lockup_infos[atomLockupKey] + .lp_units_locked, + ); + expect( + stateAfter.xykUserLockups.mapped_lockup_infos[usdcLockupKey] + .astroport_lp_transferred, + ).toEqual( + stateBefore.xykUserLockups.mapped_lockup_infos[usdcLockupKey] + .lp_units_locked, + ); + }); + + test('staked lp amount decreases', async () => { + // all lp from lockups is unstaked from generator + expect(stateAfter.xykAtomStakedInGen).toEqual( + stateBefore.xykAtomStakedInGen - + +stateBefore.xykUserLockups.mapped_lockup_infos[ + atomLockupKey + ].lp_units_locked, + ); + expect(stateAfter.xykUsdcStakedInGen).toEqual( + stateBefore.xykUsdcStakedInGen - + +stateBefore.xykUserLockups.mapped_lockup_infos[ + usdcLockupKey + ].lp_units_locked, + ); + }); + }); + + test('XYK lockup lp token addresses', async () => { + // lp token addresses shouldn't change + expect( + stateAfter.xykUserLockups.mapped_lockup_infos[atomLockupKey] + .astroport_lp_token, + ).toEqual( + stateBefore.xykUserLockups.mapped_lockup_infos[atomLockupKey] + .astroport_lp_token, + ); + expect( + stateAfter.xykUserLockups.mapped_lockup_infos[usdcLockupKey] + .astroport_lp_token, + ).toEqual( + stateBefore.xykUserLockups.mapped_lockup_infos[usdcLockupKey] + .astroport_lp_token, + ); + }); + }); + + describe('lockdrop participation rewards', () => { + test('ntrn reward marked as transferred', async () => { + // this user claimed rewards => ntrn are transferred + expect(stateBefore.xykUserLockups.ntrn_transferred).toBe(true); + + // ntrn rewards are marked as transferred in both contracts after migration + expect(stateAfter.xykUserLockups.ntrn_transferred).toBe(true); + expect(stateAfter.pclUserLockups.ntrn_transferred).toBe(true); + }); + + describe('no ntrn transfer from lockdrop to user', () => { + test('no ntrn rewards received by the user', async () => { + // since the user called his own migration, we take the paid fee into account here + expect(stateAfter.balances.user.ntrn).toEqual( + stateBefore.balances.user.ntrn - ntrnToPayGas, + ); + }); + + test('no ntrn rewards sent by XYK lockdrop contract', async () => { + expect(stateBefore.balances.xykLockdrop.ntrn).toEqual( + stateAfter.balances.xykLockdrop.ntrn, + ); + }); + }); + + test('no balance change for PCL lockdrop contract', async () => { + // no funds (but astro rewards checked above) directly transferred to and kept on + // the PCL lockdrop contract + expect(stateAfter.balances.pclLockdrop.atom).toEqual( + stateBefore.balances.pclLockdrop.atom, + ); + expect(stateAfter.balances.pclLockdrop.ntrn).toEqual( + stateBefore.balances.pclLockdrop.ntrn, + ); + expect(stateAfter.balances.pclLockdrop.usdc).toEqual( + stateBefore.balances.pclLockdrop.usdc, + ); + expect(stateAfter.balances.pclLockdrop.atomPclPairLp).toEqual( + stateBefore.balances.pclLockdrop.atomPclPairLp, + ); + expect(stateAfter.balances.pclLockdrop.atomXykPairLp).toEqual( + stateBefore.balances.pclLockdrop.atomXykPairLp, + ); + expect(stateAfter.balances.pclLockdrop.usdcPclPairLp).toEqual( + stateBefore.balances.pclLockdrop.usdcPclPairLp, + ); + expect(stateAfter.balances.pclLockdrop.usdcXykPairLp).toEqual( + stateBefore.balances.pclLockdrop.usdcXykPairLp, + ); + }); + + test('no paired assets and lp received by user', async () => { + // during migration the user can only receive astro rewards + expect(stateAfter.balances.user.atom).toEqual( + stateBefore.balances.user.atom, + ); + expect(stateAfter.balances.user.usdc).toEqual( + stateBefore.balances.user.usdc, + ); + expect(stateAfter.balances.user.atomXykPairLp).toEqual( + stateBefore.balances.user.atomXykPairLp, + ); + expect(stateAfter.balances.user.usdcXykPairLp).toEqual( + stateBefore.balances.user.usdcXykPairLp, + ); + expect(stateAfter.balances.user.atomPclPairLp).toEqual( + stateBefore.balances.user.atomPclPairLp, + ); + expect(stateAfter.balances.user.usdcPclPairLp).toEqual( + stateBefore.balances.user.usdcPclPairLp, + ); + }); + }); + + describe('PCL user lockups', () => { + test('no user lockup info before migration', async () => { + expect(stateBefore.pclUserLockups).toMatchObject({ + claimable_generator_ntrn_debt: '0', + mapped_lockup_infos: {}, + lockup_positions_index: 0, + ntrn_transferred: false, + total_ntrn_rewards: '0', + }); + }); + + test('no claimable generator ntrn debt', async () => { + // all collected rewards are transferred during migration + expect( + +stateAfter.pclUserLockups.claimable_generator_ntrn_debt, + ).toEqual(0); + expect( + +stateAfter.pclUserLockups.mapped_lockup_infos[atomLockupKey] + .claimable_generator_astro_debt, + ).toEqual(0); + expect( + +stateAfter.pclUserLockups.mapped_lockup_infos[usdcLockupKey] + .claimable_generator_astro_debt, + ).toEqual(0); + }); + + describe('astroport lp', () => { + test('lp tokens are locked', async () => { + expect( + +stateAfter.pclUserLockups.mapped_lockup_infos[atomLockupKey] + .lp_units_locked, + ).toBeGreaterThan(0); + expect( + +stateAfter.pclUserLockups.mapped_lockup_infos[usdcLockupKey] + .lp_units_locked, + ).toBeGreaterThan(0); + }); + + test('lockup shares are roughly equal', async () => { + // sanity check + expect( + stateAfter.pclUserLockups.mapped_lockup_infos[atomLockupKey] + .expected_ntrn_share, + ).toBeGreaterThan(0); + expect( + stateAfter.pclUserLockups.mapped_lockup_infos[usdcLockupKey] + .expected_ntrn_share, + ).toBeGreaterThan(0); + + // equivalent of locked assets should be roughly equal before and after migration + isWithinRange( + stateAfter.pclUserLockups.mapped_lockup_infos[atomLockupKey] + .expected_ntrn_share, + stateBefore.xykUserLockups.mapped_lockup_infos[atomLockupKey] + .expected_ntrn_share, + 0.05, + ); + isWithinRange( + stateAfter.pclUserLockups.mapped_lockup_infos[usdcLockupKey] + .expected_ntrn_share, + stateBefore.xykUserLockups.mapped_lockup_infos[usdcLockupKey] + .expected_ntrn_share, + 0.05, + ); + }); + + test('lp tokens not marked as transferred', async () => { + // on XYK lockdrop contract's side we mark tokens as transferred meaning the contract + // doesn't have them anymore. but on PCL contract's side the tokens are still locked + expect( + stateAfter.pclUserLockups.mapped_lockup_infos[atomLockupKey] + .astroport_lp_transferred, + ).toBe(null); + expect( + stateAfter.pclUserLockups.mapped_lockup_infos[usdcLockupKey] + .astroport_lp_transferred, + ).toBe(null); + }); + + test('staked lp amount increases', async () => { + // all lp from lockups are staked to generator + expect(stateAfter.pclAtomStakedInGen).toEqual( + stateBefore.pclAtomStakedInGen + + +stateAfter.pclUserLockups.mapped_lockup_infos[ + atomLockupKey + ].lp_units_locked, + ); + expect(stateAfter.pclUsdcStakedInGen).toEqual( + stateBefore.pclUsdcStakedInGen + + +stateAfter.pclUserLockups.mapped_lockup_infos[ + usdcLockupKey + ].lp_units_locked, + ); + }); + }); + + test('PCL lockup lp token addresses', async () => { + // lp token addresses should correspond to the ones from PCL pairs + expect( + stateAfter.pclUserLockups.mapped_lockup_infos[atomLockupKey] + .astroport_lp_token, + ).toEqual(ntrnAtomPclToken); + expect( + stateAfter.pclUserLockups.mapped_lockup_infos[usdcLockupKey] + .astroport_lp_token, + ).toEqual(ntrnUsdcPclToken); + }); + + test('lockup positions consistency', async () => { + // all positions should be migrated for the user with no previous claims and unlocks + expect(stateBefore.xykUserLockups.lockup_positions_index).toEqual( + stateAfter.pclUserLockups.lockup_positions_index, + ); + + // unlock timestamps should remain the same + expect( + stateBefore.xykUserLockups.mapped_lockup_infos[atomLockupKey] + .unlock_timestamp, + ).toEqual( + stateAfter.pclUserLockups.mapped_lockup_infos[atomLockupKey] + .unlock_timestamp, + ); + expect( + stateBefore.xykUserLockups.mapped_lockup_infos[usdcLockupKey] + .unlock_timestamp, + ).toEqual( + stateAfter.pclUserLockups.mapped_lockup_infos[usdcLockupKey] + .unlock_timestamp, + ); + }); + }); + }); }); - let userInfoInXykLockdropAfter: LockdropUserInfoResponse; - let userInfoInPclLockdropAfter: LockdropUserInfoResponse; - it("get user's info after migration", async () => { - userInfoInXykLockdropAfter = await queryLockdropUserInfo( - neutronChain, - tgeMain.contracts.lockdrop, - tgeWallets[ - 'airdropAuctionLockdropVestingMigration' - ].wallet.address.toString(), - ); - userInfoInPclLockdropAfter = await queryLockdropUserInfo( - neutronChain, - lockdropPclAddr, - tgeWallets[ - 'airdropAuctionLockdropVestingMigration' - ].wallet.address.toString(), - ); + // This participant has two lockup positions: ATOM for 1 and USDC for 1. User claimed rewards + // with liquidity unlock for both lockups before. Expected behaviour: both withdrawn lockups + // are ignored and untouched, no rewards paid, no balances changes whatsoever, no state changes + // made to both lockdrop contracts, migration transaction emits events informing about the + // already withdrawn positions. + describe('migrate auctionLockdrop participant', () => { + let stateBefore: LiquidityMigrationState; + it('gather state before migration', async () => { + stateBefore = await gatherLiquidityMigrationState( + neutronChain, + tgeWallets['auctionLockdrop'].wallet.address.toString(), + liqMigContracts, + ); + console.log( + `auctionLockdrop migration state before:\n${JSON.stringify( + stateBefore, + )}`, + ); + }); - console.log( - `user info in XYK after migration:\n${JSON.stringify( - userInfoInXykLockdropAfter, - )}`, - ); - console.log( - `user info in PCL after migration:\n${JSON.stringify( - userInfoInPclLockdropAfter, - )}`, - ); + let migrateRes: BroadcastTx200ResponseTxResponse; + it('migrate the user', async () => { + migrateRes = await cmInstantiator.executeContract( + tgeMain.contracts.lockdrop, + JSON.stringify({ + migrate_liquidity_to_pcl_pools: { + user_address_raw: + tgeWallets['auctionLockdrop'].wallet.address.toString(), + }, + }), + undefined, + { + gas_limit: Long.fromString('15000000'), + amount: [{ denom: NEUTRON_DENOM, amount: '750000' }], + }, + ); + }); + + let stateAfter: LiquidityMigrationState; + it('gather state after migration', async () => { + stateAfter = await gatherLiquidityMigrationState( + neutronChain, + tgeWallets['auctionLockdrop'].wallet.address.toString(), + liqMigContracts, + ); + console.log( + `auctionLockdrop migration state after:\n${JSON.stringify( + stateAfter, + )}`, + ); + }); + + describe('check user liquidity migration', () => { + test('user XYK lockup info consistency', async () => { + expect(stateBefore.xykUserLockups).toMatchObject( + stateAfter.xykUserLockups, + ); + }); + + test('no user lockup info in PCL lockdrop', async () => { + expect(stateAfter.pclUserLockups).toMatchObject({ + claimable_generator_ntrn_debt: '0', + mapped_lockup_infos: {}, + lockup_positions_index: 0, + ntrn_transferred: false, + total_ntrn_rewards: '0', + }); + }); + + test('no balance changes', async () => { + expect(stateBefore.balances).toMatchObject(stateAfter.balances); + }); + + test('already claimed events emission', async () => { + expect(migrateRes.raw_log).toContain( + '{"key":"ATOM_for_1","value":"already_been_withdrawn"}', + ); + expect(migrateRes.raw_log).toContain( + '{"key":"USDC_for_1","value":"already_been_withdrawn"}', + ); + }); + }); }); }); }); }); +// Wraps numerous queries for different info about TGE contracts, balances and liquidity migration. +const gatherLiquidityMigrationState = async ( + chain: CosmosWrapper, + migratingUser: string, + contracts: LiquidityMigrationContracts, +): Promise => { + const xykLockdropUserInfo: LockdropUserInfoResponse = + await chain.queryContract(contracts.xykLockdrop, { + user_info: { + address: migratingUser, + }, + }); + const pclLockdropUserInfo: LockdropUserInfoResponse = + await chain.queryContract(contracts.pclLockdrop, { + user_info: { + address: migratingUser, + }, + }); + return { + xykUserLockups: await transformUserInfo(chain, xykLockdropUserInfo), + pclUserLockups: await transformUserInfo(chain, pclLockdropUserInfo), + balances: { + xykLockdrop: await getLiquidityMigrationBalances( + chain, + contracts.xykLockdrop, + contracts, + ), + pclLockdrop: await getLiquidityMigrationBalances( + chain, + contracts.pclLockdrop, + contracts, + ), + user: await getLiquidityMigrationBalances( + chain, + migratingUser, + contracts, + ), + }, + xykUsdcStakedInGen: +(await chain.queryContract( + contracts.generator, + { + deposit: { + lp_token: contracts.usdcXykLp, + user: contracts.xykLockdrop, + }, + }, + )), + xykAtomStakedInGen: +(await chain.queryContract( + contracts.generator, + { + deposit: { + lp_token: contracts.atomXykLp, + user: contracts.xykLockdrop, + }, + }, + )), + pclUsdcStakedInGen: +(await chain.queryContract( + contracts.generator, + { + deposit: { + lp_token: contracts.usdcPclLp, + user: contracts.pclLockdrop, + }, + }, + )), + pclAtomStakedInGen: +(await chain.queryContract( + contracts.generator, + { + deposit: { + lp_token: contracts.atomPclLp, + user: contracts.pclLockdrop, + }, + }, + )), + }; +}; + +// Contains contract addresses involved in TGE liquidity migration process. +type LiquidityMigrationContracts = { + xykLockdrop: string; + pclLockdrop: string; + atomXykPair: string; + atomXykLp: string; + usdcXykPair: string; + usdcXykLp: string; + atomPclPair: string; + atomPclLp: string; + usdcPclPair: string; + usdcPclLp: string; + generator: string; +}; + +// Contains states of different contracts and balances related to TGE liquidity migration. +type LiquidityMigrationState = { + // user's lockups stored in the XYK lockdrop contract's state + xykUserLockups: ExpandedLockdropUserInfoResponse; + // user's lockups stored in the PCL lockdrop contract's state + pclUserLockups: ExpandedLockdropUserInfoResponse; + balances: { + xykLockdrop: LiquidityMigrationBalances; + pclLockdrop: LiquidityMigrationBalances; + user: LiquidityMigrationBalances; + }; + // amount of NTRN/USDC XYK pair LP tokens staked in the generator + xykUsdcStakedInGen: number; + // amount of NTRN/ATOM XYK pair LP tokens staked in the generator + xykAtomStakedInGen: number; + // amount of NTRN/USDC PCL pair LP tokens staked in the generator + pclUsdcStakedInGen: number; + // amount of NTRN/ATOM PCL pair LP tokens staked in the generator + pclAtomStakedInGen: number; +}; + +// Contains balances in all assets involved in TGE liquidity migration process. +type LiquidityMigrationBalances = { + ntrn: number; + usdc: number; + atom: number; + usdcXykPairLp: number; // NTRN/USDC XYK pair LP tokens + atomXykPairLp: number; // NTRN/ATOM XYK pair LP tokens + usdcPclPairLp: number; // NTRN/USDC PCL pair LP tokens + atomPclPairLp: number; // NTRN/ATOM PCL pair LP tokens + astro: number; // balance in astro reward token +}; + +// Makes a number of queries for balances in all assets involved in TGE liquidity migration process. +const getLiquidityMigrationBalances = async ( + chain: CosmosWrapper, + address: string, + contracts: LiquidityMigrationContracts, +): Promise => ({ + ntrn: await chain.queryDenomBalance(address, NEUTRON_DENOM), + usdc: await chain.queryDenomBalance(address, IBC_USDC_DENOM), + atom: await chain.queryDenomBalance(address, IBC_ATOM_DENOM), + usdcXykPairLp: +( + await chain.queryContract(contracts.usdcXykLp, { + balance: { + address: address, + }, + }) + ).balance, + atomXykPairLp: +( + await chain.queryContract(contracts.atomXykLp, { + balance: { + address: address, + }, + }) + ).balance, + usdcPclPairLp: +( + await chain.queryContract(contracts.usdcPclLp, { + balance: { + address: address, + }, + }) + ).balance, + atomPclPairLp: +( + await chain.queryContract(contracts.atomPclLp, { + balance: { + address: address, + }, + }) + ).balance, + astro: await chain.queryDenomBalance( + address, + ( + await chain.queryContract(contracts.generator, { + config: {}, + }) + ).astro_token.native_token.denom, + ), +}); + +// Transforms a bit a user info response from a lockdrop contract to ease test assertions. +const transformUserInfo = async ( + chain: CosmosWrapper, + userInfo: LockdropUserInfoResponse, +): Promise => { + const mappedLockupInfos: Record = + {}; + userInfo.lockup_infos.forEach(async (v) => { + const poolAddress = ( + await chain.queryContract(v.astroport_lp_token, { + minter: {}, + }) + ).minter; + const share = await chain.queryContract(poolAddress, { + share: { amount: v.lp_units_locked }, + }); + return (mappedLockupInfos[v.pool_type + v.duration.toString()] = { + astroport_lp_token: v.astroport_lp_token, + astroport_lp_transferred: v.astroport_lp_transferred, + astroport_lp_units: v.astroport_lp_units, + claimable_generator_astro_debt: v.claimable_generator_astro_debt, + claimable_generator_proxy_debt: v.claimable_generator_proxy_debt, + duration: v.duration, + generator_ntrn_debt: v.generator_ntrn_debt, + generator_proxy_debt: v.generator_proxy_debt, + lp_units_locked: v.lp_units_locked, + ntrn_rewards: v.ntrn_rewards, + pool_type: v.pool_type, + unlock_timestamp: v.unlock_timestamp, + withdrawal_flag: v.withdrawal_flag, + expected_ntrn_share: +share.filter( + (a) => (a.info as NativeToken).native_token.denom == NEUTRON_DENOM, + )[0].amount, + expected_paired_asset_share: +share.filter( + (a) => (a.info as NativeToken).native_token.denom != NEUTRON_DENOM, + )[0].amount, + }); + }); + return { + claimable_generator_ntrn_debt: userInfo.claimable_generator_ntrn_debt, + mapped_lockup_infos: mappedLockupInfos, + lockup_positions_index: userInfo.lockup_positions_index, + ntrn_transferred: userInfo.ntrn_transferred, + total_ntrn_rewards: userInfo.total_ntrn_rewards, + }; +}; + +type MinterResponse = { + minter: string; + cap: string | undefined; // Option +}; + +// Just the same LockdropUserInfoResponse but with some additional info added. +type ExpandedLockdropUserInfoResponse = { + claimable_generator_ntrn_debt: string; + mapped_lockup_infos: Record; // pool_type + duration as a key + lockup_positions_index: number; + ntrn_transferred: boolean; + total_ntrn_rewards: string; +}; + +// Just the same LockdropLockUpInfoResponse but with LP share fields added. +type ExpandedLockdropLockUpInfoResponse = { + astroport_lp_token: string; + astroport_lp_transferred: string | null; + astroport_lp_units: string | null; + claimable_generator_astro_debt: string; + claimable_generator_proxy_debt: unknown[]; + duration: number; + generator_ntrn_debt: string; + generator_proxy_debt: unknown[]; + lp_units_locked: string; + ntrn_rewards: string; + pool_type: string; + unlock_timestamp: number; + withdrawal_flag: boolean; + expected_ntrn_share: number; // expected amount of ntrn received on liquidity withdrawal + expected_paired_asset_share: number; // expected amount of paired asset received on liquidity withdrawal +}; + const deregisterPair = async ( instantiator: WalletWrapper, factoryAddr: string, @@ -2928,3 +4020,9 @@ type ConcentratedPoolParams = { ma_half_time: number; track_asset_balances: boolean; }; + +// checks whether the value is in +/- range (inclusive) of the target with tolerance in %. +const isWithinRange = (value: number, target: number, tolerance: number) => { + expect(value).toBeGreaterThanOrEqual(target - target * tolerance); + expect(value).toBeLessThanOrEqual(target + target * tolerance); +}; From d9b79e90722a9b060b4620849402d40b4a29f6a1 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Thu, 1 Feb 2024 12:11:07 -0300 Subject: [PATCH 08/87] main flow --- src/testcases/run_in_band/tge.auction.test.ts | 485 +++++++++++++----- 1 file changed, 367 insertions(+), 118 deletions(-) diff --git a/src/testcases/run_in_band/tge.auction.test.ts b/src/testcases/run_in_band/tge.auction.test.ts index 56bcead5..6b76ffdd 100644 --- a/src/testcases/run_in_band/tge.auction.test.ts +++ b/src/testcases/run_in_band/tge.auction.test.ts @@ -5,7 +5,7 @@ import { CosmosWrapper, NEUTRON_DENOM, } from '@neutron-org/neutronjsplus/dist/cosmos'; -import { TestStateLocalCosmosTestNet } from '@neutron-org/neutronjsplus'; +import {TestStateLocalCosmosTestNet, types} from '@neutron-org/neutronjsplus'; import { BroadcastTx200ResponseTxResponse } from '@cosmos-client/core/cjs/openapi/api'; import { executeAuctionSetTokenInfo, @@ -42,8 +42,8 @@ import { nativeToken, PoolStatus, } from '@neutron-org/neutronjsplus/dist/types'; -import { IBC_ATOM_DENOM, IBC_USDC_DENOM } from '@neutron-org/neutronjsplus'; -import { getHeight } from '@neutron-org/neutronjsplus/dist/env'; +import {IBC_ATOM_DENOM, IBC_USDC_DENOM} from '@neutron-org/neutronjsplus'; +import {getHeight} from '@neutron-org/neutronjsplus/dist/env'; const config = require('../../config.json'); @@ -261,7 +261,7 @@ describe('Neutron / TGE / Auction', () => { address: tgeWallets[ 'airdropAuctionLockdropVesting' - ].wallet.address.toString(), + ].wallet.address.toString(), amount: TINY_AIRDROP_AMOUNT.toString(), }, { @@ -273,7 +273,7 @@ describe('Neutron / TGE / Auction', () => { address: tgeWallets[ 'airdropAuctionLockdropVestingMigration' - ].wallet.address.toString(), + ].wallet.address.toString(), amount: '1000000', }, ]; @@ -340,7 +340,7 @@ describe('Neutron / TGE / Auction', () => { const address = tgeWallets[v].wallet.address.toString(); const amount = tgeMain.airdropAccounts.find( - ({ address }) => address == tgeWallets[v].wallet.address.toString(), + ({address}) => address == tgeWallets[v].wallet.address.toString(), )?.amount || '0'; const proofs = tgeMain.airdrop.getMerkleProof({ address: address, @@ -699,9 +699,9 @@ describe('Neutron / TGE / Auction', () => { it('should not be able to set pool size bc of wrong price feed data', async () => { await waitTill( tgeMain.times.auctionInit + - tgeMain.times.auctionDepositWindow + - tgeMain.times.auctionWithdrawalWindow + - 5, + tgeMain.times.auctionDepositWindow + + tgeMain.times.auctionWithdrawalWindow + + 5, ); await expect( cmInstantiator.executeContract( @@ -1206,8 +1206,8 @@ describe('Neutron / TGE / Auction', () => { it('should not be able to lock tokens when time is up', async () => { await waitTill( tgeMain.times.lockdropInit + - tgeMain.times.lockdropDepositDuration + - 5, + tgeMain.times.lockdropDepositDuration + + 5, ); await expect( cmInstantiator.executeContract( @@ -1241,9 +1241,9 @@ describe('Neutron / TGE / Auction', () => { it('should init pool', async () => { await waitTill( tgeMain.times.lockdropInit + - tgeMain.times.lockdropDepositDuration + - tgeMain.times.lockdropWithdrawalDuration + - 5, + tgeMain.times.lockdropDepositDuration + + tgeMain.times.lockdropWithdrawalDuration + + 5, ); const res = await cmInstantiator.executeContract( tgeMain.contracts.auction, @@ -1352,13 +1352,13 @@ describe('Neutron / TGE / Auction', () => { expect( Math.abs( parseInt(reserveLPBalanceAtomNtrn.balance) - - parseInt(auctionState.atom_lp_size) / 2, + parseInt(auctionState.atom_lp_size) / 2, ), ).toBeLessThan(1); expect( Math.abs( parseInt(reserveLPBalanceUsdcNtrn.balance) - - parseInt(auctionState.usdc_lp_size) / 2, + parseInt(auctionState.usdc_lp_size) / 2, ), ).toBeLessThan(1); @@ -1378,15 +1378,15 @@ describe('Neutron / TGE / Auction', () => { expect( Math.abs( parseInt(auctionLPBalanceAtomNtrn.balance) - - (parseInt(auctionState.atom_lp_size) / 2 - - parseInt(auctionState.atom_lp_locked)), + (parseInt(auctionState.atom_lp_size) / 2 - + parseInt(auctionState.atom_lp_locked)), ), ).toBeLessThan(1); expect( Math.abs( parseInt(auctionLPBalanceUsdcNtrn.balance) - - (parseInt(auctionState.usdc_lp_size) / 2 - - parseInt(auctionState.usdc_lp_locked)), + (parseInt(auctionState.usdc_lp_size) / 2 - + parseInt(auctionState.usdc_lp_locked)), ), ).toBeLessThan(1); @@ -1566,8 +1566,8 @@ describe('Neutron / TGE / Auction', () => { it('should be able to claim lpATOM_NTRN vesting after vesting period', async () => { await waitTill( tgeMain.times.vestTimestamp / 1000 + - tgeMain.times.auctionVestingLpDuration + - 10, + tgeMain.times.auctionVestingLpDuration + + 10, ); const [avaliableAtomLp, avaliableUsdcLp] = await Promise.all([ neutronChain.queryContract(tgeMain.contracts.vestingAtomLp, { @@ -1627,7 +1627,7 @@ describe('Neutron / TGE / Auction', () => { tgeMain.contracts.oracleAtom, { t_w_a_p_at_height: { - token: { native_token: { denom: NEUTRON_DENOM } }, + token: {native_token: {denom: NEUTRON_DENOM}}, height: String(tgeEndHeight + 10), }, }, @@ -1636,7 +1636,7 @@ describe('Neutron / TGE / Auction', () => { tgeMain.contracts.oracleAtom, { t_w_a_p_at_height: { - token: { native_token: { denom: IBC_ATOM_DENOM } }, + token: {native_token: {denom: IBC_ATOM_DENOM}}, height: String(tgeEndHeight + 10), }, }, @@ -1651,7 +1651,7 @@ describe('Neutron / TGE / Auction', () => { tgeMain.contracts.oracleUsdc, { t_w_a_p_at_height: { - token: { native_token: { denom: NEUTRON_DENOM } }, + token: {native_token: {denom: NEUTRON_DENOM}}, height: String(tgeEndHeight + 10), }, }, @@ -1660,7 +1660,7 @@ describe('Neutron / TGE / Auction', () => { tgeMain.contracts.oracleUsdc, { t_w_a_p_at_height: { - token: { native_token: { denom: IBC_USDC_DENOM } }, + token: {native_token: {denom: IBC_USDC_DENOM}}, height: String(tgeEndHeight + 10), }, }, @@ -1764,7 +1764,7 @@ describe('Neutron / TGE / Auction', () => { // we connected new voting vault(vesting voting vault), now its not enough // daoMember1 voting power to pass proposal // lockdrop participant should vote - expect(prop.proposal).toMatchObject({ status: 'open' }); + expect(prop.proposal).toMatchObject({status: 'open'}); const vp: Record = {}; for (const v of [ 'airdropAuctionLockdrop', @@ -1823,7 +1823,7 @@ describe('Neutron / TGE / Auction', () => { await daoMember1.voteYes(propID); const prop = await daoMain.queryProposal(propID); // lockdrop and vesting participants should vote - expect(prop.proposal).toMatchObject({ status: 'open' }); + expect(prop.proposal).toMatchObject({status: 'open'}); const vp: Record = {}; for (const v of [ 'airdropAuctionVesting', @@ -1886,7 +1886,7 @@ describe('Neutron / TGE / Auction', () => { ); expect(Number(ctvp.power)).toEqual( Number(totalCNTRNSupply.total_supply) - - Number(airdropCNTRN.balance), + Number(airdropCNTRN.balance), ); }); }); @@ -1909,7 +1909,7 @@ describe('Neutron / TGE / Auction', () => { await neutronChain.queryDenomBalance( tgeWallets[ 'airdropAuctionLockdropVesting' - ].wallet.address.toString(), + ].wallet.address.toString(), NEUTRON_DENOM, ); @@ -1921,7 +1921,7 @@ describe('Neutron / TGE / Auction', () => { address: tgeWallets[ 'airdropAuctionLockdropVesting' - ].wallet.address.toString(), + ].wallet.address.toString(), }, }, ); @@ -1931,9 +1931,9 @@ describe('Neutron / TGE / Auction', () => { beforeAll(async () => { await waitTill( tgeMain.times.lockdropInit + - tgeMain.times.lockdropDepositDuration + - tgeMain.times.lockdropWithdrawalDuration + - 1, + tgeMain.times.lockdropDepositDuration + + tgeMain.times.lockdropWithdrawalDuration + + 1, ); }); @@ -1960,8 +1960,8 @@ describe('Neutron / TGE / Auction', () => { expect( rewardsStateAfterClaim.balanceNtrn + - FEE_SIZE - - rewardsStateBeforeClaim.balanceNtrn, + FEE_SIZE - + rewardsStateBeforeClaim.balanceNtrn, ).toEqual(40); // lockdrop rewards share for the user const rewardStateBeforeClaimUsdc: LockdropLockUpInfoResponse = @@ -2216,7 +2216,7 @@ describe('Neutron / TGE / Auction', () => { await neutronChain.queryDenomBalance( tgeWallets[ 'airdropAuctionLockdropVesting' - ].wallet.address.toString(), + ].wallet.address.toString(), NEUTRON_DENOM, ); const expectedLockdropReward = Number( @@ -2225,8 +2225,8 @@ describe('Neutron / TGE / Auction', () => { const feeCompensation = 3 * FEE_SIZE; expect( expectedLockdropReward + - balanceBeforeAirdropAuctionLockdropVesting + - TINY_AIRDROP_AMOUNT, + balanceBeforeAirdropAuctionLockdropVesting + + TINY_AIRDROP_AMOUNT, ).toEqual(feeCompensation + balanceAfterAirdropAuctionLockdropVesting); }); }); @@ -2379,7 +2379,7 @@ describe('Neutron / TGE / Auction', () => { JSON.stringify({ bond: {}, }), - [{ denom: NEUTRON_DENOM, amount: '1000' }], + [{denom: NEUTRON_DENOM, amount: '1000'}], ), ).rejects.toThrow(/Bonding is not available for this contract/); await expect( @@ -2591,7 +2591,7 @@ describe('Neutron / TGE / Auction', () => { test('create and fill NTRN/ibcATOM PCL pair', async () => { const poolStatus = await neutronChain.queryContract( tgeMain.pairs.atom_ntrn.contract, - { pool: {} }, + {pool: {}}, ); const ntrnInPool = poolStatus.assets.filter( (a) => (a.info as NativeToken).native_token.denom == NEUTRON_DENOM, @@ -2640,7 +2640,7 @@ describe('Neutron / TGE / Auction', () => { test('create and fill NTRN/ibcUSDC PCL pair', async () => { const poolStatus = await neutronChain.queryContract( tgeMain.pairs.usdc_ntrn.contract, - { pool: {} }, + {pool: {}}, ); const ntrnInPool = poolStatus.assets.filter( (a) => (a.info as NativeToken).native_token.denom == NEUTRON_DENOM, @@ -2702,6 +2702,8 @@ describe('Neutron / TGE / Auction', () => { }); let lockdropPclAddr: string; + let atomVestingLpAddr: string; + let usdcVestingLpAddr: string; describe('instantiate PCL contracts', () => { let xykLockdropConfig: XykLockdropConfig; let xykLockdropUsdcPool: LockdropPool; @@ -2747,6 +2749,34 @@ describe('Neutron / TGE / Auction', () => { ); lockdropPclAddr = res[0]._contract_address; }); + + it('instantiate PCL vesting lp contracts', async () => { + const codeId = await cmInstantiator.storeWasm( + NeutronContract.VESTING_LP_PCL, + ); + const res = await cmInstantiator.instantiateContract( + codeId, + JSON.stringify({ + owner: cmInstantiator.wallet.address.toString(), + token_info_manager: cmInstantiator.wallet.address.toString(), + vesting_managers: [], + vesting_token: tgeMain.pairs.atom_ntrn, + }), + 'atom_vesting_lp_pcl', + ); + const res1 = await cmInstantiator.instantiateContract( + codeId, + JSON.stringify({ + owner: cmInstantiator.wallet.address.toString(), + token_info_manager: cmInstantiator.wallet.address.toString(), + vesting_managers: [], + vesting_token: tgeMain.pairs.usdc_ntrn, + }), + 'usdc_vesting_lp_pcl', + ); + atomVestingLpAddr = res[0]._contract_address; + usdcVestingLpAddr = res1[0]._contract_address; + }); }); describe('migrate TGE contracts to liquidity migration versions', () => { @@ -2774,14 +2804,14 @@ describe('Neutron / TGE / Auction', () => { xykLockdrop: tgeMain.contracts.lockdrop, pclLockdrop: lockdropPclAddr, atomXykPair: tgeMain.pairs.atom_ntrn.contract, - atomXykLp: tgeMain.pairs.atom_ntrn.liquidity, + atomXykLp: tgeMain.pairs.atom_ntrn.liquidity, usdcXykPair: tgeMain.pairs.usdc_ntrn.contract, usdcXykLp: tgeMain.pairs.usdc_ntrn.liquidity, atomPclPair: ntrnAtomPclPool, atomPclLp: ntrnAtomPclToken, usdcPclPair: ntrnUsdcPclPool, usdcPclLp: ntrnUsdcPclToken, - generator: tgeMain.contracts.astroGenerator, + generator: tgeMain.contracts.astroGenerator, }; }); @@ -2821,7 +2851,7 @@ describe('Neutron / TGE / Auction', () => { undefined, { gas_limit: Long.fromString('15000000'), - amount: [{ denom: NEUTRON_DENOM, amount: '750000' }], + amount: [{denom: NEUTRON_DENOM, amount: '750000'}], }, ); }); @@ -3938,88 +3968,307 @@ type ExpandedLockdropLockUpInfoResponse = { expected_ntrn_share: number; // expected amount of ntrn received on liquidity withdrawal expected_paired_asset_share: number; // expected amount of paired asset received on liquidity withdrawal }; + console.log( + `user info in XYK after migration:\n${JSON.stringify( + userInfoInXykLockdropAfter, + )}`, + ); + console.log( + `user info in PCL after migration:\n${JSON.stringify( + userInfoInPclLockdropAfter, + )}`, + ); + }); + }); + describe('Migration of lp vesting', () => { + let claimAtomLP; + let claimUsdcLP; + const votingPowerBeforeLp: Record = {}; + let totalUnclaimedAtHeightBeforeMigration: number; + let unclaimedAtHeightBeforeMigration: number; + let unclaimedHeightBeforeMigration: number; + let newVestingLpCodeID: number; + + // it('should save voting power before migration: lp', async () => { + // for (const v of [ + // 'airdropAuctionVesting', + // 'airdropAuctionLockdrop', + // 'airdropAuctionLockdropVesting', + // 'auctionLockdrop', + // 'auctionLockdropVesting', + // 'auctionVesting', + // ]) { + // const vp = await tgeMain.lpVotingPower( + // tgeWallets[v].wallet.address.toString(), + // ); + // votingPowerBeforeLp[v] = +vp.power; + // } + // }); + // + // + // it('should validate numbers & save claim amount before migration', async () => { + // unclaimedHeightBeforeMigration = await getHeight(neutronChain.sdk); + // totalUnclaimedAtHeightBeforeMigration = + // await queryTotalUnclaimedAmountAtHeight( + // cmInstantiator.chain, + // tge.contracts.vestingAtomLp, + // unclaimedHeightBeforeMigration, + // ); + // unclaimedAtHeightBeforeMigration = await queryUnclaimmedAmountAtHeight( + // cmInstantiator.chain, + // tge.contracts.vestingAtomLp, + // unclaimedHeightBeforeMigration, + // cmInstantiator.wallet.address.toString(), + // ); + // + // const [ + // vestingInfoAtom, + // vestingInfoUsdc, + // lpAuctionBalanceAtom, + // lpAuctionBalanceUsdc, + // ] = await Promise.all([ + // neutronChain.queryContract( + // tge.contracts.vestingAtomLp, + // { + // vesting_account: { + // address: cmInstantiator.wallet.address.toString(), + // }, + // }, + // ), + // neutronChain.queryContract( + // tge.contracts.vestingUsdcLp, + // { + // vesting_account: { + // address: cmInstantiator.wallet.address.toString(), + // }, + // }, + // ), + // neutronChain.queryContract( + // tge.pairs.atom_ntrn.liquidity, + // { + // balance: { + // address: tge.contracts.auction, + // }, + // }, + // ), + // neutronChain.queryContract( + // tge.pairs.usdc_ntrn.liquidity, + // { + // balance: { + // address: tge.contracts.auction, + // }, + // }, + // ), + // ]); + // + // expect(parseInt(lpAuctionBalanceUsdc.balance)).toBeLessThanOrEqual(7); + // expect(parseInt(lpAuctionBalanceAtom.balance)).toBeLessThanOrEqual(7); + // expect(vestingInfoAtom.address).toEqual( + // cmInstantiator.wallet.address.toString(), + // ); + // expect(vestingInfoUsdc.address).toEqual( + // cmInstantiator.wallet.address.toString(), + // ); + // expect(vestingInfoAtom.info.released_amount).toEqual('0'); + // expect(vestingInfoUsdc.info.released_amount).toEqual('0'); + // + // expect( + // parseInt(vestingInfoAtom.info.schedules[0].end_point.amount), + // ).toBeCloseTo(89394, -1); + // claimAtomLP = parseInt( + // vestingInfoAtom.info.schedules[0].end_point.amount, + // ); + // + // expect( + // parseInt(vestingInfoUsdc.info.schedules[0].end_point.amount), + // ).toBeCloseTo(18087, -1); + // claimUsdcLP = parseInt( + // vestingInfoUsdc.info.schedules[0].end_point.amount, + // ); + // }); + + it('store new vesting lp contract version', async () => { + newVestingLpCodeID = await cmInstantiator.storeWasm( + NeutronContract.VESTING_LP, + ); + }); -const deregisterPair = async ( - instantiator: WalletWrapper, - factoryAddr: string, - assetInfos: NativeToken[], -) => { - const deregisterMsg = { - deregister: { - asset_infos: assetInfos, - }, - }; + // it('deploy vesting lp voting vault for CL', async () => { + // const codeId = await cmInstantiator.storeWasm( + // types.NeutronContract.VESTING_LP_VAULT_CL, + // ); + // expect(codeId).toBeGreaterThan(0); + // + // const res = await cmInstantiator.instantiateContract( + // codeId, + // JSON.stringify({ + // name: 'Vesting LP CL voting vault', + // description: 'Vesting LP voting vault for CL pairs', + // atom_vesting_lp_contract: tgeMain.contracts.vestingAtomLp, + // atom_cl_pool_contract: tgeMain.pairs.atom_ntrn.contract, + // usdc_vesting_lp_contract: tgeMain.contracts.vestingUsdcLp, + // usdc_cl_pool_contract: tgeMain.pairs.usdc_ntrn.contract, + // owner: daoMain.contracts.core.address, + // }), + // 'neutron.voting.vaults.lockdrop_cl', + // ); + // vestingLpVaultForClAddr = res[0]._contract_address; + // }); + + it('should migrate ATOM LP vesing to V2', async () => { + const res = await cmInstantiator.migrateContract( + tgeMain.contracts.vestingAtomLp, + tgeMain.codeIds.VESTING_LP_V2, + { + max_slippage: '0.1', + ntrn_denom: NEUTRON_DENOM, + paired_denom: IBC_ATOM_DENOM, + xyk_pair: tgeMain.old_pairs.atom_ntrn.contract.toString(), + cl_pair: tgeMain.pairs.atom_ntrn.contract.toString(), + new_lp_token: tgeMain.pairs.atom_ntrn.liquidity.toString(), + pcl_vesting: atomVestingLpAddr, + }, + ); + expect(res.code).toEqual(0); + }); - const execRes = await instantiator.executeContract( - factoryAddr, - JSON.stringify(deregisterMsg), - ); - expect(execRes.code).toBe(0); -}; + it('should migrate USDC LP vesing to V2', async () => { + const res = await cmInstantiator.migrateContract( + tgeMain.contracts.vestingUsdcLp, + tgeMain.codeIds.VESTING_LP_V2, + { + max_slippage: '0.1', + ntrn_denom: NEUTRON_DENOM, + paired_denom: IBC_USDC_DENOM, + xyk_pair: tgeMain.old_pairs.usdc_ntrn.contract, + cl_pair: tgeMain.pairs.usdc_ntrn.contract, + new_lp_token: tgeMain.pairs.usdc_ntrn.liquidity, + pcl_vesting: usdcVestingLpAddr, + }, + ); + expect(res.code).toEqual(0); + }); -const createPclPair = async ( - chain: CosmosWrapper, - instantiator: WalletWrapper, - factoryAddr: string, - assetInfos: NativeToken[], - initPriceScale: number, -): Promise => { - const poolInitParams: ConcentratedPoolParams = { - amp: '40', - gamma: '0.000145', - mid_fee: '0.0026', - out_fee: '0.0045', - fee_gamma: '0.00023', - repeg_profit_threshold: '0.000002', - min_price_scale_delta: '0.000146', - price_scale: initPriceScale.toString(), - ma_half_time: 600, - track_asset_balances: false, - }; + it('should migrate atom', async () => { - const createMsg = { - create_pair: { - pair_type: { custom: 'concentrated' }, - asset_infos: assetInfos, - init_params: Buffer.from(JSON.stringify(poolInitParams)).toString( - 'base64', - ), - }, - }; + for (const v of [ + 'airdropAuctionVesting', + 'airdropAuctionLockdropVesting', + 'auctionLockdropVesting', + 'auctionVesting', + ]) { + let resAtom = await cmInstantiator.executeContract( + tgeMain.contracts.vestingAtomLp, + JSON.stringify({ + migrate_liquidity_to_pcl_pool: {user: tgeWallets[v].wallet.address.toString()}, + }), + ); + expect(resAtom.code).toEqual(0); + } + }); - const execRes = await instantiator.executeContract( - factoryAddr, - JSON.stringify(createMsg), - ); - expect(execRes.code).toBe(0); - const pairInfo = await chain.queryContract(factoryAddr, { - pair: { - asset_infos: assetInfos, - }, + it('should migrate usdc', async () => { + for (const v of [ + 'airdropAuctionVesting', + 'airdropAuctionLockdropVesting', + 'auctionLockdropVesting', + 'auctionVesting', + ]) { + let resAtom = await cmInstantiator.executeContract( + tgeMain.contracts.vestingUsdcLp, + JSON.stringify({ + migrate_liquidity_to_pcl_pool: {user: tgeWallets[v].wallet.address.toString()}, + }), + ); + expect(resAtom.code).toEqual(0); + } + }); + }); + }); }); - return pairInfo; -}; -type PairInfo = { - asset_infos: NativeToken[]; - contract_addr: string; - liquidity_token: string; - pair_type: Record; -}; + const deregisterPair = async ( + instantiator: WalletWrapper, + factoryAddr: string, + assetInfos: NativeToken[], + ) => { + const deregisterMsg = { + deregister: { + asset_infos: assetInfos, + }, + }; -type ConcentratedPoolParams = { - amp: string; - gamma: string; - mid_fee: string; - out_fee: string; - fee_gamma: string; - repeg_profit_threshold: string; - min_price_scale_delta: string; - price_scale: string; - ma_half_time: number; - track_asset_balances: boolean; -}; + const execRes = await instantiator.executeContract( + factoryAddr, + JSON.stringify(deregisterMsg), + ); + expect(execRes.code).toBe(0); + }; + + const createPclPair = async ( + chain: CosmosWrapper, + instantiator: WalletWrapper, + factoryAddr: string, + assetInfos: NativeToken[], + initPriceScale: number, + ): Promise => { + const poolInitParams: ConcentratedPoolParams = { + amp: '40', + gamma: '0.000145', + mid_fee: '0.0026', + out_fee: '0.0045', + fee_gamma: '0.00023', + repeg_profit_threshold: '0.000002', + min_price_scale_delta: '0.000146', + price_scale: initPriceScale.toString(), + ma_half_time: 600, + track_asset_balances: false, + }; + + const createMsg = { + create_pair: { + pair_type: {custom: 'concentrated'}, + asset_infos: assetInfos, + init_params: Buffer.from(JSON.stringify(poolInitParams)).toString( + 'base64', + ), + }, + }; + + const execRes = await instantiator.executeContract( + factoryAddr, + JSON.stringify(createMsg), + ); + expect(execRes.code).toBe(0); + + const pairInfo = await chain.queryContract(factoryAddr, { + pair: { + asset_infos: assetInfos, + }, + }); + return pairInfo; + }; + + type PairInfo = { + asset_infos: NativeToken[]; + contract_addr: string; + liquidity_token: string; + pair_type: Record; + }; + + type ConcentratedPoolParams = { + amp: string; + gamma: string; + mid_fee: string; + out_fee: string; + fee_gamma: string; + repeg_profit_threshold: string; + min_price_scale_delta: string; + price_scale: string; + ma_half_time: number; + track_asset_balances: boolean; + }; // checks whether the value is in +/- range (inclusive) of the target with tolerance in %. const isWithinRange = (value: number, target: number, tolerance: number) => { From 4d193658fff3640bcdfa992157425dd5df99b239 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Thu, 1 Feb 2024 12:17:20 -0300 Subject: [PATCH 09/87] fmt --- src/testcases/run_in_band/tge.auction.test.ts | 274 +++++++++--------- 1 file changed, 138 insertions(+), 136 deletions(-) diff --git a/src/testcases/run_in_band/tge.auction.test.ts b/src/testcases/run_in_band/tge.auction.test.ts index 6b76ffdd..22ed666a 100644 --- a/src/testcases/run_in_band/tge.auction.test.ts +++ b/src/testcases/run_in_band/tge.auction.test.ts @@ -5,7 +5,7 @@ import { CosmosWrapper, NEUTRON_DENOM, } from '@neutron-org/neutronjsplus/dist/cosmos'; -import {TestStateLocalCosmosTestNet, types} from '@neutron-org/neutronjsplus'; +import { TestStateLocalCosmosTestNet } from '@neutron-org/neutronjsplus'; import { BroadcastTx200ResponseTxResponse } from '@cosmos-client/core/cjs/openapi/api'; import { executeAuctionSetTokenInfo, @@ -42,8 +42,8 @@ import { nativeToken, PoolStatus, } from '@neutron-org/neutronjsplus/dist/types'; -import {IBC_ATOM_DENOM, IBC_USDC_DENOM} from '@neutron-org/neutronjsplus'; -import {getHeight} from '@neutron-org/neutronjsplus/dist/env'; +import { IBC_ATOM_DENOM, IBC_USDC_DENOM } from '@neutron-org/neutronjsplus'; +import { getHeight } from '@neutron-org/neutronjsplus/dist/env'; const config = require('../../config.json'); @@ -261,7 +261,7 @@ describe('Neutron / TGE / Auction', () => { address: tgeWallets[ 'airdropAuctionLockdropVesting' - ].wallet.address.toString(), + ].wallet.address.toString(), amount: TINY_AIRDROP_AMOUNT.toString(), }, { @@ -273,7 +273,7 @@ describe('Neutron / TGE / Auction', () => { address: tgeWallets[ 'airdropAuctionLockdropVestingMigration' - ].wallet.address.toString(), + ].wallet.address.toString(), amount: '1000000', }, ]; @@ -340,7 +340,7 @@ describe('Neutron / TGE / Auction', () => { const address = tgeWallets[v].wallet.address.toString(); const amount = tgeMain.airdropAccounts.find( - ({address}) => address == tgeWallets[v].wallet.address.toString(), + ({ address }) => address == tgeWallets[v].wallet.address.toString(), )?.amount || '0'; const proofs = tgeMain.airdrop.getMerkleProof({ address: address, @@ -699,9 +699,9 @@ describe('Neutron / TGE / Auction', () => { it('should not be able to set pool size bc of wrong price feed data', async () => { await waitTill( tgeMain.times.auctionInit + - tgeMain.times.auctionDepositWindow + - tgeMain.times.auctionWithdrawalWindow + - 5, + tgeMain.times.auctionDepositWindow + + tgeMain.times.auctionWithdrawalWindow + + 5, ); await expect( cmInstantiator.executeContract( @@ -1206,8 +1206,8 @@ describe('Neutron / TGE / Auction', () => { it('should not be able to lock tokens when time is up', async () => { await waitTill( tgeMain.times.lockdropInit + - tgeMain.times.lockdropDepositDuration + - 5, + tgeMain.times.lockdropDepositDuration + + 5, ); await expect( cmInstantiator.executeContract( @@ -1241,9 +1241,9 @@ describe('Neutron / TGE / Auction', () => { it('should init pool', async () => { await waitTill( tgeMain.times.lockdropInit + - tgeMain.times.lockdropDepositDuration + - tgeMain.times.lockdropWithdrawalDuration + - 5, + tgeMain.times.lockdropDepositDuration + + tgeMain.times.lockdropWithdrawalDuration + + 5, ); const res = await cmInstantiator.executeContract( tgeMain.contracts.auction, @@ -1352,13 +1352,13 @@ describe('Neutron / TGE / Auction', () => { expect( Math.abs( parseInt(reserveLPBalanceAtomNtrn.balance) - - parseInt(auctionState.atom_lp_size) / 2, + parseInt(auctionState.atom_lp_size) / 2, ), ).toBeLessThan(1); expect( Math.abs( parseInt(reserveLPBalanceUsdcNtrn.balance) - - parseInt(auctionState.usdc_lp_size) / 2, + parseInt(auctionState.usdc_lp_size) / 2, ), ).toBeLessThan(1); @@ -1378,15 +1378,15 @@ describe('Neutron / TGE / Auction', () => { expect( Math.abs( parseInt(auctionLPBalanceAtomNtrn.balance) - - (parseInt(auctionState.atom_lp_size) / 2 - - parseInt(auctionState.atom_lp_locked)), + (parseInt(auctionState.atom_lp_size) / 2 - + parseInt(auctionState.atom_lp_locked)), ), ).toBeLessThan(1); expect( Math.abs( parseInt(auctionLPBalanceUsdcNtrn.balance) - - (parseInt(auctionState.usdc_lp_size) / 2 - - parseInt(auctionState.usdc_lp_locked)), + (parseInt(auctionState.usdc_lp_size) / 2 - + parseInt(auctionState.usdc_lp_locked)), ), ).toBeLessThan(1); @@ -1566,8 +1566,8 @@ describe('Neutron / TGE / Auction', () => { it('should be able to claim lpATOM_NTRN vesting after vesting period', async () => { await waitTill( tgeMain.times.vestTimestamp / 1000 + - tgeMain.times.auctionVestingLpDuration + - 10, + tgeMain.times.auctionVestingLpDuration + + 10, ); const [avaliableAtomLp, avaliableUsdcLp] = await Promise.all([ neutronChain.queryContract(tgeMain.contracts.vestingAtomLp, { @@ -1627,7 +1627,7 @@ describe('Neutron / TGE / Auction', () => { tgeMain.contracts.oracleAtom, { t_w_a_p_at_height: { - token: {native_token: {denom: NEUTRON_DENOM}}, + token: { native_token: { denom: NEUTRON_DENOM } }, height: String(tgeEndHeight + 10), }, }, @@ -1636,7 +1636,7 @@ describe('Neutron / TGE / Auction', () => { tgeMain.contracts.oracleAtom, { t_w_a_p_at_height: { - token: {native_token: {denom: IBC_ATOM_DENOM}}, + token: { native_token: { denom: IBC_ATOM_DENOM } }, height: String(tgeEndHeight + 10), }, }, @@ -1651,7 +1651,7 @@ describe('Neutron / TGE / Auction', () => { tgeMain.contracts.oracleUsdc, { t_w_a_p_at_height: { - token: {native_token: {denom: NEUTRON_DENOM}}, + token: { native_token: { denom: NEUTRON_DENOM } }, height: String(tgeEndHeight + 10), }, }, @@ -1660,7 +1660,7 @@ describe('Neutron / TGE / Auction', () => { tgeMain.contracts.oracleUsdc, { t_w_a_p_at_height: { - token: {native_token: {denom: IBC_USDC_DENOM}}, + token: { native_token: { denom: IBC_USDC_DENOM } }, height: String(tgeEndHeight + 10), }, }, @@ -1764,7 +1764,7 @@ describe('Neutron / TGE / Auction', () => { // we connected new voting vault(vesting voting vault), now its not enough // daoMember1 voting power to pass proposal // lockdrop participant should vote - expect(prop.proposal).toMatchObject({status: 'open'}); + expect(prop.proposal).toMatchObject({ status: 'open' }); const vp: Record = {}; for (const v of [ 'airdropAuctionLockdrop', @@ -1823,7 +1823,7 @@ describe('Neutron / TGE / Auction', () => { await daoMember1.voteYes(propID); const prop = await daoMain.queryProposal(propID); // lockdrop and vesting participants should vote - expect(prop.proposal).toMatchObject({status: 'open'}); + expect(prop.proposal).toMatchObject({ status: 'open' }); const vp: Record = {}; for (const v of [ 'airdropAuctionVesting', @@ -1886,7 +1886,7 @@ describe('Neutron / TGE / Auction', () => { ); expect(Number(ctvp.power)).toEqual( Number(totalCNTRNSupply.total_supply) - - Number(airdropCNTRN.balance), + Number(airdropCNTRN.balance), ); }); }); @@ -1909,7 +1909,7 @@ describe('Neutron / TGE / Auction', () => { await neutronChain.queryDenomBalance( tgeWallets[ 'airdropAuctionLockdropVesting' - ].wallet.address.toString(), + ].wallet.address.toString(), NEUTRON_DENOM, ); @@ -1921,7 +1921,7 @@ describe('Neutron / TGE / Auction', () => { address: tgeWallets[ 'airdropAuctionLockdropVesting' - ].wallet.address.toString(), + ].wallet.address.toString(), }, }, ); @@ -1931,9 +1931,9 @@ describe('Neutron / TGE / Auction', () => { beforeAll(async () => { await waitTill( tgeMain.times.lockdropInit + - tgeMain.times.lockdropDepositDuration + - tgeMain.times.lockdropWithdrawalDuration + - 1, + tgeMain.times.lockdropDepositDuration + + tgeMain.times.lockdropWithdrawalDuration + + 1, ); }); @@ -1960,8 +1960,8 @@ describe('Neutron / TGE / Auction', () => { expect( rewardsStateAfterClaim.balanceNtrn + - FEE_SIZE - - rewardsStateBeforeClaim.balanceNtrn, + FEE_SIZE - + rewardsStateBeforeClaim.balanceNtrn, ).toEqual(40); // lockdrop rewards share for the user const rewardStateBeforeClaimUsdc: LockdropLockUpInfoResponse = @@ -2216,7 +2216,7 @@ describe('Neutron / TGE / Auction', () => { await neutronChain.queryDenomBalance( tgeWallets[ 'airdropAuctionLockdropVesting' - ].wallet.address.toString(), + ].wallet.address.toString(), NEUTRON_DENOM, ); const expectedLockdropReward = Number( @@ -2225,8 +2225,8 @@ describe('Neutron / TGE / Auction', () => { const feeCompensation = 3 * FEE_SIZE; expect( expectedLockdropReward + - balanceBeforeAirdropAuctionLockdropVesting + - TINY_AIRDROP_AMOUNT, + balanceBeforeAirdropAuctionLockdropVesting + + TINY_AIRDROP_AMOUNT, ).toEqual(feeCompensation + balanceAfterAirdropAuctionLockdropVesting); }); }); @@ -2379,7 +2379,7 @@ describe('Neutron / TGE / Auction', () => { JSON.stringify({ bond: {}, }), - [{denom: NEUTRON_DENOM, amount: '1000'}], + [{ denom: NEUTRON_DENOM, amount: '1000' }], ), ).rejects.toThrow(/Bonding is not available for this contract/); await expect( @@ -2591,7 +2591,7 @@ describe('Neutron / TGE / Auction', () => { test('create and fill NTRN/ibcATOM PCL pair', async () => { const poolStatus = await neutronChain.queryContract( tgeMain.pairs.atom_ntrn.contract, - {pool: {}}, + { pool: {} }, ); const ntrnInPool = poolStatus.assets.filter( (a) => (a.info as NativeToken).native_token.denom == NEUTRON_DENOM, @@ -2640,7 +2640,7 @@ describe('Neutron / TGE / Auction', () => { test('create and fill NTRN/ibcUSDC PCL pair', async () => { const poolStatus = await neutronChain.queryContract( tgeMain.pairs.usdc_ntrn.contract, - {pool: {}}, + { pool: {} }, ); const ntrnInPool = poolStatus.assets.filter( (a) => (a.info as NativeToken).native_token.denom == NEUTRON_DENOM, @@ -2804,14 +2804,14 @@ describe('Neutron / TGE / Auction', () => { xykLockdrop: tgeMain.contracts.lockdrop, pclLockdrop: lockdropPclAddr, atomXykPair: tgeMain.pairs.atom_ntrn.contract, - atomXykLp: tgeMain.pairs.atom_ntrn.liquidity, + atomXykLp: tgeMain.pairs.atom_ntrn.liquidity, usdcXykPair: tgeMain.pairs.usdc_ntrn.contract, usdcXykLp: tgeMain.pairs.usdc_ntrn.liquidity, atomPclPair: ntrnAtomPclPool, atomPclLp: ntrnAtomPclToken, usdcPclPair: ntrnUsdcPclPool, usdcPclLp: ntrnUsdcPclToken, - generator: tgeMain.contracts.astroGenerator, + generator: tgeMain.contracts.astroGenerator, }; }); @@ -2845,13 +2845,13 @@ describe('Neutron / TGE / Auction', () => { user_address_raw: tgeWallets[ 'airdropAuctionLockdropVestingMigration' - ].wallet.address.toString(), + ].wallet.address.toString(), }, }), undefined, { gas_limit: Long.fromString('15000000'), - amount: [{denom: NEUTRON_DENOM, amount: '750000'}], + amount: [{ denom: NEUTRON_DENOM, amount: '750000' }], }, ); }); @@ -3217,7 +3217,7 @@ describe('Neutron / TGE / Auction', () => { it('gather state before migration', async () => { stateBefore = await gatherLiquidityMigrationState( neutronChain, - cmInstantiator.wallet.address.toString(), + cmInstantiator.wallet.address.toString(), liqMigContracts, ); console.log( @@ -3981,12 +3981,12 @@ type ExpandedLockdropLockUpInfoResponse = { }); }); describe('Migration of lp vesting', () => { - let claimAtomLP; - let claimUsdcLP; - const votingPowerBeforeLp: Record = {}; - let totalUnclaimedAtHeightBeforeMigration: number; - let unclaimedAtHeightBeforeMigration: number; - let unclaimedHeightBeforeMigration: number; + // let claimAtomLP; + // let claimUsdcLP; + // const votingPowerBeforeLp: Record = {}; + // let totalUnclaimedAtHeightBeforeMigration: number; + // let unclaimedAtHeightBeforeMigration: number; + // let unclaimedHeightBeforeMigration: number; let newVestingLpCodeID: number; // it('should save voting power before migration: lp', async () => { @@ -4118,7 +4118,7 @@ type ExpandedLockdropLockUpInfoResponse = { it('should migrate ATOM LP vesing to V2', async () => { const res = await cmInstantiator.migrateContract( tgeMain.contracts.vestingAtomLp, - tgeMain.codeIds.VESTING_LP_V2, + newVestingLpCodeID, { max_slippage: '0.1', ntrn_denom: NEUTRON_DENOM, @@ -4135,7 +4135,7 @@ type ExpandedLockdropLockUpInfoResponse = { it('should migrate USDC LP vesing to V2', async () => { const res = await cmInstantiator.migrateContract( tgeMain.contracts.vestingUsdcLp, - tgeMain.codeIds.VESTING_LP_V2, + newVestingLpCodeID, { max_slippage: '0.1', ntrn_denom: NEUTRON_DENOM, @@ -4150,24 +4150,24 @@ type ExpandedLockdropLockUpInfoResponse = { }); it('should migrate atom', async () => { - for (const v of [ 'airdropAuctionVesting', 'airdropAuctionLockdropVesting', 'auctionLockdropVesting', 'auctionVesting', ]) { - let resAtom = await cmInstantiator.executeContract( + const resAtom = await cmInstantiator.executeContract( tgeMain.contracts.vestingAtomLp, JSON.stringify({ - migrate_liquidity_to_pcl_pool: {user: tgeWallets[v].wallet.address.toString()}, + migrate_liquidity_to_pcl_pool: { + user: tgeWallets[v].wallet.address.toString(), + }, }), ); expect(resAtom.code).toEqual(0); } }); - it('should migrate usdc', async () => { for (const v of [ 'airdropAuctionVesting', @@ -4175,10 +4175,12 @@ type ExpandedLockdropLockUpInfoResponse = { 'auctionLockdropVesting', 'auctionVesting', ]) { - let resAtom = await cmInstantiator.executeContract( + const resAtom = await cmInstantiator.executeContract( tgeMain.contracts.vestingUsdcLp, JSON.stringify({ - migrate_liquidity_to_pcl_pool: {user: tgeWallets[v].wallet.address.toString()}, + migrate_liquidity_to_pcl_pool: { + user: tgeWallets[v].wallet.address.toString(), + }, }), ); expect(resAtom.code).toEqual(0); @@ -4186,89 +4188,89 @@ type ExpandedLockdropLockUpInfoResponse = { }); }); }); - }); - - const deregisterPair = async ( - instantiator: WalletWrapper, - factoryAddr: string, - assetInfos: NativeToken[], - ) => { - const deregisterMsg = { - deregister: { - asset_infos: assetInfos, - }, - }; +}); - const execRes = await instantiator.executeContract( - factoryAddr, - JSON.stringify(deregisterMsg), - ); - expect(execRes.code).toBe(0); +const deregisterPair = async ( + instantiator: WalletWrapper, + factoryAddr: string, + assetInfos: NativeToken[], +) => { + const deregisterMsg = { + deregister: { + asset_infos: assetInfos, + }, }; - const createPclPair = async ( - chain: CosmosWrapper, - instantiator: WalletWrapper, - factoryAddr: string, - assetInfos: NativeToken[], - initPriceScale: number, - ): Promise => { - const poolInitParams: ConcentratedPoolParams = { - amp: '40', - gamma: '0.000145', - mid_fee: '0.0026', - out_fee: '0.0045', - fee_gamma: '0.00023', - repeg_profit_threshold: '0.000002', - min_price_scale_delta: '0.000146', - price_scale: initPriceScale.toString(), - ma_half_time: 600, - track_asset_balances: false, - }; - - const createMsg = { - create_pair: { - pair_type: {custom: 'concentrated'}, - asset_infos: assetInfos, - init_params: Buffer.from(JSON.stringify(poolInitParams)).toString( - 'base64', - ), - }, - }; - - const execRes = await instantiator.executeContract( - factoryAddr, - JSON.stringify(createMsg), - ); - expect(execRes.code).toBe(0); + const execRes = await instantiator.executeContract( + factoryAddr, + JSON.stringify(deregisterMsg), + ); + expect(execRes.code).toBe(0); +}; - const pairInfo = await chain.queryContract(factoryAddr, { - pair: { - asset_infos: assetInfos, - }, - }); - return pairInfo; +const createPclPair = async ( + chain: CosmosWrapper, + instantiator: WalletWrapper, + factoryAddr: string, + assetInfos: NativeToken[], + initPriceScale: number, +): Promise => { + const poolInitParams: ConcentratedPoolParams = { + amp: '40', + gamma: '0.000145', + mid_fee: '0.0026', + out_fee: '0.0045', + fee_gamma: '0.00023', + repeg_profit_threshold: '0.000002', + min_price_scale_delta: '0.000146', + price_scale: initPriceScale.toString(), + ma_half_time: 600, + track_asset_balances: false, }; - type PairInfo = { - asset_infos: NativeToken[]; - contract_addr: string; - liquidity_token: string; - pair_type: Record; + const createMsg = { + create_pair: { + pair_type: { custom: 'concentrated' }, + asset_infos: assetInfos, + init_params: Buffer.from(JSON.stringify(poolInitParams)).toString( + 'base64', + ), + }, }; - type ConcentratedPoolParams = { - amp: string; - gamma: string; - mid_fee: string; - out_fee: string; - fee_gamma: string; - repeg_profit_threshold: string; - min_price_scale_delta: string; - price_scale: string; - ma_half_time: number; - track_asset_balances: boolean; - }; + const execRes = await instantiator.executeContract( + factoryAddr, + JSON.stringify(createMsg), + ); + expect(execRes.code).toBe(0); + + const pairInfo = await chain.queryContract(factoryAddr, { + pair: { + asset_infos: assetInfos, + }, + }); + return pairInfo; +}; + +type PairInfo = { + asset_infos: NativeToken[]; + contract_addr: string; + liquidity_token: string; + pair_type: Record; +}; + +type ConcentratedPoolParams = { + amp: string; + gamma: string; + mid_fee: string; + out_fee: string; + fee_gamma: string; + repeg_profit_threshold: string; + min_price_scale_delta: string; + price_scale: string; + ma_half_time: number; + track_asset_balances: boolean; +}; // checks whether the value is in +/- range (inclusive) of the target with tolerance in %. const isWithinRange = (value: number, target: number, tolerance: number) => { From af4c2f7c9292056f59d3682e8492b50381f068cd Mon Sep 17 00:00:00 2001 From: sotnikov-s Date: Mon, 5 Feb 2024 07:15:55 +0300 Subject: [PATCH 10/87] add noop migration tests, add tests for PCL lockups withdrawal --- src/testcases/run_in_band/tge.auction.test.ts | 385 ++++++++++++++---- 1 file changed, 313 insertions(+), 72 deletions(-) diff --git a/src/testcases/run_in_band/tge.auction.test.ts b/src/testcases/run_in_band/tge.auction.test.ts index 56bcead5..1bcb2bac 100644 --- a/src/testcases/run_in_band/tge.auction.test.ts +++ b/src/testcases/run_in_band/tge.auction.test.ts @@ -2571,6 +2571,7 @@ describe('Neutron / TGE / Auction', () => { }); }); + let liqMigContracts: LiquidityMigrationContracts; describe('migrate TGE liquidity to PCL', () => { let ntrnAtomPclPool: string; let ntrnAtomPclToken: string; @@ -2768,7 +2769,6 @@ describe('Neutron / TGE / Auction', () => { }); describe('execute migration handlers', () => { - let liqMigContracts: LiquidityMigrationContracts; it('fill liquidity migration contracts', () => { liqMigContracts = { xykLockdrop: tgeMain.contracts.lockdrop, @@ -2875,9 +2875,10 @@ describe('Neutron / TGE / Auction', () => { // claimed rewards are transferred directly to the user // assume fluctuation because rewards amount increases every block isWithinRange( - stateAfter.balances.user.astro, - stateBefore.balances.user.astro + userAstroRewards, - 0.05, + stateAfter.balances.user.astro - + stateBefore.balances.user.astro, + userAstroRewards, + 0.5, ); }); }); @@ -3303,9 +3304,10 @@ describe('Neutron / TGE / Auction', () => { // claimed rewards are transferred directly to the user // assume fluctuation because rewards amount increases every block isWithinRange( - stateAfter.balances.user.astro, - stateBefore.balances.user.astro + userAstroRewards, - 0.05, + stateAfter.balances.user.astro - + stateBefore.balances.user.astro, + userAstroRewards, + 0.5, ); }); @@ -3600,87 +3602,326 @@ describe('Neutron / TGE / Auction', () => { }); }); - // This participant has two lockup positions: ATOM for 1 and USDC for 1. User claimed rewards - // with liquidity unlock for both lockups before. Expected behaviour: both withdrawn lockups - // are ignored and untouched, no rewards paid, no balances changes whatsoever, no state changes - // made to both lockdrop contracts, migration transaction emits events informing about the - // already withdrawn positions. - describe('migrate auctionLockdrop participant', () => { - let stateBefore: LiquidityMigrationState; - it('gather state before migration', async () => { - stateBefore = await gatherLiquidityMigrationState( - neutronChain, - tgeWallets['auctionLockdrop'].wallet.address.toString(), - liqMigContracts, - ); - console.log( - `auctionLockdrop migration state before:\n${JSON.stringify( - stateBefore, - )}`, - ); - }); + // These accounts are the only remaining lockdrop participants. Each of them has two lockup + // positions: ATOM for 1 and USDC for 1. They claimed rewards with liquidity unlock for both + // lockups before. Expected behaviour: both withdrawn lockups are ignored and untouched, no + // rewards paid, no balance changes whatsoever, no state changes made to both lockdrop + // contracts, migration transaction emits events informing about the already withdrawn positions. + describe('migrate the rest lockdrop participants', () => { + for (const v of [ + 'airdropAuctionLockdrop', + 'airdropAuctionLockdropVesting', + 'auctionLockdrop', + 'auctionLockdropVesting', + ]) { + describe(`migrate ${v} participant`, () => { + let stateBefore: LiquidityMigrationState; + it('gather state before migration', async () => { + stateBefore = await gatherLiquidityMigrationState( + neutronChain, + tgeWallets[v].wallet.address.toString(), + liqMigContracts, + ); + console.log( + `${v} migration state before:\n${JSON.stringify(stateBefore)}`, + ); + }); - let migrateRes: BroadcastTx200ResponseTxResponse; - it('migrate the user', async () => { - migrateRes = await cmInstantiator.executeContract( + let migrateRes: BroadcastTx200ResponseTxResponse; + it('migrate the user', async () => { + migrateRes = await cmInstantiator.executeContract( + tgeMain.contracts.lockdrop, + JSON.stringify({ + migrate_liquidity_to_pcl_pools: { + user_address_raw: tgeWallets[v].wallet.address.toString(), + }, + }), + undefined, + { + gas_limit: Long.fromString('15000000'), + amount: [{ denom: NEUTRON_DENOM, amount: '750000' }], + }, + ); + }); + + let stateAfter: LiquidityMigrationState; + it('gather state after migration', async () => { + stateAfter = await gatherLiquidityMigrationState( + neutronChain, + tgeWallets[v].wallet.address.toString(), + liqMigContracts, + ); + console.log( + `${v} migration state after:\n${JSON.stringify(stateAfter)}`, + ); + }); + + describe('check user liquidity migration', () => { + test('user XYK lockup info consistency', async () => { + expect(stateBefore.xykUserLockups).toMatchObject( + stateAfter.xykUserLockups, + ); + }); + + test('no user lockup info in PCL lockdrop', async () => { + expect(stateAfter.pclUserLockups).toMatchObject({ + claimable_generator_ntrn_debt: '0', + mapped_lockup_infos: {}, + lockup_positions_index: 0, + ntrn_transferred: false, + total_ntrn_rewards: '0', + }); + }); + + test('no balance changes', async () => { + expect(stateBefore.balances).toMatchObject(stateAfter.balances); + }); + + test('already claimed events emission', async () => { + expect(migrateRes.raw_log).toContain( + '{"key":"ATOM_for_1","value":"already_been_withdrawn"}', + ); + expect(migrateRes.raw_log).toContain( + '{"key":"USDC_for_1","value":"already_been_withdrawn"}', + ); + }); + }); + }); + } + }); + }); + }); + + describe('post migration claims and withdrawals', () => { + // In PCL contract, the user has two lockups: ATOM for 1 and USDC for 2 + // In XYK contract, before migration the user had three lockups: ATOM for 1, + // USDC for 1 (withdrawn) and USDC for 2 + describe('by cmInstantiator', () => { + it('no withdrawal available from XYK', async () => { + // nor with withdrawal + await expect( + cmInstantiator.executeContract( tgeMain.contracts.lockdrop, JSON.stringify({ - migrate_liquidity_to_pcl_pools: { - user_address_raw: - tgeWallets['auctionLockdrop'].wallet.address.toString(), + claim_rewards_and_optionally_unlock: { + pool_type: 'USDC', + duration: 1, + withdraw_lp_stake: true, + }, + }), + ), + ).rejects.toThrow(/Astro LP Tokens have already been claimed!/); + // nor without one + await expect( + cmInstantiator.executeContract( + tgeMain.contracts.lockdrop, + JSON.stringify({ + claim_rewards_and_optionally_unlock: { + pool_type: 'ATOM', + duration: 1, + withdraw_lp_stake: false, + }, + }), + ), + ).rejects.toThrow(/Astro LP Tokens have already been claimed!/); + await expect( + cmInstantiator.executeContract( + tgeMain.contracts.lockdrop, + JSON.stringify({ + claim_rewards_and_optionally_unlock: { + pool_type: 'USDC', + duration: 2, + withdraw_lp_stake: true, + }, + }), + ), + ).rejects.toThrow(/Astro LP Tokens have already been claimed!/); + }); + + it('no previously withdrawn position found in PCL', async () => { + // USDC for 1 was withdrawn before migration, so the position shouldn't be stored in PCL lockdrop + await expect( + cmInstantiator.executeContract( + liqMigContracts.pclLockdrop, + JSON.stringify({ + claim_rewards_and_optionally_unlock: { + pool_type: 'USDC', + duration: 1, + withdraw_lp_stake: false, + }, + }), + ), + ).rejects.toThrow( + /LockupInfoV1 not found: execute wasm contract failed/, + ); + }); + + let stateBefore: LiquidityMigrationState; + it('gather state before withdrawal', async () => { + stateBefore = await gatherLiquidityMigrationState( + neutronChain, + cmInstantiator.wallet.address.toString(), + liqMigContracts, + ); + console.log( + `cmInstantiator state before withdrawal:\n${JSON.stringify( + stateBefore, + )}`, + ); + }); + + const ntrnToPayGas = 200000; + it('withdraw both remaining lockups from PCL', async () => { + await cmInstantiator.executeContract( + liqMigContracts.pclLockdrop, + JSON.stringify({ + claim_rewards_and_optionally_unlock: { + pool_type: 'USDC', + duration: 2, + withdraw_lp_stake: true, + }, + }), + undefined, + { + gas_limit: Long.fromString('5000000'), + amount: [{ denom: NEUTRON_DENOM, amount: ntrnToPayGas.toString() }], + }, + ); + await cmInstantiator.executeContract( + liqMigContracts.pclLockdrop, + JSON.stringify({ + claim_rewards_and_optionally_unlock: { + pool_type: 'ATOM', + duration: 1, + withdraw_lp_stake: true, + }, + }), + undefined, + { + gas_limit: Long.fromString('5000000'), + amount: [{ denom: NEUTRON_DENOM, amount: ntrnToPayGas.toString() }], + }, + ); + }); + + it('no more withdrawal available from PCL', async () => { + // nor with withdrawal + await expect( + cmInstantiator.executeContract( + liqMigContracts.pclLockdrop, + JSON.stringify({ + claim_rewards_and_optionally_unlock: { + pool_type: 'ATOM', + duration: 1, + withdraw_lp_stake: true, }, }), undefined, { - gas_limit: Long.fromString('15000000'), - amount: [{ denom: NEUTRON_DENOM, amount: '750000' }], + gas_limit: Long.fromString('5000000'), + amount: [ + { denom: NEUTRON_DENOM, amount: ntrnToPayGas.toString() }, + ], + }, + ), + ).rejects.toThrow(/Astro LP Tokens have already been claimed!/); + // nor without one + await expect( + cmInstantiator.executeContract( + liqMigContracts.pclLockdrop, + JSON.stringify({ + claim_rewards_and_optionally_unlock: { + pool_type: 'USDC', + duration: 2, + withdraw_lp_stake: false, + }, + }), + undefined, + { + gas_limit: Long.fromString('5000000'), + amount: [ + { denom: NEUTRON_DENOM, amount: ntrnToPayGas.toString() }, + ], }, + ), + ).rejects.toThrow(/Astro LP Tokens have already been claimed!/); + }); + + let stateAfter: LiquidityMigrationState; + it('gather state after withdrawal', async () => { + stateAfter = await gatherLiquidityMigrationState( + neutronChain, + cmInstantiator.wallet.address.toString(), + liqMigContracts, + ); + console.log( + `cmInstantiator state after withdrawal:\n${JSON.stringify( + stateAfter, + )}`, + ); + }); + + describe('funds flow', () => { + const atomLockupKey = 'ATOM1'; + const usdcLockupKey = 'USDC2'; + it('generator rewards', async () => { + // sanity check + expect( + +stateBefore.pclUserLockups.claimable_generator_ntrn_debt, + ).toBeGreaterThan(0); + expect( + +stateBefore.pclUserLockups.claimable_generator_ntrn_debt, + ).toEqual( + +stateBefore.pclUserLockups.mapped_lockup_infos[atomLockupKey] + .claimable_generator_astro_debt + + +stateBefore.pclUserLockups.mapped_lockup_infos[usdcLockupKey] + .claimable_generator_astro_debt, + ); + + // assume fluctuation because rewards amount increases every block + isWithinRange( + stateAfter.balances.user.astro - stateBefore.balances.user.astro, + +stateBefore.pclUserLockups.claimable_generator_ntrn_debt, + 0.5, ); }); - let stateAfter: LiquidityMigrationState; - it('gather state after migration', async () => { - stateAfter = await gatherLiquidityMigrationState( - neutronChain, - tgeWallets['auctionLockdrop'].wallet.address.toString(), - liqMigContracts, + it('lp tokens staked in generator', async () => { + // expect staked LP amount to decrease on amount of withdrawn tokens + expect( + stateBefore.pclAtomStakedInGen - stateAfter.pclAtomStakedInGen, + ).toEqual( + +stateBefore.pclUserLockups.mapped_lockup_infos[atomLockupKey] + .lp_units_locked, ); - console.log( - `auctionLockdrop migration state after:\n${JSON.stringify( - stateAfter, - )}`, + expect( + stateBefore.pclUsdcStakedInGen - stateAfter.pclUsdcStakedInGen, + ).toEqual( + +stateBefore.pclUserLockups.mapped_lockup_infos[usdcLockupKey] + .lp_units_locked, ); }); - describe('check user liquidity migration', () => { - test('user XYK lockup info consistency', async () => { - expect(stateBefore.xykUserLockups).toMatchObject( - stateAfter.xykUserLockups, - ); - }); - - test('no user lockup info in PCL lockdrop', async () => { - expect(stateAfter.pclUserLockups).toMatchObject({ - claimable_generator_ntrn_debt: '0', - mapped_lockup_infos: {}, - lockup_positions_index: 0, - ntrn_transferred: false, - total_ntrn_rewards: '0', - }); - }); - - test('no balance changes', async () => { - expect(stateBefore.balances).toMatchObject(stateAfter.balances); - }); + it('lp tokens received by the user', async () => { + // expect all locked LP transferred to the user + expect(stateAfter.balances.user.atomPclPairLp).toEqual( + stateBefore.balances.user.atomPclPairLp + + +stateBefore.pclUserLockups.mapped_lockup_infos[atomLockupKey] + .lp_units_locked, + ); + expect(stateAfter.balances.user.usdcPclPairLp).toEqual( + stateBefore.balances.user.usdcPclPairLp + + +stateBefore.pclUserLockups.mapped_lockup_infos[usdcLockupKey] + .lp_units_locked, + ); + }); - test('already claimed events emission', async () => { - expect(migrateRes.raw_log).toContain( - '{"key":"ATOM_for_1","value":"already_been_withdrawn"}', - ); - expect(migrateRes.raw_log).toContain( - '{"key":"USDC_for_1","value":"already_been_withdrawn"}', - ); - }); + it('no ntrn received by the user', async () => { + // all ntrn rewards are transferred to the used during migration, so no additional + // rewards are expected to be received by the user for withdrawals + expect(stateAfter.balances.user.ntrn).toEqual( + stateBefore.balances.user.ntrn - ntrnToPayGas * 4, // fees for 4 withdrawal attempts + ); }); }); }); From f706af6dbb73618be30af968522b71d776d7d59f Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Mon, 5 Feb 2024 19:41:16 -0300 Subject: [PATCH 11/87] wip --- .../current_vesting_lp.wasm | Bin 0 -> 357520 bytes src/testcases/run_in_band/tge.auction.test.ts | 501 ++++++++++-------- 2 files changed, 278 insertions(+), 223 deletions(-) create mode 100644 contracts_tge_migration/current_vesting_lp.wasm diff --git a/contracts_tge_migration/current_vesting_lp.wasm b/contracts_tge_migration/current_vesting_lp.wasm new file mode 100644 index 0000000000000000000000000000000000000000..a31050b5146b61ea790cb1bfc0260b8291718b7e GIT binary patch literal 357520 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 %b@k%HgDlf%C$gOr-gLi{IY=9APxv$AOC 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 z z^9rZP|!3fna>^;u$P7GV-fpV%mJ2gkfprAGTvl4Z?S^6S;-+* zahTN{VGZxFmUmgld#vYuHgJ@Ue847-v6S@J0I~XAG3o~G#?xy>9in& zmh_|*y=YBuuAvXt(wFP#M;q>MGr=E2M=>6V~9VAtSo_YL@7^<3M5dGL@JR) zWs<2v3ROv^8ri5$c50A=n&hMwxu{KU>X3)Jbpa2ahNJ9#7C53535gJpJ zCKTf;iqn)5Tun)uQHti2rUhkaNgA!F=n%nS(&fhg9M`y&pE$=aer~}LmbT3EA1c~x AT>t<8 literal 0 HcmV?d00001 diff --git a/src/testcases/run_in_band/tge.auction.test.ts b/src/testcases/run_in_band/tge.auction.test.ts index 22ed666a..3ea7d6c0 100644 --- a/src/testcases/run_in_band/tge.auction.test.ts +++ b/src/testcases/run_in_band/tge.auction.test.ts @@ -2760,7 +2760,10 @@ describe('Neutron / TGE / Auction', () => { owner: cmInstantiator.wallet.address.toString(), token_info_manager: cmInstantiator.wallet.address.toString(), vesting_managers: [], - vesting_token: tgeMain.pairs.atom_ntrn, + vesting_token: { token: { + contract_addr: ntrnAtomPclToken} + }, + xyk_vesting_lp_contract: tgeMain.contracts.vestingAtomLp, }), 'atom_vesting_lp_pcl', ); @@ -2770,7 +2773,10 @@ describe('Neutron / TGE / Auction', () => { owner: cmInstantiator.wallet.address.toString(), token_info_manager: cmInstantiator.wallet.address.toString(), vesting_managers: [], - vesting_token: tgeMain.pairs.usdc_ntrn, + vesting_token: { token: { + contract_addr: ntrnUsdcPclToken} + }, + xyk_vesting_lp_contract: tgeMain.contracts.vestingUsdcLp, }), 'usdc_vesting_lp_pcl', ); @@ -3713,6 +3719,275 @@ describe('Neutron / TGE / Auction', () => { }); }); }); + + describe('Migration of lp vesting', () => { + let claimAtomLP; + let claimUsdcLP; + const votingPowerBeforeLp: Record = {}; + let totalUnclaimedAtHeightBeforeMigration: number; + let unclaimedAtHeightBeforeMigration: number; + let unclaimedHeightBeforeMigration: number; + let newVestingLpCodeID: number; + + it('should save voting power before migration: lp', async () => { + for (const v of [ + 'airdropAuctionVesting', + 'airdropAuctionLockdrop', + 'airdropAuctionLockdropVesting', + 'auctionLockdrop', + 'auctionLockdropVesting', + 'auctionVesting', + ]) { + const vp = await tgeMain.lpVotingPower( + tgeWallets[v].wallet.address.toString(), + ); + votingPowerBeforeLp[v] = +vp.power; + } + }); + + + // it('should validate numbers & save claim amount before migration', async () => { + // unclaimedHeightBeforeMigration = await getHeight(neutronChain.sdk); + // totalUnclaimedAtHeightBeforeMigration = + // await queryTotalUnclaimedAmountAtHeight( + // cmInstantiator.chain, + // tgeMain.contracts.vestingAtomLp, + // unclaimedHeightBeforeMigration, + // ); + // unclaimedAtHeightBeforeMigration = await queryUnclaimmedAmountAtHeight( + // cmInstantiator.chain, + // tgeMain.contracts.vestingAtomLp, + // unclaimedHeightBeforeMigration, + // cmInstantiator.wallet.address.toString(), + // ); + // + // const [ + // vestingInfoAtom, + // vestingInfoUsdc, + // lpAuctionBalanceAtom, + // lpAuctionBalanceUsdc, + // ] = await Promise.all([ + // neutronChain.queryContract( + // tgeMain.contracts.vestingAtomLp, + // { + // vesting_account: { + // address: cmInstantiator.wallet.address.toString(), + // }, + // }, + // ), + // neutronChain.queryContract( + // tgeMain.contracts.vestingUsdcLp, + // { + // vesting_account: { + // address: cmInstantiator.wallet.address.toString(), + // }, + // }, + // ), + // neutronChain.queryContract( + // tgeMain.pairs.atom_ntrn.liquidity, + // { + // balance: { + // address: tgeMain.contracts.auction, + // }, + // }, + // ), + // neutronChain.queryContract( + // tgeMain.pairs.usdc_ntrn.liquidity, + // { + // balance: { + // address: tgeMain.contracts.auction, + // }, + // }, + // ), + // ]); + // + // expect(parseInt(lpAuctionBalanceUsdc.balance)).toBeLessThanOrEqual(7); + // expect(parseInt(lpAuctionBalanceAtom.balance)).toBeLessThanOrEqual(7); + // expect(vestingInfoAtom.address).toEqual( + // cmInstantiator.wallet.address.toString(), + // ); + // expect(vestingInfoUsdc.address).toEqual( + // cmInstantiator.wallet.address.toString(), + // ); + // expect(vestingInfoAtom.info.released_amount).toEqual('0'); + // expect(vestingInfoUsdc.info.released_amount).toEqual('0'); + // + // expect( + // parseInt(vestingInfoAtom.info.schedules[0].end_point.amount), + // ).toBeCloseTo(89394, -1); + // claimAtomLP = parseInt( + // vestingInfoAtom.info.schedules[0].end_point.amount, + // ); + // + // expect( + // parseInt(vestingInfoUsdc.info.schedules[0].end_point.amount), + // ).toBeCloseTo(18087, -1); + // claimUsdcLP = parseInt( + // vestingInfoUsdc.info.schedules[0].end_point.amount, + // ); + // }); + + it('store new vesting lp contract version', async () => { + newVestingLpCodeID = await cmInstantiator.storeWasm( + NeutronContract.VESTING_LP, + ); + }); + + it('save old pairs', async () => { + tgeMain.old_pairs = tgeMain.pairs; + }); + + // it('deploy vesting lp voting vault for CL', async () => { + // const codeId = await cmInstantiator.storeWasm( + // NeutronContract.VESTING_LP_VAULT_CL, + // ); + // expect(codeId).toBeGreaterThan(0); + // + // const res = await cmInstantiator.instantiateContract( + // codeId, + // JSON.stringify({ + // name: 'Vesting LP CL voting vault', + // description: 'Vesting LP voting vault for CL pairs', + // atom_vesting_lp_contract: tgeMain.contracts.vestingAtomLp, + // atom_cl_pool_contract: tgeMain.pairs.atom_ntrn.contract, + // usdc_vesting_lp_contract: tgeMain.contracts.vestingUsdcLp, + // usdc_cl_pool_contract: tgeMain.pairs.usdc_ntrn.contract, + // owner: daoMain.contracts.core.address, + // }), + // 'neutron.voting.vaults.lockdrop_cl', + // ); + // vestingLpVaultForClAddr = res[0]._contract_address; + // }); + + it('should migrate ATOM LP vesing to V2', async () => { + const res = await cmInstantiator.migrateContract( + tgeMain.contracts.vestingAtomLp, + newVestingLpCodeID, + { + max_slippage: '0.5', + ntrn_denom: NEUTRON_DENOM, + paired_denom: IBC_ATOM_DENOM, + xyk_pair: tgeMain.old_pairs.atom_ntrn.contract.toString(), + cl_pair: ntrnAtomPclPool, + new_lp_token: ntrnAtomPclToken, + pcl_vesting: atomVestingLpAddr, + }, + ); + expect(res.code).toEqual(0); + }); + + it('should migrate USDC LP vesing to V2', async () => { + const res = await cmInstantiator.migrateContract( + tgeMain.contracts.vestingUsdcLp, + newVestingLpCodeID, + { + max_slippage: '0.5', + ntrn_denom: NEUTRON_DENOM, + paired_denom: IBC_USDC_DENOM, + xyk_pair: tgeMain.old_pairs.usdc_ntrn.contract, + cl_pair: ntrnUsdcPclPool, + new_lp_token: ntrnUsdcPclToken, + pcl_vesting: usdcVestingLpAddr, + }, + ); + expect(res.code).toEqual(0); + }); + + it('should migrate atom', async () => { + for (const v of [ + 'airdropAuctionVesting', + 'airdropAuctionLockdropVesting', + 'auctionLockdropVesting', + 'auctionVesting', + ]) { + const resAtom = await cmInstantiator.executeContract( + tgeMain.contracts.vestingAtomLp, + JSON.stringify({ + migrate_liquidity_to_pcl_pool: { + user: tgeWallets[v].wallet.address.toString(), + }, + }), + ); + expect(resAtom.code).toEqual(0); + } + }); + + it('should migrate usdc', async () => { + // for (const v of [ + // 'airdropAuctionLockdropVesting', + // 'auctionLockdropVesting', + // 'airdropAuctionVesting', + // 'auctionVesting', + // ]) { + // const res = await cmInstantiator.executeContract( + // tgeMain.contracts.vestingUsdcLp, + // JSON.stringify({ + // migrate_liquidity_to_pcl_pool: { + // user: tgeWallets[v].wallet.address.toString(), + // }, + // }), + // ); + // expect(res.code).toEqual(0); + // } + }); + it('should claim', async () => { + const vs = await neutronChain.queryContract( + usdcVestingLpAddr, + { + vesting_state: { + }, + }, + ); + console.log(tgeWallets['auctionVesting'].wallet.address.toString()); + console.log(vs); + // const vi = await neutronChain.queryContract( + // usdcVestingLpAddr, + // { + // vesting_accounts: { + // }, + // }, + // ) + // console.log(vi) + + const resAtom = await tgeWallets['auctionVesting'].executeContract( + atomVestingLpAddr, + JSON.stringify({ + claim: {}, + }), + ); + expect(resAtom.code).toEqual(0); + // const resUsdc = await tgeWallets['auctionVesting'].executeContract( + // usdcVestingLpAddr, + // JSON.stringify({ + // claim: {}, + // }), + // ); + // expect(resUsdc.code).toEqual(0); + + const [lpBalanceAtom, lpBalanceUsdc] = await Promise.all([ + neutronChain.queryContract( + tgeMain.pairs.atom_ntrn.liquidity, + { + balance: { + address: cmInstantiator.wallet.address.toString(), + }, + }, + ), + neutronChain.queryContract( + tgeMain.pairs.usdc_ntrn.liquidity, + { + balance: { + address: cmInstantiator.wallet.address.toString(), + }, + }, + ), + ]); + + // actual diff is smth about 0.2% (converting old lp to new) + expect(parseInt(lpBalanceAtom.balance)).toBeCloseTo(claimAtomLP, -4); + expect(parseInt(lpBalanceUsdc.balance)).toBeCloseTo(claimUsdcLP, -4); + }); + }); }); }); }); @@ -3968,227 +4243,7 @@ type ExpandedLockdropLockUpInfoResponse = { expected_ntrn_share: number; // expected amount of ntrn received on liquidity withdrawal expected_paired_asset_share: number; // expected amount of paired asset received on liquidity withdrawal }; - console.log( - `user info in XYK after migration:\n${JSON.stringify( - userInfoInXykLockdropAfter, - )}`, - ); - console.log( - `user info in PCL after migration:\n${JSON.stringify( - userInfoInPclLockdropAfter, - )}`, - ); - }); - }); - describe('Migration of lp vesting', () => { - // let claimAtomLP; - // let claimUsdcLP; - // const votingPowerBeforeLp: Record = {}; - // let totalUnclaimedAtHeightBeforeMigration: number; - // let unclaimedAtHeightBeforeMigration: number; - // let unclaimedHeightBeforeMigration: number; - let newVestingLpCodeID: number; - - // it('should save voting power before migration: lp', async () => { - // for (const v of [ - // 'airdropAuctionVesting', - // 'airdropAuctionLockdrop', - // 'airdropAuctionLockdropVesting', - // 'auctionLockdrop', - // 'auctionLockdropVesting', - // 'auctionVesting', - // ]) { - // const vp = await tgeMain.lpVotingPower( - // tgeWallets[v].wallet.address.toString(), - // ); - // votingPowerBeforeLp[v] = +vp.power; - // } - // }); - // - // - // it('should validate numbers & save claim amount before migration', async () => { - // unclaimedHeightBeforeMigration = await getHeight(neutronChain.sdk); - // totalUnclaimedAtHeightBeforeMigration = - // await queryTotalUnclaimedAmountAtHeight( - // cmInstantiator.chain, - // tge.contracts.vestingAtomLp, - // unclaimedHeightBeforeMigration, - // ); - // unclaimedAtHeightBeforeMigration = await queryUnclaimmedAmountAtHeight( - // cmInstantiator.chain, - // tge.contracts.vestingAtomLp, - // unclaimedHeightBeforeMigration, - // cmInstantiator.wallet.address.toString(), - // ); - // - // const [ - // vestingInfoAtom, - // vestingInfoUsdc, - // lpAuctionBalanceAtom, - // lpAuctionBalanceUsdc, - // ] = await Promise.all([ - // neutronChain.queryContract( - // tge.contracts.vestingAtomLp, - // { - // vesting_account: { - // address: cmInstantiator.wallet.address.toString(), - // }, - // }, - // ), - // neutronChain.queryContract( - // tge.contracts.vestingUsdcLp, - // { - // vesting_account: { - // address: cmInstantiator.wallet.address.toString(), - // }, - // }, - // ), - // neutronChain.queryContract( - // tge.pairs.atom_ntrn.liquidity, - // { - // balance: { - // address: tge.contracts.auction, - // }, - // }, - // ), - // neutronChain.queryContract( - // tge.pairs.usdc_ntrn.liquidity, - // { - // balance: { - // address: tge.contracts.auction, - // }, - // }, - // ), - // ]); - // - // expect(parseInt(lpAuctionBalanceUsdc.balance)).toBeLessThanOrEqual(7); - // expect(parseInt(lpAuctionBalanceAtom.balance)).toBeLessThanOrEqual(7); - // expect(vestingInfoAtom.address).toEqual( - // cmInstantiator.wallet.address.toString(), - // ); - // expect(vestingInfoUsdc.address).toEqual( - // cmInstantiator.wallet.address.toString(), - // ); - // expect(vestingInfoAtom.info.released_amount).toEqual('0'); - // expect(vestingInfoUsdc.info.released_amount).toEqual('0'); - // - // expect( - // parseInt(vestingInfoAtom.info.schedules[0].end_point.amount), - // ).toBeCloseTo(89394, -1); - // claimAtomLP = parseInt( - // vestingInfoAtom.info.schedules[0].end_point.amount, - // ); - // - // expect( - // parseInt(vestingInfoUsdc.info.schedules[0].end_point.amount), - // ).toBeCloseTo(18087, -1); - // claimUsdcLP = parseInt( - // vestingInfoUsdc.info.schedules[0].end_point.amount, - // ); - // }); - - it('store new vesting lp contract version', async () => { - newVestingLpCodeID = await cmInstantiator.storeWasm( - NeutronContract.VESTING_LP, - ); - }); - - // it('deploy vesting lp voting vault for CL', async () => { - // const codeId = await cmInstantiator.storeWasm( - // types.NeutronContract.VESTING_LP_VAULT_CL, - // ); - // expect(codeId).toBeGreaterThan(0); - // - // const res = await cmInstantiator.instantiateContract( - // codeId, - // JSON.stringify({ - // name: 'Vesting LP CL voting vault', - // description: 'Vesting LP voting vault for CL pairs', - // atom_vesting_lp_contract: tgeMain.contracts.vestingAtomLp, - // atom_cl_pool_contract: tgeMain.pairs.atom_ntrn.contract, - // usdc_vesting_lp_contract: tgeMain.contracts.vestingUsdcLp, - // usdc_cl_pool_contract: tgeMain.pairs.usdc_ntrn.contract, - // owner: daoMain.contracts.core.address, - // }), - // 'neutron.voting.vaults.lockdrop_cl', - // ); - // vestingLpVaultForClAddr = res[0]._contract_address; - // }); - - it('should migrate ATOM LP vesing to V2', async () => { - const res = await cmInstantiator.migrateContract( - tgeMain.contracts.vestingAtomLp, - newVestingLpCodeID, - { - max_slippage: '0.1', - ntrn_denom: NEUTRON_DENOM, - paired_denom: IBC_ATOM_DENOM, - xyk_pair: tgeMain.old_pairs.atom_ntrn.contract.toString(), - cl_pair: tgeMain.pairs.atom_ntrn.contract.toString(), - new_lp_token: tgeMain.pairs.atom_ntrn.liquidity.toString(), - pcl_vesting: atomVestingLpAddr, - }, - ); - expect(res.code).toEqual(0); - }); - - it('should migrate USDC LP vesing to V2', async () => { - const res = await cmInstantiator.migrateContract( - tgeMain.contracts.vestingUsdcLp, - newVestingLpCodeID, - { - max_slippage: '0.1', - ntrn_denom: NEUTRON_DENOM, - paired_denom: IBC_USDC_DENOM, - xyk_pair: tgeMain.old_pairs.usdc_ntrn.contract, - cl_pair: tgeMain.pairs.usdc_ntrn.contract, - new_lp_token: tgeMain.pairs.usdc_ntrn.liquidity, - pcl_vesting: usdcVestingLpAddr, - }, - ); - expect(res.code).toEqual(0); - }); - - it('should migrate atom', async () => { - for (const v of [ - 'airdropAuctionVesting', - 'airdropAuctionLockdropVesting', - 'auctionLockdropVesting', - 'auctionVesting', - ]) { - const resAtom = await cmInstantiator.executeContract( - tgeMain.contracts.vestingAtomLp, - JSON.stringify({ - migrate_liquidity_to_pcl_pool: { - user: tgeWallets[v].wallet.address.toString(), - }, - }), - ); - expect(resAtom.code).toEqual(0); - } - }); - it('should migrate usdc', async () => { - for (const v of [ - 'airdropAuctionVesting', - 'airdropAuctionLockdropVesting', - 'auctionLockdropVesting', - 'auctionVesting', - ]) { - const resAtom = await cmInstantiator.executeContract( - tgeMain.contracts.vestingUsdcLp, - JSON.stringify({ - migrate_liquidity_to_pcl_pool: { - user: tgeWallets[v].wallet.address.toString(), - }, - }), - ); - expect(resAtom.code).toEqual(0); - } - }); - }); - }); -}); const deregisterPair = async ( instantiator: WalletWrapper, @@ -4225,7 +4280,7 @@ const createPclPair = async ( min_price_scale_delta: '0.000146', price_scale: initPriceScale.toString(), ma_half_time: 600, - track_asset_balances: false, + track_asset_balances: true, }; const createMsg = { From 3537505a53e90b3b859d861660a64414126c6a67 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Tue, 6 Feb 2024 07:43:35 -0300 Subject: [PATCH 12/87] wip --- src/testcases/run_in_band/tge.auction.test.ts | 245 +++++++++--------- 1 file changed, 125 insertions(+), 120 deletions(-) diff --git a/src/testcases/run_in_band/tge.auction.test.ts b/src/testcases/run_in_band/tge.auction.test.ts index 3ea7d6c0..a679c990 100644 --- a/src/testcases/run_in_band/tge.auction.test.ts +++ b/src/testcases/run_in_band/tge.auction.test.ts @@ -4,6 +4,8 @@ import { WalletWrapper, CosmosWrapper, NEUTRON_DENOM, + IBC_USDC_DENOM, + IBC_ATOM_DENOM, } from '@neutron-org/neutronjsplus/dist/cosmos'; import { TestStateLocalCosmosTestNet } from '@neutron-org/neutronjsplus'; import { BroadcastTx200ResponseTxResponse } from '@cosmos-client/core/cjs/openapi/api'; @@ -19,6 +21,8 @@ import { queryCreditsVaultConfig, queryLockdropVaultConfig, queryVestingLpVaultConfig, + queryTotalUnclaimedAmountAtHeight, + queryUnclaimmedAmountAtHeight, Tge, VestingAccountResponse, XykLockdropConfig, @@ -42,7 +46,7 @@ import { nativeToken, PoolStatus, } from '@neutron-org/neutronjsplus/dist/types'; -import { IBC_ATOM_DENOM, IBC_USDC_DENOM } from '@neutron-org/neutronjsplus'; + import { getHeight } from '@neutron-org/neutronjsplus/dist/env'; const config = require('../../config.json'); @@ -2760,8 +2764,10 @@ describe('Neutron / TGE / Auction', () => { owner: cmInstantiator.wallet.address.toString(), token_info_manager: cmInstantiator.wallet.address.toString(), vesting_managers: [], - vesting_token: { token: { - contract_addr: ntrnAtomPclToken} + vesting_token: { + token: { + contract_addr: ntrnAtomPclToken, + }, }, xyk_vesting_lp_contract: tgeMain.contracts.vestingAtomLp, }), @@ -2773,8 +2779,10 @@ describe('Neutron / TGE / Auction', () => { owner: cmInstantiator.wallet.address.toString(), token_info_manager: cmInstantiator.wallet.address.toString(), vesting_managers: [], - vesting_token: { token: { - contract_addr: ntrnUsdcPclToken} + vesting_token: { + token: { + contract_addr: ntrnUsdcPclToken, + }, }, xyk_vesting_lp_contract: tgeMain.contracts.vestingUsdcLp, }), @@ -2851,7 +2859,7 @@ describe('Neutron / TGE / Auction', () => { user_address_raw: tgeWallets[ 'airdropAuctionLockdropVestingMigration' - ].wallet.address.toString(), + ].wallet.address.toString(), }, }), undefined, @@ -3223,7 +3231,7 @@ describe('Neutron / TGE / Auction', () => { it('gather state before migration', async () => { stateBefore = await gatherLiquidityMigrationState( neutronChain, - cmInstantiator.wallet.address.toString(), + cmInstantiator.wallet.address.toString(), liqMigContracts, ); console.log( @@ -3728,6 +3736,7 @@ describe('Neutron / TGE / Auction', () => { let unclaimedAtHeightBeforeMigration: number; let unclaimedHeightBeforeMigration: number; let newVestingLpCodeID: number; + let vestingLpVaultForClAddr: string; it('should save voting power before migration: lp', async () => { for (const v of [ @@ -3738,94 +3747,94 @@ describe('Neutron / TGE / Auction', () => { 'auctionLockdropVesting', 'auctionVesting', ]) { - const vp = await tgeMain.lpVotingPower( - tgeWallets[v].wallet.address.toString(), - ); - votingPowerBeforeLp[v] = +vp.power; + const member = new DaoMember(tgeWallets[v], daoMain); + votingPowerBeforeLp[v] = + (await member.queryVotingPower()).power | 0; + votingPowerBeforeLp[v] = +votingPowerBeforeLp.power; } }); + it('should validate numbers & save claim amount before migration', async () => { + unclaimedHeightBeforeMigration = await getHeight(neutronChain.sdk); + totalUnclaimedAtHeightBeforeMigration = + +(await queryTotalUnclaimedAmountAtHeight( + cmInstantiator.chain, + tgeMain.contracts.vestingAtomLp, + unclaimedHeightBeforeMigration, + )); + unclaimedAtHeightBeforeMigration = + +(await queryUnclaimmedAmountAtHeight( + cmInstantiator.chain, + tgeMain.contracts.vestingAtomLp, + unclaimedHeightBeforeMigration, + cmInstantiator.wallet.address.toString(), + )); + + const [ + vestingInfoAtom, + vestingInfoUsdc, + lpAuctionBalanceAtom, + lpAuctionBalanceUsdc, + ] = await Promise.all([ + neutronChain.queryContract( + tgeMain.contracts.vestingAtomLp, + { + vesting_account: { + address: cmInstantiator.wallet.address.toString(), + }, + }, + ), + neutronChain.queryContract( + tgeMain.contracts.vestingUsdcLp, + { + vesting_account: { + address: cmInstantiator.wallet.address.toString(), + }, + }, + ), + neutronChain.queryContract( + tgeMain.pairs.atom_ntrn.liquidity, + { + balance: { + address: tgeMain.contracts.auction, + }, + }, + ), + neutronChain.queryContract( + tgeMain.pairs.usdc_ntrn.liquidity, + { + balance: { + address: tgeMain.contracts.auction, + }, + }, + ), + ]); - // it('should validate numbers & save claim amount before migration', async () => { - // unclaimedHeightBeforeMigration = await getHeight(neutronChain.sdk); - // totalUnclaimedAtHeightBeforeMigration = - // await queryTotalUnclaimedAmountAtHeight( - // cmInstantiator.chain, - // tgeMain.contracts.vestingAtomLp, - // unclaimedHeightBeforeMigration, - // ); - // unclaimedAtHeightBeforeMigration = await queryUnclaimmedAmountAtHeight( - // cmInstantiator.chain, - // tgeMain.contracts.vestingAtomLp, - // unclaimedHeightBeforeMigration, - // cmInstantiator.wallet.address.toString(), - // ); - // - // const [ - // vestingInfoAtom, - // vestingInfoUsdc, - // lpAuctionBalanceAtom, - // lpAuctionBalanceUsdc, - // ] = await Promise.all([ - // neutronChain.queryContract( - // tgeMain.contracts.vestingAtomLp, - // { - // vesting_account: { - // address: cmInstantiator.wallet.address.toString(), - // }, - // }, - // ), - // neutronChain.queryContract( - // tgeMain.contracts.vestingUsdcLp, - // { - // vesting_account: { - // address: cmInstantiator.wallet.address.toString(), - // }, - // }, - // ), - // neutronChain.queryContract( - // tgeMain.pairs.atom_ntrn.liquidity, - // { - // balance: { - // address: tgeMain.contracts.auction, - // }, - // }, - // ), - // neutronChain.queryContract( - // tgeMain.pairs.usdc_ntrn.liquidity, - // { - // balance: { - // address: tgeMain.contracts.auction, - // }, - // }, - // ), - // ]); - // - // expect(parseInt(lpAuctionBalanceUsdc.balance)).toBeLessThanOrEqual(7); - // expect(parseInt(lpAuctionBalanceAtom.balance)).toBeLessThanOrEqual(7); - // expect(vestingInfoAtom.address).toEqual( - // cmInstantiator.wallet.address.toString(), - // ); - // expect(vestingInfoUsdc.address).toEqual( - // cmInstantiator.wallet.address.toString(), - // ); - // expect(vestingInfoAtom.info.released_amount).toEqual('0'); - // expect(vestingInfoUsdc.info.released_amount).toEqual('0'); - // - // expect( - // parseInt(vestingInfoAtom.info.schedules[0].end_point.amount), - // ).toBeCloseTo(89394, -1); - // claimAtomLP = parseInt( - // vestingInfoAtom.info.schedules[0].end_point.amount, - // ); - // - // expect( - // parseInt(vestingInfoUsdc.info.schedules[0].end_point.amount), - // ).toBeCloseTo(18087, -1); - // claimUsdcLP = parseInt( - // vestingInfoUsdc.info.schedules[0].end_point.amount, - // ); - // }); + expect(parseInt(lpAuctionBalanceUsdc.balance)).toBeLessThanOrEqual(7); + expect(parseInt(lpAuctionBalanceAtom.balance)).toBeLessThanOrEqual(7); + expect(vestingInfoAtom.address).toEqual( + cmInstantiator.wallet.address.toString(), + ); + expect(vestingInfoUsdc.address).toEqual( + cmInstantiator.wallet.address.toString(), + ); + expect(vestingInfoAtom.info.released_amount).toEqual('0'); + expect(vestingInfoUsdc.info.released_amount).toEqual('0'); + + expect( + parseInt(vestingInfoAtom.info.schedules[0].end_point.amount), + ).toBeCloseTo(75706, -1); + claimAtomLP = parseInt( + vestingInfoAtom.info.schedules[0].end_point.amount, + ); + + expect( + parseInt(vestingInfoUsdc.info.schedules[0].end_point.amount), + ).toBeCloseTo(14197, -1); + claimUsdcLP = parseInt( + vestingInfoUsdc.info.schedules[0].end_point.amount, + ); + }); it('store new vesting lp contract version', async () => { newVestingLpCodeID = await cmInstantiator.storeWasm( @@ -3837,27 +3846,27 @@ describe('Neutron / TGE / Auction', () => { tgeMain.old_pairs = tgeMain.pairs; }); - // it('deploy vesting lp voting vault for CL', async () => { - // const codeId = await cmInstantiator.storeWasm( - // NeutronContract.VESTING_LP_VAULT_CL, - // ); - // expect(codeId).toBeGreaterThan(0); - // - // const res = await cmInstantiator.instantiateContract( - // codeId, - // JSON.stringify({ - // name: 'Vesting LP CL voting vault', - // description: 'Vesting LP voting vault for CL pairs', - // atom_vesting_lp_contract: tgeMain.contracts.vestingAtomLp, - // atom_cl_pool_contract: tgeMain.pairs.atom_ntrn.contract, - // usdc_vesting_lp_contract: tgeMain.contracts.vestingUsdcLp, - // usdc_cl_pool_contract: tgeMain.pairs.usdc_ntrn.contract, - // owner: daoMain.contracts.core.address, - // }), - // 'neutron.voting.vaults.lockdrop_cl', - // ); - // vestingLpVaultForClAddr = res[0]._contract_address; - // }); + it('deploy vesting lp voting vault for CL', async () => { + const codeId = await cmInstantiator.storeWasm( + NeutronContract.VESTING_LP_VAULT_CL, + ); + expect(codeId).toBeGreaterThan(0); + + const res = await cmInstantiator.instantiateContract( + codeId, + JSON.stringify({ + name: 'Vesting LP CL voting vault', + description: 'Vesting LP voting vault for CL pairs', + atom_vesting_lp_contract: tgeMain.contracts.vestingAtomLp, + atom_cl_pool_contract: tgeMain.pairs.atom_ntrn.contract, + usdc_vesting_lp_contract: tgeMain.contracts.vestingUsdcLp, + usdc_cl_pool_contract: tgeMain.pairs.usdc_ntrn.contract, + owner: daoMain.contracts.core.address, + }), + 'neutron.voting.vaults.lockdrop_cl', + ); + vestingLpVaultForClAddr = res[0]._contract_address; + }); it('should migrate ATOM LP vesing to V2', async () => { const res = await cmInstantiator.migrateContract( @@ -3930,14 +3939,11 @@ describe('Neutron / TGE / Auction', () => { // expect(res.code).toEqual(0); // } }); + it('should claim', async () => { - const vs = await neutronChain.queryContract( - usdcVestingLpAddr, - { - vesting_state: { - }, - }, - ); + const vs = await neutronChain.queryContract(usdcVestingLpAddr, { + vesting_state: {}, + }); console.log(tgeWallets['auctionVesting'].wallet.address.toString()); console.log(vs); // const vi = await neutronChain.queryContract( @@ -4244,7 +4250,6 @@ type ExpandedLockdropLockUpInfoResponse = { expected_paired_asset_share: number; // expected amount of paired asset received on liquidity withdrawal }; - const deregisterPair = async ( instantiator: WalletWrapper, factoryAddr: string, From 5820f167227c20b2c85a9557f77cee15ee2f39e5 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Tue, 6 Feb 2024 15:55:39 -0300 Subject: [PATCH 13/87] fix errors, add scenarios, fix linter errs --- src/testcases/run_in_band/tge.auction.test.ts | 229 +++++++++++------- 1 file changed, 145 insertions(+), 84 deletions(-) diff --git a/src/testcases/run_in_band/tge.auction.test.ts b/src/testcases/run_in_band/tge.auction.test.ts index eaa6f9ad..7f64c8b6 100644 --- a/src/testcases/run_in_band/tge.auction.test.ts +++ b/src/testcases/run_in_band/tge.auction.test.ts @@ -21,8 +21,6 @@ import { queryCreditsVaultConfig, queryLockdropVaultConfig, queryVestingLpVaultConfig, - queryTotalUnclaimedAmountAtHeight, - queryUnclaimmedAmountAtHeight, Tge, VestingAccountResponse, XykLockdropConfig, @@ -30,7 +28,6 @@ import { queryLockdropPool, LockdropPool, LockdropUserInfoResponse, - queryLockdropUserInfo, } from '@neutron-org/neutronjsplus/dist/tge'; import { Dao, @@ -170,6 +167,13 @@ describe('Neutron / TGE / Auction', () => { let tgeEndHeight = 0; let daoMember1: DaoMember; let daoMain: Dao; + let ntrnAtomPclPool: string; + let ntrnAtomPclToken: string; + let ntrnUsdcPclPool: string; + let ntrnUsdcPclToken: string; + let atomVestingLpAddr: string; + let usdcVestingLpAddr: string; + let lockdropPclAddr: string; beforeAll(async () => { testState = new TestStateLocalCosmosTestNet(config); @@ -2577,10 +2581,6 @@ describe('Neutron / TGE / Auction', () => { let liqMigContracts: LiquidityMigrationContracts; describe('migrate TGE liquidity to PCL', () => { - let ntrnAtomPclPool: string; - let ntrnAtomPclToken: string; - let ntrnUsdcPclPool: string; - let ntrnUsdcPclToken: string; describe('replace XYK with PCL pools', () => { test('deregister XYK pairs', async () => { await deregisterPair(cmInstantiator, tgeMain.contracts.astroFactory, [ @@ -2610,7 +2610,7 @@ describe('Neutron / TGE / Auction', () => { neutronChain, cmInstantiator, tgeMain.contracts.astroFactory, - [nativeTokenInfo(NEUTRON_DENOM), nativeTokenInfo(IBC_ATOM_DENOM)], + [nativeTokenInfo(IBC_ATOM_DENOM), nativeTokenInfo(NEUTRON_DENOM)], priceScale, ); ntrnAtomPclPool = ntrnAtomClPairInfo.contract_addr; @@ -2659,7 +2659,7 @@ describe('Neutron / TGE / Auction', () => { neutronChain, cmInstantiator, tgeMain.contracts.astroFactory, - [nativeTokenInfo(NEUTRON_DENOM), nativeTokenInfo(IBC_USDC_DENOM)], + [nativeTokenInfo(IBC_USDC_DENOM), nativeTokenInfo(NEUTRON_DENOM)], priceScale, ); ntrnUsdcPclPool = ntrnUsdcClPairInfo.contract_addr; @@ -2706,9 +2706,6 @@ describe('Neutron / TGE / Auction', () => { }); }); - let lockdropPclAddr: string; - let atomVestingLpAddr: string; - let usdcVestingLpAddr: string; describe('instantiate PCL contracts', () => { let xykLockdropConfig: XykLockdropConfig; let xykLockdropUsdcPool: LockdropPool; @@ -3973,11 +3970,9 @@ describe('Neutron / TGE / Auction', () => { let claimAtomLP; let claimUsdcLP; const votingPowerBeforeLp: Record = {}; - let totalUnclaimedAtHeightBeforeMigration: number; - let unclaimedAtHeightBeforeMigration: number; - let unclaimedHeightBeforeMigration: number; let newVestingLpCodeID: number; let vestingLpVaultForClAddr: string; + let lockdropVaultForClAddr: string; it('should save voting power before migration: lp', async () => { for (const v of [ @@ -3996,21 +3991,6 @@ describe('Neutron / TGE / Auction', () => { }); it('should validate numbers & save claim amount before migration', async () => { - unclaimedHeightBeforeMigration = await getHeight(neutronChain.sdk); - totalUnclaimedAtHeightBeforeMigration = - +(await queryTotalUnclaimedAmountAtHeight( - cmInstantiator.chain, - tgeMain.contracts.vestingAtomLp, - unclaimedHeightBeforeMigration, - )); - unclaimedAtHeightBeforeMigration = - +(await queryUnclaimmedAmountAtHeight( - cmInstantiator.chain, - tgeMain.contracts.vestingAtomLp, - unclaimedHeightBeforeMigration, - cmInstantiator.wallet.address.toString(), - )); - const [ vestingInfoAtom, vestingInfoUsdc, @@ -4021,7 +4001,8 @@ describe('Neutron / TGE / Auction', () => { tgeMain.contracts.vestingAtomLp, { vesting_account: { - address: cmInstantiator.wallet.address.toString(), + address: + tgeWallets['auctionVesting'].wallet.address.toString(), }, }, ), @@ -4029,7 +4010,8 @@ describe('Neutron / TGE / Auction', () => { tgeMain.contracts.vestingUsdcLp, { vesting_account: { - address: cmInstantiator.wallet.address.toString(), + address: + tgeWallets['auctionVesting'].wallet.address.toString(), }, }, ), @@ -4054,24 +4036,24 @@ describe('Neutron / TGE / Auction', () => { expect(parseInt(lpAuctionBalanceUsdc.balance)).toBeLessThanOrEqual(7); expect(parseInt(lpAuctionBalanceAtom.balance)).toBeLessThanOrEqual(7); expect(vestingInfoAtom.address).toEqual( - cmInstantiator.wallet.address.toString(), + tgeWallets['auctionVesting'].wallet.address.toString(), ); expect(vestingInfoUsdc.address).toEqual( - cmInstantiator.wallet.address.toString(), + tgeWallets['auctionVesting'].wallet.address.toString(), ); expect(vestingInfoAtom.info.released_amount).toEqual('0'); expect(vestingInfoUsdc.info.released_amount).toEqual('0'); expect( parseInt(vestingInfoAtom.info.schedules[0].end_point.amount), - ).toBeCloseTo(75706, -1); + ).toBeCloseTo(3916, -1); claimAtomLP = parseInt( vestingInfoAtom.info.schedules[0].end_point.amount, ); expect( parseInt(vestingInfoUsdc.info.schedules[0].end_point.amount), - ).toBeCloseTo(14197, -1); + ).toBeCloseTo(11271, -1); claimUsdcLP = parseInt( vestingInfoUsdc.info.schedules[0].end_point.amount, ); @@ -4083,10 +4065,6 @@ describe('Neutron / TGE / Auction', () => { ); }); - it('save old pairs', async () => { - tgeMain.old_pairs = tgeMain.pairs; - }); - it('deploy vesting lp voting vault for CL', async () => { const codeId = await cmInstantiator.storeWasm( NeutronContract.VESTING_LP_VAULT_CL, @@ -4098,17 +4076,93 @@ describe('Neutron / TGE / Auction', () => { JSON.stringify({ name: 'Vesting LP CL voting vault', description: 'Vesting LP voting vault for CL pairs', - atom_vesting_lp_contract: tgeMain.contracts.vestingAtomLp, - atom_cl_pool_contract: tgeMain.pairs.atom_ntrn.contract, - usdc_vesting_lp_contract: tgeMain.contracts.vestingUsdcLp, - usdc_cl_pool_contract: tgeMain.pairs.usdc_ntrn.contract, + atom_vesting_lp_contract: atomVestingLpAddr, + atom_cl_pool_contract: ntrnAtomPclPool, + usdc_vesting_lp_contract: usdcVestingLpAddr, + usdc_cl_pool_contract: ntrnUsdcPclPool, owner: daoMain.contracts.core.address, }), - 'neutron.voting.vaults.lockdrop_cl', + 'neutron.voting.vaults.vesting_cl', ); vestingLpVaultForClAddr = res[0]._contract_address; }); + it('deploy lockdrop voting vault for CL', async () => { + const codeId = await cmInstantiator.storeWasm( + NeutronContract.LOCKDROP_VAULT_CL, + ); + expect(codeId).toBeGreaterThan(0); + + const res = await cmInstantiator.instantiateContract( + codeId, + JSON.stringify({ + name: 'Lockdrop CL voting vault', + description: 'Lockdrop vault for CL pairs', + lockdrop_contract: lockdropPclAddr, + usdc_cl_pool_contract: ntrnUsdcPclPool, + atom_cl_pool_contract: ntrnAtomPclPool, + owner: daoMain.contracts.core.address, + }), + 'neutron.voting.vaults.lockdrop_cl', + ); + lockdropVaultForClAddr = res[0]._contract_address; + }); + + it('add CL vaults to the registry', async () => { + const propID = await daoMember1.submitSingleChoiceProposal( + 'Proposal #4', + 'add CL_VESTING_LP_VAULT & CL_LOCKDROP_VAUULT', + [ + { + wasm: { + execute: { + contract_addr: daoMain.contracts.voting.address, + msg: Buffer.from( + `{"add_voting_vault": {"new_voting_vault_contract":"${vestingLpVaultForClAddr}"}}`, + ).toString('base64'), + funds: [], + }, + }, + }, + { + wasm: { + execute: { + contract_addr: daoMain.contracts.voting.address, + msg: Buffer.from( + `{"add_voting_vault": {"new_voting_vault_contract":"${lockdropVaultForClAddr}"}}`, + ).toString('base64'), + funds: [], + }, + }, + }, + ], + '1000', + ); + await daoMember1.voteYes(propID); + const prop = await daoMain.queryProposal(propID); + // lockdrop and vesting participants should vote + expect(prop.proposal).toMatchObject({ status: 'open' }); + const vp: Record = {}; + for (const v of [ + 'airdropAuctionVesting', + 'airdropAuctionLockdrop', + 'airdropAuctionLockdropVesting', + 'auctionLockdrop', + 'auctionLockdropVesting', + 'auctionVesting', + 'airdropAuctionLockdropVestingMigration', + ]) { + const member = new DaoMember(tgeWallets[v], daoMain); + vp[v] = (await member.queryVotingPower()).power | 0; + if ( + (await daoMain.queryProposal(propID)).proposal.status == 'open' + ) { + await member.voteYes(propID); + } + } + await daoMember1.executeProposal(propID); + }); + it('should migrate ATOM LP vesing to V2', async () => { const res = await cmInstantiator.migrateContract( tgeMain.contracts.vestingAtomLp, @@ -4117,7 +4171,7 @@ describe('Neutron / TGE / Auction', () => { max_slippage: '0.5', ntrn_denom: NEUTRON_DENOM, paired_denom: IBC_ATOM_DENOM, - xyk_pair: tgeMain.old_pairs.atom_ntrn.contract.toString(), + xyk_pair: tgeMain.pairs.atom_ntrn.contract.toString(), cl_pair: ntrnAtomPclPool, new_lp_token: ntrnAtomPclToken, pcl_vesting: atomVestingLpAddr, @@ -4134,7 +4188,7 @@ describe('Neutron / TGE / Auction', () => { max_slippage: '0.5', ntrn_denom: NEUTRON_DENOM, paired_denom: IBC_USDC_DENOM, - xyk_pair: tgeMain.old_pairs.usdc_ntrn.contract, + xyk_pair: tgeMain.pairs.usdc_ntrn.contract, cl_pair: ntrnUsdcPclPool, new_lp_token: ntrnUsdcPclToken, pcl_vesting: usdcVestingLpAddr, @@ -4163,38 +4217,32 @@ describe('Neutron / TGE / Auction', () => { }); it('should migrate usdc', async () => { - // for (const v of [ - // 'airdropAuctionLockdropVesting', - // 'auctionLockdropVesting', - // 'airdropAuctionVesting', - // 'auctionVesting', - // ]) { - // const res = await cmInstantiator.executeContract( - // tgeMain.contracts.vestingUsdcLp, - // JSON.stringify({ - // migrate_liquidity_to_pcl_pool: { - // user: tgeWallets[v].wallet.address.toString(), - // }, - // }), - // ); - // expect(res.code).toEqual(0); - // } + for (const v of [ + 'airdropAuctionLockdropVesting', + 'auctionLockdropVesting', + 'airdropAuctionVesting', + 'auctionVesting', + ]) { + const res = await cmInstantiator.executeContract( + tgeMain.contracts.vestingUsdcLp, + JSON.stringify({ + migrate_liquidity_to_pcl_pool: { + user: tgeWallets[v].wallet.address.toString(), + }, + }), + ); + expect(res.code).toEqual(0); + } }); it('should claim', async () => { - const vs = await neutronChain.queryContract(usdcVestingLpAddr, { + const vs = await neutronChain.queryContract<{ + total_granted: string; + total_released: string; + }>(usdcVestingLpAddr, { vesting_state: {}, }); - console.log(tgeWallets['auctionVesting'].wallet.address.toString()); - console.log(vs); - // const vi = await neutronChain.queryContract( - // usdcVestingLpAddr, - // { - // vesting_accounts: { - // }, - // }, - // ) - // console.log(vi) + expect(vs.total_granted).not.toEqual('0'); const resAtom = await tgeWallets['auctionVesting'].executeContract( atomVestingLpAddr, @@ -4203,13 +4251,13 @@ describe('Neutron / TGE / Auction', () => { }), ); expect(resAtom.code).toEqual(0); - // const resUsdc = await tgeWallets['auctionVesting'].executeContract( - // usdcVestingLpAddr, - // JSON.stringify({ - // claim: {}, - // }), - // ); - // expect(resUsdc.code).toEqual(0); + const resUsdc = await tgeWallets['auctionVesting'].executeContract( + usdcVestingLpAddr, + JSON.stringify({ + claim: {}, + }), + ); + expect(resUsdc.code).toEqual(0); const [lpBalanceAtom, lpBalanceUsdc] = await Promise.all([ neutronChain.queryContract( @@ -4230,9 +4278,22 @@ describe('Neutron / TGE / Auction', () => { ), ]); - // actual diff is smth about 0.2% (converting old lp to new) - expect(parseInt(lpBalanceAtom.balance)).toBeCloseTo(claimAtomLP, -4); - expect(parseInt(lpBalanceUsdc.balance)).toBeCloseTo(claimUsdcLP, -4); + expect(parseInt(lpBalanceAtom.balance)).toBeCloseTo(claimAtomLP, -5); + expect(parseInt(lpBalanceUsdc.balance)).toBeCloseTo(claimUsdcLP, -5); + }); + it('should compare voting power after migrtaion: lp', async () => { + for (const v of [ + 'airdropAuctionVesting', + 'airdropAuctionLockdrop', + 'airdropAuctionLockdropVesting', + 'auctionLockdrop', + 'auctionLockdropVesting', + 'auctionVesting', + ]) { + const member = new DaoMember(tgeWallets[v], daoMain); + const vp = (await member.queryVotingPower()).power | 0; + expect(+vp).toBeCloseTo(votingPowerBeforeLp[v], -5); + } }); }); }); From 358bea45b0335f8a48aa7d691f8c6ef0767fab8c Mon Sep 17 00:00:00 2001 From: sotnikov-s Date: Wed, 7 Feb 2024 17:57:11 +0300 Subject: [PATCH 14/87] add last lockdrop participant withdrawal and lockdrop completeness tests --- src/testcases/run_in_band/tge.auction.test.ts | 419 +++++++++++++++++- 1 file changed, 415 insertions(+), 4 deletions(-) diff --git a/src/testcases/run_in_band/tge.auction.test.ts b/src/testcases/run_in_band/tge.auction.test.ts index 1bcb2bac..923f397c 100644 --- a/src/testcases/run_in_band/tge.auction.test.ts +++ b/src/testcases/run_in_band/tge.auction.test.ts @@ -2027,6 +2027,56 @@ describe('Neutron / TGE / Auction', () => { } }); + describe('check generator state', () => { + it('check generator stake presence', async () => { + const stakedAtomLp = await neutronChain.queryContract( + tgeMain.contracts.astroGenerator, + { + deposit: { + lp_token: tgeMain.pairs.atom_ntrn.liquidity, + user: tgeMain.contracts.lockdrop, + }, + }, + ); + expect(+stakedAtomLp).toBeGreaterThan(0); + + const stakedUsdcLp = await neutronChain.queryContract( + tgeMain.contracts.astroGenerator, + { + deposit: { + lp_token: tgeMain.pairs.usdc_ntrn.liquidity, + user: tgeMain.contracts.lockdrop, + }, + }, + ); + expect(+stakedUsdcLp).toBeGreaterThan(0); + }); + + it('check generator rewards presence', async () => { + const pendingAtomRewards = await neutronChain.queryContract( + tgeMain.contracts.astroGenerator, + { + pending_token: { + lp_token: tgeMain.pairs.atom_ntrn.liquidity, + user: tgeMain.contracts.lockdrop, + }, + }, + ); + expect(+pendingAtomRewards.pending).toBeGreaterThan(0); + + const pendingUsdcRewards = await neutronChain.queryContract( + tgeMain.contracts.astroGenerator, + { + pending_token: { + lp_token: tgeMain.pairs.usdc_ntrn.liquidity, + user: tgeMain.contracts.lockdrop, + }, + }, + ); + expect(+pendingUsdcRewards.pending).toBeGreaterThan(0); + }); + }); + for (const v of [ 'airdropAuctionLockdrop', 'airdropAuctionLockdropVesting', @@ -2606,7 +2656,7 @@ describe('Neutron / TGE / Auction', () => { neutronChain, cmInstantiator, tgeMain.contracts.astroFactory, - [nativeTokenInfo(NEUTRON_DENOM), nativeTokenInfo(IBC_ATOM_DENOM)], + [nativeTokenInfo(IBC_ATOM_DENOM), nativeTokenInfo(NEUTRON_DENOM)], priceScale, ); ntrnAtomPclPool = ntrnAtomClPairInfo.contract_addr; @@ -2655,7 +2705,7 @@ describe('Neutron / TGE / Auction', () => { neutronChain, cmInstantiator, tgeMain.contracts.astroFactory, - [nativeTokenInfo(NEUTRON_DENOM), nativeTokenInfo(IBC_USDC_DENOM)], + [nativeTokenInfo(IBC_USDC_DENOM), nativeTokenInfo(NEUTRON_DENOM)], priceScale, ); ntrnUsdcPclPool = ntrnUsdcClPairInfo.contract_addr; @@ -3693,6 +3743,56 @@ describe('Neutron / TGE / Auction', () => { }); describe('post migration claims and withdrawals', () => { + describe('check generator state', () => { + it('check generator stake presence', async () => { + const stakedAtomLp = await neutronChain.queryContract( + liqMigContracts.generator, + { + deposit: { + lp_token: liqMigContracts.atomPclLp, + user: liqMigContracts.pclLockdrop, + }, + }, + ); + expect(+stakedAtomLp).toBeGreaterThan(0); + + const stakedUsdcLp = await neutronChain.queryContract( + liqMigContracts.generator, + { + deposit: { + lp_token: liqMigContracts.usdcPclLp, + user: liqMigContracts.pclLockdrop, + }, + }, + ); + expect(+stakedUsdcLp).toBeGreaterThan(0); + }); + + it('check generator rewards presence', async () => { + const pendingAtomRewards = await neutronChain.queryContract( + liqMigContracts.generator, + { + pending_token: { + lp_token: liqMigContracts.atomPclLp, + user: liqMigContracts.pclLockdrop, + }, + }, + ); + expect(+pendingAtomRewards.pending).toBeGreaterThan(0); + + const pendingUsdcRewards = await neutronChain.queryContract( + liqMigContracts.generator, + { + pending_token: { + lp_token: liqMigContracts.usdcPclLp, + user: liqMigContracts.pclLockdrop, + }, + }, + ); + expect(+pendingUsdcRewards.pending).toBeGreaterThan(0); + }); + }); + // In PCL contract, the user has two lockups: ATOM for 1 and USDC for 2 // In XYK contract, before migration the user had three lockups: ATOM for 1, // USDC for 1 (withdrawn) and USDC for 2 @@ -3887,7 +3987,217 @@ describe('Neutron / TGE / Auction', () => { }); it('lp tokens staked in generator', async () => { - // expect staked LP amount to decrease on amount of withdrawn tokens + // expect staked LP amount to decrease by amount of withdrawn tokens + expect( + stateBefore.pclAtomStakedInGen - stateAfter.pclAtomStakedInGen, + ).toEqual( + +stateBefore.pclUserLockups.mapped_lockup_infos[atomLockupKey] + .lp_units_locked, + ); + expect( + stateBefore.pclUsdcStakedInGen - stateAfter.pclUsdcStakedInGen, + ).toEqual( + +stateBefore.pclUserLockups.mapped_lockup_infos[usdcLockupKey] + .lp_units_locked, + ); + }); + + it('lp tokens received by the user', async () => { + // expect all locked LP transferred to the user + expect(stateAfter.balances.user.atomPclPairLp).toEqual( + stateBefore.balances.user.atomPclPairLp + + +stateBefore.pclUserLockups.mapped_lockup_infos[atomLockupKey] + .lp_units_locked, + ); + expect(stateAfter.balances.user.usdcPclPairLp).toEqual( + stateBefore.balances.user.usdcPclPairLp + + +stateBefore.pclUserLockups.mapped_lockup_infos[usdcLockupKey] + .lp_units_locked, + ); + }); + + it('no ntrn received by the user', async () => { + // all ntrn rewards are transferred to the user during migration, so no additional + // rewards are expected to be received by the user for withdrawals + expect(stateAfter.balances.user.ntrn).toEqual( + stateBefore.balances.user.ntrn - ntrnToPayGas * 4, // fees for 4 withdrawal attempts + ); + }); + }); + }); + + // In PCL contract, the user has two lockups: ATOM for 1 and USDC for 2 + // In XYK contract, before migration the user had same two unwithdrawn lockups + describe('by airdropAuctionLockdropVestingMigration', () => { + it('no withdrawal available from XYK', async () => { + // nor with withdrawal + await expect( + tgeWallets['airdropAuctionLockdropVestingMigration'].executeContract( + tgeMain.contracts.lockdrop, + JSON.stringify({ + claim_rewards_and_optionally_unlock: { + pool_type: 'USDC', + duration: 1, + withdraw_lp_stake: true, + }, + }), + ), + ).rejects.toThrow(/Astro LP Tokens have already been claimed!/); + // nor without one + await expect( + tgeWallets['airdropAuctionLockdropVestingMigration'].executeContract( + tgeMain.contracts.lockdrop, + JSON.stringify({ + claim_rewards_and_optionally_unlock: { + pool_type: 'ATOM', + duration: 1, + withdraw_lp_stake: false, + }, + }), + ), + ).rejects.toThrow(/Astro LP Tokens have already been claimed!/); + }); + + let stateBefore: LiquidityMigrationState; + it('gather state before withdrawal', async () => { + stateBefore = await gatherLiquidityMigrationState( + neutronChain, + tgeWallets[ + 'airdropAuctionLockdropVestingMigration' + ].wallet.address.toString(), + liqMigContracts, + ); + console.log( + `airdropAuctionLockdropVestingMigration state before withdrawal:\n${JSON.stringify( + stateBefore, + )}`, + ); + }); + + const ntrnToPayGas = 200000; + it('withdraw both remaining lockups from PCL', async () => { + await tgeWallets[ + 'airdropAuctionLockdropVestingMigration' + ].executeContract( + liqMigContracts.pclLockdrop, + JSON.stringify({ + claim_rewards_and_optionally_unlock: { + pool_type: 'USDC', + duration: 1, + withdraw_lp_stake: true, + }, + }), + undefined, + { + gas_limit: Long.fromString('5000000'), + amount: [{ denom: NEUTRON_DENOM, amount: ntrnToPayGas.toString() }], + }, + ); + await tgeWallets[ + 'airdropAuctionLockdropVestingMigration' + ].executeContract( + liqMigContracts.pclLockdrop, + JSON.stringify({ + claim_rewards_and_optionally_unlock: { + pool_type: 'ATOM', + duration: 1, + withdraw_lp_stake: true, + }, + }), + undefined, + { + gas_limit: Long.fromString('5000000'), + amount: [{ denom: NEUTRON_DENOM, amount: ntrnToPayGas.toString() }], + }, + ); + }); + + it('no more withdrawal available from PCL', async () => { + // nor with withdrawal + await expect( + tgeWallets['airdropAuctionLockdropVestingMigration'].executeContract( + liqMigContracts.pclLockdrop, + JSON.stringify({ + claim_rewards_and_optionally_unlock: { + pool_type: 'ATOM', + duration: 1, + withdraw_lp_stake: true, + }, + }), + undefined, + { + gas_limit: Long.fromString('5000000'), + amount: [ + { denom: NEUTRON_DENOM, amount: ntrnToPayGas.toString() }, + ], + }, + ), + ).rejects.toThrow(/Astro LP Tokens have already been claimed!/); + // nor without one + await expect( + tgeWallets['airdropAuctionLockdropVestingMigration'].executeContract( + liqMigContracts.pclLockdrop, + JSON.stringify({ + claim_rewards_and_optionally_unlock: { + pool_type: 'USDC', + duration: 1, + withdraw_lp_stake: false, + }, + }), + undefined, + { + gas_limit: Long.fromString('5000000'), + amount: [ + { denom: NEUTRON_DENOM, amount: ntrnToPayGas.toString() }, + ], + }, + ), + ).rejects.toThrow(/Astro LP Tokens have already been claimed!/); + }); + + let stateAfter: LiquidityMigrationState; + it('gather state after withdrawal', async () => { + stateAfter = await gatherLiquidityMigrationState( + neutronChain, + tgeWallets[ + 'airdropAuctionLockdropVestingMigration' + ].wallet.address.toString(), + liqMigContracts, + ); + console.log( + `airdropAuctionLockdropVestingMigration state after withdrawal:\n${JSON.stringify( + stateAfter, + )}`, + ); + }); + + describe('funds flow', () => { + const atomLockupKey = 'ATOM1'; + const usdcLockupKey = 'USDC1'; + it('generator rewards', async () => { + // sanity check + expect( + +stateBefore.pclUserLockups.claimable_generator_ntrn_debt, + ).toBeGreaterThan(0); + expect( + +stateBefore.pclUserLockups.claimable_generator_ntrn_debt, + ).toEqual( + +stateBefore.pclUserLockups.mapped_lockup_infos[atomLockupKey] + .claimable_generator_astro_debt + + +stateBefore.pclUserLockups.mapped_lockup_infos[usdcLockupKey] + .claimable_generator_astro_debt, + ); + + // assume fluctuation because rewards amount increases every block + isWithinRange( + stateAfter.balances.user.astro - stateBefore.balances.user.astro, + +stateBefore.pclUserLockups.claimable_generator_ntrn_debt, + 0.5, + ); + }); + + it('lp tokens staked in generator', async () => { + // expect staked LP amount to decrease by amount of withdrawn tokens expect( stateBefore.pclAtomStakedInGen - stateAfter.pclAtomStakedInGen, ).toEqual( @@ -3917,7 +4227,7 @@ describe('Neutron / TGE / Auction', () => { }); it('no ntrn received by the user', async () => { - // all ntrn rewards are transferred to the used during migration, so no additional + // all ntrn rewards are transferred to the user during migration, so no additional // rewards are expected to be received by the user for withdrawals expect(stateAfter.balances.user.ntrn).toEqual( stateBefore.balances.user.ntrn - ntrnToPayGas * 4, // fees for 4 withdrawal attempts @@ -3925,6 +4235,107 @@ describe('Neutron / TGE / Auction', () => { }); }); }); + + // make sure there are no generator rewards and LP tokens staked by lockdrop contracts + // meaning that all the funds and rewards have been distributed between lockdrop participants + describe('confirm lockdrop withdrawal completeness', () => { + it('no XYK lp tokens kept by XYK lockdrop', async () => { + const stakedAtomLp = await neutronChain.queryContract( + liqMigContracts.generator, + { + deposit: { + lp_token: liqMigContracts.atomXykLp, + user: liqMigContracts.xykLockdrop, + }, + }, + ); + expect(+stakedAtomLp).toBe(0); + + const stakedUsdcLp = await neutronChain.queryContract( + liqMigContracts.generator, + { + deposit: { + lp_token: liqMigContracts.usdcXykLp, + user: liqMigContracts.xykLockdrop, + }, + }, + ); + expect(+stakedUsdcLp).toBe(0); + }); + + it('no PCL lp tokens kept by PCL lockdrop', async () => { + const stakedAtomLp = await neutronChain.queryContract( + liqMigContracts.generator, + { + deposit: { + lp_token: liqMigContracts.atomPclLp, + user: liqMigContracts.pclLockdrop, + }, + }, + ); + expect(+stakedAtomLp).toBe(0); + + const stakedUsdcLp = await neutronChain.queryContract( + liqMigContracts.generator, + { + deposit: { + lp_token: liqMigContracts.usdcPclLp, + user: liqMigContracts.pclLockdrop, + }, + }, + ); + expect(+stakedUsdcLp).toBe(0); + }); + + describe('no generator rewards left to be paid', () => { + it('for XYK pairs', async () => { + const pendingAtomRewards = await neutronChain.queryContract( + liqMigContracts.generator, + { + pending_token: { + lp_token: liqMigContracts.atomXykLp, + user: liqMigContracts.xykLockdrop, + }, + }, + ); + expect(+pendingAtomRewards.pending).toBe(0); + + const pendingUsdcRewards = await neutronChain.queryContract( + liqMigContracts.generator, + { + pending_token: { + lp_token: liqMigContracts.usdcXykLp, + user: liqMigContracts.xykLockdrop, + }, + }, + ); + expect(+pendingUsdcRewards.pending).toBe(0); + }); + it('for PCL pairs', async () => { + const pendingAtomRewards = await neutronChain.queryContract( + liqMigContracts.generator, + { + pending_token: { + lp_token: liqMigContracts.atomPclLp, + user: liqMigContracts.pclLockdrop, + }, + }, + ); + expect(+pendingAtomRewards.pending).toBe(0); + + const pendingUsdcRewards = await neutronChain.queryContract( + liqMigContracts.generator, + { + pending_token: { + lp_token: liqMigContracts.usdcPclLp, + user: liqMigContracts.pclLockdrop, + }, + }, + ); + expect(+pendingUsdcRewards.pending).toBe(0); + }); + }); + }); }); }); From eba865d033f203feccb6cde2a1116e77259de948 Mon Sep 17 00:00:00 2001 From: sotnikov-s Date: Wed, 7 Feb 2024 19:30:06 +0300 Subject: [PATCH 15/87] rm race-prone generator rewards test --- src/testcases/run_in_band/tge.auction.test.ts | 30 ------------------- 1 file changed, 30 deletions(-) diff --git a/src/testcases/run_in_band/tge.auction.test.ts b/src/testcases/run_in_band/tge.auction.test.ts index 923f397c..93f540dd 100644 --- a/src/testcases/run_in_band/tge.auction.test.ts +++ b/src/testcases/run_in_band/tge.auction.test.ts @@ -3084,21 +3084,6 @@ describe('Neutron / TGE / Auction', () => { }); }); - test('no claimable generator ntrn debt', async () => { - // all collected rewards are transferred during migration - expect( - +stateAfter.pclUserLockups.claimable_generator_ntrn_debt, - ).toEqual(0); - expect( - +stateAfter.pclUserLockups.mapped_lockup_infos[atomLockupKey] - .claimable_generator_astro_debt, - ).toEqual(0); - expect( - +stateAfter.pclUserLockups.mapped_lockup_infos[usdcLockupKey] - .claimable_generator_astro_debt, - ).toEqual(0); - }); - describe('astroport lp', () => { test('lp tokens are locked', async () => { expect( @@ -3529,21 +3514,6 @@ describe('Neutron / TGE / Auction', () => { }); }); - test('no claimable generator ntrn debt', async () => { - // all collected rewards are transferred during migration - expect( - +stateAfter.pclUserLockups.claimable_generator_ntrn_debt, - ).toEqual(0); - expect( - +stateAfter.pclUserLockups.mapped_lockup_infos[atomLockupKey] - .claimable_generator_astro_debt, - ).toEqual(0); - expect( - +stateAfter.pclUserLockups.mapped_lockup_infos[usdcLockupKey] - .claimable_generator_astro_debt, - ).toEqual(0); - }); - describe('astroport lp', () => { test('lp tokens are locked', async () => { expect( From 463fdbf31a075ebc16c94b9c92c8d6ab46361eea Mon Sep 17 00:00:00 2001 From: sotnikov-s Date: Wed, 7 Feb 2024 19:39:33 +0300 Subject: [PATCH 16/87] increase QA wallet ntrn init balances --- src/testcases/run_in_band/tge.auction.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/testcases/run_in_band/tge.auction.test.ts b/src/testcases/run_in_band/tge.auction.test.ts index 93f540dd..64df77e5 100644 --- a/src/testcases/run_in_band/tge.auction.test.ts +++ b/src/testcases/run_in_band/tge.auction.test.ts @@ -227,7 +227,7 @@ describe('Neutron / TGE / Auction', () => { [ { denom: NEUTRON_DENOM, - amount: '1000000', + amount: '5000000', }, { denom: IBC_ATOM_DENOM, From d56257449cb691b09534bcc55c600bb07a46f3e2 Mon Sep 17 00:00:00 2001 From: sotnikov-s Date: Wed, 7 Feb 2024 19:39:47 +0300 Subject: [PATCH 17/87] add claim without withdrawal from PCL lockdrop test --- src/testcases/run_in_band/tge.auction.test.ts | 86 +++++++++++++++---- 1 file changed, 67 insertions(+), 19 deletions(-) diff --git a/src/testcases/run_in_band/tge.auction.test.ts b/src/testcases/run_in_band/tge.auction.test.ts index 64df77e5..60683641 100644 --- a/src/testcases/run_in_band/tge.auction.test.ts +++ b/src/testcases/run_in_band/tge.auction.test.ts @@ -26,7 +26,6 @@ import { queryLockdropPool, LockdropPool, LockdropUserInfoResponse, - queryLockdropUserInfo, } from '@neutron-org/neutronjsplus/dist/tge'; import { Dao, @@ -4045,7 +4044,7 @@ describe('Neutron / TGE / Auction', () => { }); const ntrnToPayGas = 200000; - it('withdraw both remaining lockups from PCL', async () => { + it('withdraw USDC lockup from PCL', async () => { await tgeWallets[ 'airdropAuctionLockdropVestingMigration' ].executeContract( @@ -4063,23 +4062,72 @@ describe('Neutron / TGE / Auction', () => { amount: [{ denom: NEUTRON_DENOM, amount: ntrnToPayGas.toString() }], }, ); - await tgeWallets[ - 'airdropAuctionLockdropVestingMigration' - ].executeContract( - liqMigContracts.pclLockdrop, - JSON.stringify({ - claim_rewards_and_optionally_unlock: { - pool_type: 'ATOM', - duration: 1, - withdraw_lp_stake: true, + }); + + describe('withdraw ATOM lockup from PCL', () => { + // just claim rewards to make sure this flow works + it('claim rewards', async () => { + await tgeWallets[ + 'airdropAuctionLockdropVestingMigration' + ].executeContract( + liqMigContracts.pclLockdrop, + JSON.stringify({ + claim_rewards_and_optionally_unlock: { + pool_type: 'ATOM', + duration: 1, + withdraw_lp_stake: false, + }, + }), + undefined, + { + gas_limit: Long.fromString('5000000'), + amount: [ + { denom: NEUTRON_DENOM, amount: ntrnToPayGas.toString() }, + ], }, - }), - undefined, - { - gas_limit: Long.fromString('5000000'), - amount: [{ denom: NEUTRON_DENOM, amount: ntrnToPayGas.toString() }], - }, - ); + ); + }); + + it('make sure rewards are accrued', async () => { + const stateIntermediate = await gatherLiquidityMigrationState( + neutronChain, + tgeWallets[ + 'airdropAuctionLockdropVestingMigration' + ].wallet.address.toString(), + liqMigContracts, + ); + + // generator rewards are accrued + expect(stateIntermediate.balances.user.astro).toBeGreaterThan( + stateBefore.balances.user.astro, + ); + // no LP received since the position wasn't withdrawn + expect(stateIntermediate.balances.user.atomPclPairLp).toBe( + stateBefore.balances.user.atomPclPairLp, + ); + }); + + it('withdraw lockup', async () => { + await tgeWallets[ + 'airdropAuctionLockdropVestingMigration' + ].executeContract( + liqMigContracts.pclLockdrop, + JSON.stringify({ + claim_rewards_and_optionally_unlock: { + pool_type: 'ATOM', + duration: 1, + withdraw_lp_stake: true, + }, + }), + undefined, + { + gas_limit: Long.fromString('5000000'), + amount: [ + { denom: NEUTRON_DENOM, amount: ntrnToPayGas.toString() }, + ], + }, + ); + }); }); it('no more withdrawal available from PCL', async () => { @@ -4200,7 +4248,7 @@ describe('Neutron / TGE / Auction', () => { // all ntrn rewards are transferred to the user during migration, so no additional // rewards are expected to be received by the user for withdrawals expect(stateAfter.balances.user.ntrn).toEqual( - stateBefore.balances.user.ntrn - ntrnToPayGas * 4, // fees for 4 withdrawal attempts + stateBefore.balances.user.ntrn - ntrnToPayGas * 5, // fees for 5 withdrawal/claim attempts ); }); }); From 8aebf921faad5b58b7062791b37098b27e0e15bb Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Wed, 7 Feb 2024 22:48:32 -0300 Subject: [PATCH 18/87] add more vp tests, restructure, change checks --- .../astroport_xastro_token.wasm | Bin 0 -> 306318 bytes src/testcases/run_in_band/tge.auction.test.ts | 805 ++++++++++-------- 2 files changed, 467 insertions(+), 338 deletions(-) create mode 100644 contracts_thirdparty/astroport_xastro_token.wasm diff --git a/contracts_thirdparty/astroport_xastro_token.wasm b/contracts_thirdparty/astroport_xastro_token.wasm new file mode 100644 index 0000000000000000000000000000000000000000..9f79247af05a4a2143bc39ec5d706e2f4c876148 GIT binary patch literal 306318 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%0A&x6R(5e9ux( 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

1YX-p8-F0IMuhI< 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 dTuCYXkqlU9#FVD+L) { }); let liqMigContracts: LiquidityMigrationContracts; + let claimAtomLP; + let claimUsdcLP; + const votingPowerBeforeOverall: Record = {}; + const votingPowerBeforeLockdrop: Record = {}; + const votingPowerBeforeLp: Record = {}; + let newVestingLpCodeID: number; + let vestingLpVaultForClAddr: string; + let lockdropVaultForClAddr: string; describe('migrate TGE liquidity to PCL', () => { + describe('save voting power before migration', () => { + + it('should save voting power before migration: overall', async () => { + for (const v of [ + 'airdropAuctionVesting', + 'airdropAuctionLockdrop', + 'airdropAuctionLockdropVesting', + 'airdropAuctionLockdropVestingMigration', + 'auctionLockdrop', + 'auctionLockdropVesting', + 'auctionVesting', + ]) { + const member = new DaoMember(tgeWallets[v], daoMain); + votingPowerBeforeOverall[v] = + (await member.queryVotingPower()).power | 0; + votingPowerBeforeOverall[v] = +votingPowerBeforeOverall.power; + } + }); + + it('should save voting power before migration: vesting lp', async () => { + for (const v of [ + 'airdropAuctionVesting', + 'airdropAuctionLockdropVesting', + 'auctionLockdropVesting', + 'auctionVesting', + ]) { + const vp = await neutronChain.queryContract( + tgeMain.contracts.vestingLpVault, + { + voting_power_at_height: { + address: tgeWallets['auctionVesting'].wallet.address.toString(), + }, + }, + ); + votingPowerBeforeLp[v] = vp.power; + } + }); + + it('should save voting power before migration: lockdrop', async () => { + for (const v of [ + 'airdropAuctionLockdrop', + 'airdropAuctionLockdropVesting', + 'auctionLockdrop', + 'auctionLockdropVesting', + 'airdropAuctionLockdropVestingMigration' + ]) { + const vp = await neutronChain.queryContract( + tgeMain.contracts.lockdropVault, + { + voting_power_at_height: { + address: tgeWallets['auctionVesting'].wallet.address.toString(), + }, + }, + ); + votingPowerBeforeLockdrop[v] = vp.power; + } + }); + }); describe('replace XYK with PCL pools', () => { test('deregister XYK pairs', async () => { await deregisterPair(cmInstantiator, tgeMain.contracts.astroFactory, [ @@ -2626,7 +2692,7 @@ describe('Neutron / TGE / Auction', () => { nativeToken(IBC_ATOM_DENOM, atomToProvide.toString()), nativeToken(NEUTRON_DENOM, ntrnToProvide.toString()), ], - slippage_tolerance: '0.5', + slippage_tolerance: '0.01', }, }), [ @@ -2675,7 +2741,7 @@ describe('Neutron / TGE / Auction', () => { nativeToken(IBC_USDC_DENOM, usdcToProvide.toString()), nativeToken(NEUTRON_DENOM, ntrnToProvide.toString()), ], - slippage_tolerance: '0.5', + slippage_tolerance: '0.01', }, }), [ @@ -2809,7 +2875,111 @@ describe('Neutron / TGE / Auction', () => { }); }); - describe('execute migration handlers', () => { + describe('deploy new LP and Lockdrop vaults; add them to dao', () => { + + it('deploy vesting lp voting vault for CL', async () => { + const codeId = await cmInstantiator.storeWasm( + NeutronContract.VESTING_LP_VAULT_CL, + ); + expect(codeId).toBeGreaterThan(0); + + const res = await cmInstantiator.instantiateContract( + codeId, + JSON.stringify({ + name: 'Vesting LP CL voting vault', + description: 'Vesting LP voting vault for CL pairs', + atom_vesting_lp_contract: atomVestingLpAddr, + atom_cl_pool_contract: ntrnAtomPclPool, + usdc_vesting_lp_contract: usdcVestingLpAddr, + usdc_cl_pool_contract: ntrnUsdcPclPool, + owner: daoMain.contracts.core.address, + }), + 'neutron.voting.vaults.vesting_cl', + ); + vestingLpVaultForClAddr = res[0]._contract_address; + }); + + it('deploy lockdrop voting vault for CL', async () => { + const codeId = await cmInstantiator.storeWasm( + NeutronContract.LOCKDROP_VAULT_CL, + ); + expect(codeId).toBeGreaterThan(0); + + const res = await cmInstantiator.instantiateContract( + codeId, + JSON.stringify({ + name: 'Lockdrop CL voting vault', + description: 'Lockdrop vault for CL pairs', + lockdrop_contract: lockdropPclAddr, + usdc_cl_pool_contract: ntrnUsdcPclPool, + atom_cl_pool_contract: ntrnAtomPclPool, + owner: daoMain.contracts.core.address, + }), + 'neutron.voting.vaults.lockdrop_cl', + ); + lockdropVaultForClAddr = res[0]._contract_address; + }); + + it('add CL vaults to the registry', async () => { + const propID = await daoMember1.submitSingleChoiceProposal( + 'Proposal #4', + 'add CL_VESTING_LP_VAULT & CL_LOCKDROP_VAUULT', + [ + { + wasm: { + execute: { + contract_addr: daoMain.contracts.voting.address, + msg: Buffer.from( + `{"add_voting_vault": {"new_voting_vault_contract":"${vestingLpVaultForClAddr}"}}`, + ).toString('base64'), + funds: [], + }, + }, + }, + { + wasm: { + execute: { + contract_addr: daoMain.contracts.voting.address, + msg: Buffer.from( + `{"add_voting_vault": {"new_voting_vault_contract":"${lockdropVaultForClAddr}"}}`, + ).toString('base64'), + funds: [], + }, + }, + }, + ], + '1000', + ); + await daoMember1.voteYes(propID); + const prop = await daoMain.queryProposal(propID); + // lockdrop and vesting participants should vote + expect(prop.proposal).toMatchObject({ status: 'open' }); + let vp: number; + for (const v of [ + 'airdropAuctionVesting', + 'airdropAuctionLockdrop', + 'airdropAuctionLockdropVesting', + 'auctionLockdrop', + 'auctionLockdropVesting', + 'auctionVesting', + 'airdropAuctionLockdropVestingMigration', + ]) { + const member = new DaoMember(tgeWallets[v], daoMain); + vp = (await member.queryVotingPower()).power | 0; + if ( + (await daoMain.queryProposal(propID)).proposal.status == 'open' && vp>0 + ) { + await member.voteYes(propID); + } + } + await daoMember1.executeProposal(propID); + const status = (await daoMain.queryProposal(propID)).proposal + .status; + console.log('status: '+ status); + }); + }); + + describe('execute migration handlers: lockdrop', () => { it('fill liquidity migration contracts', () => { liqMigContracts = { xykLockdrop: tgeMain.contracts.lockdrop, @@ -2867,6 +3037,19 @@ describe('Neutron / TGE / Auction', () => { ); }); + it('check user voting power', async () => { + const vp = await neutronChain.queryContract( + lockdropVaultForClAddr, + { + voting_power_at_height: { + address: tgeWallets['airdropAuctionLockdropVestingMigration'].wallet.address.toString(), + }, + }, + ); + console.log('lockdrop vp:'+ vp.power); + isWithinRange(+vp.power, votingPowerBeforeLockdrop['airdropAuctionLockdropVestingMigration'], 1); + }); + let stateAfter: LiquidityMigrationState; it('gather state after migration', async () => { stateAfter = await gatherLiquidityMigrationState( @@ -3685,6 +3868,19 @@ describe('Neutron / TGE / Auction', () => { ); }); + it('check user voting power', async () => { + const vp = await neutronChain.queryContract( + lockdropVaultForClAddr, + { + voting_power_at_height: { + address: tgeWallets[v].wallet.address.toString(), + }, + }, + ); + isWithinRange(+vp.power, votingPowerBeforeLockdrop[v], 0.5); + + }); + let stateAfter: LiquidityMigrationState; it('gather state after migration', async () => { stateAfter = await gatherLiquidityMigrationState( @@ -3731,6 +3927,262 @@ describe('Neutron / TGE / Auction', () => { } }); }); + + describe('execute migration handlers: vesting lp', () => { + + it('should validate numbers & save claim amount before migration', async () => { + const [ + vestingInfoAtom, + vestingInfoUsdc, + lpAuctionBalanceAtom, + lpAuctionBalanceUsdc, + ] = await Promise.all([ + neutronChain.queryContract( + tgeMain.contracts.vestingAtomLp, + { + vesting_account: { + address: + tgeWallets['auctionVesting'].wallet.address.toString(), + }, + }, + ), + neutronChain.queryContract( + tgeMain.contracts.vestingUsdcLp, + { + vesting_account: { + address: + tgeWallets['auctionVesting'].wallet.address.toString(), + }, + }, + ), + neutronChain.queryContract( + tgeMain.pairs.atom_ntrn.liquidity, + { + balance: { + address: tgeMain.contracts.auction, + }, + }, + ), + neutronChain.queryContract( + tgeMain.pairs.usdc_ntrn.liquidity, + { + balance: { + address: tgeMain.contracts.auction, + }, + }, + ), + ]); + + expect(parseInt(lpAuctionBalanceUsdc.balance)).toBeLessThanOrEqual(7); + expect(parseInt(lpAuctionBalanceAtom.balance)).toBeLessThanOrEqual(7); + expect(vestingInfoAtom.address).toEqual( + tgeWallets['auctionVesting'].wallet.address.toString(), + ); + expect(vestingInfoUsdc.address).toEqual( + tgeWallets['auctionVesting'].wallet.address.toString(), + ); + expect(vestingInfoAtom.info.released_amount).toEqual('0'); + expect(vestingInfoUsdc.info.released_amount).toEqual('0'); + + isWithinRange(parseInt(vestingInfoAtom.info.schedules[0].end_point.amount), 3916, 0.5); + expect( + parseInt(vestingInfoAtom.info.schedules[0].end_point.amount), + ).toBeGreaterThan(0); + claimAtomLP = parseInt( + vestingInfoAtom.info.schedules[0].end_point.amount, + ); + + expect( + parseInt(vestingInfoUsdc.info.schedules[0].end_point.amount), + ).toBeGreaterThan(0); + claimUsdcLP = parseInt( + vestingInfoUsdc.info.schedules[0].end_point.amount, + ); + }); + + it('store new vesting lp contract version', async () => { + newVestingLpCodeID = await cmInstantiator.storeWasm( + NeutronContract.VESTING_LP, + ); + }); + + it('should migrate ATOM LP vesing to V2', async () => { + const res = await cmInstantiator.migrateContract( + tgeMain.contracts.vestingAtomLp, + newVestingLpCodeID, + { + max_slippage: '0.01', + ntrn_denom: NEUTRON_DENOM, + paired_denom: IBC_ATOM_DENOM, + xyk_pair: tgeMain.pairs.atom_ntrn.contract.toString(), + cl_pair: ntrnAtomPclPool, + new_lp_token: ntrnAtomPclToken, + pcl_vesting: atomVestingLpAddr, + }, + ); + expect(res.code).toEqual(0); + }); + + it('should migrate USDC LP vesing to V2', async () => { + const res = await cmInstantiator.migrateContract( + tgeMain.contracts.vestingUsdcLp, + newVestingLpCodeID, + { + max_slippage: '0.01', + ntrn_denom: NEUTRON_DENOM, + paired_denom: IBC_USDC_DENOM, + xyk_pair: tgeMain.pairs.usdc_ntrn.contract, + cl_pair: ntrnUsdcPclPool, + new_lp_token: ntrnUsdcPclToken, + pcl_vesting: usdcVestingLpAddr, + }, + ); + expect(res.code).toEqual(0); + }); + + it('should migrate atom', async () => { + for (const v of [ + 'airdropAuctionVesting', + 'airdropAuctionLockdropVesting', + 'auctionLockdropVesting', + 'auctionVesting', + ]) { + const resAtom = await cmInstantiator.executeContract( + tgeMain.contracts.vestingAtomLp, + JSON.stringify({ + migrate_liquidity_to_pcl_pool: { + user: tgeWallets[v].wallet.address.toString(), + }, + }), + ); + expect(resAtom.code).toEqual(0); + } + }); + + it('should migrate usdc', async () => { + for (const v of [ + 'airdropAuctionLockdropVesting', + 'auctionLockdropVesting', + 'airdropAuctionVesting', + 'auctionVesting', + ]) { + const res = await cmInstantiator.executeContract( + tgeMain.contracts.vestingUsdcLp, + JSON.stringify({ + migrate_liquidity_to_pcl_pool: { + user: tgeWallets[v].wallet.address.toString(), + }, + }), + ); + expect(res.code).toEqual(0); + } + }); + + + it('should compare voting power after migrtaion: vesting lp', async () => { + for (const v of [ + 'airdropAuctionVesting', + 'airdropAuctionLockdropVesting', + 'auctionLockdropVesting', + 'auctionVesting', + ]) { + const vp = await neutronChain.queryContract( + vestingLpVaultForClAddr, + { + voting_power_at_height: { + address: tgeWallets[v].wallet.address.toString(), + }, + }, + ); + isWithinRange(+vp.power, votingPowerBeforeLp[v], 1); + + } + }); + + it('check user voting power', async () => { + for (const v of [ + 'airdropAuctionLockdrop', + 'airdropAuctionLockdropVesting', + 'auctionLockdrop', + 'auctionLockdropVesting', + 'airdropAuctionLockdropVestingMigration' + ]) { + const vp = await neutronChain.queryContract( + lockdropVaultForClAddr, + { + voting_power_at_height: { + address: tgeWallets[v].wallet.address.toString(), + }, + }, + ); + isWithinRange(+vp.power, votingPowerBeforeLockdrop[v], 1); + } + }); + + it('should compare voting power after migrtaion: overall', async () => { + for (const v of [ + 'airdropAuctionVesting', + 'airdropAuctionLockdrop', + 'airdropAuctionLockdropVesting', + 'airdropAuctionLockdropVestingMigration', + 'auctionLockdrop', + 'auctionLockdropVesting', + 'auctionVesting', + ]) { + const member = new DaoMember(tgeWallets[v], daoMain); + const vp = (await member.queryVotingPower()).power | 0; + isWithinRange(+vp, votingPowerBeforeLp[v], 1); + } + }); + + it('should claim', async () => { + const vs = await neutronChain.queryContract<{ + total_granted: string; + total_released: string; + }>(usdcVestingLpAddr, { + vesting_state: {}, + }); + expect(vs.total_granted).not.toEqual('0'); + + const resAtom = await tgeWallets['auctionVesting'].executeContract( + atomVestingLpAddr, + JSON.stringify({ + claim: {}, + }), + ); + expect(resAtom.code).toEqual(0); + const resUsdc = await tgeWallets['auctionVesting'].executeContract( + usdcVestingLpAddr, + JSON.stringify({ + claim: {}, + }), + ); + expect(resUsdc.code).toEqual(0); + + const [lpBalanceAtom, lpBalanceUsdc] = await Promise.all([ + neutronChain.queryContract( + ntrnAtomPclToken, + { + balance: { + address: tgeWallets['auctionVesting'].wallet.address.toString(), + }, + }, + ), + neutronChain.queryContract( + ntrnUsdcPclToken, + { + balance: { + address: tgeWallets['auctionVesting'].wallet.address.toString(), + }, + }, + ), + ]); + // diff is big, near 40% + isWithinRange(parseInt(lpBalanceAtom.balance), claimAtomLP, 50); + isWithinRange(parseInt(lpBalanceUsdc.balance), claimAtomLP, 50); + + }); + }); }); describe('post migration claims and withdrawals', () => { @@ -3965,337 +4417,6 @@ describe('Neutron / TGE / Auction', () => { ); }); }); - - describe('Migration of lp vesting', () => { - let claimAtomLP; - let claimUsdcLP; - const votingPowerBeforeLp: Record = {}; - let newVestingLpCodeID: number; - let vestingLpVaultForClAddr: string; - let lockdropVaultForClAddr: string; - - it('should save voting power before migration: lp', async () => { - for (const v of [ - 'airdropAuctionVesting', - 'airdropAuctionLockdrop', - 'airdropAuctionLockdropVesting', - 'auctionLockdrop', - 'auctionLockdropVesting', - 'auctionVesting', - ]) { - const member = new DaoMember(tgeWallets[v], daoMain); - votingPowerBeforeLp[v] = - (await member.queryVotingPower()).power | 0; - votingPowerBeforeLp[v] = +votingPowerBeforeLp.power; - } - }); - - it('should validate numbers & save claim amount before migration', async () => { - const [ - vestingInfoAtom, - vestingInfoUsdc, - lpAuctionBalanceAtom, - lpAuctionBalanceUsdc, - ] = await Promise.all([ - neutronChain.queryContract( - tgeMain.contracts.vestingAtomLp, - { - vesting_account: { - address: - tgeWallets['auctionVesting'].wallet.address.toString(), - }, - }, - ), - neutronChain.queryContract( - tgeMain.contracts.vestingUsdcLp, - { - vesting_account: { - address: - tgeWallets['auctionVesting'].wallet.address.toString(), - }, - }, - ), - neutronChain.queryContract( - tgeMain.pairs.atom_ntrn.liquidity, - { - balance: { - address: tgeMain.contracts.auction, - }, - }, - ), - neutronChain.queryContract( - tgeMain.pairs.usdc_ntrn.liquidity, - { - balance: { - address: tgeMain.contracts.auction, - }, - }, - ), - ]); - - expect(parseInt(lpAuctionBalanceUsdc.balance)).toBeLessThanOrEqual(7); - expect(parseInt(lpAuctionBalanceAtom.balance)).toBeLessThanOrEqual(7); - expect(vestingInfoAtom.address).toEqual( - tgeWallets['auctionVesting'].wallet.address.toString(), - ); - expect(vestingInfoUsdc.address).toEqual( - tgeWallets['auctionVesting'].wallet.address.toString(), - ); - expect(vestingInfoAtom.info.released_amount).toEqual('0'); - expect(vestingInfoUsdc.info.released_amount).toEqual('0'); - - expect( - parseInt(vestingInfoAtom.info.schedules[0].end_point.amount), - ).toBeCloseTo(3916, -1); - claimAtomLP = parseInt( - vestingInfoAtom.info.schedules[0].end_point.amount, - ); - - expect( - parseInt(vestingInfoUsdc.info.schedules[0].end_point.amount), - ).toBeCloseTo(11271, -1); - claimUsdcLP = parseInt( - vestingInfoUsdc.info.schedules[0].end_point.amount, - ); - }); - - it('store new vesting lp contract version', async () => { - newVestingLpCodeID = await cmInstantiator.storeWasm( - NeutronContract.VESTING_LP, - ); - }); - - it('deploy vesting lp voting vault for CL', async () => { - const codeId = await cmInstantiator.storeWasm( - NeutronContract.VESTING_LP_VAULT_CL, - ); - expect(codeId).toBeGreaterThan(0); - - const res = await cmInstantiator.instantiateContract( - codeId, - JSON.stringify({ - name: 'Vesting LP CL voting vault', - description: 'Vesting LP voting vault for CL pairs', - atom_vesting_lp_contract: atomVestingLpAddr, - atom_cl_pool_contract: ntrnAtomPclPool, - usdc_vesting_lp_contract: usdcVestingLpAddr, - usdc_cl_pool_contract: ntrnUsdcPclPool, - owner: daoMain.contracts.core.address, - }), - 'neutron.voting.vaults.vesting_cl', - ); - vestingLpVaultForClAddr = res[0]._contract_address; - }); - - it('deploy lockdrop voting vault for CL', async () => { - const codeId = await cmInstantiator.storeWasm( - NeutronContract.LOCKDROP_VAULT_CL, - ); - expect(codeId).toBeGreaterThan(0); - - const res = await cmInstantiator.instantiateContract( - codeId, - JSON.stringify({ - name: 'Lockdrop CL voting vault', - description: 'Lockdrop vault for CL pairs', - lockdrop_contract: lockdropPclAddr, - usdc_cl_pool_contract: ntrnUsdcPclPool, - atom_cl_pool_contract: ntrnAtomPclPool, - owner: daoMain.contracts.core.address, - }), - 'neutron.voting.vaults.lockdrop_cl', - ); - lockdropVaultForClAddr = res[0]._contract_address; - }); - - it('add CL vaults to the registry', async () => { - const propID = await daoMember1.submitSingleChoiceProposal( - 'Proposal #4', - 'add CL_VESTING_LP_VAULT & CL_LOCKDROP_VAUULT', - [ - { - wasm: { - execute: { - contract_addr: daoMain.contracts.voting.address, - msg: Buffer.from( - `{"add_voting_vault": {"new_voting_vault_contract":"${vestingLpVaultForClAddr}"}}`, - ).toString('base64'), - funds: [], - }, - }, - }, - { - wasm: { - execute: { - contract_addr: daoMain.contracts.voting.address, - msg: Buffer.from( - `{"add_voting_vault": {"new_voting_vault_contract":"${lockdropVaultForClAddr}"}}`, - ).toString('base64'), - funds: [], - }, - }, - }, - ], - '1000', - ); - await daoMember1.voteYes(propID); - const prop = await daoMain.queryProposal(propID); - // lockdrop and vesting participants should vote - expect(prop.proposal).toMatchObject({ status: 'open' }); - const vp: Record = {}; - for (const v of [ - 'airdropAuctionVesting', - 'airdropAuctionLockdrop', - 'airdropAuctionLockdropVesting', - 'auctionLockdrop', - 'auctionLockdropVesting', - 'auctionVesting', - 'airdropAuctionLockdropVestingMigration', - ]) { - const member = new DaoMember(tgeWallets[v], daoMain); - vp[v] = (await member.queryVotingPower()).power | 0; - if ( - (await daoMain.queryProposal(propID)).proposal.status == 'open' - ) { - await member.voteYes(propID); - } - } - await daoMember1.executeProposal(propID); - }); - - it('should migrate ATOM LP vesing to V2', async () => { - const res = await cmInstantiator.migrateContract( - tgeMain.contracts.vestingAtomLp, - newVestingLpCodeID, - { - max_slippage: '0.5', - ntrn_denom: NEUTRON_DENOM, - paired_denom: IBC_ATOM_DENOM, - xyk_pair: tgeMain.pairs.atom_ntrn.contract.toString(), - cl_pair: ntrnAtomPclPool, - new_lp_token: ntrnAtomPclToken, - pcl_vesting: atomVestingLpAddr, - }, - ); - expect(res.code).toEqual(0); - }); - - it('should migrate USDC LP vesing to V2', async () => { - const res = await cmInstantiator.migrateContract( - tgeMain.contracts.vestingUsdcLp, - newVestingLpCodeID, - { - max_slippage: '0.5', - ntrn_denom: NEUTRON_DENOM, - paired_denom: IBC_USDC_DENOM, - xyk_pair: tgeMain.pairs.usdc_ntrn.contract, - cl_pair: ntrnUsdcPclPool, - new_lp_token: ntrnUsdcPclToken, - pcl_vesting: usdcVestingLpAddr, - }, - ); - expect(res.code).toEqual(0); - }); - - it('should migrate atom', async () => { - for (const v of [ - 'airdropAuctionVesting', - 'airdropAuctionLockdropVesting', - 'auctionLockdropVesting', - 'auctionVesting', - ]) { - const resAtom = await cmInstantiator.executeContract( - tgeMain.contracts.vestingAtomLp, - JSON.stringify({ - migrate_liquidity_to_pcl_pool: { - user: tgeWallets[v].wallet.address.toString(), - }, - }), - ); - expect(resAtom.code).toEqual(0); - } - }); - - it('should migrate usdc', async () => { - for (const v of [ - 'airdropAuctionLockdropVesting', - 'auctionLockdropVesting', - 'airdropAuctionVesting', - 'auctionVesting', - ]) { - const res = await cmInstantiator.executeContract( - tgeMain.contracts.vestingUsdcLp, - JSON.stringify({ - migrate_liquidity_to_pcl_pool: { - user: tgeWallets[v].wallet.address.toString(), - }, - }), - ); - expect(res.code).toEqual(0); - } - }); - - it('should claim', async () => { - const vs = await neutronChain.queryContract<{ - total_granted: string; - total_released: string; - }>(usdcVestingLpAddr, { - vesting_state: {}, - }); - expect(vs.total_granted).not.toEqual('0'); - - const resAtom = await tgeWallets['auctionVesting'].executeContract( - atomVestingLpAddr, - JSON.stringify({ - claim: {}, - }), - ); - expect(resAtom.code).toEqual(0); - const resUsdc = await tgeWallets['auctionVesting'].executeContract( - usdcVestingLpAddr, - JSON.stringify({ - claim: {}, - }), - ); - expect(resUsdc.code).toEqual(0); - - const [lpBalanceAtom, lpBalanceUsdc] = await Promise.all([ - neutronChain.queryContract( - tgeMain.pairs.atom_ntrn.liquidity, - { - balance: { - address: cmInstantiator.wallet.address.toString(), - }, - }, - ), - neutronChain.queryContract( - tgeMain.pairs.usdc_ntrn.liquidity, - { - balance: { - address: cmInstantiator.wallet.address.toString(), - }, - }, - ), - ]); - - expect(parseInt(lpBalanceAtom.balance)).toBeCloseTo(claimAtomLP, -5); - expect(parseInt(lpBalanceUsdc.balance)).toBeCloseTo(claimUsdcLP, -5); - }); - it('should compare voting power after migrtaion: lp', async () => { - for (const v of [ - 'airdropAuctionVesting', - 'airdropAuctionLockdrop', - 'airdropAuctionLockdropVesting', - 'auctionLockdrop', - 'auctionLockdropVesting', - 'auctionVesting', - ]) { - const member = new DaoMember(tgeWallets[v], daoMain); - const vp = (await member.queryVotingPower()).power | 0; - expect(+vp).toBeCloseTo(votingPowerBeforeLp[v], -5); - } - }); - }); }); }); }); @@ -4636,6 +4757,14 @@ type ConcentratedPoolParams = { // checks whether the value is in +/- range (inclusive) of the target with tolerance in %. const isWithinRange = (value: number, target: number, tolerance: number) => { - expect(value).toBeGreaterThanOrEqual(target - target * tolerance); - expect(value).toBeLessThanOrEqual(target + target * tolerance); + if (target === 0 && value === 0) { + return + } else if (target === 0) { + expect(value).toBeGreaterThanOrEqual(-tolerance); + expect(value).toBeLessThanOrEqual(tolerance); + } else { + const absoluteTolerance = Math.abs(target * tolerance); + expect(value).toBeGreaterThanOrEqual(target - absoluteTolerance); + expect(value).toBeLessThanOrEqual(target + absoluteTolerance); + } }; From 7db2394638035819a82164de29c2539d0cf12afd Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Wed, 7 Feb 2024 23:08:08 -0300 Subject: [PATCH 19/87] lint --- src/testcases/run_in_band/tge.auction.test.ts | 161 +++++++++--------- 1 file changed, 83 insertions(+), 78 deletions(-) diff --git a/src/testcases/run_in_band/tge.auction.test.ts b/src/testcases/run_in_band/tge.auction.test.ts index 2249a71d..a6d29359 100644 --- a/src/testcases/run_in_band/tge.auction.test.ts +++ b/src/testcases/run_in_band/tge.auction.test.ts @@ -1,5 +1,5 @@ import '@neutron-org/neutronjsplus'; -import Long, {fromNumber} from 'long'; +import Long from 'long'; import { WalletWrapper, CosmosWrapper, @@ -41,7 +41,8 @@ import { NativeToken, nativeTokenInfo, nativeToken, - PoolStatus, VotingPowerAtHeightResponse, + PoolStatus, + VotingPowerAtHeightResponse, } from '@neutron-org/neutronjsplus/dist/types'; import { getHeight } from '@neutron-org/neutronjsplus/dist/env'; @@ -2640,7 +2641,6 @@ describe('Neutron / TGE / Auction', () => { let lockdropVaultForClAddr: string; describe('migrate TGE liquidity to PCL', () => { describe('save voting power before migration', () => { - it('should save voting power before migration: overall', async () => { for (const v of [ 'airdropAuctionVesting', @@ -2665,14 +2665,16 @@ describe('Neutron / TGE / Auction', () => { 'auctionLockdropVesting', 'auctionVesting', ]) { - const vp = await neutronChain.queryContract( - tgeMain.contracts.vestingLpVault, - { - voting_power_at_height: { - address: tgeWallets['auctionVesting'].wallet.address.toString(), + const vp = + await neutronChain.queryContract( + tgeMain.contracts.vestingLpVault, + { + voting_power_at_height: { + address: + tgeWallets['auctionVesting'].wallet.address.toString(), + }, }, - }, - ); + ); votingPowerBeforeLp[v] = vp.power; } }); @@ -2683,16 +2685,18 @@ describe('Neutron / TGE / Auction', () => { 'airdropAuctionLockdropVesting', 'auctionLockdrop', 'auctionLockdropVesting', - 'airdropAuctionLockdropVestingMigration' + 'airdropAuctionLockdropVestingMigration', ]) { - const vp = await neutronChain.queryContract( - tgeMain.contracts.lockdropVault, - { - voting_power_at_height: { - address: tgeWallets['auctionVesting'].wallet.address.toString(), + const vp = + await neutronChain.queryContract( + tgeMain.contracts.lockdropVault, + { + voting_power_at_height: { + address: + tgeWallets['auctionVesting'].wallet.address.toString(), + }, }, - }, - ); + ); votingPowerBeforeLockdrop[v] = vp.power; } }); @@ -2926,7 +2930,6 @@ describe('Neutron / TGE / Auction', () => { }); describe('deploy new LP and Lockdrop vaults; add them to dao', () => { - it('deploy vesting lp voting vault for CL', async () => { const codeId = await cmInstantiator.storeWasm( NeutronContract.VESTING_LP_VAULT_CL, @@ -3017,15 +3020,15 @@ describe('Neutron / TGE / Auction', () => { const member = new DaoMember(tgeWallets[v], daoMain); vp = (await member.queryVotingPower()).power | 0; if ( - (await daoMain.queryProposal(propID)).proposal.status == 'open' && vp>0 + (await daoMain.queryProposal(propID)).proposal.status == 'open' && + vp > 0 ) { await member.voteYes(propID); } } await daoMember1.executeProposal(propID); - const status = (await daoMain.queryProposal(propID)).proposal - .status; - console.log('status: '+ status); + const status = (await daoMain.queryProposal(propID)).proposal.status; + console.log('status: ' + status); }); }); @@ -3088,16 +3091,24 @@ describe('Neutron / TGE / Auction', () => { }); it('check user voting power', async () => { - const vp = await neutronChain.queryContract( - lockdropVaultForClAddr, - { - voting_power_at_height: { - address: tgeWallets['airdropAuctionLockdropVestingMigration'].wallet.address.toString(), + const vp = + await neutronChain.queryContract( + lockdropVaultForClAddr, + { + voting_power_at_height: { + address: + tgeWallets[ + 'airdropAuctionLockdropVestingMigration' + ].wallet.address.toString(), + }, }, - }, + ); + console.log('lockdrop vp:' + vp.power); + isWithinRange( + +vp.power, + votingPowerBeforeLockdrop['airdropAuctionLockdropVestingMigration'], + 1, ); - console.log('lockdrop vp:'+ vp.power); - isWithinRange(+vp.power, votingPowerBeforeLockdrop['airdropAuctionLockdropVestingMigration'], 1); }); let stateAfter: LiquidityMigrationState; @@ -3889,16 +3900,16 @@ describe('Neutron / TGE / Auction', () => { }); it('check user voting power', async () => { - const vp = await neutronChain.queryContract( - lockdropVaultForClAddr, - { - voting_power_at_height: { - address: tgeWallets[v].wallet.address.toString(), - }, + const vp = + await neutronChain.queryContract( + lockdropVaultForClAddr, + { + voting_power_at_height: { + address: tgeWallets[v].wallet.address.toString(), + }, }, ); isWithinRange(+vp.power, votingPowerBeforeLockdrop[v], 0.5); - }); let stateAfter: LiquidityMigrationState; @@ -3949,7 +3960,6 @@ describe('Neutron / TGE / Auction', () => { }); describe('execute migration handlers: vesting lp', () => { - it('should validate numbers & save claim amount before migration', async () => { const [ vestingInfoAtom, @@ -3961,8 +3971,7 @@ describe('Neutron / TGE / Auction', () => { tgeMain.contracts.vestingAtomLp, { vesting_account: { - address: - tgeWallets['auctionVesting'].wallet.address.toString(), + address: tgeWallets['auctionVesting'].wallet.address.toString(), }, }, ), @@ -3970,8 +3979,7 @@ describe('Neutron / TGE / Auction', () => { tgeMain.contracts.vestingUsdcLp, { vesting_account: { - address: - tgeWallets['auctionVesting'].wallet.address.toString(), + address: tgeWallets['auctionVesting'].wallet.address.toString(), }, }, ), @@ -4004,7 +4012,11 @@ describe('Neutron / TGE / Auction', () => { expect(vestingInfoAtom.info.released_amount).toEqual('0'); expect(vestingInfoUsdc.info.released_amount).toEqual('0'); - isWithinRange(parseInt(vestingInfoAtom.info.schedules[0].end_point.amount), 3916, 0.5); + isWithinRange( + parseInt(vestingInfoAtom.info.schedules[0].end_point.amount), + 3916, + 0.5, + ); expect( parseInt(vestingInfoAtom.info.schedules[0].end_point.amount), ).toBeGreaterThan(0); @@ -4098,7 +4110,6 @@ describe('Neutron / TGE / Auction', () => { } }); - it('should compare voting power after migrtaion: vesting lp', async () => { for (const v of [ 'airdropAuctionVesting', @@ -4106,16 +4117,16 @@ describe('Neutron / TGE / Auction', () => { 'auctionLockdropVesting', 'auctionVesting', ]) { - const vp = await neutronChain.queryContract( - vestingLpVaultForClAddr, - { - voting_power_at_height: { - address: tgeWallets[v].wallet.address.toString(), + const vp = + await neutronChain.queryContract( + vestingLpVaultForClAddr, + { + voting_power_at_height: { + address: tgeWallets[v].wallet.address.toString(), + }, }, - }, - ); + ); isWithinRange(+vp.power, votingPowerBeforeLp[v], 1); - } }); @@ -4125,16 +4136,17 @@ describe('Neutron / TGE / Auction', () => { 'airdropAuctionLockdropVesting', 'auctionLockdrop', 'auctionLockdropVesting', - 'airdropAuctionLockdropVestingMigration' + 'airdropAuctionLockdropVestingMigration', ]) { - const vp = await neutronChain.queryContract( - lockdropVaultForClAddr, - { - voting_power_at_height: { - address: tgeWallets[v].wallet.address.toString(), + const vp = + await neutronChain.queryContract( + lockdropVaultForClAddr, + { + voting_power_at_height: { + address: tgeWallets[v].wallet.address.toString(), + }, }, - }, - ); + ); isWithinRange(+vp.power, votingPowerBeforeLockdrop[v], 1); } }); @@ -4180,27 +4192,20 @@ describe('Neutron / TGE / Auction', () => { expect(resUsdc.code).toEqual(0); const [lpBalanceAtom, lpBalanceUsdc] = await Promise.all([ - neutronChain.queryContract( - ntrnAtomPclToken, - { - balance: { - address: tgeWallets['auctionVesting'].wallet.address.toString(), - }, + neutronChain.queryContract(ntrnAtomPclToken, { + balance: { + address: tgeWallets['auctionVesting'].wallet.address.toString(), }, - ), - neutronChain.queryContract( - ntrnUsdcPclToken, - { - balance: { - address: tgeWallets['auctionVesting'].wallet.address.toString(), - }, + }), + neutronChain.queryContract(ntrnUsdcPclToken, { + balance: { + address: tgeWallets['auctionVesting'].wallet.address.toString(), }, - ), + }), ]); // diff is big, near 40% isWithinRange(parseInt(lpBalanceAtom.balance), claimAtomLP, 50); - isWithinRange(parseInt(lpBalanceUsdc.balance), claimAtomLP, 50); - + isWithinRange(parseInt(lpBalanceUsdc.balance), claimUsdcLP, 50); }); }); }); @@ -5188,7 +5193,7 @@ type ConcentratedPoolParams = { // checks whether the value is in +/- range (inclusive) of the target with tolerance in %. const isWithinRange = (value: number, target: number, tolerance: number) => { if (target === 0 && value === 0) { - return + return true; } else if (target === 0) { expect(value).toBeGreaterThanOrEqual(-tolerance); expect(value).toBeLessThanOrEqual(tolerance); From 038891c1c4a0bafccba1ce356150cf9fffc7d34c Mon Sep 17 00:00:00 2001 From: sotnikov-s Date: Thu, 8 Feb 2024 10:32:57 +0300 Subject: [PATCH 20/87] add string to number conversion for VP --- src/testcases/run_in_band/tge.auction.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/testcases/run_in_band/tge.auction.test.ts b/src/testcases/run_in_band/tge.auction.test.ts index a6d29359..79d63d12 100644 --- a/src/testcases/run_in_band/tge.auction.test.ts +++ b/src/testcases/run_in_band/tge.auction.test.ts @@ -2675,7 +2675,7 @@ describe('Neutron / TGE / Auction', () => { }, }, ); - votingPowerBeforeLp[v] = vp.power; + votingPowerBeforeLp[v] = +vp.power; } }); @@ -2697,7 +2697,7 @@ describe('Neutron / TGE / Auction', () => { }, }, ); - votingPowerBeforeLockdrop[v] = vp.power; + votingPowerBeforeLockdrop[v] = +vp.power; } }); }); From ec582a29a678c9e4f5b3f73c32d436add33a676f Mon Sep 17 00:00:00 2001 From: sotnikov-s Date: Thu, 8 Feb 2024 10:33:14 +0300 Subject: [PATCH 21/87] add current_vesting_lp to contracts_tge_migration readme --- contracts_tge_migration/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/contracts_tge_migration/README.md b/contracts_tge_migration/README.md index 9dad0f81..a1bde8c4 100644 --- a/contracts_tge_migration/README.md +++ b/contracts_tge_migration/README.md @@ -3,3 +3,4 @@ This folder contains contracts involved in TGE liquidity migration which versions require to be fixed. - current_neutron_lockdrop — the pre-migration version of the lockdrop contract; +- current_vesting_lp — the pre-migration version of the vesting LP contract; From c79ca3849d7a4311dcf6b3c3444a0ce469652306 Mon Sep 17 00:00:00 2001 From: sotnikov-s Date: Thu, 8 Feb 2024 10:33:52 +0300 Subject: [PATCH 22/87] split isWithinRange to isWithinRangeRel and isWithinRangeAbs --- src/testcases/run_in_band/tge.auction.test.ts | 58 +++++++++---------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/src/testcases/run_in_band/tge.auction.test.ts b/src/testcases/run_in_band/tge.auction.test.ts index 79d63d12..50309f82 100644 --- a/src/testcases/run_in_band/tge.auction.test.ts +++ b/src/testcases/run_in_band/tge.auction.test.ts @@ -3104,7 +3104,7 @@ describe('Neutron / TGE / Auction', () => { }, ); console.log('lockdrop vp:' + vp.power); - isWithinRange( + isWithinRangeRel( +vp.power, votingPowerBeforeLockdrop['airdropAuctionLockdropVestingMigration'], 1, @@ -3159,7 +3159,7 @@ describe('Neutron / TGE / Auction', () => { ); // claimed rewards are transferred directly to the user // assume fluctuation because rewards amount increases every block - isWithinRange( + isWithinRangeRel( stateAfter.balances.user.astro - stateBefore.balances.user.astro, userAstroRewards, @@ -3265,7 +3265,7 @@ describe('Neutron / TGE / Auction', () => { stateAfter.balances.user.ntrn - stateBefore.balances.user.ntrn; // assume fluctuation because of uncertain unvested tokens amount - isWithinRange(balanceChange, expectedRewards, 0.1); + isWithinRangeRel(balanceChange, expectedRewards, 0.1); }); test('ntrn rewards sent by XYK lockdrop contract', async () => { @@ -3343,14 +3343,14 @@ describe('Neutron / TGE / Auction', () => { ).toBeGreaterThan(0); // equivalent of locked assets should be roughly equal before and after migration - isWithinRange( + isWithinRangeRel( stateAfter.pclUserLockups.mapped_lockup_infos[atomLockupKey] .expected_ntrn_share, stateBefore.xykUserLockups.mapped_lockup_infos[atomLockupKey] .expected_ntrn_share, 0.05, ); - isWithinRange( + isWithinRangeRel( stateAfter.pclUserLockups.mapped_lockup_infos[usdcLockupKey] .expected_ntrn_share, stateBefore.xykUserLockups.mapped_lockup_infos[usdcLockupKey] @@ -3573,7 +3573,7 @@ describe('Neutron / TGE / Auction', () => { ); // claimed rewards are transferred directly to the user // assume fluctuation because rewards amount increases every block - isWithinRange( + isWithinRangeRel( stateAfter.balances.user.astro - stateBefore.balances.user.astro, userAstroRewards, @@ -3773,14 +3773,14 @@ describe('Neutron / TGE / Auction', () => { ).toBeGreaterThan(0); // equivalent of locked assets should be roughly equal before and after migration - isWithinRange( + isWithinRangeRel( stateAfter.pclUserLockups.mapped_lockup_infos[atomLockupKey] .expected_ntrn_share, stateBefore.xykUserLockups.mapped_lockup_infos[atomLockupKey] .expected_ntrn_share, 0.05, ); - isWithinRange( + isWithinRangeRel( stateAfter.pclUserLockups.mapped_lockup_infos[usdcLockupKey] .expected_ntrn_share, stateBefore.xykUserLockups.mapped_lockup_infos[usdcLockupKey] @@ -3909,7 +3909,7 @@ describe('Neutron / TGE / Auction', () => { }, }, ); - isWithinRange(+vp.power, votingPowerBeforeLockdrop[v], 0.5); + isWithinRangeRel(+vp.power, votingPowerBeforeLockdrop[v], 0.5); }); let stateAfter: LiquidityMigrationState; @@ -4012,7 +4012,7 @@ describe('Neutron / TGE / Auction', () => { expect(vestingInfoAtom.info.released_amount).toEqual('0'); expect(vestingInfoUsdc.info.released_amount).toEqual('0'); - isWithinRange( + isWithinRangeRel( parseInt(vestingInfoAtom.info.schedules[0].end_point.amount), 3916, 0.5, @@ -4126,7 +4126,7 @@ describe('Neutron / TGE / Auction', () => { }, }, ); - isWithinRange(+vp.power, votingPowerBeforeLp[v], 1); + isWithinRangeRel(+vp.power, votingPowerBeforeLp[v], 1); } }); @@ -4147,7 +4147,7 @@ describe('Neutron / TGE / Auction', () => { }, }, ); - isWithinRange(+vp.power, votingPowerBeforeLockdrop[v], 1); + isWithinRangeRel(+vp.power, votingPowerBeforeLockdrop[v], 1); } }); @@ -4163,7 +4163,7 @@ describe('Neutron / TGE / Auction', () => { ]) { const member = new DaoMember(tgeWallets[v], daoMain); const vp = (await member.queryVotingPower()).power | 0; - isWithinRange(+vp, votingPowerBeforeLp[v], 1); + isWithinRangeRel(+vp, votingPowerBeforeLp[v], 1); } }); @@ -4204,8 +4204,8 @@ describe('Neutron / TGE / Auction', () => { }), ]); // diff is big, near 40% - isWithinRange(parseInt(lpBalanceAtom.balance), claimAtomLP, 50); - isWithinRange(parseInt(lpBalanceUsdc.balance), claimUsdcLP, 50); + isWithinRangeRel(parseInt(lpBalanceAtom.balance), claimAtomLP, 50); + isWithinRangeRel(parseInt(lpBalanceUsdc.balance), claimUsdcLP, 50); }); }); }); @@ -4447,7 +4447,7 @@ describe('Neutron / TGE / Auction', () => { ); // assume fluctuation because rewards amount increases every block - isWithinRange( + isWithinRangeRel( stateAfter.balances.user.astro - stateBefore.balances.user.astro, +stateBefore.pclUserLockups.claimable_generator_ntrn_debt, 0.5, @@ -4706,7 +4706,7 @@ describe('Neutron / TGE / Auction', () => { ); // assume fluctuation because rewards amount increases every block - isWithinRange( + isWithinRangeRel( stateAfter.balances.user.astro - stateBefore.balances.user.astro, +stateBefore.pclUserLockups.claimable_generator_ntrn_debt, 0.5, @@ -5190,16 +5190,16 @@ type ConcentratedPoolParams = { track_asset_balances: boolean; }; -// checks whether the value is in +/- range (inclusive) of the target with tolerance in %. -const isWithinRange = (value: number, target: number, tolerance: number) => { - if (target === 0 && value === 0) { - return true; - } else if (target === 0) { - expect(value).toBeGreaterThanOrEqual(-tolerance); - expect(value).toBeLessThanOrEqual(tolerance); - } else { - const absoluteTolerance = Math.abs(target * tolerance); - expect(value).toBeGreaterThanOrEqual(target - absoluteTolerance); - expect(value).toBeLessThanOrEqual(target + absoluteTolerance); - } +// checks whether the value is in +/- range (inclusive) from the target value with tolerance in %. +// e.g. 10% is tolerance = 0.1 +const isWithinRangeRel = (value: number, target: number, tolerance: number) => { + expect(value).toBeGreaterThanOrEqual(target - target * tolerance); + expect(value).toBeLessThanOrEqual(target + target * tolerance); +}; + +// checks whether the value is in +/- range (inclusive) from the target value with absolute tolerance. +// e.g. 500 tolerance means the value is expected be in [target-500;target+500]. +const isWithinRangeAbs = (value: number, target: number, tolerance: number) => { + expect(value).toBeGreaterThanOrEqual(target - tolerance); + expect(value).toBeLessThanOrEqual(target + tolerance); }; From c80e1931125975e56558aa7ba4a3d69230238e36 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Thu, 8 Feb 2024 10:30:11 -0300 Subject: [PATCH 23/87] proper tolerance, fix typos and print vp during the testrun --- src/testcases/run_in_band/tge.auction.test.ts | 49 +++++++++++-------- 1 file changed, 29 insertions(+), 20 deletions(-) diff --git a/src/testcases/run_in_band/tge.auction.test.ts b/src/testcases/run_in_band/tge.auction.test.ts index 50309f82..5bf106b7 100644 --- a/src/testcases/run_in_band/tge.auction.test.ts +++ b/src/testcases/run_in_band/tge.auction.test.ts @@ -2654,7 +2654,7 @@ describe('Neutron / TGE / Auction', () => { const member = new DaoMember(tgeWallets[v], daoMain); votingPowerBeforeOverall[v] = (await member.queryVotingPower()).power | 0; - votingPowerBeforeOverall[v] = +votingPowerBeforeOverall.power; + console.log(+votingPowerBeforeOverall[v]) } }); @@ -2671,7 +2671,7 @@ describe('Neutron / TGE / Auction', () => { { voting_power_at_height: { address: - tgeWallets['auctionVesting'].wallet.address.toString(), + tgeWallets[v].wallet.address.toString(), }, }, ); @@ -2693,7 +2693,7 @@ describe('Neutron / TGE / Auction', () => { { voting_power_at_height: { address: - tgeWallets['auctionVesting'].wallet.address.toString(), + tgeWallets[v].wallet.address.toString(), }, }, ); @@ -3072,7 +3072,7 @@ describe('Neutron / TGE / Auction', () => { }); it('migrate the user', async () => { - await cmInstantiator.executeContract( + const res = await cmInstantiator.executeContract( tgeMain.contracts.lockdrop, JSON.stringify({ migrate_liquidity_to_pcl_pools: { @@ -3088,9 +3088,11 @@ describe('Neutron / TGE / Auction', () => { amount: [{ denom: NEUTRON_DENOM, amount: '750000' }], }, ); + expect(res.code).toEqual(0); }); it('check user voting power', async () => { + const vp = await neutronChain.queryContract( lockdropVaultForClAddr, @@ -3107,7 +3109,7 @@ describe('Neutron / TGE / Auction', () => { isWithinRangeRel( +vp.power, votingPowerBeforeLockdrop['airdropAuctionLockdropVestingMigration'], - 1, + 0.05, ); }); @@ -3909,7 +3911,7 @@ describe('Neutron / TGE / Auction', () => { }, }, ); - isWithinRangeRel(+vp.power, votingPowerBeforeLockdrop[v], 0.5); + isWithinRangeRel(+vp.power, votingPowerBeforeLockdrop[v], 0.05); }); let stateAfter: LiquidityMigrationState; @@ -4012,11 +4014,6 @@ describe('Neutron / TGE / Auction', () => { expect(vestingInfoAtom.info.released_amount).toEqual('0'); expect(vestingInfoUsdc.info.released_amount).toEqual('0'); - isWithinRangeRel( - parseInt(vestingInfoAtom.info.schedules[0].end_point.amount), - 3916, - 0.5, - ); expect( parseInt(vestingInfoAtom.info.schedules[0].end_point.amount), ).toBeGreaterThan(0); @@ -4076,8 +4073,8 @@ describe('Neutron / TGE / Auction', () => { for (const v of [ 'airdropAuctionVesting', 'airdropAuctionLockdropVesting', - 'auctionLockdropVesting', 'auctionVesting', + 'auctionLockdropVesting', ]) { const resAtom = await cmInstantiator.executeContract( tgeMain.contracts.vestingAtomLp, @@ -4093,10 +4090,10 @@ describe('Neutron / TGE / Auction', () => { it('should migrate usdc', async () => { for (const v of [ - 'airdropAuctionLockdropVesting', - 'auctionLockdropVesting', 'airdropAuctionVesting', + 'airdropAuctionLockdropVesting', 'auctionVesting', + 'auctionLockdropVesting', ]) { const res = await cmInstantiator.executeContract( tgeMain.contracts.vestingUsdcLp, @@ -4126,11 +4123,15 @@ describe('Neutron / TGE / Auction', () => { }, }, ); - isWithinRangeRel(+vp.power, votingPowerBeforeLp[v], 1); + console.log('vesting lp'); + console.log('user:' + v); + console.log('vp before: ' + votingPowerBeforeLp[v]); + console.log('vp after: ' + vp.power); + // isWithinRangeRel(+vp.power, votingPowerBeforeLp[v], 0.05); } }); - it('check user voting power', async () => { + it('should compare voting power after migrtaion: lockdrop', async () => { for (const v of [ 'airdropAuctionLockdrop', 'airdropAuctionLockdropVesting', @@ -4147,7 +4148,11 @@ describe('Neutron / TGE / Auction', () => { }, }, ); - isWithinRangeRel(+vp.power, votingPowerBeforeLockdrop[v], 1); + console.log('lockdrop'); + console.log('user:' + tgeWallets[v].wallet.address.toString()); + console.log('vp before: ' + votingPowerBeforeLockdrop[v]); + console.log('vp after: ' + vp.power); + isWithinRangeRel(+vp.power, votingPowerBeforeLockdrop[v], 0.05); } }); @@ -4163,7 +4168,11 @@ describe('Neutron / TGE / Auction', () => { ]) { const member = new DaoMember(tgeWallets[v], daoMain); const vp = (await member.queryVotingPower()).power | 0; - isWithinRangeRel(+vp, votingPowerBeforeLp[v], 1); + console.log('overall') + console.log('user:' + v); + console.log('vp before: ' + votingPowerBeforeOverall[v]); + console.log('vp after: ' + vp); + isWithinRangeRel(+vp, votingPowerBeforeOverall[v], 0.05); } }); @@ -4204,8 +4213,8 @@ describe('Neutron / TGE / Auction', () => { }), ]); // diff is big, near 40% - isWithinRangeRel(parseInt(lpBalanceAtom.balance), claimAtomLP, 50); - isWithinRangeRel(parseInt(lpBalanceUsdc.balance), claimUsdcLP, 50); + isWithinRangeRel(parseInt(lpBalanceAtom.balance), claimAtomLP, 0.05); + isWithinRangeRel(parseInt(lpBalanceUsdc.balance), claimUsdcLP, 0.05); }); }); }); From 753c14b58d6b018f3398d3d160287b76d9ce9cd8 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Thu, 8 Feb 2024 10:35:54 -0300 Subject: [PATCH 24/87] lint --- src/testcases/run_in_band/tge.auction.test.ts | 25 +++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/src/testcases/run_in_band/tge.auction.test.ts b/src/testcases/run_in_band/tge.auction.test.ts index 5bf106b7..30361f78 100644 --- a/src/testcases/run_in_band/tge.auction.test.ts +++ b/src/testcases/run_in_band/tge.auction.test.ts @@ -2654,7 +2654,7 @@ describe('Neutron / TGE / Auction', () => { const member = new DaoMember(tgeWallets[v], daoMain); votingPowerBeforeOverall[v] = (await member.queryVotingPower()).power | 0; - console.log(+votingPowerBeforeOverall[v]) + console.log(+votingPowerBeforeOverall[v]); } }); @@ -2670,8 +2670,7 @@ describe('Neutron / TGE / Auction', () => { tgeMain.contracts.vestingLpVault, { voting_power_at_height: { - address: - tgeWallets[v].wallet.address.toString(), + address: tgeWallets[v].wallet.address.toString(), }, }, ); @@ -2692,8 +2691,7 @@ describe('Neutron / TGE / Auction', () => { tgeMain.contracts.lockdropVault, { voting_power_at_height: { - address: - tgeWallets[v].wallet.address.toString(), + address: tgeWallets[v].wallet.address.toString(), }, }, ); @@ -3092,7 +3090,7 @@ describe('Neutron / TGE / Auction', () => { }); it('check user voting power', async () => { - + neutronChain.blockWaiter.waitBlocks(1); const vp = await neutronChain.queryContract( lockdropVaultForClAddr, @@ -4111,7 +4109,6 @@ describe('Neutron / TGE / Auction', () => { for (const v of [ 'airdropAuctionVesting', 'airdropAuctionLockdropVesting', - 'auctionLockdropVesting', 'auctionVesting', ]) { const vp = @@ -4127,7 +4124,7 @@ describe('Neutron / TGE / Auction', () => { console.log('user:' + v); console.log('vp before: ' + votingPowerBeforeLp[v]); console.log('vp after: ' + vp.power); - // isWithinRangeRel(+vp.power, votingPowerBeforeLp[v], 0.05); + isWithinRangeRel(+vp.power, votingPowerBeforeLp[v], 0.05); } }); @@ -4168,7 +4165,7 @@ describe('Neutron / TGE / Auction', () => { ]) { const member = new DaoMember(tgeWallets[v], daoMain); const vp = (await member.queryVotingPower()).power | 0; - console.log('overall') + console.log('overall'); console.log('user:' + v); console.log('vp before: ' + votingPowerBeforeOverall[v]); console.log('vp after: ' + vp); @@ -5208,7 +5205,9 @@ const isWithinRangeRel = (value: number, target: number, tolerance: number) => { // checks whether the value is in +/- range (inclusive) from the target value with absolute tolerance. // e.g. 500 tolerance means the value is expected be in [target-500;target+500]. -const isWithinRangeAbs = (value: number, target: number, tolerance: number) => { - expect(value).toBeGreaterThanOrEqual(target - tolerance); - expect(value).toBeLessThanOrEqual(target + tolerance); -}; +// uncomment if you want to use this one +// const isWithinRangeAbs = (value: number, target: number, tolerance: number) => { +// expect(value).toBeGreaterThanOrEqual(target - tolerance); +// expect(value).toBeLessThanOrEqual(target + tolerance); +// }; + From 85fb5a778ba065bcb97c4403695e1219dfa5516e Mon Sep 17 00:00:00 2001 From: pr0n00gler Date: Fri, 9 Feb 2024 20:08:50 +0200 Subject: [PATCH 25/87] incentives contract --- .../astroport_incentives.wasm | Bin 0 -> 515599 bytes src/testcases/run_in_band/tge.auction.test.ts | 95 +++++++++++++++--- 2 files changed, 83 insertions(+), 12 deletions(-) create mode 100644 contracts_thirdparty/astroport_incentives.wasm diff --git a/contracts_thirdparty/astroport_incentives.wasm b/contracts_thirdparty/astroport_incentives.wasm new file mode 100644 index 0000000000000000000000000000000000000000..371ad055552afdb802f529a30ff0fb1d4c5c4816 GIT binary patch literal 515599 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

f4TsD@uL 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 { test('setup PCL pools', async () => { await cmInstantiator.executeContract( tgeMain.contracts.astroGenerator, + JSON.stringify({ + set_tokens_per_block: { + amount: '0', + }, + }), + ); + + await cmInstantiator.executeContract( + tgeMain.contracts.astroGenerator, + JSON.stringify({ + setup_pools: { + pools: [ + [ntrnAtomPclToken, '0'], + [ntrnUsdcPclToken, '0'], + ], + }, + }), + ); + + await cmInstantiator.executeContract( + tgeMain.contracts.astroFactory, + JSON.stringify({ + update_config: { + generator_address: tgeMain.contracts.astroIncentives, + }, + }), + ); + + await cmInstantiator.executeContract( + tgeMain.contracts.astroVesting, + JSON.stringify({ + register_vesting_accounts: { + vesting_accounts: [ + vestingAccount(tgeMain.contracts.astroIncentives, [ + vestingSchedule( + vestingSchedulePoint( + 0, + tgeMain.generatorRewardsTotal.toString(), + ), + ), + ]), + ], + }, + }), + [ + { + denom: tgeMain.astroDenom, + amount: tgeMain.generatorRewardsTotal.toString(), + }, + ], + ); + + await cmInstantiator.executeContract( + tgeMain.contracts.astroIncentives, + JSON.stringify({ + set_tokens_per_second: { + amount: tgeMain.generatorRewardsPerBlock.toString(), + }, + }), + ); + + await cmInstantiator.executeContract( + tgeMain.contracts.astroIncentives, JSON.stringify({ setup_pools: { pools: [ @@ -2855,7 +2921,7 @@ describe('Neutron / TGE / Auction', () => { xyk_lockdrop_contract: tgeMain.contracts.lockdrop, credits_contract: xykLockdropConfig.credits_contract, auction_contract: xykLockdropConfig.auction_contract, - generator: xykLockdropConfig.generator, + generator: tgeMain.contracts.astroIncentives, lockup_rewards_info: xykLockdropConfig.lockup_rewards_info, usdc_token: ntrnUsdcPclToken, atom_token: ntrnAtomPclToken, @@ -3044,6 +3110,7 @@ describe('Neutron / TGE / Auction', () => { usdcPclPair: ntrnUsdcPclPool, usdcPclLp: ntrnUsdcPclToken, generator: tgeMain.contracts.astroGenerator, + incentives: tgeMain.contracts.astroIncentives, }; }); @@ -4220,7 +4287,7 @@ describe('Neutron / TGE / Auction', () => { describe('check generator state', () => { it('check generator stake presence', async () => { const stakedAtomLp = await neutronChain.queryContract( - liqMigContracts.generator, + liqMigContracts.incentives, { deposit: { lp_token: liqMigContracts.atomPclLp, @@ -4231,7 +4298,7 @@ describe('Neutron / TGE / Auction', () => { expect(+stakedAtomLp).toBeGreaterThan(0); const stakedUsdcLp = await neutronChain.queryContract( - liqMigContracts.generator, + liqMigContracts.incentives, { deposit: { lp_token: liqMigContracts.usdcPclLp, @@ -4244,26 +4311,30 @@ describe('Neutron / TGE / Auction', () => { it('check generator rewards presence', async () => { const pendingAtomRewards = await neutronChain.queryContract( - liqMigContracts.generator, + liqMigContracts.incentives, { - pending_token: { + pending_rewards: { lp_token: liqMigContracts.atomPclLp, user: liqMigContracts.pclLockdrop, }, }, ); - expect(+pendingAtomRewards.pending).toBeGreaterThan(0); + expect( + pendingAtomRewards.reduce((sum, current) => sum + current.amount, 0), + ).toBeGreaterThan(0); const pendingUsdcRewards = await neutronChain.queryContract( - liqMigContracts.generator, + liqMigContracts.incentives, { - pending_token: { + pending_rewards: { lp_token: liqMigContracts.usdcPclLp, user: liqMigContracts.pclLockdrop, }, }, ); - expect(+pendingUsdcRewards.pending).toBeGreaterThan(0); + expect( + pendingUsdcRewards.reduce((sum, current) => sum + current.amount, 0), + ).toBeGreaterThan(0); }); }); @@ -4919,7 +4990,7 @@ const gatherLiquidityMigrationState = async ( }, )), pclUsdcStakedInGen: +(await chain.queryContract( - contracts.generator, + contracts.incentives, { deposit: { lp_token: contracts.usdcPclLp, @@ -4928,7 +4999,7 @@ const gatherLiquidityMigrationState = async ( }, )), pclAtomStakedInGen: +(await chain.queryContract( - contracts.generator, + contracts.incentives, { deposit: { lp_token: contracts.atomPclLp, @@ -4952,6 +5023,7 @@ type LiquidityMigrationContracts = { usdcPclPair: string; usdcPclLp: string; generator: string; + incentives: string; }; // Contains states of different contracts and balances related to TGE liquidity migration. @@ -5210,4 +5282,3 @@ const isWithinRangeRel = (value: number, target: number, tolerance: number) => { // expect(value).toBeGreaterThanOrEqual(target - tolerance); // expect(value).toBeLessThanOrEqual(target + tolerance); // }; - From e957e0b57aeaa36dca148b586aadd432650bc51d Mon Sep 17 00:00:00 2001 From: sotnikov-s Date: Mon, 12 Feb 2024 18:39:17 +0300 Subject: [PATCH 26/87] adjust lockdrop pcl to incentives contract rewards --- src/testcases/run_in_band/tge.auction.test.ts | 147 ++++++++++++++---- 1 file changed, 116 insertions(+), 31 deletions(-) diff --git a/src/testcases/run_in_band/tge.auction.test.ts b/src/testcases/run_in_band/tge.auction.test.ts index 2be8452d..dbb20cef 100644 --- a/src/testcases/run_in_band/tge.auction.test.ts +++ b/src/testcases/run_in_band/tge.auction.test.ts @@ -25,9 +25,10 @@ import { VestingAccountResponse, XykLockdropConfig, queryXykLockdropConfig, - queryLockdropPool, - LockdropPool, + queryXykLockdropPool, + LockdropXykPool, LockdropUserInfoResponse, + LockdropPclUserInfoResponse, } from '@neutron-org/neutronjsplus/dist/tge'; import { Dao, @@ -254,7 +255,11 @@ describe('Neutron / TGE / Auction', () => { ).genQaWal1, ); } + }); + + afterAll(async () => { console.log(`TGE participant wallets: ${JSON.stringify(tgeWallets)}`); + console.log('TGE contracts:', tgeMain.contracts); }); describe('Deploy', () => { @@ -335,8 +340,6 @@ describe('Neutron / TGE / Auction', () => { tgeMain.contracts.astroGenerator, ), ).rejects.toThrowError(/Unauthorized/); - - console.log('TGE contracts:', tgeMain.contracts); }); }); @@ -2892,19 +2895,19 @@ describe('Neutron / TGE / Auction', () => { describe('instantiate PCL contracts', () => { let xykLockdropConfig: XykLockdropConfig; - let xykLockdropUsdcPool: LockdropPool; - let xykLockdropAtomPool: LockdropPool; + let xykLockdropUsdcPool: LockdropXykPool; + let xykLockdropAtomPool: LockdropXykPool; it('retrieve XYK lockdrop contract state', async () => { xykLockdropConfig = await queryXykLockdropConfig( neutronChain, tgeMain.contracts.lockdrop, ); - xykLockdropUsdcPool = await queryLockdropPool( + xykLockdropUsdcPool = await queryXykLockdropPool( neutronChain, tgeMain.contracts.lockdrop, 'USDC', ); - xykLockdropAtomPool = await queryLockdropPool( + xykLockdropAtomPool = await queryXykLockdropPool( neutronChain, tgeMain.contracts.lockdrop, 'ATOM', @@ -3157,6 +3160,7 @@ describe('Neutron / TGE / Auction', () => { }); it('check user voting power', async () => { + await neutronChain.blockWaiter.waitBlocks(1); neutronChain.blockWaiter.waitBlocks(1); const vp = await neutronChain.queryContract( @@ -3378,7 +3382,7 @@ describe('Neutron / TGE / Auction', () => { describe('PCL user lockups', () => { test('no user lockup info before migration', async () => { expect(stateBefore.pclUserLockups).toMatchObject({ - claimable_generator_ntrn_debt: '0', + claimable_generator_astro_debt: '0', mapped_lockup_infos: {}, lockup_positions_index: 0, ntrn_transferred: false, @@ -3808,7 +3812,7 @@ describe('Neutron / TGE / Auction', () => { describe('PCL user lockups', () => { test('no user lockup info before migration', async () => { expect(stateBefore.pclUserLockups).toMatchObject({ - claimable_generator_ntrn_debt: '0', + claimable_generator_astro_debt: '0', mapped_lockup_infos: {}, lockup_positions_index: 0, ntrn_transferred: false, @@ -3967,6 +3971,7 @@ describe('Neutron / TGE / Auction', () => { }); it('check user voting power', async () => { + await neutronChain.blockWaiter.waitBlocks(1); const vp = await neutronChain.queryContract( lockdropVaultForClAddr, @@ -4000,7 +4005,7 @@ describe('Neutron / TGE / Auction', () => { test('no user lockup info in PCL lockdrop', async () => { expect(stateAfter.pclUserLockups).toMatchObject({ - claimable_generator_ntrn_debt: '0', + claimable_generator_astro_debt: '0', mapped_lockup_infos: {}, lockup_positions_index: 0, ntrn_transferred: false, @@ -4310,7 +4315,7 @@ describe('Neutron / TGE / Auction', () => { }); it('check generator rewards presence', async () => { - const pendingAtomRewards = await neutronChain.queryContract( + const pendingAtomRewards = await neutronChain.queryContract( liqMigContracts.incentives, { pending_rewards: { @@ -4320,10 +4325,10 @@ describe('Neutron / TGE / Auction', () => { }, ); expect( - pendingAtomRewards.reduce((sum, current) => sum + current.amount, 0), + pendingAtomRewards.reduce((sum, current) => sum + +current.amount, 0), ).toBeGreaterThan(0); - const pendingUsdcRewards = await neutronChain.queryContract( + const pendingUsdcRewards = await neutronChain.queryContract( liqMigContracts.incentives, { pending_rewards: { @@ -4333,7 +4338,7 @@ describe('Neutron / TGE / Auction', () => { }, ); expect( - pendingUsdcRewards.reduce((sum, current) => sum + current.amount, 0), + pendingUsdcRewards.reduce((sum, current) => sum + +current.amount, 0), ).toBeGreaterThan(0); }); }); @@ -4396,9 +4401,7 @@ describe('Neutron / TGE / Auction', () => { }, }), ), - ).rejects.toThrow( - /LockupInfoV1 not found: execute wasm contract failed/, - ); + ).rejects.toThrow(/LockupInfo not found: execute wasm contract failed/); }); let stateBefore: LiquidityMigrationState; @@ -4512,21 +4515,21 @@ describe('Neutron / TGE / Auction', () => { it('generator rewards', async () => { // sanity check expect( - +stateBefore.pclUserLockups.claimable_generator_ntrn_debt, + +stateBefore.pclUserLockups.claimable_generator_astro_debt, ).toBeGreaterThan(0); expect( - +stateBefore.pclUserLockups.claimable_generator_ntrn_debt, + +stateBefore.pclUserLockups.claimable_generator_astro_debt, ).toEqual( +stateBefore.pclUserLockups.mapped_lockup_infos[atomLockupKey] - .claimable_generator_astro_debt + + .claimable_astro_rewards_debt + +stateBefore.pclUserLockups.mapped_lockup_infos[usdcLockupKey] - .claimable_generator_astro_debt, + .claimable_astro_rewards_debt, ); // assume fluctuation because rewards amount increases every block isWithinRangeRel( stateAfter.balances.user.astro - stateBefore.balances.user.astro, - +stateBefore.pclUserLockups.claimable_generator_ntrn_debt, + +stateBefore.pclUserLockups.claimable_generator_astro_debt, 0.5, ); }); @@ -4771,21 +4774,21 @@ describe('Neutron / TGE / Auction', () => { it('generator rewards', async () => { // sanity check expect( - +stateBefore.pclUserLockups.claimable_generator_ntrn_debt, + +stateBefore.pclUserLockups.claimable_generator_astro_debt, ).toBeGreaterThan(0); expect( - +stateBefore.pclUserLockups.claimable_generator_ntrn_debt, + +stateBefore.pclUserLockups.claimable_generator_astro_debt, ).toEqual( +stateBefore.pclUserLockups.mapped_lockup_infos[atomLockupKey] - .claimable_generator_astro_debt + + .claimable_astro_rewards_debt + +stateBefore.pclUserLockups.mapped_lockup_infos[usdcLockupKey] - .claimable_generator_astro_debt, + .claimable_astro_rewards_debt, ); // assume fluctuation because rewards amount increases every block isWithinRangeRel( stateAfter.balances.user.astro - stateBefore.balances.user.astro, - +stateBefore.pclUserLockups.claimable_generator_ntrn_debt, + +stateBefore.pclUserLockups.claimable_generator_astro_debt, 0.5, ); }); @@ -4945,7 +4948,7 @@ const gatherLiquidityMigrationState = async ( address: migratingUser, }, }); - const pclLockdropUserInfo: LockdropUserInfoResponse = + const pclLockdropUserInfo: LockdropPclUserInfoResponse = await chain.queryContract(contracts.pclLockdrop, { user_info: { address: migratingUser, @@ -4953,7 +4956,7 @@ const gatherLiquidityMigrationState = async ( }); return { xykUserLockups: await transformUserInfo(chain, xykLockdropUserInfo), - pclUserLockups: await transformUserInfo(chain, pclLockdropUserInfo), + pclUserLockups: await transformPclUserInfo(chain, pclLockdropUserInfo), balances: { xykLockdrop: await getLiquidityMigrationBalances( chain, @@ -5031,7 +5034,7 @@ type LiquidityMigrationState = { // user's lockups stored in the XYK lockdrop contract's state xykUserLockups: ExpandedLockdropUserInfoResponse; // user's lockups stored in the PCL lockdrop contract's state - pclUserLockups: ExpandedLockdropUserInfoResponse; + pclUserLockups: ExpandedLockdropPclUserInfoResponse; balances: { xykLockdrop: LiquidityMigrationBalances; pclLockdrop: LiquidityMigrationBalances; @@ -5153,6 +5156,62 @@ const transformUserInfo = async ( }; }; +// Transforms a bit a user info response from a lockdrop contract to ease test assertions. +const transformPclUserInfo = async ( + chain: CosmosWrapper, + userInfo: LockdropPclUserInfoResponse, +): Promise => { + const mappedLockupInfos: Record< + string, + ExpandedLockdropPclLockUpInfoResponse + > = {}; + userInfo.lockup_infos.forEach(async (v) => { + const poolAddress = ( + await chain.queryContract(v.astroport_lp_token, { + minter: {}, + }) + ).minter; + const share = await chain.queryContract(poolAddress, { + share: { amount: v.lp_units_locked }, + }); + return (mappedLockupInfos[v.pool_type + v.duration.toString()] = { + astroport_lp_token: v.astroport_lp_token, + astroport_lp_transferred: v.astroport_lp_transferred, + astroport_lp_units: v.astroport_lp_units, + astro_rewards_debt: + v.generator_debt.find((v) => + (v[0] as NativeToken).native_token.denom.includes('/uastro'), + )?.[1] || '0', + claimable_astro_rewards_debt: + v.claimable_generator_debt.find((v) => + (v[0] as NativeToken).native_token.denom.includes('/uastro'), + )?.[1] || '0', + duration: v.duration, + lp_units_locked: v.lp_units_locked, + ntrn_rewards: v.ntrn_rewards, + pool_type: v.pool_type, + unlock_timestamp: v.unlock_timestamp, + withdrawal_flag: v.withdrawal_flag, + expected_ntrn_share: +share.filter( + (a) => (a.info as NativeToken).native_token.denom == NEUTRON_DENOM, + )[0].amount, + expected_paired_asset_share: +share.filter( + (a) => (a.info as NativeToken).native_token.denom != NEUTRON_DENOM, + )[0].amount, + }); + }); + return { + claimable_generator_astro_debt: + userInfo.claimable_generator_debt.find((v) => + (v[0] as NativeToken).native_token.denom.includes('/uastro'), + )?.[1] || '0', + mapped_lockup_infos: mappedLockupInfos, + lockup_positions_index: userInfo.lockup_positions_index, + ntrn_transferred: userInfo.ntrn_transferred, + total_ntrn_rewards: userInfo.total_ntrn_rewards, + }; +}; + type MinterResponse = { minter: string; cap: string | undefined; // Option @@ -5167,6 +5226,15 @@ type ExpandedLockdropUserInfoResponse = { total_ntrn_rewards: string; }; +// Just the same LockdropPclUserInfoResponse but with some additional info added. +type ExpandedLockdropPclUserInfoResponse = { + claimable_generator_astro_debt: string; + mapped_lockup_infos: Record; // pool_type + duration as a key + lockup_positions_index: number; + ntrn_transferred: boolean; + total_ntrn_rewards: string; +}; + // Just the same LockdropLockUpInfoResponse but with LP share fields added. type ExpandedLockdropLockUpInfoResponse = { astroport_lp_token: string; @@ -5186,6 +5254,23 @@ type ExpandedLockdropLockUpInfoResponse = { expected_paired_asset_share: number; // expected amount of paired asset received on liquidity withdrawal }; +// Just the same LockdropPclLockUpInfoResponse but with LP share fields and astro rewards added. +type ExpandedLockdropPclLockUpInfoResponse = { + pool_type: string; + lp_units_locked: string; // Uint128 + withdrawal_flag: boolean; + ntrn_rewards: string; // Uint128 + duration: number; + astro_rewards_debt: string; // Uint128 + claimable_astro_rewards_debt: string; // Uint128 + unlock_timestamp: number; + astroport_lp_units: string | null; + astroport_lp_token: string; + astroport_lp_transferred: string | null; + expected_ntrn_share: number; // expected amount of ntrn received on liquidity withdrawal + expected_paired_asset_share: number; // expected amount of paired asset received on liquidity withdrawal +}; + const deregisterPair = async ( instantiator: WalletWrapper, factoryAddr: string, From dd127838d8a1d4fdb597121507339bf799b7dc4b Mon Sep 17 00:00:00 2001 From: sotnikov-s Date: Tue, 13 Feb 2024 17:46:11 +0300 Subject: [PATCH 27/87] add test for incentives contract external rewards --- src/testcases/run_in_band/tge.auction.test.ts | 340 ++++++++++++------ 1 file changed, 232 insertions(+), 108 deletions(-) diff --git a/src/testcases/run_in_band/tge.auction.test.ts b/src/testcases/run_in_band/tge.auction.test.ts index dbb20cef..8b47dd50 100644 --- a/src/testcases/run_in_band/tge.auction.test.ts +++ b/src/testcases/run_in_band/tge.auction.test.ts @@ -6,6 +6,7 @@ import { NEUTRON_DENOM, IBC_USDC_DENOM, IBC_ATOM_DENOM, + getEventAttribute, } from '@neutron-org/neutronjsplus/dist/cosmos'; import { TestStateLocalCosmosTestNet } from '@neutron-org/neutronjsplus'; import { BroadcastTx200ResponseTxResponse } from '@cosmos-client/core/cjs/openapi/api'; @@ -48,6 +49,10 @@ import { vestingSchedule, vestingSchedulePoint, } from '@neutron-org/neutronjsplus/dist/types'; +import { + msgMintDenom, + msgCreateDenom, +} from '@neutron-org/neutronjsplus/dist/tokenfactory'; import { getHeight } from '@neutron-org/neutronjsplus/dist/env'; @@ -65,6 +70,9 @@ const FEE_SIZE = 10_000; // airdrop amount to check we do pay more than airdrop amount during lockdrop reward claiming const TINY_AIRDROP_AMOUNT = 100; +const EXT_REWARD_SUBDENOM = 'urwrd'; +const EXT_REWARD_AMOUNT = '1000000000'; + const getLpSize = (token1: number, token2: number) => (Math.sqrt(token1 * token2) - MIN_LIQUDITY) | 0; @@ -2815,84 +2823,129 @@ describe('Neutron / TGE / Auction', () => { ); }); - test('setup PCL pools', async () => { - await cmInstantiator.executeContract( - tgeMain.contracts.astroGenerator, - JSON.stringify({ - set_tokens_per_block: { - amount: '0', - }, - }), - ); - - await cmInstantiator.executeContract( - tgeMain.contracts.astroGenerator, - JSON.stringify({ - setup_pools: { - pools: [ - [ntrnAtomPclToken, '0'], - [ntrnUsdcPclToken, '0'], - ], - }, - }), - ); + describe('reschedule staking rewards', () => { + test('deactivate generator rewards', async () => { + await cmInstantiator.executeContract( + tgeMain.contracts.astroGenerator, + JSON.stringify({ + set_tokens_per_block: { + amount: '0', + }, + }), + ); - await cmInstantiator.executeContract( - tgeMain.contracts.astroFactory, - JSON.stringify({ - update_config: { - generator_address: tgeMain.contracts.astroIncentives, - }, - }), - ); + await cmInstantiator.executeContract( + tgeMain.contracts.astroGenerator, + JSON.stringify({ + setup_pools: { + pools: [ + [ntrnAtomPclToken, '0'], + [ntrnUsdcPclToken, '0'], + ], + }, + }), + ); + }); - await cmInstantiator.executeContract( - tgeMain.contracts.astroVesting, - JSON.stringify({ - register_vesting_accounts: { - vesting_accounts: [ - vestingAccount(tgeMain.contracts.astroIncentives, [ - vestingSchedule( - vestingSchedulePoint( - 0, - tgeMain.generatorRewardsTotal.toString(), + test('activate incentives contract rewards', async () => { + await cmInstantiator.executeContract( + tgeMain.contracts.astroFactory, + JSON.stringify({ + update_config: { + generator_address: tgeMain.contracts.astroIncentives, + }, + }), + ); + await cmInstantiator.executeContract( + tgeMain.contracts.astroVesting, + JSON.stringify({ + register_vesting_accounts: { + vesting_accounts: [ + vestingAccount(tgeMain.contracts.astroIncentives, [ + vestingSchedule( + vestingSchedulePoint( + 0, + tgeMain.generatorRewardsTotal.toString(), + ), ), - ), - ]), - ], - }, - }), - [ - { - denom: tgeMain.astroDenom, - amount: tgeMain.generatorRewardsTotal.toString(), - }, - ], - ); + ]), + ], + }, + }), + [ + { + denom: tgeMain.astroDenom, + amount: tgeMain.generatorRewardsTotal.toString(), + }, + ], + ); + await cmInstantiator.executeContract( + tgeMain.contracts.astroIncentives, + JSON.stringify({ + set_tokens_per_second: { + amount: tgeMain.generatorRewardsPerBlock.toString(), + }, + }), + ); + }); - await cmInstantiator.executeContract( - tgeMain.contracts.astroIncentives, - JSON.stringify({ - set_tokens_per_second: { - amount: tgeMain.generatorRewardsPerBlock.toString(), - }, - }), - ); + describe('add external rewards for incentives contract', () => { + let extRewardDenom: string; + test('create external rewards token', async () => { + const resp = await msgCreateDenom( + cmInstantiator, + cmInstantiator.wallet.address.toString(), + EXT_REWARD_SUBDENOM, + ); + extRewardDenom = getEventAttribute( + (resp as any).events, + 'create_denom', + 'new_token_denom', + ); + await msgMintDenom( + cmInstantiator, + cmInstantiator.wallet.address.toString(), + { + denom: extRewardDenom, + amount: EXT_REWARD_AMOUNT, + }, + ); + }); - await cmInstantiator.executeContract( - tgeMain.contracts.astroIncentives, - JSON.stringify({ - setup_pools: { - pools: [ - [ntrnAtomPclToken, '1'], - [ntrnUsdcPclToken, '1'], - ], - }, - }), - ); + // incentivize only NTRN/ATOM pair + test('add external rewards for incentives contract', async () => { + await cmInstantiator.executeContract( + tgeMain.contracts.astroIncentives, + JSON.stringify({ + incentivize: { + lp_token: ntrnAtomPclToken, + schedule: { + reward: nativeToken(extRewardDenom, EXT_REWARD_AMOUNT), + duration_periods: 1, // for one epoch + }, + }, + }), + [{ denom: extRewardDenom, amount: EXT_REWARD_AMOUNT }], + ); + }); + }); }); }); + test('setup PCL pools', async () => { + await cmInstantiator.executeContract( + tgeMain.contracts.astroIncentives, + JSON.stringify({ + setup_pools: { + pools: [ + [ntrnAtomPclToken, '1'], + [ntrnUsdcPclToken, '1'], + ], + }, + }), + ); + }); + describe('instantiate PCL contracts', () => { let xykLockdropConfig: XykLockdropConfig; let xykLockdropUsdcPool: LockdropXykPool; @@ -4512,26 +4565,49 @@ describe('Neutron / TGE / Auction', () => { describe('funds flow', () => { const atomLockupKey = 'ATOM1'; const usdcLockupKey = 'USDC2'; - it('generator rewards', async () => { - // sanity check - expect( - +stateBefore.pclUserLockups.claimable_generator_astro_debt, - ).toBeGreaterThan(0); - expect( - +stateBefore.pclUserLockups.claimable_generator_astro_debt, - ).toEqual( - +stateBefore.pclUserLockups.mapped_lockup_infos[atomLockupKey] - .claimable_astro_rewards_debt + - +stateBefore.pclUserLockups.mapped_lockup_infos[usdcLockupKey] - .claimable_astro_rewards_debt, - ); + describe('generator rewards', () => { + it('astro', async () => { + // sanity check + expect( + +stateBefore.pclUserLockups.claimable_generator_astro_debt, + ).toBeGreaterThan(0); + expect( + +stateBefore.pclUserLockups.claimable_generator_astro_debt, + ).toEqual( + +stateBefore.pclUserLockups.mapped_lockup_infos[atomLockupKey] + .claimable_astro_rewards_debt + + +stateBefore.pclUserLockups.mapped_lockup_infos[usdcLockupKey] + .claimable_astro_rewards_debt, + ); - // assume fluctuation because rewards amount increases every block - isWithinRangeRel( - stateAfter.balances.user.astro - stateBefore.balances.user.astro, - +stateBefore.pclUserLockups.claimable_generator_astro_debt, - 0.5, - ); + // assume fluctuation because rewards amount increases every block + isWithinRangeRel( + stateAfter.balances.user.astro - stateBefore.balances.user.astro, + +stateBefore.pclUserLockups.claimable_generator_astro_debt, + 0.5, + ); + }); + + it('external rewards', async () => { + // sanity check + expect( + +stateBefore.pclUserLockups.claimable_generator_external_debt, + ).toBeGreaterThan(0); + expect( + +stateBefore.pclUserLockups.claimable_generator_external_debt, + ).toEqual( + +stateBefore.pclUserLockups.mapped_lockup_infos[atomLockupKey] // only atom cuz usdc is not incentivized + .claimable_external_rewards_debt, + ); + + // assume fluctuation because rewards amount increases every block + isWithinRangeRel( + stateAfter.balances.user.external_rewards - + stateBefore.balances.user.external_rewards, + +stateBefore.pclUserLockups.claimable_generator_external_debt, + 0.5, + ); + }); }); it('lp tokens staked in generator', async () => { @@ -4771,26 +4847,49 @@ describe('Neutron / TGE / Auction', () => { describe('funds flow', () => { const atomLockupKey = 'ATOM1'; const usdcLockupKey = 'USDC1'; - it('generator rewards', async () => { - // sanity check - expect( - +stateBefore.pclUserLockups.claimable_generator_astro_debt, - ).toBeGreaterThan(0); - expect( - +stateBefore.pclUserLockups.claimable_generator_astro_debt, - ).toEqual( - +stateBefore.pclUserLockups.mapped_lockup_infos[atomLockupKey] - .claimable_astro_rewards_debt + - +stateBefore.pclUserLockups.mapped_lockup_infos[usdcLockupKey] - .claimable_astro_rewards_debt, - ); + describe('generator rewards', () => { + it('astro', async () => { + // sanity check + expect( + +stateBefore.pclUserLockups.claimable_generator_astro_debt, + ).toBeGreaterThan(0); + expect( + +stateBefore.pclUserLockups.claimable_generator_astro_debt, + ).toEqual( + +stateBefore.pclUserLockups.mapped_lockup_infos[atomLockupKey] + .claimable_astro_rewards_debt + + +stateBefore.pclUserLockups.mapped_lockup_infos[usdcLockupKey] + .claimable_astro_rewards_debt, + ); - // assume fluctuation because rewards amount increases every block - isWithinRangeRel( - stateAfter.balances.user.astro - stateBefore.balances.user.astro, - +stateBefore.pclUserLockups.claimable_generator_astro_debt, - 0.5, - ); + // assume fluctuation because rewards amount increases every block + isWithinRangeRel( + stateAfter.balances.user.astro - stateBefore.balances.user.astro, + +stateBefore.pclUserLockups.claimable_generator_astro_debt, + 0.5, + ); + }); + + it('external rewards', async () => { + // sanity check + expect( + +stateBefore.pclUserLockups.claimable_generator_external_debt, + ).toBeGreaterThan(0); + expect( + +stateBefore.pclUserLockups.claimable_generator_external_debt, + ).toEqual( + +stateBefore.pclUserLockups.mapped_lockup_infos[atomLockupKey] // only atom cuz usdc is not incentivized + .claimable_external_rewards_debt, + ); + + // assume fluctuation because rewards amount increases every block + isWithinRangeRel( + stateAfter.balances.user.external_rewards - + stateBefore.balances.user.external_rewards, + +stateBefore.pclUserLockups.claimable_generator_external_debt, + 0.5, + ); + }); }); it('lp tokens staked in generator', async () => { @@ -5060,6 +5159,7 @@ type LiquidityMigrationBalances = { usdcPclPairLp: number; // NTRN/USDC PCL pair LP tokens atomPclPairLp: number; // NTRN/ATOM PCL pair LP tokens astro: number; // balance in astro reward token + external_rewards: number; // balance in external reward token }; // Makes a number of queries for balances in all assets involved in TGE liquidity migration process. @@ -5107,6 +5207,11 @@ const getLiquidityMigrationBalances = async ( }) ).astro_token.native_token.denom, ), + external_rewards: +( + (await chain.queryBalances(address)).balances.find((b) => + b.denom?.includes(EXT_REWARD_SUBDENOM), + )?.amount || '0' + ), }); // Transforms a bit a user info response from a lockdrop contract to ease test assertions. @@ -5186,6 +5291,18 @@ const transformPclUserInfo = async ( v.claimable_generator_debt.find((v) => (v[0] as NativeToken).native_token.denom.includes('/uastro'), )?.[1] || '0', + external_rewards_debt: + v.generator_debt.find((v) => + (v[0] as NativeToken).native_token.denom.includes( + EXT_REWARD_SUBDENOM, + ), + )?.[1] || '0', + claimable_external_rewards_debt: + v.claimable_generator_debt.find((v) => + (v[0] as NativeToken).native_token.denom.includes( + EXT_REWARD_SUBDENOM, + ), + )?.[1] || '0', duration: v.duration, lp_units_locked: v.lp_units_locked, ntrn_rewards: v.ntrn_rewards, @@ -5205,6 +5322,10 @@ const transformPclUserInfo = async ( userInfo.claimable_generator_debt.find((v) => (v[0] as NativeToken).native_token.denom.includes('/uastro'), )?.[1] || '0', + claimable_generator_external_debt: + userInfo.claimable_generator_debt.find((v) => + (v[0] as NativeToken).native_token.denom.includes(EXT_REWARD_SUBDENOM), + )?.[1] || '0', mapped_lockup_infos: mappedLockupInfos, lockup_positions_index: userInfo.lockup_positions_index, ntrn_transferred: userInfo.ntrn_transferred, @@ -5229,6 +5350,7 @@ type ExpandedLockdropUserInfoResponse = { // Just the same LockdropPclUserInfoResponse but with some additional info added. type ExpandedLockdropPclUserInfoResponse = { claimable_generator_astro_debt: string; + claimable_generator_external_debt: string; mapped_lockup_infos: Record; // pool_type + duration as a key lockup_positions_index: number; ntrn_transferred: boolean; @@ -5263,6 +5385,8 @@ type ExpandedLockdropPclLockUpInfoResponse = { duration: number; astro_rewards_debt: string; // Uint128 claimable_astro_rewards_debt: string; // Uint128 + external_rewards_debt: string; // Uint128 + claimable_external_rewards_debt: string; // Uint128 unlock_timestamp: number; astroport_lp_units: string | null; astroport_lp_token: string; From 7e9514c1d040060373a33e8801d3cb393d184b4e Mon Sep 17 00:00:00 2001 From: pr0n00gler Date: Thu, 22 Feb 2024 23:35:43 +0200 Subject: [PATCH 28/87] field renamings due to generator -> incentives changes --- src/testcases/run_in_band/tge.auction.test.ts | 82 ++++++++++--------- 1 file changed, 42 insertions(+), 40 deletions(-) diff --git a/src/testcases/run_in_band/tge.auction.test.ts b/src/testcases/run_in_band/tge.auction.test.ts index 8b47dd50..041b2f76 100644 --- a/src/testcases/run_in_band/tge.auction.test.ts +++ b/src/testcases/run_in_band/tge.auction.test.ts @@ -2977,7 +2977,7 @@ describe('Neutron / TGE / Auction', () => { xyk_lockdrop_contract: tgeMain.contracts.lockdrop, credits_contract: xykLockdropConfig.credits_contract, auction_contract: xykLockdropConfig.auction_contract, - generator: tgeMain.contracts.astroIncentives, + incentives: tgeMain.contracts.astroIncentives, lockup_rewards_info: xykLockdropConfig.lockup_rewards_info, usdc_token: ntrnUsdcPclToken, atom_token: ntrnAtomPclToken, @@ -3435,7 +3435,7 @@ describe('Neutron / TGE / Auction', () => { describe('PCL user lockups', () => { test('no user lockup info before migration', async () => { expect(stateBefore.pclUserLockups).toMatchObject({ - claimable_generator_astro_debt: '0', + claimable_incentives_debt: '0', mapped_lockup_infos: {}, lockup_positions_index: 0, ntrn_transferred: false, @@ -3865,7 +3865,7 @@ describe('Neutron / TGE / Auction', () => { describe('PCL user lockups', () => { test('no user lockup info before migration', async () => { expect(stateBefore.pclUserLockups).toMatchObject({ - claimable_generator_astro_debt: '0', + claimable_incentives_debt: '0', mapped_lockup_infos: {}, lockup_positions_index: 0, ntrn_transferred: false, @@ -4058,7 +4058,7 @@ describe('Neutron / TGE / Auction', () => { test('no user lockup info in PCL lockdrop', async () => { expect(stateAfter.pclUserLockups).toMatchObject({ - claimable_generator_astro_debt: '0', + claimable_incentives_debt: '0', mapped_lockup_infos: {}, lockup_positions_index: 0, ntrn_transferred: false, @@ -4170,6 +4170,7 @@ describe('Neutron / TGE / Auction', () => { cl_pair: ntrnAtomPclPool, new_lp_token: ntrnAtomPclToken, pcl_vesting: atomVestingLpAddr, + dust_threshold: '0', }, ); expect(res.code).toEqual(0); @@ -4187,6 +4188,7 @@ describe('Neutron / TGE / Auction', () => { cl_pair: ntrnUsdcPclPool, new_lp_token: ntrnUsdcPclToken, pcl_vesting: usdcVestingLpAddr, + dust_threshold: '0', }, ); expect(res.code).toEqual(0); @@ -4569,21 +4571,21 @@ describe('Neutron / TGE / Auction', () => { it('astro', async () => { // sanity check expect( - +stateBefore.pclUserLockups.claimable_generator_astro_debt, + +stateBefore.pclUserLockups.claimable_incentives_debt, ).toBeGreaterThan(0); expect( - +stateBefore.pclUserLockups.claimable_generator_astro_debt, + +stateBefore.pclUserLockups.claimable_incentives_debt, ).toEqual( +stateBefore.pclUserLockups.mapped_lockup_infos[atomLockupKey] - .claimable_astro_rewards_debt + + .claimable_incentives_debt + +stateBefore.pclUserLockups.mapped_lockup_infos[usdcLockupKey] - .claimable_astro_rewards_debt, + .claimable_incentives_debt, ); // assume fluctuation because rewards amount increases every block isWithinRangeRel( stateAfter.balances.user.astro - stateBefore.balances.user.astro, - +stateBefore.pclUserLockups.claimable_generator_astro_debt, + +stateBefore.pclUserLockups.claimable_incentives_debt, 0.5, ); }); @@ -4591,20 +4593,20 @@ describe('Neutron / TGE / Auction', () => { it('external rewards', async () => { // sanity check expect( - +stateBefore.pclUserLockups.claimable_generator_external_debt, + +stateBefore.pclUserLockups.claimable_incentives_external_debt, ).toBeGreaterThan(0); expect( - +stateBefore.pclUserLockups.claimable_generator_external_debt, + +stateBefore.pclUserLockups.claimable_incentives_external_debt, ).toEqual( +stateBefore.pclUserLockups.mapped_lockup_infos[atomLockupKey] // only atom cuz usdc is not incentivized - .claimable_external_rewards_debt, + .claimable_external_incentives_rewards_debt, ); // assume fluctuation because rewards amount increases every block isWithinRangeRel( stateAfter.balances.user.external_rewards - stateBefore.balances.user.external_rewards, - +stateBefore.pclUserLockups.claimable_generator_external_debt, + +stateBefore.pclUserLockups.claimable_incentives_external_debt, 0.5, ); }); @@ -4851,21 +4853,21 @@ describe('Neutron / TGE / Auction', () => { it('astro', async () => { // sanity check expect( - +stateBefore.pclUserLockups.claimable_generator_astro_debt, + +stateBefore.pclUserLockups.claimable_incentives_debt, ).toBeGreaterThan(0); expect( - +stateBefore.pclUserLockups.claimable_generator_astro_debt, + +stateBefore.pclUserLockups.claimable_incentives_debt, ).toEqual( +stateBefore.pclUserLockups.mapped_lockup_infos[atomLockupKey] - .claimable_astro_rewards_debt + + .claimable_incentives_debt + +stateBefore.pclUserLockups.mapped_lockup_infos[usdcLockupKey] - .claimable_astro_rewards_debt, + .claimable_incentives_debt, ); // assume fluctuation because rewards amount increases every block isWithinRangeRel( stateAfter.balances.user.astro - stateBefore.balances.user.astro, - +stateBefore.pclUserLockups.claimable_generator_astro_debt, + +stateBefore.pclUserLockups.claimable_incentives_debt, 0.5, ); }); @@ -4873,20 +4875,20 @@ describe('Neutron / TGE / Auction', () => { it('external rewards', async () => { // sanity check expect( - +stateBefore.pclUserLockups.claimable_generator_external_debt, + +stateBefore.pclUserLockups.claimable_incentives_external_debt, ).toBeGreaterThan(0); expect( - +stateBefore.pclUserLockups.claimable_generator_external_debt, + +stateBefore.pclUserLockups.claimable_incentives_external_debt, ).toEqual( +stateBefore.pclUserLockups.mapped_lockup_infos[atomLockupKey] // only atom cuz usdc is not incentivized - .claimable_external_rewards_debt, + .claimable_external_incentives_rewards_debt, ); // assume fluctuation because rewards amount increases every block isWithinRangeRel( stateAfter.balances.user.external_rewards - stateBefore.balances.user.external_rewards, - +stateBefore.pclUserLockups.claimable_generator_external_debt, + +stateBefore.pclUserLockups.claimable_incentives_external_debt, 0.5, ); }); @@ -5283,22 +5285,22 @@ const transformPclUserInfo = async ( astroport_lp_token: v.astroport_lp_token, astroport_lp_transferred: v.astroport_lp_transferred, astroport_lp_units: v.astroport_lp_units, - astro_rewards_debt: - v.generator_debt.find((v) => + incentives_debt: + v.incentives_debt.find((v) => (v[0] as NativeToken).native_token.denom.includes('/uastro'), )?.[1] || '0', - claimable_astro_rewards_debt: - v.claimable_generator_debt.find((v) => + claimable_incentives_debt: + v.claimable_incentives_debt.find((v) => (v[0] as NativeToken).native_token.denom.includes('/uastro'), )?.[1] || '0', - external_rewards_debt: - v.generator_debt.find((v) => + external_incentives_rewards_debt: + v.incentives_debt.find((v) => (v[0] as NativeToken).native_token.denom.includes( EXT_REWARD_SUBDENOM, ), )?.[1] || '0', - claimable_external_rewards_debt: - v.claimable_generator_debt.find((v) => + claimable_external_incentives_rewards_debt: + v.claimable_incentives_debt.find((v) => (v[0] as NativeToken).native_token.denom.includes( EXT_REWARD_SUBDENOM, ), @@ -5318,12 +5320,12 @@ const transformPclUserInfo = async ( }); }); return { - claimable_generator_astro_debt: - userInfo.claimable_generator_debt.find((v) => + claimable_incentives_debt: + userInfo.claimable_incentives_debt.find((v) => (v[0] as NativeToken).native_token.denom.includes('/uastro'), )?.[1] || '0', - claimable_generator_external_debt: - userInfo.claimable_generator_debt.find((v) => + claimable_incentives_external_debt: + userInfo.claimable_incentives_debt.find((v) => (v[0] as NativeToken).native_token.denom.includes(EXT_REWARD_SUBDENOM), )?.[1] || '0', mapped_lockup_infos: mappedLockupInfos, @@ -5349,8 +5351,8 @@ type ExpandedLockdropUserInfoResponse = { // Just the same LockdropPclUserInfoResponse but with some additional info added. type ExpandedLockdropPclUserInfoResponse = { - claimable_generator_astro_debt: string; - claimable_generator_external_debt: string; + claimable_incentives_debt: string; + claimable_incentives_external_debt: string; mapped_lockup_infos: Record; // pool_type + duration as a key lockup_positions_index: number; ntrn_transferred: boolean; @@ -5383,10 +5385,10 @@ type ExpandedLockdropPclLockUpInfoResponse = { withdrawal_flag: boolean; ntrn_rewards: string; // Uint128 duration: number; - astro_rewards_debt: string; // Uint128 - claimable_astro_rewards_debt: string; // Uint128 - external_rewards_debt: string; // Uint128 - claimable_external_rewards_debt: string; // Uint128 + incentives_debt: string; // Uint128 + claimable_incentives_debt: string; // Uint128 + external_incentives_rewards_debt: string; // Uint128 + claimable_external_incentives_rewards_debt: string; // Uint128 unlock_timestamp: number; astroport_lp_units: string | null; astroport_lp_token: string; From 4d1c7ef82c88ac50f64c33eb91812e5aecf6c70c Mon Sep 17 00:00:00 2001 From: sotnikov-s Date: Wed, 28 Feb 2024 14:02:19 +0300 Subject: [PATCH 29/87] add current neutron reserve contract --- .../current_neutron_reserve.wasm | Bin 0 -> 235501 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 contracts_tge_migration/current_neutron_reserve.wasm diff --git a/contracts_tge_migration/current_neutron_reserve.wasm b/contracts_tge_migration/current_neutron_reserve.wasm new file mode 100644 index 0000000000000000000000000000000000000000..c503cc4286ae468c22bddbf548d936dc6f5f732d GIT binary patch literal 235501 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 literal 0 HcmV?d00001 From 2c8056fd343aa7dc44c1cde71fa05745d6446960 Mon Sep 17 00:00:00 2001 From: sotnikov-s Date: Wed, 28 Feb 2024 14:03:00 +0300 Subject: [PATCH 30/87] add reserve contract migration --- src/testcases/run_in_band/tge.auction.test.ts | 198 +++++++++++++++++- 1 file changed, 192 insertions(+), 6 deletions(-) diff --git a/src/testcases/run_in_band/tge.auction.test.ts b/src/testcases/run_in_band/tge.auction.test.ts index 041b2f76..cc158fd0 100644 --- a/src/testcases/run_in_band/tge.auction.test.ts +++ b/src/testcases/run_in_band/tge.auction.test.ts @@ -73,6 +73,9 @@ const TINY_AIRDROP_AMOUNT = 100; const EXT_REWARD_SUBDENOM = 'urwrd'; const EXT_REWARD_AMOUNT = '1000000000'; +const NEUTRON_DAO_ADDR = + 'neutron1suhgf5svhu4usrurvxzlgn54ksxmn8gljarjtxqnapv8kjnp4nrstdxvff'; + const getLpSize = (token1: number, token2: number) => (Math.sqrt(token1 * token2) - MIN_LIQUDITY) | 0; @@ -168,7 +171,6 @@ describe('Neutron / TGE / Auction', () => { let cmTokenManager: WalletWrapper; let cmStranger: WalletWrapper; const tgeWallets: Record = {}; - let reserveAddress: string; let atomBalance = 0; let usdcBalance = 0; let ntrnAtomSize = 0; @@ -180,6 +182,7 @@ describe('Neutron / TGE / Auction', () => { let tgeEndHeight = 0; let daoMember1: DaoMember; let daoMain: Dao; + let reserveContract: string; let ntrnAtomPclPool: string; let ntrnAtomPclToken: string; let ntrnUsdcPclPool: string; @@ -191,8 +194,7 @@ describe('Neutron / TGE / Auction', () => { beforeAll(async () => { testState = new TestStateLocalCosmosTestNet(config); await testState.init(); - reserveAddress = - testState.wallets.qaNeutronThree.genQaWal1.address.toString(); + neutronChain = new CosmosWrapper( testState.sdk1, testState.blockWaiter1, @@ -216,11 +218,31 @@ describe('Neutron / TGE / Auction', () => { daoMain = new Dao(neutronChain, daoContracts); daoMember1 = new DaoMember(cmInstantiator, daoMain); await daoMember1.bondFunds('10000'); + + const reserveCodeID = await cmInstantiator.storeWasm( + NeutronContract.RESERVE_CURRENT, + ); + const res = await cmInstantiator.instantiateContract( + reserveCodeID, + JSON.stringify({ + main_dao_address: NEUTRON_DAO_ADDR, + denom: NEUTRON_DENOM, + distribution_rate: '0.23', + min_period: 1000, + distribution_contract: cmInstantiator.wallet.address.toString(), + treasury_contract: cmInstantiator.wallet.address.toString(), + security_dao_address: cmInstantiator.wallet.address.toString(), + vesting_denominator: '100000000000', + }), + 'reserve', + ); + reserveContract = res[0]._contract_address; + tgeMain = new Tge( neutronChain, cmInstantiator, cmTokenManager, - reserveAddress, + reserveContract, IBC_ATOM_DENOM, IBC_USDC_DENOM, NEUTRON_DENOM, @@ -1310,7 +1332,7 @@ describe('Neutron / TGE / Auction', () => { tgeMain.pairs.atom_ntrn.liquidity, { balance: { - address: reserveAddress, + address: reserveContract, }, }, ), @@ -1318,7 +1340,7 @@ describe('Neutron / TGE / Auction', () => { tgeMain.pairs.usdc_ntrn.liquidity, { balance: { - address: reserveAddress, + address: reserveContract, }, }, ), @@ -3047,6 +3069,29 @@ describe('Neutron / TGE / Auction', () => { }), ); }); + + let newReserveCodeID: number; + it('store new reserve contract version', async () => { + newReserveCodeID = await cmInstantiator.storeWasm( + NeutronContract.RESERVE, + ); + }); + it('migrate reserve', async () => { + await cmInstantiator.migrateContract( + reserveContract, + newReserveCodeID, + JSON.stringify({ + max_slippage: '0.05', // 5% + ntrn_denom: NEUTRON_DENOM, + atom_denom: IBC_ATOM_DENOM, + ntrn_atom_xyk_pair: tgeMain.pairs.atom_ntrn.contract, + ntrn_atom_cl_pair: ntrnAtomPclPool, + usdc_denom: IBC_USDC_DENOM, + ntrn_usdc_xyk_pair: tgeMain.pairs.usdc_ntrn.contract, + ntrn_usdc_cl_pair: ntrnUsdcPclPool, + }), + ); + }); }); describe('deploy new LP and Lockdrop vaults; add them to dao', () => { @@ -3152,6 +3197,72 @@ describe('Neutron / TGE / Auction', () => { }); }); + describe('execute migration handlers: reserve', () => { + let sharesBefore: tgePoolShares; // reserve shares in XYK pools + it('check reserve shares before migration', async() => { + sharesBefore = await queryTgePoolShares( + neutronChain, + reserveContract, + tgeMain.pairs.atom_ntrn.contract, + tgeMain.pairs.usdc_ntrn.contract, + ); + expect(sharesBefore.atomNtrn.atomShares).toBeGreaterThan(0); + expect(sharesBefore.atomNtrn.ntrnShares).toBeGreaterThan(0); + expect(sharesBefore.usdcNtrn.usdcShares).toBeGreaterThan(0); + expect(sharesBefore.usdcNtrn.ntrnShares).toBeGreaterThan(0); + }); + it('check Neutron DAO shares before migration', async() => { + const shares = await queryTgePoolShares( + neutronChain, + NEUTRON_DAO_ADDR, + ntrnAtomPclPool, + ntrnUsdcPclPool, + ); + expect(shares.atomNtrn.atomShares).toEqual(0); + expect(shares.atomNtrn.ntrnShares).toEqual(0); + expect(shares.usdcNtrn.usdcShares).toEqual(0); + expect(shares.usdcNtrn.ntrnShares).toEqual(0); + }); + + it('migrate reserve contract liquidity', async() => { + await cmInstantiator.executeContract( + reserveContract, + JSON.stringify({ + migrate_from_xyk_to_cl: { + slippage_tolerance: '0.05', // 5% + }, + }), + ); + }); + + it('check reserve shares after migration', async() => { + const shares = await queryTgePoolShares( + neutronChain, + reserveContract, + tgeMain.pairs.atom_ntrn.contract, + tgeMain.pairs.usdc_ntrn.contract, + ); + expect(shares.atomNtrn.atomShares).toEqual(0); + expect(shares.atomNtrn.ntrnShares).toEqual(0); + expect(shares.usdcNtrn.usdcShares).toEqual(0); + expect(shares.usdcNtrn.ntrnShares).toEqual(0); + }); + it('check Neutron DAO shares after migration', async() => { + const sharesAfter = await queryTgePoolShares( // Neutron DAO shares in PCL pools + neutronChain, + NEUTRON_DAO_ADDR, + ntrnAtomPclPool, + ntrnUsdcPclPool, + ); + + // according to 5% slippage tolerance + isWithinRangeRel(sharesAfter.atomNtrn.atomShares, sharesBefore.atomNtrn.atomShares, 0.05); + isWithinRangeRel(sharesAfter.atomNtrn.ntrnShares, sharesBefore.atomNtrn.ntrnShares, 0.05); + isWithinRangeRel(sharesAfter.usdcNtrn.usdcShares, sharesBefore.usdcNtrn.usdcShares, 0.05); + isWithinRangeRel(sharesAfter.usdcNtrn.ntrnShares, sharesBefore.usdcNtrn.ntrnShares, 0.05); + }); + }); + describe('execute migration handlers: lockdrop', () => { it('fill liquidity migration contracts', () => { liqMigContracts = { @@ -5216,6 +5327,81 @@ const getLiquidityMigrationBalances = async ( ), }); +const queryTgePoolShares = async( + chain: CosmosWrapper, + address: string, + atomPair: string, + usdcPair: string, +): Promise => { + const atomPairInfo = await chain.queryContract(atomPair, { + pair: {}, + }); + const atomPairLp = await chain.queryContract( + atomPairInfo.liquidity_token, + { + balance: { + address: address, + }, + }, + ); + const atomPairShares = await chain.queryContract( + atomPair, + { + share: { + amount: atomPairLp.balance, + }, + }, + ); + const usdcPairInfo = await chain.queryContract(usdcPair, { + pair: {}, + }); + const usdcPairLp = await chain.queryContract( + usdcPairInfo.liquidity_token, + { + balance: { + address: address, + }, + }, + ); + const usdcPairShares = await chain.queryContract( + usdcPair, + { + share: { + amount: usdcPairLp.balance, + }, + }, + ); + return { + atomNtrn: { + atomShares: +atomPairShares.filter( + (a) => (a.info as NativeToken).native_token.denom == IBC_ATOM_DENOM, + )[0].amount, + ntrnShares: +atomPairShares.filter( + (a) => (a.info as NativeToken).native_token.denom == NEUTRON_DENOM, + )[0].amount, + }, + usdcNtrn: { + usdcShares: +usdcPairShares.filter( + (a) => (a.info as NativeToken).native_token.denom == IBC_USDC_DENOM, + )[0].amount, + ntrnShares: +usdcPairShares.filter( + (a) => (a.info as NativeToken).native_token.denom == NEUTRON_DENOM, + )[0].amount, + }, + }; +} + +type tgePoolShares = { + atomNtrn: { + atomShares: number, + ntrnShares: number, + } + usdcNtrn: { + usdcShares: number, + ntrnShares: number, + } +} + // Transforms a bit a user info response from a lockdrop contract to ease test assertions. const transformUserInfo = async ( chain: CosmosWrapper, From d33b9b0f87fe1230caeae877e9449e02c4b82bd3 Mon Sep 17 00:00:00 2001 From: sotnikov-s Date: Wed, 28 Feb 2024 14:11:32 +0300 Subject: [PATCH 31/87] allow non-null assertion for auction test --- src/testcases/run_in_band/tge.auction.test.ts | 82 +++++++++++-------- 1 file changed, 47 insertions(+), 35 deletions(-) diff --git a/src/testcases/run_in_band/tge.auction.test.ts b/src/testcases/run_in_band/tge.auction.test.ts index cc158fd0..f04b8ccf 100644 --- a/src/testcases/run_in_band/tge.auction.test.ts +++ b/src/testcases/run_in_band/tge.auction.test.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-non-null-assertion */ import '@neutron-org/neutronjsplus'; import Long from 'long'; import { @@ -194,7 +195,7 @@ describe('Neutron / TGE / Auction', () => { beforeAll(async () => { testState = new TestStateLocalCosmosTestNet(config); await testState.init(); - + neutronChain = new CosmosWrapper( testState.sdk1, testState.blockWaiter1, @@ -3199,7 +3200,7 @@ describe('Neutron / TGE / Auction', () => { describe('execute migration handlers: reserve', () => { let sharesBefore: tgePoolShares; // reserve shares in XYK pools - it('check reserve shares before migration', async() => { + it('check reserve shares before migration', async () => { sharesBefore = await queryTgePoolShares( neutronChain, reserveContract, @@ -3211,7 +3212,7 @@ describe('Neutron / TGE / Auction', () => { expect(sharesBefore.usdcNtrn.usdcShares).toBeGreaterThan(0); expect(sharesBefore.usdcNtrn.ntrnShares).toBeGreaterThan(0); }); - it('check Neutron DAO shares before migration', async() => { + it('check Neutron DAO shares before migration', async () => { const shares = await queryTgePoolShares( neutronChain, NEUTRON_DAO_ADDR, @@ -3224,7 +3225,7 @@ describe('Neutron / TGE / Auction', () => { expect(shares.usdcNtrn.ntrnShares).toEqual(0); }); - it('migrate reserve contract liquidity', async() => { + it('migrate reserve contract liquidity', async () => { await cmInstantiator.executeContract( reserveContract, JSON.stringify({ @@ -3232,10 +3233,10 @@ describe('Neutron / TGE / Auction', () => { slippage_tolerance: '0.05', // 5% }, }), - ); + ); }); - it('check reserve shares after migration', async() => { + it('check reserve shares after migration', async () => { const shares = await queryTgePoolShares( neutronChain, reserveContract, @@ -3247,8 +3248,9 @@ describe('Neutron / TGE / Auction', () => { expect(shares.usdcNtrn.usdcShares).toEqual(0); expect(shares.usdcNtrn.ntrnShares).toEqual(0); }); - it('check Neutron DAO shares after migration', async() => { - const sharesAfter = await queryTgePoolShares( // Neutron DAO shares in PCL pools + it('check Neutron DAO shares after migration', async () => { + const sharesAfter = await queryTgePoolShares( + // Neutron DAO shares in PCL pools neutronChain, NEUTRON_DAO_ADDR, ntrnAtomPclPool, @@ -3256,10 +3258,26 @@ describe('Neutron / TGE / Auction', () => { ); // according to 5% slippage tolerance - isWithinRangeRel(sharesAfter.atomNtrn.atomShares, sharesBefore.atomNtrn.atomShares, 0.05); - isWithinRangeRel(sharesAfter.atomNtrn.ntrnShares, sharesBefore.atomNtrn.ntrnShares, 0.05); - isWithinRangeRel(sharesAfter.usdcNtrn.usdcShares, sharesBefore.usdcNtrn.usdcShares, 0.05); - isWithinRangeRel(sharesAfter.usdcNtrn.ntrnShares, sharesBefore.usdcNtrn.ntrnShares, 0.05); + isWithinRangeRel( + sharesAfter.atomNtrn.atomShares, + sharesBefore.atomNtrn.atomShares, + 0.05, + ); + isWithinRangeRel( + sharesAfter.atomNtrn.ntrnShares, + sharesBefore.atomNtrn.ntrnShares, + 0.05, + ); + isWithinRangeRel( + sharesAfter.usdcNtrn.usdcShares, + sharesBefore.usdcNtrn.usdcShares, + 0.05, + ); + isWithinRangeRel( + sharesAfter.usdcNtrn.ntrnShares, + sharesBefore.usdcNtrn.ntrnShares, + 0.05, + ); }); }); @@ -5327,7 +5345,7 @@ const getLiquidityMigrationBalances = async ( ), }); -const queryTgePoolShares = async( +const queryTgePoolShares = async ( chain: CosmosWrapper, address: string, atomPair: string, @@ -5344,14 +5362,11 @@ const queryTgePoolShares = async( }, }, ); - const atomPairShares = await chain.queryContract( - atomPair, - { - share: { - amount: atomPairLp.balance, - }, + const atomPairShares = await chain.queryContract(atomPair, { + share: { + amount: atomPairLp.balance, }, - ); + }); const usdcPairInfo = await chain.queryContract(usdcPair, { pair: {}, }); @@ -5363,14 +5378,11 @@ const queryTgePoolShares = async( }, }, ); - const usdcPairShares = await chain.queryContract( - usdcPair, - { - share: { - amount: usdcPairLp.balance, - }, + const usdcPairShares = await chain.queryContract(usdcPair, { + share: { + amount: usdcPairLp.balance, }, - ); + }); return { atomNtrn: { atomShares: +atomPairShares.filter( @@ -5389,18 +5401,18 @@ const queryTgePoolShares = async( )[0].amount, }, }; -} +}; type tgePoolShares = { atomNtrn: { - atomShares: number, - ntrnShares: number, - } + atomShares: number; + ntrnShares: number; + }; usdcNtrn: { - usdcShares: number, - ntrnShares: number, - } -} + usdcShares: number; + ntrnShares: number; + }; +}; // Transforms a bit a user info response from a lockdrop contract to ease test assertions. const transformUserInfo = async ( From f8cd0e5bd40ac69d4696833a607a078c70d77f40 Mon Sep 17 00:00:00 2001 From: sotnikov-s Date: Wed, 28 Feb 2024 15:54:38 +0300 Subject: [PATCH 32/87] update neutronjsplus version --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 377d05eb..10383217 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "@cosmos-client/core": "^0.47.4", "@cosmos-client/cosmwasm": "^0.40.3", "@cosmos-client/ibc": "^1.2.1", - "@neutron-org/neutronjsplus": "0.3.0", + "@neutron-org/neutronjsplus": "0.4.0-rc5", "@types/lodash": "^4.14.182", "@types/long": "^4.0.2", "axios": "^0.27.2", diff --git a/yarn.lock b/yarn.lock index 0e522fbf..433fdb3c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1564,10 +1564,10 @@ resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-5.50.0.tgz#29c6419e8379d496ab6d0426eadf3c4d100cd186" integrity sha512-swKHYCOZUGyVt4ge0u8a7AwNcA//h4nx5wIi0sruGye1IJ5Cva0GyK9L2/WdX+kWVTKp92ZiEo1df31lrWGPgA== -"@neutron-org/neutronjsplus@0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@neutron-org/neutronjsplus/-/neutronjsplus-0.3.0.tgz#cb133953cfdd8ff9c3e3f89b6a8bf3ab192424c3" - integrity sha512-gLI1hk1SOQaJnK/JDWfcDH4ERXNWdftUhpUHdoWWaMY5VbnYM2Sf1vM8tUnLBoNkJE2iTxYSDxkriU5jTYzYww== +"@neutron-org/neutronjsplus@0.4.0-rc5": + version "0.4.0-rc5" + resolved "https://registry.yarnpkg.com/@neutron-org/neutronjsplus/-/neutronjsplus-0.4.0-rc5.tgz#34380241b9b7e35d26d0d2147bb6d52a2993b686" + integrity sha512-iVWtv6ToAOb2Ih1czzZ6Od9l4ep8OCeyRCjanJfgT/GKguzY1RiLN/uNUN/bzPt2hUzMRIO8ROaAhQQuq5fpzw== dependencies: "@bufbuild/protobuf" "^1.4.2" "@cosmos-client/core" "^0.47.4" From 6206187881f3efce7e194e722b2394b0914ea2ff Mon Sep 17 00:00:00 2001 From: sotnikov-s Date: Wed, 28 Feb 2024 17:54:05 +0300 Subject: [PATCH 33/87] update neutronjsplus version --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 87cc9e2e..7930248a 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "@cosmos-client/core": "^0.47.4", "@cosmos-client/cosmwasm": "^0.40.3", "@cosmos-client/ibc": "^1.2.1", - "@neutron-org/neutronjsplus": "0.4.0-rc5", + "@neutron-org/neutronjsplus": "0.4.0-rc6", "@types/lodash": "^4.14.182", "@types/long": "^4.0.2", "axios": "^0.27.2", diff --git a/yarn.lock b/yarn.lock index 433fdb3c..bfc17e2c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1564,10 +1564,10 @@ resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-5.50.0.tgz#29c6419e8379d496ab6d0426eadf3c4d100cd186" integrity sha512-swKHYCOZUGyVt4ge0u8a7AwNcA//h4nx5wIi0sruGye1IJ5Cva0GyK9L2/WdX+kWVTKp92ZiEo1df31lrWGPgA== -"@neutron-org/neutronjsplus@0.4.0-rc5": - version "0.4.0-rc5" - resolved "https://registry.yarnpkg.com/@neutron-org/neutronjsplus/-/neutronjsplus-0.4.0-rc5.tgz#34380241b9b7e35d26d0d2147bb6d52a2993b686" - integrity sha512-iVWtv6ToAOb2Ih1czzZ6Od9l4ep8OCeyRCjanJfgT/GKguzY1RiLN/uNUN/bzPt2hUzMRIO8ROaAhQQuq5fpzw== +"@neutron-org/neutronjsplus@0.4.0-rc6": + version "0.4.0-rc6" + resolved "https://registry.yarnpkg.com/@neutron-org/neutronjsplus/-/neutronjsplus-0.4.0-rc6.tgz#40442636637ae92a6085cd557921281e1bac650a" + integrity sha512-Vb2uNoXpdvREu8zPJvPejjHlRK/jHK8gl7iLkzlDuzvWVzz7EpmNSgJ6IFUSF8se1YgIkiy9KlVxcLoyZEuIog== dependencies: "@bufbuild/protobuf" "^1.4.2" "@cosmos-client/core" "^0.47.4" From 49d00f6ffae0ad443446628ad9b6462add0a448e Mon Sep 17 00:00:00 2001 From: nhpd Date: Wed, 28 Feb 2024 19:53:57 +0400 Subject: [PATCH 34/87] fix: allow for execution of timelocked proposal when overruled in closed state --- src/testcases/parallel/overrule.test.ts | 2 +- src/testcases/parallel/subdao.test.ts | 90 ++++++++++++++++++++++++- 2 files changed, 89 insertions(+), 3 deletions(-) diff --git a/src/testcases/parallel/overrule.test.ts b/src/testcases/parallel/overrule.test.ts index 89d771b5..0bfa65db 100644 --- a/src/testcases/parallel/overrule.test.ts +++ b/src/testcases/parallel/overrule.test.ts @@ -16,7 +16,7 @@ import { const config = require('../../config.json'); -describe('Neutron / Subdao', () => { +describe('Neutron / Subdao Overrule', () => { let testState: TestStateLocalCosmosTestNet; let neutronChain: CosmosWrapper; let neutronAccount1: WalletWrapper; diff --git a/src/testcases/parallel/subdao.test.ts b/src/testcases/parallel/subdao.test.ts index b22be54a..6a2d4c46 100644 --- a/src/testcases/parallel/subdao.test.ts +++ b/src/testcases/parallel/subdao.test.ts @@ -18,10 +18,16 @@ import { TimelockConfig, TimelockProposalListResponse, } from '@neutron-org/neutronjsplus/dist/dao'; -import { Wallet } from '@neutron-org/neutronjsplus/dist/types'; +import { + SingleChoiceProposal, + Wallet, +} from '@neutron-org/neutronjsplus/dist/types'; import { BroadcastTx200ResponseTxResponse } from '@cosmos-client/core/cjs/openapi/api'; import cosmosclient from '@cosmos-client/core'; -import { waitSeconds } from '@neutron-org/neutronjsplus/dist/wait'; +import { + getWithAttempts, + waitSeconds, +} from '@neutron-org/neutronjsplus/dist/wait'; import { paramChangeProposal, sendProposal, @@ -480,6 +486,86 @@ describe('Neutron / Subdao', () => { }); }); + describe('Timelock3: Closed overruled proposal should not prevent execution', () => { + let proposalId: number; + beforeAll(async () => { + proposalId = await subdaoMember1.submitUpdateSubDaoConfigProposal( + { + name: 'dao name after timelock3', + }, + 'single2', + ); + + // move proposal to the timelocked state where it can be overruled + const timelockedProp = await subdaoMember1.supportAndExecuteProposal( + proposalId, + 'single2', + ); + + expect(timelockedProp.id).toEqual(proposalId); + expect(timelockedProp.status).toEqual('timelocked'); + expect(timelockedProp.msgs).toHaveLength(1); + }); + + test('close rejected overrule proposal', async () => { + const overruleProposalId = await mainDao.getOverruleProposalId( + subDao.contracts.proposals.single2.pre_propose.timelock!.address, + proposalId, + ); + + // wait 20 seconds + await waitSeconds(20); + + const propOverruledTest = + await mainDao.chain.queryContract( + mainDaoMember.dao.contracts.proposals.overrule?.address, + { + proposal: { + proposal_id: overruleProposalId, + }, + }, + ); + expect(propOverruledTest.proposal.status).toEqual('rejected'); + + await subdaoMember1.user.executeContract( + mainDaoMember.dao.contracts.proposals.overrule.address, + JSON.stringify({ + close: { proposal_id: overruleProposalId }, + }), + ); + + const propOverruledTest2 = await getWithAttempts( + neutronChain.blockWaiter, + async () => + await mainDao.chain.queryContractWithWait( + mainDaoMember.dao.contracts.proposals.overrule?.address, + { + proposal: { + proposal_id: overruleProposalId, + }, + }, + ), + async (p) => p.proposal.status === 'closed', + 5, + ); + + expect(propOverruledTest2.proposal.status).toEqual('closed'); + }); + + test('execute timelocked: success', async () => { + await waitSeconds(20); + await subdaoMember1.executeTimelockedProposal(proposalId, 'single2'); + + const timelockedProp = await subDao.getTimelockedProposal( + proposalId, + 'single2', + ); + expect(timelockedProp.id).toEqual(proposalId); + expect(timelockedProp.status).toEqual('executed'); + expect(timelockedProp.msgs).toHaveLength(1); + }); + }); + describe('Non-timelock typed duration pause proposal: Succeed creation', () => { let proposalId: number; From 1bb6f12d687ce0c9d6505c32b347b5ebf86bfdcb Mon Sep 17 00:00:00 2001 From: Dmitry Kolupaev Date: Wed, 13 Mar 2024 17:51:51 +0400 Subject: [PATCH 35/87] remove dust threshold for migration --- src/testcases/run_in_band/tge.auction.test.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/testcases/run_in_band/tge.auction.test.ts b/src/testcases/run_in_band/tge.auction.test.ts index f04b8ccf..a8ac46c2 100644 --- a/src/testcases/run_in_band/tge.auction.test.ts +++ b/src/testcases/run_in_band/tge.auction.test.ts @@ -4299,7 +4299,6 @@ describe('Neutron / TGE / Auction', () => { cl_pair: ntrnAtomPclPool, new_lp_token: ntrnAtomPclToken, pcl_vesting: atomVestingLpAddr, - dust_threshold: '0', }, ); expect(res.code).toEqual(0); @@ -4317,7 +4316,6 @@ describe('Neutron / TGE / Auction', () => { cl_pair: ntrnUsdcPclPool, new_lp_token: ntrnUsdcPclToken, pcl_vesting: usdcVestingLpAddr, - dust_threshold: '0', }, ); expect(res.code).toEqual(0); From 920e5fc177c0c315a39ce2c28f4b28f231af3722 Mon Sep 17 00:00:00 2001 From: pr0n00gler Date: Wed, 27 Mar 2024 15:36:02 +0200 Subject: [PATCH 36/87] neutronjsplus release --- package.json | 2 +- yarn.lock | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index a7750640..d36bd497 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "@cosmos-client/core": "^0.47.4", "@cosmos-client/cosmwasm": "^0.40.3", "@cosmos-client/ibc": "^1.2.1", - "@neutron-org/neutronjsplus": "neutron-org/neutronjsplus#90758d98a5c93b449aa2faddb955309b0a0b6c74", + "@neutron-org/neutronjsplus": "0.4.0-rc7", "@types/lodash": "^4.14.182", "@types/long": "^5.0.0", "axios": "^0.27.2", diff --git a/yarn.lock b/yarn.lock index f5a4ba44..882f1aba 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1564,9 +1564,10 @@ resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-5.50.0.tgz#29c6419e8379d496ab6d0426eadf3c4d100cd186" integrity sha512-swKHYCOZUGyVt4ge0u8a7AwNcA//h4nx5wIi0sruGye1IJ5Cva0GyK9L2/WdX+kWVTKp92ZiEo1df31lrWGPgA== -"@neutron-org/neutronjsplus@neutron-org/neutronjsplus#90758d98a5c93b449aa2faddb955309b0a0b6c74": +"@neutron-org/neutronjsplus@0.4.0-rc7": version "0.4.0-rc7" - resolved "https://codeload.github.com/neutron-org/neutronjsplus/tar.gz/90758d98a5c93b449aa2faddb955309b0a0b6c74" + resolved "https://registry.yarnpkg.com/@neutron-org/neutronjsplus/-/neutronjsplus-0.4.0-rc7.tgz#3a790cb15a8a52f2a3cb79e362aca08ade05d937" + integrity sha512-q1ZWr4SAibk90hmQ2TgJ8bITy9PUQm2VR/VQLDWiZixBMEvs2bzkjSEVHuY+VuPjdOMTzFSSdl/pcsJZgpa4GQ== dependencies: "@bufbuild/protobuf" "^1.4.2" "@cosmos-client/core" "^0.47.4" From 9f91b24a08a000c587d5bd53130563177a5b271f Mon Sep 17 00:00:00 2001 From: sotnikov-s Date: Fri, 29 Mar 2024 20:00:13 +0300 Subject: [PATCH 37/87] fix misprints, wrong addresses, and reward leftovers checks --- src/testcases/run_in_band/tge.auction.test.ts | 66 ++++++------------- 1 file changed, 20 insertions(+), 46 deletions(-) diff --git a/src/testcases/run_in_band/tge.auction.test.ts b/src/testcases/run_in_band/tge.auction.test.ts index a8ac46c2..fb366978 100644 --- a/src/testcases/run_in_band/tge.auction.test.ts +++ b/src/testcases/run_in_band/tge.auction.test.ts @@ -5064,7 +5064,7 @@ describe('Neutron / TGE / Auction', () => { // make sure there are no generator rewards and LP tokens staked by lockdrop contracts // meaning that all the funds and rewards have been distributed between lockdrop participants describe('confirm lockdrop withdrawal completeness', () => { - it('no XYK lp tokens kept by XYK lockdrop', async () => { + it('no XYK lp tokens staked by XYK lockdrop', async () => { const stakedAtomLp = await neutronChain.queryContract( liqMigContracts.generator, { @@ -5088,9 +5088,9 @@ describe('Neutron / TGE / Auction', () => { expect(+stakedUsdcLp).toBe(0); }); - it('no PCL lp tokens kept by PCL lockdrop', async () => { + it('no PCL lp tokens staked by PCL lockdrop', async () => { const stakedAtomLp = await neutronChain.queryContract( - liqMigContracts.generator, + liqMigContracts.incentives, { deposit: { lp_token: liqMigContracts.atomPclLp, @@ -5101,7 +5101,7 @@ describe('Neutron / TGE / Auction', () => { expect(+stakedAtomLp).toBe(0); const stakedUsdcLp = await neutronChain.queryContract( - liqMigContracts.generator, + liqMigContracts.incentives, { deposit: { lp_token: liqMigContracts.usdcPclLp, @@ -5113,51 +5113,25 @@ describe('Neutron / TGE / Auction', () => { }); describe('no generator rewards left to be paid', () => { - it('for XYK pairs', async () => { - const pendingAtomRewards = await neutronChain.queryContract( - liqMigContracts.generator, - { - pending_token: { - lp_token: liqMigContracts.atomXykLp, - user: liqMigContracts.xykLockdrop, - }, - }, - ); - expect(+pendingAtomRewards.pending).toBe(0); - - const pendingUsdcRewards = await neutronChain.queryContract( - liqMigContracts.generator, - { - pending_token: { - lp_token: liqMigContracts.usdcXykLp, - user: liqMigContracts.xykLockdrop, - }, - }, + let state: LiquidityMigrationState; + it('query balances', async () => { + state = await gatherLiquidityMigrationState( + neutronChain, + // any address is fine cuz we're interested in lockdrops balances + cmInstantiator.wallet.address.toString(), + liqMigContracts, ); - expect(+pendingUsdcRewards.pending).toBe(0); }); - it('for PCL pairs', async () => { - const pendingAtomRewards = await neutronChain.queryContract( - liqMigContracts.generator, - { - pending_token: { - lp_token: liqMigContracts.atomPclLp, - user: liqMigContracts.pclLockdrop, - }, - }, - ); - expect(+pendingAtomRewards.pending).toBe(0); - const pendingUsdcRewards = await neutronChain.queryContract( - liqMigContracts.generator, - { - pending_token: { - lp_token: liqMigContracts.usdcPclLp, - user: liqMigContracts.pclLockdrop, - }, - }, - ); - expect(+pendingUsdcRewards.pending).toBe(0); + // make sure lockdrop contracts don't have any reward assets left on their accounts + // allowing tiny to_uint_floor leftovers + it('XYK lockdrop', async () => { + expect(state.balances.xykLockdrop.astro).toBeLessThan(20); + expect(state.balances.xykLockdrop.external_rewards).toBeLessThan(20); + }); + it('PCL lockdrop', async () => { + expect(state.balances.pclLockdrop.astro).toBeLessThan(20); + expect(state.balances.pclLockdrop.external_rewards).toBeLessThan(20); }); }); }); From 5cc721bd0c164c965cbd1e1928793c60b0a05550 Mon Sep 17 00:00:00 2001 From: Aleksandr Pismenskiy Date: Tue, 2 Apr 2024 17:37:19 +0300 Subject: [PATCH 38/87] updated neutronjsplus #NTRN-174 --- package.json | 2 +- yarn.lock | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index f5ea7b83..cbe6054c 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "@cosmos-client/core": "^0.47.4", "@cosmos-client/cosmwasm": "^0.40.3", "@cosmos-client/ibc": "^1.2.1", - "@neutron-org/neutronjsplus": "^0.3.2", + "@neutron-org/neutronjsplus": "neutron-org/neutronjsplus#3c04aff48a32205256a0da65986a0819801605ed", "@types/lodash": "^4.14.182", "@types/long": "^5.0.0", "axios": "^0.27.2", diff --git a/yarn.lock b/yarn.lock index 74754cd7..9a893973 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1564,10 +1564,9 @@ resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-5.50.0.tgz#29c6419e8379d496ab6d0426eadf3c4d100cd186" integrity sha512-swKHYCOZUGyVt4ge0u8a7AwNcA//h4nx5wIi0sruGye1IJ5Cva0GyK9L2/WdX+kWVTKp92ZiEo1df31lrWGPgA== -"@neutron-org/neutronjsplus@^0.3.2": +"@neutron-org/neutronjsplus@neutron-org/neutronjsplus#3c04aff48a32205256a0da65986a0819801605ed": version "0.3.2" - resolved "https://registry.yarnpkg.com/@neutron-org/neutronjsplus/-/neutronjsplus-0.3.2.tgz#e17ff14469fcfa5fdc31beb64d72b5b0bc374bf6" - integrity sha512-Tidybr9e4z8CzhaDc7Btl2PRtwC4453gG81rJHBrGb76Ts38gTFA+hGeKhzoGDaTJFgSYIonDyUjCe9UC//v1w== + resolved "https://codeload.github.com/neutron-org/neutronjsplus/tar.gz/3c04aff48a32205256a0da65986a0819801605ed" dependencies: "@bufbuild/protobuf" "^1.4.2" "@cosmos-client/core" "^0.47.4" From 6cee49ee929e30819bcd1ea518f8cfd4b7ef02d9 Mon Sep 17 00:00:00 2001 From: Dmitry Kolupaev Date: Thu, 4 Apr 2024 20:41:26 +0400 Subject: [PATCH 39/87] add basic slinky test --- package.json | 1 + src/testcases/parallel/slinky.test.ts | 164 ++++++++++++++++++++++++++ 2 files changed, 165 insertions(+) create mode 100644 src/testcases/parallel/slinky.test.ts diff --git a/package.json b/package.json index 5fecb022..e16185e9 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "test:parallel": "jest -b src/testcases/parallel", "test:run_in_band": "yarn test:tge:auction && yarn test:tge:airdrop && yarn test:tge:credits && yarn test:interchaintx && yarn test:interchain_kv_query && yarn test:interchain_tx_query_plain && yarn test:tokenomics && yarn test:reserve && yarn test:ibc_hooks && yarn test:float && yarn test:parameters && yarn test:dex_stargate && yarn test:globalfee && yarn test:dex_bindings && yarn test:pob", "test:simple": "jest -b src/testcases/parallel/simple", + "test:slinky": "jest -b src/testcases/parallel/slinky", "test:stargate_queries": "jest -b src/testcases/parallel/stargate_queries", "test:interchaintx": "jest -b src/testcases/run_in_band/interchaintx", "test:interchain_kv_query": "jest -b src/testcases/run_in_band/interchain_kv_query", diff --git a/src/testcases/parallel/slinky.test.ts b/src/testcases/parallel/slinky.test.ts new file mode 100644 index 00000000..b5065909 --- /dev/null +++ b/src/testcases/parallel/slinky.test.ts @@ -0,0 +1,164 @@ +import '@neutron-org/neutronjsplus'; +import { + WalletWrapper, + CosmosWrapper, + NEUTRON_DENOM, + ADMIN_MODULE_ADDRESS, +} from '@neutron-org/neutronjsplus/dist/cosmos'; +import { TestStateLocalCosmosTestNet } from '@neutron-org/neutronjsplus'; +import { Wallet } from '@neutron-org/neutronjsplus/dist/types'; +import { getWithAttempts } from '@neutron-org/neutronjsplus/dist/wait'; +import { Dao, DaoMember, getDaoContracts } from '@neutron-org/neutronjsplus/dist/dao'; + +const config = require('../../config.json'); + +describe('Neutron / Slinky', () => { + let testState: TestStateLocalCosmosTestNet; + let neutronChain: CosmosWrapper; + let neutronAccount: WalletWrapper; + let daoMember1: DaoMember; + let dao: Dao; + + let proposalId: number; + + beforeAll(async () => { + testState = new TestStateLocalCosmosTestNet(config); + await testState.init(); + neutronChain = new CosmosWrapper( + testState.sdk1, + testState.blockWaiter1, + NEUTRON_DENOM, + ); + neutronAccount = new WalletWrapper( + neutronChain, + testState.wallets.qaNeutron.genQaWal1, + ); + const daoCoreAddress = (await neutronChain.getChainAdmins())[0]; + const daoContracts = await getDaoContracts(neutronChain, daoCoreAddress); + dao = new Dao(neutronChain, daoContracts); + daoMember1 = new DaoMember(neutronAccount, dao); + }); + + describe('prepare: bond funds', () => { + test('bond form wallet 1', async () => { + await daoMember1.bondFunds('10000'); + await getWithAttempts( + neutronChain.blockWaiter, + async () => + await dao.queryVotingPower(daoMember1.user.wallet.address.toString()), + async (response) => response.power == 10000, + 20, + ); + }); + // test('check voting power', async () => { + // await getWithAttempts( + // neutronChain.blockWaiter, + // async () => await dao.queryTotalVotingPower(), + // async (response) => response.power == 21000, + // 20, + // ); + // }); + }); + + describe('submit proposal', () => { + test('create proposal', async () => { + proposalId = await daoMember1.submitSingleChoiceProposal( + 'Proposal for update marketmap', + 'UpdateMarketmap proposal. This one will pass', + [updateMarketMapProposal()], + '1000', + ); + }); + + describe('vote for proposal', () => { + test('vote YES', async () => { + await daoMember1.voteYes(proposalId); + }); + }); + + describe('execute proposal', () => { + test('check if proposal is passed', async () => { + await neutronChain.blockWaiter.waitBlocks(5); + await dao.checkPassedProposal(proposalId); + }); + test('execute passed proposal', async () => { + await daoMember1.executeProposalWithAttempts(proposalId); + }); + }); + }); + + describe('Module fetches prices', () => { + // TODO + }); +}); + +// const queryPrices = async(): Promise => { +// const req = await axios.get( +// `${this.sdk.url}/slinky/oracle/v1/get_prices`, +// ); + +// return req.data.prices; +// } + +// const queryAllTickers = async(): Promise => { +// const req = await axios.get( +// `${this.sdk.url}/slinky/oracle/v1/get_all_tickers`, +// ); + +// return req.data.currency_pairs; +// } + +const updateMarketMapMessage = JSON.stringify({ + '@type': '/slinky.marketmap.v1.MsgUpdateMarketMap', + signer: ADMIN_MODULE_ADDRESS, + create_markets: [ + { + ticker: { + currency_pair: { + Base: 'ETH', + Quote: 'USDT', + }, + decimals: 8, + min_provider_count: 1, + enabled: true, + metadata_JSON: '{}', + }, + providers: { + providers: [ + { + name: 'kucoin_ws', + off_chain_ticker: 'eth-usdt', + }, + ], + }, + paths: { + paths: [ + { + operations: [ + { + provider: 'kucoin_ws', + currency_pair: { + Base: 'ETH', + Quote: 'USDT', + }, + invert: false, + }, + ], + }, + ], + }, + }, + ], +}); + +const updateMarketMapProposal = (): any => ({ + custom: { + submit_admin_proposal: { + admin_proposal: { + proposal_execute_message: { + message: updateMarketMapMessage, + }, + }, + }, + }, +}); From 9ac98376554c70054f31d89d898285b68a953a09 Mon Sep 17 00:00:00 2001 From: sotnikov-s Date: Thu, 4 Apr 2024 19:55:03 +0300 Subject: [PATCH 40/87] add during migration withdrawal and delayed migrated liquidity staking test cases --- src/testcases/run_in_band/tge.auction.test.ts | 1315 ++++++++++++----- 1 file changed, 981 insertions(+), 334 deletions(-) diff --git a/src/testcases/run_in_band/tge.auction.test.ts b/src/testcases/run_in_band/tge.auction.test.ts index fb366978..b3c74d23 100644 --- a/src/testcases/run_in_band/tge.auction.test.ts +++ b/src/testcases/run_in_band/tge.auction.test.ts @@ -258,6 +258,7 @@ describe('Neutron / TGE / Auction', () => { 'auctionLockdrop', 'auctionLockdropVesting', 'airdropAuctionLockdropVestingMigration', + 'airdropAtomAuctionLockdropMigration', ]) { tgeWallets[v] = new WalletWrapper( neutronChain, @@ -324,6 +325,13 @@ describe('Neutron / TGE / Auction', () => { ].wallet.address.toString(), amount: '1000000', }, + { + address: + tgeWallets[ + 'airdropAtomAuctionLockdropMigration' + ].wallet.address.toString(), + amount: '1000000', + }, ]; tgeMain.times.airdropStart = getTimestamp(0); tgeMain.times.airdropVestingStart = getTimestamp(300); @@ -382,6 +390,7 @@ describe('Neutron / TGE / Auction', () => { 'airdropAuctionLockdrop', 'airdropAuctionLockdropVesting', 'airdropAuctionLockdropVestingMigration', + 'airdropAtomAuctionLockdropMigration', ]) { const address = tgeWallets[v].wallet.address.toString(); const amount = @@ -471,6 +480,7 @@ describe('Neutron / TGE / Auction', () => { 'auctionLockdrop', 'auctionLockdropVesting', 'airdropAuctionLockdropVestingMigration', + 'airdropAtomAuctionLockdropMigration', ]) { const res2 = await tgeWallets[v].executeContract( tgeMain.contracts.auction, @@ -964,6 +974,7 @@ describe('Neutron / TGE / Auction', () => { 'auctionLockdrop', 'auctionLockdropVesting', 'airdropAuctionLockdropVestingMigration', + 'airdropAtomAuctionLockdropMigration', ]) { const userInfo = await neutronChain.queryContract( tgeMain.contracts.auction, @@ -1531,9 +1542,16 @@ describe('Neutron / TGE / Auction', () => { }), ); expect(res.code).toEqual(0); + res = await tgeWallets.airdropOnly.executeContract( + tgeMain.contracts.auction, + JSON.stringify({ + migrate_to_vesting: {}, + }), + ); + expect(res.code).toEqual(0); tgeMain.times.vestTimestamp = Date.now(); }); - it('should not vest LP all 8 users have been migrated', async () => { + it('should not vest LP all 9 users have been migrated', async () => { await expect( cmInstantiator.executeContract( tgeMain.contracts.auction, @@ -1594,17 +1612,17 @@ describe('Neutron / TGE / Auction', () => { ); expect(vestingInfoAtom.info.released_amount).toEqual('0'); expect(vestingInfoUsdc.info.released_amount).toEqual('0'); - // NOTE: magic number - 3065 + // NOTE: magic number - 2891 expect( parseInt(vestingInfoAtom.info.schedules[0].end_point.amount), - ).toBeCloseTo(3065, -1); + ).toBeCloseTo(2891, -1); claimAtomLP = parseInt( vestingInfoAtom.info.schedules[0].end_point.amount, ); - // NOTE: magic number - 20950 + // NOTE: magic number - 19725 expect( parseInt(vestingInfoUsdc.info.schedules[0].end_point.amount), - ).toBeCloseTo(20950, -1); + ).toBeCloseTo(19725, -1); claimUsdcLP = parseInt( vestingInfoUsdc.info.schedules[0].end_point.amount, ); @@ -1730,6 +1748,7 @@ describe('Neutron / TGE / Auction', () => { 'auctionLockdrop', 'auctionLockdropVesting', 'airdropAuctionLockdropVestingMigration', + 'airdropAtomAuctionLockdropMigration', ]) { const member = new DaoMember(tgeWallets[v], daoMain); expect((await member.queryVotingPower()).power | 0).toBe(0); @@ -1769,6 +1788,7 @@ describe('Neutron / TGE / Auction', () => { 'auctionLockdrop', 'auctionLockdropVesting', 'airdropAuctionLockdropVestingMigration', + 'airdropAtomAuctionLockdropMigration', ]) { const member = new DaoMember(tgeWallets[v], daoMain); expect((await member.queryVotingPower()).power | 0).toBeGreaterThan( @@ -1818,6 +1838,7 @@ describe('Neutron / TGE / Auction', () => { 'auctionLockdrop', 'auctionLockdropVesting', 'airdropAuctionLockdropVestingMigration', + 'airdropAtomAuctionLockdropMigration', ]) { const member = new DaoMember(tgeWallets[v], daoMain); vp[v] = (await member.queryVotingPower()).power | 0; @@ -1879,6 +1900,7 @@ describe('Neutron / TGE / Auction', () => { 'auctionLockdropVesting', 'auctionVesting', 'airdropAuctionLockdropVestingMigration', + 'airdropAtomAuctionLockdropMigration', ]) { const member = new DaoMember(tgeWallets[v], daoMain); vp[v] = (await member.queryVotingPower()).power | 0; @@ -1899,6 +1921,7 @@ describe('Neutron / TGE / Auction', () => { 'airdropAuctionLockdrop', 'airdropAuctionLockdropVesting', 'airdropAuctionLockdropVestingMigration', + 'airdropAtomAuctionLockdropMigration', ]) { const member = new DaoMember(tgeWallets[v], daoMain); expect((await member.queryVotingPower()).power | 0).toBeGreaterThan( @@ -2008,7 +2031,7 @@ describe('Neutron / TGE / Auction', () => { rewardsStateAfterClaim.balanceNtrn + FEE_SIZE - rewardsStateBeforeClaim.balanceNtrn, - ).toEqual(40); // lockdrop rewards share for the user + ).toEqual(33); // lockdrop rewards share for the user const rewardStateBeforeClaimUsdc: LockdropLockUpInfoResponse = rewardsStateBeforeClaim.userInfo.lockup_infos.find( @@ -2687,6 +2710,7 @@ describe('Neutron / TGE / Auction', () => { 'auctionLockdrop', 'auctionLockdropVesting', 'auctionVesting', + 'airdropAtomAuctionLockdropMigration', ]) { const member = new DaoMember(tgeWallets[v], daoMain); votingPowerBeforeOverall[v] = @@ -2722,6 +2746,7 @@ describe('Neutron / TGE / Auction', () => { 'auctionLockdrop', 'auctionLockdropVesting', 'airdropAuctionLockdropVestingMigration', + 'airdropAtomAuctionLockdropMigration', ]) { const vp = await neutronChain.queryContract( @@ -3182,6 +3207,7 @@ describe('Neutron / TGE / Auction', () => { 'auctionLockdropVesting', 'auctionVesting', 'airdropAuctionLockdropVestingMigration', + 'airdropAtomAuctionLockdropMigration', ]) { const member = new DaoMember(tgeWallets[v], daoMain); vp = (await member.queryVotingPower()).power | 0; @@ -3282,7 +3308,7 @@ describe('Neutron / TGE / Auction', () => { }); describe('execute migration handlers: lockdrop', () => { - it('fill liquidity migration contracts', () => { + beforeAll(() => { liqMigContracts = { xykLockdrop: tgeMain.contracts.lockdrop, pclLockdrop: lockdropPclAddr, @@ -3302,8 +3328,8 @@ describe('Neutron / TGE / Auction', () => { // This participant has two lockup positions: ATOM for 1 and USDC for 1. The user never claimed // any rewards nor withdrawn either of the lockups. Expected behaviour: XYK lockups are marked // as transferred, all pending rewards (generator, lockdrop, airdrop) are paid to the user - // during migration, liquidity is migrated from XYK to PCL pools and staked to the generator, - // PCL lockup entries are created in the PCL lockdrop contract. + // during migration, liquidity is migrated from XYK to PCL pools and kept on the PCL lockdrop + // contract's account, PCL lockup entries are created in the PCL lockdrop contract. describe('migrate airdropAuctionLockdropVestingMigration participant', () => { let stateBefore: LiquidityMigrationState; it('gather state before migration', async () => { @@ -3461,15 +3487,15 @@ describe('Neutron / TGE / Auction', () => { }); test('staked lp amount decreases', async () => { - // all lp from lockups is unstaked from generator - expect(stateAfter.xykAtomStakedInGen).toEqual( - stateBefore.xykAtomStakedInGen - + // all lp from lockups are unstaked from generator + expect(stateAfter.xykAtomStaked).toEqual( + stateBefore.xykAtomStaked - +stateBefore.xykUserLockups.mapped_lockup_infos[ atomLockupKey ].lp_units_locked, ); - expect(stateAfter.xykUsdcStakedInGen).toEqual( - stateBefore.xykUsdcStakedInGen - + expect(stateAfter.xykUsdcStaked).toEqual( + stateBefore.xykUsdcStaked - +stateBefore.xykUserLockups.mapped_lockup_infos[ usdcLockupKey ].lp_units_locked, @@ -3531,15 +3557,8 @@ describe('Neutron / TGE / Auction', () => { }); }); - test('no balance change for PCL lockdrop contract', async () => { - // no funds directly transferred to and kept on the PCL lockdrop contract - expect(stateAfter.balances.pclLockdrop).toEqual( - stateBefore.balances.pclLockdrop, - ); - }); - test('no paired assets and lp received by user', async () => { - // during migration a user can only receive ntrn and astro rewards + // as a result of migration a user can only receive ntrn and astro rewards expect(stateAfter.balances.user.atom).toEqual( stateBefore.balances.user.atom, ); @@ -3594,6 +3613,14 @@ describe('Neutron / TGE / Auction', () => { stateAfter.pclUserLockups.mapped_lockup_infos[usdcLockupKey] .expected_ntrn_share, ).toBeGreaterThan(0); + expect( + stateAfter.pclUserLockups.mapped_lockup_infos[atomLockupKey] + .expected_paired_asset_share, + ).toBeGreaterThan(0); + expect( + stateAfter.pclUserLockups.mapped_lockup_infos[usdcLockupKey] + .expected_paired_asset_share, + ).toBeGreaterThan(0); // equivalent of locked assets should be roughly equal before and after migration isWithinRangeRel( @@ -3610,6 +3637,37 @@ describe('Neutron / TGE / Auction', () => { .expected_ntrn_share, 0.05, ); + isWithinRangeRel( + stateAfter.pclUserLockups.mapped_lockup_infos[atomLockupKey] + .expected_paired_asset_share, + stateBefore.xykUserLockups.mapped_lockup_infos[atomLockupKey] + .expected_paired_asset_share, + 0.05, + ); + isWithinRangeRel( + stateAfter.pclUserLockups.mapped_lockup_infos[usdcLockupKey] + .expected_paired_asset_share, + stateBefore.xykUserLockups.mapped_lockup_infos[usdcLockupKey] + .expected_paired_asset_share, + 0.05, + ); + }); + + test('lp tokens accrued by the PCL lockdrop contract', async () => { + // no staking with incentives contract happens until all users are migrated, so + // new lp tokens are temporarily kept on the PCL lockdrop contract's account + expect(stateAfter.balances.pclLockdrop.atomPclPairLp).toEqual( + stateBefore.balances.pclLockdrop.atomPclPairLp + + +stateAfter.pclUserLockups.mapped_lockup_infos[ + atomLockupKey + ].lp_units_locked, + ); + expect(stateAfter.balances.pclLockdrop.usdcPclPairLp).toEqual( + stateBefore.balances.pclLockdrop.usdcPclPairLp + + +stateAfter.pclUserLockups.mapped_lockup_infos[ + usdcLockupKey + ].lp_units_locked, + ); }); test('lp tokens not marked as transferred', async () => { @@ -3625,19 +3683,13 @@ describe('Neutron / TGE / Auction', () => { ).toBe(null); }); - test('staked lp amount increases', async () => { - // all lp from lockups are staked to generator - expect(stateAfter.pclAtomStakedInGen).toEqual( - stateBefore.pclAtomStakedInGen + - +stateAfter.pclUserLockups.mapped_lockup_infos[ - atomLockupKey - ].lp_units_locked, + test('staked lp amount remains', async () => { + // no staking with incentives contract happens until all users are migrated + expect(stateAfter.pclAtomStaked).toEqual( + stateBefore.pclAtomStaked, ); - expect(stateAfter.pclUsdcStakedInGen).toEqual( - stateBefore.pclUsdcStakedInGen + - +stateAfter.pclUserLockups.mapped_lockup_infos[ - usdcLockupKey - ].lp_units_locked, + expect(stateAfter.pclUsdcStaked).toEqual( + stateBefore.pclUsdcStaked, ); }); }); @@ -3681,16 +3733,21 @@ describe('Neutron / TGE / Auction', () => { }); // This participant has three lockup positions: ATOM for 1, USDC for 1 and USDC for 2. User - // claimed rewards without liquidity withdrawal previously, also we call claim rewards with - // liquidity unlock for USDC 2 lockup in as first step of the test scenario to cover such a - // case. Expected behaviour: the withdrawn lockup is ignored and untouched, other XYK lockups + // claimed rewards without liquidity withdrawal previously. The user calls claim rewards with + // liquidity unlock for USDC 1 lockup as the first step of the test scenario to cover a case + // of migration of a user with withdrawn lockup position. The user is the last one having a + // USDC lockup but not the last one having an ATOM lockup. After migration, the user claims + // rewards and then makes withdrawal of the ATOM position to cover the case of position + // withdrawal after pool's migration started and before migration ended. + // Expected behaviour: the withdrawn lockup is ignored and untouched, other XYK lockups // are marked as transferred, lockdrop and airdrop rewards aren't transferred and marked as // transferred on both sides (XYK and PCL lockdrop contracts), generator rewards are paid to - // the user for remaining lockups, remaining liquidity is migrated from XYK to PCL pools and - // staked to the generator, PCL lockup entries are created in the PCL lockdrop contract for - // remaining lockups. + // the user for remaining lockups, remaining liquidity is migrated from XYK to PCL pools, PCL + // lockup entries are created in the PCL lockdrop contract for remaining lockups, USDC pool + // is staked after migration, ATOM pool is not staked after migration, no staking rewards are + // accrued by the user nor on claim rewards nor on lockup withdrawal for the ATOM position. describe('migrate cmInstantiator participant', () => { - it('withdraw one out of three lockups', async () => { + it('withdraw USDC 1 lockup', async () => { // to cover migration with a withdrawn lockup case await cmInstantiator.executeContract( tgeMain.contracts.lockdrop, @@ -3833,13 +3890,6 @@ describe('Neutron / TGE / Auction', () => { 0.5, ); }); - - test('generator rewards are transferred to PCL contract for deposit', async () => { - // as a side effect generator sends pending rewards to the depositor which is PCL contract - expect(stateAfter.balances.pclLockdrop.astro).toBeGreaterThan( - stateBefore.balances.pclLockdrop.astro, - ); - }); }); describe('astroport lp', () => { @@ -3882,15 +3932,15 @@ describe('Neutron / TGE / Auction', () => { }); test('staked lp amount decreases', async () => { - // all lp from lockups is unstaked from generator - expect(stateAfter.xykAtomStakedInGen).toEqual( - stateBefore.xykAtomStakedInGen - + // all lp from lockups are unstaked from generator + expect(stateAfter.xykAtomStaked).toEqual( + stateBefore.xykAtomStaked - +stateBefore.xykUserLockups.mapped_lockup_infos[ atomLockupKey ].lp_units_locked, ); - expect(stateAfter.xykUsdcStakedInGen).toEqual( - stateBefore.xykUsdcStakedInGen - + expect(stateAfter.xykUsdcStaked).toEqual( + stateBefore.xykUsdcStaked - +stateBefore.xykUserLockups.mapped_lockup_infos[ usdcLockupKey ].lp_units_locked, @@ -3942,34 +3992,8 @@ describe('Neutron / TGE / Auction', () => { }); }); - test('no balance change for PCL lockdrop contract', async () => { - // no funds (but astro rewards checked above) directly transferred to and kept on - // the PCL lockdrop contract - expect(stateAfter.balances.pclLockdrop.atom).toEqual( - stateBefore.balances.pclLockdrop.atom, - ); - expect(stateAfter.balances.pclLockdrop.ntrn).toEqual( - stateBefore.balances.pclLockdrop.ntrn, - ); - expect(stateAfter.balances.pclLockdrop.usdc).toEqual( - stateBefore.balances.pclLockdrop.usdc, - ); - expect(stateAfter.balances.pclLockdrop.atomPclPairLp).toEqual( - stateBefore.balances.pclLockdrop.atomPclPairLp, - ); - expect(stateAfter.balances.pclLockdrop.atomXykPairLp).toEqual( - stateBefore.balances.pclLockdrop.atomXykPairLp, - ); - expect(stateAfter.balances.pclLockdrop.usdcPclPairLp).toEqual( - stateBefore.balances.pclLockdrop.usdcPclPairLp, - ); - expect(stateAfter.balances.pclLockdrop.usdcXykPairLp).toEqual( - stateBefore.balances.pclLockdrop.usdcXykPairLp, - ); - }); - test('no paired assets and lp received by user', async () => { - // during migration the user can only receive astro rewards + // as a result of migration a user can only receive ntrn and astro rewards expect(stateAfter.balances.user.atom).toEqual( stateBefore.balances.user.atom, ); @@ -4024,6 +4048,14 @@ describe('Neutron / TGE / Auction', () => { stateAfter.pclUserLockups.mapped_lockup_infos[usdcLockupKey] .expected_ntrn_share, ).toBeGreaterThan(0); + expect( + stateAfter.pclUserLockups.mapped_lockup_infos[atomLockupKey] + .expected_paired_asset_share, + ).toBeGreaterThan(0); + expect( + stateAfter.pclUserLockups.mapped_lockup_infos[usdcLockupKey] + .expected_paired_asset_share, + ).toBeGreaterThan(0); // equivalent of locked assets should be roughly equal before and after migration isWithinRangeRel( @@ -4040,6 +4072,20 @@ describe('Neutron / TGE / Auction', () => { .expected_ntrn_share, 0.05, ); + isWithinRangeRel( + stateAfter.pclUserLockups.mapped_lockup_infos[atomLockupKey] + .expected_paired_asset_share, + stateBefore.xykUserLockups.mapped_lockup_infos[atomLockupKey] + .expected_paired_asset_share, + 0.05, + ); + isWithinRangeRel( + stateAfter.pclUserLockups.mapped_lockup_infos[usdcLockupKey] + .expected_paired_asset_share, + stateBefore.xykUserLockups.mapped_lockup_infos[usdcLockupKey] + .expected_paired_asset_share, + 0.05, + ); }); test('lp tokens not marked as transferred', async () => { @@ -4055,16 +4101,28 @@ describe('Neutron / TGE / Auction', () => { ).toBe(null); }); - test('staked lp amount increases', async () => { - // all lp from lockups are staked to generator - expect(stateAfter.pclAtomStakedInGen).toEqual( - stateBefore.pclAtomStakedInGen + + test('ATOM lp tokens accrued by the PCL lockdrop contract', async () => { + // no staking with incentives contract happens until all users are migrated, so + // new lp tokens are temporarily kept on the PCL lockdrop contract's account + expect(stateAfter.balances.pclLockdrop.atomPclPairLp).toEqual( + stateBefore.balances.pclLockdrop.atomPclPairLp + +stateAfter.pclUserLockups.mapped_lockup_infos[ atomLockupKey ].lp_units_locked, ); - expect(stateAfter.pclUsdcStakedInGen).toEqual( - stateBefore.pclUsdcStakedInGen + + expect(stateAfter.pclAtomStaked).toEqual( + stateBefore.pclAtomStaked, + ); + }); + + test('all USDC lp tokens are staked with incentives contract', async () => { + // since the user is the last one having a USDC lockup in XYK, the migration triggers + // staking of all lp tokens associated with the USDC pool + expect(stateAfter.balances.pclLockdrop.usdcPclPairLp).toEqual( + 0, + ); + expect(stateAfter.pclUsdcStaked).toEqual( + stateBefore.balances.pclLockdrop.usdcPclPairLp + +stateAfter.pclUserLockups.mapped_lockup_infos[ usdcLockupKey ].lp_units_locked, @@ -4108,141 +4166,621 @@ describe('Neutron / TGE / Auction', () => { }); }); }); - }); - // These accounts are the only remaining lockdrop participants. Each of them has two lockup - // positions: ATOM for 1 and USDC for 1. They claimed rewards with liquidity unlock for both - // lockups before. Expected behaviour: both withdrawn lockups are ignored and untouched, no - // rewards paid, no balance changes whatsoever, no state changes made to both lockdrop - // contracts, migration transaction emits events informing about the already withdrawn positions. - describe('migrate the rest lockdrop participants', () => { - for (const v of [ - 'airdropAuctionLockdrop', - 'airdropAuctionLockdropVesting', - 'auctionLockdrop', - 'auctionLockdropVesting', - ]) { - describe(`migrate ${v} participant`, () => { + describe('check claims while pool migration is in progress', () => { + const atomLockupKey = 'ATOM1'; + describe('claim staking rewards for ATOM position', () => { + beforeAll(async () => { + // wait for several blocks to make sure rewards absence is not an accident, i.e. + // make sure that we get the error not just because of a too early claim + await neutronChain.blockWaiter.waitBlocks(5); + }); + let stateBefore: LiquidityMigrationState; - it('gather state before migration', async () => { + it('gather state before claiming', async () => { stateBefore = await gatherLiquidityMigrationState( neutronChain, - tgeWallets[v].wallet.address.toString(), + cmInstantiator.wallet.address.toString(), liqMigContracts, ); console.log( - `${v} migration state before:\n${JSON.stringify(stateBefore)}`, + `cmInstantiator migration state before claiming during migration:\n${JSON.stringify( + stateBefore, + )}`, ); }); - let migrateRes: BroadcastTx200ResponseTxResponse; - it('migrate the user', async () => { - migrateRes = await cmInstantiator.executeContract( - tgeMain.contracts.lockdrop, + it('execute claiming', async () => { + await cmInstantiator.executeContract( + liqMigContracts.pclLockdrop, JSON.stringify({ - migrate_liquidity_to_pcl_pools: { - user_address_raw: tgeWallets[v].wallet.address.toString(), + claim_rewards_and_optionally_unlock: { + pool_type: 'ATOM', + duration: 1, + withdraw_lp_stake: false, }, }), undefined, { gas_limit: Long.fromString('15000000'), - amount: [{ denom: NEUTRON_DENOM, amount: '750000' }], + amount: [ + { denom: NEUTRON_DENOM, amount: ntrnToPayGas.toString() }, + ], }, ); }); - it('check user voting power', async () => { - await neutronChain.blockWaiter.waitBlocks(1); - const vp = - await neutronChain.queryContract( - lockdropVaultForClAddr, - { - voting_power_at_height: { - address: tgeWallets[v].wallet.address.toString(), - }, + let stateAfter: LiquidityMigrationState; + it('gather state after claiming', async () => { + stateAfter = await gatherLiquidityMigrationState( + neutronChain, + cmInstantiator.wallet.address.toString(), + liqMigContracts, + ); + console.log( + `cmInstantiator migration state after claiming during migration:\n${JSON.stringify( + stateAfter, + )}`, + ); + }); + + it('user balance remains', () => { + stateAfter.balances.user.ntrn += ntrnToPayGas; // compensate gas for claiming + expect(stateBefore.balances.user).toEqual( + stateAfter.balances.user, + ); + }); + it('lockup remains', () => { + expect( + stateBefore.pclUserLockups.mapped_lockup_infos[atomLockupKey], + ).toEqual( + stateAfter.pclUserLockups.mapped_lockup_infos[atomLockupKey], + ); + }); + it('PCL lockdrop contract balances remain', () => { + expect(stateBefore.balances.pclLockdrop).toEqual( + stateAfter.balances.pclLockdrop, + ); + }); + }); + + describe('withdraw ATOM position', () => { + let stateBefore: LiquidityMigrationState; + it('gather state before withdrawal', async () => { + stateBefore = await gatherLiquidityMigrationState( + neutronChain, + cmInstantiator.wallet.address.toString(), + liqMigContracts, + ); + console.log( + `cmInstantiator migration state before withdrawal during migration:\n${JSON.stringify( + stateBefore, + )}`, + ); + }); + + it('execute withdrawal', async () => { + await cmInstantiator.executeContract( + liqMigContracts.pclLockdrop, + JSON.stringify({ + claim_rewards_and_optionally_unlock: { + pool_type: 'ATOM', + duration: 1, + withdraw_lp_stake: true, }, - ); - isWithinRangeRel(+vp.power, votingPowerBeforeLockdrop[v], 0.05); + }), + undefined, + { + gas_limit: Long.fromString('15000000'), + amount: [ + { denom: NEUTRON_DENOM, amount: ntrnToPayGas.toString() }, + ], + }, + ); }); let stateAfter: LiquidityMigrationState; - it('gather state after migration', async () => { + it('gather state after withdrawal', async () => { stateAfter = await gatherLiquidityMigrationState( neutronChain, - tgeWallets[v].wallet.address.toString(), + cmInstantiator.wallet.address.toString(), liqMigContracts, ); console.log( - `${v} migration state after:\n${JSON.stringify(stateAfter)}`, + `cmInstantiator migration state after withdrawal during migration:\n${JSON.stringify( + stateAfter, + )}`, ); }); - describe('check user liquidity migration', () => { - test('user XYK lockup info consistency', async () => { - expect(stateBefore.xykUserLockups).toMatchObject( - stateAfter.xykUserLockups, - ); - }); + it('no change of staked amount', async () => { + expect(stateAfter.pclAtomStaked).toEqual( + stateBefore.pclAtomStaked, + ); + }); - test('no user lockup info in PCL lockdrop', async () => { - expect(stateAfter.pclUserLockups).toMatchObject({ - claimable_incentives_debt: '0', - mapped_lockup_infos: {}, - lockup_positions_index: 0, - ntrn_transferred: false, - total_ntrn_rewards: '0', - }); - }); + it('no staking rewards accrued by the user', async () => { + expect(stateAfter.balances.user.astro).toEqual( + stateBefore.balances.user.astro, + ); + expect(stateAfter.balances.user.external_rewards).toEqual( + stateBefore.balances.user.external_rewards, + ); + }); - test('no balance changes', async () => { - expect(stateBefore.balances).toMatchObject(stateAfter.balances); - }); + it('lockup position marked as complete', async () => { + expect( + stateBefore.pclUserLockups.mapped_lockup_infos[atomLockupKey] + .astroport_lp_transferred, + ).toBeNull(); - test('already claimed events emission', async () => { - expect(migrateRes.raw_log).toContain( - '{"key":"ATOM_for_1","value":"already_been_withdrawn"}', - ); - expect(migrateRes.raw_log).toContain( - '{"key":"USDC_for_1","value":"already_been_withdrawn"}', - ); - }); + expect( + stateAfter.pclUserLockups.mapped_lockup_infos[atomLockupKey] + .astroport_lp_transferred, + ).toEqual( + stateBefore.pclUserLockups.mapped_lockup_infos[atomLockupKey] + .lp_units_locked, + ); }); }); - } + }); }); - }); - describe('execute migration handlers: vesting lp', () => { - it('should validate numbers & save claim amount before migration', async () => { - const [ - vestingInfoAtom, - vestingInfoUsdc, - lpAuctionBalanceAtom, - lpAuctionBalanceUsdc, - ] = await Promise.all([ - neutronChain.queryContract( - tgeMain.contracts.vestingAtomLp, - { - vesting_account: { - address: tgeWallets['auctionVesting'].wallet.address.toString(), + // This participant has a lockup position in ATOM. The user never claimed any rewards nor + // withdrawn the lockup. Expected behaviour: XYK lockup is marked as transferred, all pending + // rewards (generator, lockdrop, airdrop) are paid to the user during migration, liquidity is + // migrated from XYK to PCL pools, PCL lockup entry is created in the PCL lockdrop contract, + // migration for the ATOM pool is finished and all respective lp tokens are staked with the + // incentives contract. + describe('migrate airdropAtomAuctionLockdropMigration participant', () => { + let stateBefore: LiquidityMigrationState; + it('gather state before migration', async () => { + stateBefore = await gatherLiquidityMigrationState( + neutronChain, + tgeWallets[ + 'airdropAtomAuctionLockdropMigration' + ].wallet.address.toString(), + liqMigContracts, + ); + console.log( + `airdropAtomAuctionLockdropMigration migration state before:\n${JSON.stringify( + stateBefore, + )}`, + ); + }); + + it('migrate the user', async () => { + const res = await cmInstantiator.executeContract( + tgeMain.contracts.lockdrop, + JSON.stringify({ + migrate_liquidity_to_pcl_pools: { + user_address_raw: + tgeWallets[ + 'airdropAtomAuctionLockdropMigration' + ].wallet.address.toString(), }, - }, - ), - neutronChain.queryContract( - tgeMain.contracts.vestingUsdcLp, + }), + undefined, { - vesting_account: { - address: tgeWallets['auctionVesting'].wallet.address.toString(), - }, + gas_limit: Long.fromString('15000000'), + amount: [{ denom: NEUTRON_DENOM, amount: '750000' }], }, - ), - neutronChain.queryContract( - tgeMain.pairs.atom_ntrn.liquidity, - { - balance: { - address: tgeMain.contracts.auction, - }, + ); + expect(res.code).toEqual(0); + }); + + it('check user voting power', async () => { + await neutronChain.blockWaiter.waitBlocks(1); + neutronChain.blockWaiter.waitBlocks(1); + const vp = + await neutronChain.queryContract( + lockdropVaultForClAddr, + { + voting_power_at_height: { + address: + tgeWallets[ + 'airdropAtomAuctionLockdropMigration' + ].wallet.address.toString(), + }, + }, + ); + console.log('lockdrop vp:' + vp.power); + isWithinRangeRel( + +vp.power, + votingPowerBeforeLockdrop['airdropAtomAuctionLockdropMigration'], + 0.05, + ); + }); + + let stateAfter: LiquidityMigrationState; + it('gather state after migration', async () => { + stateAfter = await gatherLiquidityMigrationState( + neutronChain, + tgeWallets[ + 'airdropAtomAuctionLockdropMigration' + ].wallet.address.toString(), + liqMigContracts, + ); + console.log( + `airdropAtomAuctionLockdropMigration migration state after:\n${JSON.stringify( + stateAfter, + )}`, + ); + }); + + describe('check user liquidity migration', () => { + const atomLockupKey = 'ATOM1'; + describe('XYK user lockups', () => { + describe('generator rewards', () => { + let userAstroRewards: number; + test('claimable generator ntrn debt', async () => { + userAstroRewards = + +stateBefore.xykUserLockups.claimable_generator_ntrn_debt; + expect(userAstroRewards).toBeGreaterThan(0); + + // total rewards amount equals to sum of all lockup rewards + expect(userAstroRewards).toEqual( + +stateBefore.xykUserLockups.mapped_lockup_infos[atomLockupKey] + .claimable_generator_astro_debt, + ); + + // rewards are claimed during migration => no rewards after it + expect( + +stateAfter.xykUserLockups.claimable_generator_ntrn_debt, + ).toEqual(0); + }); + + test('generator rewards are transferred to the user', async () => { + expect(stateAfter.balances.user.astro).toBeGreaterThan( + stateBefore.balances.user.astro, + ); + // claimed rewards are transferred directly to the user + // assume fluctuation because rewards amount increases every block + isWithinRangeRel( + stateAfter.balances.user.astro - + stateBefore.balances.user.astro, + userAstroRewards, + 0.5, + ); + }); + }); + + describe('astroport lp', () => { + test('lp tokens marked as transferred', async () => { + // lp tokens weren't transferred before migration + expect( + stateBefore.xykUserLockups.mapped_lockup_infos[atomLockupKey] + .astroport_lp_transferred, + ).toBe(null); + + // sanity check that there were some lp tokens in lockups + expect( + +stateAfter.xykUserLockups.mapped_lockup_infos[atomLockupKey] + .astroport_lp_transferred!, + ).toBeGreaterThan(0); + + // all lp tokens are transferred dirung migration to PCL contract + expect( + stateAfter.xykUserLockups.mapped_lockup_infos[atomLockupKey] + .astroport_lp_transferred, + ).toEqual( + stateBefore.xykUserLockups.mapped_lockup_infos[atomLockupKey] + .lp_units_locked, + ); + }); + + test('staked lp amount decreases', async () => { + // all lp from lockups are unstaked from generator + expect(stateAfter.xykAtomStaked).toEqual( + stateBefore.xykAtomStaked - + +stateBefore.xykUserLockups.mapped_lockup_infos[ + atomLockupKey + ].lp_units_locked, + ); + }); + }); + + test('XYK lockup lp token addresses', async () => { + // lp token addresses shouldn't change + expect( + stateAfter.xykUserLockups.mapped_lockup_infos[atomLockupKey] + .astroport_lp_token, + ).toEqual( + stateBefore.xykUserLockups.mapped_lockup_infos[atomLockupKey] + .astroport_lp_token, + ); + }); + }); + + describe('lockdrop participation rewards', () => { + test('ntrn reward marked as transferred', async () => { + // no claims whatsoever happened before migration => ntrn aren't transferred + expect(stateBefore.xykUserLockups.ntrn_transferred).toBe(false); + + // ntrn rewards transfer is processed during migration and is reflected in both contracts + expect(stateAfter.xykUserLockups.ntrn_transferred).toBe(true); + expect(stateAfter.pclUserLockups.ntrn_transferred).toBe(true); + }); + + describe('ntrn transfer from lockdrop to user', () => { + let expectedRewards: number; + test('ntrn rewards received by the user', async () => { + // expectedRewards = one time NTRN rewards + + // airdrop rewards (same as NTRN rewards since airdrop multiplier = 1) + + // a bit of unvested tokens (say 10 more percent — *1.1) + expectedRewards = + +stateBefore.xykUserLockups.total_ntrn_rewards * 2 * 1.1; + const balanceChange = + stateAfter.balances.user.ntrn - + stateBefore.balances.user.ntrn; + // assume fluctuation because of uncertain unvested tokens amount + isWithinRangeRel(balanceChange, expectedRewards, 0.1); + }); + + test('ntrn rewards sent by XYK lockdrop contract', async () => { + const balanceChange = + stateBefore.balances.xykLockdrop.ntrn - + stateAfter.balances.xykLockdrop.ntrn; + expect(balanceChange).toEqual( + +stateBefore.xykUserLockups.total_ntrn_rewards, + ); + }); + }); + + test('no paired assets and lp received by user', async () => { + // as a result of migration a user can only receive ntrn and astro rewards + expect(stateAfter.balances.user.atom).toEqual( + stateBefore.balances.user.atom, + ); + expect(stateAfter.balances.user.usdc).toEqual( + stateBefore.balances.user.usdc, + ); + expect(stateAfter.balances.user.atomXykPairLp).toEqual( + stateBefore.balances.user.atomXykPairLp, + ); + expect(stateAfter.balances.user.usdcXykPairLp).toEqual( + stateBefore.balances.user.usdcXykPairLp, + ); + expect(stateAfter.balances.user.atomPclPairLp).toEqual( + stateBefore.balances.user.atomPclPairLp, + ); + expect(stateAfter.balances.user.usdcPclPairLp).toEqual( + stateBefore.balances.user.usdcPclPairLp, + ); + }); + }); + + describe('PCL user lockups', () => { + test('no user lockup info before migration', async () => { + expect(stateBefore.pclUserLockups).toMatchObject({ + claimable_incentives_debt: '0', + mapped_lockup_infos: {}, + lockup_positions_index: 0, + ntrn_transferred: false, + total_ntrn_rewards: '0', + }); + }); + + describe('astroport lp', () => { + test('lp tokens are locked', async () => { + expect( + +stateAfter.pclUserLockups.mapped_lockup_infos[atomLockupKey] + .lp_units_locked, + ).toBeGreaterThan(0); + }); + + test('lockup shares are roughly equal', async () => { + // sanity check + expect( + stateAfter.pclUserLockups.mapped_lockup_infos[atomLockupKey] + .expected_ntrn_share, + ).toBeGreaterThan(0); + expect( + stateAfter.pclUserLockups.mapped_lockup_infos[atomLockupKey] + .expected_paired_asset_share, + ).toBeGreaterThan(0); + + // equivalent of locked assets should be roughly equal before and after migration + isWithinRangeRel( + stateAfter.pclUserLockups.mapped_lockup_infos[atomLockupKey] + .expected_ntrn_share, + stateBefore.xykUserLockups.mapped_lockup_infos[atomLockupKey] + .expected_ntrn_share, + 0.05, + ); + isWithinRangeRel( + stateAfter.pclUserLockups.mapped_lockup_infos[atomLockupKey] + .expected_paired_asset_share, + stateBefore.xykUserLockups.mapped_lockup_infos[atomLockupKey] + .expected_paired_asset_share, + 0.05, + ); + }); + + test('lp tokens not marked as transferred', async () => { + // on XYK lockdrop contract's side we mark tokens as transferred meaning the contract + // doesn't have them anymore. but on PCL contract's side the tokens are still locked + expect( + stateAfter.pclUserLockups.mapped_lockup_infos[atomLockupKey] + .astroport_lp_transferred, + ).toBe(null); + }); + + test('all ATOM lp tokens are staked with incentives contract', async () => { + // since the user is the last one having a ATOM lockup in XYK, the migration triggers + // staking of all lp tokens associated with the ATOM pool + expect(stateAfter.balances.pclLockdrop.atomPclPairLp).toEqual( + 0, + ); + expect(stateAfter.pclAtomStaked).toEqual( + stateBefore.balances.pclLockdrop.atomPclPairLp + + +stateAfter.pclUserLockups.mapped_lockup_infos[ + atomLockupKey + ].lp_units_locked, + ); + }); + }); + + test('PCL lockup lp token addresses', async () => { + // lp token addresses should correspond to the ones from PCL pairs + expect( + stateAfter.pclUserLockups.mapped_lockup_infos[atomLockupKey] + .astroport_lp_token, + ).toEqual(ntrnAtomPclToken); + }); + + test('lockup positions consistency', async () => { + // all positions should be migrated for the user with no previous claims and unlocks + expect(stateBefore.xykUserLockups.lockup_positions_index).toEqual( + stateAfter.pclUserLockups.lockup_positions_index, + ); + + // unlock timestamps should remain the same + expect( + stateBefore.xykUserLockups.mapped_lockup_infos[atomLockupKey] + .unlock_timestamp, + ).toEqual( + stateAfter.pclUserLockups.mapped_lockup_infos[atomLockupKey] + .unlock_timestamp, + ); + }); + }); + }); + }); + + // These accounts are the only remaining lockdrop participants. Each of them has two lockup + // positions: ATOM for 1 and USDC for 1. They claimed rewards with liquidity unlock for both + // lockups before. Expected behaviour: both withdrawn lockups are ignored and untouched, no + // rewards paid, no balance changes whatsoever, no state changes made to both lockdrop + // contracts, migration transaction emits events informing about the already withdrawn positions. + describe('migrate the rest lockdrop participants', () => { + for (const v of [ + 'airdropAuctionLockdrop', + 'airdropAuctionLockdropVesting', + 'auctionLockdrop', + 'auctionLockdropVesting', + ]) { + describe(`migrate ${v} participant`, () => { + let stateBefore: LiquidityMigrationState; + it('gather state before migration', async () => { + stateBefore = await gatherLiquidityMigrationState( + neutronChain, + tgeWallets[v].wallet.address.toString(), + liqMigContracts, + ); + console.log( + `${v} migration state before:\n${JSON.stringify(stateBefore)}`, + ); + }); + + let migrateRes: BroadcastTx200ResponseTxResponse; + it('migrate the user', async () => { + migrateRes = await cmInstantiator.executeContract( + tgeMain.contracts.lockdrop, + JSON.stringify({ + migrate_liquidity_to_pcl_pools: { + user_address_raw: tgeWallets[v].wallet.address.toString(), + }, + }), + undefined, + { + gas_limit: Long.fromString('15000000'), + amount: [{ denom: NEUTRON_DENOM, amount: '750000' }], + }, + ); + }); + + it('check user voting power', async () => { + await neutronChain.blockWaiter.waitBlocks(1); + const vp = + await neutronChain.queryContract( + lockdropVaultForClAddr, + { + voting_power_at_height: { + address: tgeWallets[v].wallet.address.toString(), + }, + }, + ); + isWithinRangeRel(+vp.power, votingPowerBeforeLockdrop[v], 0.05); + }); + + let stateAfter: LiquidityMigrationState; + it('gather state after migration', async () => { + stateAfter = await gatherLiquidityMigrationState( + neutronChain, + tgeWallets[v].wallet.address.toString(), + liqMigContracts, + ); + console.log( + `${v} migration state after:\n${JSON.stringify(stateAfter)}`, + ); + }); + + describe('check user liquidity migration', () => { + test('user XYK lockup info consistency', async () => { + expect(stateBefore.xykUserLockups).toMatchObject( + stateAfter.xykUserLockups, + ); + }); + + test('no user lockup info in PCL lockdrop', async () => { + expect(stateAfter.pclUserLockups).toMatchObject({ + claimable_incentives_debt: '0', + mapped_lockup_infos: {}, + lockup_positions_index: 0, + ntrn_transferred: false, + total_ntrn_rewards: '0', + }); + }); + + test('no balance changes', async () => { + expect(stateBefore.balances).toMatchObject(stateAfter.balances); + }); + + test('already claimed events emission', async () => { + expect(migrateRes.raw_log).toContain( + '{"key":"ATOM_for_1","value":"already_been_withdrawn"}', + ); + expect(migrateRes.raw_log).toContain( + '{"key":"USDC_for_1","value":"already_been_withdrawn"}', + ); + }); + }); + }); + } + }); + }); + + describe('execute migration handlers: vesting lp', () => { + it('should validate numbers & save claim amount before migration', async () => { + const [ + vestingInfoAtom, + vestingInfoUsdc, + lpAuctionBalanceAtom, + lpAuctionBalanceUsdc, + ] = await Promise.all([ + neutronChain.queryContract( + tgeMain.contracts.vestingAtomLp, + { + vesting_account: { + address: tgeWallets['auctionVesting'].wallet.address.toString(), + }, + }, + ), + neutronChain.queryContract( + tgeMain.contracts.vestingUsdcLp, + { + vesting_account: { + address: tgeWallets['auctionVesting'].wallet.address.toString(), + }, + }, + ), + neutronChain.queryContract( + tgeMain.pairs.atom_ntrn.liquidity, + { + balance: { + address: tgeMain.contracts.auction, + }, }, ), neutronChain.queryContract( @@ -4359,7 +4897,7 @@ describe('Neutron / TGE / Auction', () => { } }); - it('should compare voting power after migrtaion: vesting lp', async () => { + it('should compare voting power after migration: vesting lp', async () => { for (const v of [ 'airdropAuctionVesting', 'airdropAuctionLockdropVesting', @@ -4382,13 +4920,14 @@ describe('Neutron / TGE / Auction', () => { } }); - it('should compare voting power after migrtaion: lockdrop', async () => { + it('should compare voting power after migration: lockdrop', async () => { for (const v of [ 'airdropAuctionLockdrop', 'airdropAuctionLockdropVesting', 'auctionLockdrop', 'auctionLockdropVesting', 'airdropAuctionLockdropVestingMigration', + 'airdropAtomAuctionLockdropMigration', ]) { const vp = await neutronChain.queryContract( @@ -4407,7 +4946,7 @@ describe('Neutron / TGE / Auction', () => { } }); - it('should compare voting power after migrtaion: overall', async () => { + it('should compare voting power after migration: overall', async () => { for (const v of [ 'airdropAuctionVesting', 'airdropAuctionLockdrop', @@ -4416,6 +4955,7 @@ describe('Neutron / TGE / Auction', () => { 'auctionLockdrop', 'auctionLockdropVesting', 'auctionVesting', + 'airdropAtomAuctionLockdropMigration', ]) { const member = new DaoMember(tgeWallets[v], daoMain); const vp = (await member.queryVotingPower()).power | 0; @@ -4525,7 +5065,7 @@ describe('Neutron / TGE / Auction', () => { }); }); - // In PCL contract, the user has two lockups: ATOM for 1 and USDC for 2 + // In PCL contract, the user has two lockups: ATOM for 1 (already withdrawn) and USDC for 2 // In XYK contract, before migration the user had three lockups: ATOM for 1, // USDC for 1 (withdrawn) and USDC for 2 describe('by cmInstantiator', () => { @@ -4596,33 +5136,18 @@ describe('Neutron / TGE / Auction', () => { console.log( `cmInstantiator state before withdrawal:\n${JSON.stringify( stateBefore, - )}`, - ); - }); - - const ntrnToPayGas = 200000; - it('withdraw both remaining lockups from PCL', async () => { - await cmInstantiator.executeContract( - liqMigContracts.pclLockdrop, - JSON.stringify({ - claim_rewards_and_optionally_unlock: { - pool_type: 'USDC', - duration: 2, - withdraw_lp_stake: true, - }, - }), - undefined, - { - gas_limit: Long.fromString('5000000'), - amount: [{ denom: NEUTRON_DENOM, amount: ntrnToPayGas.toString() }], - }, + )}`, ); + }); + + const ntrnToPayGas = 200000; + it('withdraw the only remaining USDC lockup from PCL', async () => { await cmInstantiator.executeContract( liqMigContracts.pclLockdrop, JSON.stringify({ claim_rewards_and_optionally_unlock: { - pool_type: 'ATOM', - duration: 1, + pool_type: 'USDC', + duration: 2, withdraw_lp_stake: true, }, }), @@ -4692,7 +5217,6 @@ describe('Neutron / TGE / Auction', () => { }); describe('funds flow', () => { - const atomLockupKey = 'ATOM1'; const usdcLockupKey = 'USDC2'; describe('generator rewards', () => { it('astro', async () => { @@ -4703,10 +5227,8 @@ describe('Neutron / TGE / Auction', () => { expect( +stateBefore.pclUserLockups.claimable_incentives_debt, ).toEqual( - +stateBefore.pclUserLockups.mapped_lockup_infos[atomLockupKey] - .claimable_incentives_debt + - +stateBefore.pclUserLockups.mapped_lockup_infos[usdcLockupKey] - .claimable_incentives_debt, + +stateBefore.pclUserLockups.mapped_lockup_infos[usdcLockupKey] + .claimable_incentives_debt, ); // assume fluctuation because rewards amount increases every block @@ -4717,39 +5239,21 @@ describe('Neutron / TGE / Auction', () => { ); }); - it('external rewards', async () => { - // sanity check + it('no external rewards available', async () => { + // only ATOM pool is externally incentivised, so no external rewards available for + // the user that only has a USDC lockup position expect( +stateBefore.pclUserLockups.claimable_incentives_external_debt, - ).toBeGreaterThan(0); - expect( - +stateBefore.pclUserLockups.claimable_incentives_external_debt, - ).toEqual( - +stateBefore.pclUserLockups.mapped_lockup_infos[atomLockupKey] // only atom cuz usdc is not incentivized - .claimable_external_incentives_rewards_debt, - ); - - // assume fluctuation because rewards amount increases every block - isWithinRangeRel( - stateAfter.balances.user.external_rewards - - stateBefore.balances.user.external_rewards, - +stateBefore.pclUserLockups.claimable_incentives_external_debt, - 0.5, + ).toEqual(0); + expect(+stateBefore.balances.user.external_rewards).toEqual( + +stateAfter.balances.user.external_rewards, ); }); }); it('lp tokens staked in generator', async () => { // expect staked LP amount to decrease by amount of withdrawn tokens - expect( - stateBefore.pclAtomStakedInGen - stateAfter.pclAtomStakedInGen, - ).toEqual( - +stateBefore.pclUserLockups.mapped_lockup_infos[atomLockupKey] - .lp_units_locked, - ); - expect( - stateBefore.pclUsdcStakedInGen - stateAfter.pclUsdcStakedInGen, - ).toEqual( + expect(stateBefore.pclUsdcStaked - stateAfter.pclUsdcStaked).toEqual( +stateBefore.pclUserLockups.mapped_lockup_infos[usdcLockupKey] .lp_units_locked, ); @@ -4757,11 +5261,6 @@ describe('Neutron / TGE / Auction', () => { it('lp tokens received by the user', async () => { // expect all locked LP transferred to the user - expect(stateAfter.balances.user.atomPclPairLp).toEqual( - stateBefore.balances.user.atomPclPairLp + - +stateBefore.pclUserLockups.mapped_lockup_infos[atomLockupKey] - .lp_units_locked, - ); expect(stateAfter.balances.user.usdcPclPairLp).toEqual( stateBefore.balances.user.usdcPclPairLp + +stateBefore.pclUserLockups.mapped_lockup_infos[usdcLockupKey] @@ -4773,7 +5272,7 @@ describe('Neutron / TGE / Auction', () => { // all ntrn rewards are transferred to the user during migration, so no additional // rewards are expected to be received by the user for withdrawals expect(stateAfter.balances.user.ntrn).toEqual( - stateBefore.balances.user.ntrn - ntrnToPayGas * 4, // fees for 4 withdrawal attempts + stateBefore.balances.user.ntrn - ntrnToPayGas * 3, // fees for 3 withdrawal attempts ); }); }); @@ -5023,15 +5522,11 @@ describe('Neutron / TGE / Auction', () => { it('lp tokens staked in generator', async () => { // expect staked LP amount to decrease by amount of withdrawn tokens - expect( - stateBefore.pclAtomStakedInGen - stateAfter.pclAtomStakedInGen, - ).toEqual( + expect(stateBefore.pclAtomStaked - stateAfter.pclAtomStaked).toEqual( +stateBefore.pclUserLockups.mapped_lockup_infos[atomLockupKey] .lp_units_locked, ); - expect( - stateBefore.pclUsdcStakedInGen - stateAfter.pclUsdcStakedInGen, - ).toEqual( + expect(stateBefore.pclUsdcStaked - stateAfter.pclUsdcStaked).toEqual( +stateBefore.pclUserLockups.mapped_lockup_infos[usdcLockupKey] .lp_units_locked, ); @@ -5061,68 +5556,232 @@ describe('Neutron / TGE / Auction', () => { }); }); - // make sure there are no generator rewards and LP tokens staked by lockdrop contracts - // meaning that all the funds and rewards have been distributed between lockdrop participants - describe('confirm lockdrop withdrawal completeness', () => { - it('no XYK lp tokens staked by XYK lockdrop', async () => { - const stakedAtomLp = await neutronChain.queryContract( - liqMigContracts.generator, - { - deposit: { - lp_token: liqMigContracts.atomXykLp, - user: liqMigContracts.xykLockdrop, - }, - }, - ); - expect(+stakedAtomLp).toBe(0); + // In PCL contract, the user has one lockup: ATOM for 1 + // In XYK contract, before migration the user had one lockup: ATOM for 1 + describe('by airdropAtomAuctionLockdropMigration', () => { + it('no withdrawal available from XYK', async () => { + // nor with withdrawal + await expect( + tgeWallets['airdropAtomAuctionLockdropMigration'].executeContract( + tgeMain.contracts.lockdrop, + JSON.stringify({ + claim_rewards_and_optionally_unlock: { + pool_type: 'ATOM', + duration: 1, + withdraw_lp_stake: true, + }, + }), + ), + ).rejects.toThrow(/Astro LP Tokens have already been claimed!/); + // nor without one + await expect( + tgeWallets['airdropAtomAuctionLockdropMigration'].executeContract( + tgeMain.contracts.lockdrop, + JSON.stringify({ + claim_rewards_and_optionally_unlock: { + pool_type: 'ATOM', + duration: 1, + withdraw_lp_stake: false, + }, + }), + ), + ).rejects.toThrow(/Astro LP Tokens have already been claimed!/); + }); - const stakedUsdcLp = await neutronChain.queryContract( - liqMigContracts.generator, - { - deposit: { - lp_token: liqMigContracts.usdcXykLp, - user: liqMigContracts.xykLockdrop, - }, - }, + let stateBefore: LiquidityMigrationState; + it('gather state before withdrawal', async () => { + stateBefore = await gatherLiquidityMigrationState( + neutronChain, + tgeWallets[ + 'airdropAtomAuctionLockdropMigration' + ].wallet.address.toString(), + liqMigContracts, + ); + console.log( + `airdropAtomAuctionLockdropMigration state before withdrawal:\n${JSON.stringify( + stateBefore, + )}`, ); - expect(+stakedUsdcLp).toBe(0); }); - it('no PCL lp tokens staked by PCL lockdrop', async () => { - const stakedAtomLp = await neutronChain.queryContract( - liqMigContracts.incentives, - { - deposit: { - lp_token: liqMigContracts.atomPclLp, - user: liqMigContracts.pclLockdrop, + const ntrnToPayGas = 200000; + it('withdraw the only lockup from PCL', async () => { + await tgeWallets['airdropAtomAuctionLockdropMigration'].executeContract( + liqMigContracts.pclLockdrop, + JSON.stringify({ + claim_rewards_and_optionally_unlock: { + pool_type: 'ATOM', + duration: 1, + withdraw_lp_stake: true, }, + }), + undefined, + { + gas_limit: Long.fromString('5000000'), + amount: [{ denom: NEUTRON_DENOM, amount: ntrnToPayGas.toString() }], }, ); - expect(+stakedAtomLp).toBe(0); + }); - const stakedUsdcLp = await neutronChain.queryContract( - liqMigContracts.incentives, - { - deposit: { - lp_token: liqMigContracts.usdcPclLp, - user: liqMigContracts.pclLockdrop, + it('no more withdrawal available from PCL', async () => { + // nor with withdrawal + await expect( + tgeWallets['airdropAtomAuctionLockdropMigration'].executeContract( + liqMigContracts.pclLockdrop, + JSON.stringify({ + claim_rewards_and_optionally_unlock: { + pool_type: 'ATOM', + duration: 1, + withdraw_lp_stake: true, + }, + }), + undefined, + { + gas_limit: Long.fromString('5000000'), + amount: [ + { denom: NEUTRON_DENOM, amount: ntrnToPayGas.toString() }, + ], }, - }, + ), + ).rejects.toThrow(/Astro LP Tokens have already been claimed!/); + // nor without one + await expect( + tgeWallets['airdropAtomAuctionLockdropMigration'].executeContract( + liqMigContracts.pclLockdrop, + JSON.stringify({ + claim_rewards_and_optionally_unlock: { + pool_type: 'ATOM', + duration: 1, + withdraw_lp_stake: false, + }, + }), + undefined, + { + gas_limit: Long.fromString('5000000'), + amount: [ + { denom: NEUTRON_DENOM, amount: ntrnToPayGas.toString() }, + ], + }, + ), + ).rejects.toThrow(/Astro LP Tokens have already been claimed!/); + }); + + let stateAfter: LiquidityMigrationState; + it('gather state after withdrawal', async () => { + stateAfter = await gatherLiquidityMigrationState( + neutronChain, + tgeWallets[ + 'airdropAtomAuctionLockdropMigration' + ].wallet.address.toString(), + liqMigContracts, + ); + console.log( + `airdropAtomAuctionLockdropMigration state after withdrawal:\n${JSON.stringify( + stateAfter, + )}`, ); - expect(+stakedUsdcLp).toBe(0); }); - describe('no generator rewards left to be paid', () => { - let state: LiquidityMigrationState; - it('query balances', async () => { - state = await gatherLiquidityMigrationState( - neutronChain, - // any address is fine cuz we're interested in lockdrops balances - cmInstantiator.wallet.address.toString(), - liqMigContracts, + describe('funds flow', () => { + const atomLockupKey = 'ATOM1'; + describe('generator rewards', () => { + it('astro', async () => { + // sanity check + expect( + +stateBefore.pclUserLockups.claimable_incentives_debt, + ).toBeGreaterThan(0); + expect( + +stateBefore.pclUserLockups.claimable_incentives_debt, + ).toEqual( + +stateBefore.pclUserLockups.mapped_lockup_infos[atomLockupKey] + .claimable_incentives_debt, + ); + + // assume fluctuation because rewards amount increases every block + isWithinRangeRel( + stateAfter.balances.user.astro - stateBefore.balances.user.astro, + +stateBefore.pclUserLockups.claimable_incentives_debt, + 0.5, + ); + }); + + it('external rewards', async () => { + // sanity check + expect( + +stateBefore.pclUserLockups.claimable_incentives_external_debt, + ).toBeGreaterThan(0); + expect( + +stateBefore.pclUserLockups.claimable_incentives_external_debt, + ).toEqual( + +stateBefore.pclUserLockups.mapped_lockup_infos[atomLockupKey] + .claimable_external_incentives_rewards_debt, + ); + + // assume fluctuation because rewards amount increases every block + isWithinRangeRel( + stateAfter.balances.user.external_rewards - + stateBefore.balances.user.external_rewards, + +stateBefore.pclUserLockups.claimable_incentives_external_debt, + 0.5, + ); + }); + }); + + it('lp tokens staked in generator', async () => { + // expect staked LP amount to decrease by amount of withdrawn tokens + expect(stateBefore.pclAtomStaked - stateAfter.pclAtomStaked).toEqual( + +stateBefore.pclUserLockups.mapped_lockup_infos[atomLockupKey] + .lp_units_locked, + ); + }); + + it('lp tokens received by the user', async () => { + // expect all locked LP transferred to the user + expect(stateAfter.balances.user.atomPclPairLp).toEqual( + stateBefore.balances.user.atomPclPairLp + + +stateBefore.pclUserLockups.mapped_lockup_infos[atomLockupKey] + .lp_units_locked, + ); + }); + + it('no ntrn received by the user', async () => { + // all ntrn rewards are transferred to the user during migration, so no additional + // rewards are expected to be received by the user for withdrawals + expect(stateAfter.balances.user.ntrn).toEqual( + stateBefore.balances.user.ntrn - ntrnToPayGas * 3, // fees for 3 withdrawal attempts ); }); + }); + }); + + // make sure there are no generator rewards and LP tokens controlled by lockdrop contracts + // meaning that all the funds and rewards have been distributed between lockdrop participants + describe('confirm lockdrop withdrawal completeness', () => { + let state: LiquidityMigrationState; + it('query balances', async () => { + state = await gatherLiquidityMigrationState( + neutronChain, + // any address is fine cuz we're interested in lockdrops balances + cmInstantiator.wallet.address.toString(), + liqMigContracts, + ); + }); + + it('no XYK lp tokens in XYK lockdrop possession', async () => { + expect(state.xykAtomStaked).toEqual(0); + expect(state.xykUsdcStaked).toEqual(0); + expect(state.balances.xykLockdrop.atomXykPairLp).toEqual(0); + expect(state.balances.xykLockdrop.usdcXykPairLp).toEqual(0); + }); + + it('no PCL lp tokens in PCL lockdrop possession', async () => { + expect(state.pclAtomStaked).toEqual(0); + expect(state.pclUsdcStaked).toEqual(0); + expect(state.balances.pclLockdrop.atomPclPairLp).toEqual(0); + expect(state.balances.pclLockdrop.usdcPclPairLp).toEqual(0); + }); + describe('no generator rewards left to be paid', () => { // make sure lockdrop contracts don't have any reward assets left on their accounts // allowing tiny to_uint_floor leftovers it('XYK lockdrop', async () => { @@ -5176,42 +5835,30 @@ const gatherLiquidityMigrationState = async ( contracts, ), }, - xykUsdcStakedInGen: +(await chain.queryContract( - contracts.generator, - { - deposit: { - lp_token: contracts.usdcXykLp, - user: contracts.xykLockdrop, - }, + xykUsdcStaked: +(await chain.queryContract(contracts.generator, { + deposit: { + lp_token: contracts.usdcXykLp, + user: contracts.xykLockdrop, }, - )), - xykAtomStakedInGen: +(await chain.queryContract( - contracts.generator, - { - deposit: { - lp_token: contracts.atomXykLp, - user: contracts.xykLockdrop, - }, + })), + xykAtomStaked: +(await chain.queryContract(contracts.generator, { + deposit: { + lp_token: contracts.atomXykLp, + user: contracts.xykLockdrop, }, - )), - pclUsdcStakedInGen: +(await chain.queryContract( - contracts.incentives, - { - deposit: { - lp_token: contracts.usdcPclLp, - user: contracts.pclLockdrop, - }, + })), + pclUsdcStaked: +(await chain.queryContract(contracts.incentives, { + deposit: { + lp_token: contracts.usdcPclLp, + user: contracts.pclLockdrop, }, - )), - pclAtomStakedInGen: +(await chain.queryContract( - contracts.incentives, - { - deposit: { - lp_token: contracts.atomPclLp, - user: contracts.pclLockdrop, - }, + })), + pclAtomStaked: +(await chain.queryContract(contracts.incentives, { + deposit: { + lp_token: contracts.atomPclLp, + user: contracts.pclLockdrop, }, - )), + })), }; }; @@ -5242,14 +5889,14 @@ type LiquidityMigrationState = { pclLockdrop: LiquidityMigrationBalances; user: LiquidityMigrationBalances; }; - // amount of NTRN/USDC XYK pair LP tokens staked in the generator - xykUsdcStakedInGen: number; - // amount of NTRN/ATOM XYK pair LP tokens staked in the generator - xykAtomStakedInGen: number; - // amount of NTRN/USDC PCL pair LP tokens staked in the generator - pclUsdcStakedInGen: number; - // amount of NTRN/ATOM PCL pair LP tokens staked in the generator - pclAtomStakedInGen: number; + // amount of NTRN/USDC XYK pair LP tokens staked in the generator contract + xykUsdcStaked: number; + // amount of NTRN/ATOM XYK pair LP tokens staked in the generator contract + xykAtomStaked: number; + // amount of NTRN/USDC PCL pair LP tokens staked in the incentives contract + pclUsdcStaked: number; + // amount of NTRN/ATOM PCL pair LP tokens staked in the incentives contract + pclAtomStaked: number; }; // Contains balances in all assets involved in TGE liquidity migration process. From f2765be623a1930f03408e08271298e29061b64b Mon Sep 17 00:00:00 2001 From: Dmitry Kolupaev Date: Fri, 5 Apr 2024 15:36:28 +0400 Subject: [PATCH 41/87] add oracle docker image --- setup/Makefile | 5 ++++- setup/docker-compose.yml | 21 +++++++++++++++++++++ setup/dockerbuilds/Dockerfile.slinky | 23 +++++++++++++++++++++++ 3 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 setup/dockerbuilds/Dockerfile.slinky diff --git a/setup/Makefile b/setup/Makefile index c55256df..66991a1e 100644 --- a/setup/Makefile +++ b/setup/Makefile @@ -13,7 +13,10 @@ build-hermes: build-relayer: cd $(APP_DIR)/neutron-query-relayer/ && make build-docker -build-all: build-gaia build-neutron build-hermes build-relayer +build-slinky: + @docker buildx build --build-context build=$(APP_DIR)/slinky -t slinky-sidecar -f dockerbuilds/Dockerfile.slinky --no-cache --progress=plain . + +build-all: build-gaia build-neutron build-hermes build-relayer build-sidecar start-cosmopark: build-neutron build-relayer @$(COMPOSE) up -d diff --git a/setup/docker-compose.yml b/setup/docker-compose.yml index 8dcb1572..8cda23ab 100644 --- a/setup/docker-compose.yml +++ b/setup/docker-compose.yml @@ -78,6 +78,27 @@ services: networks: - neutron-testing + oracle: + image: slinky-sidecar + volumes: + - ./config/dydx/oracle.json:/oracle/oracle.json + - ./config/dydx/market.json:/oracle/market.json + entrypoint: [ + "slinky", + "--oracle-config-path", "/etc/slinky/default_config/oracle.json", + "--market-config-path", "/etc/slinky/default_config/market.json", + "--chain-id", "test-1", # ? + "--pprof-port", "6060", + "--run-pprof", + ] + ports: + - "8080:8080" # main oracle port + - "8002:8002" # oracle metrics port + - "6060:6060" # pprof port + networks: + - neutron-testing + + volumes: data: name: neutron-testing-data diff --git a/setup/dockerbuilds/Dockerfile.slinky b/setup/dockerbuilds/Dockerfile.slinky new file mode 100644 index 00000000..78eef5c8 --- /dev/null +++ b/setup/dockerbuilds/Dockerfile.slinky @@ -0,0 +1,23 @@ +FROM golang:1.22-bullseye AS build + +WORKDIR /src/slinky +COPY go.mod . + +RUN go mod download + +COPY . . + +RUN make build +RUN make update-local-configs + +FROM ubuntu:rolling +EXPOSE 8080 +EXPOSE 8002 + + +COPY --from=build ./build/* /usr/local/bin/ +COPY --from=build ./config/local/* /etc/slinky/default_config +RUN apt-get update && apt-get install ca-certificates -y + +WORKDIR /usr/local/bin/ +ENTRYPOINT ["slinky", "--oracle-config-path", "/oracle/oracle.json", "--market-config-path", "/oracle/market.json"] From 9428df8a5c20eda8b8a2422646276aaa32511e38 Mon Sep 17 00:00:00 2001 From: Dmitry Kolupaev Date: Sat, 6 Apr 2024 17:47:12 +0400 Subject: [PATCH 42/87] fix docker build --- setup/Makefile | 2 +- setup/docker-compose.yml | 15 +++++---------- setup/dockerbuilds/Dockerfile.slinky | 12 +++++------- 3 files changed, 11 insertions(+), 18 deletions(-) diff --git a/setup/Makefile b/setup/Makefile index 66991a1e..8c395644 100644 --- a/setup/Makefile +++ b/setup/Makefile @@ -14,7 +14,7 @@ build-relayer: cd $(APP_DIR)/neutron-query-relayer/ && make build-docker build-slinky: - @docker buildx build --build-context build=$(APP_DIR)/slinky -t slinky-sidecar -f dockerbuilds/Dockerfile.slinky --no-cache --progress=plain . + @docker buildx build --build-context app=$(APP_DIR)/slinky -t skip-mev/slinky-e2e-oracle -f dockerbuilds/Dockerfile.slinky . build-all: build-gaia build-neutron build-hermes build-relayer build-sidecar diff --git a/setup/docker-compose.yml b/setup/docker-compose.yml index 8cda23ab..5f2e54d9 100644 --- a/setup/docker-compose.yml +++ b/setup/docker-compose.yml @@ -79,22 +79,17 @@ services: - neutron-testing oracle: - image: slinky-sidecar - volumes: - - ./config/dydx/oracle.json:/oracle/oracle.json - - ./config/dydx/market.json:/oracle/market.json + image: skip-mev/slinky-e2e-oracle entrypoint: [ "slinky", - "--oracle-config-path", "/etc/slinky/default_config/oracle.json", - "--market-config-path", "/etc/slinky/default_config/market.json", - "--chain-id", "test-1", # ? - "--pprof-port", "6060", - "--run-pprof", + "--oracle-config-path", + "/oracle/oracle.json", + "--market-config-path", + "/oracle/market.json", ] ports: - "8080:8080" # main oracle port - "8002:8002" # oracle metrics port - - "6060:6060" # pprof port networks: - neutron-testing diff --git a/setup/dockerbuilds/Dockerfile.slinky b/setup/dockerbuilds/Dockerfile.slinky index 78eef5c8..85f7b8ae 100644 --- a/setup/dockerbuilds/Dockerfile.slinky +++ b/setup/dockerbuilds/Dockerfile.slinky @@ -1,22 +1,20 @@ -FROM golang:1.22-bullseye AS build +FROM golang:1.22-bullseye AS builder WORKDIR /src/slinky -COPY go.mod . +COPY --from=app go.mod . RUN go mod download -COPY . . +COPY --from=app . . RUN make build -RUN make update-local-configs FROM ubuntu:rolling EXPOSE 8080 EXPOSE 8002 - -COPY --from=build ./build/* /usr/local/bin/ -COPY --from=build ./config/local/* /etc/slinky/default_config +COPY --from=builder /src/slinky/build/* /usr/local/bin/ +COPY --from=builder /src/slinky/config/local/* /oracle/ RUN apt-get update && apt-get install ca-certificates -y WORKDIR /usr/local/bin/ From b31efb5faf385d9bab5cea9da458393b69166ce4 Mon Sep 17 00:00:00 2001 From: sotnikov-s Date: Mon, 8 Apr 2024 10:50:33 +0300 Subject: [PATCH 43/87] replace round with floor for 50% of locked amount calc --- src/testcases/run_in_band/tge.auction.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/testcases/run_in_band/tge.auction.test.ts b/src/testcases/run_in_band/tge.auction.test.ts index b3c74d23..fa7b853b 100644 --- a/src/testcases/run_in_band/tge.auction.test.ts +++ b/src/testcases/run_in_band/tge.auction.test.ts @@ -1175,7 +1175,7 @@ describe('Neutron / TGE / Auction', () => { tgeMain.contracts.auction, JSON.stringify({ withdraw_lp: { - amount: Math.round( + amount: Math.floor( Number(userInfo.atom_lp_locked) / 2, ).toString(), asset: 'ATOM', @@ -1248,7 +1248,7 @@ describe('Neutron / TGE / Auction', () => { tgeMain.contracts.auction, JSON.stringify({ withdraw_lp: { - amount: Math.round( + amount: Math.floor( Number(userInfo.usdc_lp_locked) / 2, ).toString(), asset: 'USDC', From f07731f9185be313beff280f73c44935a35ee692 Mon Sep 17 00:00:00 2001 From: Albert Andrejev Date: Wed, 7 Feb 2024 20:24:23 +0200 Subject: [PATCH 44/87] Add proposal votes tests --- src/helpers/gaia.ts | 60 +++++++ .../run_in_band/interchain_kv_query.test.ts | 159 +++++++++++++++++- 2 files changed, 218 insertions(+), 1 deletion(-) diff --git a/src/helpers/gaia.ts b/src/helpers/gaia.ts index 1dc317c5..7ca0253f 100644 --- a/src/helpers/gaia.ts +++ b/src/helpers/gaia.ts @@ -3,6 +3,12 @@ import { MsgDelegate, MsgUndelegate, } from '@neutron-org/neutronjsplus/dist/proto/cosmos_sdk/cosmos/staking/v1beta1/tx_pb'; +import { + MsgSubmitProposal, + MsgVote, + TextProposal, + VoteOption, +} from '@neutron-org/neutronjsplus/dist/proto/cosmos_sdk/cosmos/gov/v1beta1/tx_pb'; import { packAnyMsg, WalletWrapper, @@ -48,5 +54,59 @@ export const msgUndelegate = async ( }, [packAnyMsg('/cosmos.staking.v1beta1.MsgUndelegate', msgUndelegate)], ); + + return res?.tx_response; +}; + +export const msgSubmitProposal = async ( + wallet: WalletWrapper, + proposer: string, + amount = '0', +): Promise => { + const msgSubmitProposal = new MsgSubmitProposal({ + proposer, + content: { + typeUrl: '/cosmos.gov.v1beta1.TextProposal', + value: new TextProposal({ + title: 'mock', + description: 'mock', + }).toBinary(), + }, + initialDeposit: [{ denom: wallet.chain.denom, amount: '10000000' }], + }); + const res = await wallet.execTx( + { + gas_limit: Long.fromString('500000'), + amount: [{ denom: wallet.chain.denom, amount: amount }], + }, + [packAnyMsg('/cosmos.gov.v1beta1.MsgSubmitProposal', msgSubmitProposal)], + ); + + return res?.tx_response; +}; + +export const msgVote = async ( + wallet: WalletWrapper, + voter: string, + proposalId: number, + amount = '0', +): Promise => { + console.log('msgVote', voter, proposalId, amount); + const msgVote = new MsgVote({ + voter, + proposalId: BigInt(proposalId), + option: VoteOption.YES, + }); + + const res = await wallet.execTx( + { + gas_limit: Long.fromString('500000'), + amount: [{ denom: wallet.chain.denom, amount: amount }], + }, + [packAnyMsg('/cosmos.gov.v1beta1.MsgVote', msgVote)], + ); + + console.log(res); + return res?.tx_response; }; diff --git a/src/testcases/run_in_band/interchain_kv_query.test.ts b/src/testcases/run_in_band/interchain_kv_query.test.ts index 719cbba7..fa811fab 100644 --- a/src/testcases/run_in_band/interchain_kv_query.test.ts +++ b/src/testcases/run_in_band/interchain_kv_query.test.ts @@ -27,6 +27,7 @@ import { paramChangeProposal } from '@neutron-org/neutronjsplus/dist/proposal'; import axios from 'axios'; import { msgDelegate, msgUndelegate } from '../../helpers/gaia'; import ICoin = cosmosclient.proto.cosmos.base.v1beta1.ICoin; +import { msgSubmitProposal, msgVote } from '../../helpers/gaia'; const config = require('../../config.json'); @@ -354,6 +355,70 @@ const validateBalanceQuery = async ( ); }; +const getCosmosProposalVotesResult = async ( + sdkUrl: string, + proposalId: number, +) => { + try { + return (await axios.get(`${sdkUrl}/cosmos/gov/v1beta1/votes/${proposalId}`)) + .data; + } catch (e) { + return null; + } +}; + +const registerProposalVotesQuery = async ( + cm: WalletWrapper, + contractAddress: string, + connectionId: string, + updatePeriod: number, + proposalId: number, + voters: string[], +) => { + const txResult = await cm.executeContract( + contractAddress, + JSON.stringify({ + register_government_proposal_votes_query: { + connection_id: connectionId, + update_period: updatePeriod, + proposal_id: proposalId, + voters: voters, + }, + }), + ); + + const attribute = getEventAttribute( + (txResult as any).events, + 'neutron', + 'query_id', + ); + + const queryId = parseInt(attribute); + expect(queryId).toBeGreaterThanOrEqual(0); + + return queryId; +}; + +const getProposalVotesResult = ( + cm: CosmosWrapper, + contractAddress: string, + queryId: number, +) => + cm.queryContract<{ + votes: { + proposal_votes: { + proposal_id: number; + voter: string; + options: any; + }[]; + }; + last_submitted_local_height: number; + }>(contractAddress, { + government_proposal_votes: { + query_id: queryId, + }, + }); + describe('Neutron / Interchain KV Query', () => { const connectionId = 'connection-0'; const updatePeriods: { [key: number]: number } = { @@ -395,7 +460,7 @@ describe('Neutron / Interchain KV Query', () => { await daoMember.bondFunds('10000000000'); }); - describe('Instantiate interchain queries contract', () => { + describe.only('Instantiate interchain queries contract', () => { let codeId: CodeId; test('store contract', async () => { codeId = await neutronAccount.storeWasm( @@ -964,6 +1029,98 @@ describe('Neutron / Interchain KV Query', () => { }); }); + describe.only('Proposal votes query', () => { + let queryId: number; + let proposalId: number; + + beforeEach(async () => { + // Top up contract address before running query + await neutronAccount.msgSend(contractAddress, '1000000'); + + // const votes = await getProposalVotesResult(gaiaChain.sdk.url, 1); + // expect(votes).not.toBeNull(); + + const proposalResp = await msgSubmitProposal( + gaiaAccount, + testState.wallets.cosmos.demo2.address.toString(), + '1250', + ); + + const proposalIdBase64 = getEventAttribute( + (proposalResp as any).events, + 'submit_proposal', + Buffer.from('proposal_id').toString('base64'), + ); + + proposalId = parseInt( + Buffer.from(proposalIdBase64, 'base64').toString('utf-8'), + ); + + await msgVote( + gaiaAccount, + testState.wallets.cosmos.demo2.address.toString(), + proposalId, + '1250', + ); + + queryId = await registerProposalVotesQuery( + neutronAccount, + contractAddress, + connectionId, + updatePeriods[2], + proposalId, + [testState.wallets.cosmos.demo2.address.toString()], + ); + }); + + test('proposal votes registered query data', async () => { + const queryResult = await getRegisteredQuery( + neutronChain, + contractAddress, + queryId, + ); + expect(queryResult.registered_query.id).toEqual(queryId); + expect(queryResult.registered_query.owner).toEqual(contractAddress); + // XXX: I could actually check that "key" is correctly derived from contractAddress, + // but this requires bech32 decoding/encoding shenanigans + expect(queryResult.registered_query.keys.length).toEqual(1); + expect(queryResult.registered_query.keys[0].path).toEqual('gov'); + expect(queryResult.registered_query.keys[0].key.length).toBeGreaterThan( + 0, + ); + expect(queryResult.registered_query.query_type).toEqual('kv'); + expect(queryResult.registered_query.transactions_filter).toEqual(''); + expect(queryResult.registered_query.connection_id).toEqual(connectionId); + }); + + test('proposal votes data', async () => { + await waitForICQResultWithRemoteHeight( + neutronChain, + contractAddress, + queryId, + await getHeight(gaiaChain.sdk), + ); + + const interchainQueryResult = await getProposalVotesResult( + neutronChain, + contractAddress, + queryId, + ); + + console.log('interchainQueryResult', interchainQueryResult.votes); + + // expect( + // interchainQueryResult.signing_infos.signing_infos[0].address, + // ).toEqual(cosmosvalconspub); + + // expect( + // parseInt( + // interchainQueryResult.signing_infos.signing_infos[0].index_offset, + // ), + // ).toBeGreaterThan(indexOffset); + }); + }); + describe('Signing info query', () => { let queryId: number; let indexOffset: number; From 709d8409078b0f17fd56578143585db63af9849b Mon Sep 17 00:00:00 2001 From: Albert Andrejev Date: Thu, 22 Feb 2024 14:08:18 +0200 Subject: [PATCH 45/87] Update tests --- src/helpers/gaia.ts | 2 - .../run_in_band/interchain_kv_query.test.ts | 183 ++++++++++++++++-- 2 files changed, 168 insertions(+), 17 deletions(-) diff --git a/src/helpers/gaia.ts b/src/helpers/gaia.ts index 7ca0253f..3eab5701 100644 --- a/src/helpers/gaia.ts +++ b/src/helpers/gaia.ts @@ -106,7 +106,5 @@ export const msgVote = async ( [packAnyMsg('/cosmos.gov.v1beta1.MsgVote', msgVote)], ); - console.log(res); - return res?.tx_response; }; diff --git a/src/testcases/run_in_band/interchain_kv_query.test.ts b/src/testcases/run_in_band/interchain_kv_query.test.ts index fa811fab..17caf4ed 100644 --- a/src/testcases/run_in_band/interchain_kv_query.test.ts +++ b/src/testcases/run_in_band/interchain_kv_query.test.ts @@ -419,6 +419,52 @@ const getProposalVotesResult = ( }, }); +const registerGovProposalsQuery = async ( + cm: WalletWrapper, + contractAddress: string, + connectionId: string, + updatePeriod: number, + proposalsIds: number[], +) => { + const txResult = await cm.executeContract( + contractAddress, + JSON.stringify({ + register_government_proposals_query: { + connection_id: connectionId, + update_period: updatePeriod, + proposals_ids: proposalsIds, + }, + }), + ); + + const attribute = getEventAttribute( + (txResult as any).events, + 'neutron', + 'query_id', + ); + + const queryId = parseInt(attribute); + expect(queryId).toBeGreaterThanOrEqual(0); + + return queryId; +}; + +const getProposalsResult = ( + cm: CosmosWrapper, + contractAddress: string, + queryId: number, +) => + cm.queryContract<{ + proposals: { + proposals: any[]; + }; + last_submitted_local_height: number; + }>(contractAddress, { + government_proposals: { + query_id: queryId, + }, + }); + describe('Neutron / Interchain KV Query', () => { const connectionId = 'connection-0'; const updatePeriods: { [key: number]: number } = { @@ -1029,7 +1075,7 @@ describe('Neutron / Interchain KV Query', () => { }); }); - describe.only('Proposal votes query', () => { + describe('Proposal votes query', () => { let queryId: number; let proposalId: number; @@ -1037,9 +1083,6 @@ describe('Neutron / Interchain KV Query', () => { // Top up contract address before running query await neutronAccount.msgSend(contractAddress, '1000000'); - // const votes = await getProposalVotesResult(gaiaChain.sdk.url, 1); - // expect(votes).not.toBeNull(); - const proposalResp = await msgSubmitProposal( gaiaAccount, testState.wallets.cosmos.demo2.address.toString(), @@ -1069,7 +1112,10 @@ describe('Neutron / Interchain KV Query', () => { connectionId, updatePeriods[2], proposalId, - [testState.wallets.cosmos.demo2.address.toString()], + [ + testState.wallets.cosmos.demo2.address.toString(), + 'cosmos1fku9gl93dy3z4d2y58gza06un72ulmd8trruxw', + ], ); }); @@ -1083,7 +1129,7 @@ describe('Neutron / Interchain KV Query', () => { expect(queryResult.registered_query.owner).toEqual(contractAddress); // XXX: I could actually check that "key" is correctly derived from contractAddress, // but this requires bech32 decoding/encoding shenanigans - expect(queryResult.registered_query.keys.length).toEqual(1); + expect(queryResult.registered_query.keys.length).toEqual(2); expect(queryResult.registered_query.keys[0].path).toEqual('gov'); expect(queryResult.registered_query.keys[0].key.length).toBeGreaterThan( 0, @@ -1107,17 +1153,124 @@ describe('Neutron / Interchain KV Query', () => { queryId, ); - console.log('interchainQueryResult', interchainQueryResult.votes); + expect(interchainQueryResult.votes.proposal_votes).toEqual([ + { + proposal_id: proposalId, + voter: testState.wallets.cosmos.demo2.address.toString(), + options: [{ option: 1, weight: '1000000000000000000' }], + }, + { proposal_id: 0, voter: '', options: [] }, + ]); + }); + }); + + describe('Government proposals query', () => { + let queryId: number; + let proposalId: number; + + beforeEach(async () => { + // Top up contract address before running query + await neutronAccount.msgSend(contractAddress, '1000000'); - // expect( - // interchainQueryResult.signing_infos.signing_infos[0].address, - // ).toEqual(cosmosvalconspub); + const proposalResp = await msgSubmitProposal( + gaiaAccount, + testState.wallets.cosmos.demo2.address.toString(), + '1250', + ); - // expect( - // parseInt( - // interchainQueryResult.signing_infos.signing_infos[0].index_offset, - // ), - // ).toBeGreaterThan(indexOffset); + const proposalIdBase64 = getEventAttribute( + (proposalResp as any).events, + 'submit_proposal', + Buffer.from('proposal_id').toString('base64'), + ); + + proposalId = parseInt( + Buffer.from(proposalIdBase64, 'base64').toString('utf-8'), + ); + + queryId = await registerGovProposalsQuery( + neutronAccount, + contractAddress, + connectionId, + updatePeriods[2], + [proposalId, proposalId + 1, proposalId + 2], + ); + }); + + test('proposals registered query data', async () => { + const queryResult = await getRegisteredQuery( + neutronChain, + contractAddress, + queryId, + ); + expect(queryResult.registered_query.id).toEqual(queryId); + expect(queryResult.registered_query.owner).toEqual(contractAddress); + // XXX: I could actually check that "key" is correctly derived from contractAddress, + // but this requires bech32 decoding/encoding shenanigans + expect(queryResult.registered_query.keys.length).toEqual(3); + expect(queryResult.registered_query.keys[0].path).toEqual('gov'); + expect(queryResult.registered_query.keys[0].key.length).toBeGreaterThan( + 0, + ); + expect(queryResult.registered_query.query_type).toEqual('kv'); + expect(queryResult.registered_query.transactions_filter).toEqual(''); + expect(queryResult.registered_query.connection_id).toEqual(connectionId); + }); + + test('proposals data', async () => { + await waitForICQResultWithRemoteHeight( + neutronChain, + contractAddress, + queryId, + await getHeight(gaiaChain.sdk), + ); + + const interchainQueryResult = await getProposalsResult( + neutronChain, + contractAddress, + queryId, + ); + + expect(interchainQueryResult.proposals.proposals).toEqual([ + { + proposal_id: proposalId, + proposal_type: '/cosmos.gov.v1beta1.TextProposal', + total_deposit: [{ denom: 'uatom', amount: '10000000' }], + status: 2, + submit_time: expect.any(Number), + deposit_end_time: expect.any(Number), + voting_start_time: expect.any(Number), + voting_end_time: expect.any(Number), + final_tally_result: { + yes: '0', + no: '0', + abstain: '0', + no_with_veto: '0', + }, + }, + { + proposal_id: 0, + proposal_type: null, + total_deposit: [], + status: 0, + submit_time: null, + deposit_end_time: null, + voting_start_time: null, + voting_end_time: null, + final_tally_result: null, + }, + { + proposal_id: 0, + proposal_type: null, + total_deposit: [], + status: 0, + submit_time: null, + deposit_end_time: null, + voting_start_time: null, + voting_end_time: null, + final_tally_result: null, + }, + ]); }); }); From 05f80cb9c33e2e188f0c7ad7be5514d1cc0dbbae Mon Sep 17 00:00:00 2001 From: Albert Andrejev Date: Thu, 22 Feb 2024 15:39:15 +0200 Subject: [PATCH 46/87] remove only --- src/testcases/run_in_band/interchain_kv_query.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/testcases/run_in_band/interchain_kv_query.test.ts b/src/testcases/run_in_band/interchain_kv_query.test.ts index 17caf4ed..99fa2a38 100644 --- a/src/testcases/run_in_band/interchain_kv_query.test.ts +++ b/src/testcases/run_in_band/interchain_kv_query.test.ts @@ -506,7 +506,7 @@ describe('Neutron / Interchain KV Query', () => { await daoMember.bondFunds('10000000000'); }); - describe.only('Instantiate interchain queries contract', () => { + describe('Instantiate interchain queries contract', () => { let codeId: CodeId; test('store contract', async () => { codeId = await neutronAccount.storeWasm( From 43e0d7972baae46c2a62bf0036da10bcad9c86c0 Mon Sep 17 00:00:00 2001 From: Albert Andrejev Date: Sun, 25 Feb 2024 22:02:52 +0200 Subject: [PATCH 47/87] fix after rebase --- src/helpers/gaia.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/helpers/gaia.ts b/src/helpers/gaia.ts index 3eab5701..1d85f3fe 100644 --- a/src/helpers/gaia.ts +++ b/src/helpers/gaia.ts @@ -6,14 +6,16 @@ import { import { MsgSubmitProposal, MsgVote, - TextProposal, - VoteOption, } from '@neutron-org/neutronjsplus/dist/proto/cosmos_sdk/cosmos/gov/v1beta1/tx_pb'; import { packAnyMsg, WalletWrapper, } from '@neutron-org/neutronjsplus/dist/cosmos'; import Long from 'long'; +import { + TextProposal, + VoteOption, +} from '@neutron-org/neutronjsplus/dist/proto/cosmos_sdk/cosmos/gov/v1beta1/gov_pb'; export const msgDelegate = async ( wallet: WalletWrapper, From 25037fbddcb96ce26f43c22e2cee8b160eae7323 Mon Sep 17 00:00:00 2001 From: Albert Andrejev Date: Sun, 25 Feb 2024 22:34:17 +0200 Subject: [PATCH 48/87] fix tests --- src/testcases/run_in_band/interchain_kv_query.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/testcases/run_in_band/interchain_kv_query.test.ts b/src/testcases/run_in_band/interchain_kv_query.test.ts index 99fa2a38..4086cf4a 100644 --- a/src/testcases/run_in_band/interchain_kv_query.test.ts +++ b/src/testcases/run_in_band/interchain_kv_query.test.ts @@ -381,7 +381,7 @@ const registerProposalVotesQuery = async ( register_government_proposal_votes_query: { connection_id: connectionId, update_period: updatePeriod, - proposal_id: proposalId, + proposals_ids: [proposalId], voters: voters, }, }), From 7fba8ca600b6ddd3569244c05de509760d76eb2b Mon Sep 17 00:00:00 2001 From: Albert Andrejev Date: Sun, 25 Feb 2024 22:37:25 +0200 Subject: [PATCH 49/87] remove not used function --- .../run_in_band/interchain_kv_query.test.ts | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/src/testcases/run_in_band/interchain_kv_query.test.ts b/src/testcases/run_in_band/interchain_kv_query.test.ts index 4086cf4a..17b73ec4 100644 --- a/src/testcases/run_in_band/interchain_kv_query.test.ts +++ b/src/testcases/run_in_band/interchain_kv_query.test.ts @@ -355,18 +355,6 @@ const validateBalanceQuery = async ( ); }; -const getCosmosProposalVotesResult = async ( - sdkUrl: string, - proposalId: number, -) => { - try { - return (await axios.get(`${sdkUrl}/cosmos/gov/v1beta1/votes/${proposalId}`)) - .data; - } catch (e) { - return null; - } -}; - const registerProposalVotesQuery = async ( cm: WalletWrapper, contractAddress: string, From 8d5d08706b927956bf0e200aa391064d967e2966 Mon Sep 17 00:00:00 2001 From: Dmitry Kolupaev Date: Sat, 6 Apr 2024 17:47:23 +0400 Subject: [PATCH 50/87] remove not needed stuff --- setup/docker-compose.yml | 2 +- src/testcases/parallel/slinky.test.ts | 110 +++++++++++++++++++------- 2 files changed, 82 insertions(+), 30 deletions(-) diff --git a/setup/docker-compose.yml b/setup/docker-compose.yml index 5f2e54d9..ecbb938d 100644 --- a/setup/docker-compose.yml +++ b/setup/docker-compose.yml @@ -12,6 +12,7 @@ services: - 8090:9090 environment: - RUN_BACKGROUND=0 + - ORACLE_ADDRESS=oracle:8080 networks: - neutron-testing @@ -93,7 +94,6 @@ services: networks: - neutron-testing - volumes: data: name: neutron-testing-data diff --git a/src/testcases/parallel/slinky.test.ts b/src/testcases/parallel/slinky.test.ts index b5065909..55784b81 100644 --- a/src/testcases/parallel/slinky.test.ts +++ b/src/testcases/parallel/slinky.test.ts @@ -6,9 +6,13 @@ import { ADMIN_MODULE_ADDRESS, } from '@neutron-org/neutronjsplus/dist/cosmos'; import { TestStateLocalCosmosTestNet } from '@neutron-org/neutronjsplus'; -import { Wallet } from '@neutron-org/neutronjsplus/dist/types'; import { getWithAttempts } from '@neutron-org/neutronjsplus/dist/wait'; -import { Dao, DaoMember, getDaoContracts } from '@neutron-org/neutronjsplus/dist/dao'; +import { + Dao, + DaoMember, + getDaoContracts, +} from '@neutron-org/neutronjsplus/dist/dao'; +import axios from 'axios'; const config = require('../../config.json'); @@ -50,21 +54,13 @@ describe('Neutron / Slinky', () => { 20, ); }); - // test('check voting power', async () => { - // await getWithAttempts( - // neutronChain.blockWaiter, - // async () => await dao.queryTotalVotingPower(), - // async (response) => response.power == 21000, - // 20, - // ); - // }); }); describe('submit proposal', () => { test('create proposal', async () => { proposalId = await daoMember1.submitSingleChoiceProposal( 'Proposal for update marketmap', - 'UpdateMarketmap proposal. This one will pass', + 'Add new marketmap with currency pair', [updateMarketMapProposal()], '1000', ); @@ -87,26 +83,27 @@ describe('Neutron / Slinky', () => { }); }); - describe('Module fetches prices', () => { - // TODO - }); -}); - -// const queryPrices = async(): Promise => { -// const req = await axios.get( -// `${this.sdk.url}/slinky/oracle/v1/get_prices`, -// ); - -// return req.data.prices; -// } + describe('module fetches prices', () => { + test('currency pairs not empty', async () => { + // wait to make sure we updated the price in oracle module + await neutronChain.blockWaiter.waitBlocks(5); + // check + const res = await queryAllCurrencyPairs(neutronChain.sdk); + expect(res.currency_pairs[0].Base).toBe('ETH'); + expect(res.currency_pairs[0].Quote).toBe('USDT'); + }); -// const queryAllTickers = async(): Promise => { -// const req = await axios.get( -// `${this.sdk.url}/slinky/oracle/v1/get_all_tickers`, -// ); + test('prices not empty', async () => { + const res = await queryPrices(neutronChain.sdk, ['ETH/USDT']); + expect(+res.prices[0].price.price).toBeGreaterThan(0); + }); -// return req.data.currency_pairs; -// } + test('eth price present', async () => { + const res = await queryPrice(neutronChain.sdk, 'ETH', 'USDT'); + expect(+res.price.price).toBeGreaterThan(0); + }); + }); +}); const updateMarketMapMessage = JSON.stringify({ '@type': '/slinky.marketmap.v1.MsgUpdateMarketMap', @@ -162,3 +159,58 @@ const updateMarketMapProposal = (): any => ({ }, }, }); + +type GetPriceResponse = { + price: { + price: string; + block_timestamp: string; + block_height: string; + }; + nonce: string; + decimals: string; + id: string; +}; + +type GetPricesResponse = { + prices: GetPriceResponse[]; +}; + +type CurrencyPair = { + Quote: string; + Base: string; +}; + +type GetAllCurrencyPairsResponse = { + currency_pairs: CurrencyPair[]; +}; + +const queryPrice = async (sdk: any, base: string, quote: string): Promise => { + try { + const req = await axios.get(`${sdk.url}/slinky/oracle/v1/get_price`, { + params: { + 'currency_pair.Base': base, + 'currency_pair.Quote': quote, + }, + }); + return req.data; + } catch (e) { + if (e.response?.data?.message !== undefined) { + throw new Error(e.response?.data?.message); + } + throw e; + } +}; + +const queryPrices = async (sdk: any, currencyPairIds: string[]): Promise => { + const req = await axios.get(`${sdk.url}/slinky/oracle/v1/get_prices`, { + params: { currency_pair_ids: currencyPairIds.join(',') }, + }); + + return req.data; +}; + +const queryAllCurrencyPairs = async (sdk: any): Promise => { + const req = await axios.get(`${sdk.url}/slinky/oracle/v1/get_all_tickers`); + + return req.data; +}; From 7af4e3a6151acfa97d688e7da154be410a0a7882 Mon Sep 17 00:00:00 2001 From: Albert Andrejev Date: Tue, 9 Apr 2024 22:56:00 +0300 Subject: [PATCH 51/87] fix tests --- .../run_in_band/interchain_kv_query.test.ts | 38 ++++++++++--------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/src/testcases/run_in_band/interchain_kv_query.test.ts b/src/testcases/run_in_band/interchain_kv_query.test.ts index 17b73ec4..d45b8ad0 100644 --- a/src/testcases/run_in_band/interchain_kv_query.test.ts +++ b/src/testcases/run_in_band/interchain_kv_query.test.ts @@ -492,6 +492,9 @@ describe('Neutron / Interchain KV Query', () => { const dao = new Dao(neutronChain, daoContracts); const daoMember = new DaoMember(neutronAccount, dao); await daoMember.bondFunds('10000000000'); + + const validatorAddress = testState.wallets.cosmos.val1.address.toString(); + const delegatorAddress = testState.wallets.cosmos.demo2.address.toString(); }); describe('Instantiate interchain queries contract', () => { @@ -759,7 +762,7 @@ describe('Neutron / Interchain KV Query', () => { gaiaAccount, testState.wallets.cosmos.demo2.address.toString(), testState.wallets.cosmos.val1.address.toString(), - '3000', + '1500000', ); await waitForICQResultWithRemoteHeight( neutronChain, @@ -773,7 +776,7 @@ describe('Neutron / Interchain KV Query', () => { queryId, ); expect(interchainQueryResult.delegations[0].amount.amount).toEqual( - (3000).toString(), + (1500000).toString(), ); }); }); @@ -1077,14 +1080,14 @@ describe('Neutron / Interchain KV Query', () => { '1250', ); - const proposalIdBase64 = getEventAttribute( - (proposalResp as any).events, - 'submit_proposal', - Buffer.from('proposal_id').toString('base64'), - ); + testState.wallets.neutron.demo1; proposalId = parseInt( - Buffer.from(proposalIdBase64, 'base64').toString('utf-8'), + getEventAttribute( + (proposalResp as any).events, + 'submit_proposal', + 'proposal_id', + ), ); await msgVote( @@ -1141,11 +1144,14 @@ describe('Neutron / Interchain KV Query', () => { queryId, ); + console.log('proposalId'); + console.log(proposalId); + expect(interchainQueryResult.votes.proposal_votes).toEqual([ { proposal_id: proposalId, voter: testState.wallets.cosmos.demo2.address.toString(), - options: [{ option: 1, weight: '1000000000000000000' }], + options: [{ option: 1, weight: '1.000000000000000000' }], }, { proposal_id: 0, voter: '', options: [] }, ]); @@ -1166,14 +1172,12 @@ describe('Neutron / Interchain KV Query', () => { '1250', ); - const proposalIdBase64 = getEventAttribute( - (proposalResp as any).events, - 'submit_proposal', - Buffer.from('proposal_id').toString('base64'), - ); - proposalId = parseInt( - Buffer.from(proposalIdBase64, 'base64').toString('utf-8'), + getEventAttribute( + (proposalResp as any).events, + 'submit_proposal', + 'proposal_id', + ), ); queryId = await registerGovProposalsQuery( @@ -1222,7 +1226,7 @@ describe('Neutron / Interchain KV Query', () => { expect(interchainQueryResult.proposals.proposals).toEqual([ { proposal_id: proposalId, - proposal_type: '/cosmos.gov.v1beta1.TextProposal', + proposal_type: '/cosmos.gov.v1.MsgExecLegacyContent', total_deposit: [{ denom: 'uatom', amount: '10000000' }], status: 2, submit_time: expect.any(Number), From dfb057c3e761ce3a90fc5a3b235f63d2a5dc0bbd Mon Sep 17 00:00:00 2001 From: Albert Andrejev Date: Tue, 9 Apr 2024 22:58:29 +0300 Subject: [PATCH 52/87] remove unused vars --- src/testcases/run_in_band/interchain_kv_query.test.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/testcases/run_in_band/interchain_kv_query.test.ts b/src/testcases/run_in_band/interchain_kv_query.test.ts index d45b8ad0..4dde9641 100644 --- a/src/testcases/run_in_band/interchain_kv_query.test.ts +++ b/src/testcases/run_in_band/interchain_kv_query.test.ts @@ -492,9 +492,6 @@ describe('Neutron / Interchain KV Query', () => { const dao = new Dao(neutronChain, daoContracts); const daoMember = new DaoMember(neutronAccount, dao); await daoMember.bondFunds('10000000000'); - - const validatorAddress = testState.wallets.cosmos.val1.address.toString(); - const delegatorAddress = testState.wallets.cosmos.demo2.address.toString(); }); describe('Instantiate interchain queries contract', () => { From 4b93588f343bd182dfaa1b72c196b712bf61e9da Mon Sep 17 00:00:00 2001 From: Dmitry Kolupaev Date: Mon, 8 Apr 2024 19:28:28 +0400 Subject: [PATCH 53/87] extract slinky stuff into neutronjsplus --- package.json | 2 +- setup/.tool-versions | 1 + src/testcases/parallel/slinky.test.ts | 159 +-- yarn.lock | 1537 +++++++++++++------------ 4 files changed, 821 insertions(+), 878 deletions(-) create mode 100644 setup/.tool-versions diff --git a/package.json b/package.json index e16185e9..6d44d328 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "@cosmos-client/core": "^0.47.4", "@cosmos-client/cosmwasm": "^0.40.3", "@cosmos-client/ibc": "^1.2.1", - "@neutron-org/neutronjsplus": "neutron-org/neutronjsplus#feat/sdk-50", + "@neutron-org/neutronjsplus": "neutron-org/neutronjsplus#03fb9963d35104a180d9cf0ad7252e3914669395", "@types/lodash": "^4.14.182", "@types/long": "^5.0.0", "axios": "^0.27.2", diff --git a/setup/.tool-versions b/setup/.tool-versions new file mode 100644 index 00000000..3f74418c --- /dev/null +++ b/setup/.tool-versions @@ -0,0 +1 @@ +nodejs 16.20.0 diff --git a/src/testcases/parallel/slinky.test.ts b/src/testcases/parallel/slinky.test.ts index 55784b81..9f605d18 100644 --- a/src/testcases/parallel/slinky.test.ts +++ b/src/testcases/parallel/slinky.test.ts @@ -3,7 +3,6 @@ import { WalletWrapper, CosmosWrapper, NEUTRON_DENOM, - ADMIN_MODULE_ADDRESS, } from '@neutron-org/neutronjsplus/dist/cosmos'; import { TestStateLocalCosmosTestNet } from '@neutron-org/neutronjsplus'; import { getWithAttempts } from '@neutron-org/neutronjsplus/dist/wait'; @@ -12,7 +11,6 @@ import { DaoMember, getDaoContracts, } from '@neutron-org/neutronjsplus/dist/dao'; -import axios from 'axios'; const config = require('../../config.json'); @@ -58,10 +56,47 @@ describe('Neutron / Slinky', () => { describe('submit proposal', () => { test('create proposal', async () => { - proposalId = await daoMember1.submitSingleChoiceProposal( + proposalId = await daoMember1.submitUpdateMarketMap( 'Proposal for update marketmap', 'Add new marketmap with currency pair', - [updateMarketMapProposal()], + [ + { + ticker: { + currency_pair: { + Base: 'ETH', + Quote: 'USDT', + }, + decimals: 8, + min_provider_count: 1, + enabled: true, + metadata_JSON: '{}', + }, + providers: { + providers: [ + { + name: 'kucoin_ws', + off_chain_ticker: 'eth-usdt', + }, + ], + }, + paths: { + paths: [ + { + operations: [ + { + provider: 'kucoin_ws', + currency_pair: { + Base: 'ETH', + Quote: 'USDT', + }, + invert: false, + }, + ], + }, + ], + }, + }, + ], '1000', ); }); @@ -88,129 +123,19 @@ describe('Neutron / Slinky', () => { // wait to make sure we updated the price in oracle module await neutronChain.blockWaiter.waitBlocks(5); // check - const res = await queryAllCurrencyPairs(neutronChain.sdk); + const res = await neutronChain.queryOracleAllCurrencyPairs(); expect(res.currency_pairs[0].Base).toBe('ETH'); expect(res.currency_pairs[0].Quote).toBe('USDT'); }); test('prices not empty', async () => { - const res = await queryPrices(neutronChain.sdk, ['ETH/USDT']); + const res = await neutronChain.queryOraclePrices(['ETH/USDT']); expect(+res.prices[0].price.price).toBeGreaterThan(0); }); test('eth price present', async () => { - const res = await queryPrice(neutronChain.sdk, 'ETH', 'USDT'); + const res = await neutronChain.queryOraclePrice('ETH', 'USDT'); expect(+res.price.price).toBeGreaterThan(0); }); }); }); - -const updateMarketMapMessage = JSON.stringify({ - '@type': '/slinky.marketmap.v1.MsgUpdateMarketMap', - signer: ADMIN_MODULE_ADDRESS, - create_markets: [ - { - ticker: { - currency_pair: { - Base: 'ETH', - Quote: 'USDT', - }, - decimals: 8, - min_provider_count: 1, - enabled: true, - metadata_JSON: '{}', - }, - providers: { - providers: [ - { - name: 'kucoin_ws', - off_chain_ticker: 'eth-usdt', - }, - ], - }, - paths: { - paths: [ - { - operations: [ - { - provider: 'kucoin_ws', - currency_pair: { - Base: 'ETH', - Quote: 'USDT', - }, - invert: false, - }, - ], - }, - ], - }, - }, - ], -}); - -const updateMarketMapProposal = (): any => ({ - custom: { - submit_admin_proposal: { - admin_proposal: { - proposal_execute_message: { - message: updateMarketMapMessage, - }, - }, - }, - }, -}); - -type GetPriceResponse = { - price: { - price: string; - block_timestamp: string; - block_height: string; - }; - nonce: string; - decimals: string; - id: string; -}; - -type GetPricesResponse = { - prices: GetPriceResponse[]; -}; - -type CurrencyPair = { - Quote: string; - Base: string; -}; - -type GetAllCurrencyPairsResponse = { - currency_pairs: CurrencyPair[]; -}; - -const queryPrice = async (sdk: any, base: string, quote: string): Promise => { - try { - const req = await axios.get(`${sdk.url}/slinky/oracle/v1/get_price`, { - params: { - 'currency_pair.Base': base, - 'currency_pair.Quote': quote, - }, - }); - return req.data; - } catch (e) { - if (e.response?.data?.message !== undefined) { - throw new Error(e.response?.data?.message); - } - throw e; - } -}; - -const queryPrices = async (sdk: any, currencyPairIds: string[]): Promise => { - const req = await axios.get(`${sdk.url}/slinky/oracle/v1/get_prices`, { - params: { currency_pair_ids: currencyPairIds.join(',') }, - }); - - return req.data; -}; - -const queryAllCurrencyPairs = async (sdk: any): Promise => { - const req = await axios.get(`${sdk.url}/slinky/oracle/v1/get_all_tickers`); - - return req.data; -}; diff --git a/yarn.lock b/yarn.lock index 29a15f78..0679d457 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8,55 +8,55 @@ integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== "@ampproject/remapping@^2.2.0": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== + version "2.3.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" - integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.23.5", "@babel/code-frame@^7.24.1", "@babel/code-frame@^7.24.2": + version "7.24.2" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.2.tgz#718b4b19841809a58b29b68cde80bc5e1aa6d9ae" + integrity sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ== dependencies: - "@babel/highlight" "^7.23.4" - chalk "^2.4.2" + "@babel/highlight" "^7.24.2" + picocolors "^1.0.0" -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9", "@babel/compat-data@^7.23.3", "@babel/compat-data@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" - integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.5", "@babel/compat-data@^7.24.4": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.4.tgz#6f102372e9094f25d908ca0d34fc74c74606059a" + integrity sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ== -"@babel/core@^7.11.6", "@babel/core@^7.12.3": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.5.tgz#6e23f2acbcb77ad283c5ed141f824fd9f70101c7" - integrity sha512-Cwc2XjUrG4ilcfOw4wBAK+enbdgwAcAJCfGUItPBKR7Mjw4aEfAFYrLxeRp4jWgtNIKn3n2AlBOfwwafl+42/g== +"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.4.tgz#1f758428e88e0d8c563874741bc4ffc4f71a4717" + integrity sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.23.5" - "@babel/generator" "^7.23.5" - "@babel/helper-compilation-targets" "^7.22.15" + "@babel/code-frame" "^7.24.2" + "@babel/generator" "^7.24.4" + "@babel/helper-compilation-targets" "^7.23.6" "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.23.5" - "@babel/parser" "^7.23.5" - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.5" - "@babel/types" "^7.23.5" + "@babel/helpers" "^7.24.4" + "@babel/parser" "^7.24.4" + "@babel/template" "^7.24.0" + "@babel/traverse" "^7.24.1" + "@babel/types" "^7.24.0" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.23.5", "@babel/generator@^7.7.2": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.5.tgz#17d0a1ea6b62f351d281350a5f80b87a810c4755" - integrity sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA== +"@babel/generator@^7.24.1", "@babel/generator@^7.24.4", "@babel/generator@^7.7.2": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.4.tgz#1fc55532b88adf952025d5d2d1e71f946cb1c498" + integrity sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw== dependencies: - "@babel/types" "^7.23.5" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" + "@babel/types" "^7.24.0" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" jsesc "^2.5.1" "@babel/helper-annotate-as-pure@^7.22.5": @@ -73,28 +73,28 @@ dependencies: "@babel/types" "^7.22.15" -"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" - integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== +"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" + integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-validator-option" "^7.22.15" - browserslist "^4.21.9" + "@babel/compat-data" "^7.23.5" + "@babel/helper-validator-option" "^7.23.5" + browserslist "^4.22.2" lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.22.15", "@babel/helper-create-class-features-plugin@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.5.tgz#2a8792357008ae9ce8c0f2b78b9f646ac96b314b" - integrity sha512-QELlRWxSpgdwdJzSJn4WAhKC+hvw/AtHbbrIoncKHkhKKR/luAlKkgBDcri1EzWAo8f8VvYVryEHN4tax/V67A== +"@babel/helper-create-class-features-plugin@^7.24.1", "@babel/helper-create-class-features-plugin@^7.24.4": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.4.tgz#c806f73788a6800a5cfbbc04d2df7ee4d927cce3" + integrity sha512-lG75yeuUSVu0pIcbhiYMXBXANHrpUPaOfu7ryAzskCgKUHuAxRQI5ssrtmF0X9UXldPlvT0XM/A4F44OXRt6iQ== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-function-name" "^7.23.0" "@babel/helper-member-expression-to-functions" "^7.23.0" "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.20" + "@babel/helper-replace-supers" "^7.24.1" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" semver "^6.3.1" @@ -108,10 +108,10 @@ regexpu-core "^5.3.1" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz#a71c10f7146d809f4a256c373f462d9bba8cf6ba" - integrity sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug== +"@babel/helper-define-polyfill-provider@^0.6.1": + version "0.6.1" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.1.tgz#fadc63f0c2ff3c8d02ed905dcea747c5b0fb74fd" + integrity sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA== dependencies: "@babel/helper-compilation-targets" "^7.22.6" "@babel/helper-plugin-utils" "^7.22.5" @@ -139,19 +139,19 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-member-expression-to-functions@^7.22.15", "@babel/helper-member-expression-to-functions@^7.23.0": +"@babel/helper-member-expression-to-functions@^7.23.0": version "7.23.0" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366" integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== dependencies: "@babel/types" "^7.23.0" -"@babel/helper-module-imports@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" - integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== +"@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.24.1": + version "7.24.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz#6ac476e6d168c7c23ff3ba3cf4f7841d46ac8128" + integrity sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg== dependencies: - "@babel/types" "^7.22.15" + "@babel/types" "^7.24.0" "@babel/helper-module-transforms@^7.23.3": version "7.23.3" @@ -171,10 +171,10 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" - integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz#945681931a52f15ce879fd5b86ce2dae6d3d7f2a" + integrity sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w== "@babel/helper-remap-async-to-generator@^7.22.20": version "7.22.20" @@ -185,13 +185,13 @@ "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-wrap-function" "^7.22.20" -"@babel/helper-replace-supers@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz#e37d367123ca98fe455a9887734ed2e16eb7a793" - integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== +"@babel/helper-replace-supers@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz#7085bd19d4a0b7ed8f405c1ed73ccb70f323abc1" + integrity sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ== dependencies: "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-member-expression-to-functions" "^7.22.15" + "@babel/helper-member-expression-to-functions" "^7.23.0" "@babel/helper-optimise-call-expression" "^7.22.5" "@babel/helper-simple-access@^7.22.5": @@ -216,16 +216,16 @@ "@babel/types" "^7.22.5" "@babel/helper-string-parser@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" - integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz#f99c36d3593db9540705d0739a1f10b5e20c696e" + integrity sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ== "@babel/helper-validator-identifier@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== -"@babel/helper-validator-option@^7.22.15", "@babel/helper-validator-option@^7.23.5": +"@babel/helper-validator-option@^7.23.5": version "7.23.5" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== @@ -239,52 +239,61 @@ "@babel/template" "^7.22.15" "@babel/types" "^7.22.19" -"@babel/helpers@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.5.tgz#52f522840df8f1a848d06ea6a79b79eefa72401e" - integrity sha512-oO7us8FzTEsG3U6ag9MfdF1iA/7Z6dz+MtFhifZk8C8o453rGJFFWUP1t+ULM9TUIAzC9uxXEiXjOiVMyd7QPg== +"@babel/helpers@^7.24.4": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.4.tgz#dc00907fd0d95da74563c142ef4cd21f2cb856b6" + integrity sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw== dependencies: - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.5" - "@babel/types" "^7.23.5" + "@babel/template" "^7.24.0" + "@babel/traverse" "^7.24.1" + "@babel/types" "^7.24.0" -"@babel/highlight@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" - integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== +"@babel/highlight@^7.24.2": + version "7.24.2" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.2.tgz#3f539503efc83d3c59080a10e6634306e0370d26" + integrity sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA== dependencies: "@babel/helper-validator-identifier" "^7.22.20" chalk "^2.4.2" js-tokens "^4.0.0" + picocolors "^1.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.5.tgz#37dee97c4752af148e1d38c34b856b2507660563" - integrity sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.24.0", "@babel/parser@^7.24.1", "@babel/parser@^7.24.4": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.4.tgz#234487a110d89ad5a3ed4a8a566c36b9453e8c88" + integrity sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg== -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz#5cd1c87ba9380d0afb78469292c954fee5d2411a" - integrity sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ== +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.24.4": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.4.tgz#6125f0158543fb4edf1c22f322f3db67f21cb3e1" + integrity sha512-qpl6vOOEEzTLLcsuqYYo8yDtrTocmu2xkGvgNebvPjT9DTtfFYGmgDqY+rBYXNlqL4s9qLDn6xkrJv4RxAPiTA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz#f6652bb16b94f8f9c20c50941e16e9756898dc5d" - integrity sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz#b645d9ba8c2bc5b7af50f0fe949f9edbeb07c8cf" + integrity sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz#da8261f2697f0f41b0855b91d3a20a1fbfd271d3" + integrity sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.0" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.23.3" + "@babel/plugin-transform-optional-chaining" "^7.24.1" -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.3.tgz#20c60d4639d18f7da8602548512e9d3a4c8d7098" - integrity sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w== +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.1.tgz#1181d9685984c91d657b8ddf14f0487a6bab2988" + integrity sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw== dependencies: "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": version "7.21.0-placeholder-for-preset-env.2" @@ -333,19 +342,19 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-import-assertions@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz#9c05a7f592982aff1a2768260ad84bcd3f0c77fc" - integrity sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw== +"@babel/plugin-syntax-import-assertions@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz#db3aad724153a00eaac115a3fb898de544e34971" + integrity sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-syntax-import-attributes@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz#992aee922cf04512461d7dae3ff6951b90a2dc06" - integrity sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA== +"@babel/plugin-syntax-import-attributes@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz#c66b966c63b714c4eec508fcf5763b1f2d381093" + integrity sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-import-meta@^7.10.4", "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" @@ -361,12 +370,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.23.3", "@babel/plugin-syntax-jsx@^7.7.2": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz#8f2e4f8a9b5f9aa16067e142c1ac9cd9f810f473" - integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== +"@babel/plugin-syntax-jsx@^7.24.1", "@babel/plugin-syntax-jsx@^7.7.2": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz#3f6ca04b8c841811dbc3c5c5f837934e0d626c10" + integrity sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" @@ -424,12 +433,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.23.3", "@babel/plugin-syntax-typescript@^7.7.2": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz#24f460c85dbbc983cd2b9c4994178bcc01df958f" - integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ== +"@babel/plugin-syntax-typescript@^7.24.1", "@babel/plugin-syntax-typescript@^7.7.2": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz#b3bcc51f396d15f3591683f90239de143c076844" + integrity sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-unicode-sets-regex@^7.18.6": version "7.18.6" @@ -439,212 +448,212 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-arrow-functions@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz#94c6dcfd731af90f27a79509f9ab7fb2120fc38b" - integrity sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ== +"@babel/plugin-transform-arrow-functions@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz#2bf263617060c9cc45bcdbf492b8cc805082bf27" + integrity sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-async-generator-functions@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.4.tgz#93ac8e3531f347fba519b4703f9ff2a75c6ae27a" - integrity sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw== +"@babel/plugin-transform-async-generator-functions@^7.24.3": + version "7.24.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.3.tgz#8fa7ae481b100768cc9842c8617808c5352b8b89" + integrity sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg== dependencies: "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/helper-remap-async-to-generator" "^7.22.20" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-transform-async-to-generator@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz#d1f513c7a8a506d43f47df2bf25f9254b0b051fa" - integrity sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw== +"@babel/plugin-transform-async-to-generator@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.1.tgz#0e220703b89f2216800ce7b1c53cb0cf521c37f4" + integrity sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw== dependencies: - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-module-imports" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/helper-remap-async-to-generator" "^7.22.20" -"@babel/plugin-transform-block-scoped-functions@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz#fe1177d715fb569663095e04f3598525d98e8c77" - integrity sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A== +"@babel/plugin-transform-block-scoped-functions@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz#1c94799e20fcd5c4d4589523bbc57b7692979380" + integrity sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-block-scoping@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz#b2d38589531c6c80fbe25e6b58e763622d2d3cf5" - integrity sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw== +"@babel/plugin-transform-block-scoping@^7.24.4": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.4.tgz#28f5c010b66fbb8ccdeef853bef1935c434d7012" + integrity sha512-nIFUZIpGKDf9O9ttyRXpHFpKC+X3Y5mtshZONuEUYBomAKoM4y029Jr+uB1bHGPhNmK8YXHevDtKDOLmtRrp6g== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-class-properties@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz#35c377db11ca92a785a718b6aa4e3ed1eb65dc48" - integrity sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg== +"@babel/plugin-transform-class-properties@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz#bcbf1aef6ba6085cfddec9fc8d58871cf011fc29" + integrity sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-class-static-block@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz#2a202c8787a8964dd11dfcedf994d36bfc844ab5" - integrity sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ== +"@babel/plugin-transform-class-static-block@^7.24.4": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.4.tgz#1a4653c0cf8ac46441ec406dece6e9bc590356a4" + integrity sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.24.4" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-transform-classes@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.5.tgz#e7a75f815e0c534cc4c9a39c56636c84fc0d64f2" - integrity sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg== +"@babel/plugin-transform-classes@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.1.tgz#5bc8fc160ed96378184bc10042af47f50884dcb1" + integrity sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-compilation-targets" "^7.23.6" "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-function-name" "^7.23.0" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.20" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-replace-supers" "^7.24.1" "@babel/helper-split-export-declaration" "^7.22.6" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz#652e69561fcc9d2b50ba4f7ac7f60dcf65e86474" - integrity sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw== +"@babel/plugin-transform-computed-properties@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz#bc7e787f8e021eccfb677af5f13c29a9934ed8a7" + integrity sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/template" "^7.22.15" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/template" "^7.24.0" -"@babel/plugin-transform-destructuring@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz#8c9ee68228b12ae3dff986e56ed1ba4f3c446311" - integrity sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw== +"@babel/plugin-transform-destructuring@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.1.tgz#b1e8243af4a0206841973786292b8c8dd8447345" + integrity sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-dotall-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz#3f7af6054882ede89c378d0cf889b854a993da50" - integrity sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ== +"@babel/plugin-transform-dotall-regex@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz#d56913d2f12795cc9930801b84c6f8c47513ac13" + integrity sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-duplicate-keys@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz#664706ca0a5dfe8d066537f99032fc1dc8b720ce" - integrity sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA== +"@babel/plugin-transform-duplicate-keys@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz#5347a797fe82b8d09749d10e9f5b83665adbca88" + integrity sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-dynamic-import@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz#c7629e7254011ac3630d47d7f34ddd40ca535143" - integrity sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ== +"@babel/plugin-transform-dynamic-import@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.1.tgz#2a5a49959201970dd09a5fca856cb651e44439dd" + integrity sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-transform-exponentiation-operator@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz#ea0d978f6b9232ba4722f3dbecdd18f450babd18" - integrity sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ== +"@babel/plugin-transform-exponentiation-operator@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz#6650ebeb5bd5c012d5f5f90a26613a08162e8ba4" + integrity sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw== dependencies: "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-export-namespace-from@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz#084c7b25e9a5c8271e987a08cf85807b80283191" - integrity sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ== +"@babel/plugin-transform-export-namespace-from@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz#f033541fc036e3efb2dcb58eedafd4f6b8078acd" + integrity sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-transform-for-of@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.3.tgz#afe115ff0fbce735e02868d41489093c63e15559" - integrity sha512-X8jSm8X1CMwxmK878qsUGJRmbysKNbdpTv/O1/v0LuY/ZkZrng5WYiekYSdg9m09OTmDDUWeEDsTE+17WYbAZw== +"@babel/plugin-transform-for-of@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz#67448446b67ab6c091360ce3717e7d3a59e202fd" + integrity sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" -"@babel/plugin-transform-function-name@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz#8f424fcd862bf84cb9a1a6b42bc2f47ed630f8dc" - integrity sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw== +"@babel/plugin-transform-function-name@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz#8cba6f7730626cc4dfe4ca2fa516215a0592b361" + integrity sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA== dependencies: - "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-compilation-targets" "^7.23.6" "@babel/helper-function-name" "^7.23.0" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-json-strings@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz#a871d9b6bd171976efad2e43e694c961ffa3714d" - integrity sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg== +"@babel/plugin-transform-json-strings@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.1.tgz#08e6369b62ab3e8a7b61089151b161180c8299f7" + integrity sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-transform-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz#8214665f00506ead73de157eba233e7381f3beb4" - integrity sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ== +"@babel/plugin-transform-literals@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz#0a1982297af83e6b3c94972686067df588c5c096" + integrity sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-logical-assignment-operators@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz#e599f82c51d55fac725f62ce55d3a0886279ecb5" - integrity sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg== +"@babel/plugin-transform-logical-assignment-operators@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.1.tgz#719d8aded1aa94b8fb34e3a785ae8518e24cfa40" + integrity sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-transform-member-expression-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz#e37b3f0502289f477ac0e776b05a833d853cabcc" - integrity sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag== +"@babel/plugin-transform-member-expression-literals@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz#896d23601c92f437af8b01371ad34beb75df4489" + integrity sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-modules-amd@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz#e19b55436a1416829df0a1afc495deedfae17f7d" - integrity sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw== +"@babel/plugin-transform-modules-amd@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz#b6d829ed15258536977e9c7cc6437814871ffa39" + integrity sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ== dependencies: "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-modules-commonjs@^7.18.6", "@babel/plugin-transform-modules-commonjs@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz#661ae831b9577e52be57dd8356b734f9700b53b4" - integrity sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA== +"@babel/plugin-transform-modules-commonjs@^7.18.6", "@babel/plugin-transform-modules-commonjs@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz#e71ba1d0d69e049a22bf90b3867e263823d3f1b9" + integrity sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw== dependencies: "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/helper-simple-access" "^7.22.5" -"@babel/plugin-transform-modules-systemjs@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz#fa7e62248931cb15b9404f8052581c302dd9de81" - integrity sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ== +"@babel/plugin-transform-modules-systemjs@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz#2b9625a3d4e445babac9788daec39094e6b11e3e" + integrity sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA== dependencies: "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/helper-validator-identifier" "^7.22.20" -"@babel/plugin-transform-modules-umd@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz#5d4395fccd071dfefe6585a4411aa7d6b7d769e9" - integrity sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg== +"@babel/plugin-transform-modules-umd@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz#69220c66653a19cf2c0872b9c762b9a48b8bebef" + integrity sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg== dependencies: "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": version "7.22.5" @@ -654,209 +663,209 @@ "@babel/helper-create-regexp-features-plugin" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-new-target@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz#5491bb78ed6ac87e990957cea367eab781c4d980" - integrity sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ== +"@babel/plugin-transform-new-target@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz#29c59988fa3d0157de1c871a28cd83096363cc34" + integrity sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-nullish-coalescing-operator@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz#45556aad123fc6e52189ea749e33ce090637346e" - integrity sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA== +"@babel/plugin-transform-nullish-coalescing-operator@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz#0cd494bb97cb07d428bd651632cb9d4140513988" + integrity sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-transform-numeric-separator@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz#03d08e3691e405804ecdd19dd278a40cca531f29" - integrity sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q== +"@babel/plugin-transform-numeric-separator@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.1.tgz#5bc019ce5b3435c1cadf37215e55e433d674d4e8" + integrity sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-transform-object-rest-spread@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz#2b9c2d26bf62710460bdc0d1730d4f1048361b83" - integrity sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g== +"@babel/plugin-transform-object-rest-spread@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.1.tgz#5a3ce73caf0e7871a02e1c31e8b473093af241ff" + integrity sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA== dependencies: - "@babel/compat-data" "^7.23.3" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.23.3" + "@babel/plugin-transform-parameters" "^7.24.1" -"@babel/plugin-transform-object-super@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz#81fdb636dcb306dd2e4e8fd80db5b2362ed2ebcd" - integrity sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA== +"@babel/plugin-transform-object-super@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz#e71d6ab13483cca89ed95a474f542bbfc20a0520" + integrity sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.20" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-replace-supers" "^7.24.1" -"@babel/plugin-transform-optional-catch-binding@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz#318066de6dacce7d92fa244ae475aa8d91778017" - integrity sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A== +"@babel/plugin-transform-optional-catch-binding@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.1.tgz#92a3d0efe847ba722f1a4508669b23134669e2da" + integrity sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-transform-optional-chaining@^7.23.3", "@babel/plugin-transform-optional-chaining@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz#6acf61203bdfc4de9d4e52e64490aeb3e52bd017" - integrity sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA== +"@babel/plugin-transform-optional-chaining@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.1.tgz#26e588acbedce1ab3519ac40cc748e380c5291e6" + integrity sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-transform-parameters@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz#83ef5d1baf4b1072fa6e54b2b0999a7b2527e2af" - integrity sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw== +"@babel/plugin-transform-parameters@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.1.tgz#983c15d114da190506c75b616ceb0f817afcc510" + integrity sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-private-methods@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz#b2d7a3c97e278bfe59137a978d53b2c2e038c0e4" - integrity sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g== +"@babel/plugin-transform-private-methods@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz#a0faa1ae87eff077e1e47a5ec81c3aef383dc15a" + integrity sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-private-property-in-object@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz#3ec711d05d6608fd173d9b8de39872d8dbf68bf5" - integrity sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A== +"@babel/plugin-transform-private-property-in-object@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.1.tgz#756443d400274f8fb7896742962cc1b9f25c1f6a" + integrity sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-transform-property-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz#54518f14ac4755d22b92162e4a852d308a560875" - integrity sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw== +"@babel/plugin-transform-property-literals@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz#d6a9aeab96f03749f4eebeb0b6ea8e90ec958825" + integrity sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-regenerator@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz#141afd4a2057298602069fce7f2dc5173e6c561c" - integrity sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ== +"@babel/plugin-transform-regenerator@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz#625b7545bae52363bdc1fbbdc7252b5046409c8c" + integrity sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" regenerator-transform "^0.15.2" -"@babel/plugin-transform-reserved-words@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz#4130dcee12bd3dd5705c587947eb715da12efac8" - integrity sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg== +"@babel/plugin-transform-reserved-words@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz#8de729f5ecbaaf5cf83b67de13bad38a21be57c1" + integrity sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-shorthand-properties@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz#97d82a39b0e0c24f8a981568a8ed851745f59210" - integrity sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg== +"@babel/plugin-transform-shorthand-properties@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz#ba9a09144cf55d35ec6b93a32253becad8ee5b55" + integrity sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-spread@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz#41d17aacb12bde55168403c6f2d6bdca563d362c" - integrity sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg== +"@babel/plugin-transform-spread@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz#a1acf9152cbf690e4da0ba10790b3ac7d2b2b391" + integrity sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" -"@babel/plugin-transform-sticky-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz#dec45588ab4a723cb579c609b294a3d1bd22ff04" - integrity sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg== +"@babel/plugin-transform-sticky-regex@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz#f03e672912c6e203ed8d6e0271d9c2113dc031b9" + integrity sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-template-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz#5f0f028eb14e50b5d0f76be57f90045757539d07" - integrity sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg== +"@babel/plugin-transform-template-literals@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz#15e2166873a30d8617e3e2ccadb86643d327aab7" + integrity sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-typeof-symbol@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz#9dfab97acc87495c0c449014eb9c547d8966bca4" - integrity sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ== +"@babel/plugin-transform-typeof-symbol@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.1.tgz#6831f78647080dec044f7e9f68003d99424f94c7" + integrity sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-typescript@^7.23.3": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.5.tgz#83da13ef62a1ebddf2872487527094b31c9adb84" - integrity sha512-2fMkXEJkrmwgu2Bsv1Saxgj30IXZdJ+84lQcKKI7sm719oXs0BBw2ZENKdJdR1PjWndgLCEBNXJOri0fk7RYQA== +"@babel/plugin-transform-typescript@^7.24.1": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.4.tgz#03e0492537a4b953e491f53f2bc88245574ebd15" + integrity sha512-79t3CQ8+oBGk/80SQ8MN3Bs3obf83zJ0YZjDmDaEZN8MqhMI760apl5z6a20kFeMXBwJX99VpKT8CKxEBp5H1g== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.23.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-typescript" "^7.23.3" + "@babel/helper-create-class-features-plugin" "^7.24.4" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/plugin-syntax-typescript" "^7.24.1" -"@babel/plugin-transform-unicode-escapes@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz#1f66d16cab01fab98d784867d24f70c1ca65b925" - integrity sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q== +"@babel/plugin-transform-unicode-escapes@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz#fb3fa16676549ac7c7449db9b342614985c2a3a4" + integrity sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-unicode-property-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz#19e234129e5ffa7205010feec0d94c251083d7ad" - integrity sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA== +"@babel/plugin-transform-unicode-property-regex@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.1.tgz#56704fd4d99da81e5e9f0c0c93cabd91dbc4889e" + integrity sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-unicode-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz#26897708d8f42654ca4ce1b73e96140fbad879dc" - integrity sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw== +"@babel/plugin-transform-unicode-regex@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz#57c3c191d68f998ac46b708380c1ce4d13536385" + integrity sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-unicode-sets-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz#4fb6f0a719c2c5859d11f6b55a050cc987f3799e" - integrity sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw== +"@babel/plugin-transform-unicode-sets-regex@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.1.tgz#c1ea175b02afcffc9cf57a9c4658326625165b7f" + integrity sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/preset-env@^7.20.2": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.23.5.tgz#350a3aedfa9f119ad045b068886457e895ba0ca1" - integrity sha512-0d/uxVD6tFGWXGDSfyMD1p2otoaKmu6+GD+NfAx0tMaH+dxORnp7T9TaVQ6mKyya7iBtCIVxHjWT7MuzzM9z+A== + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.24.4.tgz#46dbbcd608771373b88f956ffb67d471dce0d23b" + integrity sha512-7Kl6cSmYkak0FK/FXjSEnLJ1N9T/WA2RkMhu17gZ/dsxKJUuTYNIylahPTzqpLyJN4WhDif8X0XK1R8Wsguo/A== dependencies: - "@babel/compat-data" "^7.23.5" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/compat-data" "^7.24.4" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/helper-validator-option" "^7.23.5" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.23.3" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.23.3" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.23.3" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.24.4" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.24.1" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.24.1" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.24.1" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.23.3" - "@babel/plugin-syntax-import-attributes" "^7.23.3" + "@babel/plugin-syntax-import-assertions" "^7.24.1" + "@babel/plugin-syntax-import-attributes" "^7.24.1" "@babel/plugin-syntax-import-meta" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" @@ -868,58 +877,58 @@ "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.23.3" - "@babel/plugin-transform-async-generator-functions" "^7.23.4" - "@babel/plugin-transform-async-to-generator" "^7.23.3" - "@babel/plugin-transform-block-scoped-functions" "^7.23.3" - "@babel/plugin-transform-block-scoping" "^7.23.4" - "@babel/plugin-transform-class-properties" "^7.23.3" - "@babel/plugin-transform-class-static-block" "^7.23.4" - "@babel/plugin-transform-classes" "^7.23.5" - "@babel/plugin-transform-computed-properties" "^7.23.3" - "@babel/plugin-transform-destructuring" "^7.23.3" - "@babel/plugin-transform-dotall-regex" "^7.23.3" - "@babel/plugin-transform-duplicate-keys" "^7.23.3" - "@babel/plugin-transform-dynamic-import" "^7.23.4" - "@babel/plugin-transform-exponentiation-operator" "^7.23.3" - "@babel/plugin-transform-export-namespace-from" "^7.23.4" - "@babel/plugin-transform-for-of" "^7.23.3" - "@babel/plugin-transform-function-name" "^7.23.3" - "@babel/plugin-transform-json-strings" "^7.23.4" - "@babel/plugin-transform-literals" "^7.23.3" - "@babel/plugin-transform-logical-assignment-operators" "^7.23.4" - "@babel/plugin-transform-member-expression-literals" "^7.23.3" - "@babel/plugin-transform-modules-amd" "^7.23.3" - "@babel/plugin-transform-modules-commonjs" "^7.23.3" - "@babel/plugin-transform-modules-systemjs" "^7.23.3" - "@babel/plugin-transform-modules-umd" "^7.23.3" + "@babel/plugin-transform-arrow-functions" "^7.24.1" + "@babel/plugin-transform-async-generator-functions" "^7.24.3" + "@babel/plugin-transform-async-to-generator" "^7.24.1" + "@babel/plugin-transform-block-scoped-functions" "^7.24.1" + "@babel/plugin-transform-block-scoping" "^7.24.4" + "@babel/plugin-transform-class-properties" "^7.24.1" + "@babel/plugin-transform-class-static-block" "^7.24.4" + "@babel/plugin-transform-classes" "^7.24.1" + "@babel/plugin-transform-computed-properties" "^7.24.1" + "@babel/plugin-transform-destructuring" "^7.24.1" + "@babel/plugin-transform-dotall-regex" "^7.24.1" + "@babel/plugin-transform-duplicate-keys" "^7.24.1" + "@babel/plugin-transform-dynamic-import" "^7.24.1" + "@babel/plugin-transform-exponentiation-operator" "^7.24.1" + "@babel/plugin-transform-export-namespace-from" "^7.24.1" + "@babel/plugin-transform-for-of" "^7.24.1" + "@babel/plugin-transform-function-name" "^7.24.1" + "@babel/plugin-transform-json-strings" "^7.24.1" + "@babel/plugin-transform-literals" "^7.24.1" + "@babel/plugin-transform-logical-assignment-operators" "^7.24.1" + "@babel/plugin-transform-member-expression-literals" "^7.24.1" + "@babel/plugin-transform-modules-amd" "^7.24.1" + "@babel/plugin-transform-modules-commonjs" "^7.24.1" + "@babel/plugin-transform-modules-systemjs" "^7.24.1" + "@babel/plugin-transform-modules-umd" "^7.24.1" "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" - "@babel/plugin-transform-new-target" "^7.23.3" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.23.4" - "@babel/plugin-transform-numeric-separator" "^7.23.4" - "@babel/plugin-transform-object-rest-spread" "^7.23.4" - "@babel/plugin-transform-object-super" "^7.23.3" - "@babel/plugin-transform-optional-catch-binding" "^7.23.4" - "@babel/plugin-transform-optional-chaining" "^7.23.4" - "@babel/plugin-transform-parameters" "^7.23.3" - "@babel/plugin-transform-private-methods" "^7.23.3" - "@babel/plugin-transform-private-property-in-object" "^7.23.4" - "@babel/plugin-transform-property-literals" "^7.23.3" - "@babel/plugin-transform-regenerator" "^7.23.3" - "@babel/plugin-transform-reserved-words" "^7.23.3" - "@babel/plugin-transform-shorthand-properties" "^7.23.3" - "@babel/plugin-transform-spread" "^7.23.3" - "@babel/plugin-transform-sticky-regex" "^7.23.3" - "@babel/plugin-transform-template-literals" "^7.23.3" - "@babel/plugin-transform-typeof-symbol" "^7.23.3" - "@babel/plugin-transform-unicode-escapes" "^7.23.3" - "@babel/plugin-transform-unicode-property-regex" "^7.23.3" - "@babel/plugin-transform-unicode-regex" "^7.23.3" - "@babel/plugin-transform-unicode-sets-regex" "^7.23.3" + "@babel/plugin-transform-new-target" "^7.24.1" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.24.1" + "@babel/plugin-transform-numeric-separator" "^7.24.1" + "@babel/plugin-transform-object-rest-spread" "^7.24.1" + "@babel/plugin-transform-object-super" "^7.24.1" + "@babel/plugin-transform-optional-catch-binding" "^7.24.1" + "@babel/plugin-transform-optional-chaining" "^7.24.1" + "@babel/plugin-transform-parameters" "^7.24.1" + "@babel/plugin-transform-private-methods" "^7.24.1" + "@babel/plugin-transform-private-property-in-object" "^7.24.1" + "@babel/plugin-transform-property-literals" "^7.24.1" + "@babel/plugin-transform-regenerator" "^7.24.1" + "@babel/plugin-transform-reserved-words" "^7.24.1" + "@babel/plugin-transform-shorthand-properties" "^7.24.1" + "@babel/plugin-transform-spread" "^7.24.1" + "@babel/plugin-transform-sticky-regex" "^7.24.1" + "@babel/plugin-transform-template-literals" "^7.24.1" + "@babel/plugin-transform-typeof-symbol" "^7.24.1" + "@babel/plugin-transform-unicode-escapes" "^7.24.1" + "@babel/plugin-transform-unicode-property-regex" "^7.24.1" + "@babel/plugin-transform-unicode-regex" "^7.24.1" + "@babel/plugin-transform-unicode-sets-regex" "^7.24.1" "@babel/preset-modules" "0.1.6-no-external-plugins" - babel-plugin-polyfill-corejs2 "^0.4.6" - babel-plugin-polyfill-corejs3 "^0.8.5" - babel-plugin-polyfill-regenerator "^0.5.3" + babel-plugin-polyfill-corejs2 "^0.4.10" + babel-plugin-polyfill-corejs3 "^0.10.4" + babel-plugin-polyfill-regenerator "^0.6.1" core-js-compat "^3.31.0" semver "^6.3.1" @@ -933,15 +942,15 @@ esutils "^2.0.2" "@babel/preset-typescript@^7.18.6": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.23.3.tgz#14534b34ed5b6d435aa05f1ae1c5e7adcc01d913" - integrity sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.24.1.tgz#89bdf13a3149a17b3b2a2c9c62547f06db8845ec" + integrity sha512-1DBaMmRDpuYQBPWD8Pf/WEwCrtgRHxsZnP4mIy9G/X+hFfbI47Q2G4t1Paakld84+qsk2fSsUPMKg71jkoOOaQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-syntax-jsx" "^7.23.3" - "@babel/plugin-transform-modules-commonjs" "^7.23.3" - "@babel/plugin-transform-typescript" "^7.23.3" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-validator-option" "^7.23.5" + "@babel/plugin-syntax-jsx" "^7.24.1" + "@babel/plugin-transform-modules-commonjs" "^7.24.1" + "@babel/plugin-transform-typescript" "^7.24.1" "@babel/regjsgen@^0.8.0": version "0.8.0" @@ -949,41 +958,41 @@ integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== "@babel/runtime@^7.11.2", "@babel/runtime@^7.21.0", "@babel/runtime@^7.8.4": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.5.tgz#11edb98f8aeec529b82b211028177679144242db" - integrity sha512-NdUTHcPe4C99WxPub+K9l9tK5/lV4UXIoaHSYgzco9BCyjKAAwzdBI+wWtYqHt7LJdbo74ZjRPJgzVweq1sz0w== + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.4.tgz#de795accd698007a66ba44add6cc86542aff1edd" + integrity sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA== dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.22.15", "@babel/template@^7.3.3": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" - integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== +"@babel/template@^7.22.15", "@babel/template@^7.24.0", "@babel/template@^7.3.3": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.0.tgz#c6a524aa93a4a05d66aaf31654258fae69d87d50" + integrity sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA== dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/parser" "^7.22.15" - "@babel/types" "^7.22.15" + "@babel/code-frame" "^7.23.5" + "@babel/parser" "^7.24.0" + "@babel/types" "^7.24.0" -"@babel/traverse@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.5.tgz#f546bf9aba9ef2b042c0e00d245990c15508e7ec" - integrity sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w== +"@babel/traverse@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.1.tgz#d65c36ac9dd17282175d1e4a3c49d5b7988f530c" + integrity sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ== dependencies: - "@babel/code-frame" "^7.23.5" - "@babel/generator" "^7.23.5" + "@babel/code-frame" "^7.24.1" + "@babel/generator" "^7.24.1" "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-function-name" "^7.23.0" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.5" - "@babel/types" "^7.23.5" - debug "^4.1.0" + "@babel/parser" "^7.24.1" + "@babel/types" "^7.24.0" + debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.5", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.5.tgz#48d730a00c95109fa4393352705954d74fb5b602" - integrity sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.24.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.0.tgz#3b951f435a92e7333eba05b7566fd297960ea1bf" + integrity sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w== dependencies: "@babel/helper-string-parser" "^7.23.4" "@babel/helper-validator-identifier" "^7.22.20" @@ -995,9 +1004,9 @@ integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== "@bufbuild/protobuf@^1.4.2": - version "1.4.2" - resolved "https://registry.yarnpkg.com/@bufbuild/protobuf/-/protobuf-1.4.2.tgz#dc4faf21264a47b71a15806616043cb006e80ac8" - integrity sha512-JyEH8Z+OD5Sc2opSg86qMHn1EM1Sa+zj/Tc0ovxdwk56ByVNONJSabuCUbLQp+eKN3rWNfrho0X+3SEqEPXIow== + version "1.8.0" + resolved "https://registry.yarnpkg.com/@bufbuild/protobuf/-/protobuf-1.8.0.tgz#1c8651ea34adb8019b483e09de02aeeb1cd57d79" + integrity sha512-qR9FwI8QKIveDnUYutvfzbC21UZJJryYrLuZGjeZ/VGz+vXelUkK+xgkOHsvPEdYEdxtgUUq4313N8QtOehJ1Q== "@confio/ics23@^0.6.8": version "0.6.8" @@ -1242,10 +1251,10 @@ resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== -"@eslint/eslintrc@^2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.3.tgz#797470a75fe0fbd5a53350ee715e85e87baff22d" - integrity sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA== +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== dependencies: ajv "^6.12.4" debug "^4.3.2" @@ -1257,10 +1266,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.54.0": - version "8.54.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.54.0.tgz#4fab9a2ff7860082c304f750e94acd644cf984cf" - integrity sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ== +"@eslint/js@8.57.0": + version "8.57.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" + integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== "@ethereumjs/rlp@^4.0.1": version "4.0.1" @@ -1276,13 +1285,13 @@ ethereum-cryptography "^2.0.0" micro-ftch "^0.3.1" -"@humanwhocodes/config-array@^0.11.13": - version "0.11.13" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.13.tgz#075dc9684f40a531d9b26b0822153c1e832ee297" - integrity sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ== +"@humanwhocodes/config-array@^0.11.14": + version "0.11.14" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" + integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== dependencies: - "@humanwhocodes/object-schema" "^2.0.1" - debug "^4.1.1" + "@humanwhocodes/object-schema" "^2.0.2" + debug "^4.3.1" minimatch "^3.0.5" "@humanwhocodes/module-importer@^1.0.1": @@ -1290,10 +1299,10 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044" - integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw== +"@humanwhocodes/object-schema@^2.0.2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" + integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" @@ -1306,7 +1315,7 @@ js-yaml "^3.13.1" resolve-from "^5.0.0" -"@istanbuljs/schema@^0.1.2": +"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": version "0.1.3" resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== @@ -1503,34 +1512,34 @@ "@types/yargs" "^17.0.8" chalk "^4.0.0" -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== +"@jridgewell/gen-mapping@^0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" + integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== dependencies: - "@jridgewell/set-array" "^1.0.1" + "@jridgewell/set-array" "^1.2.1" "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/trace-mapping" "^0.3.24" "@jridgewell/resolve-uri@^3.1.0": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": version "1.4.15" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.20" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" - integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" @@ -1564,9 +1573,9 @@ resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-5.50.0.tgz#29c6419e8379d496ab6d0426eadf3c4d100cd186" integrity sha512-swKHYCOZUGyVt4ge0u8a7AwNcA//h4nx5wIi0sruGye1IJ5Cva0GyK9L2/WdX+kWVTKp92ZiEo1df31lrWGPgA== -"@neutron-org/neutronjsplus@neutron-org/neutronjsplus#feat/sdk-50": - version "0.3.0" - resolved "https://codeload.github.com/neutron-org/neutronjsplus/tar.gz/9bc46d9bf549a94d29d6fefde88bf5072b1fd62d" +"@neutron-org/neutronjsplus@neutron-org/neutronjsplus#03fb9963d35104a180d9cf0ad7252e3914669395": + version "0.3.2" + resolved "https://codeload.github.com/neutron-org/neutronjsplus/tar.gz/03fb9963d35104a180d9cf0ad7252e3914669395" dependencies: "@bufbuild/protobuf" "^1.4.2" "@cosmos-client/core" "^0.47.4" @@ -1576,22 +1585,22 @@ long "^5.2.1" merkletreejs "^0.3.9" -"@noble/curves@1.1.0", "@noble/curves@~1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.1.0.tgz#f13fc667c89184bc04cccb9b11e8e7bae27d8c3d" - integrity sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA== +"@noble/curves@1.3.0", "@noble/curves@~1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.3.0.tgz#01be46da4fd195822dab821e72f71bf4aeec635e" + integrity sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA== dependencies: - "@noble/hashes" "1.3.1" + "@noble/hashes" "1.3.3" -"@noble/hashes@1.3.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.1.tgz#8831ef002114670c603c458ab8b11328406953a9" - integrity sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA== +"@noble/hashes@1.3.3", "@noble/hashes@~1.3.2": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.3.tgz#39908da56a4adc270147bb07968bf3b16cfe1699" + integrity sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA== -"@noble/hashes@^1", "@noble/hashes@^1.0.0", "@noble/hashes@^1.2.0", "@noble/hashes@~1.3.0", "@noble/hashes@~1.3.1": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" - integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== +"@noble/hashes@^1", "@noble/hashes@^1.0.0", "@noble/hashes@^1.2.0", "@noble/hashes@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426" + integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -1667,27 +1676,27 @@ resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== -"@scure/base@~1.1.0": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.3.tgz#8584115565228290a6c6c4961973e0903bb3df2f" - integrity sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q== +"@scure/base@~1.1.4": + version "1.1.6" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.6.tgz#8ce5d304b436e4c84f896e0550c83e4d88cb917d" + integrity sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g== -"@scure/bip32@1.3.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.1.tgz#7248aea723667f98160f593d621c47e208ccbb10" - integrity sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A== +"@scure/bip32@1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.3.tgz#a9624991dc8767087c57999a5d79488f48eae6c8" + integrity sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ== dependencies: - "@noble/curves" "~1.1.0" - "@noble/hashes" "~1.3.1" - "@scure/base" "~1.1.0" + "@noble/curves" "~1.3.0" + "@noble/hashes" "~1.3.2" + "@scure/base" "~1.1.4" -"@scure/bip39@1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.1.tgz#5cee8978656b272a917b7871c981e0541ad6ac2a" - integrity sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg== +"@scure/bip39@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.2.tgz#f3426813f4ced11a47489cbcf7294aa963966527" + integrity sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA== dependencies: - "@noble/hashes" "~1.3.0" - "@scure/base" "~1.1.0" + "@noble/hashes" "~1.3.2" + "@scure/base" "~1.1.4" "@sinclair/typebox@^0.27.8": version "0.27.8" @@ -1695,9 +1704,9 @@ integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== "@sinonjs/commons@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.0.tgz#beb434fe875d965265e04722ccfc21df7f755d72" - integrity sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA== + version "3.0.1" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.1.tgz#1029357e44ca901a615585f6d27738dbc89084cd" + integrity sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ== dependencies: type-detect "4.0.8" @@ -1720,9 +1729,9 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.7" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.7.tgz#a7aebf15c7bc0eb9abd638bdb5c0b8700399c9d0" - integrity sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ== + version "7.6.8" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" + integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== dependencies: "@babel/types" "^7.0.0" @@ -1735,9 +1744,9 @@ "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.20.4" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.4.tgz#ec2c06fed6549df8bc0eb4615b683749a4a92e1b" - integrity sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA== + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.5.tgz#7b7502be0aa80cc4ef22978846b983edaafcd4dd" + integrity sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ== dependencies: "@babel/types" "^7.20.7" @@ -1757,9 +1766,9 @@ "@types/node" "*" "@types/express-serve-static-core@^4.17.33": - version "4.17.41" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz#5077defa630c2e8d28aa9ffc2c01c157c305bef6" - integrity sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA== + version "4.19.0" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.0.tgz#3ae8ab3767d98d0b682cda063c3339e1e86ccfaa" + integrity sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ== dependencies: "@types/node" "*" "@types/qs" "*" @@ -1808,9 +1817,9 @@ "@types/istanbul-lib-report" "*" "@types/jest@^29.5": - version "29.5.10" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.10.tgz#a10fc5bab9e426081c12b2ef73d24d4f0c9b7f50" - integrity sha512-tE4yxKEphEyxj9s4inideLHktW/x6DwesIwWZ9NN1FKf9zbJYsnhBoA9vrHA/IuIOKwPa5PcFBNV4lpMIOEzyQ== + version "29.5.12" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.12.tgz#7f7dc6eb4cf246d2474ed78744b05d06ce025544" + integrity sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw== dependencies: expect "^29.0.0" pretty-format "^29.0.0" @@ -1821,9 +1830,9 @@ integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/lodash@^4.14.182": - version "4.14.202" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.202.tgz#f09dbd2fb082d507178b2f2a5c7e74bd72ff98f8" - integrity sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ== + version "4.17.0" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.0.tgz#d774355e41f372d5350a4d0714abb48194a489c3" + integrity sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA== "@types/long@^4.0.1": version "4.0.2" @@ -1837,20 +1846,15 @@ dependencies: long "*" -"@types/mime@*": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.4.tgz#2198ac274de6017b44d941e00261d5bc6a0e0a45" - integrity sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw== - "@types/mime@^1": version "1.3.5" resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== "@types/node@*", "@types/node@>=13.7.0": - version "20.10.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.0.tgz#16ddf9c0a72b832ec4fcce35b8249cf149214617" - integrity sha512-D0WfRmU9TQ8I9PFx9Yc+EBHw+vSpIub4IDvQivcp26PtPrdMGAq5SDcpXEo/epqa/DXotVpekHiLNTg3iaKXBQ== + version "20.12.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.7.tgz#04080362fa3dd6c5822061aa3124f5c152cff384" + integrity sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg== dependencies: undici-types "~5.26.4" @@ -1860,9 +1864,9 @@ integrity sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ== "@types/qs@*": - version "6.9.10" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.10.tgz#0af26845b5067e1c9a622658a51f60a3934d51e8" - integrity sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw== + version "6.9.14" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.14.tgz#169e142bfe493895287bee382af6039795e9b75b" + integrity sha512-5khscbd3SwWMhFqylJBLQ0zIu7c1K6Vz0uBIt915BI3zV0q1nfjRQD3RqSBcPaO6PHEF4ov/t9y89fSiyThlPA== "@types/range-parser@*": version "1.2.7" @@ -1870,9 +1874,9 @@ integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== "@types/semver@^7.3.12": - version "7.5.6" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.6.tgz#c65b2bfce1bec346582c07724e3f8c1017a20339" - integrity sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A== + version "7.5.8" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" + integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== "@types/send@*": version "0.17.4" @@ -1883,13 +1887,13 @@ "@types/node" "*" "@types/serve-static@*": - version "1.15.5" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.5.tgz#15e67500ec40789a1e8c9defc2d32a896f05b033" - integrity sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ== + version "1.15.7" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.7.tgz#22174bbd74fb97fe303109738e9b5c2f3064f714" + integrity sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw== dependencies: "@types/http-errors" "*" - "@types/mime" "*" "@types/node" "*" + "@types/send" "*" "@types/stack-utils@^2.0.0": version "2.0.3" @@ -2011,9 +2015,9 @@ acorn-jsx@^5.3.2: integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn@^8.9.0: - version "8.11.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" - integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== aggregate-error@^3.0.0: version "3.1.0" @@ -2182,29 +2186,29 @@ babel-plugin-jest-hoist@^29.6.3: "@types/babel__core" "^7.1.14" "@types/babel__traverse" "^7.0.6" -babel-plugin-polyfill-corejs2@^0.4.6: - version "0.4.6" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz#b2df0251d8e99f229a8e60fc4efa9a68b41c8313" - integrity sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q== +babel-plugin-polyfill-corejs2@^0.4.10: + version "0.4.10" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.10.tgz#276f41710b03a64f6467433cab72cbc2653c38b1" + integrity sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ== dependencies: "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.4.3" + "@babel/helper-define-polyfill-provider" "^0.6.1" semver "^6.3.1" -babel-plugin-polyfill-corejs3@^0.8.5: - version "0.8.6" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.6.tgz#25c2d20002da91fe328ff89095c85a391d6856cf" - integrity sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ== +babel-plugin-polyfill-corejs3@^0.10.4: + version "0.10.4" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz#789ac82405ad664c20476d0233b485281deb9c77" + integrity sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.3" - core-js-compat "^3.33.1" + "@babel/helper-define-polyfill-provider" "^0.6.1" + core-js-compat "^3.36.1" -babel-plugin-polyfill-regenerator@^0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz#d4c49e4b44614607c13fb769bcd85c72bb26a4a5" - integrity sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw== +babel-plugin-polyfill-regenerator@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.1.tgz#4f08ef4c62c7a7f66a35ed4c0d75e30506acc6be" + integrity sha512-JfTApdE++cgcTWjsiCQlLyFBMbTUft9ja17saCc93lgV33h4tuCVj7tlvu//qpLwaG+3yEz7/KhahGrUMkVq9g== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.3" + "@babel/helper-define-polyfill-provider" "^0.6.1" babel-preset-current-node-syntax@^1.0.0: version "1.0.1" @@ -2306,13 +2310,13 @@ bn.js@^5.2.0, bn.js@^5.2.1: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== -body-parser@1.20.1: - version "1.20.1" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" - integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== +body-parser@1.20.2: + version "1.20.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" + integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== dependencies: bytes "3.1.2" - content-type "~1.0.4" + content-type "~1.0.5" debug "2.6.9" depd "2.0.0" destroy "1.2.0" @@ -2320,7 +2324,7 @@ body-parser@1.20.1: iconv-lite "0.4.24" on-finished "2.4.1" qs "6.11.0" - raw-body "2.5.1" + raw-body "2.5.2" type-is "~1.6.18" unpipe "1.0.0" @@ -2344,14 +2348,14 @@ brorand@^1.1.0: resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== -browserslist@^4.21.9, browserslist@^4.22.1: - version "4.22.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.1.tgz#ba91958d1a59b87dab6fed8dfbcb3da5e2e9c619" - integrity sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ== +browserslist@^4.22.2, browserslist@^4.23.0: + version "4.23.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" + integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== dependencies: - caniuse-lite "^1.0.30001541" - electron-to-chromium "^1.4.535" - node-releases "^2.0.13" + caniuse-lite "^1.0.30001587" + electron-to-chromium "^1.4.668" + node-releases "^2.0.14" update-browserslist-db "^1.0.13" bs58@^4.0.0: @@ -2397,14 +2401,16 @@ bytes@3.1.2: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -call-bind@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" - integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== +call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" function-bind "^1.1.2" - get-intrinsic "^1.2.1" - set-function-length "^1.1.1" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" callsites@^3.0.0: version "3.1.0" @@ -2421,10 +2427,10 @@ camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001541: - version "1.0.30001565" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001565.tgz#a528b253c8a2d95d2b415e11d8b9942acc100c4f" - integrity sha512-xrE//a3O7TP0vaJ8ikzkD2c2NgcVUvsEe2IvFTntV4Yd1Z9FVzh+gW+enX96L0psrbaFMcVcH2l90xNuGDWc8w== +caniuse-lite@^1.0.30001587: + version "1.0.30001608" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001608.tgz#7ae6e92ffb300e4b4ec2f795e0abab456ec06cc0" + integrity sha512-cjUJTQkk9fQlJR2s4HMuPMvTiRggl0rAVMtthQuyOlDWuqHXqN8azLq+pi8B2TjwKJ32diHjUqRIKeFX4z1FoA== chalk@^2.3.0, chalk@^2.4.2: version "2.4.2" @@ -2585,7 +2591,7 @@ content-disposition@0.5.4: dependencies: safe-buffer "5.2.1" -content-type@~1.0.4: +content-type@~1.0.4, content-type@~1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== @@ -2600,22 +2606,22 @@ cookie-signature@1.0.6: resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== -cookie@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== +cookie@0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" + integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== -core-js-compat@^3.31.0, core-js-compat@^3.33.1: - version "3.33.3" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.33.3.tgz#ec678b772c5a2d8a7c60a91c3a81869aa704ae01" - integrity sha512-cNzGqFsh3Ot+529GIXacjTJ7kegdt5fPXxCBVS1G0iaZpuo/tBz399ymceLJveQhFFZ8qThHiP3fzuoQjKN2ow== +core-js-compat@^3.31.0, core-js-compat@^3.36.1: + version "3.36.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.36.1.tgz#1818695d72c99c25d621dca94e6883e190cea3c8" + integrity sha512-Dk997v9ZCt3X/npqzyGdTlq6t7lDBhZwGvV94PKzDArjp7BTRm7WlDAXYd/OWdeFHO8OChQYRJNJvUCqCbrtKA== dependencies: - browserslist "^4.22.1" + browserslist "^4.23.0" core-js@^3.23.5: - version "3.33.3" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.33.3.tgz#3c644a323f0f533a0d360e9191e37f7fc059088d" - integrity sha512-lo0kOocUlLKmm6kv/FswQL8zbkH7mVsLJ/FULClOhv8WRVmKLVcs6XPNQAzstfeJTCHMyButEwG+z1kHxHoDZw== + version "3.36.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.36.1.tgz#c97a7160ebd00b2de19e62f4bbd3406ab720e578" + integrity sha512-BTvUrwxVBezj5SZ3f10ImnX2oRByMxql3EimVqMysepbC9EeMUOpLwdy6Eoili2x6E4kf+ZUB5k/+Jv55alPfA== cosmjs-types@^0.4.0: version "0.4.1" @@ -2711,7 +2717,7 @@ debug@2.6.9: dependencies: ms "2.0.0" -debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: +debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -2738,14 +2744,14 @@ deepmerge@^4.2.2: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== -define-data-property@^1.0.1, define-data-property@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" - integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== +define-data-property@^1.0.1, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== dependencies: - get-intrinsic "^1.2.1" + es-define-property "^1.0.0" + es-errors "^1.3.0" gopd "^1.0.1" - has-property-descriptors "^1.0.0" define-properties@^1.1.3: version "1.2.1" @@ -2810,15 +2816,15 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.4.535: - version "1.4.596" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.596.tgz#6752d1aa795d942d49dfc5d3764d6ea283fab1d7" - integrity sha512-zW3zbZ40Icb2BCWjm47nxwcFGYlIgdXkAx85XDO7cyky9J4QQfq8t0W19/TLZqq3JPQXtlv8BPIGmfa9Jb4scg== +electron-to-chromium@^1.4.668: + version "1.4.731" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.731.tgz#d3dc19f359045b750a1fb0bc42315a502d950187" + integrity sha512-+TqVfZjpRz2V/5SPpmJxq9qK620SC5SqCnxQIOi7i/U08ZDcTpKbT7Xjj9FU5CbXTMUb4fywbIr8C7cGv4hcjw== elliptic@^6.4.0, elliptic@^6.5.3, elliptic@^6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" - integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + version "6.5.5" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.5.tgz#c715e09f78b6923977610d4c2346d6ce22e6dded" + integrity sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw== dependencies: bn.js "^4.11.9" brorand "^1.1.0" @@ -2855,10 +2861,22 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + version "3.1.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== escape-html@~1.0.3: version "1.0.3" @@ -2914,15 +2932,15 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4 integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== eslint@^8.13.0: - version "8.54.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.54.0.tgz#588e0dd4388af91a2e8fa37ea64924074c783537" - integrity sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA== + version "8.57.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668" + integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.3" - "@eslint/js" "8.54.0" - "@humanwhocodes/config-array" "^0.11.13" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.57.0" + "@humanwhocodes/config-array" "^0.11.14" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" "@ungap/structured-clone" "^1.2.0" @@ -3006,21 +3024,21 @@ etag@~1.8.1: integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== ethereum-bloom-filters@^1.0.6: - version "1.0.10" - resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz#3ca07f4aed698e75bd134584850260246a5fed8a" - integrity sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA== + version "1.1.0" + resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.1.0.tgz#b3fc1eb789509ee30db0bf99a2988ccacb8d0397" + integrity sha512-J1gDRkLpuGNvWYzWslBQR9cDV4nd4kfvVTE/Wy4Kkm4yb3EYRSlyi0eB/inTsSTTVyA0+HyzHgbr95Fn/Z1fSw== dependencies: - js-sha3 "^0.8.0" + "@noble/hashes" "^1.4.0" ethereum-cryptography@^2.0.0, ethereum-cryptography@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.1.2.tgz#18fa7108622e56481157a5cb7c01c0c6a672eb67" - integrity sha512-Z5Ba0T0ImZ8fqXrJbpHcbpAvIswRte2wGNR/KePnu8GbbvgJ47lMxT/ZZPG6i9Jaht4azPDop4HaM00J0J59ug== + version "2.1.3" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.1.3.tgz#1352270ed3b339fe25af5ceeadcf1b9c8e30768a" + integrity sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA== dependencies: - "@noble/curves" "1.1.0" - "@noble/hashes" "1.3.1" - "@scure/bip32" "1.3.1" - "@scure/bip39" "1.2.1" + "@noble/curves" "1.3.0" + "@noble/hashes" "1.3.3" + "@scure/bip32" "1.3.3" + "@scure/bip39" "1.2.2" ethjs-unit@0.1.6: version "0.1.6" @@ -3067,16 +3085,16 @@ expect@^29.0.0, expect@^29.7.0: jest-util "^29.7.0" express@^4.18.2: - version "4.18.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" - integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== + version "4.19.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.19.2.tgz#e25437827a3aa7f2a827bc8171bbbb664a356465" + integrity sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q== dependencies: accepts "~1.3.8" array-flatten "1.1.1" - body-parser "1.20.1" + body-parser "1.20.2" content-disposition "0.5.4" content-type "~1.0.4" - cookie "0.5.0" + cookie "0.6.0" cookie-signature "1.0.6" debug "2.6.9" depd "2.0.0" @@ -3135,9 +3153,9 @@ fast-levenshtein@^2.0.6: integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fastq@^1.6.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" - integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + version "1.17.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== dependencies: reusify "^1.0.4" @@ -3206,14 +3224,14 @@ flat-cache@^3.0.4: rimraf "^3.0.2" flatted@^3.2.9: - version "3.2.9" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" - integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== + version "3.3.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" + integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== follow-redirects@^1.14.0, follow-redirects@^1.14.4, follow-redirects@^1.14.9: - version "1.15.3" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" - integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== + version "1.15.6" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" + integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== form-data@^4.0.0: version "4.0.0" @@ -3259,11 +3277,12 @@ get-caller-file@^2.0.1, get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" - integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== +get-intrinsic@^1.1.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== dependencies: + es-errors "^1.3.0" function-bind "^1.1.2" has-proto "^1.0.1" has-symbols "^1.0.3" @@ -3311,9 +3330,9 @@ globals@^11.1.0: integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^13.19.0: - version "13.23.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.23.0.tgz#ef31673c926a0976e1f61dab4dca57e0c0a8af02" - integrity sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA== + version "13.24.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== dependencies: type-fest "^0.20.2" @@ -3363,17 +3382,17 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-property-descriptors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" - integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== dependencies: - get-intrinsic "^1.2.2" + es-define-property "^1.0.0" has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== has-symbols@^1.0.3: version "1.0.3" @@ -3398,9 +3417,9 @@ hash.js@^1.0.0, hash.js@^1.0.3: minimalistic-assert "^1.0.1" hasown@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" - integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: function-bind "^1.1.2" @@ -3442,9 +3461,9 @@ iconv-lite@0.4.24: safer-buffer ">= 2.1.2 < 3" ignore@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.0.tgz#67418ae40d34d6999c95ff56016759c718c82f78" - integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== + version "5.3.1" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" + integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== import-fresh@^3.2.1: version "3.3.0" @@ -3576,13 +3595,13 @@ istanbul-lib-instrument@^5.0.4: semver "^6.3.0" istanbul-lib-instrument@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz#71e87707e8041428732518c6fb5211761753fbdf" - integrity sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA== + version "6.0.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz#91655936cf7380e4e473383081e38478b69993b1" + integrity sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw== dependencies: - "@babel/core" "^7.12.3" - "@babel/parser" "^7.14.7" - "@istanbuljs/schema" "^0.1.2" + "@babel/core" "^7.23.9" + "@babel/parser" "^7.23.9" + "@istanbuljs/schema" "^0.1.3" istanbul-lib-coverage "^3.2.0" semver "^7.5.4" @@ -3605,9 +3624,9 @@ istanbul-lib-source-maps@^4.0.0: source-map "^0.6.1" istanbul-reports@^3.1.3: - version "3.1.6" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a" - integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== + version "3.1.7" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" + integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" @@ -3988,11 +4007,6 @@ jest@^29.7.0: import-local "^3.0.2" jest-cli "^29.7.0" -js-sha3@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" - integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== - js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -4351,9 +4365,9 @@ ms@2.1.3: integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== nan@^2.13.2: - version "2.18.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.18.0.tgz#26a6faae7ffbeb293a39660e88a76b82e30b7554" - integrity sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w== + version "2.19.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.19.0.tgz#bb58122ad55a6c5bc973303908d5b16cfdd5a8c0" + integrity sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw== natural-compare-lite@^1.4.0: version "1.4.0" @@ -4376,19 +4390,19 @@ node-addon-api@^2.0.0: integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== node-gyp-build@^4.2.0: - version "4.7.1" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.7.1.tgz#cd7d2eb48e594874053150a9418ac85af83ca8f7" - integrity sha512-wTSrZ+8lsRRa3I3H8Xr65dLWSgCvY2l4AOnaeKdPA9TB/WYMPaTcrzf3rXvFoVvjKNVnu0CcWSx54qq9GKRUYg== + version "4.8.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.0.tgz#3fee9c1731df4581a3f9ead74664369ff00d26dd" + integrity sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og== node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== -node-releases@^2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" - integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== normalize-path@^3.0.0: version "3.0.0" @@ -4410,7 +4424,7 @@ number-to-bn@1.7.0: bn.js "4.11.6" strip-hex-prefix "1.0.0" -object-inspect@^1.12.2, object-inspect@^1.9.0: +object-inspect@^1.12.2, object-inspect@^1.13.1: version "1.13.1" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== @@ -4649,9 +4663,9 @@ punycode@^2.1.0: integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== pure-rand@^6.0.0: - version "6.0.4" - resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.4.tgz#50b737f6a925468679bff00ad20eade53f37d5c7" - integrity sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA== + version "6.1.0" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.1.0.tgz#d173cf23258231976ccbdb05247c9787957604f2" + integrity sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA== qs@6.11.0: version "6.11.0" @@ -4677,10 +4691,10 @@ range-parser@~1.2.1: resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== +raw-body@2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== dependencies: bytes "3.1.2" http-errors "2.0.0" @@ -4734,9 +4748,9 @@ regenerator-runtime@^0.13.9: integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== regenerator-runtime@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" - integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== regenerator-transform@^0.15.2: version "0.15.2" @@ -4819,9 +4833,9 @@ reusify@^1.0.4: integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== rfdc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" - integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== + version "1.3.1" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.1.tgz#2b6d4df52dffe8bb346992a10ea9451f24373a8f" + integrity sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg== rimraf@^3.0.2: version "3.0.2" @@ -4889,9 +4903,9 @@ semver@^6.3.0, semver@^6.3.1: integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== semver@^7.3.2, semver@^7.3.5, semver@^7.3.7, semver@^7.5.3, semver@^7.5.4: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== dependencies: lru-cache "^6.0.0" @@ -4929,15 +4943,17 @@ set-blocking@^2.0.0: resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== -set-function-length@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" - integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== +set-function-length@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== dependencies: - define-data-property "^1.1.1" - get-intrinsic "^1.2.1" + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" gopd "^1.0.1" - has-property-descriptors "^1.0.0" + has-property-descriptors "^1.0.2" setprototypeof@1.2.0: version "1.2.0" @@ -4965,13 +4981,14 @@ shebang-regex@^3.0.0: integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + version "1.0.6" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" + integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" + call-bind "^1.0.7" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" @@ -5333,9 +5350,9 @@ typeforce@^1.11.5: integrity sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g== typescript@^5.1.6: - version "5.3.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" - integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== + version "5.4.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.4.tgz#eb2471e7b0a5f1377523700a21669dce30c2d952" + integrity sha512-dGE2Vv8cpVvw28v8HCPqyb08EzbBURxDpuhJvTrusShUfGnhHBafDsLdS1EhhxyL6BJQE+2cT3dDPAv+MQ6oLw== typescript@~4.4: version "4.4.4" @@ -5437,9 +5454,9 @@ walker@^1.0.8: makeerror "1.0.12" web3-utils@^1.3.4: - version "1.10.3" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.3.tgz#f1db99c82549c7d9f8348f04ffe4e0188b449714" - integrity sha512-OqcUrEE16fDBbGoQtZXWdavsPzbGIDc5v3VrRTZ0XrIpefC/viZ1ZU9bGEemazyS0catk/3rkOOxpzTfY+XsyQ== + version "1.10.4" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.4.tgz#0daee7d6841641655d8b3726baf33b08eda1cbec" + integrity sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A== dependencies: "@ethereumjs/util" "^8.1.0" bn.js "^5.2.1" From 595231da3e125fe9f535b1739001e4e9ec107493 Mon Sep 17 00:00:00 2001 From: Albert Andrejev Date: Wed, 10 Apr 2024 16:56:30 +0300 Subject: [PATCH 54/87] remove debug output and add comments --- src/helpers/gaia.ts | 1 - src/testcases/run_in_band/interchain_kv_query.test.ts | 10 ++++------ 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/helpers/gaia.ts b/src/helpers/gaia.ts index 1d85f3fe..a2cd006b 100644 --- a/src/helpers/gaia.ts +++ b/src/helpers/gaia.ts @@ -93,7 +93,6 @@ export const msgVote = async ( proposalId: number, amount = '0', ): Promise => { - console.log('msgVote', voter, proposalId, amount); const msgVote = new MsgVote({ voter, proposalId: BigInt(proposalId), diff --git a/src/testcases/run_in_band/interchain_kv_query.test.ts b/src/testcases/run_in_band/interchain_kv_query.test.ts index 4dde9641..df764899 100644 --- a/src/testcases/run_in_band/interchain_kv_query.test.ts +++ b/src/testcases/run_in_band/interchain_kv_query.test.ts @@ -1102,7 +1102,7 @@ describe('Neutron / Interchain KV Query', () => { proposalId, [ testState.wallets.cosmos.demo2.address.toString(), - 'cosmos1fku9gl93dy3z4d2y58gza06un72ulmd8trruxw', + 'cosmos1fku9gl93dy3z4d2y58gza06un72ulmd8trruxw', // Random address to check absent vote behavior in the result ], ); }); @@ -1141,16 +1141,13 @@ describe('Neutron / Interchain KV Query', () => { queryId, ); - console.log('proposalId'); - console.log(proposalId); - expect(interchainQueryResult.votes.proposal_votes).toEqual([ { proposal_id: proposalId, voter: testState.wallets.cosmos.demo2.address.toString(), options: [{ option: 1, weight: '1.000000000000000000' }], }, - { proposal_id: 0, voter: '', options: [] }, + { proposal_id: 0, voter: '', options: [] }, // Absent vote for random address (see above, about address cosmos1fku9gl93dy3z4d2y58gza06un72ulmd8trruxw) ]); }); }); @@ -1182,7 +1179,7 @@ describe('Neutron / Interchain KV Query', () => { contractAddress, connectionId, updatePeriods[2], - [proposalId, proposalId + 1, proposalId + 2], + [proposalId, proposalId + 1, proposalId + 2], // Send proposal Id as well as couple of non-existent proposals, to check result ); }); @@ -1237,6 +1234,7 @@ describe('Neutron / Interchain KV Query', () => { no_with_veto: '0', }, }, + // These are non-existent proposals in the KV result { proposal_id: 0, proposal_type: null, From 708dff64781426c367962b9e7353ca66873b3b1e Mon Sep 17 00:00:00 2001 From: nhpd Date: Wed, 10 Apr 2024 20:19:03 +0400 Subject: [PATCH 55/87] fix typo --- setup/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup/Makefile b/setup/Makefile index 8c395644..c68e6e24 100644 --- a/setup/Makefile +++ b/setup/Makefile @@ -16,7 +16,7 @@ build-relayer: build-slinky: @docker buildx build --build-context app=$(APP_DIR)/slinky -t skip-mev/slinky-e2e-oracle -f dockerbuilds/Dockerfile.slinky . -build-all: build-gaia build-neutron build-hermes build-relayer build-sidecar +build-all: build-gaia build-neutron build-hermes build-relayer build-slinky start-cosmopark: build-neutron build-relayer @$(COMPOSE) up -d From 83b9b146c37b757d76c14b469b9c48b017962b47 Mon Sep 17 00:00:00 2001 From: nhpd Date: Wed, 10 Apr 2024 20:35:33 +0400 Subject: [PATCH 56/87] remove leftover arg --- src/testcases/parallel/slinky.test.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/testcases/parallel/slinky.test.ts b/src/testcases/parallel/slinky.test.ts index 9f605d18..32fe6a39 100644 --- a/src/testcases/parallel/slinky.test.ts +++ b/src/testcases/parallel/slinky.test.ts @@ -97,7 +97,6 @@ describe('Neutron / Slinky', () => { }, }, ], - '1000', ); }); From 08efa0900ed3645c818ca36ebc9ed2b4585b7dde Mon Sep 17 00:00:00 2001 From: nhpd Date: Wed, 10 Apr 2024 20:42:58 +0400 Subject: [PATCH 57/87] update neutronjsplus commit --- package.json | 2 +- yarn.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 6d44d328..59ad85de 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "@cosmos-client/core": "^0.47.4", "@cosmos-client/cosmwasm": "^0.40.3", "@cosmos-client/ibc": "^1.2.1", - "@neutron-org/neutronjsplus": "neutron-org/neutronjsplus#03fb9963d35104a180d9cf0ad7252e3914669395", + "@neutron-org/neutronjsplus": "neutron-org/neutronjsplus#488411982310983a30609f7f45eb797561d48a3f", "@types/lodash": "^4.14.182", "@types/long": "^5.0.0", "axios": "^0.27.2", diff --git a/yarn.lock b/yarn.lock index 0679d457..71f28855 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1573,9 +1573,9 @@ resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-5.50.0.tgz#29c6419e8379d496ab6d0426eadf3c4d100cd186" integrity sha512-swKHYCOZUGyVt4ge0u8a7AwNcA//h4nx5wIi0sruGye1IJ5Cva0GyK9L2/WdX+kWVTKp92ZiEo1df31lrWGPgA== -"@neutron-org/neutronjsplus@neutron-org/neutronjsplus#03fb9963d35104a180d9cf0ad7252e3914669395": +"@neutron-org/neutronjsplus@neutron-org/neutronjsplus#488411982310983a30609f7f45eb797561d48a3f": version "0.3.2" - resolved "https://codeload.github.com/neutron-org/neutronjsplus/tar.gz/03fb9963d35104a180d9cf0ad7252e3914669395" + resolved "https://codeload.github.com/neutron-org/neutronjsplus/tar.gz/488411982310983a30609f7f45eb797561d48a3f" dependencies: "@bufbuild/protobuf" "^1.4.2" "@cosmos-client/core" "^0.47.4" From 0ece94014fb5c6f2261314da91c71b940570cc0d Mon Sep 17 00:00:00 2001 From: pr0n00gler Date: Fri, 12 Apr 2024 19:11:50 +0300 Subject: [PATCH 58/87] neutronjsplus release --- package.json | 2 +- yarn.lock | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index cbe6054c..91338979 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "@cosmos-client/core": "^0.47.4", "@cosmos-client/cosmwasm": "^0.40.3", "@cosmos-client/ibc": "^1.2.1", - "@neutron-org/neutronjsplus": "neutron-org/neutronjsplus#3c04aff48a32205256a0da65986a0819801605ed", + "@neutron-org/neutronjsplus": "^0.3.3", "@types/lodash": "^4.14.182", "@types/long": "^5.0.0", "axios": "^0.27.2", diff --git a/yarn.lock b/yarn.lock index 9a893973..b8aa6cb3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1564,9 +1564,10 @@ resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-5.50.0.tgz#29c6419e8379d496ab6d0426eadf3c4d100cd186" integrity sha512-swKHYCOZUGyVt4ge0u8a7AwNcA//h4nx5wIi0sruGye1IJ5Cva0GyK9L2/WdX+kWVTKp92ZiEo1df31lrWGPgA== -"@neutron-org/neutronjsplus@neutron-org/neutronjsplus#3c04aff48a32205256a0da65986a0819801605ed": - version "0.3.2" - resolved "https://codeload.github.com/neutron-org/neutronjsplus/tar.gz/3c04aff48a32205256a0da65986a0819801605ed" +"@neutron-org/neutronjsplus@^0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@neutron-org/neutronjsplus/-/neutronjsplus-0.3.3.tgz#017931216c3ce6864442c70c382aac97fd4382be" + integrity sha512-LVUh91xhuvlsYNFR3vOezzzdD897mXS5AijG8N9JFCOy8BUJIqs/pZJsOkdUPXR3Nj9osVhuwkx4Amt/+gX/rA== dependencies: "@bufbuild/protobuf" "^1.4.2" "@cosmos-client/core" "^0.47.4" From 691fd2a40c1dc31f4ac80d343d69191b13e957e6 Mon Sep 17 00:00:00 2001 From: nhpd Date: Mon, 22 Apr 2024 17:13:06 +0400 Subject: [PATCH 59/87] use neutronjs rc11 to make tests pass --- package.json | 2 +- yarn.lock | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index a9c19902..5dabfaa2 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "@cosmos-client/core": "^0.47.4", "@cosmos-client/cosmwasm": "^0.40.3", "@cosmos-client/ibc": "^1.2.1", - "@neutron-org/neutronjsplus": "neutron-org/neutronjsplus#4a2ead9333968638a9e2ee37c31e7b918c477cd3", + "@neutron-org/neutronjsplus": "0.4.0-rc11", "@types/lodash": "^4.14.182", "@types/long": "^5.0.0", "axios": "^0.27.2", diff --git a/yarn.lock b/yarn.lock index a6af3891..51c50331 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1573,9 +1573,10 @@ resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-5.50.0.tgz#29c6419e8379d496ab6d0426eadf3c4d100cd186" integrity sha512-swKHYCOZUGyVt4ge0u8a7AwNcA//h4nx5wIi0sruGye1IJ5Cva0GyK9L2/WdX+kWVTKp92ZiEo1df31lrWGPgA== -"@neutron-org/neutronjsplus@neutron-org/neutronjsplus#4a2ead9333968638a9e2ee37c31e7b918c477cd3": - version "0.3.4" - resolved "https://codeload.github.com/neutron-org/neutronjsplus/tar.gz/4a2ead9333968638a9e2ee37c31e7b918c477cd3" +"@neutron-org/neutronjsplus@0.4.0-rc11": + version "0.4.0-rc11" + resolved "https://registry.yarnpkg.com/@neutron-org/neutronjsplus/-/neutronjsplus-0.4.0-rc11.tgz#8e7a5278b2020f626b40adf50989d5759ac66551" + integrity sha512-47QCOIETwyPRYC2ekHYTpVo6zYyYUDv7jyJI/2Pu+r/kKoEfx3UDmPLjTIw+g3vCjbptw7MjBHKmCUPMYTNtQA== dependencies: "@bufbuild/protobuf" "^1.4.2" "@cosmos-client/core" "^0.47.4" From cec723ab5b1c0c49684f903e5f719c4e2ce7278d Mon Sep 17 00:00:00 2001 From: Dmitry Kolupaev Date: Wed, 24 Apr 2024 17:29:51 +0800 Subject: [PATCH 60/87] Update setup/Makefile Co-authored-by: swelf19 <62722506+swelf19@users.noreply.github.com> --- setup/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup/Makefile b/setup/Makefile index 11670ec7..d69d0bbe 100644 --- a/setup/Makefile +++ b/setup/Makefile @@ -14,7 +14,7 @@ build-relayer: cd $(APP_DIR)/neutron-query-relayer/ && make build-docker build-slinky: - @docker buildx build --build-context app=$(APP_DIR)/slinky -t skip-mev/slinky-e2e-oracle -f dockerbuilds/Dockerfile.slinky . + @docker buildx build --load --build-context app=$(APP_DIR)/slinky -t skip-mev/slinky-e2e-oracle -f dockerbuilds/Dockerfile.slinky . build-all: build-gaia build-neutron build-hermes build-relayer build-slinky From dbb47d12f3d0ca496721de33cb4feb01d42ab370 Mon Sep 17 00:00:00 2001 From: nhpd Date: Wed, 24 Apr 2024 13:50:45 +0400 Subject: [PATCH 61/87] update neutronjs --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index cc7eb206..ff84d361 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "@cosmos-client/core": "^0.47.4", "@cosmos-client/cosmwasm": "^0.40.3", "@cosmos-client/ibc": "^1.2.1", - "@neutron-org/neutronjsplus": "0.4.0-rc15", + "@neutron-org/neutronjsplus": "0.4.0-rc16", "@types/lodash": "^4.14.182", "@types/long": "^5.0.0", "axios": "^0.27.2", diff --git a/yarn.lock b/yarn.lock index 83fd6508..c5f6bad8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1573,10 +1573,10 @@ resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-5.50.0.tgz#29c6419e8379d496ab6d0426eadf3c4d100cd186" integrity sha512-swKHYCOZUGyVt4ge0u8a7AwNcA//h4nx5wIi0sruGye1IJ5Cva0GyK9L2/WdX+kWVTKp92ZiEo1df31lrWGPgA== -"@neutron-org/neutronjsplus@0.4.0-rc15": - version "0.4.0-rc15" - resolved "https://registry.yarnpkg.com/@neutron-org/neutronjsplus/-/neutronjsplus-0.4.0-rc15.tgz#b79ea1b10b987bc079f12b49a5916c825e3f4550" - integrity sha512-dFmGI5qZDae1DPynm2lJvvaxtUAsgCc7nrNpYOxKHzNFiYhBE9I+gAFJXuBJWFSnD0F9fI3PJpLHTOepKk8LvQ== +"@neutron-org/neutronjsplus@0.4.0-rc16": + version "0.4.0-rc16" + resolved "https://registry.yarnpkg.com/@neutron-org/neutronjsplus/-/neutronjsplus-0.4.0-rc16.tgz#aa4eb8fdbb5e85129751bfe9a3d540164287ff25" + integrity sha512-19zLy6/bAoTxnLBXY+IlV9tc8w6uaSfDw4uV39BzIpUeAkzPrRAKDTmngYmm+rCArgl2697EvLbqEQ11CGS9ZA== dependencies: "@bufbuild/protobuf" "^1.4.2" "@cosmos-client/core" "^0.47.4" From c3a0870cde7e7160bce2a0307c047fe9f52273cd Mon Sep 17 00:00:00 2001 From: nhpd Date: Wed, 24 Apr 2024 14:04:30 +0400 Subject: [PATCH 62/87] fix lint --- src/testcases/parallel/governance.test.ts | 4 +- .../run_in_band/dex_bindings.test.ts | 2 +- .../run_in_band/dex_stargate.test.ts | 2 +- src/testcases/run_in_band/globalfee.test.ts | 58 +++++++++++-------- .../run_in_band/interchaintx.test.ts | 2 +- src/testcases/run_in_band/pob.test.ts | 1 - 6 files changed, 40 insertions(+), 29 deletions(-) diff --git a/src/testcases/parallel/governance.test.ts b/src/testcases/parallel/governance.test.ts index 73142c76..65feb1a0 100644 --- a/src/testcases/parallel/governance.test.ts +++ b/src/testcases/parallel/governance.test.ts @@ -552,7 +552,7 @@ describe('Neutron / Governance', () => { } catch (e) { rawLog = e.message; } - expect(rawLog.includes("proposal content is not whitelisted")); + expect(rawLog.includes('proposal content is not whitelisted')); }); }); @@ -1002,7 +1002,7 @@ describe('Neutron / Governance', () => { } catch (e) { rawLog = e.message; } - expect(rawLog.includes("proposal content is not whitelisted")); + expect(rawLog.includes('proposal content is not whitelisted')); }); }); diff --git a/src/testcases/run_in_band/dex_bindings.test.ts b/src/testcases/run_in_band/dex_bindings.test.ts index 33755794..8c240dc7 100644 --- a/src/testcases/run_in_band/dex_bindings.test.ts +++ b/src/testcases/run_in_band/dex_bindings.test.ts @@ -548,7 +548,7 @@ describe('Neutron / dex module bindings', () => { ); console.log(resp); expect(Number(resp.deposits[0].total_shares)).toBeGreaterThan(0); - expect(Number(resp.deposits[0].pool!.id)).toEqual(0); + expect(Number(resp.deposits[0].pool.id)).toEqual(0); const respNoPoolData = await neutronAccount.chain.queryContract( diff --git a/src/testcases/run_in_band/dex_stargate.test.ts b/src/testcases/run_in_band/dex_stargate.test.ts index d46c9011..f85fe60d 100644 --- a/src/testcases/run_in_band/dex_stargate.test.ts +++ b/src/testcases/run_in_band/dex_stargate.test.ts @@ -447,7 +447,7 @@ describe('Neutron / dex module (stargate contract)', () => { ); console.log(resp); expect(Number(resp.deposits[0].total_shares)).toBeGreaterThan(0); - expect(Number(resp.deposits[0].pool!.id)).toEqual(0); + expect(Number(resp.deposits[0].pool.id)).toEqual(0); const respNoPoolData = await neutronAccount.chain.queryContract( diff --git a/src/testcases/run_in_band/globalfee.test.ts b/src/testcases/run_in_band/globalfee.test.ts index 55985449..6dae8b0c 100644 --- a/src/testcases/run_in_band/globalfee.test.ts +++ b/src/testcases/run_in_band/globalfee.test.ts @@ -12,8 +12,8 @@ import { DaoMember, getDaoContracts, } from '@neutron-org/neutronjsplus/dist/dao'; -import {updateGlobalFeeParamsProposal} from "@neutron-org/neutronjsplus/dist/proposal"; -import cosmosclient from "@cosmos-client/core"; +import { updateGlobalFeeParamsProposal } from '@neutron-org/neutronjsplus/dist/proposal'; +import cosmosclient from '@cosmos-client/core'; const config = require('../../config.json'); @@ -66,31 +66,32 @@ describe('Neutron / Global Fee', () => { const executeParamChange = async ( daoMember: DaoMember, kind: string, - bypass_min_fee_msg_types: string[], - minimum_gas_prices: cosmosclient.proto.cosmos.base.v1beta1.ICoin[], - max_total_bypass_min_fee_msg_gas_usage: string, + bypassMinFeeMsgTypes: string[], + minimumGasPrices: cosmosclient.proto.cosmos.base.v1beta1.ICoin[], + maxTotalBypassMinFeeMsgGasUsage: string, ) => { const params = await neutronChain.queryGlobalfeeParams(); - if (bypass_min_fee_msg_types == null) { - bypass_min_fee_msg_types = params.bypass_min_fee_msg_types + if (bypassMinFeeMsgTypes == null) { + bypassMinFeeMsgTypes = params.bypass_min_fee_msg_types; } - if (minimum_gas_prices == null) { - minimum_gas_prices = params.minimum_gas_prices + if (minimumGasPrices == null) { + minimumGasPrices = params.minimum_gas_prices; } - if (max_total_bypass_min_fee_msg_gas_usage == null) { - max_total_bypass_min_fee_msg_gas_usage = params.max_total_bypass_min_fee_msg_gas_usage + if (maxTotalBypassMinFeeMsgGasUsage == null) { + maxTotalBypassMinFeeMsgGasUsage = + params.max_total_bypass_min_fee_msg_gas_usage; } const proposalId = await daoMember.submitUpdateParamsGlobalfeeProposal( 'Change Proposal - ' + kind + ' #' + counter, 'Param change proposal. It will change the bypass min fee msg types of the global fee module to use MsgSend.', updateGlobalFeeParamsProposal({ - bypass_min_fee_msg_types: bypass_min_fee_msg_types, - max_total_bypass_min_fee_msg_gas_usage: max_total_bypass_min_fee_msg_gas_usage, - minimum_gas_prices: minimum_gas_prices + bypass_min_fee_msg_types: bypassMinFeeMsgTypes, + max_total_bypass_min_fee_msg_gas_usage: maxTotalBypassMinFeeMsgGasUsage, + minimum_gas_prices: minimumGasPrices, }), '1000', - { + { gas_limit: Long.fromString('4000000'), amount: [{ denom: neutronChain.denom, amount: '100000' }], }, @@ -132,8 +133,8 @@ describe('Neutron / Global Fee', () => { daoMember, 'MinimumGasPricesParam', null, - [{"denom": "untrn", "amount": "0.01"}], - null + [{ denom: 'untrn', amount: '0.01' }], + null, ); }); @@ -159,9 +160,9 @@ describe('Neutron / Global Fee', () => { await executeParamChange( daoMember, 'BypassMinFeeMsgTypes', - ["/cosmos.bank.v1beta1.MsgSend"], + ['/cosmos.bank.v1beta1.MsgSend'], + null, null, - null ); }); @@ -193,7 +194,7 @@ describe('Neutron / Global Fee', () => { 'MaxTotalBypassMinFeeMsgGasUsage', null, null, - "50", + '50', ); }); @@ -219,7 +220,14 @@ describe('Neutron / Global Fee', () => { daoMember, 'MinimumGasPricesParam', null, - [{"denom":"ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2","amount":"0"},{"denom":"untrn","amount":"0"}], + [ + { + denom: + 'ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2', + amount: '0', + }, + { denom: 'untrn', amount: '0' }, + ], null, ); }); @@ -228,9 +236,13 @@ describe('Neutron / Global Fee', () => { await executeParamChange( daoMember, 'BypassMinFeeMsgTypes', - ["/ibc.core.channel.v1.Msg/RecvPacket", "/ibc.core.channel.v1.Msg/Acknowledgement", "/ibc.core.client.v1.Msg/UpdateClient"], + [ + '/ibc.core.channel.v1.Msg/RecvPacket', + '/ibc.core.channel.v1.Msg/Acknowledgement', + '/ibc.core.client.v1.Msg/UpdateClient', + ], + null, null, - null ); }); diff --git a/src/testcases/run_in_band/interchaintx.test.ts b/src/testcases/run_in_band/interchaintx.test.ts index c6505775..eb5583fd 100644 --- a/src/testcases/run_in_band/interchaintx.test.ts +++ b/src/testcases/run_in_band/interchaintx.test.ts @@ -202,7 +202,7 @@ describe('Neutron / Interchain TXs', () => { icaId1, sequenceId, ); - const ares = await getAcks(neutronChain, contractAddress); + await getAcks(neutronChain, contractAddress); expect(qres).toMatchObject({ success: ['/cosmos.staking.v1beta1.MsgDelegateResponse'], }); diff --git a/src/testcases/run_in_band/pob.test.ts b/src/testcases/run_in_band/pob.test.ts index 0f898910..736748b1 100644 --- a/src/testcases/run_in_band/pob.test.ts +++ b/src/testcases/run_in_band/pob.test.ts @@ -8,7 +8,6 @@ import { WalletWrapper, } from '@neutron-org/neutronjsplus/dist/cosmos'; import { TestStateLocalCosmosTestNet } from '@neutron-org/neutronjsplus'; -import { InlineResponse20071TxResponseEvents } from '@cosmos-client/ibc/cjs/openapi/api'; import { getHeight } from '@neutron-org/neutronjsplus/dist/env'; const fee = { gas_limit: Long.fromString('200000'), From fa0ccf9f315e77af3d86389ad6d23645b71ef634 Mon Sep 17 00:00:00 2001 From: nhpd Date: Wed, 24 Apr 2024 20:17:55 +0400 Subject: [PATCH 63/87] neutronjsplus 0.4.0-rc17 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index ff84d361..67e37cf3 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "@cosmos-client/core": "^0.47.4", "@cosmos-client/cosmwasm": "^0.40.3", "@cosmos-client/ibc": "^1.2.1", - "@neutron-org/neutronjsplus": "0.4.0-rc16", + "@neutron-org/neutronjsplus": "0.4.0-rc17", "@types/lodash": "^4.14.182", "@types/long": "^5.0.0", "axios": "^0.27.2", diff --git a/yarn.lock b/yarn.lock index c5f6bad8..b057a4bc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1573,10 +1573,10 @@ resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-5.50.0.tgz#29c6419e8379d496ab6d0426eadf3c4d100cd186" integrity sha512-swKHYCOZUGyVt4ge0u8a7AwNcA//h4nx5wIi0sruGye1IJ5Cva0GyK9L2/WdX+kWVTKp92ZiEo1df31lrWGPgA== -"@neutron-org/neutronjsplus@0.4.0-rc16": - version "0.4.0-rc16" - resolved "https://registry.yarnpkg.com/@neutron-org/neutronjsplus/-/neutronjsplus-0.4.0-rc16.tgz#aa4eb8fdbb5e85129751bfe9a3d540164287ff25" - integrity sha512-19zLy6/bAoTxnLBXY+IlV9tc8w6uaSfDw4uV39BzIpUeAkzPrRAKDTmngYmm+rCArgl2697EvLbqEQ11CGS9ZA== +"@neutron-org/neutronjsplus@0.4.0-rc17": + version "0.4.0-rc17" + resolved "https://registry.yarnpkg.com/@neutron-org/neutronjsplus/-/neutronjsplus-0.4.0-rc17.tgz#e60ae46a9e668a0b9b685af19c2da84ab78bcc58" + integrity sha512-rqzBsa8cMKYKaMOzjF9No4cs+ChoCg13AWYX6lwEEIOCrkWPcUthf60fy82qTAPiQDkRP5iAAPgaBqRcsPmlLQ== dependencies: "@bufbuild/protobuf" "^1.4.2" "@cosmos-client/core" "^0.47.4" From 2c9e5118f41fb27fe677f59ee16fd83cef6102fc Mon Sep 17 00:00:00 2001 From: nhpd Date: Wed, 24 Apr 2024 20:30:32 +0400 Subject: [PATCH 64/87] neutronjsplus rc18 --- package.json | 2 +- yarn.lock | 50 +++++++++++++++++++++++++------------------------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/package.json b/package.json index 67e37cf3..18571017 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "@cosmos-client/core": "^0.47.4", "@cosmos-client/cosmwasm": "^0.40.3", "@cosmos-client/ibc": "^1.2.1", - "@neutron-org/neutronjsplus": "0.4.0-rc17", + "@neutron-org/neutronjsplus": "0.4.0-rc18", "@types/lodash": "^4.14.182", "@types/long": "^5.0.0", "axios": "^0.27.2", diff --git a/yarn.lock b/yarn.lock index b057a4bc..2e462e73 100644 --- a/yarn.lock +++ b/yarn.lock @@ -108,10 +108,10 @@ regexpu-core "^5.3.1" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.6.1": - version "0.6.1" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.1.tgz#fadc63f0c2ff3c8d02ed905dcea747c5b0fb74fd" - integrity sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA== +"@babel/helper-define-polyfill-provider@^0.6.1", "@babel/helper-define-polyfill-provider@^0.6.2": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz#18594f789c3594acb24cfdb4a7f7b7d2e8bd912d" + integrity sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ== dependencies: "@babel/helper-compilation-targets" "^7.22.6" "@babel/helper-plugin-utils" "^7.22.5" @@ -1004,9 +1004,9 @@ integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== "@bufbuild/protobuf@^1.4.2": - version "1.8.0" - resolved "https://registry.yarnpkg.com/@bufbuild/protobuf/-/protobuf-1.8.0.tgz#1c8651ea34adb8019b483e09de02aeeb1cd57d79" - integrity sha512-qR9FwI8QKIveDnUYutvfzbC21UZJJryYrLuZGjeZ/VGz+vXelUkK+xgkOHsvPEdYEdxtgUUq4313N8QtOehJ1Q== + version "1.9.0" + resolved "https://registry.yarnpkg.com/@bufbuild/protobuf/-/protobuf-1.9.0.tgz#fffac3183059a41ceef5311e07e3724d426a95c4" + integrity sha512-W7gp8Q/v1NlCZLsv8pQ3Y0uCu/SHgXOVFK+eUluUKWXmsb6VHkpNx0apdOWWcDbB9sJoKeP8uPrjmehJz6xETQ== "@confio/ics23@^0.6.8": version "0.6.8" @@ -1573,10 +1573,10 @@ resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-5.50.0.tgz#29c6419e8379d496ab6d0426eadf3c4d100cd186" integrity sha512-swKHYCOZUGyVt4ge0u8a7AwNcA//h4nx5wIi0sruGye1IJ5Cva0GyK9L2/WdX+kWVTKp92ZiEo1df31lrWGPgA== -"@neutron-org/neutronjsplus@0.4.0-rc17": - version "0.4.0-rc17" - resolved "https://registry.yarnpkg.com/@neutron-org/neutronjsplus/-/neutronjsplus-0.4.0-rc17.tgz#e60ae46a9e668a0b9b685af19c2da84ab78bcc58" - integrity sha512-rqzBsa8cMKYKaMOzjF9No4cs+ChoCg13AWYX6lwEEIOCrkWPcUthf60fy82qTAPiQDkRP5iAAPgaBqRcsPmlLQ== +"@neutron-org/neutronjsplus@0.4.0-rc18": + version "0.4.0-rc18" + resolved "https://registry.yarnpkg.com/@neutron-org/neutronjsplus/-/neutronjsplus-0.4.0-rc18.tgz#00a8998c3ff1aeef4fbf050caf857d331b532117" + integrity sha512-9w/Cgou1sx4MTVqgRsnsLde1TGS4O3JHlw8Zie07EIbvLbqrj0wwP0EL3X6futPfPuPP5ijD4Q3+GG86RB0JDg== dependencies: "@bufbuild/protobuf" "^1.4.2" "@cosmos-client/core" "^0.47.4" @@ -2188,12 +2188,12 @@ babel-plugin-jest-hoist@^29.6.3: "@types/babel__traverse" "^7.0.6" babel-plugin-polyfill-corejs2@^0.4.10: - version "0.4.10" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.10.tgz#276f41710b03a64f6467433cab72cbc2653c38b1" - integrity sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ== + version "0.4.11" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz#30320dfe3ffe1a336c15afdcdafd6fd615b25e33" + integrity sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q== dependencies: "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.6.1" + "@babel/helper-define-polyfill-provider" "^0.6.2" semver "^6.3.1" babel-plugin-polyfill-corejs3@^0.10.4: @@ -2205,11 +2205,11 @@ babel-plugin-polyfill-corejs3@^0.10.4: core-js-compat "^3.36.1" babel-plugin-polyfill-regenerator@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.1.tgz#4f08ef4c62c7a7f66a35ed4c0d75e30506acc6be" - integrity sha512-JfTApdE++cgcTWjsiCQlLyFBMbTUft9ja17saCc93lgV33h4tuCVj7tlvu//qpLwaG+3yEz7/KhahGrUMkVq9g== + version "0.6.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz#addc47e240edd1da1058ebda03021f382bba785e" + integrity sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.1" + "@babel/helper-define-polyfill-provider" "^0.6.2" babel-preset-current-node-syntax@^1.0.0: version "1.0.1" @@ -2429,9 +2429,9 @@ camelcase@^6.2.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001587: - version "1.0.30001611" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001611.tgz#4dbe78935b65851c2d2df1868af39f709a93a96e" - integrity sha512-19NuN1/3PjA3QI8Eki55N8my4LzfkMCRLgCVfrl/slbSAchQfV0+GwjPrK3rq37As4UCLlM/DHajbKkAqbv92Q== + version "1.0.30001612" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001612.tgz#d34248b4ec1f117b70b24ad9ee04c90e0b8a14ae" + integrity sha512-lFgnZ07UhaCcsSZgWW0K5j4e69dK1u/ltrL9lTUiFOwNHs12S3UMIEYgBV0Z6C6hRDev7iRnMzzYmKabYdXF9g== chalk@^2.3.0, chalk@^2.4.2: version "2.4.2" @@ -2818,9 +2818,9 @@ ee-first@1.1.1: integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== electron-to-chromium@^1.4.668: - version "1.4.744" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.744.tgz#d19cdfdbd81bd800b71773702bcbaa129a3b2e8f" - integrity sha512-nAGcF0yeKKfrP13LMFr5U1eghfFSvFLg302VUFzWlcjPOnUYd52yU5x6PBYrujhNbc4jYmZFrGZFK+xasaEzVA== + version "1.4.747" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.747.tgz#e37fa5b7b7e4c22607c5f59b5cf78f947266e77d" + integrity sha512-+FnSWZIAvFHbsNVmUxhEqWiaOiPMcfum1GQzlWCg/wLigVtshOsjXHyEFfmt6cFK6+HkS3QOJBv6/3OPumbBfw== elliptic@^6.4.0, elliptic@^6.5.3, elliptic@^6.5.4: version "6.5.5" From 225ac028cf3f8dc64857405acaf848c350812afc Mon Sep 17 00:00:00 2001 From: nhpd Date: Thu, 25 Apr 2024 00:14:47 +0400 Subject: [PATCH 65/87] neutronjsplus rc v19 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 18571017..8780206a 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "@cosmos-client/core": "^0.47.4", "@cosmos-client/cosmwasm": "^0.40.3", "@cosmos-client/ibc": "^1.2.1", - "@neutron-org/neutronjsplus": "0.4.0-rc18", + "@neutron-org/neutronjsplus": "0.4.0-rc19", "@types/lodash": "^4.14.182", "@types/long": "^5.0.0", "axios": "^0.27.2", diff --git a/yarn.lock b/yarn.lock index 2e462e73..4586d7bf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1573,10 +1573,10 @@ resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-5.50.0.tgz#29c6419e8379d496ab6d0426eadf3c4d100cd186" integrity sha512-swKHYCOZUGyVt4ge0u8a7AwNcA//h4nx5wIi0sruGye1IJ5Cva0GyK9L2/WdX+kWVTKp92ZiEo1df31lrWGPgA== -"@neutron-org/neutronjsplus@0.4.0-rc18": - version "0.4.0-rc18" - resolved "https://registry.yarnpkg.com/@neutron-org/neutronjsplus/-/neutronjsplus-0.4.0-rc18.tgz#00a8998c3ff1aeef4fbf050caf857d331b532117" - integrity sha512-9w/Cgou1sx4MTVqgRsnsLde1TGS4O3JHlw8Zie07EIbvLbqrj0wwP0EL3X6futPfPuPP5ijD4Q3+GG86RB0JDg== +"@neutron-org/neutronjsplus@0.4.0-rc19": + version "0.4.0-rc19" + resolved "https://registry.yarnpkg.com/@neutron-org/neutronjsplus/-/neutronjsplus-0.4.0-rc19.tgz#0e8548648662d30cd31eb3a435b53df43be7851b" + integrity sha512-2lkrztWRPuMLYexBA3G2NkhICSHg1OyW7I/eGBwi3KN3fztY52t2PRssQPWoE79jxJ26XLpIlk97eeDjr2z44A== dependencies: "@bufbuild/protobuf" "^1.4.2" "@cosmos-client/core" "^0.47.4" From 6aebde789406b5833c35d23f5a965a76888b652e Mon Sep 17 00:00:00 2001 From: nhpd Date: Thu, 25 Apr 2024 02:06:17 +0400 Subject: [PATCH 66/87] recreate yarn.lock --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 4586d7bf..bd1d042c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2818,9 +2818,9 @@ ee-first@1.1.1: integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== electron-to-chromium@^1.4.668: - version "1.4.747" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.747.tgz#e37fa5b7b7e4c22607c5f59b5cf78f947266e77d" - integrity sha512-+FnSWZIAvFHbsNVmUxhEqWiaOiPMcfum1GQzlWCg/wLigVtshOsjXHyEFfmt6cFK6+HkS3QOJBv6/3OPumbBfw== + version "1.4.748" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.748.tgz#aa7d4f2f3eac3a6a863cd1779bd4682b4bb68ed5" + integrity sha512-VWqjOlPZn70UZ8FTKUOkUvBLeTQ0xpty66qV0yJcAGY2/CthI4xyW9aEozRVtuwv3Kpf5xTesmJUcPwuJmgP4A== elliptic@^6.4.0, elliptic@^6.5.3, elliptic@^6.5.4: version "6.5.5" From 14e33f871bd4e93bcdf6f7eb8ac5d24a5e062a64 Mon Sep 17 00:00:00 2001 From: pr0n00gler Date: Thu, 25 Apr 2024 15:56:18 +0300 Subject: [PATCH 67/87] pool metadata proto --- package.json | 2 +- .../run_in_band/dex_stargate.test.ts | 20 ++++++++ yarn.lock | 49 +++++++++---------- 3 files changed, 45 insertions(+), 26 deletions(-) diff --git a/package.json b/package.json index 2014f293..96ffc8b4 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "@cosmos-client/core": "^0.47.4", "@cosmos-client/cosmwasm": "^0.40.3", "@cosmos-client/ibc": "^1.2.1", - "@neutron-org/neutronjsplus": "0.4.0-rc15", + "@neutron-org/neutronjsplus": "neutron-org/neutronjsplus#fix/pool_metadata_proto", "@types/lodash": "^4.14.182", "@types/long": "^5.0.0", "axios": "^0.27.2", diff --git a/src/testcases/run_in_band/dex_stargate.test.ts b/src/testcases/run_in_band/dex_stargate.test.ts index d46c9011..404d6603 100644 --- a/src/testcases/run_in_band/dex_stargate.test.ts +++ b/src/testcases/run_in_band/dex_stargate.test.ts @@ -356,6 +356,25 @@ describe('Neutron / dex module (stargate contract)', () => { ); }); test('LimitOrderTrancheUserQuery', async () => { + const resTx = await neutronAccount.executeContract( + contractAddress, + JSON.stringify({ + place_limit_order: { + receiver: contractAddress, + token_in: 'untrn', + token_out: 'uibcusdc', + tick_index_in_to_out: 1, + amount_in: '10', + order_type: LimitOrderType.JustInTime, + }, + }), + ); + expect(resTx.code).toEqual(0); + trancheKeyToWithdraw = getEventAttributesFromTx( + { tx_response: resTx }, + 'TickUpdate', + ['TrancheKey'], + )[0]['TrancheKey']; const res = await neutronAccount.chain.queryContract( contractAddress, @@ -363,6 +382,7 @@ describe('Neutron / dex module (stargate contract)', () => { get_limit_order_tranche_user: { address: contractAddress, tranche_key: trancheKeyToWithdraw, + calc_withdrawable_shares: true, }, }, ); diff --git a/yarn.lock b/yarn.lock index 83fd6508..2f4618e1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -108,10 +108,10 @@ regexpu-core "^5.3.1" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.6.1": - version "0.6.1" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.1.tgz#fadc63f0c2ff3c8d02ed905dcea747c5b0fb74fd" - integrity sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA== +"@babel/helper-define-polyfill-provider@^0.6.1", "@babel/helper-define-polyfill-provider@^0.6.2": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz#18594f789c3594acb24cfdb4a7f7b7d2e8bd912d" + integrity sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ== dependencies: "@babel/helper-compilation-targets" "^7.22.6" "@babel/helper-plugin-utils" "^7.22.5" @@ -1004,9 +1004,9 @@ integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== "@bufbuild/protobuf@^1.4.2": - version "1.8.0" - resolved "https://registry.yarnpkg.com/@bufbuild/protobuf/-/protobuf-1.8.0.tgz#1c8651ea34adb8019b483e09de02aeeb1cd57d79" - integrity sha512-qR9FwI8QKIveDnUYutvfzbC21UZJJryYrLuZGjeZ/VGz+vXelUkK+xgkOHsvPEdYEdxtgUUq4313N8QtOehJ1Q== + version "1.9.0" + resolved "https://registry.yarnpkg.com/@bufbuild/protobuf/-/protobuf-1.9.0.tgz#fffac3183059a41ceef5311e07e3724d426a95c4" + integrity sha512-W7gp8Q/v1NlCZLsv8pQ3Y0uCu/SHgXOVFK+eUluUKWXmsb6VHkpNx0apdOWWcDbB9sJoKeP8uPrjmehJz6xETQ== "@confio/ics23@^0.6.8": version "0.6.8" @@ -1573,10 +1573,9 @@ resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-5.50.0.tgz#29c6419e8379d496ab6d0426eadf3c4d100cd186" integrity sha512-swKHYCOZUGyVt4ge0u8a7AwNcA//h4nx5wIi0sruGye1IJ5Cva0GyK9L2/WdX+kWVTKp92ZiEo1df31lrWGPgA== -"@neutron-org/neutronjsplus@0.4.0-rc15": - version "0.4.0-rc15" - resolved "https://registry.yarnpkg.com/@neutron-org/neutronjsplus/-/neutronjsplus-0.4.0-rc15.tgz#b79ea1b10b987bc079f12b49a5916c825e3f4550" - integrity sha512-dFmGI5qZDae1DPynm2lJvvaxtUAsgCc7nrNpYOxKHzNFiYhBE9I+gAFJXuBJWFSnD0F9fI3PJpLHTOepKk8LvQ== +"@neutron-org/neutronjsplus@neutron-org/neutronjsplus#fix/pool_metadata_proto": + version "0.3.4" + resolved "https://codeload.github.com/neutron-org/neutronjsplus/tar.gz/d7eb7f682f0a369936829c153e3abaada245e33b" dependencies: "@bufbuild/protobuf" "^1.4.2" "@cosmos-client/core" "^0.47.4" @@ -2188,12 +2187,12 @@ babel-plugin-jest-hoist@^29.6.3: "@types/babel__traverse" "^7.0.6" babel-plugin-polyfill-corejs2@^0.4.10: - version "0.4.10" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.10.tgz#276f41710b03a64f6467433cab72cbc2653c38b1" - integrity sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ== + version "0.4.11" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz#30320dfe3ffe1a336c15afdcdafd6fd615b25e33" + integrity sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q== dependencies: "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.6.1" + "@babel/helper-define-polyfill-provider" "^0.6.2" semver "^6.3.1" babel-plugin-polyfill-corejs3@^0.10.4: @@ -2205,11 +2204,11 @@ babel-plugin-polyfill-corejs3@^0.10.4: core-js-compat "^3.36.1" babel-plugin-polyfill-regenerator@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.1.tgz#4f08ef4c62c7a7f66a35ed4c0d75e30506acc6be" - integrity sha512-JfTApdE++cgcTWjsiCQlLyFBMbTUft9ja17saCc93lgV33h4tuCVj7tlvu//qpLwaG+3yEz7/KhahGrUMkVq9g== + version "0.6.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz#addc47e240edd1da1058ebda03021f382bba785e" + integrity sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.1" + "@babel/helper-define-polyfill-provider" "^0.6.2" babel-preset-current-node-syntax@^1.0.0: version "1.0.1" @@ -2429,9 +2428,9 @@ camelcase@^6.2.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001587: - version "1.0.30001611" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001611.tgz#4dbe78935b65851c2d2df1868af39f709a93a96e" - integrity sha512-19NuN1/3PjA3QI8Eki55N8my4LzfkMCRLgCVfrl/slbSAchQfV0+GwjPrK3rq37As4UCLlM/DHajbKkAqbv92Q== + version "1.0.30001612" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001612.tgz#d34248b4ec1f117b70b24ad9ee04c90e0b8a14ae" + integrity sha512-lFgnZ07UhaCcsSZgWW0K5j4e69dK1u/ltrL9lTUiFOwNHs12S3UMIEYgBV0Z6C6hRDev7iRnMzzYmKabYdXF9g== chalk@^2.3.0, chalk@^2.4.2: version "2.4.2" @@ -2818,9 +2817,9 @@ ee-first@1.1.1: integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== electron-to-chromium@^1.4.668: - version "1.4.744" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.744.tgz#d19cdfdbd81bd800b71773702bcbaa129a3b2e8f" - integrity sha512-nAGcF0yeKKfrP13LMFr5U1eghfFSvFLg302VUFzWlcjPOnUYd52yU5x6PBYrujhNbc4jYmZFrGZFK+xasaEzVA== + version "1.4.748" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.748.tgz#aa7d4f2f3eac3a6a863cd1779bd4682b4bb68ed5" + integrity sha512-VWqjOlPZn70UZ8FTKUOkUvBLeTQ0xpty66qV0yJcAGY2/CthI4xyW9aEozRVtuwv3Kpf5xTesmJUcPwuJmgP4A== elliptic@^6.4.0, elliptic@^6.5.3, elliptic@^6.5.4: version "6.5.5" From 5e94ce0b95a9ac65c38f2f5c080b94fdb3f8f6a6 Mon Sep 17 00:00:00 2001 From: pr0n00gler Date: Thu, 25 Apr 2024 19:18:21 +0300 Subject: [PATCH 68/87] upd yarn.lock --- yarn.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yarn.lock b/yarn.lock index 2f4618e1..db394070 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1575,7 +1575,7 @@ "@neutron-org/neutronjsplus@neutron-org/neutronjsplus#fix/pool_metadata_proto": version "0.3.4" - resolved "https://codeload.github.com/neutron-org/neutronjsplus/tar.gz/d7eb7f682f0a369936829c153e3abaada245e33b" + resolved "https://codeload.github.com/neutron-org/neutronjsplus/tar.gz/1fdefc54ec7101b1411fd0ba07a2f9f28c9b11d2" dependencies: "@bufbuild/protobuf" "^1.4.2" "@cosmos-client/core" "^0.47.4" From 0b416a3c1a9e2da58fad708471bbe7608d1299c6 Mon Sep 17 00:00:00 2001 From: pr0n00gler Date: Thu, 25 Apr 2024 19:23:41 +0300 Subject: [PATCH 69/87] upd yarn.lock and package.json --- package.json | 2 +- yarn.lock | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 8780206a..2029cc9f 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "@cosmos-client/core": "^0.47.4", "@cosmos-client/cosmwasm": "^0.40.3", "@cosmos-client/ibc": "^1.2.1", - "@neutron-org/neutronjsplus": "0.4.0-rc19", + "@neutron-org/neutronjsplus": "neutron-org/neutronjsplus#feat/slinky", "@types/lodash": "^4.14.182", "@types/long": "^5.0.0", "axios": "^0.27.2", diff --git a/yarn.lock b/yarn.lock index bd1d042c..98b98539 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1573,10 +1573,9 @@ resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-5.50.0.tgz#29c6419e8379d496ab6d0426eadf3c4d100cd186" integrity sha512-swKHYCOZUGyVt4ge0u8a7AwNcA//h4nx5wIi0sruGye1IJ5Cva0GyK9L2/WdX+kWVTKp92ZiEo1df31lrWGPgA== -"@neutron-org/neutronjsplus@0.4.0-rc19": +"@neutron-org/neutronjsplus@neutron-org/neutronjsplus#feat/slinky": version "0.4.0-rc19" - resolved "https://registry.yarnpkg.com/@neutron-org/neutronjsplus/-/neutronjsplus-0.4.0-rc19.tgz#0e8548648662d30cd31eb3a435b53df43be7851b" - integrity sha512-2lkrztWRPuMLYexBA3G2NkhICSHg1OyW7I/eGBwi3KN3fztY52t2PRssQPWoE79jxJ26XLpIlk97eeDjr2z44A== + resolved "https://codeload.github.com/neutron-org/neutronjsplus/tar.gz/65f1287a2e3ac4c0658d823f9c3ab6a849f11b9c" dependencies: "@bufbuild/protobuf" "^1.4.2" "@cosmos-client/core" "^0.47.4" From 9291b4c6d830965e33c6fcab0c8f9362b080c853 Mon Sep 17 00:00:00 2001 From: pr0n00gler Date: Fri, 26 Apr 2024 14:45:19 +0300 Subject: [PATCH 70/87] remove yarn.lock --- yarn.lock | 5619 ----------------------------------------------------- 1 file changed, 5619 deletions(-) delete mode 100644 yarn.lock diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index db394070..00000000 --- a/yarn.lock +++ /dev/null @@ -1,5619 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@aashutoshrathi/word-wrap@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" - integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== - -"@ampproject/remapping@^2.2.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" - integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== - dependencies: - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.24" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.23.5", "@babel/code-frame@^7.24.1", "@babel/code-frame@^7.24.2": - version "7.24.2" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.2.tgz#718b4b19841809a58b29b68cde80bc5e1aa6d9ae" - integrity sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ== - dependencies: - "@babel/highlight" "^7.24.2" - picocolors "^1.0.0" - -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.5", "@babel/compat-data@^7.24.4": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.4.tgz#6f102372e9094f25d908ca0d34fc74c74606059a" - integrity sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ== - -"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.4.tgz#1f758428e88e0d8c563874741bc4ffc4f71a4717" - integrity sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.24.2" - "@babel/generator" "^7.24.4" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.24.4" - "@babel/parser" "^7.24.4" - "@babel/template" "^7.24.0" - "@babel/traverse" "^7.24.1" - "@babel/types" "^7.24.0" - convert-source-map "^2.0.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.3" - semver "^6.3.1" - -"@babel/generator@^7.24.1", "@babel/generator@^7.24.4", "@babel/generator@^7.7.2": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.4.tgz#1fc55532b88adf952025d5d2d1e71f946cb1c498" - integrity sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw== - dependencies: - "@babel/types" "^7.24.0" - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.25" - jsesc "^2.5.1" - -"@babel/helper-annotate-as-pure@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" - integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956" - integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== - dependencies: - "@babel/types" "^7.22.15" - -"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" - integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== - dependencies: - "@babel/compat-data" "^7.23.5" - "@babel/helper-validator-option" "^7.23.5" - browserslist "^4.22.2" - lru-cache "^5.1.1" - semver "^6.3.1" - -"@babel/helper-create-class-features-plugin@^7.24.1", "@babel/helper-create-class-features-plugin@^7.24.4": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.4.tgz#c806f73788a6800a5cfbbc04d2df7ee4d927cce3" - integrity sha512-lG75yeuUSVu0pIcbhiYMXBXANHrpUPaOfu7ryAzskCgKUHuAxRQI5ssrtmF0X9UXldPlvT0XM/A4F44OXRt6iQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-member-expression-to-functions" "^7.23.0" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.24.1" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - semver "^6.3.1" - -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" - integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - regexpu-core "^5.3.1" - semver "^6.3.1" - -"@babel/helper-define-polyfill-provider@^0.6.1", "@babel/helper-define-polyfill-provider@^0.6.2": - version "0.6.2" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz#18594f789c3594acb24cfdb4a7f7b7d2e8bd912d" - integrity sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ== - dependencies: - "@babel/helper-compilation-targets" "^7.22.6" - "@babel/helper-plugin-utils" "^7.22.5" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - -"@babel/helper-environment-visitor@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" - integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== - -"@babel/helper-function-name@^7.22.5", "@babel/helper-function-name@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" - integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== - dependencies: - "@babel/template" "^7.22.15" - "@babel/types" "^7.23.0" - -"@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-member-expression-to-functions@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366" - integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== - dependencies: - "@babel/types" "^7.23.0" - -"@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.24.1": - version "7.24.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz#6ac476e6d168c7c23ff3ba3cf4f7841d46ac8128" - integrity sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg== - dependencies: - "@babel/types" "^7.24.0" - -"@babel/helper-module-transforms@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" - integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/helper-validator-identifier" "^7.22.20" - -"@babel/helper-optimise-call-expression@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" - integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz#945681931a52f15ce879fd5b86ce2dae6d3d7f2a" - integrity sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w== - -"@babel/helper-remap-async-to-generator@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0" - integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-wrap-function" "^7.22.20" - -"@babel/helper-replace-supers@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz#7085bd19d4a0b7ed8f405c1ed73ccb70f323abc1" - integrity sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-member-expression-to-functions" "^7.23.0" - "@babel/helper-optimise-call-expression" "^7.22.5" - -"@babel/helper-simple-access@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" - integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-skip-transparent-expression-wrappers@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" - integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-string-parser@^7.23.4": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz#f99c36d3593db9540705d0739a1f10b5e20c696e" - integrity sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ== - -"@babel/helper-validator-identifier@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" - integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== - -"@babel/helper-validator-option@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" - integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== - -"@babel/helper-wrap-function@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz#15352b0b9bfb10fc9c76f79f6342c00e3411a569" - integrity sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw== - dependencies: - "@babel/helper-function-name" "^7.22.5" - "@babel/template" "^7.22.15" - "@babel/types" "^7.22.19" - -"@babel/helpers@^7.24.4": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.4.tgz#dc00907fd0d95da74563c142ef4cd21f2cb856b6" - integrity sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw== - dependencies: - "@babel/template" "^7.24.0" - "@babel/traverse" "^7.24.1" - "@babel/types" "^7.24.0" - -"@babel/highlight@^7.24.2": - version "7.24.2" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.2.tgz#3f539503efc83d3c59080a10e6634306e0370d26" - integrity sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA== - dependencies: - "@babel/helper-validator-identifier" "^7.22.20" - chalk "^2.4.2" - js-tokens "^4.0.0" - picocolors "^1.0.0" - -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.24.0", "@babel/parser@^7.24.1", "@babel/parser@^7.24.4": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.4.tgz#234487a110d89ad5a3ed4a8a566c36b9453e8c88" - integrity sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg== - -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.24.4": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.4.tgz#6125f0158543fb4edf1c22f322f3db67f21cb3e1" - integrity sha512-qpl6vOOEEzTLLcsuqYYo8yDtrTocmu2xkGvgNebvPjT9DTtfFYGmgDqY+rBYXNlqL4s9qLDn6xkrJv4RxAPiTA== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz#b645d9ba8c2bc5b7af50f0fe949f9edbeb07c8cf" - integrity sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz#da8261f2697f0f41b0855b91d3a20a1fbfd271d3" - integrity sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.24.1" - -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.1.tgz#1181d9685984c91d657b8ddf14f0487a6bab2988" - integrity sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": - version "7.21.0-placeholder-for-preset-env.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" - integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== - -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-bigint@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" - integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" - integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-import-assertions@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz#db3aad724153a00eaac115a3fb898de544e34971" - integrity sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-syntax-import-attributes@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz#c66b966c63b714c4eec508fcf5763b1f2d381093" - integrity sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-syntax-import-meta@^7.10.4", "@babel/plugin-syntax-import-meta@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-jsx@^7.24.1", "@babel/plugin-syntax-jsx@^7.7.2": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz#3f6ca04b8c841811dbc3c5c5f837934e0d626c10" - integrity sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" - integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-typescript@^7.24.1", "@babel/plugin-syntax-typescript@^7.7.2": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz#b3bcc51f396d15f3591683f90239de143c076844" - integrity sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" - integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-arrow-functions@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz#2bf263617060c9cc45bcdbf492b8cc805082bf27" - integrity sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-async-generator-functions@^7.24.3": - version "7.24.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.3.tgz#8fa7ae481b100768cc9842c8617808c5352b8b89" - integrity sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-remap-async-to-generator" "^7.22.20" - "@babel/plugin-syntax-async-generators" "^7.8.4" - -"@babel/plugin-transform-async-to-generator@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.1.tgz#0e220703b89f2216800ce7b1c53cb0cf521c37f4" - integrity sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw== - dependencies: - "@babel/helper-module-imports" "^7.24.1" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-remap-async-to-generator" "^7.22.20" - -"@babel/plugin-transform-block-scoped-functions@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz#1c94799e20fcd5c4d4589523bbc57b7692979380" - integrity sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-block-scoping@^7.24.4": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.4.tgz#28f5c010b66fbb8ccdeef853bef1935c434d7012" - integrity sha512-nIFUZIpGKDf9O9ttyRXpHFpKC+X3Y5mtshZONuEUYBomAKoM4y029Jr+uB1bHGPhNmK8YXHevDtKDOLmtRrp6g== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-class-properties@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz#bcbf1aef6ba6085cfddec9fc8d58871cf011fc29" - integrity sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.24.1" - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-class-static-block@^7.24.4": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.4.tgz#1a4653c0cf8ac46441ec406dece6e9bc590356a4" - integrity sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.24.4" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - -"@babel/plugin-transform-classes@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.1.tgz#5bc8fc160ed96378184bc10042af47f50884dcb1" - integrity sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-replace-supers" "^7.24.1" - "@babel/helper-split-export-declaration" "^7.22.6" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz#bc7e787f8e021eccfb677af5f13c29a9934ed8a7" - integrity sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/template" "^7.24.0" - -"@babel/plugin-transform-destructuring@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.1.tgz#b1e8243af4a0206841973786292b8c8dd8447345" - integrity sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-dotall-regex@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz#d56913d2f12795cc9930801b84c6f8c47513ac13" - integrity sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-duplicate-keys@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz#5347a797fe82b8d09749d10e9f5b83665adbca88" - integrity sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-dynamic-import@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.1.tgz#2a5a49959201970dd09a5fca856cb651e44439dd" - integrity sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - -"@babel/plugin-transform-exponentiation-operator@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz#6650ebeb5bd5c012d5f5f90a26613a08162e8ba4" - integrity sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15" - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-export-namespace-from@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz#f033541fc036e3efb2dcb58eedafd4f6b8078acd" - integrity sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-transform-for-of@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz#67448446b67ab6c091360ce3717e7d3a59e202fd" - integrity sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - -"@babel/plugin-transform-function-name@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz#8cba6f7730626cc4dfe4ca2fa516215a0592b361" - integrity sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA== - dependencies: - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-json-strings@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.1.tgz#08e6369b62ab3e8a7b61089151b161180c8299f7" - integrity sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/plugin-syntax-json-strings" "^7.8.3" - -"@babel/plugin-transform-literals@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz#0a1982297af83e6b3c94972686067df588c5c096" - integrity sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-logical-assignment-operators@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.1.tgz#719d8aded1aa94b8fb34e3a785ae8518e24cfa40" - integrity sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - -"@babel/plugin-transform-member-expression-literals@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz#896d23601c92f437af8b01371ad34beb75df4489" - integrity sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-modules-amd@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz#b6d829ed15258536977e9c7cc6437814871ffa39" - integrity sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ== - dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-modules-commonjs@^7.18.6", "@babel/plugin-transform-modules-commonjs@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz#e71ba1d0d69e049a22bf90b3867e263823d3f1b9" - integrity sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw== - dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-simple-access" "^7.22.5" - -"@babel/plugin-transform-modules-systemjs@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz#2b9625a3d4e445babac9788daec39094e6b11e3e" - integrity sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA== - dependencies: - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-validator-identifier" "^7.22.20" - -"@babel/plugin-transform-modules-umd@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz#69220c66653a19cf2c0872b9c762b9a48b8bebef" - integrity sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg== - dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" - integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-new-target@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz#29c59988fa3d0157de1c871a28cd83096363cc34" - integrity sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-nullish-coalescing-operator@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz#0cd494bb97cb07d428bd651632cb9d4140513988" - integrity sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - -"@babel/plugin-transform-numeric-separator@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.1.tgz#5bc019ce5b3435c1cadf37215e55e433d674d4e8" - integrity sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-transform-object-rest-spread@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.1.tgz#5a3ce73caf0e7871a02e1c31e8b473093af241ff" - integrity sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA== - dependencies: - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.24.1" - -"@babel/plugin-transform-object-super@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz#e71d6ab13483cca89ed95a474f542bbfc20a0520" - integrity sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-replace-supers" "^7.24.1" - -"@babel/plugin-transform-optional-catch-binding@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.1.tgz#92a3d0efe847ba722f1a4508669b23134669e2da" - integrity sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - -"@babel/plugin-transform-optional-chaining@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.1.tgz#26e588acbedce1ab3519ac40cc748e380c5291e6" - integrity sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-transform-parameters@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.1.tgz#983c15d114da190506c75b616ceb0f817afcc510" - integrity sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-private-methods@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz#a0faa1ae87eff077e1e47a5ec81c3aef383dc15a" - integrity sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.24.1" - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-private-property-in-object@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.1.tgz#756443d400274f8fb7896742962cc1b9f25c1f6a" - integrity sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.24.1" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - -"@babel/plugin-transform-property-literals@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz#d6a9aeab96f03749f4eebeb0b6ea8e90ec958825" - integrity sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-regenerator@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz#625b7545bae52363bdc1fbbdc7252b5046409c8c" - integrity sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - regenerator-transform "^0.15.2" - -"@babel/plugin-transform-reserved-words@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz#8de729f5ecbaaf5cf83b67de13bad38a21be57c1" - integrity sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-shorthand-properties@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz#ba9a09144cf55d35ec6b93a32253becad8ee5b55" - integrity sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-spread@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz#a1acf9152cbf690e4da0ba10790b3ac7d2b2b391" - integrity sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - -"@babel/plugin-transform-sticky-regex@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz#f03e672912c6e203ed8d6e0271d9c2113dc031b9" - integrity sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-template-literals@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz#15e2166873a30d8617e3e2ccadb86643d327aab7" - integrity sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-typeof-symbol@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.1.tgz#6831f78647080dec044f7e9f68003d99424f94c7" - integrity sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-typescript@^7.24.1": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.4.tgz#03e0492537a4b953e491f53f2bc88245574ebd15" - integrity sha512-79t3CQ8+oBGk/80SQ8MN3Bs3obf83zJ0YZjDmDaEZN8MqhMI760apl5z6a20kFeMXBwJX99VpKT8CKxEBp5H1g== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.24.4" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/plugin-syntax-typescript" "^7.24.1" - -"@babel/plugin-transform-unicode-escapes@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz#fb3fa16676549ac7c7449db9b342614985c2a3a4" - integrity sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-unicode-property-regex@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.1.tgz#56704fd4d99da81e5e9f0c0c93cabd91dbc4889e" - integrity sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-unicode-regex@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz#57c3c191d68f998ac46b708380c1ce4d13536385" - integrity sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-unicode-sets-regex@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.1.tgz#c1ea175b02afcffc9cf57a9c4658326625165b7f" - integrity sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/preset-env@^7.20.2": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.24.4.tgz#46dbbcd608771373b88f956ffb67d471dce0d23b" - integrity sha512-7Kl6cSmYkak0FK/FXjSEnLJ1N9T/WA2RkMhu17gZ/dsxKJUuTYNIylahPTzqpLyJN4WhDif8X0XK1R8Wsguo/A== - dependencies: - "@babel/compat-data" "^7.24.4" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-validator-option" "^7.23.5" - "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.24.4" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.24.1" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.24.1" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.24.1" - "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.24.1" - "@babel/plugin-syntax-import-attributes" "^7.24.1" - "@babel/plugin-syntax-import-meta" "^7.10.4" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.24.1" - "@babel/plugin-transform-async-generator-functions" "^7.24.3" - "@babel/plugin-transform-async-to-generator" "^7.24.1" - "@babel/plugin-transform-block-scoped-functions" "^7.24.1" - "@babel/plugin-transform-block-scoping" "^7.24.4" - "@babel/plugin-transform-class-properties" "^7.24.1" - "@babel/plugin-transform-class-static-block" "^7.24.4" - "@babel/plugin-transform-classes" "^7.24.1" - "@babel/plugin-transform-computed-properties" "^7.24.1" - "@babel/plugin-transform-destructuring" "^7.24.1" - "@babel/plugin-transform-dotall-regex" "^7.24.1" - "@babel/plugin-transform-duplicate-keys" "^7.24.1" - "@babel/plugin-transform-dynamic-import" "^7.24.1" - "@babel/plugin-transform-exponentiation-operator" "^7.24.1" - "@babel/plugin-transform-export-namespace-from" "^7.24.1" - "@babel/plugin-transform-for-of" "^7.24.1" - "@babel/plugin-transform-function-name" "^7.24.1" - "@babel/plugin-transform-json-strings" "^7.24.1" - "@babel/plugin-transform-literals" "^7.24.1" - "@babel/plugin-transform-logical-assignment-operators" "^7.24.1" - "@babel/plugin-transform-member-expression-literals" "^7.24.1" - "@babel/plugin-transform-modules-amd" "^7.24.1" - "@babel/plugin-transform-modules-commonjs" "^7.24.1" - "@babel/plugin-transform-modules-systemjs" "^7.24.1" - "@babel/plugin-transform-modules-umd" "^7.24.1" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" - "@babel/plugin-transform-new-target" "^7.24.1" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.24.1" - "@babel/plugin-transform-numeric-separator" "^7.24.1" - "@babel/plugin-transform-object-rest-spread" "^7.24.1" - "@babel/plugin-transform-object-super" "^7.24.1" - "@babel/plugin-transform-optional-catch-binding" "^7.24.1" - "@babel/plugin-transform-optional-chaining" "^7.24.1" - "@babel/plugin-transform-parameters" "^7.24.1" - "@babel/plugin-transform-private-methods" "^7.24.1" - "@babel/plugin-transform-private-property-in-object" "^7.24.1" - "@babel/plugin-transform-property-literals" "^7.24.1" - "@babel/plugin-transform-regenerator" "^7.24.1" - "@babel/plugin-transform-reserved-words" "^7.24.1" - "@babel/plugin-transform-shorthand-properties" "^7.24.1" - "@babel/plugin-transform-spread" "^7.24.1" - "@babel/plugin-transform-sticky-regex" "^7.24.1" - "@babel/plugin-transform-template-literals" "^7.24.1" - "@babel/plugin-transform-typeof-symbol" "^7.24.1" - "@babel/plugin-transform-unicode-escapes" "^7.24.1" - "@babel/plugin-transform-unicode-property-regex" "^7.24.1" - "@babel/plugin-transform-unicode-regex" "^7.24.1" - "@babel/plugin-transform-unicode-sets-regex" "^7.24.1" - "@babel/preset-modules" "0.1.6-no-external-plugins" - babel-plugin-polyfill-corejs2 "^0.4.10" - babel-plugin-polyfill-corejs3 "^0.10.4" - babel-plugin-polyfill-regenerator "^0.6.1" - core-js-compat "^3.31.0" - semver "^6.3.1" - -"@babel/preset-modules@0.1.6-no-external-plugins": - version "0.1.6-no-external-plugins" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" - integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/types" "^7.4.4" - esutils "^2.0.2" - -"@babel/preset-typescript@^7.18.6": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.24.1.tgz#89bdf13a3149a17b3b2a2c9c62547f06db8845ec" - integrity sha512-1DBaMmRDpuYQBPWD8Pf/WEwCrtgRHxsZnP4mIy9G/X+hFfbI47Q2G4t1Paakld84+qsk2fSsUPMKg71jkoOOaQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-validator-option" "^7.23.5" - "@babel/plugin-syntax-jsx" "^7.24.1" - "@babel/plugin-transform-modules-commonjs" "^7.24.1" - "@babel/plugin-transform-typescript" "^7.24.1" - -"@babel/regjsgen@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" - integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== - -"@babel/runtime@^7.11.2", "@babel/runtime@^7.21.0", "@babel/runtime@^7.8.4": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.4.tgz#de795accd698007a66ba44add6cc86542aff1edd" - integrity sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/template@^7.22.15", "@babel/template@^7.24.0", "@babel/template@^7.3.3": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.0.tgz#c6a524aa93a4a05d66aaf31654258fae69d87d50" - integrity sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA== - dependencies: - "@babel/code-frame" "^7.23.5" - "@babel/parser" "^7.24.0" - "@babel/types" "^7.24.0" - -"@babel/traverse@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.1.tgz#d65c36ac9dd17282175d1e4a3c49d5b7988f530c" - integrity sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ== - dependencies: - "@babel/code-frame" "^7.24.1" - "@babel/generator" "^7.24.1" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.24.1" - "@babel/types" "^7.24.0" - debug "^4.3.1" - globals "^11.1.0" - -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.24.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.0.tgz#3b951f435a92e7333eba05b7566fd297960ea1bf" - integrity sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w== - dependencies: - "@babel/helper-string-parser" "^7.23.4" - "@babel/helper-validator-identifier" "^7.22.20" - to-fast-properties "^2.0.0" - -"@bcoe/v8-coverage@^0.2.3": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" - integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== - -"@bufbuild/protobuf@^1.4.2": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@bufbuild/protobuf/-/protobuf-1.9.0.tgz#fffac3183059a41ceef5311e07e3724d426a95c4" - integrity sha512-W7gp8Q/v1NlCZLsv8pQ3Y0uCu/SHgXOVFK+eUluUKWXmsb6VHkpNx0apdOWWcDbB9sJoKeP8uPrjmehJz6xETQ== - -"@confio/ics23@^0.6.8": - version "0.6.8" - resolved "https://registry.yarnpkg.com/@confio/ics23/-/ics23-0.6.8.tgz#2a6b4f1f2b7b20a35d9a0745bb5a446e72930b3d" - integrity sha512-wB6uo+3A50m0sW/EWcU64xpV/8wShZ6bMTa7pF8eYsTrSkQA7oLUIJcs/wb8g4y2Oyq701BaGiO6n/ak5WXO1w== - dependencies: - "@noble/hashes" "^1.0.0" - protobufjs "^6.8.8" - -"@cosmjs/amino@0.28.13", "@cosmjs/amino@^0.28.3": - version "0.28.13" - resolved "https://registry.yarnpkg.com/@cosmjs/amino/-/amino-0.28.13.tgz#b51417a23c1ff8ef8b85a6862eba8492c6c44f38" - integrity sha512-IHnH2zGwaY69qT4mVAavr/pfzx6YE+ud1NHJbvVePlbGiz68CXTi5LHR+K0lrKB5mQ7E+ZErWz2mw5U/x+V1wQ== - dependencies: - "@cosmjs/crypto" "0.28.13" - "@cosmjs/encoding" "0.28.13" - "@cosmjs/math" "0.28.13" - "@cosmjs/utils" "0.28.13" - -"@cosmjs/cli@^0.28.3": - version "0.28.13" - resolved "https://registry.yarnpkg.com/@cosmjs/cli/-/cli-0.28.13.tgz#501cab1454353b6e90c0d4928a15adc3a9ca8ddb" - integrity sha512-6mbtKmaamKYgaXblSyLCsyEUJTa0GpZLt+ODfwdEUpEdx/Ebwqt09yuCmk0kOQ/TqmruX8aN/ty1py3Opxa/FQ== - dependencies: - "@cosmjs/amino" "0.28.13" - "@cosmjs/cosmwasm-stargate" "0.28.13" - "@cosmjs/crypto" "0.28.13" - "@cosmjs/encoding" "0.28.13" - "@cosmjs/faucet-client" "0.28.13" - "@cosmjs/math" "0.28.13" - "@cosmjs/proto-signing" "0.28.13" - "@cosmjs/stargate" "0.28.13" - "@cosmjs/tendermint-rpc" "0.28.13" - "@cosmjs/utils" "0.28.13" - axios "^0.21.2" - babylon "^6.18.0" - chalk "^4" - cosmjs-types "^0.4.0" - diff "^4" - recast "^0.20" - ts-node "^8" - typescript "~4.4" - yargs "^15.3.1" - -"@cosmjs/cosmwasm-stargate@0.28.13", "@cosmjs/cosmwasm-stargate@^0.28.3": - version "0.28.13" - resolved "https://registry.yarnpkg.com/@cosmjs/cosmwasm-stargate/-/cosmwasm-stargate-0.28.13.tgz#bea77bc999aaafdb677f446465f648cd000c5b4a" - integrity sha512-dVZNOiRd8btQreRUabncGhVXGCS2wToXqxi9l3KEHwCJQ2RWTshuqV+EZAdCaYHE5W6823s2Ol2W/ukA9AXJPw== - dependencies: - "@cosmjs/amino" "0.28.13" - "@cosmjs/crypto" "0.28.13" - "@cosmjs/encoding" "0.28.13" - "@cosmjs/math" "0.28.13" - "@cosmjs/proto-signing" "0.28.13" - "@cosmjs/stargate" "0.28.13" - "@cosmjs/tendermint-rpc" "0.28.13" - "@cosmjs/utils" "0.28.13" - cosmjs-types "^0.4.0" - long "^4.0.0" - pako "^2.0.2" - -"@cosmjs/crypto@0.28.13", "@cosmjs/crypto@^0.28.3": - version "0.28.13" - resolved "https://registry.yarnpkg.com/@cosmjs/crypto/-/crypto-0.28.13.tgz#541b6a36f616b2da5a568ead46d4e83841ceb412" - integrity sha512-ynKfM0q/tMBQMHJby6ad8lR3gkgBKaelQhIsCZTjClsnuC7oYT9y3ThSZCUWr7Pa9h0J8ahU2YV2oFWFVWJQzQ== - dependencies: - "@cosmjs/encoding" "0.28.13" - "@cosmjs/math" "0.28.13" - "@cosmjs/utils" "0.28.13" - "@noble/hashes" "^1" - bn.js "^5.2.0" - elliptic "^6.5.3" - libsodium-wrappers "^0.7.6" - -"@cosmjs/encoding@0.28.13", "@cosmjs/encoding@^0.28.3": - version "0.28.13" - resolved "https://registry.yarnpkg.com/@cosmjs/encoding/-/encoding-0.28.13.tgz#7994e8e2c435beaf0690296ffb0f7f3eaec8150b" - integrity sha512-jtXbAYtV77rLHxoIrjGFsvgGjeTKttuHRv6cvuy3toCZzY7JzTclKH5O2g36IIE4lXwD9xwuhGJ2aa6A3dhNkA== - dependencies: - base64-js "^1.3.0" - bech32 "^1.1.4" - readonly-date "^1.0.0" - -"@cosmjs/faucet-client@0.28.13", "@cosmjs/faucet-client@^0.28.3": - version "0.28.13" - resolved "https://registry.yarnpkg.com/@cosmjs/faucet-client/-/faucet-client-0.28.13.tgz#0de75edbb997c852a62003f07c619899b3403a68" - integrity sha512-M6f0Wbw3hvdfYbVpfGDXwjbRAcCgMRm5slWK6cU8BpotckLvBb0xoBvrhklG/ooz6ZTZfAc2e/EJ8GVhksdvpA== - dependencies: - axios "^0.21.2" - -"@cosmjs/json-rpc@0.28.13": - version "0.28.13" - resolved "https://registry.yarnpkg.com/@cosmjs/json-rpc/-/json-rpc-0.28.13.tgz#ff3f0c4a2f363b1a2c6779f8624a897e217fe297" - integrity sha512-fInSvg7x9P6p+GWqet+TMhrMTM3OWWdLJOGS5w2ryubMjgpR1rLiAx77MdTNkArW+/6sUwku0sN4veM4ENQu6A== - dependencies: - "@cosmjs/stream" "0.28.13" - xstream "^11.14.0" - -"@cosmjs/ledger-amino@^0.28.3": - version "0.28.13" - resolved "https://registry.yarnpkg.com/@cosmjs/ledger-amino/-/ledger-amino-0.28.13.tgz#b14cbcc72f600c7dd806def4c9e71fc35fce5eb0" - integrity sha512-KSwYjIFu/KXarvxxEyq3lpcJl5VvV0gAbY+tebeOvuCGHy9Px7CDOLOEHsR3ykJjYWh0hGrYwYmVk9zVHd474A== - dependencies: - "@cosmjs/amino" "0.28.13" - "@cosmjs/crypto" "0.28.13" - "@cosmjs/encoding" "0.28.13" - "@cosmjs/math" "0.28.13" - "@cosmjs/utils" "0.28.13" - ledger-cosmos-js "^2.1.8" - semver "^7.3.2" - -"@cosmjs/math@0.28.13", "@cosmjs/math@^0.28.3": - version "0.28.13" - resolved "https://registry.yarnpkg.com/@cosmjs/math/-/math-0.28.13.tgz#50c05bc67007a04216f7f5e0c93f57270f8cc077" - integrity sha512-PDpL8W/kbyeWi0mQ2OruyqE8ZUAdxPs1xCbDX3WXJwy2oU+X2UTbkuweJHVpS9CIqmZulBoWQAmlf6t6zr1N/g== - dependencies: - bn.js "^5.2.0" - -"@cosmjs/proto-signing@0.28.13", "@cosmjs/proto-signing@^0.28.3": - version "0.28.13" - resolved "https://registry.yarnpkg.com/@cosmjs/proto-signing/-/proto-signing-0.28.13.tgz#95ac12f0da0f0814f348f5ae996c3e96d015df61" - integrity sha512-nSl/2ZLsUJYz3Ad0RY3ihZUgRHIow2OnYqKsESMu+3RA/jTi9bDYhiBu8mNMHI0xrEJry918B2CyI56pOUHdPQ== - dependencies: - "@cosmjs/amino" "0.28.13" - "@cosmjs/crypto" "0.28.13" - "@cosmjs/encoding" "0.28.13" - "@cosmjs/math" "0.28.13" - "@cosmjs/utils" "0.28.13" - cosmjs-types "^0.4.0" - long "^4.0.0" - -"@cosmjs/socket@0.28.13": - version "0.28.13" - resolved "https://registry.yarnpkg.com/@cosmjs/socket/-/socket-0.28.13.tgz#d8443ad6e91d080fc6b80a7e9cf297a56b1f6833" - integrity sha512-lavwGxQ5VdeltyhpFtwCRVfxeWjH5D5mmN7jgx9nuCf3XSFbTcOYxrk2pQ4usenu1Q1KZdL4Yl5RCNrJuHD9Ug== - dependencies: - "@cosmjs/stream" "0.28.13" - isomorphic-ws "^4.0.1" - ws "^7" - xstream "^11.14.0" - -"@cosmjs/stargate@0.28.13", "@cosmjs/stargate@^0.28.3": - version "0.28.13" - resolved "https://registry.yarnpkg.com/@cosmjs/stargate/-/stargate-0.28.13.tgz#a73d837a46ee8944e6eafe162f2ff6943c14350e" - integrity sha512-dVBMazDz8/eActHsRcZjDHHptOBMqvibj5CFgEtZBp22gP6ASzoAUXTlkSVk5FBf4sfuUHoff6st134/+PGMAg== - dependencies: - "@confio/ics23" "^0.6.8" - "@cosmjs/amino" "0.28.13" - "@cosmjs/encoding" "0.28.13" - "@cosmjs/math" "0.28.13" - "@cosmjs/proto-signing" "0.28.13" - "@cosmjs/stream" "0.28.13" - "@cosmjs/tendermint-rpc" "0.28.13" - "@cosmjs/utils" "0.28.13" - cosmjs-types "^0.4.0" - long "^4.0.0" - protobufjs "~6.11.3" - xstream "^11.14.0" - -"@cosmjs/stream@0.28.13": - version "0.28.13" - resolved "https://registry.yarnpkg.com/@cosmjs/stream/-/stream-0.28.13.tgz#1e79d1116fda1e63e5ecddbd9d803d403942b1fa" - integrity sha512-AnjtfwT8NwPPkd3lhZhjOlOzT0Kn9bgEu2IPOZjQ1nmG2bplsr6TJmnwn0dJxHT7UGtex17h6whKB5N4wU37Wg== - dependencies: - xstream "^11.14.0" - -"@cosmjs/tendermint-rpc@0.28.13": - version "0.28.13" - resolved "https://registry.yarnpkg.com/@cosmjs/tendermint-rpc/-/tendermint-rpc-0.28.13.tgz#0bf587ae66fa3f88319edbd258492d28e73f9f29" - integrity sha512-GB+ZmfuJIGQm0hsRtLYjeR3lOxF7Z6XyCBR0cX5AAYOZzSEBJjevPgUHD6tLn8zIhvzxaW3/VKnMB+WmlxdH4w== - dependencies: - "@cosmjs/crypto" "0.28.13" - "@cosmjs/encoding" "0.28.13" - "@cosmjs/json-rpc" "0.28.13" - "@cosmjs/math" "0.28.13" - "@cosmjs/socket" "0.28.13" - "@cosmjs/stream" "0.28.13" - "@cosmjs/utils" "0.28.13" - axios "^0.21.2" - readonly-date "^1.0.0" - xstream "^11.14.0" - -"@cosmjs/utils@0.28.13", "@cosmjs/utils@^0.28.3": - version "0.28.13" - resolved "https://registry.yarnpkg.com/@cosmjs/utils/-/utils-0.28.13.tgz#2fd2844ec832d7833811e2ae1691305d09791a08" - integrity sha512-dVeMBiyg+46x7XBZEfJK8yTihphbCFpjVYmLJVqmTsHfJwymQ65cpyW/C+V/LgWARGK8hWQ/aX9HM5Ao8QmMSg== - -"@cosmos-client/core@^0.47.4": - version "0.47.4" - resolved "https://registry.yarnpkg.com/@cosmos-client/core/-/core-0.47.4.tgz#ba95e70d6833581bb1611a26474a4b14a3273fd9" - integrity sha512-20+w5nTOlwWjhRcTB3feay2H6ZV/kXl9eovXCmUMxuNHgrsg2K5HNgMBAScRe7d9EoNBTpIZia57qTnRVeo9qQ== - dependencies: - axios "^0.23.0" - bech32 "^1.1.4" - bip32 "^2.0.6" - bip39 "^3.0.4" - process "^0.11.10" - protobufjs "^6.11.3" - rxjs "^7.4.0" - secp256k1 "^4.0.2" - tweetnacl "^1.0.3" - -"@cosmos-client/cosmwasm@^0.40.3": - version "0.40.3" - resolved "https://registry.yarnpkg.com/@cosmos-client/cosmwasm/-/cosmwasm-0.40.3.tgz#fd3679022690567915113738f036900348e98021" - integrity sha512-iInWF5wT0zcXZ5AC2DtnY7abwxVpug3CQPDK6+sW32ZlesBZkRVdtZ3ckKXhzaOy1INbzKSY/oah9KZPIHpQvg== - dependencies: - axios "^0.23.0" - bech32 "^1.1.4" - bip32 "^2.0.6" - bip39 "^3.0.4" - cosmwasm "^1.1.1" - process "^0.11.10" - protobufjs "^6.11.2" - rxjs "^7.4.0" - tiny-secp256k1 "^2.0.1" - tweetnacl "^1.0.3" - -"@cosmos-client/ibc@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@cosmos-client/ibc/-/ibc-1.2.1.tgz#e6505fbdefc3f354f25791260116efdc89e391b4" - integrity sha512-+BpOitHL6K89V6VGDumcSSoUuY4g0lJHhBqhSMdAB8SIS3JLv0ZyPtTveAPV6gvQW4fqdlyp2h2CnFCjJrPC3Q== - dependencies: - axios "^0.23.0" - bech32 "^1.1.4" - bip32 "^2.0.6" - bip39 "^3.0.4" - protobufjs "^6.11.2" - rxjs "^7.4.0" - tiny-secp256k1 "^2.0.1" - tweetnacl "^1.0.3" - -"@eslint-community/eslint-utils@^4.2.0": - version "4.4.0" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" - integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== - dependencies: - eslint-visitor-keys "^3.3.0" - -"@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.6.1": - version "4.10.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" - integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== - -"@eslint/eslintrc@^2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" - integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.6.0" - globals "^13.19.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" - -"@eslint/js@8.57.0": - version "8.57.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" - integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== - -"@ethereumjs/rlp@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@ethereumjs/rlp/-/rlp-4.0.1.tgz#626fabfd9081baab3d0a3074b0c7ecaf674aaa41" - integrity sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw== - -"@ethereumjs/util@^8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/util/-/util-8.1.0.tgz#299df97fb6b034e0577ce9f94c7d9d1004409ed4" - integrity sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA== - dependencies: - "@ethereumjs/rlp" "^4.0.1" - ethereum-cryptography "^2.0.0" - micro-ftch "^0.3.1" - -"@humanwhocodes/config-array@^0.11.14": - version "0.11.14" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" - integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== - dependencies: - "@humanwhocodes/object-schema" "^2.0.2" - debug "^4.3.1" - minimatch "^3.0.5" - -"@humanwhocodes/module-importer@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" - integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== - -"@humanwhocodes/object-schema@^2.0.2": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" - integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== - -"@istanbuljs/load-nyc-config@^1.0.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" - integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== - dependencies: - camelcase "^5.3.1" - find-up "^4.1.0" - get-package-type "^0.1.0" - js-yaml "^3.13.1" - resolve-from "^5.0.0" - -"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" - integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== - -"@jest/console@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" - integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - slash "^3.0.0" - -"@jest/core@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" - integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== - dependencies: - "@jest/console" "^29.7.0" - "@jest/reporters" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - ci-info "^3.2.0" - exit "^0.1.2" - graceful-fs "^4.2.9" - jest-changed-files "^29.7.0" - jest-config "^29.7.0" - jest-haste-map "^29.7.0" - jest-message-util "^29.7.0" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-resolve-dependencies "^29.7.0" - jest-runner "^29.7.0" - jest-runtime "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - jest-watcher "^29.7.0" - micromatch "^4.0.4" - pretty-format "^29.7.0" - slash "^3.0.0" - strip-ansi "^6.0.0" - -"@jest/environment@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" - integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== - dependencies: - "@jest/fake-timers" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - jest-mock "^29.7.0" - -"@jest/expect-utils@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" - integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== - dependencies: - jest-get-type "^29.6.3" - -"@jest/expect@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" - integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== - dependencies: - expect "^29.7.0" - jest-snapshot "^29.7.0" - -"@jest/fake-timers@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" - integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== - dependencies: - "@jest/types" "^29.6.3" - "@sinonjs/fake-timers" "^10.0.2" - "@types/node" "*" - jest-message-util "^29.7.0" - jest-mock "^29.7.0" - jest-util "^29.7.0" - -"@jest/globals@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" - integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/expect" "^29.7.0" - "@jest/types" "^29.6.3" - jest-mock "^29.7.0" - -"@jest/reporters@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" - integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== - dependencies: - "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@jridgewell/trace-mapping" "^0.3.18" - "@types/node" "*" - chalk "^4.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.3" - graceful-fs "^4.2.9" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^6.0.0" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.1.3" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - jest-worker "^29.7.0" - slash "^3.0.0" - string-length "^4.0.1" - strip-ansi "^6.0.0" - v8-to-istanbul "^9.0.1" - -"@jest/schemas@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" - integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== - dependencies: - "@sinclair/typebox" "^0.27.8" - -"@jest/source-map@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" - integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== - dependencies: - "@jridgewell/trace-mapping" "^0.3.18" - callsites "^3.0.0" - graceful-fs "^4.2.9" - -"@jest/test-result@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" - integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== - dependencies: - "@jest/console" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" - -"@jest/test-sequencer@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" - integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== - dependencies: - "@jest/test-result" "^29.7.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - slash "^3.0.0" - -"@jest/transform@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" - integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== - dependencies: - "@babel/core" "^7.11.6" - "@jest/types" "^29.6.3" - "@jridgewell/trace-mapping" "^0.3.18" - babel-plugin-istanbul "^6.1.1" - chalk "^4.0.0" - convert-source-map "^2.0.0" - fast-json-stable-stringify "^2.1.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-regex-util "^29.6.3" - jest-util "^29.7.0" - micromatch "^4.0.4" - pirates "^4.0.4" - slash "^3.0.0" - write-file-atomic "^4.0.2" - -"@jest/types@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" - integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== - dependencies: - "@jest/schemas" "^29.6.3" - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^17.0.8" - chalk "^4.0.0" - -"@jridgewell/gen-mapping@^0.3.5": - version "0.3.5" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" - integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== - dependencies: - "@jridgewell/set-array" "^1.2.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.24" - -"@jridgewell/resolve-uri@^3.1.0": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" - integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== - -"@jridgewell/set-array@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" - integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": - version "0.3.25" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" - integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@ledgerhq/devices@^5.51.1": - version "5.51.1" - resolved "https://registry.yarnpkg.com/@ledgerhq/devices/-/devices-5.51.1.tgz#d741a4a5d8f17c2f9d282fd27147e6fe1999edb7" - integrity sha512-4w+P0VkbjzEXC7kv8T1GJ/9AVaP9I6uasMZ/JcdwZBS3qwvKo5A5z9uGhP5c7TvItzcmPb44b5Mw2kT+WjUuAA== - dependencies: - "@ledgerhq/errors" "^5.50.0" - "@ledgerhq/logs" "^5.50.0" - rxjs "6" - semver "^7.3.5" - -"@ledgerhq/errors@^5.50.0": - version "5.50.0" - resolved "https://registry.yarnpkg.com/@ledgerhq/errors/-/errors-5.50.0.tgz#e3a6834cb8c19346efca214c1af84ed28e69dad9" - integrity sha512-gu6aJ/BHuRlpU7kgVpy2vcYk6atjB4iauP2ymF7Gk0ez0Y/6VSMVSJvubeEQN+IV60+OBK0JgeIZG7OiHaw8ow== - -"@ledgerhq/hw-transport@^5.25.0": - version "5.51.1" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport/-/hw-transport-5.51.1.tgz#8dd14a8e58cbee4df0c29eaeef983a79f5f22578" - integrity sha512-6wDYdbWrw9VwHIcoDnqWBaDFyviyjZWv6H9vz9Vyhe4Qd7TIFmbTl/eWs6hZvtZBza9K8y7zD8ChHwRI4s9tSw== - dependencies: - "@ledgerhq/devices" "^5.51.1" - "@ledgerhq/errors" "^5.50.0" - events "^3.3.0" - -"@ledgerhq/logs@^5.50.0": - version "5.50.0" - resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-5.50.0.tgz#29c6419e8379d496ab6d0426eadf3c4d100cd186" - integrity sha512-swKHYCOZUGyVt4ge0u8a7AwNcA//h4nx5wIi0sruGye1IJ5Cva0GyK9L2/WdX+kWVTKp92ZiEo1df31lrWGPgA== - -"@neutron-org/neutronjsplus@neutron-org/neutronjsplus#fix/pool_metadata_proto": - version "0.3.4" - resolved "https://codeload.github.com/neutron-org/neutronjsplus/tar.gz/1fdefc54ec7101b1411fd0ba07a2f9f28c9b11d2" - dependencies: - "@bufbuild/protobuf" "^1.4.2" - "@cosmos-client/core" "^0.47.4" - "@cosmos-client/cosmwasm" "^0.40.3" - "@cosmos-client/ibc" "^1.2.1" - axios "^0.27.2" - long "^5.2.1" - merkletreejs "^0.3.9" - -"@noble/curves@1.3.0", "@noble/curves@~1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.3.0.tgz#01be46da4fd195822dab821e72f71bf4aeec635e" - integrity sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA== - dependencies: - "@noble/hashes" "1.3.3" - -"@noble/hashes@1.3.3", "@noble/hashes@~1.3.2": - version "1.3.3" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.3.tgz#39908da56a4adc270147bb07968bf3b16cfe1699" - integrity sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA== - -"@noble/hashes@^1", "@noble/hashes@^1.0.0", "@noble/hashes@^1.2.0", "@noble/hashes@^1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426" - integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" - integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ== - -"@protobufjs/base64@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" - integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== - -"@protobufjs/codegen@^2.0.4": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" - integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== - -"@protobufjs/eventemitter@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" - integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q== - -"@protobufjs/fetch@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" - integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ== - dependencies: - "@protobufjs/aspromise" "^1.1.1" - "@protobufjs/inquire" "^1.1.0" - -"@protobufjs/float@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" - integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ== - -"@protobufjs/inquire@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" - integrity sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q== - -"@protobufjs/path@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" - integrity sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA== - -"@protobufjs/pool@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" - integrity sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw== - -"@protobufjs/utf8@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" - integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== - -"@scure/base@~1.1.4": - version "1.1.6" - resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.6.tgz#8ce5d304b436e4c84f896e0550c83e4d88cb917d" - integrity sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g== - -"@scure/bip32@1.3.3": - version "1.3.3" - resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.3.tgz#a9624991dc8767087c57999a5d79488f48eae6c8" - integrity sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ== - dependencies: - "@noble/curves" "~1.3.0" - "@noble/hashes" "~1.3.2" - "@scure/base" "~1.1.4" - -"@scure/bip39@1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.2.tgz#f3426813f4ced11a47489cbcf7294aa963966527" - integrity sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA== - dependencies: - "@noble/hashes" "~1.3.2" - "@scure/base" "~1.1.4" - -"@sinclair/typebox@^0.27.8": - version "0.27.8" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" - integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== - -"@sinonjs/commons@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.1.tgz#1029357e44ca901a615585f6d27738dbc89084cd" - integrity sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ== - dependencies: - type-detect "4.0.8" - -"@sinonjs/fake-timers@^10.0.2": - version "10.3.0" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" - integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== - dependencies: - "@sinonjs/commons" "^3.0.0" - -"@types/babel__core@^7.1.14": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" - integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== - dependencies: - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" - -"@types/babel__generator@*": - version "7.6.8" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" - integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== - dependencies: - "@babel/types" "^7.0.0" - -"@types/babel__template@*": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" - integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.5.tgz#7b7502be0aa80cc4ef22978846b983edaafcd4dd" - integrity sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ== - dependencies: - "@babel/types" "^7.20.7" - -"@types/body-parser@*": - version "1.19.5" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4" - integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== - dependencies: - "@types/connect" "*" - "@types/node" "*" - -"@types/connect@*": - version "3.4.38" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" - integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== - dependencies: - "@types/node" "*" - -"@types/express-serve-static-core@^4.17.33": - version "4.19.0" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.0.tgz#3ae8ab3767d98d0b682cda063c3339e1e86ccfaa" - integrity sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ== - dependencies: - "@types/node" "*" - "@types/qs" "*" - "@types/range-parser" "*" - "@types/send" "*" - -"@types/express@^4.17.9": - version "4.17.21" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.21.tgz#c26d4a151e60efe0084b23dc3369ebc631ed192d" - integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== - dependencies: - "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.33" - "@types/qs" "*" - "@types/serve-static" "*" - -"@types/graceful-fs@^4.1.3": - version "4.1.9" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" - integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== - dependencies: - "@types/node" "*" - -"@types/http-errors@*": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f" - integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" - integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== - -"@types/istanbul-lib-report@*": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" - integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-reports@^3.0.0": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" - integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== - dependencies: - "@types/istanbul-lib-report" "*" - -"@types/jest@^29.5": - version "29.5.12" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.12.tgz#7f7dc6eb4cf246d2474ed78744b05d06ce025544" - integrity sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw== - dependencies: - expect "^29.0.0" - pretty-format "^29.0.0" - -"@types/json-schema@^7.0.9": - version "7.0.15" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" - integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== - -"@types/lodash@^4.14.182": - version "4.17.0" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.0.tgz#d774355e41f372d5350a4d0714abb48194a489c3" - integrity sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA== - -"@types/long@^4.0.1": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a" - integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA== - -"@types/long@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@types/long/-/long-5.0.0.tgz#daaa7b7f74c919c946ff74889d5ca2afe363b2cd" - integrity sha512-eQs9RsucA/LNjnMoJvWG/nXa7Pot/RbBzilF/QRIU/xRl+0ApxrSUFsV5lmf01SvSlqMzJ7Zwxe440wmz2SJGA== - dependencies: - long "*" - -"@types/mime@^1": - version "1.3.5" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" - integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== - -"@types/node@*", "@types/node@>=13.7.0": - version "20.12.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.7.tgz#04080362fa3dd6c5822061aa3124f5c152cff384" - integrity sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg== - dependencies: - undici-types "~5.26.4" - -"@types/node@10.12.18": - version "10.12.18" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.18.tgz#1d3ca764718915584fcd9f6344621b7672665c67" - integrity sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ== - -"@types/qs@*": - version "6.9.15" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.15.tgz#adde8a060ec9c305a82de1babc1056e73bd64dce" - integrity sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg== - -"@types/range-parser@*": - version "1.2.7" - resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" - integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== - -"@types/semver@^7.3.12": - version "7.5.8" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" - integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== - -"@types/send@*": - version "0.17.4" - resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a" - integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== - dependencies: - "@types/mime" "^1" - "@types/node" "*" - -"@types/serve-static@*": - version "1.15.7" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.7.tgz#22174bbd74fb97fe303109738e9b5c2f3064f714" - integrity sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw== - dependencies: - "@types/http-errors" "*" - "@types/node" "*" - "@types/send" "*" - -"@types/stack-utils@^2.0.0": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" - integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== - -"@types/yargs-parser@*": - version "21.0.3" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" - integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== - -"@types/yargs@^17.0.8": - version "17.0.32" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.32.tgz#030774723a2f7faafebf645f4e5a48371dca6229" - integrity sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog== - dependencies: - "@types/yargs-parser" "*" - -"@typescript-eslint/eslint-plugin@^5.19.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz#aeef0328d172b9e37d9bab6dbc13b87ed88977db" - integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== - dependencies: - "@eslint-community/regexpp" "^4.4.0" - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/type-utils" "5.62.0" - "@typescript-eslint/utils" "5.62.0" - debug "^4.3.4" - graphemer "^1.4.0" - ignore "^5.2.0" - natural-compare-lite "^1.4.0" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/parser@^5.19.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.62.0.tgz#1b63d082d849a2fcae8a569248fbe2ee1b8a56c7" - integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== - dependencies: - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/typescript-estree" "5.62.0" - debug "^4.3.4" - -"@typescript-eslint/scope-manager@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" - integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== - dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" - -"@typescript-eslint/type-utils@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz#286f0389c41681376cdad96b309cedd17d70346a" - integrity sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew== - dependencies: - "@typescript-eslint/typescript-estree" "5.62.0" - "@typescript-eslint/utils" "5.62.0" - debug "^4.3.4" - tsutils "^3.21.0" - -"@typescript-eslint/types@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" - integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== - -"@typescript-eslint/typescript-estree@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" - integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== - dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/utils@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" - integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@types/json-schema" "^7.0.9" - "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/typescript-estree" "5.62.0" - eslint-scope "^5.1.1" - semver "^7.3.7" - -"@typescript-eslint/visitor-keys@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" - integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== - dependencies: - "@typescript-eslint/types" "5.62.0" - eslint-visitor-keys "^3.3.0" - -"@ungap/structured-clone@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" - integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== - -accepts@~1.3.8: - version "1.3.8" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - -acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn@^8.9.0: - version "8.11.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" - integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" - integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== - -ansi-styles@^6.0.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== - -anymatch@^3.0.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -ast-types@0.14.2: - version "0.14.2" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.14.2.tgz#600b882df8583e3cd4f2df5fa20fa83759d4bdfd" - integrity sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA== - dependencies: - tslib "^2.0.1" - -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -axios@^0.21.2: - version "0.21.4" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" - integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== - dependencies: - follow-redirects "^1.14.0" - -axios@^0.23.0: - version "0.23.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.23.0.tgz#b0fa5d0948a8d1d75e3d5635238b6c4625b05149" - integrity sha512-NmvAE4i0YAv5cKq8zlDoPd1VLKAqX5oLuZKs8xkJa4qi6RGn0uhCYFjWtHHC9EM/MwOwYWOs53W+V0aqEXq1sg== - dependencies: - follow-redirects "^1.14.4" - -axios@^0.27.2: - version "0.27.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972" - integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ== - dependencies: - follow-redirects "^1.14.9" - form-data "^4.0.0" - -babel-jest@^29.3.1, babel-jest@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" - integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== - dependencies: - "@jest/transform" "^29.7.0" - "@types/babel__core" "^7.1.14" - babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^29.6.3" - chalk "^4.0.0" - graceful-fs "^4.2.9" - slash "^3.0.0" - -babel-plugin-istanbul@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" - integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@istanbuljs/load-nyc-config" "^1.0.0" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^5.0.4" - test-exclude "^6.0.0" - -babel-plugin-jest-hoist@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" - integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== - dependencies: - "@babel/template" "^7.3.3" - "@babel/types" "^7.3.3" - "@types/babel__core" "^7.1.14" - "@types/babel__traverse" "^7.0.6" - -babel-plugin-polyfill-corejs2@^0.4.10: - version "0.4.11" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz#30320dfe3ffe1a336c15afdcdafd6fd615b25e33" - integrity sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q== - dependencies: - "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.6.2" - semver "^6.3.1" - -babel-plugin-polyfill-corejs3@^0.10.4: - version "0.10.4" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz#789ac82405ad664c20476d0233b485281deb9c77" - integrity sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.1" - core-js-compat "^3.36.1" - -babel-plugin-polyfill-regenerator@^0.6.1: - version "0.6.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz#addc47e240edd1da1058ebda03021f382bba785e" - integrity sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.2" - -babel-preset-current-node-syntax@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" - integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== - dependencies: - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-bigint" "^7.8.3" - "@babel/plugin-syntax-class-properties" "^7.8.3" - "@babel/plugin-syntax-import-meta" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.8.3" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-top-level-await" "^7.8.3" - -babel-preset-jest@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" - integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== - dependencies: - babel-plugin-jest-hoist "^29.6.3" - babel-preset-current-node-syntax "^1.0.0" - -babylon@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" - integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base-x@^3.0.2: - version "3.0.9" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" - integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== - dependencies: - safe-buffer "^5.0.1" - -base64-js@^1.3.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -bech32@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" - integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== - -bignumber.js@^9.0.1: - version "9.1.2" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" - integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== - -bindings@^1.3.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.0" - -bip32@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/bip32/-/bip32-2.0.6.tgz#6a81d9f98c4cd57d05150c60d8f9e75121635134" - integrity sha512-HpV5OMLLGTjSVblmrtYRfFFKuQB+GArM0+XP8HGWfJ5vxYBqo+DesvJwOdC2WJ3bCkZShGf0QIfoIpeomVzVdA== - dependencies: - "@types/node" "10.12.18" - bs58check "^2.1.1" - create-hash "^1.2.0" - create-hmac "^1.1.7" - tiny-secp256k1 "^1.1.3" - typeforce "^1.11.5" - wif "^2.0.6" - -bip39@^3.0.4: - version "3.1.0" - resolved "https://registry.yarnpkg.com/bip39/-/bip39-3.1.0.tgz#c55a418deaf48826a6ceb34ac55b3ee1577e18a3" - integrity sha512-c9kiwdk45Do5GL0vJMe7tS95VjCii65mYAH7DfWl3uW8AVzXKQVUm64i3hzVybBDMp9r7j9iNxR85+ul8MdN/A== - dependencies: - "@noble/hashes" "^1.2.0" - -bn.js@4.11.6: - version "4.11.6" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" - integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== - -bn.js@^4.11.8, bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - -bn.js@^5.2.0, bn.js@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" - integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== - -body-parser@1.20.2: - version "1.20.2" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" - integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== - dependencies: - bytes "3.1.2" - content-type "~1.0.5" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.11.0" - raw-body "2.5.2" - type-is "~1.6.18" - unpipe "1.0.0" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -brorand@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== - -browserslist@^4.22.2, browserslist@^4.23.0: - version "4.23.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" - integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== - dependencies: - caniuse-lite "^1.0.30001587" - electron-to-chromium "^1.4.668" - node-releases "^2.0.14" - update-browserslist-db "^1.0.13" - -bs58@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" - integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== - dependencies: - base-x "^3.0.2" - -bs58check@<3.0.0, bs58check@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" - integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== - dependencies: - bs58 "^4.0.0" - create-hash "^1.1.0" - safe-buffer "^5.1.2" - -bser@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" - integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== - dependencies: - node-int64 "^0.4.0" - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -buffer-reverse@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/buffer-reverse/-/buffer-reverse-1.0.1.tgz#49283c8efa6f901bc01fa3304d06027971ae2f60" - integrity sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg== - -builtin-modules@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - integrity sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ== - -bytes@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -call-bind@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" - integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - set-function-length "^1.2.1" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camelcase@^5.0.0, camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -camelcase@^6.2.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -caniuse-lite@^1.0.30001587: - version "1.0.30001612" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001612.tgz#d34248b4ec1f117b70b24ad9ee04c90e0b8a14ae" - integrity sha512-lFgnZ07UhaCcsSZgWW0K5j4e69dK1u/ltrL9lTUiFOwNHs12S3UMIEYgBV0Z6C6hRDev7iRnMzzYmKabYdXF9g== - -chalk@^2.3.0, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^4, chalk@^4.0.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -char-regex@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" - integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== - -ci-info@^3.2.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" - integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== - -cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -cjs-module-lexer@^1.0.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" - integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-truncate@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" - integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== - dependencies: - slice-ansi "^3.0.0" - string-width "^4.2.0" - -cli-truncate@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389" - integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== - dependencies: - slice-ansi "^5.0.0" - string-width "^5.0.0" - -cliui@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" - integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^6.2.0" - -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" - integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== - -collect-v8-coverage@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" - integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -colorette@^2.0.16: - version "2.0.20" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" - integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== - -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -commander@^10.0.0: - version "10.0.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" - integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== - -commander@^2.12.1: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commander@^9.3.0: - version "9.5.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" - integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -content-disposition@0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - -content-type@~1.0.4, content-type@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" - integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== - -convert-source-map@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" - integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== - -cookie@0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" - integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== - -core-js-compat@^3.31.0, core-js-compat@^3.36.1: - version "3.37.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.37.0.tgz#d9570e544163779bb4dff1031c7972f44918dc73" - integrity sha512-vYq4L+T8aS5UuFg4UwDhc7YNRWVeVZwltad9C/jV3R2LgVOpS9BDr7l/WL6BN0dbV3k1XejPTHqqEzJgsa0frA== - dependencies: - browserslist "^4.23.0" - -core-js@^3.23.5: - version "3.37.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.37.0.tgz#d8dde58e91d156b2547c19d8a4efd5c7f6c426bb" - integrity sha512-fu5vHevQ8ZG4og+LXug8ulUtVxjOcEYvifJr7L5Bfq9GOztVqsKd9/59hUk2ZSbCrS3BqUr3EpaYGIYzq7g3Ug== - -cosmjs-types@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/cosmjs-types/-/cosmjs-types-0.4.1.tgz#3b2a53ba60d33159dd075596ce8267cfa7027063" - integrity sha512-I7E/cHkIgoJzMNQdFF0YVqPlaTqrqKHrskuSTIqlEyxfB5Lf3WKCajSXVK2yHOfOFfSux/RxEdpMzw/eO4DIog== - dependencies: - long "^4.0.0" - protobufjs "~6.11.2" - -cosmwasm@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/cosmwasm/-/cosmwasm-1.1.1.tgz#02b22a269044c61714c85fa55e624b2f83f7c086" - integrity sha512-tjpjwnRIQ6VEcTVB0Pq8+F+Xp6jdnC3BcXmcDHCJHIc5Gg4Mm++AA+6fTfR0yuiPbEAk6wYkokfLtv12I0sPNQ== - dependencies: - "@cosmjs/amino" "^0.28.3" - "@cosmjs/cli" "^0.28.3" - "@cosmjs/cosmwasm-stargate" "^0.28.3" - "@cosmjs/crypto" "^0.28.3" - "@cosmjs/encoding" "^0.28.3" - "@cosmjs/faucet-client" "^0.28.3" - "@cosmjs/ledger-amino" "^0.28.3" - "@cosmjs/math" "^0.28.3" - "@cosmjs/proto-signing" "^0.28.3" - "@cosmjs/stargate" "^0.28.3" - "@cosmjs/utils" "^0.28.3" - -create-hash@^1.1.0, create-hash@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" - integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - -create-hmac@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -create-jest@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" - integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== - dependencies: - "@jest/types" "^29.6.3" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.9" - jest-config "^29.7.0" - jest-util "^29.7.0" - prompts "^2.0.1" - -create-require@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" - integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== - -cross-spawn@^7.0.2, cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crypto-js@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.2.0.tgz#4d931639ecdfd12ff80e8186dba6af2c2e856631" - integrity sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q== - -date-fns@^2.16.1: - version "2.30.0" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" - integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw== - dependencies: - "@babel/runtime" "^7.21.0" - -debug@2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== - -dedent@^1.0.0: - version "1.5.3" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.3.tgz#99aee19eb9bae55a67327717b6e848d0bf777e5a" - integrity sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ== - -deep-is@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - -deepmerge@^4.2.2: - version "4.3.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" - integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== - -define-data-property@^1.0.1, define-data-property@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" - integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - gopd "^1.0.1" - -define-properties@^1.1.3: - version "1.2.1" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" - integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== - dependencies: - define-data-property "^1.0.1" - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -depd@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -destroy@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -detect-newline@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" - integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== - -diff-sequences@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" - integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== - -diff@^4, diff@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - -electron-to-chromium@^1.4.668: - version "1.4.748" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.748.tgz#aa7d4f2f3eac3a6a863cd1779bd4682b4bb68ed5" - integrity sha512-VWqjOlPZn70UZ8FTKUOkUvBLeTQ0xpty66qV0yJcAGY2/CthI4xyW9aEozRVtuwv3Kpf5xTesmJUcPwuJmgP4A== - -elliptic@^6.4.0, elliptic@^6.5.3, elliptic@^6.5.4: - version "6.5.5" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.5.tgz#c715e09f78b6923977610d4c2346d6ce22e6dded" - integrity sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" - -emittery@^0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" - integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es-define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" - integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== - dependencies: - get-intrinsic "^1.2.4" - -es-errors@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" - integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== - -escalade@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" - integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -eslint-config-prettier@^8.5.0: - version "8.10.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz#3a06a662130807e2502fc3ff8b4143d8a0658e11" - integrity sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg== - -eslint-plugin-prettier@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" - integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== - dependencies: - prettier-linter-helpers "^1.0.0" - -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-scope@^7.2.2: - version "7.2.2" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" - integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: - version "3.4.3" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" - integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== - -eslint@^8.13.0: - version "8.57.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668" - integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.4" - "@eslint/js" "8.57.0" - "@humanwhocodes/config-array" "^0.11.14" - "@humanwhocodes/module-importer" "^1.0.1" - "@nodelib/fs.walk" "^1.2.8" - "@ungap/structured-clone" "^1.2.0" - ajv "^6.12.4" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - escape-string-regexp "^4.0.0" - eslint-scope "^7.2.2" - eslint-visitor-keys "^3.4.3" - espree "^9.6.1" - esquery "^1.4.2" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - find-up "^5.0.0" - glob-parent "^6.0.2" - globals "^13.19.0" - graphemer "^1.4.0" - ignore "^5.2.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - is-path-inside "^3.0.3" - js-yaml "^4.1.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.3" - strip-ansi "^6.0.1" - text-table "^0.2.0" - -espree@^9.6.0, espree@^9.6.1: - version "9.6.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" - integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== - dependencies: - acorn "^8.9.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.4.1" - -esprima@^4.0.0, esprima@~4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.4.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" - integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== - -ethereum-bloom-filters@^1.0.6: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.1.0.tgz#b3fc1eb789509ee30db0bf99a2988ccacb8d0397" - integrity sha512-J1gDRkLpuGNvWYzWslBQR9cDV4nd4kfvVTE/Wy4Kkm4yb3EYRSlyi0eB/inTsSTTVyA0+HyzHgbr95Fn/Z1fSw== - dependencies: - "@noble/hashes" "^1.4.0" - -ethereum-cryptography@^2.0.0, ethereum-cryptography@^2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.1.3.tgz#1352270ed3b339fe25af5ceeadcf1b9c8e30768a" - integrity sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA== - dependencies: - "@noble/curves" "1.3.0" - "@noble/hashes" "1.3.3" - "@scure/bip32" "1.3.3" - "@scure/bip39" "1.2.2" - -ethjs-unit@0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" - integrity sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw== - dependencies: - bn.js "4.11.6" - number-to-bn "1.7.0" - -events@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -execa@^5.0.0, execa@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== - -expect@^29.0.0, expect@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" - integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== - dependencies: - "@jest/expect-utils" "^29.7.0" - jest-get-type "^29.6.3" - jest-matcher-utils "^29.7.0" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - -express@^4.18.2: - version "4.19.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.19.2.tgz#e25437827a3aa7f2a827bc8171bbbb664a356465" - integrity sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.20.2" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.6.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "2.0.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.2.0" - fresh "0.5.2" - http-errors "2.0.0" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "2.4.1" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.7" - qs "6.11.0" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" - setprototypeof "1.2.0" - statuses "2.0.1" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-diff@^1.1.2: - version "1.3.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" - integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== - -fast-glob@^3.2.9: - version "3.3.2" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" - integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - -fastq@^1.6.0: - version "1.17.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" - integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== - dependencies: - reusify "^1.0.4" - -fb-watchman@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" - integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== - dependencies: - bser "2.1.1" - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -finalhandler@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" - integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "2.4.1" - parseurl "~1.3.3" - statuses "2.0.1" - unpipe "~1.0.0" - -find-up@^4.0.0, find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -flat-cache@^3.0.4: - version "3.2.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" - integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== - dependencies: - flatted "^3.2.9" - keyv "^4.5.3" - rimraf "^3.0.2" - -flatted@^3.2.9: - version "3.3.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" - integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== - -follow-redirects@^1.14.0, follow-redirects@^1.14.4, follow-redirects@^1.14.9: - version "1.15.6" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" - integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== - -form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@^2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -get-caller-file@^2.0.1, get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-intrinsic@^1.1.3, get-intrinsic@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" - integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== - dependencies: - es-errors "^1.3.0" - function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - -get-package-type@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" - integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== - -get-stream@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -glob-parent@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob@^7.1.1, glob@^7.1.3, glob@^7.1.4: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^13.19.0: - version "13.24.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" - integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== - dependencies: - type-fest "^0.20.2" - -globalthis@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" - integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== - dependencies: - define-properties "^1.1.3" - -globby@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -graceful-fs@^4.2.9: - version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -graphemer@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" - integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" - integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== - dependencies: - es-define-property "^1.0.0" - -has-proto@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" - integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== - -has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -hash-base@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" - integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== - dependencies: - inherits "^2.0.4" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -hasown@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" - integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== - dependencies: - function-bind "^1.1.2" - -hmac-drbg@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -html-escaper@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== - -http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -ignore@^5.2.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" - integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== - -import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-local@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" - integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - -is-core-module@^2.13.0: - version "2.13.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" - integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== - dependencies: - hasown "^2.0.0" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-fullwidth-code-point@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" - integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== - -is-generator-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" - integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-hex-prefixed@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" - integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-path-inside@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -isomorphic-ws@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" - integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== - -istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" - integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== - -istanbul-lib-instrument@^5.0.4: - version "5.2.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" - integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== - dependencies: - "@babel/core" "^7.12.3" - "@babel/parser" "^7.14.7" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.2.0" - semver "^6.3.0" - -istanbul-lib-instrument@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz#91655936cf7380e4e473383081e38478b69993b1" - integrity sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw== - dependencies: - "@babel/core" "^7.23.9" - "@babel/parser" "^7.23.9" - "@istanbuljs/schema" "^0.1.3" - istanbul-lib-coverage "^3.2.0" - semver "^7.5.4" - -istanbul-lib-report@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" - integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== - dependencies: - istanbul-lib-coverage "^3.0.0" - make-dir "^4.0.0" - supports-color "^7.1.0" - -istanbul-lib-source-maps@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" - integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== - dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^3.0.0" - source-map "^0.6.1" - -istanbul-reports@^3.1.3: - version "3.1.7" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" - integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== - dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" - -jest-changed-files@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" - integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== - dependencies: - execa "^5.0.0" - jest-util "^29.7.0" - p-limit "^3.1.0" - -jest-circus@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" - integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/expect" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - dedent "^1.0.0" - is-generator-fn "^2.0.0" - jest-each "^29.7.0" - jest-matcher-utils "^29.7.0" - jest-message-util "^29.7.0" - jest-runtime "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" - p-limit "^3.1.0" - pretty-format "^29.7.0" - pure-rand "^6.0.0" - slash "^3.0.0" - stack-utils "^2.0.3" - -jest-cli@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" - integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== - dependencies: - "@jest/core" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" - chalk "^4.0.0" - create-jest "^29.7.0" - exit "^0.1.2" - import-local "^3.0.2" - jest-config "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - yargs "^17.3.1" - -jest-config@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" - integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== - dependencies: - "@babel/core" "^7.11.6" - "@jest/test-sequencer" "^29.7.0" - "@jest/types" "^29.6.3" - babel-jest "^29.7.0" - chalk "^4.0.0" - ci-info "^3.2.0" - deepmerge "^4.2.2" - glob "^7.1.3" - graceful-fs "^4.2.9" - jest-circus "^29.7.0" - jest-environment-node "^29.7.0" - jest-get-type "^29.6.3" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-runner "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - micromatch "^4.0.4" - parse-json "^5.2.0" - pretty-format "^29.7.0" - slash "^3.0.0" - strip-json-comments "^3.1.1" - -jest-diff@^29.0.0, jest-diff@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" - integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== - dependencies: - chalk "^4.0.0" - diff-sequences "^29.6.3" - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - -jest-docblock@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" - integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== - dependencies: - detect-newline "^3.0.0" - -jest-each@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" - integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== - dependencies: - "@jest/types" "^29.6.3" - chalk "^4.0.0" - jest-get-type "^29.6.3" - jest-util "^29.7.0" - pretty-format "^29.7.0" - -jest-environment-node@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" - integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/fake-timers" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - jest-mock "^29.7.0" - jest-util "^29.7.0" - -jest-extended@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/jest-extended/-/jest-extended-4.0.2.tgz#d23b52e687cedf66694e6b2d77f65e211e99e021" - integrity sha512-FH7aaPgtGYHc9mRjriS0ZEHYM5/W69tLrFTIdzm+yJgeoCmmrSB/luSfMSqWP9O29QWHPEmJ4qmU6EwsZideog== - dependencies: - jest-diff "^29.0.0" - jest-get-type "^29.0.0" - -jest-get-type@^29.0.0, jest-get-type@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" - integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== - -jest-haste-map@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" - integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== - dependencies: - "@jest/types" "^29.6.3" - "@types/graceful-fs" "^4.1.3" - "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.9" - jest-regex-util "^29.6.3" - jest-util "^29.7.0" - jest-worker "^29.7.0" - micromatch "^4.0.4" - walker "^1.0.8" - optionalDependencies: - fsevents "^2.3.2" - -jest-junit@^16.0.0: - version "16.0.0" - resolved "https://registry.yarnpkg.com/jest-junit/-/jest-junit-16.0.0.tgz#d838e8c561cf9fdd7eb54f63020777eee4136785" - integrity sha512-A94mmw6NfJab4Fg/BlvVOUXzXgF0XIH6EmTgJ5NDPp4xoKq0Kr7sErb+4Xs9nZvu58pJojz5RFGpqnZYJTrRfQ== - dependencies: - mkdirp "^1.0.4" - strip-ansi "^6.0.1" - uuid "^8.3.2" - xml "^1.0.1" - -jest-leak-detector@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" - integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== - dependencies: - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - -jest-matcher-utils@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" - integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== - dependencies: - chalk "^4.0.0" - jest-diff "^29.7.0" - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - -jest-message-util@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" - integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== - dependencies: - "@babel/code-frame" "^7.12.13" - "@jest/types" "^29.6.3" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.9" - micromatch "^4.0.4" - pretty-format "^29.7.0" - slash "^3.0.0" - stack-utils "^2.0.3" - -jest-mock@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" - integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - jest-util "^29.7.0" - -jest-pnp-resolver@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" - integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== - -jest-regex-util@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" - integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== - -jest-resolve-dependencies@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" - integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== - dependencies: - jest-regex-util "^29.6.3" - jest-snapshot "^29.7.0" - -jest-resolve@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" - integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== - dependencies: - chalk "^4.0.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-pnp-resolver "^1.2.2" - jest-util "^29.7.0" - jest-validate "^29.7.0" - resolve "^1.20.0" - resolve.exports "^2.0.0" - slash "^3.0.0" - -jest-runner@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" - integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== - dependencies: - "@jest/console" "^29.7.0" - "@jest/environment" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - emittery "^0.13.1" - graceful-fs "^4.2.9" - jest-docblock "^29.7.0" - jest-environment-node "^29.7.0" - jest-haste-map "^29.7.0" - jest-leak-detector "^29.7.0" - jest-message-util "^29.7.0" - jest-resolve "^29.7.0" - jest-runtime "^29.7.0" - jest-util "^29.7.0" - jest-watcher "^29.7.0" - jest-worker "^29.7.0" - p-limit "^3.1.0" - source-map-support "0.5.13" - -jest-runtime@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" - integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/fake-timers" "^29.7.0" - "@jest/globals" "^29.7.0" - "@jest/source-map" "^29.6.3" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - cjs-module-lexer "^1.0.0" - collect-v8-coverage "^1.0.0" - glob "^7.1.3" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-message-util "^29.7.0" - jest-mock "^29.7.0" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" - slash "^3.0.0" - strip-bom "^4.0.0" - -jest-snapshot@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" - integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== - dependencies: - "@babel/core" "^7.11.6" - "@babel/generator" "^7.7.2" - "@babel/plugin-syntax-jsx" "^7.7.2" - "@babel/plugin-syntax-typescript" "^7.7.2" - "@babel/types" "^7.3.3" - "@jest/expect-utils" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - babel-preset-current-node-syntax "^1.0.0" - chalk "^4.0.0" - expect "^29.7.0" - graceful-fs "^4.2.9" - jest-diff "^29.7.0" - jest-get-type "^29.6.3" - jest-matcher-utils "^29.7.0" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - natural-compare "^1.4.0" - pretty-format "^29.7.0" - semver "^7.5.3" - -jest-util@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" - integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" - -jest-validate@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" - integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== - dependencies: - "@jest/types" "^29.6.3" - camelcase "^6.2.0" - chalk "^4.0.0" - jest-get-type "^29.6.3" - leven "^3.1.0" - pretty-format "^29.7.0" - -jest-watcher@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" - integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== - dependencies: - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - emittery "^0.13.1" - jest-util "^29.7.0" - string-length "^4.0.1" - -jest-worker@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" - integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== - dependencies: - "@types/node" "*" - jest-util "^29.7.0" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -jest@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" - integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== - dependencies: - "@jest/core" "^29.7.0" - "@jest/types" "^29.6.3" - import-local "^3.0.2" - jest-cli "^29.7.0" - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json-parse-even-better-errors@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== - -json5@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - -keyv@^4.5.3: - version "4.5.4" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" - integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== - dependencies: - json-buffer "3.0.1" - -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - -ledger-cosmos-js@^2.1.8: - version "2.1.8" - resolved "https://registry.yarnpkg.com/ledger-cosmos-js/-/ledger-cosmos-js-2.1.8.tgz#b409ecd1e77f630e6fb212a9f602fe5c6e8f054b" - integrity sha512-Gl7SWMq+3R9OTkF1hLlg5+1geGOmcHX9OdS+INDsGNxSiKRWlsWCvQipGoDnRIQ6CPo2i/Ze58Dw0Mt/l3UYyA== - dependencies: - "@babel/runtime" "^7.11.2" - "@ledgerhq/hw-transport" "^5.25.0" - bech32 "^1.1.4" - ripemd160 "^2.0.2" - -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -libsodium-wrappers@^0.7.6: - version "0.7.13" - resolved "https://registry.yarnpkg.com/libsodium-wrappers/-/libsodium-wrappers-0.7.13.tgz#83299e06ee1466057ba0e64e532777d2929b90d3" - integrity sha512-kasvDsEi/r1fMzKouIDv7B8I6vNmknXwGiYodErGuESoFTohGSKZplFtVxZqHaoQ217AynyIFgnOVRitpHs0Qw== - dependencies: - libsodium "^0.7.13" - -libsodium@^0.7.13: - version "0.7.13" - resolved "https://registry.yarnpkg.com/libsodium/-/libsodium-0.7.13.tgz#230712ec0b7447c57b39489c48a4af01985fb393" - integrity sha512-mK8ju0fnrKXXfleL53vtp9xiPq5hKM0zbDQtcxQIsSmxNgSxqCj6R7Hl9PkrNe2j29T4yoDaF7DJLK9/i5iWUw== - -lilconfig@2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.5.tgz#19e57fd06ccc3848fd1891655b5a447092225b25" - integrity sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg== - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -lint-staged@^12.3.8: - version "12.5.0" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-12.5.0.tgz#d6925747480ae0e380d13988522f9dd8ef9126e3" - integrity sha512-BKLUjWDsKquV/JuIcoQW4MSAI3ggwEImF1+sB4zaKvyVx1wBk3FsG7UK9bpnmBTN1pm7EH2BBcMwINJzCRv12g== - dependencies: - cli-truncate "^3.1.0" - colorette "^2.0.16" - commander "^9.3.0" - debug "^4.3.4" - execa "^5.1.1" - lilconfig "2.0.5" - listr2 "^4.0.5" - micromatch "^4.0.5" - normalize-path "^3.0.0" - object-inspect "^1.12.2" - pidtree "^0.5.0" - string-argv "^0.3.1" - supports-color "^9.2.2" - yaml "^1.10.2" - -listr2@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-4.0.5.tgz#9dcc50221583e8b4c71c43f9c7dfd0ef546b75d5" - integrity sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA== - dependencies: - cli-truncate "^2.1.0" - colorette "^2.0.16" - log-update "^4.0.0" - p-map "^4.0.0" - rfdc "^1.3.0" - rxjs "^7.5.5" - through "^2.3.8" - wrap-ansi "^7.0.0" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-update@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" - integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== - dependencies: - ansi-escapes "^4.3.0" - cli-cursor "^3.1.0" - slice-ansi "^4.0.0" - wrap-ansi "^6.2.0" - -long@*, long@^5.2.1: - version "5.2.3" - resolved "https://registry.yarnpkg.com/long/-/long-5.2.3.tgz#a3ba97f3877cf1d778eccbcb048525ebb77499e1" - integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q== - -long@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" - integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -make-dir@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" - integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== - dependencies: - semver "^7.5.3" - -make-error@^1.1.1: - version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - -makeerror@1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" - integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== - dependencies: - tmpl "1.0.5" - -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" - integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -merkletreejs@^0.3.9: - version "0.3.11" - resolved "https://registry.yarnpkg.com/merkletreejs/-/merkletreejs-0.3.11.tgz#e0de05c3ca1fd368de05a12cb8efb954ef6fc04f" - integrity sha512-LJKTl4iVNTndhL+3Uz/tfkjD0klIWsHlUzgtuNnNrsf7bAlXR30m+xYB7lHr5Z/l6e/yAIsr26Dabx6Buo4VGQ== - dependencies: - bignumber.js "^9.0.1" - buffer-reverse "^1.0.1" - crypto-js "^4.2.0" - treeify "^1.1.0" - web3-utils "^1.3.4" - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== - -micro-ftch@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/micro-ftch/-/micro-ftch-0.3.1.tgz#6cb83388de4c1f279a034fb0cf96dfc050853c5f" - integrity sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg== - -micromatch@^4.0.4, micromatch@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12, mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== - -minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.2.6: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -mkdirp@^0.5.1: - version "0.5.6" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== - dependencies: - minimist "^1.2.6" - -mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -nan@^2.13.2: - version "2.19.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.19.0.tgz#bb58122ad55a6c5bc973303908d5b16cfdd5a8c0" - integrity sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw== - -natural-compare-lite@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" - integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== - -negotiator@0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -node-addon-api@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" - integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== - -node-gyp-build@^4.2.0: - version "4.8.0" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.0.tgz#3fee9c1731df4581a3f9ead74664369ff00d26dd" - integrity sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og== - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== - -node-releases@^2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" - integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== - -normalize-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -number-to-bn@1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" - integrity sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig== - dependencies: - bn.js "4.11.6" - strip-hex-prefix "1.0.0" - -object-inspect@^1.12.2, object-inspect@^1.13.1: - version "1.13.1" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" - integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -on-finished@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - -once@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -onetime@^5.1.0, onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -optionator@^0.9.3: - version "0.9.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" - integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== - dependencies: - "@aashutoshrathi/word-wrap" "^1.2.3" - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - -p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-limit@^3.0.2, p-limit@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -pako@^2.0.2: - version "2.1.0" - resolved "https://registry.yarnpkg.com/pako/-/pako-2.1.0.tgz#266cc37f98c7d883545d11335c00fbd4062c9a86" - integrity sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug== - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-json@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - -parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pidtree@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.5.0.tgz#ad5fbc1de78b8a5f99d6fbdd4f6e4eee21d1aca1" - integrity sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA== - -pirates@^4.0.4: - version "4.0.6" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" - integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== - -pkg-dir@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -prettier-linter-helpers@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" - integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== - dependencies: - fast-diff "^1.1.2" - -prettier@^2.6.2: - version "2.8.8" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" - integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== - -pretty-format@^29.0.0, pretty-format@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" - integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== - dependencies: - "@jest/schemas" "^29.6.3" - ansi-styles "^5.0.0" - react-is "^18.0.0" - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - -prompts@^2.0.1: - version "2.4.2" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" - integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" - -protobufjs@^6.11.2, protobufjs@^6.11.3, protobufjs@^6.8.8, protobufjs@~6.11.2, protobufjs@~6.11.3: - version "6.11.4" - resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.11.4.tgz#29a412c38bf70d89e537b6d02d904a6f448173aa" - integrity sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw== - dependencies: - "@protobufjs/aspromise" "^1.1.2" - "@protobufjs/base64" "^1.1.2" - "@protobufjs/codegen" "^2.0.4" - "@protobufjs/eventemitter" "^1.1.0" - "@protobufjs/fetch" "^1.1.0" - "@protobufjs/float" "^1.0.2" - "@protobufjs/inquire" "^1.1.0" - "@protobufjs/path" "^1.1.2" - "@protobufjs/pool" "^1.1.0" - "@protobufjs/utf8" "^1.1.0" - "@types/long" "^4.0.1" - "@types/node" ">=13.7.0" - long "^4.0.0" - -proxy-addr@~2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - -punycode@^2.1.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" - integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== - -pure-rand@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.1.0.tgz#d173cf23258231976ccbdb05247c9787957604f2" - integrity sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA== - -qs@6.11.0: - version "6.11.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== - dependencies: - side-channel "^1.0.4" - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.5.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" - integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -react-is@^18.0.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" - integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== - -readable-stream@^3.6.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readonly-date@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/readonly-date/-/readonly-date-1.0.0.tgz#5af785464d8c7d7c40b9d738cbde8c646f97dcd9" - integrity sha512-tMKIV7hlk0h4mO3JTmmVuIlJVXjKk3Sep9Bf5OH0O+758ruuVkUy2J9SttDLm91IEX/WHlXPSpxMGjPj4beMIQ== - -recast@^0.20: - version "0.20.5" - resolved "https://registry.yarnpkg.com/recast/-/recast-0.20.5.tgz#8e2c6c96827a1b339c634dd232957d230553ceae" - integrity sha512-E5qICoPoNL4yU0H0NoBDntNB0Q5oMSNh9usFctYniLBluTthi3RsQVBXIJNbApOlvSwW/RGxIuokPcAc59J5fQ== - dependencies: - ast-types "0.14.2" - esprima "~4.0.0" - source-map "~0.6.1" - tslib "^2.0.1" - -regenerate-unicode-properties@^10.1.0: - version "10.1.1" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz#6b0e05489d9076b04c436f318d9b067bba459480" - integrity sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q== - dependencies: - regenerate "^1.4.2" - -regenerate@^1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" - integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== - -regenerator-runtime@^0.13.9: - version "0.13.11" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" - integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== - -regenerator-runtime@^0.14.0: - version "0.14.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" - integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== - -regenerator-transform@^0.15.2: - version "0.15.2" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" - integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== - dependencies: - "@babel/runtime" "^7.8.4" - -regexpu-core@^5.3.1: - version "5.3.2" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" - integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== - dependencies: - "@babel/regjsgen" "^0.8.0" - regenerate "^1.4.2" - regenerate-unicode-properties "^10.1.0" - regjsparser "^0.9.1" - unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.1.0" - -regjsparser@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" - integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== - dependencies: - jsesc "~0.5.0" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve.exports@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" - integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== - -resolve@^1.14.2, resolve@^1.20.0, resolve@^1.3.2: - version "1.22.8" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" - integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rfdc@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.1.tgz#2b6d4df52dffe8bb346992a10ea9451f24373a8f" - integrity sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg== - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -ripemd160@^2.0.0, ripemd160@^2.0.1, ripemd160@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -rxjs@6: - version "6.6.7" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" - integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== - dependencies: - tslib "^1.9.0" - -rxjs@^7.4.0, rxjs@^7.5.5: - version "7.8.1" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" - integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== - dependencies: - tslib "^2.1.0" - -safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -"safer-buffer@>= 2.1.2 < 3": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -secp256k1@^4.0.2: - version "4.0.3" - resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" - integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== - dependencies: - elliptic "^6.5.4" - node-addon-api "^2.0.0" - node-gyp-build "^4.2.0" - -semver@^5.3.0: - version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== - -semver@^6.3.0, semver@^6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^7.3.2, semver@^7.3.5, semver@^7.3.7, semver@^7.5.3, semver@^7.5.4: - version "7.6.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" - integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== - dependencies: - lru-cache "^6.0.0" - -send@0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== - dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" - mime "1.6.0" - ms "2.1.3" - on-finished "2.4.1" - range-parser "~1.2.1" - statuses "2.0.1" - -serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.18.0" - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== - -set-function-length@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" - integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - gopd "^1.0.1" - has-property-descriptors "^1.0.2" - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -sha.js@^2.4.0, sha.js@^2.4.8: - version "2.4.11" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -side-channel@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" - integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== - dependencies: - call-bind "^1.0.7" - es-errors "^1.3.0" - get-intrinsic "^1.2.4" - object-inspect "^1.13.1" - -signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slice-ansi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" - integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -slice-ansi@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" - integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== - dependencies: - ansi-styles "^6.0.0" - is-fullwidth-code-point "^4.0.0" - -source-map-support@0.5.13: - version "0.5.13" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" - integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-support@^0.5.17: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - -stack-utils@^2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" - integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== - dependencies: - escape-string-regexp "^2.0.0" - -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -string-argv@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" - integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== - -string-length@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" - integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== - dependencies: - char-regex "^1.0.2" - strip-ansi "^6.0.0" - -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^5.0.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^7.0.1: - version "7.1.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" - integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== - dependencies: - ansi-regex "^6.0.1" - -strip-bom@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" - integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-hex-prefix@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" - integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A== - dependencies: - is-hex-prefixed "1.0.0" - -strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-color@^9.2.2: - version "9.4.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-9.4.0.tgz#17bfcf686288f531db3dea3215510621ccb55954" - integrity sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw== - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -symbol-observable@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-2.0.3.tgz#5b521d3d07a43c351055fa43b8355b62d33fd16a" - integrity sha512-sQV7phh2WCYAn81oAkakC5qjq2Ml0g8ozqz03wOGnx9dDlG1de6yrF+0RAzSJD8fPUow3PTSMf2SAbOGxb93BA== - -test-exclude@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" - integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== - dependencies: - "@istanbuljs/schema" "^0.1.2" - glob "^7.1.4" - minimatch "^3.0.4" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - -through@^2.3.8: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - -tiny-secp256k1@^1.1.3: - version "1.1.6" - resolved "https://registry.yarnpkg.com/tiny-secp256k1/-/tiny-secp256k1-1.1.6.tgz#7e224d2bee8ab8283f284e40e6b4acb74ffe047c" - integrity sha512-FmqJZGduTyvsr2cF3375fqGHUovSwDi/QytexX1Se4BPuPZpTE5Ftp5fg+EFSuEf3lhZqgCRjEG3ydUQ/aNiwA== - dependencies: - bindings "^1.3.0" - bn.js "^4.11.8" - create-hmac "^1.1.7" - elliptic "^6.4.0" - nan "^2.13.2" - -tiny-secp256k1@^2.0.1: - version "2.2.3" - resolved "https://registry.yarnpkg.com/tiny-secp256k1/-/tiny-secp256k1-2.2.3.tgz#fe1dde11a64fcee2091157d4b78bcb300feb9b65" - integrity sha512-SGcL07SxcPN2nGKHTCvRMkQLYPSoeFcvArUSCYtjVARiFAWU44cCIqYS0mYAU6nY7XfvwURuTIGo2Omt3ZQr0Q== - dependencies: - uint8array-tools "0.0.7" - -tmpl@1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" - integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -treeify@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/treeify/-/treeify-1.1.0.tgz#4e31c6a463accd0943879f30667c4fdaff411bb8" - integrity sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A== - -ts-node@^8: - version "8.10.2" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.10.2.tgz#eee03764633b1234ddd37f8db9ec10b75ec7fb8d" - integrity sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA== - dependencies: - arg "^4.1.0" - diff "^4.0.1" - make-error "^1.1.1" - source-map-support "^0.5.17" - yn "3.1.1" - -ts-node@^9.1.1: - version "9.1.1" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-9.1.1.tgz#51a9a450a3e959401bda5f004a72d54b936d376d" - integrity sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg== - dependencies: - arg "^4.1.0" - create-require "^1.1.0" - diff "^4.0.1" - make-error "^1.1.1" - source-map-support "^0.5.17" - yn "3.1.1" - -tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.0.1, tslib@^2.1.0: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - -tslint@^5.20.1: - version "5.20.1" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.20.1.tgz#e401e8aeda0152bc44dd07e614034f3f80c67b7d" - integrity sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg== - dependencies: - "@babel/code-frame" "^7.0.0" - builtin-modules "^1.1.1" - chalk "^2.3.0" - commander "^2.12.1" - diff "^4.0.1" - glob "^7.1.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" - mkdirp "^0.5.1" - resolve "^1.3.2" - semver "^5.3.0" - tslib "^1.8.0" - tsutils "^2.29.0" - -tsutils@^2.29.0: - version "2.29.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" - integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== - dependencies: - tslib "^1.8.1" - -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - -tweetnacl@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" - integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-detect@4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -typeforce@^1.11.5: - version "1.18.0" - resolved "https://registry.yarnpkg.com/typeforce/-/typeforce-1.18.0.tgz#d7416a2c5845e085034d70fcc5b6cc4a90edbfdc" - integrity sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g== - -typescript@^5.1.6: - version "5.4.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" - integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== - -typescript@~4.4: - version "4.4.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.4.tgz#2cd01a1a1f160704d3101fd5a58ff0f9fcb8030c" - integrity sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA== - -uint8array-tools@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/uint8array-tools/-/uint8array-tools-0.0.7.tgz#a7a2bb5d8836eae2fade68c771454e6a438b390d" - integrity sha512-vrrNZJiusLWoFWBqz5Y5KMCgP9W9hnjZHzZiZRT8oNAkq3d5Z5Oe76jAvVVSRh4U8GGR90N2X1dWtrhvx6L8UQ== - -undici-types@~5.26.4: - version "5.26.5" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" - integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== - -unicode-canonical-property-names-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" - integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== - -unicode-match-property-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" - integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== - dependencies: - unicode-canonical-property-names-ecmascript "^2.0.0" - unicode-property-aliases-ecmascript "^2.0.0" - -unicode-match-property-value-ecmascript@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" - integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== - -unicode-property-aliases-ecmascript@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" - integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== - -update-browserslist-db@^1.0.13: - version "1.0.13" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" - integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -utf8@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" - integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== - -util-deprecate@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== - -uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -v8-to-istanbul@^9.0.1: - version "9.2.0" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz#2ed7644a245cddd83d4e087b9b33b3e62dfd10ad" - integrity sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA== - dependencies: - "@jridgewell/trace-mapping" "^0.3.12" - "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^2.0.0" - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== - -walker@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" - integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== - dependencies: - makeerror "1.0.12" - -web3-utils@^1.3.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.4.tgz#0daee7d6841641655d8b3726baf33b08eda1cbec" - integrity sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A== - dependencies: - "@ethereumjs/util" "^8.1.0" - bn.js "^5.2.1" - ethereum-bloom-filters "^1.0.6" - ethereum-cryptography "^2.1.2" - ethjs-unit "0.1.6" - number-to-bn "1.7.0" - randombytes "^2.1.0" - utf8 "3.0.0" - -which-module@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" - integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wif@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/wif/-/wif-2.0.6.tgz#08d3f52056c66679299726fade0d432ae74b4704" - integrity sha512-HIanZn1zmduSF+BQhkE+YXIbEiH0xPr1012QbFEGB0xsKqJii0/SqJjyn8dFv6y36kOznMgMB+LGcbZTJ1xACQ== - dependencies: - bs58check "<3.0.0" - -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -write-file-atomic@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" - integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^3.0.7" - -ws@^7: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== - -xml@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/xml/-/xml-1.0.1.tgz#78ba72020029c5bc87b8a81a3cfcd74b4a2fc1e5" - integrity sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw== - -xstream@^11.14.0: - version "11.14.0" - resolved "https://registry.yarnpkg.com/xstream/-/xstream-11.14.0.tgz#2c071d26b18310523b6877e86b4e54df068a9ae5" - integrity sha512-1bLb+kKKtKPbgTK6i/BaoAn03g47PpFstlbe1BA+y3pNS/LfvcaghS5BFf9+EE1J+KwSQsEpfJvFN5GqFtiNmw== - dependencies: - globalthis "^1.0.1" - symbol-observable "^2.0.3" - -y18n@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" - integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml@^1.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - -yargs-parser@^18.1.2: - version "18.1.3" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" - integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^21.1.1: - version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - -yargs@^15.3.1: - version "15.4.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" - integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== - dependencies: - cliui "^6.0.0" - decamelize "^1.2.0" - find-up "^4.1.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^4.2.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^18.1.2" - -yargs@^17.3.1: - version "17.7.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" - integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.1.1" - -yesno@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/yesno/-/yesno-0.4.0.tgz#5d674f14d339f0bd4b0edc47f899612c74fcd895" - integrity sha512-tdBxmHvbXPBKYIg81bMCB7bVeDmHkRzk5rVJyYYXurwKkHq/MCd8rz4HSJUP7hW0H2NlXiq8IFiWvYKEHhlotA== - -yn@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From 7854a6b0f8f7849c5d2a5f4d24ea9af76b394a3b Mon Sep 17 00:00:00 2001 From: nhpd Date: Fri, 26 Apr 2024 15:13:12 +0400 Subject: [PATCH 71/87] add slinky to run in band tests --- package.json | 4 ++-- src/testcases/{parallel => run_in_band}/slinky.test.ts | 0 2 files changed, 2 insertions(+), 2 deletions(-) rename src/testcases/{parallel => run_in_band}/slinky.test.ts (100%) diff --git a/package.json b/package.json index 2029cc9f..115defb5 100644 --- a/package.json +++ b/package.json @@ -6,9 +6,9 @@ "scripts": { "test": "yarn test:parallel && yarn test:run_in_band", "test:parallel": "jest -b src/testcases/parallel", - "test:run_in_band": "yarn test:tge:auction && yarn test:tge:credits && yarn test:interchaintx && yarn test:interchain_kv_query && yarn test:interchain_tx_query_plain && yarn test:tokenomics && yarn test:reserve && yarn test:ibc_hooks && yarn test:float && yarn test:parameters && yarn test:dex_stargate && yarn test:globalfee && yarn test:dex_bindings && yarn test:pob", + "test:run_in_band": "yarn test:tge:auction && yarn test:tge:credits && yarn test:interchaintx && yarn test:interchain_kv_query && yarn test:interchain_tx_query_plain && yarn test:tokenomics && yarn test:reserve && yarn test:ibc_hooks && yarn test:float && yarn test:parameters && yarn test:dex_stargate && yarn test:globalfee && yarn test:dex_bindings && yarn test:pob && yarn test:slinky", "test:simple": "jest -b src/testcases/parallel/simple", - "test:slinky": "jest -b src/testcases/parallel/slinky", + "test:slinky": "jest -b src/testcases/run_in_band/slinky", "test:stargate_queries": "jest -b src/testcases/parallel/stargate_queries", "test:interchaintx": "jest -b src/testcases/run_in_band/interchaintx", "test:interchain_kv_query": "jest -b src/testcases/run_in_band/interchain_kv_query", diff --git a/src/testcases/parallel/slinky.test.ts b/src/testcases/run_in_band/slinky.test.ts similarity index 100% rename from src/testcases/parallel/slinky.test.ts rename to src/testcases/run_in_band/slinky.test.ts From dbca0c342ca9ca37839e2ea421d91232ef22fbd5 Mon Sep 17 00:00:00 2001 From: nhpd Date: Fri, 26 Apr 2024 17:32:55 +0400 Subject: [PATCH 72/87] recreate yarn.lock --- yarn.lock | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/yarn.lock b/yarn.lock index 98b98539..a00ee052 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1575,7 +1575,7 @@ "@neutron-org/neutronjsplus@neutron-org/neutronjsplus#feat/slinky": version "0.4.0-rc19" - resolved "https://codeload.github.com/neutron-org/neutronjsplus/tar.gz/65f1287a2e3ac4c0658d823f9c3ab6a849f11b9c" + resolved "https://codeload.github.com/neutron-org/neutronjsplus/tar.gz/00dc6ba6d0bc73cbeb1896f9c034b7cdd60e82a8" dependencies: "@bufbuild/protobuf" "^1.4.2" "@cosmos-client/core" "^0.47.4" @@ -2817,9 +2817,9 @@ ee-first@1.1.1: integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== electron-to-chromium@^1.4.668: - version "1.4.748" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.748.tgz#aa7d4f2f3eac3a6a863cd1779bd4682b4bb68ed5" - integrity sha512-VWqjOlPZn70UZ8FTKUOkUvBLeTQ0xpty66qV0yJcAGY2/CthI4xyW9aEozRVtuwv3Kpf5xTesmJUcPwuJmgP4A== + version "1.4.749" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.749.tgz#9869e2e258141da26a2272b58264584c3461279d" + integrity sha512-LRMMrM9ITOvue0PoBrvNIraVmuDbJV5QC9ierz/z5VilMdPOVMjOtpICNld3PuXuTZ3CHH/UPxX9gHhAPwi+0Q== elliptic@^6.4.0, elliptic@^6.5.3, elliptic@^6.5.4: version "6.5.5" @@ -4702,9 +4702,9 @@ raw-body@2.5.2: unpipe "1.0.0" react-is@^18.0.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" - integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + version "18.3.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.0.tgz#6c2d9b6cdd4c2cffb7c89b1bcb57bc44d12f1993" + integrity sha512-wRiUsea88TjKDc4FBEn+sLvIDesp6brMbGWnJGjew2waAc9evdhja/2LvePc898HJbHw0L+MTWy7NhpnELAvLQ== readable-stream@^3.6.0: version "3.6.2" From 5e836c749e1dfe59e716588e74a6ca0121905693 Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Fri, 26 Apr 2024 10:50:49 -0300 Subject: [PATCH 73/87] recreate yarn.lock --- yarn.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/yarn.lock b/yarn.lock index db394070..f9f93ee4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1574,8 +1574,8 @@ integrity sha512-swKHYCOZUGyVt4ge0u8a7AwNcA//h4nx5wIi0sruGye1IJ5Cva0GyK9L2/WdX+kWVTKp92ZiEo1df31lrWGPgA== "@neutron-org/neutronjsplus@neutron-org/neutronjsplus#fix/pool_metadata_proto": - version "0.3.4" - resolved "https://codeload.github.com/neutron-org/neutronjsplus/tar.gz/1fdefc54ec7101b1411fd0ba07a2f9f28c9b11d2" + version "0.4.0-rc15" + resolved "https://codeload.github.com/neutron-org/neutronjsplus/tar.gz/b0004c122f568b4e02bb977934434a59acefab17" dependencies: "@bufbuild/protobuf" "^1.4.2" "@cosmos-client/core" "^0.47.4" @@ -2817,9 +2817,9 @@ ee-first@1.1.1: integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== electron-to-chromium@^1.4.668: - version "1.4.748" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.748.tgz#aa7d4f2f3eac3a6a863cd1779bd4682b4bb68ed5" - integrity sha512-VWqjOlPZn70UZ8FTKUOkUvBLeTQ0xpty66qV0yJcAGY2/CthI4xyW9aEozRVtuwv3Kpf5xTesmJUcPwuJmgP4A== + version "1.4.749" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.749.tgz#9869e2e258141da26a2272b58264584c3461279d" + integrity sha512-LRMMrM9ITOvue0PoBrvNIraVmuDbJV5QC9ierz/z5VilMdPOVMjOtpICNld3PuXuTZ3CHH/UPxX9gHhAPwi+0Q== elliptic@^6.4.0, elliptic@^6.5.3, elliptic@^6.5.4: version "6.5.5" @@ -4702,9 +4702,9 @@ raw-body@2.5.2: unpipe "1.0.0" react-is@^18.0.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" - integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + version "18.3.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.0.tgz#6c2d9b6cdd4c2cffb7c89b1bcb57bc44d12f1993" + integrity sha512-wRiUsea88TjKDc4FBEn+sLvIDesp6brMbGWnJGjew2waAc9evdhja/2LvePc898HJbHw0L+MTWy7NhpnELAvLQ== readable-stream@^3.6.0: version "3.6.2" From ba3a36cede8e40b9d97b008dbd00233c1ca0c544 Mon Sep 17 00:00:00 2001 From: nhpd Date: Fri, 26 Apr 2024 19:13:36 +0400 Subject: [PATCH 74/87] fix neutrojsplus --- yarn.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yarn.lock b/yarn.lock index a00ee052..4ea56b99 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1575,7 +1575,7 @@ "@neutron-org/neutronjsplus@neutron-org/neutronjsplus#feat/slinky": version "0.4.0-rc19" - resolved "https://codeload.github.com/neutron-org/neutronjsplus/tar.gz/00dc6ba6d0bc73cbeb1896f9c034b7cdd60e82a8" + resolved "https://codeload.github.com/neutron-org/neutronjsplus/tar.gz/9bcd4b7795ec7fbd3137acb3a934e9cfc97a5146" dependencies: "@bufbuild/protobuf" "^1.4.2" "@cosmos-client/core" "^0.47.4" From 1b0e5586c44fdeb4ea894feb6f03c0b3b0338add Mon Sep 17 00:00:00 2001 From: quasisamurai Date: Fri, 26 Apr 2024 12:39:21 -0300 Subject: [PATCH 75/87] upd yarnlock --- yarn.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yarn.lock b/yarn.lock index f9f93ee4..60d0498c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1575,7 +1575,7 @@ "@neutron-org/neutronjsplus@neutron-org/neutronjsplus#fix/pool_metadata_proto": version "0.4.0-rc15" - resolved "https://codeload.github.com/neutron-org/neutronjsplus/tar.gz/b0004c122f568b4e02bb977934434a59acefab17" + resolved "https://codeload.github.com/neutron-org/neutronjsplus/tar.gz/53254651cf922db07de680aa0dedc9fe5fe45957" dependencies: "@bufbuild/protobuf" "^1.4.2" "@cosmos-client/core" "^0.47.4" From 24a8d10e369bd65c3545f98390fda905d2ad9e23 Mon Sep 17 00:00:00 2001 From: pr0n00gler Date: Fri, 26 Apr 2024 21:48:52 +0300 Subject: [PATCH 76/87] use neutronjsplus feat/sdk-50 --- package.json | 2 +- yarn.lock | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index 96ffc8b4..dbca893a 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "@cosmos-client/core": "^0.47.4", "@cosmos-client/cosmwasm": "^0.40.3", "@cosmos-client/ibc": "^1.2.1", - "@neutron-org/neutronjsplus": "neutron-org/neutronjsplus#fix/pool_metadata_proto", + "@neutron-org/neutronjsplus": "neutron-org/neutronjsplus#feat/sdk-50", "@types/lodash": "^4.14.182", "@types/long": "^5.0.0", "axios": "^0.27.2", diff --git a/yarn.lock b/yarn.lock index 60d0498c..079b4b60 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1573,9 +1573,9 @@ resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-5.50.0.tgz#29c6419e8379d496ab6d0426eadf3c4d100cd186" integrity sha512-swKHYCOZUGyVt4ge0u8a7AwNcA//h4nx5wIi0sruGye1IJ5Cva0GyK9L2/WdX+kWVTKp92ZiEo1df31lrWGPgA== -"@neutron-org/neutronjsplus@neutron-org/neutronjsplus#fix/pool_metadata_proto": +"@neutron-org/neutronjsplus@neutron-org/neutronjsplus#feat/sdk-50": version "0.4.0-rc15" - resolved "https://codeload.github.com/neutron-org/neutronjsplus/tar.gz/53254651cf922db07de680aa0dedc9fe5fe45957" + resolved "https://codeload.github.com/neutron-org/neutronjsplus/tar.gz/c3a1c56f148c255c359610df55417b61cfc70a4d" dependencies: "@bufbuild/protobuf" "^1.4.2" "@cosmos-client/core" "^0.47.4" @@ -2817,9 +2817,9 @@ ee-first@1.1.1: integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== electron-to-chromium@^1.4.668: - version "1.4.749" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.749.tgz#9869e2e258141da26a2272b58264584c3461279d" - integrity sha512-LRMMrM9ITOvue0PoBrvNIraVmuDbJV5QC9ierz/z5VilMdPOVMjOtpICNld3PuXuTZ3CHH/UPxX9gHhAPwi+0Q== + version "1.4.750" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.750.tgz#d278a619af727ed069de1317115187282b1131ee" + integrity sha512-9ItEpeu15hW5m8jKdriL+BQrgwDTXEL9pn4SkillWFu73ZNNNQ2BKKLS+ZHv2vC9UkNhosAeyfxOf/5OSeTCPA== elliptic@^6.4.0, elliptic@^6.5.3, elliptic@^6.5.4: version "6.5.5" @@ -4702,9 +4702,9 @@ raw-body@2.5.2: unpipe "1.0.0" react-is@^18.0.0: - version "18.3.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.0.tgz#6c2d9b6cdd4c2cffb7c89b1bcb57bc44d12f1993" - integrity sha512-wRiUsea88TjKDc4FBEn+sLvIDesp6brMbGWnJGjew2waAc9evdhja/2LvePc898HJbHw0L+MTWy7NhpnELAvLQ== + version "18.3.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" + integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== readable-stream@^3.6.0: version "3.6.2" From af9ff20446943041b8a7b5e9f8f6d491bdaea0c9 Mon Sep 17 00:00:00 2001 From: nhpd Date: Sat, 27 Apr 2024 11:58:24 +0400 Subject: [PATCH 77/87] recreate yarn.lock --- yarn.lock | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/yarn.lock b/yarn.lock index c64b8c21..17f8bb72 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,11 +2,6 @@ # yarn lockfile v1 -"@aashutoshrathi/word-wrap@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" - integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== - "@ampproject/remapping@^2.2.0": version "2.3.0" resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" @@ -1575,7 +1570,7 @@ "@neutron-org/neutronjsplus@neutron-org/neutronjsplus#feat/slinky": version "0.4.0-rc19" - resolved "https://codeload.github.com/neutron-org/neutronjsplus/tar.gz/9bcd4b7795ec7fbd3137acb3a934e9cfc97a5146" + resolved "https://codeload.github.com/neutron-org/neutronjsplus/tar.gz/e65126e64b06880ac49ae0173c4070f15a49d011" dependencies: "@bufbuild/protobuf" "^1.4.2" "@cosmos-client/core" "^0.47.4" @@ -4456,16 +4451,16 @@ onetime@^5.1.0, onetime@^5.1.2: mimic-fn "^2.1.0" optionator@^0.9.3: - version "0.9.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" - integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== + version "0.9.4" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== dependencies: - "@aashutoshrathi/word-wrap" "^1.2.3" deep-is "^0.1.3" fast-levenshtein "^2.0.6" levn "^0.4.1" prelude-ls "^1.2.1" type-check "^0.4.0" + word-wrap "^1.2.5" p-limit@^2.2.0: version "2.3.0" @@ -5486,6 +5481,11 @@ wif@^2.0.6: dependencies: bs58check "<3.0.0" +word-wrap@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + wrap-ansi@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" From 82f60162a4f3b2179370058f50b75342028354b2 Mon Sep 17 00:00:00 2001 From: nhpd Date: Sat, 27 Apr 2024 15:03:46 +0400 Subject: [PATCH 78/87] use sdk-50 branch now --- package.json | 2 +- yarn.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 115defb5..00b3c294 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "@cosmos-client/core": "^0.47.4", "@cosmos-client/cosmwasm": "^0.40.3", "@cosmos-client/ibc": "^1.2.1", - "@neutron-org/neutronjsplus": "neutron-org/neutronjsplus#feat/slinky", + "@neutron-org/neutronjsplus": "neutron-org/neutronjsplus#feat/sdk-50", "@types/lodash": "^4.14.182", "@types/long": "^5.0.0", "axios": "^0.27.2", diff --git a/yarn.lock b/yarn.lock index 17f8bb72..916f0363 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1568,9 +1568,9 @@ resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-5.50.0.tgz#29c6419e8379d496ab6d0426eadf3c4d100cd186" integrity sha512-swKHYCOZUGyVt4ge0u8a7AwNcA//h4nx5wIi0sruGye1IJ5Cva0GyK9L2/WdX+kWVTKp92ZiEo1df31lrWGPgA== -"@neutron-org/neutronjsplus@neutron-org/neutronjsplus#feat/slinky": +"@neutron-org/neutronjsplus@neutron-org/neutronjsplus#feat/sdk-50": version "0.4.0-rc19" - resolved "https://codeload.github.com/neutron-org/neutronjsplus/tar.gz/e65126e64b06880ac49ae0173c4070f15a49d011" + resolved "https://codeload.github.com/neutron-org/neutronjsplus/tar.gz/071d94b6dc174bcb54867d26273632211b1f5b1b" dependencies: "@bufbuild/protobuf" "^1.4.2" "@cosmos-client/core" "^0.47.4" From 8f418ee12183a6911dd78b9d34240072104a7f66 Mon Sep 17 00:00:00 2001 From: sotnikov-s Date: Sat, 27 Apr 2024 14:49:17 +0300 Subject: [PATCH 79/87] update neutronjsplus version to feat/migrate-to-pcl version --- package.json | 2 +- yarn.lock | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index d36bd497..2a180ed1 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "@cosmos-client/core": "^0.47.4", "@cosmos-client/cosmwasm": "^0.40.3", "@cosmos-client/ibc": "^1.2.1", - "@neutron-org/neutronjsplus": "0.4.0-rc7", + "@neutron-org/neutronjsplus": "neutron-org/neutronjsplus#5d10c4f26b02c24106432b9481db055c02860b77", "@types/lodash": "^4.14.182", "@types/long": "^5.0.0", "axios": "^0.27.2", diff --git a/yarn.lock b/yarn.lock index 882f1aba..78b11a18 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1564,10 +1564,9 @@ resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-5.50.0.tgz#29c6419e8379d496ab6d0426eadf3c4d100cd186" integrity sha512-swKHYCOZUGyVt4ge0u8a7AwNcA//h4nx5wIi0sruGye1IJ5Cva0GyK9L2/WdX+kWVTKp92ZiEo1df31lrWGPgA== -"@neutron-org/neutronjsplus@0.4.0-rc7": +"@neutron-org/neutronjsplus@neutron-org/neutronjsplus#5d10c4f26b02c24106432b9481db055c02860b77": version "0.4.0-rc7" - resolved "https://registry.yarnpkg.com/@neutron-org/neutronjsplus/-/neutronjsplus-0.4.0-rc7.tgz#3a790cb15a8a52f2a3cb79e362aca08ade05d937" - integrity sha512-q1ZWr4SAibk90hmQ2TgJ8bITy9PUQm2VR/VQLDWiZixBMEvs2bzkjSEVHuY+VuPjdOMTzFSSdl/pcsJZgpa4GQ== + resolved "https://codeload.github.com/neutron-org/neutronjsplus/tar.gz/5d10c4f26b02c24106432b9481db055c02860b77" dependencies: "@bufbuild/protobuf" "^1.4.2" "@cosmos-client/core" "^0.47.4" From d58849be3d2a271228e05b79997deeb8206f9426 Mon Sep 17 00:00:00 2001 From: sotnikov-s Date: Sat, 27 Apr 2024 15:55:57 +0300 Subject: [PATCH 80/87] fix weird global.crypto error --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2a180ed1..1c3c197d 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "gen:proto": "bash ./gen-proto.sh", "lint": "eslint ./src", "fmt": "eslint ./src --fix", - "postinstall": "[ -d './node_modules/@neutron-org/neutronjsplus/dist' ] || tsc -p ./node_modules/@neutron-org/neutronjsplus/tsconfig.json" + "postinstall": "[ -d './node_modules/@neutron-org/neutronjsplus/dist' ] || cd ./node_modules/@neutron-org/neutronjsplus && yarn && yarn build" }, "author": "Neutron", "license": "Apache-2.0", From 79c897c3a7726389aa73c9332963d617628b4acd Mon Sep 17 00:00:00 2001 From: sotnikov-s Date: Sat, 27 Apr 2024 17:36:47 +0300 Subject: [PATCH 81/87] update neutronjsplus version to feat/migrate-to-pcl version without superfluous debug logs --- package.json | 2 +- yarn.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 1c3c197d..dec41893 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "@cosmos-client/core": "^0.47.4", "@cosmos-client/cosmwasm": "^0.40.3", "@cosmos-client/ibc": "^1.2.1", - "@neutron-org/neutronjsplus": "neutron-org/neutronjsplus#5d10c4f26b02c24106432b9481db055c02860b77", + "@neutron-org/neutronjsplus": "neutron-org/neutronjsplus#8bc70ee2875298d7f45b3a58e05bbdb1a67a1951", "@types/lodash": "^4.14.182", "@types/long": "^5.0.0", "axios": "^0.27.2", diff --git a/yarn.lock b/yarn.lock index 78b11a18..354807a0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1564,9 +1564,9 @@ resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-5.50.0.tgz#29c6419e8379d496ab6d0426eadf3c4d100cd186" integrity sha512-swKHYCOZUGyVt4ge0u8a7AwNcA//h4nx5wIi0sruGye1IJ5Cva0GyK9L2/WdX+kWVTKp92ZiEo1df31lrWGPgA== -"@neutron-org/neutronjsplus@neutron-org/neutronjsplus#5d10c4f26b02c24106432b9481db055c02860b77": +"@neutron-org/neutronjsplus@neutron-org/neutronjsplus#8bc70ee2875298d7f45b3a58e05bbdb1a67a1951": version "0.4.0-rc7" - resolved "https://codeload.github.com/neutron-org/neutronjsplus/tar.gz/5d10c4f26b02c24106432b9481db055c02860b77" + resolved "https://codeload.github.com/neutron-org/neutronjsplus/tar.gz/8bc70ee2875298d7f45b3a58e05bbdb1a67a1951" dependencies: "@bufbuild/protobuf" "^1.4.2" "@cosmos-client/core" "^0.47.4" From ee84046bda4e4cceb1e573aa0134b262633ffdab Mon Sep 17 00:00:00 2001 From: sotnikov-s Date: Sat, 27 Apr 2024 17:51:37 +0300 Subject: [PATCH 82/87] replace neutronjsplus commit dep version with 0.4.0 --- package.json | 2 +- yarn.lock | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index dec41893..d0475a9e 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "@cosmos-client/core": "^0.47.4", "@cosmos-client/cosmwasm": "^0.40.3", "@cosmos-client/ibc": "^1.2.1", - "@neutron-org/neutronjsplus": "neutron-org/neutronjsplus#8bc70ee2875298d7f45b3a58e05bbdb1a67a1951", + "@neutron-org/neutronjsplus": "0.4.0", "@types/lodash": "^4.14.182", "@types/long": "^5.0.0", "axios": "^0.27.2", diff --git a/yarn.lock b/yarn.lock index 354807a0..7df14fbf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1564,9 +1564,10 @@ resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-5.50.0.tgz#29c6419e8379d496ab6d0426eadf3c4d100cd186" integrity sha512-swKHYCOZUGyVt4ge0u8a7AwNcA//h4nx5wIi0sruGye1IJ5Cva0GyK9L2/WdX+kWVTKp92ZiEo1df31lrWGPgA== -"@neutron-org/neutronjsplus@neutron-org/neutronjsplus#8bc70ee2875298d7f45b3a58e05bbdb1a67a1951": - version "0.4.0-rc7" - resolved "https://codeload.github.com/neutron-org/neutronjsplus/tar.gz/8bc70ee2875298d7f45b3a58e05bbdb1a67a1951" +"@neutron-org/neutronjsplus@0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@neutron-org/neutronjsplus/-/neutronjsplus-0.4.0.tgz#5f269a926d943c4fba3f346b2a4b3f9f10d8206b" + integrity sha512-YfAC+KJGVEtQRTKAnWVGQEx8d+0UNBONNbF2DZ2w0LyLh6ffGboydk/im1HGjDZZJ+l0BjNF37x3GFMyo+dFnQ== dependencies: "@bufbuild/protobuf" "^1.4.2" "@cosmos-client/core" "^0.47.4" From 5e70584a57cea7e34404b47ecce68e97702d51cf Mon Sep 17 00:00:00 2001 From: sotnikov-s Date: Sat, 27 Apr 2024 17:57:26 +0300 Subject: [PATCH 83/87] Revert "fix weird global.crypto error" This reverts commit d58849be3d2a271228e05b79997deeb8206f9426. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d0475a9e..f280db60 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "gen:proto": "bash ./gen-proto.sh", "lint": "eslint ./src", "fmt": "eslint ./src --fix", - "postinstall": "[ -d './node_modules/@neutron-org/neutronjsplus/dist' ] || cd ./node_modules/@neutron-org/neutronjsplus && yarn && yarn build" + "postinstall": "[ -d './node_modules/@neutron-org/neutronjsplus/dist' ] || tsc -p ./node_modules/@neutron-org/neutronjsplus/tsconfig.json" }, "author": "Neutron", "license": "Apache-2.0", From 92b227c1024f6c0cfeef9698cc2ec07c5f54ec12 Mon Sep 17 00:00:00 2001 From: pr0n00gler Date: Fri, 3 May 2024 12:52:18 +0300 Subject: [PATCH 84/87] more debug logs --- src/testcases/parallel/tge.vesting_lp_vault.test.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/testcases/parallel/tge.vesting_lp_vault.test.ts b/src/testcases/parallel/tge.vesting_lp_vault.test.ts index 2f14f3c1..da558954 100644 --- a/src/testcases/parallel/tge.vesting_lp_vault.test.ts +++ b/src/testcases/parallel/tge.vesting_lp_vault.test.ts @@ -1094,6 +1094,9 @@ const deployContracts = async ( VESTING_LP_VAULT_CONTRACT_KEY, ORACLE_HISTORY_CONTRACT_KEY, ]) { + console.log(` + storing wasm file by key ${contract}: ${NeutronContract[contract]} + `); const codeId = await instantiator.storeWasm(NeutronContract[contract]); expect(codeId).toBeGreaterThan(0); codeIds[contract] = codeId; From c39dfe13eeb2da961233ff5568e1a0258d118350 Mon Sep 17 00:00:00 2001 From: pr0n00gler Date: Fri, 3 May 2024 13:44:21 +0300 Subject: [PATCH 85/87] more logs --- src/testcases/parallel/tge.vesting_lp_vault.test.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/testcases/parallel/tge.vesting_lp_vault.test.ts b/src/testcases/parallel/tge.vesting_lp_vault.test.ts index da558954..d33a6644 100644 --- a/src/testcases/parallel/tge.vesting_lp_vault.test.ts +++ b/src/testcases/parallel/tge.vesting_lp_vault.test.ts @@ -1094,6 +1094,7 @@ const deployContracts = async ( VESTING_LP_VAULT_CONTRACT_KEY, ORACLE_HISTORY_CONTRACT_KEY, ]) { + console.log(JSON.stringify(NeutronContract)); console.log(` storing wasm file by key ${contract}: ${NeutronContract[contract]} `); From 5bfc51a144f4a80ba075e75b3ccb89ac351fa5db Mon Sep 17 00:00:00 2001 From: pr0n00gler Date: Fri, 3 May 2024 14:09:13 +0300 Subject: [PATCH 86/87] neutronjsplus as commit version --- package.json | 6 ++---- yarn.lock | 38 +++++++++++++++++++------------------- 2 files changed, 21 insertions(+), 23 deletions(-) diff --git a/package.json b/package.json index 00b3c294..d94f33ad 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "@cosmos-client/core": "^0.47.4", "@cosmos-client/cosmwasm": "^0.40.3", "@cosmos-client/ibc": "^1.2.1", - "@neutron-org/neutronjsplus": "neutron-org/neutronjsplus#feat/sdk-50", + "@neutron-org/neutronjsplus": "https://github.com/neutron-org/neutronjsplus.git#e3458bd519583cc7afefd8bba7460c9993499c62", "@types/lodash": "^4.14.182", "@types/long": "^5.0.0", "axios": "^0.27.2", @@ -85,9 +85,7 @@ "eslint --max-warnings=0", "jest --bail --findRelatedTests" ], - "./**/*.{ts,tsx,js,jsx,md,json}": [ - "prettier --write" - ] + "./**/*.{ts,tsx,js,jsx,md,json}": ["prettier --write"] }, "engines": { "node": ">=16.0 <17" diff --git a/yarn.lock b/yarn.lock index ede08a6f..a779e209 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1568,9 +1568,9 @@ resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-5.50.0.tgz#29c6419e8379d496ab6d0426eadf3c4d100cd186" integrity sha512-swKHYCOZUGyVt4ge0u8a7AwNcA//h4nx5wIi0sruGye1IJ5Cva0GyK9L2/WdX+kWVTKp92ZiEo1df31lrWGPgA== -"@neutron-org/neutronjsplus@neutron-org/neutronjsplus#feat/sdk-50": +"@neutron-org/neutronjsplus@https://github.com/neutron-org/neutronjsplus.git#e3458bd519583cc7afefd8bba7460c9993499c62": version "0.4.0-rc19" - resolved "https://codeload.github.com/neutron-org/neutronjsplus/tar.gz/e3458bd519583cc7afefd8bba7460c9993499c62" + resolved "https://github.com/neutron-org/neutronjsplus.git#e3458bd519583cc7afefd8bba7460c9993499c62" dependencies: "@bufbuild/protobuf" "^1.4.2" "@cosmos-client/core" "^0.47.4" @@ -1847,9 +1847,9 @@ integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== "@types/node@*", "@types/node@>=13.7.0": - version "20.12.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.7.tgz#04080362fa3dd6c5822061aa3124f5c152cff384" - integrity sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg== + version "20.12.8" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.8.tgz#35897bf2bfe3469847ab04634636de09552e8256" + integrity sha512-NU0rJLJnshZWdE/097cdCBbyW1h4hEg0xpovcoAQYHl8dnEyp/NAOiE45pvc+Bd1Dt+2r94v2eGFpQJ4R7g+2w== dependencies: undici-types "~5.26.4" @@ -2423,9 +2423,9 @@ camelcase@^6.2.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001587: - version "1.0.30001614" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001614.tgz#f894b4209376a0bf923d67d9c361d96b1dfebe39" - integrity sha512-jmZQ1VpmlRwHgdP1/uiKzgiAuGOfLEJsYFP4+GBou/QQ4U6IOJCB4NP1c+1p9RGLpwObcT94jA5/uO+F1vBbog== + version "1.0.30001615" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001615.tgz#7c2c8772db681b6dee74d81d6550db68f2d28842" + integrity sha512-1IpazM5G3r38meiae0bHRnPhz+CBQ3ZLqbQMtrg+AsTPKAXgW38JNsXkyZ+v8waCsDmPq87lmfun5Q2AGysNEQ== chalk@^2.3.0, chalk@^2.4.2: version "2.4.2" @@ -2812,9 +2812,9 @@ ee-first@1.1.1: integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== electron-to-chromium@^1.4.668: - version "1.4.751" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.751.tgz#b5b19742a435c589de02f60c16618150498bbd59" - integrity sha512-2DEPi++qa89SMGRhufWTiLmzqyuGmNF3SK4+PQetW1JKiZdEpF4XQonJXJCzyuYSA6mauiMhbyVhqYAP45Hvfw== + version "1.4.754" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.754.tgz#20a9f3cc80e0fb6a804b86605e55da16918a58b0" + integrity sha512-7Kr5jUdns5rL/M9wFFmMZAgFDuL2YOnanFH4OI4iFzUqyh3XOL7nAGbSlSMZdzKMIyyTpNSbqZsWG9odwLeKvA== elliptic@^6.4.0, elliptic@^6.5.3, elliptic@^6.5.4: version "6.5.5" @@ -2868,7 +2868,7 @@ es-errors@^1.3.0: resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== -escalade@^3.1.1: +escalade@^3.1.1, escalade@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== @@ -4386,9 +4386,9 @@ node-addon-api@^2.0.0: integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== node-gyp-build@^4.2.0: - version "4.8.0" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.0.tgz#3fee9c1731df4581a3f9ead74664369ff00d26dd" - integrity sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og== + version "4.8.1" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.1.tgz#976d3ad905e71b76086f4f0b0d3637fe79b6cda5" + integrity sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw== node-int64@^0.4.0: version "0.4.0" @@ -5394,11 +5394,11 @@ unpipe@1.0.0, unpipe@~1.0.0: integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== update-browserslist-db@^1.0.13: - version "1.0.13" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" - integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== + version "1.0.14" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.14.tgz#46a9367c323f8ade9a9dddb7f3ae7814b3a0b31c" + integrity sha512-JixKH8GR2pWYshIPUg/NujK3JO7JiqEEUiNArE86NQyrgUuZeTlZQN3xuS/yiV5Kb48ev9K6RqNkaJjXsdg7Jw== dependencies: - escalade "^3.1.1" + escalade "^3.1.2" picocolors "^1.0.0" uri-js@^4.2.2: From b5bffe222fde150cf96172cd8531d02af2a069cd Mon Sep 17 00:00:00 2001 From: pr0n00gler Date: Fri, 3 May 2024 14:29:36 +0300 Subject: [PATCH 87/87] remove logs --- src/testcases/parallel/tge.vesting_lp_vault.test.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/testcases/parallel/tge.vesting_lp_vault.test.ts b/src/testcases/parallel/tge.vesting_lp_vault.test.ts index d33a6644..2f14f3c1 100644 --- a/src/testcases/parallel/tge.vesting_lp_vault.test.ts +++ b/src/testcases/parallel/tge.vesting_lp_vault.test.ts @@ -1094,10 +1094,6 @@ const deployContracts = async ( VESTING_LP_VAULT_CONTRACT_KEY, ORACLE_HISTORY_CONTRACT_KEY, ]) { - console.log(JSON.stringify(NeutronContract)); - console.log(` - storing wasm file by key ${contract}: ${NeutronContract[contract]} - `); const codeId = await instantiator.storeWasm(NeutronContract[contract]); expect(codeId).toBeGreaterThan(0); codeIds[contract] = codeId;