From b69510ffab189e7091b6a4a71745c03556c52fe4 Mon Sep 17 00:00:00 2001 From: developomp Date: Thu, 22 Dec 2022 00:07:48 +0900 Subject: [PATCH] repo migration - from https://github.com/llama-bot/llama-bot --- .eslintignore | 2 + .eslintrc | 17 + .github/img/example.png | Bin 0 -> 1801727 bytes .github/img/logo-white.png | Bin 0 -> 20046 bytes .github/img/logo.png | Bin 0 -> 9530 bytes .gitignore | 146 + .prettierrc | 4 + .vscode/extensions.json | 3 + .vscode/settings.json | 18 + CONTRIBUTING.md | 130 + LICENSE | 19 + README.md | 106 +- jest.config.js | 5 + package.json | 36 + src/DB/defaults.ts | 29 + src/DB/index.ts | 89 + src/commands/core/help.ts | 240 + src/commands/core/testing.ts | 29 + src/commands/fun/8ball.ts | 64 + src/commands/fun/clapify.ts | 59 + src/commands/fun/fact.ts | 30 + src/commands/fun/image.ts | 205 + src/commands/fun/llama.ts | 34 + src/commands/fun/owo.ts | 42 + src/commands/fun/pp.ts | 114 + src/commands/fun/tests/ClapifyCommand.test.ts | 15 + src/commands/fun/tests/PPCommand.test.ts | 27 + src/commands/util/about.ts | 76 + src/commands/util/invite.ts | 26 + src/commands/util/ping.ts | 61 + src/commands/util/serverInfo.ts | 230 + src/commands/util/snowflake.ts | 68 + src/commands/util/userInfo.ts | 99 + src/custom/CustomCommand.ts | 14 + src/index.ts | 78 + src/listeners/commands/commandError.ts | 37 + src/listeners/messages/messageCreate.ts | 33 + src/listeners/messages/messageReactionAdd.ts | 31 + src/listeners/ready.ts | 34 + src/preconditions/AdminsOnly.ts | 18 + src/preconditions/NoDM.ts | 14 + src/preconditions/OwnersOnly.ts | 31 + src/types/bot.d.ts | 27 + src/types/process.d.ts | 15 + src/types/sapphire.d.ts | 13 + src/util/caseInsensitiveIndexOf.ts | 11 + src/util/countDays.ts | 12 + src/util/extractUrlsFromString.ts | 15 + src/util/formatDate.ts | 16 + src/util/formatNumber.ts | 12 + src/util/formatTimeDiff.ts | 43 + src/util/highlightIndex.ts | 20 + src/util/index.ts | 9 + src/util/isChannelInMessageNSFW.ts | 10 + src/util/sendEmbeddedMessage.ts | 23 + src/util/tests/caseInsensitiveIndexOf.test.ts | 17 + src/util/tests/countDays.test.ts | 24 + src/util/tests/formatDate.test.ts | 11 + src/util/tests/formatNumber.test.ts | 10 + src/util/tests/formatTimeDiff.test.ts | 24 + src/util/tests/highlightIndex.test.ts | 13 + tsconfig.json | 23 + yarn.lock | 4701 +++++++++++++++++ 63 files changed, 7360 insertions(+), 2 deletions(-) create mode 100644 .eslintignore create mode 100644 .eslintrc create mode 100644 .github/img/example.png create mode 100644 .github/img/logo-white.png create mode 100644 .github/img/logo.png create mode 100644 .gitignore create mode 100644 .prettierrc create mode 100644 .vscode/extensions.json create mode 100644 .vscode/settings.json create mode 100644 CONTRIBUTING.md create mode 100644 LICENSE create mode 100644 jest.config.js create mode 100644 package.json create mode 100644 src/DB/defaults.ts create mode 100644 src/DB/index.ts create mode 100644 src/commands/core/help.ts create mode 100644 src/commands/core/testing.ts create mode 100644 src/commands/fun/8ball.ts create mode 100644 src/commands/fun/clapify.ts create mode 100644 src/commands/fun/fact.ts create mode 100644 src/commands/fun/image.ts create mode 100644 src/commands/fun/llama.ts create mode 100644 src/commands/fun/owo.ts create mode 100644 src/commands/fun/pp.ts create mode 100644 src/commands/fun/tests/ClapifyCommand.test.ts create mode 100644 src/commands/fun/tests/PPCommand.test.ts create mode 100644 src/commands/util/about.ts create mode 100644 src/commands/util/invite.ts create mode 100644 src/commands/util/ping.ts create mode 100644 src/commands/util/serverInfo.ts create mode 100644 src/commands/util/snowflake.ts create mode 100644 src/commands/util/userInfo.ts create mode 100644 src/custom/CustomCommand.ts create mode 100644 src/index.ts create mode 100644 src/listeners/commands/commandError.ts create mode 100644 src/listeners/messages/messageCreate.ts create mode 100644 src/listeners/messages/messageReactionAdd.ts create mode 100644 src/listeners/ready.ts create mode 100644 src/preconditions/AdminsOnly.ts create mode 100644 src/preconditions/NoDM.ts create mode 100644 src/preconditions/OwnersOnly.ts create mode 100644 src/types/bot.d.ts create mode 100644 src/types/process.d.ts create mode 100644 src/types/sapphire.d.ts create mode 100644 src/util/caseInsensitiveIndexOf.ts create mode 100644 src/util/countDays.ts create mode 100644 src/util/extractUrlsFromString.ts create mode 100644 src/util/formatDate.ts create mode 100644 src/util/formatNumber.ts create mode 100644 src/util/formatTimeDiff.ts create mode 100644 src/util/highlightIndex.ts create mode 100644 src/util/index.ts create mode 100644 src/util/isChannelInMessageNSFW.ts create mode 100644 src/util/sendEmbeddedMessage.ts create mode 100644 src/util/tests/caseInsensitiveIndexOf.test.ts create mode 100644 src/util/tests/countDays.test.ts create mode 100644 src/util/tests/formatDate.test.ts create mode 100644 src/util/tests/formatNumber.test.ts create mode 100644 src/util/tests/formatTimeDiff.test.ts create mode 100644 src/util/tests/highlightIndex.test.ts create mode 100644 tsconfig.json create mode 100644 yarn.lock diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..b0a5c34 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,2 @@ +/node_modules/ +/dist/ diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 0000000..7df96c2 --- /dev/null +++ b/.eslintrc @@ -0,0 +1,17 @@ +{ + "root": true, + "parser": "@typescript-eslint/parser", + "extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended"], + "env": { + "node": true, + "es6": true + }, + "parserOptions": { + "ecmaVersion": 6 + }, + "rules": { + "semi": ["error", "never"], + "quotes": ["error", "double"], + "@typescript-eslint/ban-ts-comment": "off" + } +} diff --git a/.github/img/example.png b/.github/img/example.png new file mode 100644 index 0000000000000000000000000000000000000000..08ac2afce87bf5ea62be1e9c38343f04ffb0484e GIT binary patch literal 1801727 zcmeF42Ygh;_Qww-r1t`ZKoWZI5SmC4DRvR-vx11_S)L6miqC?I6+2dJ{PBUJfQ_nx z(tGcrrT1R{=S;ZEX0zFnE!oZf#?QL<&Ye4R<~zIOcW2L>dHIUV#svqo3Lv833FF61 zBx;(&udDrhIOp1>3u1^8Xu_CLlOAhA(`U|_(Ij!mh$_B>1Ogxc0w4eaAOHd&00JQ3 zCIp(giJdSL1V8`;KmY_lpdJJ&>v0cmaXtZzlk=Iody5e9?mmLB9|S-E1V8`;Ob~F5 zKlJ^)hAq*20ZbT+ONxMNj2Q;Qoe1DF<4&UmTR{K>KmY_l00ck)1VDfZK*Zx?00JNY z0w4eaAOHd&00M4C03zPa1`Otc00=mZ!0^R?Tm)YLr{P9JAOHd&00Q+T06|}0a<~r! zKmY_l00ck)1V8`;8i)Wyd;@_;vmgKhAOHd&00JNY0w7Rd0ub@_CFi2|4O+D9b@&3f z=-|LC5C8!X009sH0T6Hi0SI~rKt+`x00JNY0w4eaAOHd&;79@x@s6a6xCaHF#z00JNY0w4eaAOHf5fdE8&V;DvB0R%t*1V8`; zKmY_lz@rFwJEFJY3%)*Vi!VTNQ6c5!B9%1o!C!UB`G ziI|sH35)x@+-#zh>f-(ZffODQMNv`BA?QsK#6=JQ0T2KI5C8!X0D;Crpg}}@eqIhG zpE*UD8EH0i6!9;w(ZOO;S*V-yjzMcfy z6qi!p(^<5(O$22$Yo=;3mRHZ}aT^GL00@8p2!H?xfPfwWr>%NTOHHPo+cr8(!0Yu% zwIOXun@G+f(C2hEbxz5pZrS;|294$EF5&class;aW^4%>@KTiIC|R903-Vd0UsSBM%+5=am7rNY2wv^64>%9`?K=$wq@ znXCjCLBJyjtW0{M488y!G1TZJ2!H?xIEg@$#33Ubrm`z5E9uaI-7Ks#ozxxU&4h(V zP=`+4scBQE{Rm;)5afaY2!H?xfB*=900@A99SAtgKVAg<{=GY^!_3&hP+O{yhX}Ey zbJw0u74lv43n;9(jQ)-aqfP~d)FnBenw3=1i5P#{92QI!O{!D(aP2K=G-C zV@KQl1s>Anm2*lTUdSos9CQ zO<^HadA2$I`z^7{n;-Lf=j2gbT9Gp0bd(=$4GmW9Xg0+c7g4*MBHG3Frk(YVHg~zYx;UQ-xm*ExQG8Y&^*xeF%X+q= zeL?4f#Eb;@|mecB%5z1Wc zeoO4~sj8%FHYDFYBK>onFF;IX0i9_YNM(LR!}q0856Yo$6Jx2+tNNFYmIb9W;7A6Y zVRsu%&>PD$#SYg%00ck)1V8`;KmY_RBj6B0FTU|I6E3bS-rnBi>+4G)At4kL6htyx zpPQS@f#lP5J3d)vs`*l~b5x5KEmS*Ac*Z*~FHf~qT3X6GOqDB}#I}TX9nDu}rxIQw zv`^*JqCT;7n0K)9Vjupi_9jz&PCoU`&7+MxTP|r>YPJ&d+gnG_@2w-Lif7QH+0Xx) zO($vm&NGyh*j6W)rM%SJ<46uIVX?nIFo683Drn03Bue0ifIRZ01-;|wcz`d3m6g-v zO~3_e4{6DgCG`FG-_v*BeMgfgPbLxE_D=G^aR2@H zt2U&qrAwF6yYIeBBS(&;z`#KDKq0m{JDSZeeOf31FZ~sFnw1@+Ro6QnJ{RGo$I%=r z=2`UBt;3aomjW`Qy{Sv2nsM)*TYJ~6rF~ke*?JNDMNPdZ-Jhq)IW6GXei87JvYUBR zE{l5kHNY@gVpn&5P$*yvHicF{Y)Bmk`C%l3YwXOwI5ctC>Iy?^aSj3?00JNY0wCZK z1U_z?y$C39@aN^_Rl?@9QE~Gc#e3K3yJg9684GVW#togjAH8H2N$gZHK6jEBQ zYz$y`nE)!IlYW6z+N9<))+zsLVIG}dOcWkmW55ep#OtSuvu-X$1`B&Dxlm27{OY^R z*%ip!>iSbT&;K`}fB$n-zbTgZ75vLU75Ve8ESh^wjRH6U0T2KI5C8!X009ti7=fDV z(#B?FvnLVo9XfQNr=NaW&4&B=`KdguY7yGT1ia>kBlla9B+O(5i%fCV(GPE_)h{#j zT9RJ~CQX_|{{H?nW5x_hPEJ-EQ?={RMJwX;cbUv)%T>G0*dJX|sc%hDE_uagg}HaB zbEd!b?eeZRi!xct@90|d0YYq(RBqvTRhP#9K>!3m00ck)1V8`;>_On1(zUU+{Jb2s z5tI19UwY}KGT*q=dv@U5-VtYvR3m^XAmOdv^*A4K*8CMudA| zVIdtpe3*_NJzArFsat0IrGBYf6ZPU+Gm>3w#*Q6J-+ue8vbA}O7zzpwwXx^c-yXs& zyjjBM`d9y2kk1b`OoPI5N@`UWR?0!AIpqb}ZK!Isp=H#v%eyJtC9g`3vUAS0Mk|kZ z5C8!X00E7_v@N$M!WTfJfp-u90VflfK6BO#yGh05GpCgKk&%%!aNt0lq8A0edGltP zGiMI%-Md#QdRdJs>RVRBivP<44?I8@UwpATw{~iN-@bkH-h1!SiWMu=D%Y7aXVR;$ zzN+f#)vFgh^w2}%x9^H=%uzuw35)bY`fb9uUpc0Mp>*BNhriYYIoRyXU( zDJe-gdK1EwP zgi|K}oDj_6aJucwp-7H`d0=pRDua)Wy@v+%fdB}A00@8p2!Mb|0(KGc>FKGuMl^pJ znNb&!Ei>LZIUJUSeO|OAWyBBX_SgN7aZ*`0?WkJin^ zi|9Uc<_yWKdKm{&H*~R)hXd^)K}30UbhHxkGMg_m{PKWs{q@(=%9Sf=_3G71)EhHO z+SadIYm%Qt)yN)(&*ifg4*B9{8hS=^5_Zsnm7x8OJ z%3<-&!5y8FthFo0Np?A<^JoMFKmY_l00ck)1l*K>%_2T8FSlM@*L>*ZW^sc#aNq## z+OAi`fu+1c4@=P3!1^ZfJAD;FDiQ0UU73ne5ZP*zr! zRmf2~jRLhIN@buWuhr)hXAKgZ*erLL}wt1-CbM zk29{js$I_LJK6vN5C8!X009sHfyO|<=2`h7cC8UXE-w+$vH(?fVUlwZ+9IwE1-QMy zNs#&i4u2@SJjtS0X;a!4pLs3m+n`++`^3jyvrYQoh_oe)qtb*qqGsFbbXB`->lN+> z0T2KI5C8!?61e2@Y1?(a0CubwRe^v52-qy>OG}E?f>R0aD5CoO^UtSt?b<1EFM>Hg zKVL<$ae(crN<+aenIhb^Bs)oo4H9}%{OM((?eO8lm7qU;`ZQ%`W|H&)2?Rg@1V8`; zKmY_l00i8HfXyPlva*8u_U%h|-g&1I?+NUiF77QNq-ECp(4j*lV%bqiehH9`rQ}_b zJUGZpOR|7g7SqZ`RWchd?+-uxFiD(w*`Vsf4?m@eTqY00JNY0w4eaAOHd` zPrzmoFD@z*CQP7-6DR88wQIeWS#a@Rmw4`uNFvHZLqn-`>(=U_LBxAWNr`f|(b^Lc zziQPgwQ-cV-N?g*{9@3eMGNZPySEbfBIc1m00cn5{Rxb__A`z&n?MuBjGE;By+IE^ z00ck)1S}*ledeqgHm`b>DREKP+SIsy+p>~1BO{~6RJs23`W}lim#2x?*jRe-!3QZU zEKId8zBb}7BT8ONqV(md!q}=>u~}34T6w&K00@8p2!H?xfB*=9fU6U*d1_t@AJe^i zcS>O2nwXdvwL_B#ZP}?wrtR0RT}v`eZz@T7abh1jbf~IB%8DqLe8YDU-{O=%YSbti zHf)$qz>83qVDcwUoX|BTF)zoC9jlz=r5;JSxw&cwDv5u&X3ZMAKV;|{#{md{00@8p z2!H?xfB*+z6ozt`p-ZA(8-f0sa301YP(k1smY(WDV5oB3Fx}#h%|Yl9_yQf;W{k5wFeIi%^%9wfEk8uUcg*t8KL;D{!^lsKm`?-@bjc zY}qpPF6Z(J3J%nY;~fM*00ck)1V8`;KmY_>o`B6F-rqlf@^Z6Pm>Ln!#l^)`T3V`e zhY@!f5%ZQNsl%8ryW#yJ+@-8+;VRq1N(dTptC4#(7aF-ogud3k2zFT&D=%>g(vtK6 z2?Rg@1V8`;KmY_lpz#uz-*wsI#_9`Tv!D+Q;u-f8`wYGa?j1XJ=mfY3b8QA*|5(b& z?EmrO$7$=7IymnJItoz4w%#y|GI5g}ltZ%NDO9 z=H))QW=S#>@N$p6`d~@>TA7jO52p*pjN+&})3q#{-h1}wP7mCF58Zh46r1Y7%^&~* zAOHd&00JNY0I>j84{FHvMf=u7k%Nph?oMMh=T<9|}GJTyq89C^v+RFfu6QgP=+#LFUBu}vcD zND`Y}!L6oK#||`j@IbcRmpSdHzt;X;qxWL_fPwv~chBz3s)}~+-c1`fZ85thphNq1 z_u5$cG+dRRjTvm&0}S`UTys<>RYDD z_wV0tR;8LFBZ~g%r=M0&5i%t&!RcjMUW-L3PZ1ItCo?lsRV6kzWRkv5opKxX?bDOi zZ{Dh&Nba0=JGF>uNeln?y)sQ~zyH3wNfi2u6{}U=EjRy*5)%i|JMVsI()`YyJ5m4s zed*GRFXABmAsn-FH}B#VLo=R!oW7m^9sRUqnaTTc5d=U01V8`;KmY_lz%>cjO~eNU zhf-8@3(CpPq#u9$QEk=Qy?b{hqD9EdOSXP3EG(qJz(CrxX%nqmw@w!eQuE2N1(OI~ z5$;h@QOd7IrnDu=LxKdkmnrR~OP8vtd9hV&ZpaiJ8L688&%=-Fex}II&Zf~LhU-MU zgtzJ1r87P9*i+0lN0tBMkF_*=_KTFr)AbuRZZ_G4E-d7K`SmxN_45De;&Wbh=|yzy zHCJ%}{*9E9nr8BTTm%6S009sH0T2KI5O6&Lc5#x|y45dO32GKv9&sd6rNxm zoIn%CjGAPt1$E!wg@yQl{{3paWF}rqX=&*+_mj_bVqWr(9z9NBVPRSk8a;9Zty=wu zPRz@N^vn#}vSk|$9+apnSJy!r|4K6N%WrjJUdk=|`8V}oHE`g7x^6>02!H?xfB*=9 z00@A93lp&0ti1G59KPccI?&O>`)T>|<+OeKcDmz^J80avamsOC++4)HMP}wjRNFgA zo%#9sBs1IMW+M*`X=!P+c=2NT{PWLMzKHy`?K>-5?cKg%egC@d8fwowHR-3RQ}3aI zqC%BbQB|8kd1Zy}mkRk+p-t;ps^Yv>58kI=4aK%K{#D-P;X$r9Z_!HGXz#X-)%WzX|239vah`Wm zFXh|6_rO7ZFgjZ6zJjx>cWYg+Afu|%vR$++s0u|u00ck)1V8`;EF{o-TBna4?+aj| zF(}q(2-scF3z>v=9ocQBn6k4n)go8fj`ifplMaU_v(4g8BQIkqEIdNlX6%|P=9N{H z^Dh`hl+OO_hM{e2wYO#SXxh4chppA%eh>fw5C8!X009sHfd(L8S6_L3`#W^%PQfAP z{JizAHN>&lA~v~O+Ou~r4H+`nsM#SQAx87fW%ljYhr+_cY3tVQ=8EDv2!H?xfB*=9 z00@A93leach!@wE&Ru)5Sd3`!Zi@|Ki`e9DY0(cqQbK$jO__W%g>d*tNzHi|uA6SW zp67w%arJT6bd00eygK_0 znta~l?B1S{i+GX{ug0i^^`-p$o@@jG^Q+rzkVSzFUk&L`GA~nAis2zSV<2Q|LMf zfB*=900@8p2!MbS2sl;5YyAld4y6wKD(2mh(s{Z$D>I#n3JbK$R=xWN1X6fJ6h*P` ziJyOfRrfab!bu$S^Y`DDH}-C#e;@z?AOHd&00JP;Py_-ZA8y~^z5q^hm^VjR#C;w+ zbIa~hMSNUZQcUILWjY6Yae(*sZbm-r^zF~WJuoPkf`daK;?04@br1jn5C8!X009sH zfksE5L1yKRQIr{Vc{Qe0s>b?>JP-f@5C8!X009sH0T8g2fcr&Qx3$N(9|S-E1V8`; zJe;JyGJJ_hJM2-uSV1id|JqAm~s0T2KI5C8!X009ti0s)A4CqPCMAOHd& z00JNY0w4eaAYe}d5b^e;iMl`l1RO`8PeMR1_yRbNFKPw>5C8!Xa9aWp^lm$JFdPIx z00ck)1V8`;K)_Q8K*W3M$fMsN00JNY0w4eaAOHexO8_F?p+ooY>-NXO7r>#2Q8@^J z00@8p2!H?xcshaUGiS|!s`vCy0s0RDAOHd&00JNY0wCaa1R&zwZpdIT2!H?xfB*=9 z00`6|khHwTRQLkaK;l^^5cHlk-smj|fB*=900@8p2!KE%AOI2H2nG>d009sH0T2KI z5C8!X@GJrl@t!r_=q(6<00_7Yfvp$bz8}5-E;Af31O!09jR`=|yYb+`bPxam5C8!X z009sH0na1=5$~Dfj$VTR2!H?xfB*=900_7-0f=}v9z2-d00g@KJNz;D0yF@4GzkJA z00JNY0w7Qq0SNlK$RHmCKmY_l00ck)1V8`;T$BJryo(MD%mM)r009sH0T2KI5b$UM z>w6rSWRWib1ieRpPSAM}009sH0T2KI5C8$UBrtvEtQk=9ZaH)?8U#Q91V8`;KmY_l zz>^6;#C!7SqwgR90w4eaAYeZNH{ATwHj8`#?AIh}0s#;Z0uc209Do1_fB*=900@8p z2!Mc_5rBwyvjKy-AOHd&00JNY0w4eaAOI1M&j1L3fJYO^8~5L0_yTzJM*y7%0T2KI zw`nlJ-tI_IAqao~2!H?xfB*=900=mi07SfF`J#3Z z009sH0T2KI5O8M#B@e#$D|`W5d;}rrU3`FG9teN{2!H?xfB*=900`6~Fn#8%8Bp@I zupk2jKmY_l00ck)1V8`;T$_NmtC-iMNfWB7s&W-`U`GQIh=}e@@$nZ?aA-Sf+Qhlf znUz(Ql$Udajvrq}nQ7Y_kOGlpc>eOl4xBmcTWMryy2z>YaP}yR&i1}W<@3W-}yWP8E``ZxpcB6@k zKmY_l00ck)1nfzmL1yLSI$*j_ z#eq#|#{fT~f=WuJd>lK5N`?ysD4E?_RT^k1x@CEvv_2eX*(WP}hR9E2+y(DYS1<4AIQyv>`j05;vN^ z&uqnRUf_vG;wg~Dd0BZCC8w6s&%b5z!qg&NuLcebp>d-kC@9E_M9iN$Q%Z}Lq|wO} z)$AsWkEHVkh3d-dAAGwgg?8;M(9gm#2!H?xfB*=900_7&f%=R10bO1iYNangOv@H@ z`0x?R%*>Z>R`ES%!l zr+(w6EpEN|Ra{-@y%zjoV2OG68A{w{ncGZARt3?WsYIW#sDCS(3MQPQz?@2#{ZKi> zFmJCW^!36NI&q?e2K5i2TmRL9o}YD`Dk`gJzWvlaoeCCY=0w4eaAOHd&00M48z@e@+ zLBT;vh+lH?1e$#7%~V`m%>M7kC?Y(ZVq#iSH2coCXwiZ?ckZP8=eKR&K}(kXLhroy z0hN@LP+XhVCn@WY&r}1cQY*(@LFFJ_m>ha$l+6O+I@eRmhI8+rA1X7 zCbFFVVKE-y=S4xmUL2~DX#D61`gvt0ZQYtjr6rY=n_Etce@dfM$)z-!#k{1#!V1bv zFH^6wvMP4xI(J@D?AZ@U9{r(0=Rp7jKmY_lzzqr1e^%a1XA|P%l#l!9Q6t&aA&`z9 zJx1Tm|BhO=Xs#BtcJ0zx`NNAqms$CQ_%_t5XAk;o?K<|G-$JX`{87Cq*2kNw3K}dr zrkP%vzI>)NN8}m6{_X5Kl=yY^46x}tYG3X0MIPS;iOmWg@y)~h ziH7qlmQQ%bnvR!I0NdB&(7A=U8!lr%{sb>dd^?9W^kvteYx%q-_h(-T^>`Q_o zYaL641%)b-O=YERVpiI6W;!uW7OV1<@lW;l!B#FdyVxJRM*wXf>PLyo3vKGc<|*te zeoF+`!NR+&oZtApi$4{P3#Q#SpQi4I_?G}l=W_&|p+U4EjDJxWFaG7ip8L|tpLTWQ zF_l^D9xUcbTvAxjcMG7+kxeP_g-kx@hXzaAQKc>apZL00aMO|D&1m_WEU}0J0=?9l zi~Kz9k3q_1!5`?)eLw;M5C8!X009sHfyP8&`pj7~?5^ZvS$V(k-)EJxyR2Z;IgD5XQpN5||l=}7U&Fa1#z5UMn%30pslsxsQ4wg@Q z&rNyj_u1m({p?uJN}f7%SQ;CZJpIKhKu@MozuybUyR>>5eZ!qRb$xR<6|+4_vtWkufJ_RT2o z1`a@f9{bP)SNlJy+YL-nd6@Vt5$E#ro1)y!sUh1V8`;KmY_l00bHn z0lSL$ii!&Q?e`VbsZ&Sl)UhMSmpmurMbPWN^dV|uUHl`Oupm2hn2B z3TesGUpO3zzRQRH-7b85hJ|hqwl7v(Y|aHf*DUtC^)wZ8OhvOP_N<6MZXle^-dMZ9 zhHF^7KOo_B81x!;-rvB#bV#+2Mb|EDLyn``nS4VGKh#xGdR7_zuq>U993J>Nq96ls=w!M#Y}Ap)0r*1V8`;KmY_l00dl)fL%qri17pa57DfbUsF3g z4N4qHe*S(ubLywuX8bsoq=d1NS$auQUS8t&E;~cX_O7Mn%$1J$l6rmCqDjXzra(W@w7UF`<}Q}-HPEA{8f z9*|Y871Zv^(-f6b{ZO!@Q!^6hlaFtGsh7Qd0nD{&Xrra)&&@h!vgo>XIlL)BE`^4A zQzidOAn_>cN}qmlx~@ye2LTWO0T2KI5C8#}Ct!C$U&gyUC7n1)^A{|nMT>qUAKzva z92~4(adEBb`fIPImb_C`A&d8n^bE?&%crcYEXv?rqYfTAtY+b5c3)=WMc_-)&Dy&> z&YA}HSy4#ao?v&FZvK?s!b>NhYnC#7w(&wBI@;M=y(DBYAsTvt;mO?*J#OI z#k*#|5AR?^pYj6C$>DTldIUv1Xq}&SZa9nXXV1F9ypp9=TkrR{Qx%jhaU=)((}o-P z*8&MnFOg>Y$gIEpk}d7zI>f8rzW#WSsC9OY!!?mg@SBMy?W9_8aMVr>ej8RE&#n1 z)w^`jfgwr}4_ufFys9Xp<6H-n^pd5F+{ zEog|D{=BfJw0B_)hg)G6ndvE%_@{ZF_YLz{z)Q^bk66HeUNf|!t#HJDeOr7pYM)g} zktw#h>zJ~ozU@Rr_on#xizqm>olR~wrfjS0nz+-*Y`h5g%(U%w6+=DUZ9u3b8_8%>1T6iS43?PTBQ328&NjE#zpQd`5OrlhKcwYA%I zY))`?C3U_wnfAZaoM=)Im2N5~<#uDL*)2SK|8Wi_{$XD5o2tgxHEG)(GyBHs*3YYN zJ0hMTp!G@O7z9ATMF?E-S={@qWh6%Brp;R@H8oACa`BDvZt6u|tjgt@5BucEOG2B7Qjd&^ zplF`*59aum{{H^FV%CS6@pUh6FBJpxk%#W5o;|u#ix$l(GBSdFd=jWv&mQbMkwhtH zQk1j4p&d8}0T2KI5C8!X009sH0aqvBl<9Z{f#U*J@~fiU_=-vq>|tS{bm=7%R7jh2 z4tFC$Jv=;2g|&%~kE50>#+ye+)57l;)9K`7n*PuOl)%pSG7Vo*QK@`r($dmY9Lv3X z_tS#!7E#9z?Wujcw!Hmk74_)ejpE|k&`md9PX`Ylp{&d-r%uVc`iBAbH97*Tu19c5ziCjW|O$c$PB#9o@+_pAznm$LVP@h zMTXOEc6J}hV%^urN6pM@h}T~F_ex$sU;xSN z`^i(Mcq`cAI)%BE6=C1GODDSbo;%5(SJf_E_A9Mj_YbdnEv@rD{q}GS0w4eaAOHd& z00JNY09% zhhI@qp3fB*=900@8p2!H?xxHl;n5iMmWSMhx}m*iJ~VxEoPzI`WEImu1Fh+S%sKmY_l00ck)1V8`;KtP{BMTKQ< z;rjO&J)S;u)(odAd6`l_dh9r@->{J#)$1SsQ5@qX?xZ-q%Z^Z%`0AWKbB5M$+H4er zBQneQHxwig009sH0T2KI5C8!X&?g|iHugwP74c%Q_}2Wi^cOmH>U6zhKo%AjQU-7D z8XFVCLE;0hU%!Q;I+=1(lgyhH*45C8!X009sH0T5`!1cKfU-Q|J40OpsBI$+F2WVdVAmV$zU zc((iui|tlM18izD@XJ@MqGFzjm$;K6?ze2+PN^wr)RMP)_44wv$im>@Ad)R#kw5?h zKmY_l00ck)1VF&u2{ed^7ic2nyL9fvZZB0TjEyldE+Srh>%aKw8_LYgVi7Moo&$20 z^LDYk?047hJv4AYf8}B$_Z!>3Rc7_&R{&$z+tWCH2Wm1pFEH zjTcuQdj;*(w*$u@00JNY0w7=;fy9`>%{|Z;z&2>O8w5Z=k3fS6dJ)#AlUZc%+fV)b z^_3}l@?!BVt}ptcUdqX~tX2H3iFD0&5$hQlnY3-&cG|=BbZDDE19*l$Iyy=Td)YxM zEj@!aY}~{_?03_Nlcyo*HF$Uj0T2KI5C8!X009tiYXS`-;)R%O`TFT+^XS;|;}j7d zt`@E~Zyrs7fq`m)Y6ZK*q^G5`FZ?zt5+To`-B=nrWH1dGGKdZyJVaYr(4XcVr)1-& zXs*l0$A{wL+K{iWFYiPpQETiIyVIB*$O8co009sH0T2KI5C8#Z5oiz*FM_o=%{t;T@J%)PI#4|VO*nYwrDN)ls! z@sCR=I5?O_j~c;YDVtGQSs8u*!%x(d>qi0s5U?A8*IGsJuV@K0Va%vWcB>Q>fdB}A z00@8p2v|>`K?J>KW>{z_4Ie&?{CL*9fW`Rt-~UM6SeW4#%7~ z=I1UC29^90w;K`nvgkD>C6$^tZ?0zdC10Z5Bqyg(S!tQpEZ#u?1V8`;KmY_l00cn5 zy$MX8Icr9P&R2`ajHqvae}D32Ul`f#Nv6}q(LE|MQpKk<=F~qUtuh7v~@V0w4eaAOHd&00JQ3jszM^#Ea<8&COF&?s6=b%BM!o<+bSh#k6hv&Zn;$ycE6w?)V9X z%^&~*AOHd&00JNY0wxJGsDDjnW+tVkrBQ5bE6U?olP6A`qF~-BN}SxqVg3w{d zFd^vqL4arSMYzjuQGfrlp5s>Lt5;!R5xq6%J^E?MGLrys5d=U01V8`;KmY_l00i8P zK!b|-G@eD@zyAPrXy1;Kl1^|Knkng1P0(0U{g009sH0T2KI5O6Ai!atI>!WY1)$UVI=uh=#T&o&eUagmYT zn`Bmf>9Swc>ePaQLKTKa0!oTNPdah3&RKc6PyFknqodXR8#irH;{MpN<0SPoWGX1g ztJS=ppMR}9WPkt&fB*=900@8p2zV9&Z|`O{ceqL7kP*fswcA{^WfjPRR&k>dK`(ys zvH&)Ww|L{IExzqqk~otY>?R{Gb4mHdmzPm#9%4(HV}Kd&=<0o-iRU@i!N00@8p2!Mcn2{gE` zynVZa+UiSS!uYY&u3cMNwfYa*vuAI8tHFIB00JNY0w4eaAOHf+ATWLAtQnY^cLr%Y zwXto>dXm?LV@4aTQS!AiMhlq8eCfsi($w20Q*5gk6Qyto1V8`;KmY_l00cabK+d%C znXc>$07370pGou>1V8`;KmY_l00cn5%?UunyZHdZd=LNu5C8!X009sH0nZ}<5$}0p zjvj*m2!H?xcmjcIzd!k`EBgX?!Wf{BAmAhdSoP{8&<)v4aBwi)eb*f{=7P}_8X7{! zjwjKVUw%zLEm>yLEb+USG~wdQ>BfKEK;y=ZA*pNk?maa7wKuUk)+9Y#1OX5L0T2KI z5C8$k5rBwy99x&D+0W09KKb|q>eR7=&K^1b?{m*kGanyXwCD$2eq9IOeDyhnhllGf z_v_n-KAHPIUH`9J=-9F2x_lgf00@8p2!H?xfB*REMz2!zF z;Ip!_=->A}NQVy}p~<)1Om|G3!mr7+c=1nEQBh&CK3`uydg|$C>G$7OP_I5c>5bQ3 zp`f53nlkxTdU^&g;zj}iyAgQv-EE2R1+W`VR0IMb00JQ35d`2X?}o!%Sy@SSy$rh} z?lh9V{OVif5>s4UOdovsG3DgsQp*-CsDHn{hPTu@pZ)rqv}EbeR8m$-8#ivIg$t`^ z@&^v=U#l!KKmY_l00ck)1V8`;98UnV@{VV0_ZFr<_9Xqjd}XbAC6>J5jD4H9Hmclx z_uftNGEA*o$I^z4n+&sSoag1{);K?O_^>*Uij1t0j}s680T2KI5C8!X00HL^fQYx9 z^XDzX7rK=%fXw0>OA!$f#m?2!H?xfB*=900@A9V+cUdJBF*v z)OzaVDQefQExkJX4f=Ne0=wANmlwQBI(F=sddL4j00ck)1V8`;KmY`sOkn!VSu@}y z?_}uCZf@nOHLA(mZoQersojUe)r5ouQ=dM)>B%RilZ2r$m%4Q6!f`7@$=BDHCQiJ9 z#*H1LZdtx!mAPAS9RxrC1V8`;K)_A}a_k^-T@gBx~*2ee#Vr^w{XZB{x?J~9XNQ1=KtS!dO0`*0T2KI5C8!X z009ti76FKOXOV88cJlM{>84vG?&K8S6>1cMP~0s0T2KI5C8!X009sH0s9kZk~m~UmHn$ljj1W8 zYe5JNJ-4$`t&1+0p>6H@$fJ)N4VB}9Cc`8U00CDc(C&in{I6jGO&Bw3lB?MUdq4mL zK)?kE`1(~x5V6G+_{!Tt5BGuq2!H?xfB*=900@9U0}z0SZvg0M5(Gd11V8`;KmY_l z00e9y0RMPf=r!_t7k$5&jvhTmJ9h4BI(p0d3XO5zKmY_lzeHVNIJo__%-h%)LfIuTA z072h~2Nzuf0T2KI5C8!X009taoCF}^8|S#9S0DfaAOHd&00JNY0*#meM7+xm?wT<0w4eaAOHd&00NDSK-%s%o`Elb`wl7uz59+GEC&G)009sH0T2KI5b#g}-X7X- zbi1Ae%F4>9w4{j2D=O+)18%c70dFra^6~YjX3d(}yK2-20w4eaAOHd&;Hm_s&zv;_ z)A6o4Ixc9JsQALde5iOA8yk75l5vsoK>`6!A#h>j9~0mU;3=bxeu4l9m?Ho|Z;lYI z>j=n{Jd*1Y!1%cC*uXLn00Gx0(4~Ab~#KpCtnKNfJmhPY*9zp;j-i-!&P~t!uH+F2D7We7d zgRZ#ZvO2HhLIV@H>bY)T!55%`2chof+qZ8=UcBI-t`r^~PPg55b6uAkB;OTnvK7SL zcTJ-wo}6w~HS$3A_+yXIiQ^||-q-WV)n`=e8n^oN-6~KhY?eT`u3hMb=V#KkZQIP2 zwYETA<8Ey|C=UY02td#qqk=pT009tS0ud46{1APiOR;c8n`{O2^*7(rhaY`xRW;$^ zVH6x3ObZwNKzn!Zp{lAXtL}Gp;kw4HK7Dt#?TxuT`8DYA#~-E7Kc7d77A>}WSL+&g zyElXiJ(2)I*LdWxJFnB1@vj6!69>^_PdsT;qg}gpr8#fEsp`nd%cZL(UTsr-xETaM zz;y_mIC0WyW3*pTDk{pYzSos*s88Qr$$odYW!ha+Y5n>Qv|{CIckc@9_do(>M10!~ zrN6@$pfP+d-+r)ce;>nJ@lL)Sg|*>A%5anvHFIVGP?reA*k zjk0pGb=O_xVDH|&H0Hu_B*Omr7o6)C8yOi%Q*NJ3Uw-iwok>39bR@q1e(XXpoj&^D zBRYMie(eVa2GW=@qp4lHwv?ZjPdoSQp$-3Rpi2H+ND2xHQlEp?aj}%2n@@lI`4{cq ze?ZsQM0W8?PEMw*tZW)TZY)VT`MfOtaS2DyDWt)J5^3PT{!~_8PAgZgp#ul(bFa6z zH}&b=i@JC3MiG$_l#`Rg^{=L5$Bx&sEi*Gq+14hmH6@=(rX@?4Q6BeIOFrJsXvE0# zsY8eMR9aR_hYuamE*X9A)vG6+ciu4NdUM0|*Q&@(3l{uOSJoUeT|vErPMtc@`NM~i ze}F&j-Mdc-3F%)^Q88`WyhW8X^_?_llU`F~%a}<$=K3e~pE`A#($mvv?AS3>%zgNM z`3kdr(6>=L?#kmE#lL|3`R7`drP*HBn0D;gfkvD^T$R20>Z>R-Ba4$?#%RF09D}jQ7yjoTG z`T5t%vnE6S*vsOmKmV%!LuYtz7he1o7Z*pr|6cuv^sYPapniRN)25A^DK9^tWWlU= zGjBR{=&-sqCZ;9Ldg%o^dGaJ}+O&mQ#l+C$$+yzlb?cO}K zBElo+;fEfi+ow#X*w(T1_uv22xL1VBt+(7l6DM6sowy%Ij~rneYDdY5j*h0$7mT6> z|My*u`{hJ_0l4G#DHIeK#Pv+1abw0%8H?1UbEd9c5N~&OCTvl2}|9R*?)T%{G+PiOG zogpWUea509BI%V^ULbiG*s^6Si>)FW&u#kn_^{YMNYT+z^y(`wQU$Zxym>46a{e86 zOre5;0y=cKTIgPW*`+jKK!2Ka)fJSSl1xcSCuqc|5!APLZzZPMwQoy1ckO0Zlt>=O z8`VQVK|!Ii-==#nzm&#aIEEiUPttK7N9}=19!B%oK1ou4-+q1Q8WwYDEGUm1J4VBY z4W-0^18CLiHL6T-a1g!t;(sYVK90rnekC~j59~)VEnCvBzy8i+lB>$;|F1cJ*5X>X zrndaxvx{9fBndBh@UeuMeqC~W{`u$8U3X5U<-e~|V>p`m-O1n4^70CPI85g6;VClr zoit^WVSBc4x1@hke^^)uf9`LjxHhf1Py2a{lFatO&`voY$%0(|efw+eI(6CHm`3sg zU7I#-Sj2UtJ$v@?16H|u=(NRdTXAiaNpq(s$A9-{-1qKAtyYIeDt5&XJ!B{=>=;!B0Z@m5*FI4-QZJ9>{SuDOY z=WUvH=UtSWTl-NL_`KB9b z^_o9;mgXKRDJiK@MrKUjc;j{2xqBDg_3wXEYH~^~|6F;Xdj0j;^yZsysae+kEGpl4 zV>aD){{u>}Nrke=^3FS_(WBEJqm-0Xdj7eY%xV{XICpN1_T<58{e}&6<&{^^`|rI& zG9&!+FTdz!(rXkpIJt!vX&ya#oL+uqw$8?7KmV%6T8d7-?H1a%{~*2g+8eq%5AuWF zBM<+FxouLjeR81{KlD94Vj{`;CftL@shrC$AdQ}Qpr>DrWsrRQe8K*^~oD(~RILn<-{|TvJdlTyLVnN z15;xv<14?)TypUQ_K#nr##pMe#csL3zP!wRPOTX?OZ#Aok9_70lcVZ2*LOoZ--9b(tDZpFU03Tsw(p>f6+^N!$$j^yx)AcI@Pt&IsM>z=1>5yHC$r zwsjkQ$wEecf?YCSGY(HN%DurAHolh-S0Eo%iLJwZyzscF{!>SVR=l>{nl-6#gS% zY_Z*~JWDS#zS19YKlzg%4t`&;f^OjlDJ^yC*pUt#I;dt8v$L~l?LU80^XAdoAlQD&B9CR(od>(^KJ3xIZ?Jlv(H zXYjoPv@A92u8Dcc%*@PG4;1=hUgc+GP(VO{?mjt?KW6p0S9AT52qg&#@ihFrp}eK7 zFNN?gFZyZQw(UAGFZr42)ejx=;3fAC7Tf7P7^=!T}hOZLwRcqdvUkUQ0ixT03>UThj+?_&BQG z`t)6FvB$qj=DtsLG1kxbY34(DCMJzcF}8-Oew)UQ%`uUCEcuMN%HMoreMFvP2w+y; zF+Fqo4o!>{qE5|0J%ZpO!AAx88hPJ2m=V#2ZUB^EvmEQrFI%>HHDr z)0hiJ*C=1c{k1h6IIy2Cyzm06s#*8<-}D;Kq(A!T!?a@6N}jp>pAzi)m2_c0=gnKU z=>B2Vzos2`J=NT?Yr0_ zqSf%TqxHv9Tg`o+wE9fFXJ%!p$W*4v)OF2LJL|e%Ki?b^DQgL5XZ+3Aw;RVUKw$dJ zSu>#IU0@(AH6fc<8Mb5}hq_YBm==_Ab{bO3q_Mxote0mi6*G{1J0@LqC3Wo7fnI&} zbt)|_Rn@#W>y?#bS2?iPDr6)>8|R?F0G?j2T|m1Y5X95xdMlu%WDt*w zpztyQn$qYi-#2{j{cE#>#4T)aUb|-P;g-(Aut#-NrarlV`8b ztfTtisCtEwwSCuYvGw04bKfUR#_#0G(==+-`IZ!|RYvQFJw9(*U3D>$#x3FOjKBZ2 zKp>+*3BbRmLGfGH_||PZ)HFhWBU`;nU}f1sY7?(&G)%I3aW$|0n?3t=UJ2M=`5TCE z5dR1X31XPUAHkXF(9t6_nB!GCqTTLYy3*l;hwIfH@t+a@nuqzJC9z*WYRM~3wX~1J zx(rTCG`XYDA$CIV!QoHzQ=eYFXrEqKmwp5K)1ZNgblr6~(3KM>v9N!?mJf)mR-M3( z!OuK9lY?%5WU-i+c5~T(L#F(D^Xg|~Nv@0EQx9HktDk~`0x3Q|fey0oPeUc~`x58- zxgUS36Z2w=xd$mjd*!p9pI<;7IoyeUk}3Q8r1~-wrfu59(ex*t;@GTD(|r#-qynL9 zHn_@nvcCP3el%nsY_VG#gZjMN>vJk?JE{+ks<%FU7hCM{Z<4w1lO<#M$De;vt5&UQ z{o7#4z4l~kj)}FLUHxyqC45oFG6K$3YnIuBQgsjz{{UGbC(G0O_U@xZuL$4v?c34Q zPd}knQvS&f*^(se%1t-jP~*45PP~0xN=ll}Cq!1kUU%)))Gnc|x<|xO9~OI0J^8pg zch>)YT>O)A41eh12RRggaR+frZ4qCe@fVF(VOnIBsrWPe-+~2}-fpy9Iy-&8^zth; zVoxsn`DgVT@l#JfNwKl9Mup`UUw%bnMqfbZj~t<##xEE>ibjnbN%Ov#r)x(X;{$od zeE$4zIHbw1>b3ZXMKtlsbB_Hb9M|s|UTrE4ko8H6c-I{HMMlO}l8kfj-aTo=h~et| z`yYO!tFNA@K1Y%vpB)L;bK=AaUPMvt`=JUt`G4|C+o6FtHU1e_35A1t|fiY%G&$g7Q5?fi>04aOUKPoeQ-p*miFC{tv&ut zvgG?D|6W{k%_PI-b>|XWQWh~ud|7KJ2c!~9m|8mSrkGg5*`5C8>jnS^HWPqrjm-$1 zTfs*keL^|c;mTwSRadZri7yexaMiZPv`2B=*(2@4TfPyeliKli+dB{pF?hbZ~#tFN8fL5bb?p9deJ+o#^nt~MXDW1ydE z{|TPGG!}j)G&n>F->j@Gy84>yYS_Aq1Eotpra$rsHT7yr&%N+sjlk$N3fpj!&#^u4 ze}H3aatz9M=Del0o0RIF<(YFWo?cQ?61#^yOjofuzhuG$N@1t<2f3dTb5Kjo*bPWl zUEO=%{kj#A0|yMG=bn3peptL%_wc2aug|*#`IZ3Y4?pyPihC%ZpOlmo`gm@&ThlM> zcpt#mpPTuNn(+_f+3H;^tjQG?vYR&^S=C=L;O5Q8SK~^=pVpwR#(;v zYhy{>-_Bp49#r0Z;}tbSU%~MoKV(;z>#n=TGw$@KI9jgUH~S4LtlIS6}o7`c-^K1hW6HV zZV6LM$K4bYOE}m0_umEo=GVm&`PLI?k~n09p69Oh72poz1X5FK&!C2eh8r(jk6c*+ z*^+}{H*Ly-EG?Z%*$u>462T@*{3U3${CsCDNw|r~=tvbdM)OBDRxT$e%UHI{ zy*EAg-xq2$Co^et-hM;H^OP_dTC(IjS(i;(9rk#)w139hvZN2j?z2apEq2$peM>*5 zmX4dF`rwFqE$zD@+xq^SWbOCKuwBFR__hi3EdR1CKKFnBz25M$*>g*nS~~8gm{`Ku zo`3Vrb{qw4BH(M|CPUIVX60=ff`+?ULSI-CibLEAWaiLRk_Dlr0_mE%7uRefaEfQ; zhYuf4YdNsLJV43LIQQLmFD>}r|Ew19<}8u;m34)Skb6ZSyW;0S9#E5$Yd>_D>#wov z@>!ReF>8}N*ceNeGLt{@A-q|G{K};N042LXNuF$ztDh|SPS$0Uem%AxTiQQk?O4(W zWB1u3&lbDu+rFirQ%lFqQGIYky_WXfkZpbcO|tg;WZ16Z`SGL2==tYg;<&=&X)DJ| zmYHvBk|j(n9d}bqEaB{efAhmQNI2JmM&e!n<%tayL%nss6|EW zGat#n4#-U1TW`NxuZN8KTZ216z`Y4L;`?-%zn62~dEdRkz@ z$!cZhp|H^S?4-#XanUIR0s?~6;!LMBhDPc|KwN2}qM}&52U2!s4!gx!{|iCA8pcf^ z&r)q}bO*BTERY**;2{G2I5v6Odp!i>Btj7YT&G6V19>kk3%Izv*YB@&z8 z5|_9-E5HS(5cr}bateF_oPyeJjo`awH z`kQnqi}>;5F05}gxDNzC00ck)1V8`;+@63}Y@38<-M$wt*nxtAyjoWI`T5t%bH|M1 zNlCP8*KSHnOH<~@#(Zz!xq{}Y7gvO1( zklH51)A8fSNnBSXnQNzO_iog+OD9T7Izhd9^`z0GM^U?WZK;{JH+AjSRVVQE%f-jF zp)q4FpuKzd>1>gM4jtOl;6a1v;Gsh*-<hseGLPP^lFx{w9){(T4N*zqLl)Ttv4NbIj`BqpXM&3<(jZ@ubG zfBvzSe0_cC)pMBT1e$_8mQd~;cUv~|)h_1Of_KM3crReA=b-yL{Yer_}WYdlvyZ8Yh zQOm+R2sA1JTSnyuz!#uV4JkSU0w4ea4kO_0u$ob^-3bh0@jCO_=jq6?qpI#DOP1AW zV8Q?NFV#4fwhkUVNavkDgcdIRL0$9l^P_(K`_dCn zJgv?xwO_0F^qDgh-6C2$#XAUq00@8p2!H?xcnksf$Gg!`pFVw>uDNy+#j%@;Ve;X{ z5`Fsg;+g856d4(zdmT7%hFqbNekf-AI*HRW*85kXKOS+}w$&cIvwK zs?i_+YK!3m00ck) z1VEtC5`dt0qoGYpNu^mY&nB5dA2@ITO}gqz>e#6Rz543wx)rN0&U%GJ?Aww|wPQ=Y z`S}I3Y4cV(@4O-O(@)E&XU`t=!TWPnmD-A1YwT~!D{a@WUvG;^xEBOK00ck)1V8`; z+>!wNYus?y3OK0x>eXv#_UzYH2%Dx&n^I0rE@ftBQg;q3W0>T6eUhQj&YJ!{si z;T5w(Y4G4g+O=m7$?8=}*4m#CAE!d@to`$E{pxWH0w4eaAOHd&(C7(d4&DBpHNF6i z9thP>={0^XF4sc|NpsUpH`EA8)2VA0N=ZqhN)9C>NmjvL$02IkCA3xNO`0@eC;Hy> z)RT{^b4&hbNjrx1h#QZDu4&o4W{4WYa&o?9%Qm$VcM`9}{evCo^^>Lc%LB^oQ>W0% z6{~7E{_EF;V-NrV5C8!X009ta%mm8r24)|D}LU`acMbx2s6zt*m!x97ah?H194 z4?V)a5M&t^Q|A>Nukx?I*3n1~b+cjPrW$1|v0nuI)TxsxFd%?FpZ8^r`*8vSAOHd& z00JNY0-i#kN#c+ZHCIP^O3xkK&(xIDwOR-bJr~%$)7mZ~+8B00ck)1YCju1iecP1B?Ix5C8!X z009sH0T2KI%LzclTh0n4K>!3m00ck)1V8`;K)^K!OrJSxMx#>lqkKBw3||1(_;A4r z5C8!X009sH0T2KI=MZRAg5EjE&!3m00ck) z1l*Fq+^)a#zAgzgVa%vWZrK4C-G~T4&^MyNL{~rn1V8`;KmY_l00caP07SfJj5B%( z0w4eaAOHd&00JP;hzLN$H=@BrS3m#+K)?)v&qt5A4!!_pAmK6yfB*=%8vzJ!3m00ck)1S}!|L2nTz6aoPd009sH0T2KI5C8$!ApjBYI%5G#KmY_l00ck) z1V8`;8kE30lbcL+LtlXDGiS|!s&CLw4jKmm5C8!X009sH0T2KI>j^-_Th9!4fB*=1 zC;?wzU+UVWvxoK`-39^M2t-CkP}8Q)mmLk&u5Gk%Hwc&~;BCGLO1KJvZClpsOsTA_ zq~zoj+Ou~bee}`Cbl~72-L=`T&Z2+-f4cjg`*nHtIB-KHud0&1_M~@z}*z`54ey7mT5E^>kNGdEWQulS}(4HQ9^kM4S zwF}pEly1CvGU@-#lR|lUd9-uaZu1j_)PWSU*Nh^*OQuNUnyU~PJ!&L<_Q{7dcyJJtTI#nUKysD&pbr~2K1w{vQnz3sHkyS{?5sSRaF(Kzh@uMeP7v8qmTtB#@e;u zHWUE?w;+I7dAAs*nnq5YcDI_zke~UVdSW_Vdg;Y<&)w5#{rU~6;QaaDk-wjBt$!42 z)?)pcqw2NZ65Ig-^&{Zh%!fvg8lk&6CZ;9z?%j*FZQHKPbH)L_OU|H-Hf$wu_g#0W zhur%gc$n7w@u#XTBqW$7T{V&RA2?`h^=fusD!Kk&x6qk0$u;WJ{?7UM_|TL5ckc4b zE}^^cyo3Jvr~2<)jlwtq0S_er5%0zWUs6&+?|(Q~iFo;`Q%i5W`L=dw*LO$NYgZ#t znL7|@((JSMo#P8&g2wRkhf!c)AZ27^Qcg||wQJXwCX65JbU}~rm5D*ZC6^%(A0MY| zIeh4d&ZgYlJo@yrFLdX&9C&+I%Mtl5)|E<2OX)*)B^5#68S7N)!i0PeB>>kNHy?P- zeWtvuOxF|fFO-+~%S)2u`Rsnvty@?6=)-qu{ojAk!tcJNUOju%xW|$**48Tx$gGOY z?krpK1Fiq(Px|cBkEk2_LyjCVoIZGO4vVS)ogFv;0Y?%TKYpC5{`ci8=(pdOtK$pD zTwv4^hdyPu1o^%# z`rrIo-?#dFmueY+3=nW2fwZ)ARr{;6UsAtbnQBV@zRdmbJ@t8Cv+6gR@zmq$fw``G z_DhOOY7}YPHi6!L>os1(vWlb*IhH(g$y!^@)radK&`<;*;v0&* z9om%zc=z0Wr>aR79hpk)*_ZK)&*oBGo7PlZTugHQ%#0^%++s78b^Uks9r*lX_1%)sck9?#dU@6hEc)N4 zR;^;FsHjNI_#1xT^y`pgOTJ5n_uw1^97$l&_ls5a5~)f4e#lFF<_(klqV?&=AJD*o z{pr-H)9lk;MH44pK{KCy+OVkZTo$hWKYQl^A4Spr@rU$43cYuvgx*4j(2IhFE+S2^ z{e54RViXY#O_UCb(q9n~K~OqK2Wir!2ap;F2%!Z6B!T}t6Lz_~XU&`;?-+v!guN5v>h~|oM*Qj9w;c9wc z{N0ns9LLwph4koZP8Q-pAhQX;h}YNxO&c`tmFd0!Y3Rx`9}5@EqYdj;Q){t!j~{hf z+l9l|*Oz99RsU^Xc$vC)?<1x17aPYbK}#AXt@3Ft4=*Nc`$8L;oOdL6?e*SDR%-WB z2Wr)(9T`5hRWITI1av0AhKRp-LKJ)TDjhoXH~sU^Svqqj#btoqYYao*KE32qtv|Q# zpcbv#Qm4+{==m33GEAZ#^B9;pD`jjc{hMzdrq7rq^1Mvly7!W4O~;!m;OT+2v1FPa z=OEx{0^F}hjUGeyo*LV{u4MeUujJDzc2QHpTW`KW0RaINHEblc@7R@EwQ5JFPM@J> zO&e3uqD7QsMxU>X-vcGEU;My9A1kNwlYi&?jY4wbvt0>zhl0zO zuh7-2*XW_xu>b)C98IA0Q$v02+VyfAaCz)v!=Y(YVc?6!uu7=)be4YFw3)>Ixg2psjcdndx8o)Qi@$vC;QS6Bm zC)J$FPHnU2%$4Je#~N=>$$@v-F&7-6tGTie4+4%RU~IuTx-`hwg@EDyySfN;pb-9I z{e9_j>MXw8=g+YU}ve?xUm!E3PAQRh>MGpzYJ5p5!;v` zfItQjXxSoVWh*=K@}FVgDRcg7)25Yb)jxdrNcz_V2L};90z&`+5Fq)OYU=khq*Wgj z^vu8J_U${w3r~0o-*it&d$>)TK8u<(j*yE<1`YUtwhMnZE{lUwX8!#7+wGWH15v*JLnoPb{w6YhCHFFq}Gf?Jk}4$BdmIR}y+63)DGt z2q?ZaKQCBF)oa!@`eQ?ZLxTn>dsFi9$>?bQpsrmy$xq%QN?BnpBk&IdJb=K&@na~W zQA1L;j^QddY*0_uoZr}_gndtUUFg}PyZYudUi85$Un^Ctpd_>TGchrdK93q9{bzCr zf1LpzK6`cf?!Wd(d3}2KkY###c~S3PJ!G8na+S0Sbd;`Xm4!GEa5MqT#5|M?f0=e2HKDI%gFWevoPhc@=9?QW8y_I!&$kjG42kQKJU(2AKDDzqH$VP3pL+J}PA`g0<(IEqMSJ$_lbg)*7B;O~wh&K!t4V2j z^5mAz_1}vP=*T0e`#DjpN2w+y;QDh-k5@2_QNa0|~1`^N8fAHZzxiaa=<0tgR z=R@d!VsA495O5>`-rk8_XD(j4l%_Fp>2eGm5U+W?d-pDtC|*pevTof58b0Dnxneb6 z-n_zH;0nF-fA7;jXU{oORmcVbry;--EnfeKga z+PD9Js%!MA)6~1qo5Wi^@fJ30z+V(b|99U{7YnAAsp-;tz&8x%&tH%RdYe`$+f1?Z ze6QYpWtr^e!;4@4blLOfCAwX4sz zuu$qB8k$2n^q9}Bo7WS++q=&jZ_)k(2i1BjZ_MEzin{e1%SWf`MI3-Y1{2^-t1WF! zlfmksI1m5<69O2cCO~lN@&x6HxEn)H&hk`JymRsi8L2!H?xfB*=900?*rfirE!?Kk5K zpog0c7QA{&M?yV800ck)1V8`;KmY{Xh5(Fsw`odL1Oz|;1V8`;KmY_lz*7joi1(D1 zMm<3Q1V8`;K)@yfO*jAXKQq1nHpxL^5C8#(6Nro&Jrq{G!!e@(5C8!X009sH0T2KI z5YU$Z_M+66r$eRjd#fKkOrWIXWQUdm;TccB$J?9y`~!*KZ;qfp0gN5}nc6E6ecoPz zj?a&A<9No-Tmr_ZGq+BPZkUO8{x*^t@|WrT`|&W~U8KEiRg-VbxP7^u5zWm5_J9i7^BYLhA`-zzm24ZJR6VT{shp@`nNHd>d#b9 ziD(}^Y3e5n?V=w`SC@po;JhseBi?!2#z-@`(-`4!+Y_|2{!I&}`ZLv2BHBk!n)=B? zyXeQ#)g_@XIByHWh|k=%`LtV(g_eB*GFLy84gw$m0w4eaAOHd&;N%2g&^vhpK|K%v z0T2KI5C8!X009s%B>*Gdl!zOhzxeWtGQyV`?`rE-EltJQeQs8tUGJ{m3SR)b`8uNjY(wdct>R=l9Y21Ynzv|0`~@*$#mAdoex(CFeE3kQ zwyvMH=%Z`F5SF0?V8mxA?u;+Y%h!jxbnZ;8TeqUzxpUE$ZQE$v*zxq_$rDu>o+02g zMT-}qix)4^!e18BjT>?5bu9-x8xzr>0d3#Dlfo*5QJ|kct=+JJwrvsj|271za^}pQ zMMa7fmXa4OT1?ZXPd6%ss*RdUpy53890B{-)62 zU`nRP^uhc6`7(l&5pcD!!}w~{s7{?bcBHc9%F@FJ4{6D7ztb-Z#d;irP`g$*wRz!r zdYqIj`r#qsdMY6(D2RUlZ86Q9Ih(q5>q=Yy{FBa{IzzpB^`NE8m(%Q7bCjgIjSE#E z4%~u(D~_9bb?Z_0?%l+1N)d{^c9mw$m`S^K|7Fx3di+i{ZQhIqM}DNrUAbbJJpL&1 zW7@y}fEqub|A!P8cayGMxlC`q*-!pvj2JPBHgDOYrYT;m7`1=p70Q=CA6<>TN{g5L zM&~b_SFdY5(4$^j%R)N+3Ba{Rf2K|)v2w+V+H^vmMKG~k2xsaANn*6eCJ zEpmGIc|$%OSiW+ln$PsWTHQIlmNa^lRjO1;di(9SC~DYn>i&99$}SA~BS((HfH!S4 zCpx#*H=J$kWXY0+I(6tE$6lAN-DuR8Ux}N>*QiXH(kj)8l`GNU!Jp9b6)S1N#7Xoh zDUm9cFRxx#4zgy=N~1=7Nv&J9BsT0vef2fH^3u!7W%;ScxG)lE_T<*LjdsEpz$_jo zzTj$OC|`m6^y#M`)BO4KsbifYpLiP@ z^Gdnp%9bG>yS;k%k?9PL`JzRO()jUXY45(h^7m!Wf&DaL!dNO?xR8=v)2Ckb(o`4{ zIfg)F)aaqG>K((@X`~)JaFBkSJCCkkzbb+)m?kJ~;T{3-38=>3YgVn1<4sNQ^x*fUOX>KDlk)7h-+!mm(a{tb7(o2X zZ%eSo&=y%p>ly^CwYjs68=hfFN=lNCOWD^YI{Fli8#mqvww^j03AS(&Bp%&P7(bEj z+_{@7Rj(ee)7rJ`C>Oks0-}qz|syPT<*tRon9-M( zKXwdNu2Namf~Tn`O`NQrr*)7Z-Y(_q=c`@{D_fQtMKq%3&6=ule31A!+2}kyC(+R- zsYQ!s>B(x8M=v?1bvG*H>4}y!Y2`DGGnI2v7(ws6^R}EOy>{(iYEZ8}tzEy)G#kz{ zh=99}9iEPB-=RH~72~>K{`_)UeeeGLD%FxDii?$YtJHH#2g%~q!%9d@Op=E_KKA`& zn2rlYK0aN8fIE&GHrm&(+aUbKX42}_YiZ@0)pYertWkqF@^{jxAcK>=;%3}%3>sXb z(&BNO;q*LTJ1lP4`}OT(n9S;NX4K27Qb=GE0sFp@Z7K?h^(N4N;2^t2@^ke03lHgG9PP!GaC1Z_)9ly5h3-HfBXXR|@)Nj9$v!OhLvU0h3KOtL6 zM_StnxZ^m=ojW&8o-~Q}h-dEKPn%9LV)4s|@Bh~b4$nTaPYwbIq=$ezjvIcOHRaoH zX^D9H)T(t$`c`Z&vwp)ynl5}`9zT98F*)=%GaU`_n4T?oQ?m28&XPJ>xt!*wv(+n2 zB@tbmz6!ns0uO9Z~uU@kT)ef&kU4Uslysms%u=;-WjZ0A{@N0p ztzNe1jn*4OXSuA8Knct(U*X;jh*XP|D{~HauRQ8!7Eie zbZk%IHENQdub*1+Ul%W-b}zg@mBd)(G;PIk1+g+70R%FNfU}L8+_`emz(E6uSG@B2 z4_;lGEhrn^zH?heqNmQPP&*EO_;DUJZ`zC+HI5*jO>fq;2{mclnCAX4*CwgXRxg{B zM`B5UU29(WYSW9BeE|T=BM4l(c8xylKR~=?sjrxkm?;;vam5D@9zuWZ*^`PvXmE%$ zNN?V}Nu4@(HM)M}*fH|+^P|W?gUHL;RUY0iM}*>a>^pPKX+`GKES!e9<)k0 z^7mmHGiE$>5!>DH;=W_zWf8m<1px#yih#3?n>g`X_V2&{(!_CN#Z7K7UAS<8z7$(P zojZ3!AT zCm#!ADVi3GSy3fa7p@S)hDA}k7hg8o;NPBpqR7VQGXkD6cAnMP^^VZzov+O>Zk(@8 zGE*arQT^%r2L#$J6s|RPBZL4DuudRG%#bu}*pTvzH+b;l+d8#t(ZGQNXyLEF8X54` zB_Ra}fB*=%IDz1+?Zk83;?$;jla4N46{rsa&O!h?*f>i|Ko7Sj@Uz$@C{*lOJVoq? z5EvLJ9^0O$S+i!-hK-xty56W92!H?xfB*=9fMW>2wZ<`ANpIJhd+~QD$zX412dNFQ znM}Y(_|azz3dv+G+^cwu9p`RO^m*rOAB-F4Y?sW?3S-nU)Ztp=7_Lq!)z9C4KPsoJ z7?d(1fOa;*q05OrOoOVu-XFdIx-^IdA^NnHg#vIXT?EiB>B8ogna~%UxLG5kMh}I< zyc0K&p=!RqzGBa*AmUqO1otDr?aJ-T?Tnx=0gN4edFmw%eO@n;j*)|L;~1{4Bo$-S z`CAK4^3LBzs)qcf3L{U&fddfGOaNm?Gb$tm0hIv8jfw&XAmEe)Fca^T&0?=oJ%5=I z310wvDIz}zfB*=900@8p2)F_P81$~tO3)DmKmY_l00ck)1V8`;3<$u8H-Ldd5C8!X z009sH0T2KI+Xy^Yp!3a5r9Fj2@?{5 z00@8p2!H?xfB*=9fb$T55$`;00Zl*v1V8`;KmY_l00cll69E|UnlK>|2si_Q6N^vB zz!$(7S^_$N00@8p2!Mc75r~W$Jrq{GQ#A>c0Ra#I0T2KI5C8!X00HX+V8mNzgcKkE z0w4eaAOHd&00JQ3R0JGo#4p|2unK$uoT{~<3uAHe)f5omug2j31l)l@!-nmiP?%uVHmi)SadiLzD zi)=&1*Q{A4$F{$}pJ6nPK_J}(^5)G$g9d&`%a<;eefN(wE9jfa6XeZex`jF*;}>5K zT?bzP2Y`i0mmmOx-X)qT{YtJ~y<8eHfq}*|l5FG{&fJBDhNQm`zoE``L-g=kr-%p^%5e;eLgt7F>%P-P5-+rfu zXvhEoT?z0L-EraxE{~nrbAF)jzMnyfiHY)txMhoG6cQS$Yk3d`0w7=;0T}VN@p7Bg z6DCe}o4TMPAYh5WlP6E;uRVLIRm&D+I1^u`N@dEHEi1*x$5T*H5LFX1@BaS&^zh+B z;Xb zK)_81?An!Ll$R(`oU&)nE^Ad+%))b+_tVdEmfX+JPt4L+mvPFB{IzTU(%JLpWE}rv z7oEYMd?bDEckS3hn>Vhd3FE$|f&~kxX?WZ%{N*PqQlv0V`)&%&nLS;-W_Zv-%xZGD zawXQtfVY&tM2X@wdD1xAzHO6mncFOnInGk}ba12`@Bb5e7%qZkmx&qErqb@6TWQOt zKWONXPs9yQHdT~4J(%Cn&j!=FwJYf_;q$*{)lwS$9fD!+Uh1(q+K5|s86Z_=eh>KItaR36IL}2Gr zBc2z2D+YSKr~dGpw``+5d-qBlN*vG7b1-$QDP8(G>fEV=^b@{t;Uf9^`cac65%k69 zLu7j8UkPFC&zSZt)vjHOg2jx#VPM0V7vK($8cO`cU`iTpHEHE9T(A(${ohP#)UbiL z>9{Zc?#W}0<7;V!W=)$=r;hC@F776M^zo;vD_zNwC201{?~rE7TE6Kycm9Gj{9CtbK_yERH_D3>*C$ZCSTR|NGiUy>S{YmVXIlMA zYoD~L2oivR2N8e~@5YV&dXGM8?bs)`&l_*4=jlI)%2wtp17Cpj3qnp1$P@yxv9ZJk zIENZFs>zx8a$*+w#*H{)U;6DkcFAkXOub_C?=vptZ<0cvR_B;KI^7Bc70tLj4#;3$?5FdXsg!l=A65e|A4Y6BQ z07VTON$op!rBIh*FnIe2t-DW9twwfk7{yM76d$(z^+}prIpH- zXx%zTrRBY2=Po%dy?y%*35KT!OO+}~Wy+M6=YQ=IPVENadfW}VaWhU%@AI@ar{%!Y z)Vz-?uVz)k2Okci6DLk8r|M_D293qa!6f3cK8YMCr|&-+G=PSD_Jx{;4@~p(G(U&g zbLL9xoR4SDoFlC7CRC?R$~BHt!l)5Z(#q!*wY*@!Fof5vDNj3z#|%6r&mpH+*~oVm zl`BTeDq?nf_Uz-N2yR9oAt6C7CgFt~w{PFJSUX$$ zr)j^krB7N^1Q$WTg9u=1-h~>Qzfd`ZgrwdsAoS@L0{8CSbDt?gahvf$y4j6#q=~A?S_F@!m{-*OapMTOe%<)GVcH89Qsf!N zDaXA12R{ZFF-kn=5}~2k%g;2J=FcIV(>cV(UR9G`77q3tlxyk*agaZMK6x5*`HEq* zJXZFbEgx2nDpjl?|JYFDkUxKZ`KkOf)g$tgPwBVcmr3~_y#F38S~y?sPiVR!zmgxH zu1nzTx${!_=Sr2bS_!2OYVDt<{mPa;X;m2{a2EmtA9oxJUjU7*34>lEC}&8fe7RPw zQYn=>RVt^%X>n{!l^GEr-~j}9W}1CX*jR5OjB!3z9O=3G+js1g6xhdv!!8rw8jgz+ zj`5|RD@7wlj;2?;^`NiEjOXZdhxquE8}IWh)~(btreBU8 zBhwH5co6ZcUk!sItIZ29QPt|Tjs9lNnq!zW)iL{8uwPE&rmg6$x8I|6>o>|3uOo(k zkt!`BT${kQZQEr9UhCGyYDJVjrL}*W3RLo^r%#&7!Z`?d3IQ1LF4WSiSFe@Y{^z}S z)kpdq!LwoS|Mxw4jUROzhDVPc$6cTHgp%*@zhbC zuW?Ari07>}IP4T|Ivg4|ZX`d`^N$^c`@YdjW<7oCv{ezi|4MQ5>C?N1ybk>0&h zob*js=d!S^+y0cUFYH)9eE8?G&PpNs_U)I4J$rPQviOAcVK*C|rMDFL`-ivi;U^2M zld>6pp+W^MWy3WWB(Uh$C31}LzO5gA@L%adrc{GnX*f;^w)RgYpYmx>pHyVv69hbs z0Q}=!sKt2?u!u$trElsY@pwPx@@4YM;wAUKW5Z+1)@`(S$?rxrIvIUR{wV+W<1FE; z8%=M&`yZq0H~|4qBEUZKijlf~d&L_|>bWyrMQw zp4?K8@5QyW0zWCJBaAKf<$t|}bHZ=ASMRKJ@I}&uD?F zVZOU}@6xalqhu5t^n3%rAzC~I=q;>Ani#$r1CzI2&Plh(h4ga`Cd z3oAV70>O>7Qz5 zagg3VX($87AmC{Pvec>@@x;?Aoe}lDcJ*?qVnRc6q>4iX2!H?xIGO;z?FozF9ZebX zK>!3mKsy2d0PRn6%}K>fyg4$62LVqZFm>I3#ETn?Q=8^ZI(kZ-J-D7Q<~_LaQFRai z0kSMPT*Xw)No)pchTZaToy@^bSJ{!5{zvAOHd&00JNY0wCZR z0x;qo!xd6N00ck)1V8`;KmY_lz+nV@93~lpbtjORm`INvCQwpxvhK1WFf{=mZ*TJR z4+s@fE_oVLxjGK(_eV)|6GM=t`mIx!>McS2T z;}J540N7^^cfCqQ`{_jzaufod(5F11j!Jtv+b7sNTZ=faJ}}~)w{46xb9;B1+#7$Y z>;k?3Zr=_@z0Unk(0=aMrkPzMPv}#gP{+*fN9M{0dvjzEZ%P0Ly(tl#g8&GC00@8p z2!H?xfPj+|fD!NH4FvT-00ck)1V8`;KmY`EC9tGSyHhUU3!uHuFzB_ja=DZ*zWgGM z9yQW#y~D!7X#Kji@^A5yMRv>6OTagiCsC8ejjf97_hw(}+wYB3>72D*sT4&-h7)l2 zv12b#z4&O+BO}Ywq7TxTC!kkb;k(&9V_X3NBLb08qldzhH$sAwv=OXhr|| z?+0mJcKWy((`VAm8M9L9>FV`LRUt$;9Rc()r)v@@T5($TUTZ7om$6FVVtZ7SfFyaq4v~ z2RscE(Vzis-@cQ=Duhv>pFgeLuz|L1*{UVGnx;ehSEyR`>NI4?XKLJt5yR=g{{6Ig z$!{{QV#NwHal&|c{OPBk5dYo2dxtu-@1*A8gE_NjQIR5rW!$1gi)q^Q=|ei#~ z-MfkJjv^F$?JCWhF_U)f{!1+ebY01q1}pgz@7j`pjt>K5Qf%6<=E4Oqr~Hk*Nta9Pl$y-h_C{q$%{v;>9%JgZHUc zc({g~wk0`oo*7^Ac3}S`;(4~G;Kw^t>N!Of79|6 zE9lPMyL4C_FI%=k%#^=ks~DsQ0jD6~YGWrhHkR_{$xWq7m6Quwnm21o*|TRSFE1~O z6|>zO_-Wk7gFmJHd-uuN`$K;pqNC!bxJ>CXsh9@^2a6m0iFD`A-Bi~&LLKko`jNj6 zi}AiZ&GBwYPOl!X)7rJ`R4-FqhEhrO#Akw*438pG)ww$ z9oDbgAYAlj((2V~Y2}*L(#SJX#)D7Xaom(EQ-=15r$LV&KQ`O4TKg#ru++b7>8ECu z!37X7AOM5j0EVj__8&ONZk4lU%}VnZETGx5=GZMOl>l#VdX$uyDjE?Wkl6&>aqL`) ziKPMs3Q&Z&L4W(LcWLsJiBwUz*2P@8qT*)Po5_J04ulf@*Oef57^x|BMIn~xp4chgDXR%aOW`X1w_7E`|cmX`efJGE-v zlD-w&W3At?k)}_dVbRDl)Ww~T-ErK={wDgIrJ%K+T9U!n^y;V9%E5KdApqAJ&uQy4 zYkK;HtRwx%nXHK25NkU>`BKZq{el3B2aJ{|Jg|)Ck8vO}4+t}fm z_?9hO(3$Adbo=&g+PrZyb?)4eVq=~e@l}L-%AGrR=u6>W&hBqE-g#=?y!kY8SQN1zyJ66~En;F~c%vrnl|p+a&|xM>w_?Wd;sm2*AouE@lvXA^)y@7e87*REY7-eQXv#?78JQ+@lB zx!q<$gF|E*-tx{g965H3{QUeVa?l`Z*Y*V(HgXi56f+*S1YT&iY4aAE`t1}NKW+>q zJx-#(#f)59;ph23Q(58LxO&wJsng3Zy_8lmO>vg$rAYu1c^m;}8#}x+4KEtqwPUAj z3*J(e$6rkBvsrmw;L0v4lP6E4@4uTWZ`|1*JXh{qHn$(|_g$)FNm}^xd>TABk`^rZ zg?8`UWs{r>7cNl$0Rt(#T6Oy3^P$AM()1VKN0%+HM7Bit#voZibD`clR%bQbt6nX5z|bENE-=UyPC4q zn_;%l&>V)RHXYx-ebc7&8J(E-lCLLRba+P$cMSHlojdYyr8;5kxKeAmj;`+hoq%zZ zA${>|wfjF?^#ySEzLp`RoxBkLfIz!7#H_sC2q6FjKmY_l00ck)1V8`;GMGSQ)aaqG z4;&9mmj2)M4I;T_I zlfDx$ZZf|6c~bw%c)IRcA~x=Gp?2jjRsKT&0T8f_0LG4OypS3Mm;lBN`T+K;62p-+(WGO~{ZK1V8`;K)~Gzz@T^c7DoL*00ck)1V8`;KmY{X zjsT2!w`)>V2n0X?1V8`;KmY_lz}*SJh|ho)UcIVSQTPI60B95e0w4eaAOHd&00JIJ z00zAWHae;d0w4eaAOHd&00JQ3+5}+4yLS6Qdk_Et5C8!X009s%AW;2--^E#RYSX+) zM}ue_x-|hGx2~O=Rqo*a-DYc4wR&x{*Kh#@KmY_l00ck)1VF&O2*8MU!S+0Q^cX#U z^27x-hsq!T0w4eaAOHd&00MdtfDx|;#SE6w@2z*~{{4guE)~Ur00@A9!wCHT-A@*>~%%4l;%ZJhQY2VWBom*+~qMxa9rHX1E9Do1_fB*=900@8p2skeR81c^AHV)OS zRH>5m!<-pZv`Ark@ZbUQ`R7AFb!eGxB>cziRX%_(fEzU^ssaKa00JNY0zZ7-a?*_(aW;#c_tSiOBDTP}7;{PH&5|XHFyeh+ z#M?{~89)F8KmY_l00cn5K?Dx(Eb*=tUjP{N4r1>}vDn7Ok#r#&1V8`;KmY_l00f+$ z0DR@0zm1?F2!H?xfB*=900@8p2pAE75pRUU^-mr>dL%26KYxDt+5NRwUB6PO0SJHq z2!Mc#5%}wa@pG;C0=QU>pe_hFGXc2PICJZyL$_0>PE&;n{-2eae?Fuk?NA zg{%l500JNY0w4eaAOHgHK>)Mz?$M5FEx!C}ES)}mh5`Zu=}K%Y_38UI9Xobhy^aGA z009sH0T2KI5C8$!Cy=F9-H0cyUk&H0!L_TGQz;c1nj=*lB0vBHoQ6Q|TxagV7r<$n z1B!qE2!McR5bzIp_7czZ))=$$=_QAJAOHd&00JNY0w4eaAdp!EBBMqRg(aU^^ieJd zfB*=900@8p2!H?xq>})Q_;iAEf^6r9e{l@H08Y>lPyqx$00ck)1V8`;GLrxd`pl${ zvOxd@KmY_l00ck)1VA7i1YpFc0~)e`00@8p2!H?xfPhC42%Z{T621UV+vG6lowjM9 z7zls>2!H?xfB*=900^W_07iV;To4NaAOHd&00JNY0w4eaPD=oI5&@YP@(|`}&r&{6RTC>Y^8`p1;PXMM(pF!Jq?vTg)L_jg-Z4qXz?zYH6S`YvM z5C8!X009tiCIT?xovAe(pv%Dn2kFPT^XU5Z>vaCYc{+CNI29>eL@lXZyS8-VI1k00ck) z1V8`;>?Hu#8hZ(5V*c@C$57=el~oOvuUtu!CQeq*(>h2HZNUlj!J^)S^YR^kj8N9@Dxzq!0)Nfm8&(n)2OQ_yVNDf(Q@*0T2KI z-3Y*-*9~RH3+g{`kllr5&6<_wFIYgcXU(x&Rw@DB-t;IbF;z4oKmY_l00ck)1V8`; z>>~iz8vFRUeD2d{|DigyYLl0j{#~I$xiC6&>WuD;*azQV`1~V)00@8p2!H?xfPkkG z(BE?NRFW=Q?`2DuQ{KFJXu!b!lqXLfr4}9U&+BQIF95szw0^!d`3DA2jqsY(rcEpQ zW#K|azHXlvFJ7duvgN2~(V~Z=dVo$lq3j!bj0w4eao=)KH1?{if>P(BqYdLGSTh002M$1V8`;KmY_l z00dl(0E~E7Ycc2x0w4eaAOHd&00JQ3@dRMRdwdrF01yBHmn5)q(*D8l1#roxgVG=X z0wAC_0T}dp6NNkw009sH0T2KI5C8!Xa4-QF@eT$I@gM*KAOHd&00JNY0wAC_0T}Um z6NNkr1XfLNa}B-#769QA2!H?xfB*=900`Jj00zCy$dCa9KmY_l00ck)1V8`;GM501 z_{`;x(m?q;vEwIb z`t+F;ed@G&ZS0uQlr?K0z59Rft8sc9I7+S_xR-EhIhEYd z&>X4aY>80(Yw9&Ae!|!1-FM!UHygWmZKFA}r&IZ`a@07YA$>n}3T4ZdRn-FrAOHd&00JNY z0w4ea)(OCfx6a6EQv?PE3YVI zv#D^wLbQDOVk%j(gp`x`bVgrG8q-3o<;jvI3$=Zrjm*})M<4mQa`|uav)xM_=#g*< zx)pcJR4mRx00ck)1V8`;KmY_R5P%VH0gkg?s!*XkB_$=%wQK*<>NRU==Bzn%`}+EjV#IT#mNcdXS;~`AhOf+$oS01BzA3Iiyrs_N%U5(? zlxwOR&OrbKKmY_l00cn59SL}#5kJzWeyIES0vIlMb@mR*8{hxFbUAhI)Pd&D|AD-` zvPhNxShoSjyt6kR^aBA9009sH0T6In0`Qf0+NN%#d`-|IJS5WlK+)21!L z*Z&WC`0$}i)B{R_00@8p2!H?xfPk|QfD!L3E#anmv}x0dB0m~H^MC$D`pFk8ke~AB z&rfw~*P<^zA3|NabfQEYLqgo&U0w4eaAOHd&;2;8#QKN_A)vgYL>xfsoI!INA ziru<-J%xk>Q=d29qWuRBs%2HLR+VPYnkJ{>>(*~fydo9>1VAA334HVRf8yZ_kooNZ z4L|?{JcocDuX)APyyx_nOsVPVGiOLK-Y><(5O02;Jv5XG7Azq3ne)FNVa#Vr%b-vY z009sH0T2KIS0>6IkA{~zt)3!oQG$N>Qm009sH0T9SQ0(!XCU_(){_~A8U=v>2!H?xI3s})kG!bc zQEzHUUX(*9cvJjsqsKJALNcB8bB_01lzZS!eUE!nHOeA&8($@f?sz@XjI-1`Q=2=T zFMww4kq`txz#0L}%3C9Z>mUFEAOHexOQ7BzZ<=@1mtK5o%yUKAsONKz=j+Z8zCP|F zZaA_~kWi+L&~54=UkZ7QCkW2aHqZeCGK&C=_{<`YazOwDKmY_Xl|WW8;XdSy51D&B z&GCGl(`9C;8Sh2;OcW?B40;&yCQxt+0-i=7GHUctSn{6M>ZmUWxB!8dUab8e_yV{< zL%ETPZO(gBE-Urn>zpn#LzPp>X%-L5K20o$1ObmB0E6CRni>@a0T2KI5HKWA=9adf zK&|NvW$Sg^^FSgsr+B(U_tO*!Lq1I`hy($TAfW9V%p*{^UM0(y52Ke~dXchZ(e5be z<>f_Re>I8<6)I@4!dlZ=6ygLI%a$!epAPw$z8p2oCT*B&=gu8%%H!#YLqb9*e_m5B z0MDS}$#r+-7EaQryw-GzxEwih(05a(D5sh~3nhA~j_(0t@_oR82h^G#$o$uZ5g$(v z)0D-A`~cxJj{pK7;8_G<#Ou}Gx9)ohldm|nY2G9=Out?|U#Hh!??x3Xl((ryrAn0~ zZ*S|5inXS*sqhR;%r_;Ud_0IQp1(+Qe_D{{jSv6u_U_#yl~x4{7NAgJpdzFuV2;_l z@4Q8WKaEVCA%kPg>E}o_oTcuLtfM>1K2$*4HZWS#DU5u5eJCg>n{sOPlMVTK2mENs z5noz&$d5ih;6qV=Cs0jFG|GF8?wU2~8wjHw0R%w6vk1VTchUAPUc8u`S>L>Q3pH=i z%tdSAShaKH$WFn*!L)eE?{xg=F?#YO^$&K=oH?jf%NCAR#Lc9eWA@YhpK03knVDW& zbNV?_F=wf}BkSmnvj51RM2E$mla>Ns=X8z?1CIC*&#WuqdGZzpyuWg4^l8qJKSZg& z-;6Ti1O!09?Fhh#chM$o(YzV$+O?aOtz1pDYlVwhAKsM=!H|IRv>`d!u|L3uWqR`Q z#fz8dsJL13#Nf$wclGv;s+dg2%^1KO&(|Fto-;7um9l~;kn&R6v-xbu8~V#%6`7`o zIbKgiH+(t;fo>nwtdxnq08YUGN*E9@w*{9$5*#`k0Y4vKYS^$oefjk`I)C;YT@r>= z#fnv_ROPf0;@Wf1m7+(9kLb+le^RC42(9T%GxLo^o7SzUaM3~(e-a^sQ&&DRpvDRO#vA1?zYn{rJDMO9K zcUoZ9KstW>1nu7am+YqrqHpirw_jG-nyz*0)~2jkv(knQn+y?IJ-+Dsn0i%vL<6#m zzJ1D@0x!i=Lg66#vve|zyLHrRemxSL7B>$0%oz17{~A5}&QZ!^-}wb%WBEg+y=iZd z684eW^v$CUo*dG@Uztfy$IA zO*L!Put|oR_~`-jt6jS$4IlmmHK<>Y9zJ>`uV~SyUAq^kW5@QC@ZbR*K72$Pj-$RD zVYE;+cg|cie%x17u~G$@hHqZlzx)zC|9oqCBVvwOg>vPne!aS?x?0*uOaHLOP%Tg# zSZY%(`WVXMW7hBW9QDI!gq%_R*l+w-3&aa^WnpG_e4ET&{B$NXJPDmiNW#fcOLM3AY zJVUxk%&IB=-hckNoqC7`ue?Kx;VgK!Ze8iFFs!4ZMi9>=a#*@-IW1Z^-$BPxXG;Z7k^%5Hlg9d&`f9=^TXW#ik@nXe<0Wp$dukiz5qEn|%OXD~oz@HvG zcu2i_^`t+yZ>JyT&Xd>o?%gMEEIM>(PcvrBl5wX0td-4W@GNuN7upE__$9I&QyGVk z9HsjS3GzvW=?pxl4G9UgTkqOpCN%1c5%kZwv$A;8rzPpBI}7U4xf3m3{2MJ?v{=gJ ze_CWMUAmlp`)#S3hYw1YC_$C0SE1N7f5`ZrV$tu}v**Q))L6BTty;ZSw#n_=;(@*e zW`=^TwGq!!bFkJwtT8k!(^8vi)yGgC9~UZ6fIb=g8Qr{@qVLwNf6~-%CkZ37I_(kt z++46$FVlQl+Qu{wpBEH2!JiF{q8m5j! z{$h>2wdG z)vA^0@4pYL_2D{2N1vuDRfQj58o`#b)5xwlN)Np+U%pJ8yL6GOB-3@%;i~P z=m>pGWga+iNHym98XNX|_Z^@r!ZpiMuvRbAyw=*rG`(`pH!+Ga&v9{aak9NkT}ov(oJMPZvBuuobuD$`h3SU+v&+)0J9j8FIFwb@tZPh6jC3`WnbPqu{?=`yT&Cwn z7aeeNLhL*F-^y9UMw5PNN>^s*FNl}Yep4kN%`}Jv0TA#k0+^L|vG(Q}c{Z*_j*3d9 zIsf?0n*9SMh*{H+kYHjXnSa(|mYi*-P8Hx<8{lyx4YuB~ZX`i?uYSX3_ofI?hJmJ9ZLhRmk3MqP+LAA4yOy-BS7B=1|0iLpr|cnbn4b;#1YzVq^ui*3LoPT5 z0gojR88vz+EO{4dex5>Y91$V>9>x(*dm9FRGt`uCCWzIY4QS2Ub?PN{j@1&hrc-1+ zdg_>+H7KhvYi=mf@-s-RHhcIm?YEa0B@`!$oKd5{)@(g0dF(CQR2S28|89{b4SfMj zuPf(@KGy2+@6~HG`m3?>4l6voCUxxa3Y9MN9E}+>K3yD?@=ZUr>hp|Cf?#UWBPZ3>0MdPk>a~Sc@(5oS3UT|3;(2K!R;^C4BEy>TuThKsKZ@NbQx?M*%4j3@sT}_}neKRD?@2>0I0gYvBmn;!7i#rd z!U*KBfB%70TJv=M=8apa>C@G(`~w&te~(I+e$FT@PsJMst?3N&@bMk-{F}EgQH9Y1+IAZQZ&}I>4q?vCW&dPzkZZv}ExT(g$aQSSi+3Y#URkP$8MT zaN)urS&0BB1Nf$3(6i)9c&&Jcr zXBx*VL0M1Mn*$q_RfQ2bmCZgp>`#(EZ$4GF)&pyLGY@|CuHhCuWyAu9 zt5^S3+t8W}t-5eJYqHqTVyESzg^NnDyz01TkM2~hT2-TBmWa1#@e>1X0}k9CRjO2? zh=_*rTq`p@+DHpSsg%J#bNZ!MpS=0=3jdrCSpxg4z4w1_i@jFw(yqUD8+|2Ierw8Sx`f!6DZdzxO<(Gu=Gwb?18rTgjE;CekgH!!y$pG;N?sX@00JQ3ZUmk` zy0MQIUx2jh4L6&#xj0=c&u~?%QibOIXuJiDp`yG=`C(y5HxTY; zmNWFpNy#)#JjU+YwXsKE5$x~fiz;|7jhG9KR-XZF1F;DH}9vklFK-~%I2+g{@lKUCQlhJ%1)3jC(8CJ zW($9M!J6K@w`SfvdFb13CJBS(fiR|@h)wkG(u9eVRngXDs0lS3Sd+zD2F?BPC;BL| zKi#+)N7(|i(zQ$OKV~*59D>FUXNDD(#H0Jb6 zuRbM;7L#qrEV#e#6mMo5`uQ-6tI17uvUaYuZLG<$<+`>0VvW7E>sso>H`DLD)sGGx z`de<&U#M^)`SOc)ZJ(#}V(-?kMvtXONr_}lSFU%#f(0nI_@1;U#6R7>M)|ZymX^Fh zq1mZr$1ZBpjY}8PnWKl*b6yGidc`NiuYu()ZP@K*y4bf80R%t*1eidUT6H7fWaogs zaP8{lR8m7j&2NyNDseg^*Z_X?)Q?>e!P`{i%$bv}U4J$ktXwnv)SAvP4aT(ztCZd=QvSK0iwAa-|Q7Ytj2HNDvg=IuGy2s9_(nhaZX zvL?$fAb@fT|8Cwcgje613;aeOZr9twXPDp4V;ZzF)1!^FFx0A_E&9Cs&Rdevtl9sQ zYaDoNX*6>op4Lc@lSG*Xvm{HIKwAotVc zEr66@O;;sddO!1vr<(0v>rKmlnnSVY&!<<6+_-<-*ssLP2*ebdnUF=SHgEBAM=Dk} zj2_;!5YjevhZ%D%Gp)C)85_Rw>}yru>`tH?81%4Y7CRMwi# zR0bP@yot5Ffy=j5j$UQ+8?DkCtm)0}OV(!ht;w)OH*2yUiKhawv8j!6(=w98>p(4S zVWX9q9&MzBp{f4n^h=LE?2^P!Q5+q#wvC>8SnDs=*ju}9sZM-D6(Zgi7Z?~|bfd`o z>~b8xrq(c6)73C-dXD476DJPJXL@94%~Q2@U1`9dKY5&XY*|{ z)!ga#1;}7!Q5*=kGXWU%?%cYl8wh{^2skl;l`B_K5wV8nyQ$yESLh}PpZQ$k2_ir7 znKb!ZO%oA%RWC{0cs~-e<1rV`QoQ)|%Hl;n;)$9gLXqdh>z*4or@fok)4|<4)z?is zqAbV+0T6Is0&uNyP}^pfYmI}d1F<0Bkp$T1nsQ2Bri!XWk1_(DxZQD2Nt^fq;LV!2*c%1k^jA!$%qq-Dirw~0{ zYhc9N*$C#c!-zLW2Js+}xdb{ND)bI~0W!A@P&x=WGXXZ{ef)V@F@n1gNP2kBsf~I) z403xGv?+{u_v*8#4G4e$2!H?xfPjqz;7(&B zFc(Pf5p5b7HF_v4c_;6U8~PQ9fiHlQHxkqX0T2KI5C8!X0D(*-0E0dg;oDMljvP7U z>koOucypnC-Fg%z-XX7N$eTA0<<6N)71^j!L+aP>4YTL!1t&S+P2#`)YLs}@ZNUuD z$dpfp6zXP$lr39^J{|HgeK~5FO*MP@r5CAl=Z-ez(V93tI+^wb({rt5+nO#UBqUw0 zEw;5Bd(vkV3wv~Q=Db?^x*q)?J^kL9xn-1YWy-%sHEWrFO*!k~7m$NOvzM|-B`tDo z66j=!0|IkXt$JTjfx;=T6nB(*Y)^eRb&8|JXQ*5l@fnIc{e|&+&s()@P8~bElBSUI zVdd!k5B^WQL*Dkc8l@@lX=KlyuT$qP&kQ4eRcWrA&)#ljdTvQpW?d^)sw8=fH?Y_f zc+mIm-NUMg%;KR{KdTkU6 z)3h&`o~M;Zk2rpl)!p zGiUsd__c`n^XD_tiobZ@=-Y>uuUJVJFJ3abX79<38#m~>`1ACTQ{2R~YT3eRF*v(^ zTEX$_aD#(`Y4MWZ>G;uO#BU!m4H;cmEjpR%n3?B4&HtIEO`n;WDmX>i8Qo7DQE7YX zU~fNgWWTqkUXI{wO=i}>d{nml>r}dIC(54VIq~+g+>|eWI90CkJ{2n3Ok_{nu(u@l za?DoZzlRTRT1u8F*Rlo|q(X%w$j>)8Q_4r7+6myTP}*5#ddmF=576Fy2ZX`in?{Zp zt?JXdRZ9xWmX#JRT&%|Fb#UYQ4T={}1Q0+VBM2x@Pm+_9GNL$5WjLcwmK4|fM&43c zxaPbB?Cl4x*6$tF68ZAirkuIU)0tDh(xZo_uX@fx1q(H#a^-u_iDN(5q{6k>eZ+qV zAYcyx81eSd%Y?kMXV0N2lP6NGTH*B9UwepsAiH+$L{q+*D(>hX8fnC@M{Lu&6%{U8 zNVwd@)7EW&(#ez2YMO=(>(i~9x9ISZqiP(_g0^e>JT3TT5%K%!w{H29#5)ev>$V=S zp0Tm96c=}s_-3O>(ZUpaC6-o*S32Ik8?TDvN3E=Dz5;pW``Op5{)2AbHhy=xmNb4o zz7)~85k2=@DSDLnh|Zk;M=itLfsc<5RjpE)Du}fOIdkQt+qZAi#*Lfl+`02IOXbRy zs6m7J(mki!t6eB5Ia%B={c28Js(5R9TPvRh@(*g`rj4n5xw7;`w9CayF|>W#4!Rz9 zgKX8$TEEb<%}ilfD!X*)=O{v~zu?fRQwNH>ag$cAT5TjkOI^7PrLSGNa)p*JUq$Si zrUYy4p`_zaOFCJqi=hll$ChLiEn0-?)~QXu81yynE8Sl0N=uh56aDm=8(p(zP3V&7 z6Fk0ojZALwn1GjI?o%+ldz@z|cea2Q@wR~?{&{fsW zT7A`o;=o!RI4#%1T)#K%6I%3B%C|HItkr@0YkI$1wQ#o72d(K=w{C6Wx{;MOY}lk! z)#7K)Je4Rk=W}%Y$p1vTXHN*(_2bEt$1;v*)_weg#P3*bx_V`|kvwnj05NOdSj^;? zrbmzN(!~qw=-wT%pM?l~qY#q4IGsB2i<&1_zN(ZjZ*}qAA0Wp1KXf&A4`t6@nzD!| z@3ApE)O42Qaw2w(DO9v61!T=lj~?8ln2TG*Z*R(P8()|Ci!~K)iN$5D9whuLZ!YeL zGV>LvBmTlU85J(kl=42PL1#}dr^Li(zuofU(|_zHRJdpp>4uY>ltBMpJ1AuBQIixF zPc0rjxlaJ~gdkYncgs^h_O~5OJ%5vxak30 zYh0{h*)aZj!7tROcTeKQuid+MqhrU8)1E!XclUYn(!;O@?k~<_y(ba@W=Og`kFg7s&C#*|D(T}HL6pWE}i6})1crWX(({q zM+5t-?EP3*I_ZR>X8S3Z9A^(f-UuS(F8CRoVle9fCTr7Pm5fepg?4eKc) z%zn0O_X2h7*q#y|JfOpej}ZR|jrwwgx@eFM=qJL6=fK812VY-b`DyK+7QL;N&t<&z zW?yR2vW)sV&8qMw$2p;w!kve8m@vS7{Oaq<)L5&gk5SgUKv zlEsbsT6m2b6gg;sDn?6tsEMB*q@|OVx|qr_J+~%mOe}nFE80Hg zN0u*eU+mMn7bQMSd8J{6a^;A}wi2|oXQM_9Xwbk9==iad@@6)?W(}G>YdX~s{Cxe= z?&~bKcI}!peE1jCpng4iDBS-zSgV(!m*Ji1geVD0Ws2)r%NIjharOx(!BA!6FedTggaZz2M-3;>C*5u&9v~d+n+$>C~yy($M1fnLl{&kb3v(Nq=tNPCv|@C$I0_yHEH? z2Z@`B_B3P0EE%UIO}B1c>8`k0iHaIQ$xn^#rOTGnqJ{G<)^O?4<@DQcOO4W$EK!0g zSFb{`YyOZ=E$$~I$k~2dX5(3)7QL;N&vI(lu0>H_jG%wco#j(nv0|0{V z`-L8DrYiXKz*^bdFZhW_+ZWmh|M(@cZ#zM={psit)F7 zXUc3}bo42jF?}kn->{L67(BHzmEEOtCtAGtH(I#pnOmQ=dZooi%Q&$#22Ay`)KAi* zpQ-$`&aLUErH+PjE!Bb3S?lYDviR7VeunAI^?NOKu=agstzL$Dm^)6Z-)Yh9SJ78} z%-ockmQ}ED1B$)0ogP0)aq|nS*o%TgiqWw{GlZdikE(?a5;xE(3ni0r&*3^8NioNt7V%Wa9K~DB#W{}$=PAt_tEQ`CU4&Z;~2Us$6IC5{p{*?fHrl;;+bbyqGw=*2nT#`Dd*@ zO1iYlP_DW2CuZVZuyxtxW!kh^(!GX%K>5+OVc?m$>eZ{!nl)<;qlt~<>%!li4S|dd z2M-=n4R|g$?s}XoK3leI#I7(^t5&AJ|2|B)gj9nNbg}ywCvuxQ4 z)qt0oHT+|q99Ty2;>D<8gL>pAo(6rof2GPdv7Md9Jk#%>KU6Fy_s9I7Cmrt#A& z4mE|rzjN2_v{Y5&EOFsPytt8XAe4}pm`Jz8ZdjqgDL?W`yy+(!`-aB6)_NJru{353 z$4N$y0Ye?N99z;)YaO+eqolFcrb;^H(~^El8cUyA>!9WP%u+d8u9@~bt-8g;#L)S( z=d=_-x$;z$ZX%qRjYXb$K5}@vG;rBX#>d-FtRqV?L^(}z@_jkG%*Pz=-@i^5{#hlB zc|K3L_b-14BQ|ALUY2K`uPV_NKjF_7k`;@ z3jOost4_J|R+D9C6FboO`GrtY(gR^!-=o4s8dCu=6YneH#A7UaC|q#cfzUuxImjLZ!F@rt1WbDJh9Az4T&s517I;2_>|RedJ?VCx4TU-cpB7 z{qvrfPd~Zp3gv=SQc|kiAHVrHZpP~%z zb*rA|+4Gq+Wawq=2Gh*$v+H?X*&B}bxfFDBl9~+TX~kHT#34E)-8repFef= z)~SDA>0X-i@LctvA~UnHr@)}W1L@I6=V|L_=;QCWFywgZGqX}g8Gq|G%k}2m(7_wM zt>hbW{Ar7>3|Y`DMtcD-$nMoEpT7F~Yo*dxydFlz!M=U_c&3lo1!s$us@m6{XBW1+ zc@wS$&p$&IM_Lw|J;2{d=S8(T!gSl^EXyck*DvAp9dOp)IQFEUZW|3*!T9u~pH6+c zZP58W)2Yv!Ji5B+%9KT*jg2*q>?tWd>F|*jw??^`*LAd-y{@V`I=g<<=Ux2heNAiG zur3(=OPV;jP|e%axUFq7`2j^5W8be#20p z{QL_>|BAj`e7EDl#ckoEH;lT(RmUZ&D6 zb#$6*vkK?T*7C2}KC_&k2m8{r(@vh=Y3Ov2h92hk;^KdE?C{|(Es|Xj`t;$Y@<*rj z8ycI~sn2yqTc~$R5Ub(f!GkJkVh; zvO2ms=eIjKnN#adR4tDEa=)@-7j56Vki+M^&cWkT zdDf_#D#mdh)Tb;0aF;5%uKI>5e%0UN6Kmwl%;v4;*|I-ew%xeY=Ch`j{fOA-CX++@ zIHwE_*6*D3+T&cJ^Brp$^qmh&GrE9(oD!8Wc--XU=%!!&U&tFTD>yIV@HYMX_EU9>0X=F|0o`@y?G9b+^2qK% zAAPh)$?4g%<-KBlem>oG$89{-;Ocni5XuMg2Thzhd*}C7mt`gHl~??jMvorloK5-q zhy!r9ysj?S?N03U)~R3m?()lLx`gr>%-i~wmhMx!iw@$8q@$nCxUg%J+_!6&m5e~u zt=m>B9emN-N=_i!qATMIHsZxt&&kfFEn8Yv%gHpW7|ds#HI0@oXc$cre_YIw2XdghpR?@aH&4(D^t($A|>_gHI)|&6tKUpY5HAma$P%l`d=L7hYY`r z(lh#Vh?=n^`q!{OO=mIe&EkYhj(r-6f~(}00La>=jL9+v{0 z@C5!f9kkQ`!y#9aIWY8nh4&~!HI-+i*Rb*a;6sl%R^BXp_kEtt8$&O@w1A!a8fe}6 z^;CG@{T#RQ(U4Mk=iP<8Uv(1Q|G>SxI;cv;)!fgk?p}TMHHRKLdH(vh*OfEz?;n4J z<84+_V?!f7$9@BsTyn8Pj`=`B=e+Xg*XXyienSTi9i)_`WcuKPMQuXaNZ6gvmn@|x z=g(sutCcT~RR|8Vd^^2$>X*2jvbX(He|Um_9BbHcZ{~o&N9gh2Kk2AWS3jL`;SlQK zz^+|ZMFUm0Zd{B_ZP{$4qV_d; z`1{!n*U_p~->DEeJ@b324H;x(390kpIdeHqo&I7B-F7)EXxA?~-vMWNa_nxL_@bZP zZ>5fYc5O84@2L$|c|Bdz(a%$Pigzpzh05fb>HLH?VOX$Bx-8{;S_Cf0&Y!@~E-7&g&JU&h^N# z7|i_#|A_yF74xF6#XLLSol-fZOZRTa@%0Pnn-z0;^M=+HvF7s5=R3CiTV5+uFOKWj zy~iYVtG2eBc5IOaRuw$)LtM`e>Obg56cg3*=0Obbb>F?nHbIrjf23@yGPv_NxV`*a z_3hK_xZg4n=v-IP_79jzEcNbtI(6?pMcpbZ-@?0Pz3SqtrRxNg=*H&0ep7VX{N zI%{o~V?K{hOr)$X87h2-rCy{+T~qAfZyNu9NxvJfbRR<11@4@ zCU^dmkJHo7JVz2H#oMIQF0)L#e$n|3m}R;fC*JC(^INH-pIsZx`pdbyHdy8LbWKM; zPvwn!c5Tr4Jrh}0?b6|F=wbC~r<+w7xt5UFx=K^d#f@g$ zRY3YL7vJe({3i3t)d|PlNt-vl!Eqx$^s4&ks91_m&gRWftRFIjb9_P;Pp;SVN?7^Z z-_{h2jZLEH*hJo}qMRoaTEe|qDPh#rSXb$G_b97!axI4AQOfR6H7Zn3TOEvYMjh_j zW8^b`*4C7nFY$v(EW^Yuelk<%NXAB)_Y}ti0a{!&`tDq_RVjyCk!Gva&85 zlFa;h(p7ZS%_Flu-lRI7?Jg;4UFGDitn9AkOS02jr+(=xyEg&4`q_;O-8R~_%Suk5 z>eg+ml@7k>Z6zlVZPAe-vz_K7<>a5gNsQTa-oQaz>|{$D;{qKj7*XmQJ zUFLFj{i5?7Fw1l|PQ2Am=eJTvKf5-X^_O#ZZLrGg>6(syp2{2d?AoC7dnU51+NHzU z(8KD}PB*JER@Y?JtHhfeG~^-`?q&bJ)oK=ATwUVX;P1k|+_J;d<_-U_D(=-aiDfBr zWe21(p79rhT8!4LtYeg%s-pqdy%8#b@M|jF{~Z+0##;qPY7>;yY4rqAef*0_{a0`|M%t!WH3h0TwQNk6***(=$*1fwpel z#@iiNQ#QZVk{Qz{o_xw>V~F+wje0>K*aXCX+Z+Z>e8$(Uevw^hy0XvtK;BuYKgWlx zrP}IpD&Do2KMw{(t?j%ER079#95wnEyp?#pnwgilk@8Tnal_v^8r|A})YI97cv>gd zQCPsWCP+OQF0M5}Y97Rb00?w20^&-Olas^7dkW7CmQ(3I_cMAOtm$YD2q<6i*o2gJ zB_VMglalk4TTgw%5vt;V^`2Z>+Ev*IsJx+;*Ua%kUUL#x#i2un(l@KVHQx&9c_3VC zV8jQh%YtFV%Yu~XIEgUhIS6ZzniMf&<>|YL!*5xAd375B*1DuRWpK|!!_lI8il#P_}7YHLBt~KE^?mTKDKQ4iuB{=tte)A&U7r-Mmi9sJj z(K5T@=84>IDHi z0*EDVM<`70%WOQ7cLaQ8=4(0cv_tMlAmHm*@U>hdFbTDezOwYST&UaEk?TVrbmZPe z+rohWjQDWq1q~f!W&_DP0=_cywVZd_A$KGY@O3QsS}qcpgjz>mS^8Qo)a~oY^`Q?s za_{=mwy47UAL{770KRYuP?=eUb7sS;4-ia<0Ra#I0T2KI5C8!X0D({ufDs=m(qUAO z1g-7S>qOq-E!9%1G>)+)_bvBlwk+ZQ#rVWbj_ozTe?b}&GBYzd*4})LoPo(A`+dtE z*8K*YL%sV?qnx|~#~$EPgSqXJXYvVi9F-3qb{UPEaJ%EYBOI99>~EU_EzeG$P>vzv z`zqf_`Ip;u45cJ@vs2OXeyBNFDiNTIq3VO=lpcz^!Qb7d1O%59tnaHa4&422n}0U~ zgc)K$00hFA09L(*ap!oeT6A;*C8c(y*q9`$t3OQD6|$R4+pW^Fa)wjCerHoT@4+nl zHJejz&Pd*G`3x#Qu)(okvpG+o&xZ}aijDYzv~1};+WS!Zs)OuXE;07}NxG~PlX7Sz z2L?{&m|_xqI65kx_oR-Z;^HN=aouZ51#{bzlCmh?=>bdj0FUM^_Bv8Bx7pve1zMh+ zKA{{##`o2%)4si{Xv4Zcd-WX+H7B#qfjkd>AG~qxRq@U`*3P{@$S#4va*s-_KVUNN%Rent`}+s62j!J9tVyJtD?%CpW8MuH7b5R?aZmvgw~x*XEB%6!qvim5v#91+8EArvTO( zcu{*xR+9V+=j03PbarE^sNAItcxhV`$2U7r`i)C7Bcbgs3J2gM&}|O1yZ|)OQiLyK z$PiTDSgqco$(yu|hyO}lcpvv1euE}EyX&S%;iTIhU-Eg|2j;!x8|tf6we_`!d27!D zzNmmQAOHd&5D)?|;sb)QeS~D?j!=6>f4}CBtU&8bdsI~P(e2=xNoL++6H=*b_lZ=x zXPIA$%8YV;?~^Gxr8_k?RMWn_-?HJo!XY!i_o-CJ`&rBEe}11+l)rmj-4WWc{l8RQ zSxVh{9LK)lBdNKunM(G2$@x|}%E}+s^e%mA)B3+Vu89wD&)%m{VsZ}E)f}STMW4}; zBRd@TV`37ir___)SGB&TdY^g_I9$Hfkta|GzOt4-^vTIxDIqD_?H_!rwtLcB)-Cj9 zUwbj;c5Zv0``Xd>&yPOyR##sD7G(5GdD&*_)#r5Xzi#Zlw2x#@aPxzo9dkq0zS6IF zOifmOCN4t8^+5E!UBBAhx8mu|*zMW-B+6truUh6?wDSY1JiOaecldPA*YRXsSu@Et zkO@3PFR4qHLDZGMYumRjq}rO+{o^xpj-_1w&Dg$Wq57VhImO4PQ%={>l+NF$g!l}q zZ>*&Kd%p|VcU(ulUEf-_-?yuQ?E}v`sCMzV>XJE#*&k^$uI#>do~7I0)nV_?cUVWh zy_U!U0wCZI0T}fD&}+xC;;Svj+3J-~vKGzke;rMI`=3SK^LZgF8+>)O<+NkRf2p|W zQ`)`#LmDyq=WPsnnK6!wYwI(f$iCXlmwUnOOpGJ+ph1Q6R%E9kdnUUP4NkPZG6H-R9{!Y4@3vq0H4H+M$yXUkFcTFGMlKwS!6Xd)^gbql-G3} zRaNaLUa_nCFi`z%*Ozwp%?!O7uLI8KZ%{M0tAx7djioG}?OyizY+l>o+D|Tky*%+} z3|Unr24HGhK2?0EO6Pm$ zNxsfK9rnTQTOB=-2LwRCcLFfteP`FMCB-+kWY-dQ)o4(93_bQLN=xrU>sBq`8M;au zJ^ogQfiA{KGcU4iovm+CeaJDFYPVs~&`a20Y^0UT9#k`WQgF~QGpHv&G?bREr1C>8 zFZfeZd(t+Z?KNhLjXYIsT!>-R&`?F$*~8UCMHim=G>mw&B2r&nZ3WjiM;TMHNObhX zSu}9SbXxJn@7O?1R5dCe}mv;9J9i2bD8LwM;ycQjOyCIQ3 z`u9JVA2{;^`Y`Cv7&6+`tJg{DO-y`37s}2p;NcTZ+cv+gZp-4zs!Dzc;fE~4h?jgB z>HTT@_V+lC^;p}<2LINLZ#o`WkQ1OX5T9)Wf@;(znhg&af8IW9o(8rxANXXhSE ztG{_xHBXGKT%Jw*YQ=-fB_NJpm&eA$vyXPG!PnSWMe?dw3~D27-0*j*uI3q5Q|ivI z=<`^fkwl)ndf&x=pu~;FNISN@rwsaB4y$Mw^fF_+W2+btEvfpbFX@(z|8mq_bM#tt zY`l@p$>Mezsk%~T`NxvH(ye0`h`Rbp%4Z{|k=rDB>shy2cE<^H z@|U&v#xL8qmb&*ko(=jlXfQvlq^9@enbN;%t11sPLx*3f+&@;WoKKZUifqdYd&8KQ z%(CFNs%kI4Ng1fhYH>c=-%ZU;wCd~mR8`^XauSICZfL0S*q3(q%^&!?p1T&k|x$N9&oXi25J zmm68yd>X#qG8Qs22JqXS?$i|3L~$``E_r?JXFK`c_N|LjUY-P^4|J;(Uhc+~H{Uzm z`mFNVu{X*Dt8WeY_yhqE2p)lUH|T@cw2mz~nnO)Caaco1dEF;)NXg9(pWYOnjg?e$ zq}7Ozjur#HT3t8(lMrTB#$YD<+B&DigiLi>#s1aKN&KuE>uV^HU)={XCB(P5_M~%6 z`&6FgcTP3c2bIf+JWQ-x^*p~Bm`Ov1UPgnDX{JMm*3*{FZ#XzOm-FX15Uj=ZVfT(j zRJ!|18ZqYQY9aFO9Ur?GVV-o1k4@o)%_Eg7#gW6?J!N&=bMm2gT&t}sr=-MOb*{@< zGRwn}*?@Nl_4j}u5Ipv!-F;L2p&qZM>Mc(LF^0Zg@rdR3)u>S30QDbm9$a>vcy#HwR7Z8!bs*gS#YlWr^Y0^ag6V?{d$N6QjN&c9|*K{y(>p%E~se zk9{G(_Rr@x5d~_~mV(j0qAwTU?Rda(TUhf(pjpeCkYZlAn=!l}C9;c*^GvEIm1Obd zHhw@EHsU%O$SzHryqLvzmKz_J#t(Cq>XI&J=kmciw(Co~`_6h9?F!X+b*|g$IM8Fr zst&m(i(3!zccN>zalA-%IlI;LBV+A~RT&9`s@A+THPEV+zb9cVX~N`t)u+Gz>B{$} zZ++D%RDGbMpD{k|e&2Ltxyz%=-d%aS>%o?9SHFMvcb$6&|M`S3fPWNGIt&TSDx5PL z+q{Nh$JnVP@eE^lRhp5Sn(8TuL(Iruu6~1m$id`?s@0Ij6k9KLkoG5pO=b07cEYdX zxOXFrD%EFZ_As^j@o?F8m+StXRB?SWB9#$U8%slk6HJsi95mP;*Y#a|s)?ecM9n$?-)ce2=$DwyTtoI%S7itT#Q* z-qzwve!IT3yYE_OsK={o?QPHe9Ybv;y1!Cd{H1!G)u-PN_{p|jg>`b5J1wKPT41uB z{p1XbKAJZ=Xq^RcS5oh~o_z26Rxjdnr=C2I_7s1iR*H@o{Yx4<@isMuU&*T@ zWfiK=iKqE@@)Y@ifj^`n!!M&fyT0I^jxuS$po{q3{UItX_AkbzS+8cUuW0utYUh<9 z!!GBzmF(mj)l6CZa3W6e%Raw{4UGgEIp+Up_pU`8pR$NKH1U+=cwS*z&yN4Den4jV z-kkf(dJL~Vu3-HR9$ZWHwUxXwxfdJZCs4)VBA-@O$^rz51v+Tp1yoZ}N(TEaCTl4;kF__ZzLx2R=6Je((Znn>O(wU+thEm z;O`hRiSu~6kDccS9dn8D-zt?A*G{kS%mr&}S{A(Ia(vjTBfBX+Ig7;jmvK|eer*0G z9r<4Ot&d8DvJdQ3^!IxwTW~k$W=Iu=dZ~ zx4FFX^=ewN{2@o5oAX9RGd~W(DrSTbK7)|b>!QP1D$$w^Z4E$x;5zM^XEG#EB~F7#2+;q^g8UF zWq5lWZ28{mgZv=SSqVfd`hgG%h40x~?o0H=2>7 zenA^I{7t!*Xov_%7J2m^pPWsNb(PAn4v0_>LX7&F8?7Hq#AuFB$l_V~dbRV4c~L-Z zO<5c1d3m|?*xZNd@++=sb5AY=gSEIT#Kx!a%zT-0d$O$9i;E(!nHtqw8LMKW#{QbQ zWYY4bvq^T85-#Rd&(7uSI6LPJ*0Eh*+TFL(%V?KB<278ykX8GvuF0FMEOvYQ;`2MX z+nZdn$Xm7Uym7-PAN|5{U4BdAWG0?B8IalQKqnpfc6}RZeW1(G7@zKb-*n};%csNM zU0I#$I`XahPDeKKfIvqlkdT<EBs5g@P3*R1ByEkiC+F(D=XqWlpS<1U^J z{w|pV)lNy9H~b@@3Q7R`8s4%sRLQPBnb|gWI0}|dfnY76YwBtOx66=uXDLr@caAyg zE}tD|cjW?k-L5a~?px^+4($@X0x^cH+Sht5idTR0`UiHq>c(*@B}l%r0WZ6zC8p+5 zT3SD<ejj+N5vdJ9g86%@!`^$XTT296erruQ z0s#=PA^;=aib@z>YvLKQX!eJ9P7*YI-Rc+F&7v!1WDVq9lKQjjMlJicmQ(Sr#R2hg zb*@kI_=)Z1J$>^9(5%3hY{Ji%6hYj5X&%aWK_GI*P&17l^J{+dlgu$$H_+~#AG@?N zp4YaFpTM*9oMa=2NJ^2@2a!ZIG`jlQccIY^wSYk66M$mx9d`q2o1lDO8{n-7fimIwZ_XfohW`tjiq%oAr+dRu+ zN~=vG#C0Vja|qS(j#7~}CL*a1B7C?9Tzz+a7x0Q85CkHSKpFcS=t?UCUbj(TtxKw7=EE3j|9(Xuw0|G?szD(7&eyt8t`idY z%ee)&hn+8gcl{6ugC1@+-Z5|2++v_M*0r5wZdau`XysttK|3~t&B7Q8A#68Qp%2`E z!DSEtfet|c8$xx6ZbTzM00ck)1V8`;KmY_f69E|UovF9cRuBLI5CDNNAn-!B54%RV zFF+VjgbE-40!{>G70#IrtKJC+4nY6}KmY_l00ck)1VA7X2*8MsgkFM|6at^Ar^`SWYEZQFM3R(<;M2b7VKPLq#6 ziK?oqRk?u!2heT5y@iGjJ%(j%qaR;!jkY}9j8^sPmPI}g009sH0T2KI5CDM|0x;qu zXe69+@=5gA+&N0)ty{NId3iMT>C>Bf^~$HEOTX~Sh!+FioC@!`i-r#$MrCDX)Y!;# zc0ov1^#-9Dhy(!;009sH0T2Lz4ov_?d<1pxjX%4dqN1YcS2x{4pMJJjX`Y^*M$<36 zfHrL0YV+_yPo$DWrh_2!H?xfB*<|1OhPVBd8Z; z242#Z&08H>A3l79UV8aYj&pwwVq;r|LwR|*KVnc81V8`;KmY_l00clF$OJ;ad4~v?c1-K_vqY*sGwk^$EFS&Hk1}T_cSg0;xqd6Q0Wj?tW7Z*qDv`<%Eb3IMJc&5ttvm39Yw6rw( z@BcoaGpC(PXZ+w?`e@O|>e^3#cAZ;UzUb;!7;b<72!H?xfB*=9KqnypBR;}9`t{fU zNz=|gpPqQ~DKcDbCQX`1zxux$9W5C@Zk#&4=%Neh&#$~hFTD6HWo2fn#j+zu9P7yE z&%sTE&0bsi{f*d*Owb)wSb}Yq_URO#g*KS5uWZ1pyEMfsRRF z$px42`_{fR?X;7pcgz-|RUiNYZV14jcLOGzFUum=m;d+*oqg_)=#4ktQmUTpX<>nIv`V)=ho-``^x;J6%L%cIl$dOG-)|*Ncxv!7=VRZa5u;LRY8i za0mh*00JNY0w4ea9fAO&)ba>L36DAOHd&00JPO2w)~Yf(F9x=RHa% zo-mb+5Rsz#)Z-_s7OeYzy`v>7d6!p7S6=aBijHpSV)1F0g|0F)AB?nY`3fcWnyar+ zbxOTgUv-7LwrtsQw^g=>u5OjVjdmb#c+@j@!WW<&z@thK009sHfsRCAR^go4n3|7} z9?i(epp#BILH(<#siB=kyC^XsL9JqKXlS6PpMK8Kk_9ikL?@hZJY6#5B0BxFQ`NSu zvK4H6d^|n!=sa=`Q{yP)=fQK&w}h=Z^NiDJ%;?cdT5fI*Ra8{avwY88Y7brA>4NJZ z00JNY0w4eaAP^}8Ff|_`Jyly4W+qeLG zON-m+o{^E+<{B=500@8p2!H?xfB*<|E&>UONq#pNv+{l;ga8l#0T2KI5C8!X009sP zEddzuq2-O*KmY_l00ck)1VBKGz?92g<rgZY1V8`;KmY_l z00cmw;}d`p-|_nxEd&7&009sH0T2KI5a?h8V8nN@4n=c700cmwT?xEM(bM4z(5_v8 z%0U1GIv)WT^qsHI(P9t)0T2KI5C8!X0D%Z603$xaI}qxF00@8p2!H?xfB*<|J_0b} zJ71rp#cc@Oxa2d$1!zMB7eD|6KmY_l00bh0z^uYKvtiXoNM}J!5C8!X009sH0T2KI z5HJY9h&M>!69hm21V8`;KmY_l00e?ZU_{LS?hi^_02uVa>oiCP0T2KI5C8!X009sH zfuIn85g!z+!57-QcQ2Z8@pSsd&wol+U3oc8nKYTAqkZen6Hb^)*IoCM;45uWgXsLo z!w*u=o;@t?dVeWBJ)OGcb@jd=N<j<-U;8V`y$9~Umwx%Ho9Xc3!^W*n_4(Rg{z@`4j}&+US^Us<<{78c z%P+qYc;Nw%n3>sy($doCUvIocm6eqNkO&bV00JNY0w55+1TZTfzJ1e1vwr>h(dnn1 zN^>85+{J*GjE#+rv|zzY>iW!?Guo8xEEkH3cG23k>pDww(M~4<#+#kS#s;UWI0OL@ z009sHfsRQ4Gw~7Bucw@HBCT1ombPx+W~p^kQxm=Q?!W2hKfRt_eDRM|UtdoXCX8pp zzJv}QJVZY@^9<_MJD*DSl+eEyzDGxnRJ4)Pt5-gk8At#6*IO?4a&mI$)KgEUfBfTL zB=wk6Y-}vQAs9)+hYzEy>?|rTFQ-L|KB4W~cerGYkBy@fPdb4H4je#r^>wsm^H!Jp za$@Lw=unx`Ilp&LDk(0Zx8M0URaI5daT6!d`0-<@zM+BZ_>?wo+~|-olJ^#0cNf$C{rl;RGftzL>Kgjs!;h30af_MugEOgX_dLb& zKkxsK4waWVs<6{}?;Av#DJJa{mjFm(zgB`4AM->;`-%a*I(f@&UrU#(=1 z3{G~ss!aF~1V8`;K)`1Ln3eY#UFZuA;Xj;f*M9G@;_rDzIypJnv4C{k*fBI?#zksT zX=+-k`hzRietXMrEak`_;Y(&*%zpS?UGAT9%1Jb2&>%}=UNWA0?%6bb`UO;7Q$wp) zuOTr89(?G2m&K=PT>rz5Jg5xeJ^WB{kPWRVQ+aD9Qxg4VUU~^VJm-E&OiG~j-*2Fa zlP1zFzqyHK-*pF_e)_4jY4a9d;2T5t72ZvGdASY=!;d+Jrc9pXIM-?a4cA{wr=M~% zZCJmNw(r=<2Ff5BH({(phWQ{TE1Tv$_AnhgVz_GSo;`c$f*+nwXPxx}l~sp@j$Yo@ zD>5fe97n(V-Mw`Dl*v?ESEodD@7|5y(s;!nS6(`IGVCnhFPO--$f7@5&sy?QPGp`Pk8>pGQZWM6;%A1-;F zPu_m}U3&A)x1BFhe|7~LIi`S0{_{U|edf$d=m;A}g@yMkS0K6g_B-#=KVJWfOF22| z!G`DEvkU3KfrILv82xwObvr%%%yab7M;|-#4<9y^j^&y7MSDMWTr(fowSOYd@)zEF zzvFGkzyJN7S%k~^mAvS4+qNBS2+viEjpgQh@Bf#5vr|<*9Tt+&PA?_Q=|8)ACF_if zFXA^UZ_?}h_QXh6Uv(vYzGMmg>6KU2rLVqPsdT;Y!VB0P>qT|VPUqG9HmIt)TD?(m zo{g8nI`UN|PXF04_g1EiX?YWL&e_x0KmLt22mu!$af>~Tj{c~HFd zmS5BI654_dUDDUgo)~U~qtKEIOaUgA&&g1449!pEUSgM+|apNXh@ch&C z;YW+qTSK|1qpK>6|3Cl)KmY`MCV-iEpV0-nVCFAo@Wg3fns(aB)9q!~vk$P$c6&+^ z#Y6tp)wUYy-+sHwVa!X}gZo>IWO3QBN{beKOedY#;<6z32e2zimo6E!?8_Ba+0`|} z^+xLM+qVx*J$^F9^XzYWN{f*z*JZZ+9d?xwzka(U2BcxkOWuPA52^34P1)@JWc=H>aWfT+8X-kg($(3>Z+z;?H}V^wo|yY8(~xcVX=WsB z$BY?G|M|~(=LqtLSZaUuPW1!eZy|rnvK!@dEpd zv<#`jFE&a5{sRFJ009utBQUFQ&TP+Sp`IM%3K4<5CHtsXe!j=rdi3a_?(f~V-(x;c zH&Cn%=F?BEx(nc9 z%z9;HW+*53D=+^sH90+bNZ!gLt>ImK)mc}*)aRT$G51xbvwTm-Z5VN%$`f+wp4L!M zM)}=)ib)oWm{YKI^tC=uTt%kceVuWza^*KPZQ7Z%fv4od&jF?b4%>V`G0tdF63F`%P*fv5-(4Z7-M5bji&nx zXOpL5zx9-Omj~Fext_O_{q*C{JjxS;K%8rP=l53mWHs%TSNxbpj~?YHCl2Kw z@v68>IE;?56>UDd3Eg$aZCuvgY2G0yzy}h>MOZqAaTz@H7P~I)iHLQ`H ze6wyk%)OOquEX2&H{W`PV_0550|xY0MMcLOZn&O`ii&uFL5s_XS!Sqpw5!jKtKEI= zaZp*stBR}Xf&1>I8-98%oqzthjq@Qc`?V@45GP zbk&uY(|PBfqr!EFPiqwiT9+C4h41m}vH+z;AAd?$U3EEq@~LMdUc%qJ^5@s+x3hjj z2M!&il%!<(;DbeNLfQQFZ?CJ^hrfUP5j88{*w9GN@oV}^F1a{B8hbBBVlw9C=F(Gt zc!CX+8aCXUIne$Qdi?iKx)mlt+9i1QEjQmp4crDXic3pN>4gO^tB@%=EZhqBaKlr* z9*WUB?=Ivxo=J571NW+NB5!l{b4Z|9Uwus#)9pVAeI)B7o}53A%EhG-2N?+-roh$B3aS!Sqpw5!jKtKEH_aUc(I zKfB>NTD9ss`tZX=)HA=Q+8pBCbIzh2?9%t}oVjWpjh(J$mOAI}_84$0d;xSwArA;_3bl@Q_1ST?yYFcni0j^{f&#klcMrIrks1H_ zPd=_<#Y#vfBiZR{!?t2;s@{p6x8z&?sCGx{y z>vvsttdeW89kX+?)73dIjzItfKmY{1BLE}bJ6@e4_jT7^Lz5>T$FI*yT~1C88}BJpcCegE z_qC0~uP+TbK>!3mpz{%cYfb0t^N_R{e~?3h8I^!Q#1fGB`gq8X*zSYkAOHd#gn%jZ z?8GHdEvFD(3SQ3CiAC}z$r9c1#KmY_l00ck) z1VF$&0T}V_+29TcfB*=900@8p2!H?xge3tO@nP95PznS3-{R^go4 zu;l$hh{7NM0w4eaAOHd&00JNodIB)wL(d#Ff&d7B00@K!f$o)Kr@Jo*A!fB*>i zK>!B5AMj8V1V8`;KmY_l00ck)1lofDjQIATjygdA1V8`;KmY_l00cn54+1da{eb7G zXk1*pr`xy(0zMO1a%Erm0{Bc11wjA=KmY_lAbbc!MF++d4~&%X;Sx5QBqb$>jV@3G z1V8`;KmY_l00clFJP5?Z#0EqW81VtY*j7j)8}UggDQ$1y3J8Dz2!H?xfB*=9K&K=S z9UDtAF);yYdte>~>{NNCN7N5Hd0c?B)C`J?iKFVuDyna+vm=K4AOHd&00JNY0w4ea z9gu*y)5vUmpp1Dz6dHrR19paPlVo;Y{vm+?2!H?xfB*=900@9Upa{UVCQu|H2LwO> z1V8`;Kp-3lOdfLM{7&u*5Dwh{9YRR}27M@Lqb?8t0T2KI5C8!X009sP1c6zFb7sSm z4+Kfb009sH0T2KI5C8!X0D%w^fDs=;*r*BwKmY_R2uxkJ@hbQNSb)JL5C8!X00BJ$ zFzEF-Ar}aM00@8p2!H?xfB*=D4FMSOVbc{*1Oz|;1V8`;KmY_l00i_1z=+r5gj^;9 zk3X@kKYRg9P;d$YAOHd&00JNY0_{Km27Nm~N0lG|0w4eaAOHd&00JQ34*?kQ{?J2N z5C8!X009sH0T2LzAQO0M=`pGB1@HtJ2E8XbxCa6t00JNY0w4eaAOHekNB~BB7N$ zb`a>G1YR2V_oYPH_f0$PiD(uGfB*=900?wU0x;-1X1}6UAOHd&00JNY0w4ea d9hksZ$DQ-};EyUFl_pL*{k+rOIOVGQ{vQ+Beb)d0 literal 0 HcmV?d00001 diff --git a/.github/img/logo-white.png b/.github/img/logo-white.png new file mode 100644 index 0000000000000000000000000000000000000000..d4f504850d05d040a11e5505dbdfe00033276772 GIT binary patch literal 20046 zcmeFYRaD+y@Gcx)++B*hI}~?{dvSMncX*LPad(Fz#kCZ-;#$18ySsDv{lE2Hor`mM zZq8a+Nmi1{%sexDPxiBSB9s-SkP+|^002Oik^b@(06-t7AOH^P<6z)S=nMd`Yd&gP zZeNW(Nu69AEv)U#N!`4i%t_6?tStb*YpF_0H+7p9>2-nL0v_&C4`tHT0=D6$1w^Ar z^;6A#+QZYy7;Vd-gEi*;E$0T6`LZYen(Z55aL;c2=&ud3jB9+Uw&%s)x4tb859U5k zy@l9~_54NrYa@RHKao^3K?!>Iyg3BxrPVbf4!Ydvns!-XB_8hG$?m`N`ewSGtYYH= z;)_{Ja#IpWFdF%kwmRKJm+RZS)%@FvCFuhwQJ+N+WZms} z#+wBpIkqTBq9w{=n*ytWClSbo6nY`xb&a?&>fdn?rUela(34%;V{(L}BAEA!Y7~Il z7Fe=3By6jN@`lhPYevpta7C2DsrpLYvrV zuJCO;R$ra4FSepS3XArb12AANljVnky6X-i+Qg zQ{&>-(JHs);Lq+n7OUZ{NdBy`77P-44OFc(@udtPu zJ(>FQhrhkdkvrJR^QnSAPk8MjMQaZl3D85bT2*9c{F%@;SLEgR*UQlUEzzLm&F z_~uZ1n^d!sGxnOv4Vo9ev01PD@fJOp4{TmA9ofh81CY7r}%Ssu_)A80!|n^f=)`}Qm^!_&WS_=BRZT#!jce#h^@+j^QsYUa4vW4qf=&Dq zjI7r9O|F)&5+x2wrVuxVo2)bPx6Slwa(glyi_(1Ofy!Sh!xn#zj7i|t(H6zL z1%iXW9U?`0*$CBZyMhoF1^C8L%e?h_gQos|cIKZ{EcTn3_Ls6l3_tR@QJo2_k(%9O zS5o~gR_+Ltr#o3?`W;t99HgVV9E9TzKc?mb_` z`4v^Qeq5v_Q>U_W?XPm#7l&7vOcI^e^9?R>=V-8lO8 zmL@+oB6f{1AW{m?7jp3aZRC03k*fUKN3Mq+REi&?%EJ&Hk`SG|tkRDQ*=#ooiXqRq ziN+-gDaLD7|GWNuVQKnfM<2819A|k-W@Ue01eWux+dBozDVdC;JCRTvWmI%E6&dCb z{GRlixu3H?$XIXR=DHbkTyrMigGNN*3YH#`o?&QgMVpVSY_UKBY%f@Y(Rb(@BK|if)D$jI@NvOnQ~`(L4P?}OAV*k7b;iFG@bqY z?$3ip1V|$$q5G924kZD0tf6Sz%DFIv=n@RX^U|vpf+A!7D|^T175q<(@Hu~jh2+H2 zG%#4N1X9Pf?gpTTX;)#%t=8CFbHWu4vYXOpyckyx_bd4~x)xOoE8QJ88x0WV*-U5C zmDiC7Tcz$a3OLFndlf_=XOco%h9X zF~vG`Xhev2@t7uX5-6WDm`!foqUo%-85LXEP#@s(E0+CaQ1POFiXk)=X*C~V4 z)#e{{AQ27{D8#>uyZV&i+A5E!qJmn@+-Kn&38hm#!8V#1%!&-@qb6p`J*!1)FK9() z!d#B$ssclNC!b?E!l-|sHjvJ8AoztCqTn9Q8!B{7dfQi--svp(D#nsv`7$?9XJ_bl z`QByf&l~85#zIMh|KIk1AAw-B+F&S?^bM#+(aa0$RLM`&$l{l7awvJkhbhDi+-@m` z(xet3EPxG?INCsJ*eru~+r0dQx^3&3=Y@#ZOH*Um<1l%y9%6ld^F5}1eu>j9?L&h4 zKZ&4msS4jAl?TFz5@Cq(0KFbx;q#vt%P9XsCw(%QCWjm9zY7M7@w^Z-K_GzHb8QMD z%FBw)oBi}e7{}RV*BD6>lP)}eH$K1#Y&2;unTNO2dk(+WA2Ky-!G|eiYwBYpFpQVzijlHeG4+L6*DL?<;mr_;?Wrh>o$}?$v+04y=`r zf@TtYf`rQT2aJoZev7dz&_Vy(*Zk1T3Uz}w{;65fSKtkksPy@msCAA$}h91RKF5dewWFz zO?BO6X=Sm5oYrt|nq+|%ks;FJ9z|YE&*EC3Egg1uQC_Mae@PVCf-|ysuTGabb(VOq zJA@`&eg_|II!uCX76#9JZNq-!1JpUR5ejoG81$5nBhVw)bdrgq1nA6~}s5vKGy z1#vw3+8fR2cx}Jx5!Vf3aN4f9wo%pi`mF0t>1&qvb=vf$eU;zWGbS9%!yz7584w%B zl=0%g_Suu$PoVf}n7ZHNnq%dUG(tFeWz;`3jxNfdIp+2YK%lV)0 z25Me!q!1WWMSgZm)(dU7j9D204KU9yy-|q^x6<=G@M_e`+(}@oktDW;_v#VpFu%&w zE}3ROEX?r3q90mA?L$lKYB&L85K^E+-$tS+V-FQ!8sQ*+1J{M{-Ck=(wMVjO1rpVSTnJ z{OlYWa1HeBp!1T^GOlmB95^mozG3qrav&f}&<}s}EP53(RIJmGBA_xI#R=lW1kfM` zhlzL|D45fdm~YrTHl!0A2>0voN?)r|v3agsMc`=h-+1Kd6%#s~lo#Q$30d)7F)nX= z`F5Y@cb&0QE-ivYUg5!#-Zd{s<19K0u@;?#u)fUwU0j?`P4yDLbnMR}y2~%B>rtV4 z+<0;Fen%jxt_^XaWLh9+V0-nfN|nykUTZ#qpr)Ontt}lkb~k*Zc${?)(1jHmIjx2(bYf zvlu&1k`ck7N3VzLu%}sQnD_9IZ0Adh7IUOBv~?1pIn(U~%lSM5L`}HxwfxlL8tH-w zO6Oc%*=fCjg{g42|HJX3mYg_Qr-s#fOz(S=vHXtm*p-r~Yc3-NqMwI&d}S)t6(Kch znkbu)^A~p*r#L;E*IH887g>-v)R7Lbh~sWPj~-GSkB7WH%CKcz%{foE(;>l;x(fF*95qd^UBqcV?WxEMVGNC_PIr=cVR z|Cj_NLfWCLUs&F$@yW0-^15(^{5_s(zGOsZ!)bzI*NPW39#|+3HkphUEEqA~^mO!_ z_;%La@T7bEw--$#{EZOuTZMnWCZ6b~CnEWw5u@640sxPNIrYKEsy-iqqoqN0V=3<`K^i~!=n zdUIogN5LGZBQF$@(ovRL6eCgFcjrf8Z;?Iz@ex#wiZcqw0d0tI8bQ)O7cApI)QL+8CSk2g4`7V{YPE5hP7}-PY#@OLZVq$nm+jl^;RI5{H-LZTP0Um6TETnptp{#+^IKLy)_a-9 z&aydnmtcwSJ_n4bn`oUhUVACU4Y|I3dJVy<96uh(d!oo5e7kIL~|~y;1jy-F>$Wks}U;e}YIDeEzWj^mZVuf56J8YS_(}e2K+V z&Esv6rCUq~@uaPh9>RWD&j}2#s5BwLavsXSj~qCm1PAmuOaTuKaY>NvS-KBxQR7U{ zrb*NDk??zEh~0xZP=xSCC9hG7A(~m2oxY^XZ^t*|!D$v;QFw(pi87{vGe(NvNCUx!=9L5du-(p|W#nBF%yausf#Gm8gtQ0$5# zsDIzXxw|5KKhg7;@576RY{1_jY`L#KnV$Q@e@po>X!}izYOQv7=IO z2f1rAs10^iFGRj41I~?7IS|T?v*cw@J^P#`!29kXjv=8perpB6^}OF1=CP^U4-ITQ zEXp_YIpJ9zJDMRS>%KuOAH@g2`;-TVX}F#S>4z_J9Hh{VfPw>+Iy{1q+q<@=Fu@tu z>!a{SnZx`hwaF;Phe1mk?+uavJksn$co4DmP8vs8d8_WhZ)R$)RN&XR#VIa)hFg92 zF4=3sMg)(AHq;1oN55Nsa8yt*{2?s{Ax6B}glILk$)>lY*OZkGk9>-BZZ1XSeCU7a z91P^Bg2oVllT&{5u+D&B&p>6%o_0@jZji>eZI9=X;m$-anD9J4-a8<>Z1%P(8UY}p z$V>Cx#UdQuY>hOmTgx(rt_==}?fydehTcp-9iDtl-bxe60XPgs^zS-&eW5{49vow! zql%Y-07G}#?n)h;!8pEnxN{Bv#NJ=e+Px{~EHCm$G2JtPXn3KGPX##0==^IlPFtz+ zNmyquJ@uIgTI&oZZwKIJ$dAMQ1|N&XtHQ>$4VZrK; zbUZ5i+^lOvG0PG{r%fR!1n$*6WJYsNRW8B8MY;2Y-YPCs+O}XB=W$+E4Ff~B1H8H$K*J>E6iB%*hQtuqe(xxkJ^j%OvmjFHcPG$<4eY~PN0 zxKgj^h=u!B`J9IPm8Qq&;TLToceE)PR4hyQ+tm8V)>~Lh3YlTVUk>=$L_p2Iizq81 zR>+R%4HSE5^Jlv7)q3`_mj1=$WEmW(>)6~9(;buv2E25gu^!yvp+%VTW_F5mBGAbu z4qmJM_;#|pd{;S#2zD&5un9@IaC43lTxd0R?-}`(R|NeyJ@Zj0Sso)szUENWkT>^N z|21~cUxW>uLk~iN0|dVW;9YC2^gj3o`q>;Z=9NM$d9RXkkKRYJzY^Qw>d-Sdp=^~G z9>1uRLVaZh^1r(h#y;E_f2L`=wKFEl|3ohouu@&mpaDXl@ri?|P=pKHeF}Z)$vmcE zf1(NsMep`{VQOW(JN<1Ad5EvCRj#VQ0BpZIvtoDln&uYjrX6{%#z}luhhBII&TE29sWMrL%CeX+QnQ-IW^tEvY_kW=f&FC>YI@z(X#%|E_=Kn}<;E zZ1%&)`PYb0ScJc*~_U$V@aIx1lP|0gn)~jQ7E?XQF+bgw`CB#h|m;9a_rxuxU z-ylPp0s{CR))DF^g{waQBUNRvfg}cEzQcDSF4C?qeD#M|Phb_nhyU>v7^2zXunr~S zn>6iUdNOL8;*Q>jkL2KxVGcotZf&KA7lQz=zTwLLQ_*)94m%J zCSa9;kpl(I!UJyalPP^k;A$9eyz{0R^z-)`8QTrLn0Qo?;>_v^xF3puNb_khUqz9h zvy{)BpJLcrVESn%T-+RXYb$v?I|LZ^<`4ey&cf9t-WeUR_Gy}Dn3XqgPs~QUqe+_I z90WM>1l~E@_HcG`h7Yqg54mHky&KzJtKC1WPVe5jVZuERskPmto@ky@VkR3@$g4Hu zFN>of<;?hls>wnX)6r)m!OPof6)$SC3+2o3-4N`Udf0wauv+gdrTQv!Wdd+DKQcs? zpup0ana<%8zEQ`VhH~Gr!98}`><$+U@AI%hjqpGU?opA6o-FTxcXr(H-+5^}tUA~Y zkWfY13=Lpm(L^6TvMU5-<#bAbC(%Bm+CVaSlNA7>!vr)?VExl{+LQvB($kDWT~Pt_ zn}|%Q?IYKwW1_Vo%AjO;V73R;!jbgZSfearA_<&2;-hVg^DUg^*3x5^f_hCBKIjG> zJkE1l9Y6z;YP|!vhBK!o^}@$ciC`(DvHy!e`!R8%rD{LV$XKiAM>%oC`rsYyjf;#P z+|Z?S0JOUKAtiIUR#vH0-34NB6XZTlG70n^%O-)h1z6bV@IFTj0zh}F&?6a6)_gju z88)qc&#Pxv3(^=yOgAg8U;zEZ0?G;;C8jpVwIp;Acka*_C=ssn<=DeQ`+rK4R)O;M z1C-PJ!OjyE0RQo$P4*+^EK_1uWo&-XC*~@skEE>>YCjDy3@7i_$6gEoEetI{3VmO7 zX;5G1ONHnu7Sxi32KFF+4X3adoqYj6(*wC*D&qw}J$Qe{yYnNfQQ&`Q02|JRr0>k5 z$F&mzk#_drly_YJsQ!#AbvV>kKFWBL4-Z%&?}GZq{Vc0Tsnp#9mX&%9w{XuF}OgbNerKpWaxE(VHzRzw^x*yKA=LwO z#79G5thOuEBFCk3D#OBjjmsSr4F{mx_wOud?trCFw*DvxdcAZ)fpd`TptV`411P`r z!1*2j`EfW}-xN5^>cx!5&H=?v0i59fh1@mVCFJcDHxxR>-q!_wbaamewnMQ~0i>Wz zC##2_S3=%$-&Ak5it!Ckuz<_Ds?l@~YT$(L&nIstG{}9ElV=z=UtPhb{TYozEWo;= zE_9ze1VpN&hbpPG5yK;Ehk-Jl2^hx*H0#82~gsGh6Gmf zckhtvlHypLr`c?^Sugp;uae)xAnRH$N~BTN@y8TvyVjP2Li&f5-Q~fKSbZadPai#{ zZ+&UOeOX6S-%0bUHe;IBtqm%hO-VE=)KM8MT6JfYK?i!@x6yK*l(Kpm4Kc%acdJ{L zgz?(NHe`Q1ol|(t1SI`0U_mfB;hL};YWgzI$g)ydn}6+yZQ$OhYwab!p@ylFVa;n0 zG$kL#_aML*5X#qKa3j7!Dq0i$sXX2!oHezxKSJ1ko#qsn8)s9nfCfbiy!7~LtPyOc z7I|9Nfgw(+a{BmZI8f$7wovs;}`%M+=Xu# zWBU8G#l9XZ%Cn|$b24$Eia0RHetpWUQ9Xl3H186yBG+Ricp2z~wJ%HczEc=RA>hv$HaYg7J@qc6<10>*{Jhahe> zxw>&_d}Osh>fSX;e4DXD12PPc&zQxHadriKo<;lqI@~pp)Nqfoyu;Z$Ry7|KQ83SL z%7QdFQUqNHlApESFo^q&;_AmE0SSKC_S5>s%&xMXp%B#h%RJompEBw0qz{C1y^tIo z{@?|cv{N?he!eaiD8oLDniO5Mti}CBqrfg7wI)p}_8&|}I1YnNxVJvL*69m=aHUuF z<$jG8UH+XgCp0`_u>)QHb&poj(d9gq7ir>8)DR>ek@4#eUVxahPVulh8<&^~#AA5s zShPGioVo}%MeXt8Mb9&RLQdl{SsNVPR_x}c_isE=kqJAcKz zm=`8~dh%6?7{ntGq|W?EF40>fXGca9!q<3081-CZ7>I*!P+!G9_(?GdYmU3^JUYYf zFC;0R47FRQH|Y7mMJ30ot`O~hzYW3)hyNO7kQcl%@cZhU&E%sCI==9y7WS=}M$C=A zQ>_rI7vGUUQ6PH5EsuiKU zB?$hD0+`Qk_X~k>iLKb9xdBjVF~swsE)C&VstELfdsAk zdA!Kef0oaa?SXQWYBmAK4;jV}ne*}vrRqNIz+qNF0{^*9Q6lTPM%}Z5y5}aG*kA?lce^(AX#vWg0gyb4>Pk^mF zxgoQV&1Ru0mE$y;4Zd#+B^Bb$ig9dX(~li+-T9n^sHQ7PZVSs(^FbY^7T0U-jjHk) zrfLxo`CWYNK%2tp&`a9#xta3WBsS!|HF~WRsoA-3?-74AUuddNnJ(YEP%GaK20gIs*GdGdRb>!GIxj=!Lx6e_b z|8(-Bw92QX6Qh>eb*ZBH=o6n1zkn8oDahxSLv)S8bL69{AL1uX-2|ysg}@)S{&mdv z?a+cjo~AHC)tzt$Q2JlrIA?c8xaojk0pHd(X3ncVkgkD)77`$yjy;|l@Ss{Un6av-)OfqjOa;EEe& zZ&mSoye`E=*h8CMVHYEdGDq(o%_#muQ~7ie1cpk%i%Q_c?|Z%7lC}&0LBTo=w*e}ykT@}A~+|G_|0wO zpUep!CnOae%S4DeN^?R4XT06dPK1)HyeEwW3~eS9bJ8zFF-nNB8abqi-iQ`9#@CS9`zyY3V&J(a`$_d6QP-IW>Fju~>2zG*||)KB2vFZYrx8;sgt zz37 z{@$Q5FG6_&_Ofbdm3M^|Z4^#@pGXj|TW#*=R1*ng8Rngj1RLApMT5HWgisJVh?b?2 zHklJ`t2&p=C3MYMkR&p9j4M{@aJ9(Z$r%}>xF1Wbo(L`+ncfV^8O+dy7^)0P8|7+5 z35gJ*P|j0TO;%-BX#x{i#EluvV?o`&d!0d1}H>-5@#Rp?XamYHUU+^x}=y z2htSsP9_^c+pkKuldQ|FMCF7{rt6~-zldD4#Ofi!jh?FiF>%YaF}n(ow&XVNea*(1(#f#%n=I#Pgro^O*djrfn=H zj(sr7+GNhzACIb!1!&iWWAQXjok>yRhDLl(E_w0WdIC^gE3gGG6&pRD*n6PdlHUe& zdE1XXpKH5b#TI|ES(l)g8N)Y!Dv&x<^M@VF70e%XPjU!v%Fdold>OL0%qA{ld5UI0 zIA3j5z+KIGF0=dGEtO;Vg!>f6w)v(G0!1t6Yhh@Gx4 zqS_aqyw+)H@S-AVfZjJ|bFC3uhgm;Q4s77UdyosoMF6&KrV`MAyw7(A{&6|KGNbL% z6dsmi|6M9ZZ-i42P_P}_+irf|UUzE$yR|4&3+)eXnUI+0-#Jl!MclV~)nAQlem-?c zVs!K2KGrHjV(IVDv;L9Z?-ljJ{Uj5x0xGi}zrzFvsEUdV9^I-SDVxSogs-08mEz_F zIo8qq6!b~ar8@HdodvZ}bbNy^h!osD#yg3L-=-q0Y_>FMumM{L>i= z*i)B)*cd+|<%Md4&0fK=I;Q!nkUF~KuPQXUxOEN8Ysl-x37nU>8)39B1!OZ+ zF11KY`NR<8UmntmuC(|yUx(@1eG1Ty_PiX-8BTmyr|(M1J7A{L91UE9RDi&2mVdL@ zVxkM61;%U(KP|bs89*tz>eFQ8Z8%&)(SlZg4tneAH2yMO-}b2Ky{QLx*te%XXUHO?Mrkg&geN#DlL9B@|Kh`p}p{2ZFm{jz_x|udU}D4PEGxZROH#9 z5CHeBKs_X2<|^$&UkNQh->?K5Hj};TN~auWojSA2CAebF1i9Pmw#Tw-M$5%CSRIx7 z7EEseqp|H3k2*v(&&LuYX35ypIWjIX@HszxG>O$sVPC>1%I{C>@-QU+9AP@XOo*?H zkfY#sib@$O5wnzO)EuW(m|dbb?LQ9d2525FA^K*N#IhIeTz|Ke8HJ>{O)I>QsxfkS zO@|IhjpW_T%x|A97A!v``YU3|mwuLRZjktLKQ-LiM+WxxUnHUyEy+a_>8wY?PN4eE*a)fcZJH# z@HzRFW@xg{f#tPMLB8S>4iPm9O%u*)=SOue&|}>eYae;6Q76F!P^cvtDX#px9TM9o zfbV!RXc@C>HWIsbOlCp=DCA#rGsipT>n0QG8? z2l1K;H~M;KB&Xa;7|Y!k5uf3K1(eL$@}9eKAR9=%-Fg1Qn1$`j9@c!HwsCtLXJo(6TQB*T9r9uGq)G|YG7xBVijpv( zwl?C9f2nBK`2pqDp?(DOA?(Mr0K0C}XNE=EjJ>OgmE2ZhF!CkS)n;a0w4gBpcoBWU z7~}wJ-DrvyFL~eem1E1AG1N7e4#;k~u)za8|IUV*jlqnXJ}4Q%ok_P(5>N%wl?zD% zq3)c}ft-4_9*>}v(M590lH)PM`@-b40)Uok>rNNbajKVTf3EAyL=BS5T|<+zT>W(= z^M@C0C15uFU+-`XhJbT@zdd$st(f>@qm-mGOvNQOalww8x)QB9@(EgmO6>7D1xakr zfBw1ovYH>nO*1dxRm{h~e9yL-Vj};?9|4%LQI0k|9D~#1iCy_;uW%}2Q<%NyKtI+} zYyDdm!bnSQ%5*t>`mDkjp5n%$#Q}aTm)(3rjCSAR(uxNG+)ID=w$>vA=FTr@L*8OX zrX~1lgzr{{M`akB1W%>Oev$OiGBEft{90qY>B=`}5)YY&-Aae(m95cr@-fqS|LYHn zbAGCseP%Iq6Jpvw6_L(oN$~+7&G74gV@X38y)AkcK+0K4=Fj!(N=1ePIMG3t6aV>c zjk^yZ8Ednz{VSb|z;v5^G}x-qVgKyw3;M{Hyf)@Bh#$9`pIOYYgqY&QXWJ*{qsUKr zwypX#_M>?}$_+xl*arPSdq(d z1meMuxXK`dN!K5yT==}B`k7kyYXwqe{hI9Z(=ftgj0PE~h0H&@-gJ&o_+C*m?5Jh2U68`joyq8VSWV6hx{uE zLC_%yS{W;iOKqHh7#muXBz;!-0l+PhE{H)*@nR}#9uF(f`ENb#wAeAfeg$}hdsAwD z4O46_j#m+KUJI#lwItW^7K4nM#>8q^LSjLrM#Uxq54B?mcs$QNt@@EXvYC2kl+RZf z8A&HdFylnfBFZi%OiAHZP`l(dpIH&O_|X*P6ikak0m z-T;KvOKAhGxp+Gmr08jmP3*qZl+Yr-Y3xc?h?s-r!#oV3trRxV@};UL&6sX+BSEBk zs~$t{dPt1oW!17AMXEgT57CUY48|7B%0OtjEF+B2s5bx`>VS_yQT(sRvz}#@F=u$f zD1Ai*2rUS&orh_m$l^00>%M8R0maI%q8Y`Efr*C3_z=Js>b@0Y#SyjS(YiUGA?mQL zT#lf+#kCuu(rcIyzyeX=^-88IIZcX1h;4cAT6bn!3MMUR=``CU*s5P{=Kl;G=zy0? zm%G^-;=JLOD*vy@hLr`h_G9B$-&SY%n3x{!`MX(5ccXXN0+i6Xd3<(MJ!oKvG z%aG1^kKzN6Lv#SS z&rK!sV}@M>ZGEFuL(fmZW^?EwLD3V#=k#+6Zm{6?M@G~m{K`!dZj}#^NR^}~w@Fiv zMJ^RBDH$O>$UEA6z(oMlF3;{(FB=ufQyn_ndmQp`|F8jSwTOGjoH9JI02Pf(oX1~g zTK2POb2w?@s`zGw#z;-~seQz8X|{PW53V8*Xk?}ps97P_Xm;^3=)JMrjA6NHHTA;9IPp)49SLmrR5pSC>jjY=#BlXV--_D^&#-`Kfq%>N9 zyhg(|$dBSmdIqat8O^9B`2>1}*4^wd0Yn;G;;xihHKY#AQ`_oKO!2Z(=>Vy2yhm(m zv|fCUs=yy*$9avGdIu%sr7b%osPwpK2zNpi#duGfC!{oJN>Kpej4GmAGBP3`S2qLPkFD9rcRA#e3Brup)c-0>sg7xzWX_W2Vs^p~Ez*wt1Qt-!jO<|+1c;cQOReBYr|Dt;JR4C`c_4tb zY(WTAX(R1gNzxiS1ZF9wVI?J247K`T9GS_&VhX33sE?1RAE2iOoYDQ`A+rbhGzCuI z|9N7D$wjLhK}nkx0h~@RFLhLK@UV1d{V1A)1gS>s+8Y7i6k^U@${*1&PdnqTXX1)$ zJn#{xP;D&r(ifRdizpx+@wG@m4;L|bHT}}br6?a}<-m=iXF;;`1T6_nO9z00E3lCC zjZ@x}qn;$XU0S}(Yak>9Jzwk33k(eX{mHQUdzQ!)2aXL|gw!qt^0tN|t{ZCuS~(c| z_*2Wgd79sD+4T0dHjOQqw62CQC0FcZ?C=1~nmG(C2Z094wVXnK)gQunOz~5c>e-*W z`d<3ZxbhNS#8wN#EBx(SR(!qnDERyTSb=B9W07dT04{k~AaZmc)vWiQ7D(l{WjKnvr{a>!X4RmeA%Cw_MI zeTba~Au@N&w8wUWzzWDumSf~PaaGWFjyk)-W(2V)&kgMoLbR2I+-&GPN}aj1 zb4C>i6suKN^5_w6FL?UU?4M~wA(Y4It-eLXBNkvk9Dg~4N{+iNvZ!BmPjZ^2llZh= z{d1|Cuy%(K1O%&kLXG={H z1mkV;Nv?*rfH9{~7q`5cpKwnzULRI9;J}S7FO*hGE@u>7AH2Vj#EyIP3l_sRiN|ba z6fHc-U!<{%XE?MWTlYWm`IU2?qzK^ON9zVOo~~^}hL@7ytBH0 zO*nu?nEcA%t#Zb!WgEvplCsq_=e^}g;XyAsnD^CcOC!vq^nPlg^Z{~>bK+v^4&-ZC&lKdq(XnFb9@n{EEFSI z5GC0(MS;b~TCP5>t>@jIOhf?++KWHLU^==dS4txb=&7|(U0qG8kICpM*cmI!-mhE1 zYHrnSi;!ifAsKhG3;0M7(*~03kIg=nwza$uB?ziNI=5qZL{Rv-&Xm5FYy6R5h>aBo zn-HtK$qxPmtEWRTezO@*joMMY`g(Z#=f!~3Ft}uII~HaFBWc)*y?0#XuajG(xj4NK zpc8eU-6Z1(#-D{w$IDKo#V#P$j&aY(8_`L_jLkmcom-#ShU7kbl?DA zA(8pfxLdBr&~_;l**_D{+3hF=ZXqcvxiYo*cS!2T@U)X-#m^;YEDgqH42Nf*dFPi5 z+T^!p!Q#88ta2Xmr&m*XSI0cVhs@s4gDvwZMZou}R(DQ$^DV2|&^F7RP#xi$rD#jy=p5RvG}po?maudi zQebL!P&RydS>rwxb5{)s4kgmvg%x%=dUA7RkET+aO<6%D84IY>NF}BZ3?aMNY1M%P z!#tv`T?@xcI5_GP7P3p+h2!z)$9`YoY#w2+yj+K7_*PN5bk-~VNA;uZxqd#VJ1{vT zcr+zcuU03nU&B#1E4e%f|I4uysfytc|Cxt<{O>I)yv`IV4>n{7MQz4!Y|L`eg~}%* zpJGJ%p@yl=K*A^3oN0Yj+m~1)Ip(iGG7#}bqXAi+qKeTC7;%AI{nXC#b+_#^#klL+LA&6URI>^F?_4;-Ro&~N!G1!b-> zQX*;^5?UmgQ-5oEc*^g&zDN8RLug=>-c##5f-NAttVyL4-29&JtDl?9zhe-B83rXD zB2$m}rJDx{ePHy<_u#sGzTdMp1jffF?~S5^MopE6!W~u=$v#}j)O&B5y2hoC>b6a7 zadvC)OFu`bW71{KtLDyofJIdEb0`$(OjG(s-$rDKLMP#Wu$aX)hk3h-oJ$7H-VpqJ z2Ml&;{de4O36eKt_-wRzJOg8$R$aHJNroyK5Z73Y8GWmJ}Q`Sw{^DnEAM%;F5 z`>I~xCr7?G?_}g(<9M56};RoZ4mK zQfozqjBa(s0@SNrDx~(d8&`CvUX;F}ybze%ylc%b@$wtR8Tqn>>BEoma_nHV7Z-Z2 zrW3cxR445^jPU%W(Z({}joANNo7C9V4jJXS?EXt2vcIh*edV}+Xw5Y?pEe~&_-XJ# z!Dt1k$Cq;L!BJAF2)b*8yVuj?XYJX?=QDCSA^+ydVde3zkDElPxSSC^@vzJRlxL5~ zfd%KAdj0g#pQ1Jh{Tn)zIGYOr$HCa@!VMKQIy1=h#to?A)g2`Hv#MZhvS$vZ z1!M1;j`xN>7tW5@9B73pe5)R{ZCXF-4c0rzsZC+|yGoHnK`^~KQ_?4Lu+)RQA7M`M z6Q##+P9$&0HpM@+MyT_TV23qzv$Y)Q-*l}{hdJ<`#;tgruoqYNh^g)$NEs!AQA|tPMSdM&`Slc) zMtjijWCAP1umjEcTFTlu^oT7CKiFw1LIJd>#lzK%$0ywe98+(GM%Ux2>EKH!DnWnL z{S+Ro7n}}~Cku+RvM<&V<8U zZt)8yqoaP&8JcF5|Mr8bMd)DlAl1Bk`F)*K!ec@CIw@=4_F70LAYZ;SPHWbZoO;`8 z7yqbByZGXVe~TWynug-GR)EZnNurDEfM)?CY23(PhG^*->^t?cT=(x+>DQH?UF$XI zi-rhU;$90;bPIfLSioHQjp+29+dTXg+rNSuQ{gAMJ6(MJ+nxxvHeF$e>p92dqFM+G z5`m>EudXgsA)yLStj_Ve#HpaTpj6)`1g%{+927QN1c4)#F&E8pMJD<&@3QldIP)@T zyhU*LK`@&yW@@vfY0x=k=*(Mj*XgS#_Ua>BdNZ?sQOrr+@*Vy)fm!!mA(OOw^jJ*- zOt%O#1uZPOjsPV9Q}Pb8h4L2Y>3;_KvFPD#=mGKYw?z!C-7^n0b*)c0u~*>X*$p!C zvv^&s6YCRBjEjeYx&e$Yf6xdUmetu*vsLGfh+sL&$N0aAel-`etiB4YbXosa zUI(Ai)Z^MR1F5vLKoehQlUXen51H1<@QFYkJxKPPC3 z+>jYEs3O=~cK)OUGA1UK+U-%cT5zN6aVmznR911eBj=$ozBQSy<)e>xVV^&;)iaD) z$PaXx@%dJfhqs40BdQ!(tzKCb$;sLM7pp+rd4S?3;~iSHRku>megNh2R?Xap$3MN|39hbj({_1<*uf6 z^4q%9&%5J@#vKH#TzUGOy6z;?^{1alo7M)CClMx}(}#8Md*Zw}2v)gPmoiOqm)^tD z2I^{X6tCNG0_ygll-j;S)=lFE04eEYLsByL=YiZ>*+`G$X`-ui-~<0|Q30%Z$VAAFv#X3Akcf$OQnim?6gk(hHi_R&p5~^ z&AY@nOeNCgPT5*8qW~Mq0~lI%E3s0Lp?N?Ew8FXP7f-B8*x7=qmpA5dpJ$`!95ri* zB;0#|rP@;{nw?K6Xl7mL5~${%&s<$c9xU+v8dZ^h2H zgB4)L@iMDXiE#`|?o{je{)*1$?T+X_(?(FsQlJ3GJRVTn%V$bR5 z%0{pV$;vn9R!AgWfi7}bdFKb=EccmA)PYoTwVqwYSfT{rkZpx@a8m(FkfVB4;hwRG z(pfRsyP$psbLd@o!^3lSk9uxXZ0N^DT*F5ko(roS4s_CwY=t2QIN&BVNnV1QKD(tY zhV{Z{giOau05;U7-OxUqfL{A2=IOU2Hl$(h1X@nw%RB;n#eu~P$j0g#uHNE!GcnD-RcUsODe-a}Brt>Z5CH!gD5XbSC9!ee9)3vDMmc=ZIOLJOy2PH2E2;9+ka})x9#sHb@VWALwq4R zH)Pdw)&B0bcUzti%(HwzJXt?$i7Q~3n3+0UcRzE#jPRz=OuRQFkB=~N5kuy2l|WASsxLU6&5<>Yoejo|zF$JWnumy@sRw!xrSUOD_}1CRM9O+#@^Byu=> zAjgI=F7PR%M2yh8*||HeVWePK@YKXS_W0TvSC@bM=0Fn6xjxnKyFc8f3v<1Olj(+S z^@(13j&dza=a=maA$H5tg(4?Rp?5W@R3ME+MP(7uP^pCTetV$iwwhFH_fz|-)2}_R z=|z|ichFWx&@j5wD=^1z#W-N6tRn|-w0{(pQtxdJw6pt<-7k(>0TV(~`GZgZI3)3V zE`a4z8{!L15#PBHa0&^c|KNr8voBwN+F3WkB9=y1rM+Hn=zQ$B-%&m(h%l@ds(xcY z<<~~~NCF8;C7aOi0#j z%qvt=h3aShpq%I@yS_t;pwdHaQ@(KchdkFMvD0X-rRy$k%te73FyT38F1r=UjZQ2L z+*G)FsIYFlsggcLGvL`l9235N9$J-7&{&Si8W1i`%sr+hw}09D(yHT;lO3sD`pdQz zZlA9G=|Nsz4kg#FY=*4l0cMKu%UY8vK)|&uH@#e{T9?h$@{n(U%G##YO#7B4oHN!e z`4{);taYzoZR1xhDVc?x{4Bi|OytGvmD9RTLa`%#SMtz*DllP`059&+1LE0Iv2OZO zCxkBf{)GGnQVmw>*(3^zoyCKwQ%icET>3*sw~Tz5C-beC&?at!?SA| zayPPdjm&iQteoy*X!zUG9_v`PMqSwnT$dNTufkWq2Y2zu@x+$?R}%$Se1G-G2)0@R zC#T$(?nRim$gr93zsw8lzVJEDP1BDt!R38+Q-3&8qWisywG|lm^VUn)?&}Tx&&<$@ zE8V(Ja`voGSn?U5IQJsVbXnUwN+ra3TO4vF$6!s;_?JsN*_|h{)a6&XI2w}Ku?3vp z#cyP{O@%Q9152;Uz7PTh|AcM!?x}9JJB>bhpyUeABM0AV(l_`*_pQ+IlQo^zN!qDf z-TUZwe%l3v{8goA>4SS=0dL#9Zz_qs0wxl!t+yX-3uhh~C|u%I;(z{Vf?La8`9c$= zIB$yJ8zao;4Kb*Dql^3fB=Y>XJr$NJo|e*VvG-PSMqSEB8IsSxrnGx*x7xE1KJe>u z!q2sGKlb}(B9;{m<4FkOmwV1-rj#Gag$<3LJ19rY!+l*`zf~expd_S383#*-G-uW-e7bWBe0hn}>Thr}dctwrKI$LxpX zqEv5uZLFB?@n4Bu{PEnP9((~Qz(Mt8d=U-N|JvP;J<=z^+PaR~;Q9R?MrpdNNr?jTb-18fjiEy~Tj G5luq? literal 0 HcmV?d00001 diff --git a/.github/img/logo.png b/.github/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..17d5d21c4f0411f39d9a36fe296d93699fddafa6 GIT binary patch literal 9530 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 z�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 Y04V7&Y+gA;6aWAK07*qoM6N<$f;5~^j{pDw literal 0 HcmV?d00001 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..59f2ae6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,146 @@ +_/ +.env +/build/ +/src/secret/ + + +# Created by https://www.toptal.com/developers/gitignore/api/node,visualstudiocode +# Edit at https://www.toptal.com/developers/gitignore?templates=node,visualstudiocode + +### Node ### +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test +.env.production + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* + +### VisualStudioCode ### +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +# Local History for Visual Studio Code +.history/ + +### VisualStudioCode Patch ### +# Ignore all local history of files +.history +.ionide + +# End of https://www.toptal.com/developers/gitignore/api/node,visualstudiocode diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..8f267b9 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,4 @@ +{ + "semi": false, + "useTabs": true +} diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..d7df89c --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["esbenp.prettier-vscode", "dbaeumer.vscode-eslint"] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..13d477c --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,18 @@ +{ + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": true, + "editor.formatOnPaste": true, + "cSpell.words": [ + "adminsdk", + "clapify", + "colorette", + "cooldown", + "firestore", + "Neko", + "nekos", + "OwOify" + ], + "[ignore]": { + "editor.defaultFormatter": "foxundermoon.shell-format" + } +} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..a9fbe76 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,130 @@ +# Contribution guide + +## Table of contents + +- [Contribution guide](#contribution-guide) + - [Table of contents](#table-of-contents) + - [Purpose](#purpose) + - [Assumptions](#assumptions) + - [Getting started](#getting-started) + - [Development environment](#development-environment) + - [Required knowledge](#required-knowledge) + - [Bot](#bot) + - [Web Interface](#web-interface) + - [Documentation](#documentation) + - [Commit message](#commit-message) + - [Creating / updating a command](#creating--updating-a-command) + - [Help message](#help-message) + - [Structure](#structure) + +## Purpose + +There are several goals this guide aims to achieve: + +- Help new contributors get started +- Prevent information fragmentation as people work on different parts of the software +- Streamline the development workflow +- Make things work in the project owner's absence +- Minimize intervention and back-and-forth communication (e.g. The contributor didn't format their code properly) + +## Assumptions + +All contributors are assumed to be familiar with the following: + +- git (and by extension github and developer collaboration) +- node.js and its ecosystem (npm packages, yarn, etc.) +- javascript and typescript +- code formatting + +## Getting started + +### Development environment + +Contributors are free to use whatever IDE they want but the usage of [vscode](https://code.visualstudio.com) is highly recommended. + +Format markdown file(s) with [prettier](https://prettier.io) formatter + +### Required knowledge + +### Bot + +- [discord.js](https://discord.js.org) +- [sapphire framework](https://www.sapphirejs.dev) + +### Web Interface + +- [express.js](https://expressjs.com) +- [passport.js](https://www.passportjs.org) +- [firebase functions](https://firebase.google.com/docs/functions) + +### Documentation + +- [Docusaurus](https://docusaurus.io) +- [Markdown](https://www.markdownguide.org/basic-syntax) + +## Commit message + +The commit message should be a clear and concise description of what the commit does. +The first line should be no more than 50 characters and the rest no more than 72. + +## Creating / updating a command + +Use the `CustomCommand` defined in [src/custom/CustomCommand.ts](./src/custom/CustomCommand.ts) instead of importing from `@sapphire/framework`. + +### Help message + +- consistent usage information + +### Structure + +- one export per command + - functions should be `static` whenever possible +- Keep the `messageRun` function clean (ideally less than 50 lines). +- Separate regular imports from type imports. +- Separate the embedded message building process to a separate function. + + This also makes testing easier + +- jsdoc comments should... + + - not include argument and return types. + + They should be included in the function instead. + + - not include a dash (`-`) in the `@returns` tag. + + Do this: + + ```ts + /** + * This function does something. + * + * - Here's some extra information + * + * @param argument - This is an argument. + * @returns some string. + */ + function someFunction(argument: string): string { + const someString = "some string" + + return someString + } + ``` + + Not this: + + ```ts + /** + * This function does something. + * + * - Here's some extra information + * + * @param {string} argument - This is an argument. + * @returns {string} - some string. + */ + function someFunction(argument) { + const someString = "some string" + + return someString + } + ``` diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..dba3da4 --- /dev/null +++ b/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2019 developomp + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE +OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md index 6dfa2e9..5821c16 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,104 @@ -**ATTENTION!**
-The llama bot has found a new home: https://github.com/llama-bot/llama-bot +# Llama bot + +![example image of bot usage](./.github/img/example.png) + +The Llama bot is a [discord](https://discord.com) bot made for the +[LP community discord server](https://discord.gg/2fsar34APa).
+ +## Setting up + +### Pre-requirements + +- Node.js 16.6.0+ +- [yarn](https://yarnpkg.com) +- A Discord account +- A Google Firebase account +- ~~A sacrifice to be given to the llama gods~~ (no longer needed) + +### Discord + +1. Create a new application from the [Discord Developer Portal](https://discord.com/developers/applications). Select one if you already have it. +2. Go to the `Bot` tab and convert your application to a discord bot. Be cautious since this operation is **NOT REVERSIBLE**. +3. Copy the bot token. This will be used during the [Server](#server) setup. + +### Firebase + +1. Head over to https://console.firebase.google.com and create a firebase project. +2. Enable firestore database. +3. [Generate and download](https://console.firebase.google.com/project/_/settings/serviceaccounts/adminsdk) the service account key. + This will be used during the [Server](#server) setup. + +### Server + +- Assumes UNIX-like environment (Linux, BSD, Mac, etc.) + +1. Clone this repository and open it. + + ```bash + git clone https://github.com/llama-bot/llama-bot.git + ``` + + ```bash + cd llama-bot + ``` + +2. Install dependencies. + + ```bash + yarn install + ``` + +3. Create `.env` file in the project root and put the discord bot token generated during the [Discord](#discord) setup. + + ```dosini + TOKEN=PUT_YOUR_DISCORD_BOT_TOKEN_HERE + TESTING=true # set it to false on production + PREFIX_PROD=PUT_PRODUCTION_DEFAULT_PREFIX_HERE + PREFIX_DEV=PUT_DEVELOPMENT_DEFAULT_PREFIX_HERE + OWNER_IDS=ID1,ID2,ID3,... + ``` + +4. Create `secret` directory in the `src` directory, + rename the firebase admin key generated during the [Firebase](#firebase) setup to `firebase-adminsdk.json`, + and put it in the `secret` directory. + +5. Build the bot. + + ```bash + yarn build + ``` + +6. Install pm2 globally. + + ```bash + yarn global add pm2 + ``` + +7. Start the bot. + + ```bash + pm2 start build/index.js --watch --name "Llama Bot" + ``` + + | Option | Explanation | + | -------------------- | ---------------------------------------------------------- | + | `--watch` | Auto restart bot if bot files have been changed | + | `--name "Llama Bot"` | Set the name of the process so it can be easily recognized | + +8. Make the process automatically start on boot. + + ```bash + pm2 startup + ``` + +## More info + +- [discord developers documentation](https://discord.com/developers/docs) +- discord API's javascript implementation [documentation](https://discord.js.org/#/docs), [guide](https://discordjs.guide), and bot [framework documentation](https://sapphiredev.github.io/framework) +- [firebase admin sdk documentation](https://firebase.google.com/docs) +- [pm2 documentation](https://pm2.keymetrics.io/docs/usage/quick-start) + +## Special thanks + +- `Dabidoo#9888 (265697563280146433)` for making the [colored logo](./.github/img/logo.png) +- `Sɪʟᴋ Sᴘɪᴅᴇʀ#8364 (419184817368858644)` for making the [white logo](./.github/img/logo-white.png) diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 0000000..54e8ee5 --- /dev/null +++ b/jest.config.js @@ -0,0 +1,5 @@ +/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */ +module.exports = { + preset: "ts-jest", + testEnvironment: "node", +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..78fb1d1 --- /dev/null +++ b/package.json @@ -0,0 +1,36 @@ +{ + "main": "dist/index.js", + "private": true, + "scripts": { + "start": "yarn build && node dist/index.js", + "test": "jest", + "lint": "eslint .", + "clean": "del dist", + "build": "yarn clean && tsc" + }, + "dependencies": { + "@sapphire/decorators": "^4.2.6", + "@sapphire/framework": "^2.4.1", + "discord.js": "^13.6.0", + "firebase-admin": "^10.0.2", + "nekos.life": "^2.0.9" + }, + "devDependencies": { + "@types/jest": "^27.4.1", + "@types/node": "^17.0.21", + "@types/string-similarity": "^4.0.0", + "@typescript-eslint/eslint-plugin": "^5.13.0", + "@typescript-eslint/parser": "^5.13.0", + "colorette": "^2.0.16", + "del-cli": "^4.0.1", + "dotenv": "^16.0.0", + "eslint": "^8.10.0", + "jest": "^27.5.1", + "pretty-error": "^4.0.0", + "string-similarity": "^4.0.4", + "ts-jest": "^27.1.3", + "tslint-config-prettier": "^1.18.0", + "typescript": "^4.6.2", + "utility-types": "^3.10.0" + } +} diff --git a/src/DB/defaults.ts b/src/DB/defaults.ts new file mode 100644 index 0000000..50dd8f0 --- /dev/null +++ b/src/DB/defaults.ts @@ -0,0 +1,29 @@ +import type { Settings } from "../types/bot" + +export const defaultSettings: Settings = { + clear_emojis: ["🧹"], + quotes: [ + "Paul: Caaaaarrrrrlllll!!!!", + "Carl: And I... I... stabbed him 37 times in the chest!", + "Carl: Well, I kill people and I eat hands! That's—that's two things!", + "Carl: That is what forgiveness sounds like, screaming and then silence.", + "Carl: Probably because I'm a dangerous sociopath with a long history of violence.", + "Carl: I may have created a crack in space time... through which to collect millions of baby hands.", + "Carl: Whities gotta pay... and the payment is baby hands.", + "Paul: CAAAAAAAAARL! WHAT DID YOU DO?", + "Carl: My stomach was making the rumblies - that only hands could satisfy.", + "Paul: What is wrong with you, Carl?", + "Paul: And then you started making out with the ice sculptures.", + "Carl: I will not apologize for art.", + "Carl: Well, I'm building a meat dragon and not just any meat will do.", + "Carl: What's that? It's hard to hear you over the sound of melting city!", + "Carl: Who's laughing? Clearly not all the people who've just exploded.", + "Paul: All you do is kill people, Carl!\n" + + "Carl:That's like saying all Mozart did was write songs.", + "Carl: It's not a meat grinder, it's an orphan stomper.", + "Carl: Let me explain: Efficiency, industry, never before has this many dead bodies been so manageable.", + "Carl: I'm the Henry Ford of human meat!", + `Paul: It's horrifying, Carl. +Carl: Thank you.`, + ], +} diff --git a/src/DB/index.ts b/src/DB/index.ts new file mode 100644 index 0000000..4dfc5e2 --- /dev/null +++ b/src/DB/index.ts @@ -0,0 +1,89 @@ +/** + * @file Firestore Database interface for the bot. + * + * More information about firestore can be found here: https://firebase.google.com/docs/firestore + * Though there are no plans to move away from firebase, + * all firebase interactions are contained in this file so it's easier to move to other platform. + * + * Database structure: + * bot/ // Discord Bot related data + * settings/ // Discord bot settings + * servers/ // Server-specific data + * SERVER_ID/ // discord server ID (snowflake) + * settings/ // server-specific settings + * name: string // server name + * vars/ // server-specific variables + * users/ // user data + * USER_ID/ // discord user ID (snowflake) + * avatar: string // discord avatar ID + * discriminator: string // a 4 digit numerical discord user discriminator + * id: string // discord user ID (snowflake) + * username: string // discord user name + */ + +// todo: create and populate if it doesn't exist already + +import admin from "firebase-admin" +import serviceAccountKey from "../secret/firebase-adminsdk.json" + +import type { Snowflake } from "discord-api-types" +import type { Settings, Servers, ServerData } from "../types/bot" + +admin.initializeApp({ + credential: admin.credential.cert(serviceAccountKey as admin.ServiceAccount), +}) + +const firestoreDB = admin.firestore() + +const botCollection = firestoreDB.collection("bot") +const serversCollection = firestoreDB.collection("servers") + +const settingsDoc = botCollection.doc("settings") + +/** + * Global bot settings. Fetched by calling the {@link fetchSettings} function. + */ +export let settings: Settings = {} + +/** + * Server-specific data. + * Fetched by calling the {@link fetchServerData} function. + */ +export const servers: Servers = {} + +/** + * Fetch settings from the database. + */ +export async function fetchSettings(): Promise { + await settingsDoc.get().then((doc) => { + settings = doc.data() as Settings + }) +} + +/** + * Fetch server-specific data from the database. + */ +export async function fetchServerData( + serverSnowflake: Snowflake +): Promise { + await serversCollection + .doc(serverSnowflake) + .get() + .then((doc) => { + servers[serverSnowflake] = doc.data() as unknown as ServerData + }) +} + +// +// initialize +// + +// todo: make sure settings is fetched before anyone runs a command +fetchSettings() + +export default { + settings, + servers, + fetchSettings, + fetchServerData, +} diff --git a/src/commands/core/help.ts b/src/commands/core/help.ts new file mode 100644 index 0000000..1734677 --- /dev/null +++ b/src/commands/core/help.ts @@ -0,0 +1,240 @@ +// todo: also prevent command from having same name as command category + +import { MessageEmbed } from "discord.js" +import { ApplyOptions } from "@sapphire/decorators" +import stringSimilarity from "string-similarity" + +import type { Message } from "discord.js" +import type { + Args, + Command, + CommandOptions, + CommandStore, +} from "@sapphire/framework" + +import CustomCommand from "../../custom/CustomCommand" + +enum QueryType { + empty = "empty", + command = "command", + category = "category", + unknown = "unknown", +} + +type CategorizeQueryReturn = + | { queryType: QueryType.empty } + | { queryType: QueryType.command; command: Command } + | { queryType: QueryType.category } + | { queryType: QueryType.unknown } + +@ApplyOptions({ + aliases: ["h"], + description: + "Shows list of helpful information about a command or a command category.", +}) +export default class HelpCommand extends CustomCommand { + usage = `> {$} ["command"|"category"] + +ex: +List categories: +> {$} + +List commands in the \`util\` category: +> {$} util + +Shows information about the \`ping\` command: +> {$} ping` + + // + commands: CommandStore = this.container.client.stores.get("commands") + // lower case names of categories + lowerCaseCategoryNames: string[] = [] + // all command names and aliases + allCommands: string[] = [] + + async messageRun(message: Message, args: Args): Promise { + if (this.lowerCaseCategoryNames.length <= 0) { + // can not put this in class constructor because then `this.commands.categories` will be equal to `[]` + // can not put this in the "ready" listener either because of race conditions + this.lowerCaseCategoryNames = this.commands.categories.map((elem) => + elem.toLowerCase() + ) + } + + const query: string = await args.pick("string").catch(() => "") + const queryCategory = this.categorizeQuery(query) + + switch (queryCategory.queryType) { + case QueryType.empty: + this.sendDefaultHelpMessage(message) + break + + case QueryType.command: + this.sendCommandHelpMessage(message, queryCategory.command) + break + + case QueryType.category: + this.sendCategoryHelpMessage(message, query) + break + + default: + this.sendCommandNotFoundMessage(message, query) + break + } + } + + categorizeQuery(input: string): CategorizeQueryReturn { + const query = input.toLowerCase() + + if (!query) return { queryType: QueryType.empty } + + if (this.lowerCaseCategoryNames.includes(query)) + return { queryType: QueryType.category } + + const command = this.commands.find( + (command: Command, key: string) => + key.toLowerCase() === query || + command.aliases.some((elem) => elem.toLowerCase() === query) + ) + if (command) return { queryType: QueryType.command, command } + + return { queryType: QueryType.unknown } + } + + sendDefaultHelpMessage(message: Message): void { + const helpEmbed = new MessageEmbed({ + title: "Help", + description: `Use the \`${process.env.PREFIX}help \` command to get more information about a category. +This command is not case sensitive. + +You can read more about the bot in the [documentation](https://docs.llama.developomp.com/docs/usage/overview). + +**Categories:**`, + }) + + // + // add categories + // + + this.commands.categories.map((categoryName) => { + const commandsInCategory = this.commands.filter((command) => + command.fullCategory.includes(categoryName) + ) + + helpEmbed.addField( + categoryName, + `${commandsInCategory.size} commands`, + true + ) + }) + + // + // reply + // + + message.channel.send({ + embeds: [helpEmbed], + }) + } + + sendCommandHelpMessage(message: Message, command: Command): void { + const aliases = command.aliases + ? `\`${command.aliases.join("`, `")}\`` + : "None" + + message.channel.send({ + embeds: [ + new MessageEmbed({ + title: command.name, + description: `Aliases: ${aliases}`, + fields: [ + { + name: "Description", + value: command.description || "WIP", + }, + { + name: "Usage", + value: + // replace `{$}` with + command.usage?.replace( + /{\$}/g, + `${process.env.PREFIX}${command.name}` + ) || "WIP", + }, + ], + }), + ], + }) + } + + sendCategoryHelpMessage(message: Message, query: string): void { + // + // find category + // + + let selectedCategoryName = "" + + const lowerCaseCategoryName = query.toLowerCase() + this.commands.categories.some((categoryName) => { + if (categoryName.toLowerCase() === lowerCaseCategoryName) { + selectedCategoryName = categoryName + return true + } + }) + + // + // Find commands in category + // + + const commandsInCategory = this.commands.filter((command) => + command.fullCategory.includes(selectedCategoryName) + ) + + // + // Reply + // + + message.channel.send({ + embeds: [ + new MessageEmbed({ + title: `${selectedCategoryName} category`, + description: `Use the \`${process.env.PREFIX}help \` command to get more information about a command. +This command is not case sensitive.`, + fields: [ + { + name: "commands", + value: commandsInCategory + .map((command) => `- \`${command.name}\`\n`) + .join(""), + }, + ], + }), + ], + }) + } + + sendCommandNotFoundMessage(message: Message, query: string): void { + if (this.allCommands.length <= 0) { + this.allCommands = [...this.commands.keys()].concat( + this.commands.aliases + .map((elem) => elem.aliases) + .reduce((prev, curr) => prev.concat(curr)) as string[] + ) + } + + const mostLikelyGuess = + this.allCommands[ + stringSimilarity.findBestMatch(query, this.allCommands).bestMatchIndex + ] + + message.channel.send({ + embeds: [ + new MessageEmbed({ + title: "Command not found", + description: `Command \`${query}\` was not found. Did you mean \`${mostLikelyGuess}\`? +You can also use the \`${process.env.PREFIX}help\` command to list all available commands.`, + }), + ], + }) + } +} diff --git a/src/commands/core/testing.ts b/src/commands/core/testing.ts new file mode 100644 index 0000000..3bde4f4 --- /dev/null +++ b/src/commands/core/testing.ts @@ -0,0 +1,29 @@ +/** + * Cannot name file to `test.ts` because then it'll treat it like a testing file. + */ + +import { ApplyOptions } from "@sapphire/decorators" + +import type { Message } from "discord.js" +import type { Args, CommandOptions } from "@sapphire/framework" + +import CustomCommand from "../../custom/CustomCommand" + +@ApplyOptions({ + aliases: ["t"], + description: "Tests bot features. Only available to bot owners.", + preconditions: ["OwnersOnly"], +}) +export default class TestCommand extends CustomCommand { + usage = `> {$} [feature] + +If feature is not passed, then the command will result in a error. +This is an intended behavior to make testing easier. +` + + async messageRun(message: Message, args: Args) { + await args.pick("string").catch(() => { + throw new Error("") // the intended behavior + }) + } +} diff --git a/src/commands/fun/8ball.ts b/src/commands/fun/8ball.ts new file mode 100644 index 0000000..c36f2a0 --- /dev/null +++ b/src/commands/fun/8ball.ts @@ -0,0 +1,64 @@ +import { MessageEmbed } from "discord.js" +import { ApplyOptions } from "@sapphire/decorators" + +import type { Message } from "discord.js" +import type { Args, CommandOptions } from "@sapphire/framework" + +import { globalObject } from "../.." +import CustomCommand from "../../custom/CustomCommand" + +@ApplyOptions({ + aliases: ["8", "ball"], + description: + "Gives you the best advice you can get. We are not responsible for your action though.", +}) +export default class EightBallCommand extends CustomCommand { + usage = `> {$} [your question] + +e.g. +> {$} + +> {$} Should I buy more doge coin? +` + + async messageRun(message: Message, args: Args) { + message.channel.sendTyping() + + // + // Parse user input + // + + let text = "" + + const allStr = await args.repeat("string").catch(() => "") + + if (typeof allStr === "string") { + text = allStr + } + if (Array.isArray(allStr)) { + text = allStr.join(" ") + } + + // + // Get response from nekos.life + // + + const { response, url } = await globalObject.nekosClient.sfw["eightBall"]({ + text, + }) + + // + // Reply + // + + message.channel.send({ + embeds: [ + new MessageEmbed({ + title: response, + image: { url }, + footer: { text: "powered by nekos.life" }, + }), + ], + }) + } +} diff --git a/src/commands/fun/clapify.ts b/src/commands/fun/clapify.ts new file mode 100644 index 0000000..29fa03c --- /dev/null +++ b/src/commands/fun/clapify.ts @@ -0,0 +1,59 @@ +import { Formatters, MessageEmbed } from "discord.js" +import { ApplyOptions } from "@sapphire/decorators" + +import type { Message } from "discord.js" +import type { Args, CommandOptions } from "@sapphire/framework" + +import CustomCommand from "../../custom/CustomCommand" + +@ApplyOptions({ + aliases: ["c", "clap"], + description: + "Does the annoying Karen clap.👏Does👏not👏work👏with👏external👏emojis.", +}) +export default class ClapifyCommand extends CustomCommand { + usage = `> {$} [message to clapify] + +e.g. +> {$} I said bring me the manager. +` + + async messageRun(message: Message, args: Args): Promise { + const inputs = await args.repeat("string").catch(() => []) + + // + // Handle empty argument + // + + if (!inputs) { + message.channel.send({ + embeds: [ + new MessageEmbed({ + title: "Error!", + description: "What should I clapify?", + }), + ], + }) + + return + } + + // + // Reply + // + + message.channel.send({ + embeds: [ + new MessageEmbed({ + description: `**${Formatters.userMention(message.author.id)} says:** + +${ClapifyCommand.clapify(inputs)}`, + }), + ], + }) + } + + static clapify(inputs: string[]): string { + return inputs.join("👏") + } +} diff --git a/src/commands/fun/fact.ts b/src/commands/fun/fact.ts new file mode 100644 index 0000000..3d3d4da --- /dev/null +++ b/src/commands/fun/fact.ts @@ -0,0 +1,30 @@ +import { MessageEmbed } from "discord.js" +import { ApplyOptions } from "@sapphire/decorators" + +import type { Message } from "discord.js" +import type { CommandOptions } from "@sapphire/framework" + +import { globalObject } from "../.." +import CustomCommand from "../../custom/CustomCommand" + +@ApplyOptions({ + aliases: ["f", "facts"], + description: "Shows useless facts.", +}) +export default class FactCommand extends CustomCommand { + usage = "> {$}" + + async messageRun(message: Message) { + message.channel.sendTyping() + + message.channel.send({ + embeds: [ + new MessageEmbed({ + title: "Here's a fact for you", + description: (await globalObject.nekosClient.sfw.fact()).fact, + footer: { text: "powered by nekos.life" }, + }), + ], + }) + } +} diff --git a/src/commands/fun/image.ts b/src/commands/fun/image.ts new file mode 100644 index 0000000..706face --- /dev/null +++ b/src/commands/fun/image.ts @@ -0,0 +1,205 @@ +import { CommandOptions } from "@sapphire/framework" +import { ApplyOptions } from "@sapphire/decorators" +import { Formatters, MessageEmbed } from "discord.js" + +import type NekoClient from "nekos.life" +import type { FunctionKeys, $PropertyType } from "utility-types" +import type { Message } from "discord.js" +import type { Args } from "@sapphire/framework" + +import { isChannelInMessageNSFW, caseInsensitiveIndexOf } from "../../util" +import { globalObject } from "../.." +import CustomCommand from "../../custom/CustomCommand" + +type nsfwOptionsType = FunctionKeys<$PropertyType> +type sfwOptionsType = Exclude< + FunctionKeys<$PropertyType>, + "why" | "catText" | "OwOify" | "eightBall" | "fact" | "spoiler" +> + +const nsfwOptions: nsfwOptionsType[] = Object.getOwnPropertyNames( + globalObject.nekosClient.nsfw +) as nsfwOptionsType[] + +const sfwOptions: sfwOptionsType[] = Object.getOwnPropertyNames( + globalObject.nekosClient.sfw +).filter( + (elem) => + // the return values for these options do not have the url attribute + !["why", "catText", "OwOify", "eightBall", "fact", "spoiler"].includes(elem) +) as sfwOptionsType[] + +@ApplyOptions({ + aliases: ["i", "img", "images"], + description: "Shows some good images", +}) +export default class ImageCommand extends CustomCommand { + usage = `> {$} [<"nsfw"|"sfw"|"list"|"help"> ] + +e.g. +List all available image types: +> {$} help + +Show an image of a puppy: +> {$} woof +` + + async messageRun(message: Message, args: Args): Promise { + const option1 = (await args.pick("string").catch(() => "")).toLowerCase() + const option2 = await args.pick("string").catch(() => "") + + // + // Show help message + // + + if (!option1 || !option2 || option1 === "list" || option1 === "help") { + this.list(message) + + return + } + + // + // Handle invalid input + // + + if (option1 != "sfw" && option1 != "nsfw") { + message.channel.send({ + embeds: [ + new MessageEmbed({ + title: "Error!", + description: + "Option should be either `list`, `help`, `nsfw` or `sfw`", + }), + ], + }) + } + + // + // Logic starts here + // + + message.channel.sendTyping() + + // + // Get option index + // + + let index = -1 + + if (option1 === "sfw") { + index = caseInsensitiveIndexOf(nsfwOptions, option2) + } + + if (option1 === "nsfw") { + index = caseInsensitiveIndexOf(nsfwOptions, option2) + } + + // check if option is valid + if (index < 0) { + this.option2NotFound(message, option2) + + return + } + + // + // check if the channel allows NSFW content + // + + // todo: handle server-wide NSFW settings + if (option1 === "nsfw" && !isChannelInMessageNSFW(message)) { + message.channel.send({ + embeds: [ + new MessageEmbed({ + title: "Error!", + description: "You cannot run this command outside NSFW channels.", + }), + ], + }) + + return + } + + // + // Get image url + // + + let url = "" + if (option1 === "sfw") { + url = (await globalObject.nekosClient.sfw[sfwOptions[index]]()).url + } + if (option1 === "nsfw") { + url = (await globalObject.nekosClient.nsfw[nsfwOptions[index]]()).url + } + + // + // Send image + // + + this.sendImage(message, url) + } + + sendImage(message: Message, url: string): void { + if (!message.member) { + message.channel.send({ + embeds: [ + new MessageEmbed({ + title: "Error", + description: "Failed to identify command caller", + }), + ], + }) + + return + } + + message.channel.send({ + embeds: [ + new MessageEmbed({ + title: "Image", + description: `requested by: ${Formatters.userMention( + message.member.id + )}\n**[Click if you don't see the image](${url})**`, + image: { url }, + footer: { text: "powered by nekos.life" }, + }), + ], + }) + } + + option2NotFound(message: Message, option: string): void { + message.channel.send({ + embeds: [ + new MessageEmbed({ + title: "Error!", + description: `Option \`${option}\` is not a valid option.`, + }), + ], + }) + + this.list(message) + } + + list(message: Message): void { + message.channel.send({ + embeds: [ + new MessageEmbed({ + title: "Image Options", + fields: [ + { + name: "Usage", + value: this.usage, + }, + { + name: "NSFW", + value: `\`${nsfwOptions.join("`, `")}\``, + }, + { + name: "SFW", + value: `\`${sfwOptions.join("`, `")}\``, + }, + ], + }), + ], + }) + } +} diff --git a/src/commands/fun/llama.ts b/src/commands/fun/llama.ts new file mode 100644 index 0000000..a4595a1 --- /dev/null +++ b/src/commands/fun/llama.ts @@ -0,0 +1,34 @@ +import { CommandOptions } from "@sapphire/framework" +import { ApplyOptions } from "@sapphire/decorators" +import { MessageEmbed } from "discord.js" + +import type { Message } from "discord.js" + +import { settings, fetchSettings } from "../../DB" +import CustomCommand from "../../custom/CustomCommand" + +@ApplyOptions({ + aliases: ["l", "llamaQuote", "llamaQuotes", "lq"], + description: "Shows a random llama quote.", +}) +export default class LlamaCommand extends CustomCommand { + usage = "> {$}" + + async messageRun(message: Message) { + if (!settings.quotes) { + await fetchSettings() + } + + message.channel.send({ + embeds: [ + new MessageEmbed({ + title: "Llama quote that'll make your day", + description: + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + settings.quotes[Number(message.id) % settings.quotes.length], + }), + ], + }) + } +} diff --git a/src/commands/fun/owo.ts b/src/commands/fun/owo.ts new file mode 100644 index 0000000..4a8ca86 --- /dev/null +++ b/src/commands/fun/owo.ts @@ -0,0 +1,42 @@ +import { Formatters, MessageEmbed } from "discord.js" +import { CommandOptions } from "@sapphire/framework" +import { ApplyOptions } from "@sapphire/decorators" + +import type { Message } from "discord.js" +import type { Args } from "@sapphire/framework" + +import { globalObject } from "../.." +import CustomCommand from "../../custom/CustomCommand" + +@ApplyOptions({ + aliases: ["owoify"], + description: "OwOifies youw message OwO", +}) +export default class CatCommand extends CustomCommand { + usage = "> {$} [message to owoify]" + + async messageRun(message: Message, args: Args) { + message.channel.sendTyping() + + // combine all arguments to a single string + const input = [...(await args.repeat("string").catch(() => ""))].join(" ") + + message.channel.send({ + embeds: [ + new MessageEmbed({ + title: "OwO", + description: `**${Formatters.userMention(message.author.id)} says:** + +${ + ( + await globalObject.nekosClient.sfw.OwOify({ + text: input, + }) + ).owo +}`, + footer: { text: "powered by nekos.life" }, + }), + ], + }) + } +} diff --git a/src/commands/fun/pp.ts b/src/commands/fun/pp.ts new file mode 100644 index 0000000..daa0fd4 --- /dev/null +++ b/src/commands/fun/pp.ts @@ -0,0 +1,114 @@ +import { Formatters } from "discord.js" +import { ApplyOptions } from "@sapphire/decorators" + +import type { Message } from "discord.js" +import type { Args, CommandOptions } from "@sapphire/framework" + +import { sendEmbeddedMessage } from "../../util" +import CustomCommand from "../../custom/CustomCommand" + +interface PPUser { + id: string + length: number +} + +@ApplyOptions({ + aliases: ["penis"], + description: `Measure user's pp length and arrange them in descending order. + +Shortest length (0): +\`8D\` +Longest length (30): +\`8==============================D\` + +This is 101% accurate.`, +}) +export default class PPCommand extends CustomCommand { + usage = `> {$} [user]* + +e.g. +Measure yourself: +> {$} + +Measure someone else's pp: +> {$} @someone + +Measure multiple people's pp: +> {$} @someone @sometwo ... +` + + async messageRun(message: Message, args: Args) { + let membersRaw: string[] = await args.repeat("string").catch(() => []) + + // handle 0 argument case + if (membersRaw.length <= 0) { + if (!message.member) { + sendEmbeddedMessage(message.channel, { + title: "Error", + description: "Failed to get user", + }) + + return + } + + membersRaw = [message.author.id] + } + + const users = PPCommand.calculatePPLengths(membersRaw) + sendEmbeddedMessage(message.channel, { + title: "pp", + description: PPCommand.buildPPList(users), + }) + } + + /** + * Calculates pp lengths for a list of people. + * + * @param membersRaw - A list of discord snowflakes to convert to pp length. + * @returns A sorted array of users from lowest to highest. + */ + static calculatePPLengths(membersRaw: string[]): PPUser[] { + const users: PPUser[] = [] + + for (const memberRaw of membersRaw) { + const numbersInString = memberRaw.match(/\d+/) + if (!numbersInString) continue + const memberIDStr = numbersInString[0] + if (!memberIDStr) continue + const memberID = parseInt(memberIDStr) + if (!memberID) continue + + try { + users.push({ + id: memberIDStr, + length: memberID % 31 /* Calculation happens here */, + }) + } catch (e) { + continue + } + } + + // sort users ascending by pp length + users.sort((prev, curr) => curr.length - prev.length) + + return users + } + + /** + * Builds the final text that will be shown to the user. + * + * @param users - A list of user and their pp size. + */ + static buildPPList(users: PPUser[]): string { + let ppList = "" + + for (const user of users) { + const userMention = Formatters.userMention(user.id) + + ppList += `${userMention}:\n` + ppList += `8${"=".repeat(user.length)}D **(${user.length})**\n` + } + + return ppList + } +} diff --git a/src/commands/fun/tests/ClapifyCommand.test.ts b/src/commands/fun/tests/ClapifyCommand.test.ts new file mode 100644 index 0000000..51f382b --- /dev/null +++ b/src/commands/fun/tests/ClapifyCommand.test.ts @@ -0,0 +1,15 @@ +import ClapifyCommand from "../clapify" + +test("Correctly adds clap between the words", () => { + expect( + ClapifyCommand.clapify([ + "<@123456789012345678>", + "<#123456789012345678>", + "<@&123456789012345678>", + "word", + "1234", + ]) + ).toStrictEqual( + "<@123456789012345678>👏<#123456789012345678>👏<@&123456789012345678>👏word👏1234" + ) +}) diff --git a/src/commands/fun/tests/PPCommand.test.ts b/src/commands/fun/tests/PPCommand.test.ts new file mode 100644 index 0000000..5108516 --- /dev/null +++ b/src/commands/fun/tests/PPCommand.test.ts @@ -0,0 +1,27 @@ +import PPCommand from "../pp" + +test("Correctly builds pp list", () => { + const ppList = PPCommand.calculatePPLengths([ + "<@123456789012345678>", + "<@111111111111111111>", + "<@333333333333333333>", + "<@444444444444444444>", + ]) + + expect(ppList).toStrictEqual([ + { id: "123456789012345678", length: 24 }, + { id: "444444444444444444", length: 13 }, + { id: "111111111111111111", length: 11 }, + { id: "333333333333333333", length: 2 }, + ]) + + expect(PPCommand.buildPPList(ppList)).toStrictEqual(`<@123456789012345678>: +8========================D **(24)** +<@444444444444444444>: +8=============D **(13)** +<@111111111111111111>: +8===========D **(11)** +<@333333333333333333>: +8==D **(2)** +`) +}) diff --git a/src/commands/util/about.ts b/src/commands/util/about.ts new file mode 100644 index 0000000..37e6cd4 --- /dev/null +++ b/src/commands/util/about.ts @@ -0,0 +1,76 @@ +import { SnowflakeUtil, MessageEmbed } from "discord.js" +import { ApplyOptions } from "@sapphire/decorators" + +import type { Message } from "discord.js" +import type { CommandOptions } from "@sapphire/framework" + +import { countDays, formatDate, formatTimeDiff } from "../../util" +import { globalObject } from "../.." +import CustomCommand from "../../custom/CustomCommand" + +@ApplyOptions({ + aliases: ["a", "u", "uptime"], + description: "Shows basic information about the bot.", +}) +export default class AboutCommand extends CustomCommand { + usage = "> {$}" + + async messageRun(message: Message) { + const now = message.editedTimestamp || message.createdTimestamp + const startTime = globalObject.startTime + + if (!startTime || !this.container.client.id) + return this.failedToGetStartTime(message) + + const formattedUptime = formatTimeDiff(startTime, now) + const botCreatedTime = SnowflakeUtil.deconstruct(this.container.client.id) + const formattedBotCreationDate = formatDate(botCreatedTime.date) + const botAgeInDays = countDays(botCreatedTime.date.getTime(), now) + + const serversCount = this.container.client.guilds.cache.size || 0 + + message.channel.send({ + embeds: [ + new MessageEmbed({ + title: "About", + fields: [ + { + name: "Creation date in UTC", + value: `${formattedBotCreationDate} (${botAgeInDays} days ago)`, + inline: true, + }, + { + name: "Uptime", + value: formattedUptime, + inline: true, + }, + { + name: "Servers", + value: `The bot is in ${serversCount} server${ + serversCount > 1 ? "s" : "" + }.`, + inline: true, + }, + { + name: "Source Code", + value: "https://github.com/llama-bot", + inline: false, + }, + ], + }), + ], + }) + } + + failedToGetStartTime(message: Message): void { + message.channel.send({ + embeds: [ + new MessageEmbed({ + title: "Failed to run command", + description: + "The bot failed to get one or more information about the bot.", + }), + ], + }) + } +} diff --git a/src/commands/util/invite.ts b/src/commands/util/invite.ts new file mode 100644 index 0000000..636f087 --- /dev/null +++ b/src/commands/util/invite.ts @@ -0,0 +1,26 @@ +import { CommandOptions } from "@sapphire/framework" +import { ApplyOptions } from "@sapphire/decorators" +import { MessageEmbed } from "discord.js" + +import type { Message } from "discord.js" + +import CustomCommand from "../../custom/CustomCommand" + +@ApplyOptions({ + description: "Shows information about inviting the bot.", +}) +export default class InviteCommand extends CustomCommand { + usage = "> {$}" + + async messageRun(message: Message) { + message.channel.send({ + embeds: [ + new MessageEmbed({ + title: "Sorry", + description: `Sorry, but only the owner can invite the bot. +Check the [documentation](https://docs.llama.developomp.com/docs/overview#can-i-use-this-bot-in-my-discord-server) for more information.`, + }), + ], + }) + } +} diff --git a/src/commands/util/ping.ts b/src/commands/util/ping.ts new file mode 100644 index 0000000..0cb34ac --- /dev/null +++ b/src/commands/util/ping.ts @@ -0,0 +1,61 @@ +import { MessageEmbed } from "discord.js" +import { ApplyOptions } from "@sapphire/decorators" + +import type { Message } from "discord.js" +import type { CommandOptions } from "@sapphire/framework" + +import CustomCommand from "../../custom/CustomCommand" + +@ApplyOptions({ + aliases: ["p", "pong", "latency"], + description: + "Measures communication delay (latency) in 1/1000 of a second, also known as millisecond (ms).", +}) +export default class PingCommand extends CustomCommand { + usage = "> {$}" + + async messageRun(message: Message) { + const response = await message.channel.send({ + embeds: [ + new MessageEmbed({ + description: `Called by ${message.author}`, + fields: [ + { + name: "API Latency", + value: "...", + inline: true, + }, + { + name: "Bot latency", + value: "...", + inline: true, + }, + ], + }), + ], + }) + + response.edit({ + embeds: [ + new MessageEmbed({ + description: `Called by ${message.author}`, + fields: [ + { + name: "API latency", + value: `${ + (response.editedTimestamp || response.createdTimestamp) - + (message.editedTimestamp || message.createdTimestamp) + }ms`, + inline: true, + }, + { + name: "Bot latency", + value: `${Math.round(this.container.client.ws.ping)}ms`, + inline: true, + }, + ], + }), + ], + }) + } +} diff --git a/src/commands/util/serverInfo.ts b/src/commands/util/serverInfo.ts new file mode 100644 index 0000000..cf02d1a --- /dev/null +++ b/src/commands/util/serverInfo.ts @@ -0,0 +1,230 @@ +import { Formatters, MessageEmbed, SnowflakeUtil } from "discord.js" +import { ApplyOptions } from "@sapphire/decorators" + +import type { Guild, Message } from "discord.js" +import type { CommandOptions } from "@sapphire/framework" + +import { + formatDate, + formatTimeDiff, + highlightIndex, + formatNumber, +} from "../../util" +import CustomCommand from "../../custom/CustomCommand" + +interface Data { + // general info + guildName: string + guildIconUrl: string + guildOwner: string + membersCount: number + maxMembers: number | null + communityStatus: string + partneredStatus: string + verifiedStatus: string + ScanningStatus: string + verificationStatus: string + nitroBoosts: number + boostLevel: number + + // creation date + guildCreationDate: string + guildAge: string + + // channels + totalChannelCount: number + textChannelCount: number + voiceChannelCount: number + announcementChannelCount: number + stageChannelCount: number + storeChannelCount: number +} + +@ApplyOptions({ + aliases: ["si"], + description: "Show information about the server", +}) +export default class ServerInfoCommand extends CustomCommand { + usage = "> {$}" + + // value of VerificationLevels from "discord.js/typings/enums" + // DO NOT CHANGE!! + verificationLevels = ["NONE", "LOW", "MEDIUM", "HIGH", "VERY_HIGH"] + + // value of ExplicitContentFilterLevels from "discord.js/typings/enums" + // DO NOT CHANGE!! + explicitContentFilterLevels = [ + "DISABLED", + "MEMBERS_WITHOUT_ROLES", + "ALL_MEMBERS", + ] + + // value of PremiumTiers from "discord.js/typings/enums" + // DO NOT CHANGE!! + premiumTiers = ["NONE", "TIER_1", "TIER_2", "TIER_3"] + + async messageRun(message: Message) { + message.channel.sendTyping() + + if (!message.guild) { + message.channel.send({ + embeds: [ + new MessageEmbed({ + title: "Error!", + description: "This command only works in servers", + }), + ], + }) + + return + } + + this.reply(message, message.guild) + } + + async getData(message: Message, guild: Guild): Promise { + // + // general info + // + + const guildName = guild.name + const guildIconUrl = guild.iconURL() || "" + const guildOwner = Formatters.userMention(guild.ownerId) + + const membersCount = guild.memberCount + const maxMembers = guild.maximumMembers + + const communityStatus = highlightIndex( + ["Yes", "No"], + guild.features.includes("COMMUNITY") ? 0 : 1 + ) + const partneredStatus = highlightIndex( + ["Yes", "No"], + guild.features.includes("PARTNERED") ? 0 : 1 + ) + const verifiedStatus = highlightIndex( + ["Yes", "No"], + guild.features.includes("VERIFIED") ? 0 : 1 + ) + + const ScanningStatus = highlightIndex( + this.explicitContentFilterLevels, + this.explicitContentFilterLevels.indexOf(guild.explicitContentFilter) + ) + const verificationStatus = highlightIndex( + this.verificationLevels, + this.verificationLevels.indexOf(guild.verificationLevel) + ) + + const nitroBoosts = guild.premiumSubscriptionCount || 0 + const boostLevel = this.premiumTiers.indexOf(guild.premiumTier) + + // + // creation date + // + + const serverCreatedTime = SnowflakeUtil.deconstruct(guild.id) + const guildCreationDate = formatDate(serverCreatedTime.date) + const guildAge = formatTimeDiff( + serverCreatedTime.date.getTime(), + message.editedTimestamp || message.createdTimestamp + ) + + // + // channels + // + + const channels = await guild.channels.fetch() + + const totalChannelCount = channels.size + let textChannelCount = 0 + let voiceChannelCount = 0 + let announcementChannelCount = 0 + let stageChannelCount = 0 + let storeChannelCount = 0 + + for (const [, channel] of channels) { + if (channel.type === "GUILD_TEXT") textChannelCount += 1 + if (channel.type === "GUILD_VOICE") voiceChannelCount += 1 + if (channel.type === "GUILD_NEWS") announcementChannelCount += 1 + if (channel.type === "GUILD_STAGE_VOICE") stageChannelCount += 1 + if (channel.type === "GUILD_STORE") storeChannelCount += 1 + } + + return { + // general info + guildName, + guildIconUrl, + guildOwner, + membersCount, + maxMembers, + communityStatus, + partneredStatus, + verifiedStatus, + ScanningStatus, + verificationStatus, + nitroBoosts, + boostLevel, + + // creation date + guildCreationDate, + guildAge, + + // channels + totalChannelCount, + textChannelCount, + voiceChannelCount, + announcementChannelCount, + stageChannelCount, + storeChannelCount, + } + } + + async reply(message: Message, guild: Guild): Promise { + const data = await this.getData(message, guild) + + message.channel.send({ + embeds: [ + new MessageEmbed({ + title: data.guildName, + thumbnail: { url: data.guildIconUrl }, + + description: `Owner: ${data.guildOwner} + +Members: Capacity: ${formatNumber(data.membersCount)} / ${formatNumber( + data.maxMembers + )} + +Community: ${data.communityStatus} +Partnered: ${data.partneredStatus} +Verified: ${data.verifiedStatus} + +Scanning: ${data.ScanningStatus} +Verification: ${data.verificationStatus} + +Nitro boosts: ${data.nitroBoosts} (Lv ${data.boostLevel})`, + + fields: [ + { + name: "Creation date", + value: `Creation date in UTC (24h time): ${data.guildCreationDate} + +${data.guildAge} ago`, + }, + + { + name: "Channels", + value: `Channels: ${data.totalChannelCount} +Text: ${data.textChannelCount} +Voice: ${data.voiceChannelCount} +Announcement: ${data.announcementChannelCount} +Stage: ${data.stageChannelCount} +Store: ${data.storeChannelCount}`, + }, + ], + footer: { text: `Server ID: ${guild.id}` }, + }), + ], + }) + } +} diff --git a/src/commands/util/snowflake.ts b/src/commands/util/snowflake.ts new file mode 100644 index 0000000..aaa7776 --- /dev/null +++ b/src/commands/util/snowflake.ts @@ -0,0 +1,68 @@ +import { SnowflakeUtil, MessageEmbed } from "discord.js" +import { ApplyOptions } from "@sapphire/decorators" + +import type { Message } from "discord.js" +import type { Args, CommandOptions } from "@sapphire/framework" + +import { countDays, formatDate, formatTimeDiff } from "../../util" +import CustomCommand from "../../custom/CustomCommand" + +@ApplyOptions({ + aliases: ["s"], + description: "Calculates when a discord ID (snowflake) was created.", +}) +export default class SnowflakeCommand extends CustomCommand { + usage = "> {$} " + + async messageRun(message: Message, args: Args) { + let input: string + + try { + input = await args.pick("string") + } catch { + message.channel.send({ + embeds: [ + new MessageEmbed({ + title: "Error", + description: "You did not pass any snowflake :(", + }), + ], + }) + + return + } + + try { + const now = message.editedTimestamp || message.createdTimestamp + const creationDate = SnowflakeUtil.deconstruct(input).date + const dateDelta = countDays(creationDate.getTime(), now) + + message.channel.send({ + embeds: [ + new MessageEmbed({ + title: input, + fields: [ + { + name: "Creation Date (UTC)", + value: `${formatDate(creationDate)} (${dateDelta} days ago)`, + }, + { + name: "Age", + value: formatTimeDiff(creationDate.getTime(), now), + }, + ], + }), + ], + }) + } catch { + message.channel.send({ + embeds: [ + new MessageEmbed({ + title: "Error", + description: `Failed to parse snowflake \`${input}\``, + }), + ], + }) + } + } +} diff --git a/src/commands/util/userInfo.ts b/src/commands/util/userInfo.ts new file mode 100644 index 0000000..1335c95 --- /dev/null +++ b/src/commands/util/userInfo.ts @@ -0,0 +1,99 @@ +// todo: nitro boost + +import { Formatters, MessageEmbed } from "discord.js" +import { CommandOptions } from "@sapphire/framework" +import { ApplyOptions } from "@sapphire/decorators" + +import type { GuildMember, Message } from "discord.js" +import type { Args } from "@sapphire/framework" + +import { formatDate, formatTimeDiff } from "../../util" +import CustomCommand from "../../custom/CustomCommand" + +@ApplyOptions({ + aliases: ["ui"], + description: "Shows information about a user.", +}) +export default class UserInfoCommand extends CustomCommand { + usage = `> {$} [user] + +e.g. +Get your user info +> {$} + +Get someone else's user info by mentioning +> {$} @someone + +Get someone else's user info with user id +> {$} 123456789012345678 +` + + async messageRun(message: Message, args: Args) { + let user = await args.pick("user").catch(() => undefined) + + if (!user) user = message.author + + const avatarURL = user.avatarURL() || undefined + + const resultEmbed = new MessageEmbed({ + author: { name: user.tag, icon_url: avatarURL }, + thumbnail: { url: avatarURL }, + description: Formatters.userMention(user.id), + footer: { text: `USER ID: ${user.id}` }, + }) + + resultEmbed.addField( + "Discord join date", + this.formattedJoinDate(user.createdAt) + ) + + if (message.guild) { + const member = await message.guild.members.fetch(user.id) + + resultEmbed.addField( + "Server join date", + this.formattedJoinDate(member.joinedAt) + ) + + const roleMentions = this.getMemberRoles(member, message.guild.id) + resultEmbed.addField( + `Roles (${roleMentions.length})`, + roleMentions.join(" ") + ) + } + + message.channel.send({ + embeds: [resultEmbed], + }) + } + + formattedJoinDate(joinedAt: Date | null): string { + let result = "Unknown" + + if (joinedAt) { + const xAgo = formatTimeDiff(joinedAt.getTime(), Date.now()) + + result = `${formatDate(joinedAt)}\n${xAgo} ago` + } + + return result + } + + getMemberRoles(member: GuildMember, guildID: string): string[] { + return [...member.roles.cache.entries()] // returns a list if [role_id, Role] + .map((elem) => elem[0]) // only get role IDs + .filter((value) => value != guildID) // remove @everyone role + .map((id) => Formatters.roleMention(id)) // converts role ID to mention string + } + + // converts "SOMETHING_LIKE_THIS" to "Something Like This" + // from https://stackoverflow.com/a/32589289/12979111 + convertCase(input: string): string { + return input + .replace(/_/g, " ") + .toLowerCase() + .split(" ") + .map((word) => word.charAt(0).toUpperCase() + word.substring(1)) + .join(" ") + } +} diff --git a/src/custom/CustomCommand.ts b/src/custom/CustomCommand.ts new file mode 100644 index 0000000..f187748 --- /dev/null +++ b/src/custom/CustomCommand.ts @@ -0,0 +1,14 @@ +import { Command } from "@sapphire/framework" + +import type { PieceContext } from "@sapphire/framework" + +export default abstract class CustomCommand extends Command { + public constructor(context: PieceContext, options?: Command.Options) { + super(context, { + ...options, + + // default preconditions + preconditions: ["NoDM", ...(options?.preconditions || [])], + }) + } +} diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..3370657 --- /dev/null +++ b/src/index.ts @@ -0,0 +1,78 @@ +import { SapphireClient } from "@sapphire/framework" +import { start as startPrettyError } from "pretty-error" +import nekosClient from "nekos.life" +import dotenv from "dotenv" +import "./DB" + +function initializeEnv() { + dotenv.config() + // do not start the bot if token is not found + if (!process.env.TOKEN) throw Error("Token not found!") + + // set to default values if not defined already + process.env.TESTING ??= "false" + process.env.PREFIX_PROD ??= "-" + process.env.PREFIX_DEV ??= "b-" + + process.env.PREFIX = + process.env.TESTING == "true" + ? process.env.PREFIX_DEV + : process.env.PREFIX_PROD +} + +function initialize() { + startPrettyError() + initializeEnv() +} + +initialize() + +export const globalObject = { + startTime: 0, + nekosClient: new nekosClient(), +} + +const client = new SapphireClient({ + caseInsensitiveCommands: true, + caseInsensitivePrefixes: true, + defaultPrefix: process.env.PREFIX, + partials: [ + // necessary for DM events to work + // https://discordjs.guide/popular-topics/partials.html#enabling-partials + + "CHANNEL", + + // necessary for reaction detection to work + + "MESSAGE", + "REACTION", + "USER", + ], + intents: [ + "DIRECT_MESSAGE_REACTIONS", + "DIRECT_MESSAGE_TYPING", + "DIRECT_MESSAGES", + + "GUILD_MESSAGE_REACTIONS", + "GUILD_MESSAGE_TYPING", + "GUILD_MESSAGES", + ], + defaultCooldown: { + delay: 1_000, + filteredUsers: process.env.OWNER_IDS.split(","), + limit: 5, + }, +}) + +// +// start the bot +// + +try { + client.login(process.env.TOKEN) +} catch (err) { + console.log("The bot crashed :(") + console.error(err) + + client.destroy() +} diff --git a/src/listeners/commands/commandError.ts b/src/listeners/commands/commandError.ts new file mode 100644 index 0000000..bf6d09d --- /dev/null +++ b/src/listeners/commands/commandError.ts @@ -0,0 +1,37 @@ +import { Listener } from "@sapphire/framework" + +import type { CommandErrorPayload } from "@sapphire/framework" + +/** + * Gets executed when the bot encounters an error. + */ +export class CommandError extends Listener { + run(_error: unknown, payload: CommandErrorPayload) { + this.logToConsole(payload) + this.logToChannels(payload) + this.logToFirebase(payload) + } + + async logToConsole(payload: CommandErrorPayload): Promise { + const message = payload.message + const author = message.author + + console.error(` +===============[ ERROR ]=============== +Author: ${author.id} (${author.tag}) +URL: ${message.url} +Content: ${message.content} +======================================= +`) + } + + // eslint-disable-next-line @typescript-eslint/no-unused-vars + async logToChannels(payload: CommandErrorPayload): Promise { + // + } + + // eslint-disable-next-line @typescript-eslint/no-unused-vars + async logToFirebase(payload: CommandErrorPayload): Promise { + // + } +} diff --git a/src/listeners/messages/messageCreate.ts b/src/listeners/messages/messageCreate.ts new file mode 100644 index 0000000..3efb73f --- /dev/null +++ b/src/listeners/messages/messageCreate.ts @@ -0,0 +1,33 @@ +import { Listener } from "@sapphire/framework" + +import type { Message } from "discord.js" + +import { sendEmbeddedMessage } from "../../util" + +/** + * Gets executed when a message is sent + */ +export class MessageCreate extends Listener { + autoDeleteSeconds = 10 + + run(message: Message) { + if (message.channel.type === "DM") this.handleDMs(message) + } + + async handleDMs(message: Message): Promise { + // ignore messages from other bots (or even itself) + if (message.author.bot) return + + const responseMessage = await sendEmbeddedMessage(message.channel, { + title: "❗ DM commands are not supported.", + description: `Add a broom (🧹) emoji to a messages sent by me to delete them. +This message will deleted in ${this.autoDeleteSeconds} seconds.`, + }) + + await new Promise((resolve) => + setTimeout(resolve, this.autoDeleteSeconds * 1000) + ) + + responseMessage.delete() + } +} diff --git a/src/listeners/messages/messageReactionAdd.ts b/src/listeners/messages/messageReactionAdd.ts new file mode 100644 index 0000000..c93b833 --- /dev/null +++ b/src/listeners/messages/messageReactionAdd.ts @@ -0,0 +1,31 @@ +import { Listener } from "@sapphire/framework" + +import type { MessageReaction, PartialMessageReaction } from "discord.js" + +import { settings, fetchSettings } from "../../DB" + +/** + * Gets executed when a reaction is added to a message + */ +export class MessageReactionAdd extends Listener { + run(reaction: MessageReaction | PartialMessageReaction) { + if (reaction.message.channel.type === "DM") this.handleDMs(reaction) + } + + async handleDMs( + reaction: MessageReaction | PartialMessageReaction + ): Promise { + const message = await reaction.message.fetch() + + if ( + !reaction.emoji.name || + !this.container.client.id || + this.container.client.id !== message.author.id + ) + return + + if (!settings.clear_emojis) await fetchSettings() + + if (settings.clear_emojis?.includes(reaction.emoji.name)) message.delete() + } +} diff --git a/src/listeners/ready.ts b/src/listeners/ready.ts new file mode 100644 index 0000000..797de0f --- /dev/null +++ b/src/listeners/ready.ts @@ -0,0 +1,34 @@ +import { ApplyOptions } from "@sapphire/decorators" +import { Listener } from "@sapphire/framework" +import { gray, yellow } from "colorette" + +import type { ListenerOptions } from "@sapphire/framework" + +import { globalObject } from ".." + +const y = yellow + +@ApplyOptions({ + once: true, +}) +export class Ready extends Listener { + run() { + globalObject.startTime = Date.now() + + this.printReady() + } + + printReady(): void { + const botTag = this.container.client.user?.tag || "unknown bot tag" + const botID = this.container.client.user?.id || "unknown bot ID" + const botMode = + process.env.TESTING === "true" ? "DEVELOPMENT" : "PRODUCTION" + + console.log( + gray(` +${y(botTag)} (ID: ${y(botID)}) is Ready! +Mode: ${y(botMode)} +`) + ) + } +} diff --git a/src/preconditions/AdminsOnly.ts b/src/preconditions/AdminsOnly.ts new file mode 100644 index 0000000..ae90a3d --- /dev/null +++ b/src/preconditions/AdminsOnly.ts @@ -0,0 +1,18 @@ +import { Precondition } from "@sapphire/framework" + +import type { Message } from "discord.js" + +/** + * Only allow commands sent in non-DM channels + */ +export default class AdminsOnlyPrecondition extends Precondition { + async run(message: Message) { + if (!message.guild) return this.error() + + const guild = await message.guild.fetch() + const member = await guild.members.fetch(message.author.id) + + if (member.permissions.has("ADMINISTRATOR")) return this.ok() + return this.error() + } +} diff --git a/src/preconditions/NoDM.ts b/src/preconditions/NoDM.ts new file mode 100644 index 0000000..adf9a9f --- /dev/null +++ b/src/preconditions/NoDM.ts @@ -0,0 +1,14 @@ +import { Precondition } from "@sapphire/framework" + +import type { Message } from "discord.js" + +/** + * Only allow commands sent in non-DM channels + */ +export default class NoDMPrecondition extends Precondition { + run(message: Message) { + if (message.channel.type === "DM") return this.error() + + return this.ok() + } +} diff --git a/src/preconditions/OwnersOnly.ts b/src/preconditions/OwnersOnly.ts new file mode 100644 index 0000000..95865c6 --- /dev/null +++ b/src/preconditions/OwnersOnly.ts @@ -0,0 +1,31 @@ +import { Precondition } from "@sapphire/framework" + +import type { Snowflake } from "discord-api-types" +import type { Message } from "discord.js" + +import { sendEmbeddedMessage } from "../util" + +export default class OwnersOnlyPrecondition extends Precondition { + // IDs of users who can run owners only commands + owners: Snowflake[] = [] + + run(message: Message) { + if (this.owners.length <= 0) { + // convert comma separated string to array and remove empty values + // trailing comma and double comma can result in empty values + this.owners = process.env.OWNER_IDS.split(",").filter((elem) => elem) + } + + if (this.owners.includes(message.author.id)) { + return this.ok() + } + + sendEmbeddedMessage(message.channel, { + title: "Permission Error!", + description: `Only the bot owners can use this command! +[message](${message.url})`, + }) + + return this.error() + } +} diff --git a/src/types/bot.d.ts b/src/types/bot.d.ts new file mode 100644 index 0000000..c3f19dc --- /dev/null +++ b/src/types/bot.d.ts @@ -0,0 +1,27 @@ +export type Snowflake = string +// structure: "/" +export type MessageSelector = string + +export interface Settings { + // emoji names + clear_emojis?: string[] + // quotes to be used in the `llama` command + quotes?: string[] +} + +export interface ServerData { + settings: { + // todo: enable/disable commands by default + // todo: enabled/disabled commands/categories + } + + vars: { + channels: { [key: string]: Snowflake } + messages: { [key: string]: MessageSelector } + roles: { [key: string]: Snowflake } + } +} + +export interface Servers { + [key: Snowflake]: ServerData +} diff --git a/src/types/process.d.ts b/src/types/process.d.ts new file mode 100644 index 0000000..c04e82a --- /dev/null +++ b/src/types/process.d.ts @@ -0,0 +1,15 @@ +declare namespace NodeJS { + interface ProcessEnv { + [key: string]: string | undefined + + // .env values + TOKEN: string + TESTING: string + PREFIX_PROD: string + PREFIX_DEV: string + OWNER_IDS: string // ID1,ID2,ID3,... + + // default prefix currently being used + PREFIX: string + } +} diff --git a/src/types/sapphire.d.ts b/src/types/sapphire.d.ts new file mode 100644 index 0000000..06bcdc2 --- /dev/null +++ b/src/types/sapphire.d.ts @@ -0,0 +1,13 @@ +import "@sapphire/framework" + +declare module "@sapphire/framework" { + abstract class Command { + usage?: string + } + + interface Preconditions { + AdminsOnly: never + OwnersOnly: never + NoDM: never + } +} diff --git a/src/util/caseInsensitiveIndexOf.ts b/src/util/caseInsensitiveIndexOf.ts new file mode 100644 index 0000000..1d64b54 --- /dev/null +++ b/src/util/caseInsensitiveIndexOf.ts @@ -0,0 +1,11 @@ +/** + * Finds the index of {@link query} in {@link input}. + * + * - Returns -1 if {@link query} was not found in {@link input}. + * + * @param input - An array of string + * @param query - String to find + */ +export default function (input: string[], query: string): number { + return input.findIndex((elem) => query.toLowerCase() === elem.toLowerCase()) +} diff --git a/src/util/countDays.ts b/src/util/countDays.ts new file mode 100644 index 0000000..4cac837 --- /dev/null +++ b/src/util/countDays.ts @@ -0,0 +1,12 @@ +/** + * Counts the number of days in between {@link startDate} and {@link endDate}. + * + * - Returns NaN if either of the arguments are NaN. + * - Result could be a negative number if the {@link startDate} is greater than {@link endDate}. + * + * @param startDate - Starting date in milliseconds + * @param endDate - Ending date in milliseconds + */ +export default function (startDate: number, endDate: number): number { + return Math.ceil((endDate - startDate) / (1000 * 60 * 60 * 24)) +} diff --git a/src/util/extractUrlsFromString.ts b/src/util/extractUrlsFromString.ts new file mode 100644 index 0000000..878b826 --- /dev/null +++ b/src/util/extractUrlsFromString.ts @@ -0,0 +1,15 @@ +/** + * From [URI.js](https://github.com/medialize/URI.js). + * More information can be found in [this stackOverflow answer](https://stackoverflow.com/a/11209098). + */ +const pattern = + /\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()[\]{};:'".,<>?«»“”‘’]))/gi + +/** + * Extract URLs from string + * + * @param input - Raw string to check + */ +export default function (input: string): string[] { + return input.match(pattern) || [] +} diff --git a/src/util/formatDate.ts b/src/util/formatDate.ts new file mode 100644 index 0000000..b9eaa53 --- /dev/null +++ b/src/util/formatDate.ts @@ -0,0 +1,16 @@ +/** + * Formats {@link date} to `YYYY-MM-DD hh:mm:ss`. + * + * @param date - Raw date object + */ +export default function (date: Date): string { + const YYYY = date.getFullYear() + const MM = date.getMonth() + 1 // starts from 0 for some reason + const DD = date.getDate() + + const hh = date.getHours() + const mm = date.getMinutes() + const ss = date.getSeconds() + + return `${YYYY}-${MM}-${DD} ${hh}:${mm}:${ss}` +} diff --git a/src/util/formatNumber.ts b/src/util/formatNumber.ts new file mode 100644 index 0000000..e66080f --- /dev/null +++ b/src/util/formatNumber.ts @@ -0,0 +1,12 @@ +/** + * Add commas to a long, positive number. Does not add comma to negative numbers. + * + * @param num - raw number + */ +export default function (num: number | undefined | null): string { + if (num === undefined || num === null) return "None" + + if (num <= 999) return String(num) + + return String(num).replace(/(.)(?=(\d{3})+$)/g, "$1,") +} diff --git a/src/util/formatTimeDiff.ts b/src/util/formatTimeDiff.ts new file mode 100644 index 0000000..330dc69 --- /dev/null +++ b/src/util/formatTimeDiff.ts @@ -0,0 +1,43 @@ +const SECONDS_IN_A_YEAR = 60 * 60 * 24 * 365 +const SECONDS_IN_A_DAY = 60 * 60 * 24 +const SECONDS_IN_A_HOUR = 60 * 60 +const SECONDS_IN_A_MINUTE = 60 + +/** + * Formats difference in time in a readable format. + * + * @param startTime - Start date in millisecond + * @param endTime - End date in millisecond + */ +export default function (startTime: number, endTime: number): string { + let result = "" + + function addToResult(num: number, unit: string) { + if (num) result += ` ${num} ${unit}` + (num > 1 ? "s" : "") + } + + let diffSec = (endTime - startTime) / 1000 + + // prevent empty response + if (diffSec === 0) return "0 second" + + const years = Math.floor(diffSec / SECONDS_IN_A_YEAR) + diffSec -= years * SECONDS_IN_A_YEAR + addToResult(years, "year") + + const days = Math.floor(diffSec / SECONDS_IN_A_DAY) + diffSec -= days * SECONDS_IN_A_DAY + addToResult(days, "day") + + const hours = Math.floor(diffSec / SECONDS_IN_A_HOUR) % 24 + diffSec -= hours * SECONDS_IN_A_HOUR + addToResult(hours, "hour") + + const minutes = Math.floor(diffSec / SECONDS_IN_A_MINUTE) % 60 + diffSec -= minutes * SECONDS_IN_A_MINUTE + addToResult(minutes, "minute") + + addToResult(diffSec, "second") + + return result.trim() +} diff --git a/src/util/highlightIndex.ts b/src/util/highlightIndex.ts new file mode 100644 index 0000000..45b913b --- /dev/null +++ b/src/util/highlightIndex.ts @@ -0,0 +1,20 @@ +/** + * Highlight a string in a list of entries using markdown syntax. + * + * - If {@link index} is -1 or is greater than the last index of {@link entries}, it will leave all entries un-highlighted. + * - If {@link entries} does not contain any element, the resulting string will be empty. + * + * @param index - Index of string to highlight + * @param entries - An array of strings that can be highlighted + * @param separator - What to put between the entries (defaults to " / ") + */ +export default function ( + entries: string[], + index: number, + separator = " / " +): string { + entries = entries.map((elem, i) => { + return i === index ? `**${elem}**` : elem + }) + return entries.join(separator) +} diff --git a/src/util/index.ts b/src/util/index.ts new file mode 100644 index 0000000..e0a4955 --- /dev/null +++ b/src/util/index.ts @@ -0,0 +1,9 @@ +export { default as caseInsensitiveIndexOf } from "./caseInsensitiveIndexOf" +export { default as countDays } from "./countDays" +export { default as formatDate } from "./formatDate" +export { default as formatNumber } from "./formatNumber" +export { default as highlightIndex } from "./highlightIndex" +export { default as isChannelInMessageNSFW } from "./isChannelInMessageNSFW" +export { default as formatTimeDiff } from "./formatTimeDiff" +export { default as sendEmbeddedMessage } from "./sendEmbeddedMessage" +export { default as extractUrlsFromString } from "./extractUrlsFromString" diff --git a/src/util/isChannelInMessageNSFW.ts b/src/util/isChannelInMessageNSFW.ts new file mode 100644 index 0000000..103a1e5 --- /dev/null +++ b/src/util/isChannelInMessageNSFW.ts @@ -0,0 +1,10 @@ +import type { Message } from "discord.js" + +/** + * Checks if channel where the message sent is a NSFW channel. + * + * @param message - Message to get the channel + */ +export default function (message: Message): boolean { + return Reflect.get(message.channel, "nsfw") === true +} diff --git a/src/util/sendEmbeddedMessage.ts b/src/util/sendEmbeddedMessage.ts new file mode 100644 index 0000000..550fa28 --- /dev/null +++ b/src/util/sendEmbeddedMessage.ts @@ -0,0 +1,23 @@ +import { MessageEmbed } from "discord.js" + +import type { + BaseGuildTextChannel, + Message, + MessageEmbedOptions, + TextBasedChannel, +} from "discord.js" + +/** + * Sends message with one embed. + * + * @param channel - Text channel to send the embedded message + * @param data - Message content to send + */ +export default function ( + channel: BaseGuildTextChannel | TextBasedChannel, + data: MessageEmbed | MessageEmbedOptions +): Promise> { + return channel.send({ + embeds: [new MessageEmbed(data)], + }) +} diff --git a/src/util/tests/caseInsensitiveIndexOf.test.ts b/src/util/tests/caseInsensitiveIndexOf.test.ts new file mode 100644 index 0000000..f6dc89d --- /dev/null +++ b/src/util/tests/caseInsensitiveIndexOf.test.ts @@ -0,0 +1,17 @@ +import caseInsensitiveIndexOf from "../caseInsensitiveIndexOf" + +test("Correctly identifies index", () => { + const array = ["A", "B", "C", "D"] + + array.map((entry, index) => { + expect(caseInsensitiveIndexOf(array, entry.toLowerCase())).toStrictEqual( + index + ) + }) + + expect( + caseInsensitiveIndexOf(array, "this does not exist in the array") + ).toStrictEqual(-1) + + expect(caseInsensitiveIndexOf([], "testing empty array")).toStrictEqual(-1) +}) diff --git a/src/util/tests/countDays.test.ts b/src/util/tests/countDays.test.ts new file mode 100644 index 0000000..197dc02 --- /dev/null +++ b/src/util/tests/countDays.test.ts @@ -0,0 +1,24 @@ +import countDays from "../countDays" + +test("Accurately counts days between dates", () => { + expect( + countDays( + new Date("2022/02/22").getTime(), + new Date("2022/02/23").getTime() + ) + ).toStrictEqual(1) + + expect( + countDays( + new Date("2022/02/01").getTime(), + new Date("2022/03/01").getTime() + ) + ).toStrictEqual(28) + + expect( + countDays( + new Date("this string").getTime(), // NaN + new Date("is not a valid date").getTime() // NaN + ) + ).toStrictEqual(NaN) +}) diff --git a/src/util/tests/formatDate.test.ts b/src/util/tests/formatDate.test.ts new file mode 100644 index 0000000..399b5ad --- /dev/null +++ b/src/util/tests/formatDate.test.ts @@ -0,0 +1,11 @@ +import formatDate from "../formatDate" + +test("Properly formats date", () => { + expect(formatDate(new Date("Feb 22, 2022 22:22:22"))).toStrictEqual( + "2022-2-22 22:22:22" + ) + + expect(formatDate(new Date("2022/02/22 22:22:22"))).toStrictEqual( + "2022-2-22 22:22:22" + ) +}) diff --git a/src/util/tests/formatNumber.test.ts b/src/util/tests/formatNumber.test.ts new file mode 100644 index 0000000..d07fbfb --- /dev/null +++ b/src/util/tests/formatNumber.test.ts @@ -0,0 +1,10 @@ +import formatNumber from "../formatNumber" + +test("Correctly formats numbers", () => { + expect(formatNumber(1_000)).toStrictEqual("1,000") + expect(formatNumber(999_999_999)).toStrictEqual("999,999,999") + expect(formatNumber(0)).toStrictEqual("0") + expect(formatNumber(-0)).toStrictEqual("0") + expect(formatNumber(-1_000)).toStrictEqual("-1000") + expect(formatNumber(-999_999_999)).toStrictEqual("-999999999") +}) diff --git a/src/util/tests/formatTimeDiff.test.ts b/src/util/tests/formatTimeDiff.test.ts new file mode 100644 index 0000000..40bc5a6 --- /dev/null +++ b/src/util/tests/formatTimeDiff.test.ts @@ -0,0 +1,24 @@ +import formatTimeDiff from "../formatTimeDiff" + +test("Correctly formats time", () => { + expect( + formatTimeDiff( + new Date("2022/02/22").getTime(), + new Date("2023/02/23 01:01:01").getTime() + ) + ).toStrictEqual("1 year 1 day 1 hour 1 minute 1 second") + + expect( + formatTimeDiff( + new Date("2022/02/22").getTime(), + new Date("2024/02/24 02:02:02").getTime() + ) + ).toStrictEqual("2 years 2 days 2 hours 2 minutes 2 seconds") + + expect( + formatTimeDiff( + new Date("2022/02/22").getTime(), + new Date("2022/02/22").getTime() + ) + ).toStrictEqual("0 second") +}) diff --git a/src/util/tests/highlightIndex.test.ts b/src/util/tests/highlightIndex.test.ts new file mode 100644 index 0000000..04255de --- /dev/null +++ b/src/util/tests/highlightIndex.test.ts @@ -0,0 +1,13 @@ +import highlightIndex from "../highlightIndex" + +test("Correctly highlights entry", () => { + const array = ["A", "B", "C"] + + expect(highlightIndex(array, -1)).toStrictEqual("A / B / C") + expect(highlightIndex(array, 0)).toStrictEqual("**A** / B / C") + expect(highlightIndex(array, 1)).toStrictEqual("A / **B** / C") + expect(highlightIndex(array, 2)).toStrictEqual("A / B / **C**") + expect(highlightIndex(array, 3)).toStrictEqual("A / B / C") + + expect(highlightIndex([], 0)).toStrictEqual("") +}) diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..9ec395b --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "outDir": "dist", + "rootDir": "src", + + "moduleResolution": "Node", + "target": "ES6", + "module": "CommonJS", + "lib": ["ES6"], + + "removeComments": true, + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "experimentalDecorators": true, + "noFallthroughCasesInSwitch": true, + "noImplicitAny": true, + "skipLibCheck": true, + "resolveJsonModule": true, + "strict": true + }, + "include": ["src"], + "exclude": ["_/", "**/*test.ts"] +} diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..f3009b3 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,4701 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@ampproject/remapping@^2.1.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.1.2.tgz#4edca94973ded9630d20101cd8559cedb8d8bd34" + integrity sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg== + dependencies: + "@jridgewell/trace-mapping" "^0.3.0" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" + integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== + dependencies: + "@babel/highlight" "^7.16.7" + +"@babel/compat-data@^7.16.4": + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.0.tgz#86850b8597ea6962089770952075dcaabb8dba34" + integrity sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng== + +"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.2", "@babel/core@^7.8.0": + version "7.17.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.5.tgz#6cd2e836058c28f06a4ca8ee7ed955bbf37c8225" + integrity sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA== + dependencies: + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.17.3" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helpers" "^7.17.2" + "@babel/parser" "^7.17.3" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.17.3" + "@babel/types" "^7.17.0" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.1.2" + semver "^6.3.0" + +"@babel/generator@^7.17.3", "@babel/generator@^7.7.2": + version "7.17.3" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.3.tgz#a2c30b0c4f89858cb87050c3ffdfd36bdf443200" + integrity sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg== + dependencies: + "@babel/types" "^7.17.0" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/helper-compilation-targets@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz#06e66c5f299601e6c7da350049315e83209d551b" + integrity sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA== + dependencies: + "@babel/compat-data" "^7.16.4" + "@babel/helper-validator-option" "^7.16.7" + browserslist "^4.17.5" + semver "^6.3.0" + +"@babel/helper-environment-visitor@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7" + integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-function-name@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz#f1ec51551fb1c8956bc8dd95f38523b6cf375f8f" + integrity sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA== + dependencies: + "@babel/helper-get-function-arity" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/helper-get-function-arity@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz#ea08ac753117a669f1508ba06ebcc49156387419" + integrity sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-hoist-variables@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" + integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-module-imports@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" + integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-module-transforms@^7.16.7": + version "7.17.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.17.6.tgz#3c3b03cc6617e33d68ef5a27a67419ac5199ccd0" + integrity sha512-2ULmRdqoOMpdvkbT8jONrZML/XALfzxlb052bldftkicAUy8AxSCkD5trDPQcwHNmolcl7wP6ehNqMlyUw6AaA== + dependencies: + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-simple-access" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/helper-validator-identifier" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.17.3" + "@babel/types" "^7.17.0" + +"@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.16.7", "@babel/helper-plugin-utils@^7.8.0": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5" + integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== + +"@babel/helper-simple-access@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz#d656654b9ea08dbb9659b69d61063ccd343ff0f7" + integrity sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-split-export-declaration@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" + integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-validator-identifier@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" + integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== + +"@babel/helper-validator-option@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" + integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== + +"@babel/helpers@^7.17.2": + version "7.17.2" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.17.2.tgz#23f0a0746c8e287773ccd27c14be428891f63417" + integrity sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ== + dependencies: + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.17.0" + "@babel/types" "^7.17.0" + +"@babel/highlight@^7.16.7": + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.10.tgz#744f2eb81579d6eea753c227b0f570ad785aba88" + integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw== + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.7", "@babel/parser@^7.17.3": + version "7.17.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.3.tgz#b07702b982990bf6fdc1da5049a23fece4c5c3d0" + integrity sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA== + +"@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.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-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-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.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-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.7.2": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz#39c9b55ee153151990fb038651d58d3fd03f98f8" + integrity sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/template@^7.16.7", "@babel/template@^7.3.3": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" + integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/parser" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/traverse@^7.17.0", "@babel/traverse@^7.17.3", "@babel/traverse@^7.7.2": + version "7.17.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.3.tgz#0ae0f15b27d9a92ba1f2263358ea7c4e7db47b57" + integrity sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.17.3" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/parser" "^7.17.3" + "@babel/types" "^7.17.0" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.16.7", "@babel/types@^7.17.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3": + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.0.tgz#a826e368bccb6b3d84acd76acad5c0d87342390b" + integrity sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw== + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" + 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== + +"@discordjs/builders@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@discordjs/builders/-/builders-0.11.0.tgz#4102abe3e0cd093501f3f71931df43eb92f5b0cc" + integrity sha512-ZTB8yJdJKrKlq44dpWkNUrAtEJEq0gqpb7ASdv4vmq6/mZal5kOv312hQ56I/vxwMre+VIkoHquNUAfnTbiYtg== + dependencies: + "@sindresorhus/is" "^4.2.0" + discord-api-types "^0.26.0" + ts-mixer "^6.0.0" + tslib "^2.3.1" + zod "^3.11.6" + +"@discordjs/collection@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@discordjs/collection/-/collection-0.3.2.tgz#3c271dd8a93dad89b186d330e24dbceaab58424a" + integrity sha512-dMjLl60b2DMqObbH1MQZKePgWhsNe49XkKBZ0W5Acl5uVV43SN414i2QfZwRI7dXAqIn8pEWD2+XXQFn9KWxqg== + +"@discordjs/collection@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@discordjs/collection/-/collection-0.4.0.tgz#b6488286a1cc7b41b644d7e6086f25a1c1e6f837" + integrity sha512-zmjq+l/rV35kE6zRrwe8BHqV78JvIh2ybJeZavBi5NySjWXqN3hmmAKg7kYMMXSeiWtSsMoZ/+MQi0DiQWy2lw== + +"@eslint/eslintrc@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.2.0.tgz#7ce1547a5c46dfe56e1e45c3c9ed18038c721c6a" + integrity sha512-igm9SjJHNEJRiUnecP/1R5T3wKLEJ7pL6e2P+GUSfCd0dGjPYYZve08uzw8L2J8foVHFz+NGu12JxRcU2gGo6w== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.3.1" + globals "^13.9.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + +"@firebase/app-types@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@firebase/app-types/-/app-types-0.7.0.tgz#c9e16d1b8bed1a991840b8d2a725fb58d0b5899f" + integrity sha512-6fbHQwDv2jp/v6bXhBw2eSRbNBpxHcd1NBF864UksSMVIqIyri9qpJB1Mn6sGZE+bnDsSQBC5j2TbMxYsJQkQg== + +"@firebase/auth-interop-types@0.1.6": + version "0.1.6" + resolved "https://registry.yarnpkg.com/@firebase/auth-interop-types/-/auth-interop-types-0.1.6.tgz#5ce13fc1c527ad36f1bb1322c4492680a6cf4964" + integrity sha512-etIi92fW3CctsmR9e3sYM3Uqnoq861M0Id9mdOPF6PWIg38BXL5k4upCNBggGUpLIS0H1grMOvy/wn1xymwe2g== + +"@firebase/component@0.5.7": + version "0.5.7" + resolved "https://registry.yarnpkg.com/@firebase/component/-/component-0.5.7.tgz#a50c5fbd14a2136a99ade6f59f53498729c0f174" + integrity sha512-CiAHUPXh2hn/lpzMShNmfAxHNQhKQwmQUJSYMPCjf2bCCt4Z2vLGpS+UWEuNFm9Zf8LNmkS+Z+U/s4Obi5carg== + dependencies: + "@firebase/util" "1.4.0" + tslib "^2.1.0" + +"@firebase/database-compat@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@firebase/database-compat/-/database-compat-0.1.1.tgz#9fe69e3bd3f71d29011bb6ca793f38edb65ca536" + integrity sha512-K3DFWiw0YkLZtlfA9TOGPw6zVXKu5dQ1XqIGztUufFVRYW8IizReXVxzSSmJNR4Adr2LiU9j66Wenc6e5UfwaQ== + dependencies: + "@firebase/component" "0.5.7" + "@firebase/database" "0.12.1" + "@firebase/database-types" "0.9.1" + "@firebase/logger" "0.3.0" + "@firebase/util" "1.4.0" + tslib "^2.1.0" + +"@firebase/database-types@0.9.1": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@firebase/database-types/-/database-types-0.9.1.tgz#0cab989e8154d812b535d80f23c1578b1d391f5f" + integrity sha512-RUixK/YrbpxbfdE+nYP0wMcEsz1xPTnafP0q3UlSS/+fW744OITKtR1J0cMRaXbvY7EH0wUVTNVkrtgxYY8IgQ== + dependencies: + "@firebase/app-types" "0.7.0" + "@firebase/util" "1.4.0" + +"@firebase/database-types@^0.9.3": + version "0.9.4" + resolved "https://registry.yarnpkg.com/@firebase/database-types/-/database-types-0.9.4.tgz#08b7da33d8dca8f5adab45bfb1cdf8654f2c6720" + integrity sha512-uAQuc6NUZ5Oh/cWZPeMValtcZ+4L1stgKOeYvz7mLn8+s03tnCDL2N47OLCHdntktVkhImQTwGNARgqhIhtNeA== + dependencies: + "@firebase/app-types" "0.7.0" + "@firebase/util" "1.4.3" + +"@firebase/database@0.12.1": + version "0.12.1" + resolved "https://registry.yarnpkg.com/@firebase/database/-/database-0.12.1.tgz#7e43f27ac4057858d5bd0dd371b134b304fecdb0" + integrity sha512-Ethk0hc476qnkSKNBa+8Yc7iM8AO69HYWsaD+QUC983FZtnuMyNLHtEeSUbLQYvyHo7cOjcc52slop14WmfZeQ== + dependencies: + "@firebase/auth-interop-types" "0.1.6" + "@firebase/component" "0.5.7" + "@firebase/logger" "0.3.0" + "@firebase/util" "1.4.0" + faye-websocket "0.11.4" + tslib "^2.1.0" + +"@firebase/logger@0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@firebase/logger/-/logger-0.3.0.tgz#a3992e40f62c10276dbfcb8b4ab376b7e25d7fd9" + integrity sha512-7oQ+TctqekfgZImWkKuda50JZfkmAKMgh5qY4aR4pwRyqZXuJXN1H/BKkHvN1y0S4XWtF0f/wiCLKHhyi1ppPA== + dependencies: + tslib "^2.1.0" + +"@firebase/util@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@firebase/util/-/util-1.4.0.tgz#81e985adba44b4d1f21ec9f5af9628d505891de8" + integrity sha512-Qn58d+DVi1nGn0bA9RV89zkz0zcbt6aUcRdyiuub/SuEvjKYstWmHcHwh1C0qmE1wPf9a3a+AuaRtduaGaRT7A== + dependencies: + tslib "^2.1.0" + +"@firebase/util@1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@firebase/util/-/util-1.4.3.tgz#4358cf5f18beaa9c8a1e5a5fc4c7c44a4ccd4b7b" + integrity sha512-gQJl6r0a+MElLQEyU8Dx0kkC2coPj67f/zKZrGR7z7WpLgVanhaCUqEsptwpwoxi9RMFIaebleG+C9xxoARq+Q== + dependencies: + tslib "^2.1.0" + +"@google-cloud/common@^3.7.0": + version "3.7.1" + resolved "https://registry.yarnpkg.com/@google-cloud/common/-/common-3.7.1.tgz#e6a4b512ea0c72435b853831565bfba6a8dff2ac" + integrity sha512-BJfcV5BShbunYcn5HniebXLVp2Y6fpuesNegyar5CG8H2AKYHlKxnVID+FSwy92WAW4N2lpGdvxRsmiAn8Fc3w== + dependencies: + "@google-cloud/projectify" "^2.0.0" + "@google-cloud/promisify" "^2.0.0" + arrify "^2.0.1" + duplexify "^4.1.1" + ent "^2.2.0" + extend "^3.0.2" + google-auth-library "^7.0.2" + retry-request "^4.2.2" + teeny-request "^7.0.0" + +"@google-cloud/firestore@^4.5.0": + version "4.14.1" + resolved "https://registry.yarnpkg.com/@google-cloud/firestore/-/firestore-4.14.1.tgz#c2692f4515d463bcf994981fad361a4690ecd6f3" + integrity sha512-ecPxrwsk3IWfyILHhVtRJXFcn+CFnlYRbnM6vwS+eEwHAfSFoy4tNXlsvh7c4YihuojAkvgl4+iBxPMwy5X09A== + dependencies: + fast-deep-equal "^3.1.1" + functional-red-black-tree "^1.0.1" + google-gax "^2.17.1" + protobufjs "^6.8.6" + +"@google-cloud/paginator@^3.0.0": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@google-cloud/paginator/-/paginator-3.0.5.tgz#9d6b96c421a89bd560c1bc2c197c7611ef21db6c" + integrity sha512-N4Uk4BT1YuskfRhKXBs0n9Lg2YTROZc6IMpkO/8DIHODtm5s3xY8K5vVBo23v/2XulY3azwITQlYWgT4GdLsUw== + dependencies: + arrify "^2.0.0" + extend "^3.0.2" + +"@google-cloud/projectify@^2.0.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@google-cloud/projectify/-/projectify-2.1.0.tgz#3df145c932e244cdeb87a30d93adce615bc69e6d" + integrity sha512-qbpidP/fOvQNz3nyabaVnZqcED1NNzf7qfeOlgtAZd9knTwY+KtsGRkYpiQzcATABy4gnGP2lousM3S0nuWVzA== + +"@google-cloud/promisify@^2.0.0": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@google-cloud/promisify/-/promisify-2.0.3.tgz#f934b5cdc939e3c7039ff62b9caaf59a9d89e3a8" + integrity sha512-d4VSA86eL/AFTe5xtyZX+ePUjE8dIFu2T8zmdeNBSa5/kNgXPCx/o/wbFNHAGLJdGnk1vddRuMESD9HbOC8irw== + +"@google-cloud/storage@^5.3.0": + version "5.13.0" + resolved "https://registry.yarnpkg.com/@google-cloud/storage/-/storage-5.13.0.tgz#f40cf085f807c8456acbd994aff01f65845ec9f5" + integrity sha512-LN3Cv7NRBbjwdwcrIFbEaKEEUCUr7aIoBa7j1HXeuBLjC1lQ5VGVGEbaLRP6uwgBKVnf5rFYSTA545C1GR+e/A== + dependencies: + "@google-cloud/common" "^3.7.0" + "@google-cloud/paginator" "^3.0.0" + "@google-cloud/promisify" "^2.0.0" + arrify "^2.0.0" + async-retry "^1.3.1" + compressible "^2.0.12" + date-and-time "^1.0.0" + duplexify "^4.0.0" + extend "^3.0.2" + gcs-resumable-upload "^3.3.0" + get-stream "^6.0.0" + hash-stream-validation "^0.2.2" + mime "^2.2.0" + mime-types "^2.0.8" + onetime "^5.1.0" + p-limit "^3.0.1" + pumpify "^2.0.0" + snakeize "^0.1.0" + stream-events "^1.0.1" + xdg-basedir "^4.0.0" + +"@grpc/grpc-js@~1.3.0": + version "1.3.7" + resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.3.7.tgz#58b687aff93b743aafde237fd2ee9a3259d7f2d8" + integrity sha512-CKQVuwuSPh40tgOkR7c0ZisxYRiN05PcKPW72mQL5y++qd7CwBRoaJZvU5xfXnCJDFBmS3qZGQ71Frx6Ofo2XA== + dependencies: + "@types/node" ">=12.12.47" + +"@grpc/proto-loader@^0.6.1": + version "0.6.4" + resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.6.4.tgz#5438c0d771e92274e77e631babdc14456441cbdc" + integrity sha512-7xvDvW/vJEcmLUltCUGOgWRPM8Oofv0eCFSVMuKqaqWJaXSzmB+m9hiyqe34QofAl4WAzIKUZZlinIF9FOHyTQ== + dependencies: + "@types/long" "^4.0.1" + lodash.camelcase "^4.3.0" + long "^4.0.0" + protobufjs "^6.10.0" + yargs "^16.1.1" + +"@humanwhocodes/config-array@^0.9.2": + version "0.9.3" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.3.tgz#f2564c744b387775b436418491f15fce6601f63e" + integrity sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.4" + +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@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": + 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@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.5.1.tgz#260fe7239602fe5130a94f1aa386eff54b014bba" + integrity sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg== + dependencies: + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^27.5.1" + jest-util "^27.5.1" + slash "^3.0.0" + +"@jest/core@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.5.1.tgz#267ac5f704e09dc52de2922cbf3af9edcd64b626" + integrity sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ== + dependencies: + "@jest/console" "^27.5.1" + "@jest/reporters" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + emittery "^0.8.1" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-changed-files "^27.5.1" + jest-config "^27.5.1" + jest-haste-map "^27.5.1" + jest-message-util "^27.5.1" + jest-regex-util "^27.5.1" + jest-resolve "^27.5.1" + jest-resolve-dependencies "^27.5.1" + jest-runner "^27.5.1" + jest-runtime "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" + jest-watcher "^27.5.1" + micromatch "^4.0.4" + rimraf "^3.0.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.5.1.tgz#d7425820511fe7158abbecc010140c3fd3be9c74" + integrity sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA== + dependencies: + "@jest/fake-timers" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + jest-mock "^27.5.1" + +"@jest/fake-timers@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.5.1.tgz#76979745ce0579c8a94a4678af7a748eda8ada74" + integrity sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ== + dependencies: + "@jest/types" "^27.5.1" + "@sinonjs/fake-timers" "^8.0.1" + "@types/node" "*" + jest-message-util "^27.5.1" + jest-mock "^27.5.1" + jest-util "^27.5.1" + +"@jest/globals@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.5.1.tgz#7ac06ce57ab966566c7963431cef458434601b2b" + integrity sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/types" "^27.5.1" + expect "^27.5.1" + +"@jest/reporters@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.5.1.tgz#ceda7be96170b03c923c37987b64015812ffec04" + integrity sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.2" + graceful-fs "^4.2.9" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^5.1.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.1.3" + jest-haste-map "^27.5.1" + jest-resolve "^27.5.1" + jest-util "^27.5.1" + jest-worker "^27.5.1" + slash "^3.0.0" + source-map "^0.6.0" + string-length "^4.0.1" + terminal-link "^2.0.0" + v8-to-istanbul "^8.1.0" + +"@jest/source-map@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.5.1.tgz#6608391e465add4205eae073b55e7f279e04e8cf" + integrity sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg== + dependencies: + callsites "^3.0.0" + graceful-fs "^4.2.9" + source-map "^0.6.0" + +"@jest/test-result@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.5.1.tgz#56a6585fa80f7cdab72b8c5fc2e871d03832f5bb" + integrity sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag== + dependencies: + "@jest/console" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz#4057e0e9cea4439e544c6353c6affe58d095745b" + integrity sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ== + dependencies: + "@jest/test-result" "^27.5.1" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-runtime "^27.5.1" + +"@jest/transform@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.5.1.tgz#6c3501dcc00c4c08915f292a600ece5ecfe1f409" + integrity sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw== + dependencies: + "@babel/core" "^7.1.0" + "@jest/types" "^27.5.1" + babel-plugin-istanbul "^6.1.1" + chalk "^4.0.0" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-regex-util "^27.5.1" + jest-util "^27.5.1" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + source-map "^0.6.1" + write-file-atomic "^3.0.0" + +"@jest/types@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" + integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^16.0.0" + chalk "^4.0.0" + +"@jridgewell/resolve-uri@^3.0.3": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz#68eb521368db76d040a6315cdb24bf2483037b9c" + integrity sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.11" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz#771a1d8d744eeb71b6adb35808e1a6c7b9b8c8ec" + integrity sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg== + +"@jridgewell/trace-mapping@^0.3.0": + version "0.3.4" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz#f6a0832dffd5b8a6aaa633b7d9f8e8e94c83a0c3" + integrity sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@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": + 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" + +"@panva/asn1.js@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@panva/asn1.js/-/asn1.js-1.0.0.tgz#dd55ae7b8129e02049f009408b97c61ccf9032f6" + integrity sha512-UdkG3mLEqXgnlKsWanWcgb6dOjUzJ+XC5f+aWw30qrtjxeNUSfKX1cd5FBzOaXQumoe9nIqeZUvrRJS03HCCtw== + +"@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 sha1-m4sMxmPWaafY9vXQiToU00jzD78= + +"@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 sha1-NVy8mLr61ZePntCV85diHx0Ga3A= + +"@protobufjs/fetch@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" + integrity sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU= + 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 sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E= + +"@protobufjs/inquire@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" + integrity sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik= + +"@protobufjs/path@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" + integrity sha1-bMKyDFya1q0NzP0hynZz2Nf79o0= + +"@protobufjs/pool@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" + integrity sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q= + +"@protobufjs/utf8@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" + integrity sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA= + +"@sapphire/async-queue@^1.1.9": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@sapphire/async-queue/-/async-queue-1.2.0.tgz#7a56afd318101d338433d7180ebd6af349243268" + integrity sha512-O5ND5Ljpef86X5oy8zXorQ754TMjWALcPSAgPBu4+76HLtDTrNoDyzU2uGE2G4A8Wv51u0MXHzGQ0WZ4GMtpIw== + +"@sapphire/decorators@^4.2.6": + version "4.2.6" + resolved "https://registry.yarnpkg.com/@sapphire/decorators/-/decorators-4.2.6.tgz#c576b3e328dfbbe52b682adf14d7ad643a5559d6" + integrity sha512-Z6pifh2yx0h6mdnKdMvcUUdhK8QvqpW4JkoTNVWcb8hPPM2LZt9dbQM+qHPRrRqMJF4jAgF0LMHGsunc8JLh2Q== + dependencies: + tslib "^2.3.1" + +"@sapphire/discord-utilities@^2.8.0": + version "2.8.0" + resolved "https://registry.yarnpkg.com/@sapphire/discord-utilities/-/discord-utilities-2.8.0.tgz#413cbfa53924a812401cfb840f70a16aa70217aa" + integrity sha512-ft/YqG534nLsF58ws6KqgikhSEQgtzPErGT8IlHuGL4/dsUvYJc7wp+gwwy7tftXG54ie+Sa/IabK7wBxRsdlQ== + dependencies: + twemoji-parser "^13.1.0" + +"@sapphire/discord-utilities@^2.9.0": + version "2.9.0" + resolved "https://registry.yarnpkg.com/@sapphire/discord-utilities/-/discord-utilities-2.9.0.tgz#e7ed82c2cd7850596efe043db2f9e848b52a0605" + integrity sha512-R0ZtWrHP/bInOPrq1EvaPvARKUDH6o9zVYg8wBfJGzwlJE9dcONoVv2aX9/q3SZcIZStFFJCIyuijYd2rJBMvg== + dependencies: + twemoji-parser "^13.1.0" + +"@sapphire/discord.js-utilities@^4.8.1": + version "4.8.2" + resolved "https://registry.yarnpkg.com/@sapphire/discord.js-utilities/-/discord.js-utilities-4.8.2.tgz#13226eecb710c8dce3ef4d2dc66a93fb1beae2be" + integrity sha512-VYr6IVd+lKsnYCxhY1pTxjCW+vLYFMcxw1PY0U5ryTyWkgA0FP06Ay1VRZVhl6bYIAOTudlnmzwmItGK0xfOUw== + dependencies: + "@sapphire/discord-utilities" "^2.9.0" + "@sapphire/time-utilities" "^1.6.0" + "@sapphire/utilities" "^3.3.0" + tslib "^2.3.1" + +"@sapphire/framework@^2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@sapphire/framework/-/framework-2.4.1.tgz#89a9b7fafa2fe08793ed809d7b8b193cfb34da30" + integrity sha512-AIrpLT/jA1m0EzPiJ4XXL1K2as+AflE2xjlXX0JCaRSTYnjW6xSRinSOIn7oVyV1zO3qHSIzzgue1nzoNL9yvQ== + dependencies: + "@sapphire/discord-utilities" "^2.8.0" + "@sapphire/discord.js-utilities" "^4.8.1" + "@sapphire/pieces" "^3.2.0" + "@sapphire/ratelimits" "^2.3.1" + "@sapphire/utilities" "^3.3.0" + lexure "^0.17.0" + tslib "^2.3.1" + +"@sapphire/pieces@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@sapphire/pieces/-/pieces-3.2.0.tgz#6ce871222d2686b95c12e04b62961897a29bf803" + integrity sha512-7V7R2ouluY5XBEN73cjwMuKI8O4RsSSH8VY6xzYxbMKBA+LAGo0nPTMZ/XzEgHDopIrbcYKJMVZHpjKHWhniKA== + dependencies: + "@discordjs/collection" "^0.3.2" + "@sapphire/utilities" "^3.1.0" + tslib "^2.3.1" + +"@sapphire/ratelimits@^2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@sapphire/ratelimits/-/ratelimits-2.3.1.tgz#5ed5d1cbf722434c6ff11ba501793424a934f07f" + integrity sha512-zA57XI0s9AYVqiAKmNwy+lHzBvtcW72hZcXUAVr98cicfhChcHDdk/LZ1s1TP9eKRlYFQC0dynTNh+BTGKyJTQ== + dependencies: + "@sapphire/time-utilities" "^1.6.0" + +"@sapphire/time-utilities@^1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@sapphire/time-utilities/-/time-utilities-1.6.0.tgz#89624a63861814bd41fe29db80c9dbe9f3625760" + integrity sha512-GKS3LdHS7Bec+FUx9cZY88edebK9vdt5rm0VCgc8s17O/WHl5KFcuyXRlWyIF7TLlYe1vBmMIl5YBE1EjHvJBA== + dependencies: + "@sapphire/utilities" "^3.3.0" + +"@sapphire/utilities@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@sapphire/utilities/-/utilities-3.1.0.tgz#50f18c8ae10535c4fde6b2c68c2a45262c45756f" + integrity sha512-Vwsd567hZ1LPDh791r4DHwxlO1EzUefjYhNj+kwbliHWK2TVPhMvF5v1eZKtUCgdBmobqa8CBPwCwymHstuj5w== + +"@sapphire/utilities@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@sapphire/utilities/-/utilities-3.3.0.tgz#62ff0a52cd86bd6169a94b2f217d72da6772a3cd" + integrity sha512-wWESfB03elALhci3GjcacRh8pnK89Qe5AEKCQplKyTCKabWl64SAFw52hQBth2fMmJStgK1fr87aGhRZAB8DNA== + +"@sindresorhus/is@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.2.0.tgz#667bfc6186ae7c9e0b45a08960c551437176e1ca" + integrity sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw== + +"@sinonjs/commons@^1.7.0": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" + integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^8.0.1": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz#3fdc2b6cb58935b21bfb8d1625eb1300484316e7" + integrity sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg== + dependencies: + "@sinonjs/commons" "^1.7.0" + +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": + version "7.1.18" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.18.tgz#1a29abcc411a9c05e2094c98f9a1b7da6cdf49f8" + integrity sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.4" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" + integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" + integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.14.2.tgz#ffcd470bbb3f8bf30481678fb5502278ca833a43" + integrity sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA== + dependencies: + "@babel/types" "^7.3.0" + +"@types/body-parser@*": + version "1.19.1" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.1.tgz#0c0174c42a7d017b818303d4b5d969cb0b75929c" + integrity sha512-a6bTJ21vFOGIkwM0kzh9Yr89ziVxq4vYH2fQ6N8AeipEzai/cFK6aGMArIkUeIdRIgpwQa+2bXiLuUJCpSf2Cg== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/connect@*": + version "3.4.35" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" + integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== + dependencies: + "@types/node" "*" + +"@types/express-jwt@0.0.42": + version "0.0.42" + resolved "https://registry.yarnpkg.com/@types/express-jwt/-/express-jwt-0.0.42.tgz#4f04e1fadf9d18725950dc041808a4a4adf7f5ae" + integrity sha512-WszgUddvM1t5dPpJ3LhWNH8kfNN8GPIBrAGxgIYXVCEGx6Bx4A036aAuf/r5WH9DIEdlmp7gHOYvSM6U87B0ag== + dependencies: + "@types/express" "*" + "@types/express-unless" "*" + +"@types/express-serve-static-core@^4.17.18": + version "4.17.24" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.24.tgz#ea41f93bf7e0d59cd5a76665068ed6aab6815c07" + integrity sha512-3UJuW+Qxhzwjq3xhwXm2onQcFHn76frIYVbTu+kn24LFxI+dEhdfISDFovPB8VpEgW8oQCTpRuCe+0zJxB7NEA== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + +"@types/express-unless@*": + version "0.5.2" + resolved "https://registry.yarnpkg.com/@types/express-unless/-/express-unless-0.5.2.tgz#07e29883d280778588644b03563d8796f870f20e" + integrity sha512-Q74UyYRX/zIgl1HSp9tUX2PlG8glkVm+59r7aK4KGKzC5jqKIOX6rrVLRQrzpZUQ84VukHtRoeAuon2nIssHPQ== + dependencies: + "@types/express" "*" + +"@types/express@*": + version "4.17.13" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.13.tgz#a76e2995728999bab51a33fabce1d705a3709034" + integrity sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.18" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/graceful-fs@^4.1.2": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" + integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== + dependencies: + "@types/node" "*" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" + integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" + integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/jest@^27.4.1": + version "27.4.1" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-27.4.1.tgz#185cbe2926eaaf9662d340cc02e548ce9e11ab6d" + integrity sha512-23iPJADSmicDVrWk+HT58LMJtzLAnB2AgIzplQuq/bSrGaxCrlvRFjGbXmamnnk/mAmCdLStiGqggu28ocUyiw== + dependencies: + jest-matcher-utils "^27.0.0" + pretty-format "^27.0.0" + +"@types/json-schema@^7.0.9": + version "7.0.9" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" + integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== + +"@types/long@^4.0.0", "@types/long@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.1.tgz#459c65fa1867dafe6a8f322c4c51695663cc55e9" + integrity sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w== + +"@types/mime@^1": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" + integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== + +"@types/minimist@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" + integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== + +"@types/node-fetch@^2.5.12": + version "2.5.12" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.12.tgz#8a6f779b1d4e60b7a57fb6fd48d84fb545b9cc66" + integrity sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw== + dependencies: + "@types/node" "*" + form-data "^3.0.0" + +"@types/node@*", "@types/node@>=12.12.47", "@types/node@>=13.7.0": + version "16.6.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.6.1.tgz#aee62c7b966f55fc66c7b6dfa1d58db2a616da61" + integrity sha512-Sr7BhXEAer9xyGuCN3Ek9eg9xPviCF2gfu9kTfuU2HkTVAMYSDeX40fvpmo72n5nansg3nsBjuQBrsS28r+NUw== + +"@types/node@^17.0.21": + version "17.0.21" + resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.21.tgz#864b987c0c68d07b4345845c3e63b75edd143644" + integrity sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ== + +"@types/normalize-package-data@^2.4.0": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" + integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== + +"@types/prettier@^2.1.5": + version "2.4.4" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.4.tgz#5d9b63132df54d8909fce1c3f8ca260fdd693e17" + integrity sha512-ReVR2rLTV1kvtlWFyuot+d1pkpG2Fw/XKE3PDAdj57rbM97ttSp9JZ2UsP+2EHTylra9cUf6JA7tGwW1INzUrA== + +"@types/qs@*": + version "6.9.7" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" + integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + +"@types/range-parser@*": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" + integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== + +"@types/serve-static@*": + version "1.13.10" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.10.tgz#f5e0ce8797d2d7cc5ebeda48a52c96c4fa47a8d9" + integrity sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + +"@types/stack-utils@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" + integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + +"@types/string-similarity@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/string-similarity/-/string-similarity-4.0.0.tgz#8cc03d5d1baad2b74530fe6c7d849d5768d391ad" + integrity sha512-dMS4S07fbtY1AILG/RhuwmptmzK1Ql8scmAebOTJ/8iBtK/KI17NwGwKzu1uipjj8Kk+3mfPxum56kKZE93mzQ== + +"@types/ws@^8.2.2": + version "8.2.2" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.2.2.tgz#7c5be4decb19500ae6b3d563043cd407bf366c21" + integrity sha512-NOn5eIcgWLOo6qW8AcuLZ7G8PycXu0xTxxkS6Q18VWFxgPUSOwV0pBj2a/4viNZVu25i7RIB7GttdkAIUUXOOg== + dependencies: + "@types/node" "*" + +"@types/yargs-parser@*": + version "21.0.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" + integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== + +"@types/yargs@^16.0.0": + version "16.0.4" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.4.tgz#26aad98dd2c2a38e421086ea9ad42b9e51642977" + integrity sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw== + dependencies: + "@types/yargs-parser" "*" + +"@typescript-eslint/eslint-plugin@^5.13.0": + version "5.13.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.13.0.tgz#2809052b85911ced9c54a60dac10e515e9114497" + integrity sha512-vLktb2Uec81fxm/cfz2Hd6QaWOs8qdmVAZXLdOBX6JFJDhf6oDZpMzZ4/LZ6SFM/5DgDcxIMIvy3F+O9yZBuiQ== + dependencies: + "@typescript-eslint/scope-manager" "5.13.0" + "@typescript-eslint/type-utils" "5.13.0" + "@typescript-eslint/utils" "5.13.0" + debug "^4.3.2" + functional-red-black-tree "^1.0.1" + ignore "^5.1.8" + regexpp "^3.2.0" + semver "^7.3.5" + tsutils "^3.21.0" + +"@typescript-eslint/parser@^5.13.0": + version "5.13.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.13.0.tgz#0394ed8f2f849273c0bf4b811994d177112ced5c" + integrity sha512-GdrU4GvBE29tm2RqWOM0P5QfCtgCyN4hXICj/X9ibKED16136l9ZpoJvCL5pSKtmJzA+NRDzQ312wWMejCVVfg== + dependencies: + "@typescript-eslint/scope-manager" "5.13.0" + "@typescript-eslint/types" "5.13.0" + "@typescript-eslint/typescript-estree" "5.13.0" + debug "^4.3.2" + +"@typescript-eslint/scope-manager@5.13.0": + version "5.13.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.13.0.tgz#cf6aff61ca497cb19f0397eea8444a58f46156b6" + integrity sha512-T4N8UvKYDSfVYdmJq7g2IPJYCRzwtp74KyDZytkR4OL3NRupvswvmJQJ4CX5tDSurW2cvCc1Ia1qM7d0jpa7IA== + dependencies: + "@typescript-eslint/types" "5.13.0" + "@typescript-eslint/visitor-keys" "5.13.0" + +"@typescript-eslint/type-utils@5.13.0": + version "5.13.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.13.0.tgz#b0efd45c85b7bab1125c97b752cab3a86c7b615d" + integrity sha512-/nz7qFizaBM1SuqAKb7GLkcNn2buRdDgZraXlkhz+vUGiN1NZ9LzkA595tHHeduAiS2MsHqMNhE2zNzGdw43Yg== + dependencies: + "@typescript-eslint/utils" "5.13.0" + debug "^4.3.2" + tsutils "^3.21.0" + +"@typescript-eslint/types@5.13.0": + version "5.13.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.13.0.tgz#da1de4ae905b1b9ff682cab0bed6b2e3be9c04e5" + integrity sha512-LmE/KO6DUy0nFY/OoQU0XelnmDt+V8lPQhh8MOVa7Y5k2gGRd6U9Kp3wAjhB4OHg57tUO0nOnwYQhRRyEAyOyg== + +"@typescript-eslint/typescript-estree@5.13.0": + version "5.13.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.13.0.tgz#b37c07b748ff030a3e93d87c842714e020b78141" + integrity sha512-Q9cQow0DeLjnp5DuEDjLZ6JIkwGx3oYZe+BfcNuw/POhtpcxMTy18Icl6BJqTSd+3ftsrfuVb7mNHRZf7xiaNA== + dependencies: + "@typescript-eslint/types" "5.13.0" + "@typescript-eslint/visitor-keys" "5.13.0" + debug "^4.3.2" + globby "^11.0.4" + is-glob "^4.0.3" + semver "^7.3.5" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.13.0": + version "5.13.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.13.0.tgz#2328feca700eb02837298339a2e49c46b41bd0af" + integrity sha512-+9oHlPWYNl6AwwoEt5TQryEHwiKRVjz7Vk6kaBeD3/kwHE5YqTGHtm/JZY8Bo9ITOeKutFaXnBlMgSATMJALUQ== + dependencies: + "@types/json-schema" "^7.0.9" + "@typescript-eslint/scope-manager" "5.13.0" + "@typescript-eslint/types" "5.13.0" + "@typescript-eslint/typescript-estree" "5.13.0" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + +"@typescript-eslint/visitor-keys@5.13.0": + version "5.13.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.13.0.tgz#f45ff55bcce16403b221ac9240fbeeae4764f0fd" + integrity sha512-HLKEAS/qA1V7d9EzcpLFykTePmOQqOFim8oCvhY3pZgQ8Hi38hYpHd9e5GN6nQBFQNecNhws5wkS9Y5XIO0s/g== + dependencies: + "@typescript-eslint/types" "5.13.0" + eslint-visitor-keys "^3.0.0" + +abab@^2.0.3, abab@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" + integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== + +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + +acorn-globals@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" + integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== + dependencies: + acorn "^7.1.1" + acorn-walk "^7.1.1" + +acorn-jsx@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn-walk@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== + +acorn@^7.1.1: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + +acorn@^8.2.4, acorn@^8.7.0: + version "8.7.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" + integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== + +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +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.10.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: + 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.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + +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-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== + +anymatch@^3.0.3: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +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-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== + +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= + +arrify@^2.0.0, arrify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" + integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== + +async-retry@^1.3.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.3.3.tgz#0e7f36c04d8478e7a58bdbed80cedf977785f280" + integrity sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw== + dependencies: + retry "0.13.1" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +babel-jest@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.5.1.tgz#a1bf8d61928edfefd21da27eb86a695bfd691444" + integrity sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg== + dependencies: + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^27.5.1" + 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@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz#9be98ecf28c331eb9f5df9c72d6f89deb8181c2e" + integrity sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.0.0" + "@types/babel__traverse" "^7.0.6" + +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@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz#91f10f58034cb7989cb4f962b69fa6eef6a6bc81" + integrity sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag== + dependencies: + babel-plugin-jest-hoist "^27.5.1" + babel-preset-current-node-syntax "^1.0.0" + +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== + +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== + +bignumber.js@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.1.tgz#8d7ba124c882bfd8e43260c67475518d0689e4e5" + integrity sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA== + +boolbase@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + +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.1: + 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" + +browser-process-hrtime@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== + +browserslist@^4.17.5: + version "4.19.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.19.3.tgz#29b7caad327ecf2859485f696f9604214bedd383" + integrity sha512-XK3X4xtKJ+Txj8G5c30B4gsm71s69lqXlkYui4s6EkKxuv49qjYlY6oVd+IFJ73d4YymtM3+djvvt/R/iJwwDg== + dependencies: + caniuse-lite "^1.0.30001312" + electron-to-chromium "^1.4.71" + escalade "^3.1.1" + node-releases "^2.0.2" + picocolors "^1.0.0" + +bs-logger@0.x: + version "0.2.6" + resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" + integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== + dependencies: + fast-json-stable-stringify "2.x" + +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-equal-constant-time@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" + integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= + +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== + +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-keys@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-7.0.2.tgz#d048d8c69448745bb0de6fc4c1c52a30dfbe7252" + integrity sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg== + dependencies: + camelcase "^6.3.0" + map-obj "^4.1.0" + quick-lru "^5.1.1" + type-fest "^1.2.1" + +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, camelcase@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-lite@^1.0.30001312: + version "1.0.30001312" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz#e11eba4b87e24d22697dae05455d5aea28550d5f" + integrity sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ== + +chalk@^2.0.0: + 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.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.3.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.0.tgz#b4ed1fb6818dea4803a55c623041f9165d2066b2" + integrity sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw== + +cjs-module-lexer@^1.0.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" + integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== + +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== + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + 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 sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= + +collect-v8-coverage@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" + integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== + +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 sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +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.16" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da" + integrity sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g== + +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" + +compressible@^2.0.12: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +configstore@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" + integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== + dependencies: + dot-prop "^5.2.0" + graceful-fs "^4.1.2" + make-dir "^3.0.0" + unique-string "^2.0.0" + write-file-atomic "^3.0.0" + xdg-basedir "^4.0.0" + +convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== + dependencies: + safe-buffer "~5.1.1" + +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-random-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" + integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== + +css-select@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.1.3.tgz#a70440f70317f2669118ad74ff105e65849c7067" + integrity sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA== + dependencies: + boolbase "^1.0.0" + css-what "^5.0.0" + domhandler "^4.2.0" + domutils "^2.6.0" + nth-check "^2.0.0" + +css-what@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-5.1.0.tgz#3f7b707aadf633baf62c2ceb8579b545bb40f7fe" + integrity sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw== + +cssom@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" + integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== + +cssom@~0.3.6: + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + +cssstyle@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" + integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== + dependencies: + cssom "~0.3.6" + +data-urls@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" + integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== + dependencies: + abab "^2.0.3" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" + +date-and-time@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/date-and-time/-/date-and-time-1.0.1.tgz#4959b7faf1ec5873e59d926d4528b9223a808a57" + integrity sha512-7u+uNfnjWkX+YFQfivvW24TjaJG6ahvTrfw1auq7KlC7osuGcZBIWGBvB9UcENjH6JnLVhMqlRripk1dSHjAUA== + +debug@4, debug@^4.1.1, debug@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" + integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== + dependencies: + ms "2.1.2" + +debug@^4.1.0: + version "4.3.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" + integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== + dependencies: + ms "2.1.2" + +decamelize-keys@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" + integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= + dependencies: + decamelize "^1.1.0" + map-obj "^1.0.0" + +decamelize@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decamelize@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-5.0.1.tgz#db11a92e58c741ef339fb0a2868d8a06a9a7b1e9" + integrity sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA== + +decimal.js@^10.2.1: + version "10.3.1" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" + integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== + +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= + +deep-is@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +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.2.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + +del-cli@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/del-cli/-/del-cli-4.0.1.tgz#2303ccaa45708ee8c6211568344cf87336abf30a" + integrity sha512-KtR/6cBfZkGDAP2NA7z+bP4p1OMob3wjN9mq13+SWvExx6jT9gFWfLgXEeX8J2B47OKeNCq9yTONmtryQ+m+6g== + dependencies: + del "^6.0.0" + meow "^10.1.0" + +del@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/del/-/del-6.0.0.tgz#0b40d0332cea743f1614f818be4feb717714c952" + integrity sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ== + dependencies: + globby "^11.0.1" + graceful-fs "^4.2.4" + is-glob "^4.0.1" + is-path-cwd "^2.2.0" + is-path-inside "^3.0.2" + p-map "^4.0.0" + rimraf "^3.0.2" + slash "^3.0.0" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +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== + +dicer@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.3.0.tgz#eacd98b3bfbf92e8ab5c2fdb71aaac44bb06b872" + integrity sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA== + dependencies: + streamsearch "0.1.2" + +diff-sequences@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" + integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== + +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" + +discord-api-types@^0.26.0: + version "0.26.1" + resolved "https://registry.yarnpkg.com/discord-api-types/-/discord-api-types-0.26.1.tgz#726f766ddc37d60da95740991d22cb6ef2ed787b" + integrity sha512-T5PdMQ+Y1MEECYMV5wmyi9VEYPagEDEi4S0amgsszpWY0VB9JJ/hEvM6BgLhbdnKky4gfmZEXtEEtojN8ZKJQQ== + +discord.js@^13.6.0: + version "13.6.0" + resolved "https://registry.yarnpkg.com/discord.js/-/discord.js-13.6.0.tgz#d8a8a591dbf25cbcf9c783d5ddf22c4694860475" + integrity sha512-tXNR8zgsEPxPBvGk3AQjJ9ljIIC6/LOPjzKwpwz8Y1Q2X66Vi3ZqFgRHYwnHKC0jC0F+l4LzxlhmOJsBZDNg9g== + dependencies: + "@discordjs/builders" "^0.11.0" + "@discordjs/collection" "^0.4.0" + "@sapphire/async-queue" "^1.1.9" + "@types/node-fetch" "^2.5.12" + "@types/ws" "^8.2.2" + discord-api-types "^0.26.0" + form-data "^4.0.0" + node-fetch "^2.6.1" + ws "^8.4.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" + +dom-converter@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== + dependencies: + utila "~0.4" + +dom-serializer@^1.0.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.3.2.tgz#6206437d32ceefaec7161803230c7a20bc1b4d91" + integrity sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.0" + entities "^2.0.0" + +domelementtype@^2.0.1, domelementtype@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" + integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== + +domexception@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" + integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== + dependencies: + webidl-conversions "^5.0.0" + +domhandler@^4.0.0, domhandler@^4.2.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.2.2.tgz#e825d721d19a86b8c201a35264e226c678ee755f" + integrity sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w== + dependencies: + domelementtype "^2.2.0" + +domutils@^2.5.2, domutils@^2.6.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + +dot-prop@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + +dotenv@^16.0.0: + version "16.0.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.0.tgz#c619001253be89ebb638d027b609c75c26e47411" + integrity sha512-qD9WU0MPM4SWLPJy/r2Be+2WgQj8plChsyrCNQzW/0WjvcJQiKQJ9mH3ZgB3fxbUUxgc/11ZJ0Fi5KiimWGz2Q== + +duplexify@^4.0.0, duplexify@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.2.tgz#18b4f8d28289132fa0b9573c898d9f903f81c7b0" + integrity sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw== + dependencies: + end-of-stream "^1.4.1" + inherits "^2.0.3" + readable-stream "^3.1.1" + stream-shift "^1.0.0" + +ecdsa-sig-formatter@1.0.11, ecdsa-sig-formatter@^1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" + integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== + dependencies: + safe-buffer "^5.0.1" + +electron-to-chromium@^1.4.71: + version "1.4.75" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.75.tgz#d1ad9bb46f2f1bf432118c2be21d27ffeae82fdd" + integrity sha512-LxgUNeu3BVU7sXaKjUDD9xivocQLxFtq6wgERrutdY/yIOps3ODOZExK1jg8DTEg4U8TUCb5MLGeWFOYuxjF3Q== + +emittery@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860" + integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== + +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== + +end-of-stream@^1.1.0, end-of-stream@^1.4.1: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +ent@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" + integrity sha1-6WQhkyWiHQX0RGai9obtbOX13R0= + +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + +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" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +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 sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +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== + +escodegen@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" + integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== + dependencies: + esprima "^4.0.1" + estraverse "^5.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +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.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint-visitor-keys@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz#e32e99c6cdc2eb063f204eda5db67bfe58bb4186" + integrity sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q== + +eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + +eslint@^8.10.0: + version "8.10.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.10.0.tgz#931be395eb60f900c01658b278e05b6dae47199d" + integrity sha512-tcI1D9lfVec+R4LE1mNDnzoJ/f71Kl/9Cv4nG47jOueCMBrCCKYXr4AUVS7go6mWYGFD4+EoN6+eXSrEbRzXVw== + dependencies: + "@eslint/eslintrc" "^1.2.0" + "@humanwhocodes/config-array" "^0.9.2" + ajv "^6.10.0" + 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.1.1" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.3.0" + espree "^9.3.1" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^6.0.1" + globals "^13.6.0" + ignore "^5.2.0" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + regexpp "^3.2.0" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^9.3.1: + version "9.3.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.1.tgz#8793b4bc27ea4c778c19908e0719e7b8f4115bcd" + integrity sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ== + dependencies: + acorn "^8.7.0" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^3.3.0" + +esprima@^4.0.0, esprima@^4.0.1: + 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.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + 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.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + +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== + +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + +execa@^5.0.0: + 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 sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= + +expect@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/expect/-/expect-27.5.1.tgz#83ce59f1e5bdf5f9d2b94b61d2050db48f3fef74" + integrity sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw== + dependencies: + "@jest/types" "^27.5.1" + jest-get-type "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + +extend@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +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-glob@^3.1.1: + version "3.2.7" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" + integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== + 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-glob@^3.2.9: + version "3.2.11" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" + integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== + 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.x, fast-json-stable-stringify@^2.0.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, fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +fast-text-encoding@^1.0.0, fast-text-encoding@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz#ec02ac8e01ab8a319af182dae2681213cfe9ce53" + integrity sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig== + +fastq@^1.6.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + dependencies: + reusify "^1.0.4" + +faye-websocket@0.11.4: + version "0.11.4" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" + integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== + dependencies: + websocket-driver ">=0.5.1" + +fb-watchman@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" + integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== + 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" + +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" + +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" + +firebase-admin@^10.0.2: + version "10.0.2" + resolved "https://registry.yarnpkg.com/firebase-admin/-/firebase-admin-10.0.2.tgz#d1142fb40738fa9b62f6625c4e3fc8cbc0ba61c6" + integrity sha512-MLH0SPmC4L0aCHvPjs1KThraru/T84T3hxiPY3uCH7NZEgE/T5n4GwecwU3RcM3X+br75BIBY7qhaR5uCxhdXA== + dependencies: + "@firebase/database-compat" "^0.1.1" + "@firebase/database-types" "^0.9.3" + "@types/node" ">=12.12.47" + dicer "^0.3.0" + jsonwebtoken "^8.5.1" + jwks-rsa "^2.0.2" + node-forge "^1.0.0" + optionalDependencies: + "@google-cloud/firestore" "^4.5.0" + "@google-cloud/storage" "^5.3.0" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.2.tgz#64bfed5cb68fe3ca78b3eb214ad97b63bedce561" + integrity sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA== + +form-data@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" + integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +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" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + +gaxios@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-4.3.0.tgz#ad4814d89061f85b97ef52aed888c5dbec32f774" + integrity sha512-pHplNbslpwCLMyII/lHPWFQbJWOX0B3R1hwBEOvzYi1GmdKZruuEHK4N9V6f7tf1EaPYyF80mui1+344p6SmLg== + dependencies: + abort-controller "^3.0.0" + extend "^3.0.2" + https-proxy-agent "^5.0.0" + is-stream "^2.0.0" + node-fetch "^2.3.0" + +gcp-metadata@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-4.3.0.tgz#0423d06becdbfb9cbb8762eaacf14d5324997900" + integrity sha512-L9XQUpvKJCM76YRSmcxrR4mFPzPGsgZUH+GgHMxAET8qc6+BhRJq63RLhWakgEO2KKVgeSDVfyiNjkGSADwNTA== + dependencies: + gaxios "^4.0.0" + json-bigint "^1.0.0" + +gcs-resumable-upload@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/gcs-resumable-upload/-/gcs-resumable-upload-3.3.0.tgz#d1a866173f9b47e045d4406cafaa658dbb01e624" + integrity sha512-MQKWi+9hOSTyg5/SI1NBW4gAjL1wlkoevHefvr1PCBBXH4uKYLsug5qRrcotWKolDPLfWS51cWaHRN0CTtQNZw== + dependencies: + abort-controller "^3.0.0" + configstore "^5.0.0" + extend "^3.0.2" + gaxios "^4.0.0" + google-auth-library "^7.0.0" + pumpify "^2.0.0" + stream-events "^1.0.4" + +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.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-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.1: + 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.2, glob@^7.1.4: + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.3: + version "7.1.7" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + 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.6.0, globals@^13.9.0: + version "13.11.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.11.0.tgz#40ef678da117fe7bd2e28f1fab24951bd0255be7" + integrity sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g== + dependencies: + type-fest "^0.20.2" + +globby@^11.0.1: + 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" + +globby@^11.0.4: + version "11.0.4" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" + integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.1.1" + ignore "^5.1.4" + merge2 "^1.3.0" + slash "^3.0.0" + +google-auth-library@^7.0.0, google-auth-library@^7.0.2, google-auth-library@^7.6.1: + version "7.6.2" + resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-7.6.2.tgz#8654985dbd06d8519f09c9c2318c4092f289a501" + integrity sha512-yvEnwVsvgH8RXTtpf6e84e7dqIdUEKJhmQvTJwzYP+RDdHjLrDp9sk2u2ZNDJPLKZ7DJicx/+AStcQspJiq+Qw== + dependencies: + arrify "^2.0.0" + base64-js "^1.3.0" + ecdsa-sig-formatter "^1.0.11" + fast-text-encoding "^1.0.0" + gaxios "^4.0.0" + gcp-metadata "^4.2.0" + gtoken "^5.0.4" + jws "^4.0.0" + lru-cache "^6.0.0" + +google-gax@^2.17.1: + version "2.24.1" + resolved "https://registry.yarnpkg.com/google-gax/-/google-gax-2.24.1.tgz#470480ab4968c4ca224ba3ebb9e5f6fefc5d4531" + integrity sha512-/oBk3S2jKZO5e85Dnqe0Zo3iAkQuMhy3BfczU6LoLxsoY99E/8EmOPiT7gHxb5KWZzghjo5HyITExLiuIjJ+0A== + dependencies: + "@grpc/grpc-js" "~1.3.0" + "@grpc/proto-loader" "^0.6.1" + "@types/long" "^4.0.0" + abort-controller "^3.0.0" + duplexify "^4.0.0" + fast-text-encoding "^1.0.3" + google-auth-library "^7.6.1" + is-stream-ended "^0.1.4" + node-fetch "^2.6.1" + object-hash "^2.1.1" + proto3-json-serializer "^0.1.1" + protobufjs "6.11.2" + retry-request "^4.0.0" + +google-p12-pem@^3.0.3: + version "3.1.2" + resolved "https://registry.yarnpkg.com/google-p12-pem/-/google-p12-pem-3.1.2.tgz#c3d61c2da8e10843ff830fdb0d2059046238c1d4" + integrity sha512-tjf3IQIt7tWCDsa0ofDQ1qqSCNzahXDxdAGJDbruWqu3eCg5CKLYKN+hi0s6lfvzYZ1GDVr+oDF9OOWlDSdf0A== + dependencies: + node-forge "^0.10.0" + +graceful-fs@^4.1.2: + version "4.2.8" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" + integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== + +graceful-fs@^4.2.4, graceful-fs@^4.2.9: + version "4.2.9" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" + integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== + +gtoken@^5.0.4: + version "5.3.1" + resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-5.3.1.tgz#c1c2598a826f2b5df7c6bb53d7be6cf6d50c3c78" + integrity sha512-yqOREjzLHcbzz1UrQoxhBtpk8KjrVhuqPE7od1K2uhyxG2BHjKZetlbLw/SPZak/QqTIQW+addS+EcjqQsZbwQ== + dependencies: + gaxios "^4.0.0" + google-p12-pem "^3.0.3" + jws "^4.0.0" + +hard-rejection@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" + integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +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@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hash-stream-validation@^0.2.2: + version "0.2.4" + resolved "https://registry.yarnpkg.com/hash-stream-validation/-/hash-stream-validation-0.2.4.tgz#ee68b41bf822f7f44db1142ec28ba9ee7ccb7512" + integrity sha512-Gjzu0Xn7IagXVkSu9cSFuK1fqzwtLwFhNhVL8IFJijRNMgUttFbBSIAzKuSIrsFMO1+g1RlsoN49zPIbwPDMGQ== + +hosted-git-info@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" + integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== + dependencies: + lru-cache "^6.0.0" + +html-encoding-sniffer@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" + integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== + dependencies: + whatwg-encoding "^1.0.5" + +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== + +htmlparser2@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.0.0" + domutils "^2.5.2" + entities "^2.0.0" + +http-parser-js@>=0.5.1: + version "0.5.3" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.3.tgz#01d2709c79d41698bb01d4decc5e9da4e4a033d9" + integrity sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg== + +http-proxy-agent@^4.0.0, http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + +https-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" + integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== + dependencies: + agent-base "6" + debug "4" + +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@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +ignore@^5.1.4, ignore@^5.1.8: + version "5.1.9" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.9.tgz#9ec1a5cbe8e1446ec60d4420060d43aa6e7382fb" + integrity sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ== + +ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + +import-fresh@^3.0.0, 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 sha1-khi5srkoojixPcT7a21XbyMUU+o= + +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== + +indent-string@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-5.0.0.tgz#4fd2980fccaf8622d14c64d694f4cf33c81951a5" + integrity sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-core-module@^2.5.0, is-core-module@^2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" + integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== + dependencies: + has "^1.0.3" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +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-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: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +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-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-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-path-cwd@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + +is-path-inside@^3.0.2: + 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-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + +is-potential-custom-element-name@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== + +is-stream-ended@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-stream-ended/-/is-stream-ended-0.1.4.tgz#f50224e95e06bce0e356d440a4827cd35b267eda" + integrity sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw== + +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== + +is-typedarray@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" + integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + +istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz#7b49198b657b27a730b8e9cb601f1e1bff24c59a" + integrity sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q== + 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-report@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^3.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.4" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.4.tgz#1b6f068ecbc6c331040aab5741991273e609e40c" + integrity sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jest-changed-files@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.5.1.tgz#a348aed00ec9bf671cc58a66fcbe7c3dfd6a68f5" + integrity sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw== + dependencies: + "@jest/types" "^27.5.1" + execa "^5.0.0" + throat "^6.0.1" + +jest-circus@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.5.1.tgz#37a5a4459b7bf4406e53d637b49d22c65d125ecc" + integrity sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^0.7.0" + expect "^27.5.1" + is-generator-fn "^2.0.0" + jest-each "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + jest-runtime "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + pretty-format "^27.5.1" + slash "^3.0.0" + stack-utils "^2.0.3" + throat "^6.0.1" + +jest-cli@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.5.1.tgz#278794a6e6458ea8029547e6c6cbf673bd30b145" + integrity sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw== + dependencies: + "@jest/core" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + import-local "^3.0.2" + jest-config "^27.5.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" + prompts "^2.0.1" + yargs "^16.2.0" + +jest-config@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.5.1.tgz#5c387de33dca3f99ad6357ddeccd91bf3a0e4a41" + integrity sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA== + dependencies: + "@babel/core" "^7.8.0" + "@jest/test-sequencer" "^27.5.1" + "@jest/types" "^27.5.1" + babel-jest "^27.5.1" + chalk "^4.0.0" + ci-info "^3.2.0" + deepmerge "^4.2.2" + glob "^7.1.1" + graceful-fs "^4.2.9" + jest-circus "^27.5.1" + jest-environment-jsdom "^27.5.1" + jest-environment-node "^27.5.1" + jest-get-type "^27.5.1" + jest-jasmine2 "^27.5.1" + jest-regex-util "^27.5.1" + jest-resolve "^27.5.1" + jest-runner "^27.5.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" + micromatch "^4.0.4" + parse-json "^5.2.0" + pretty-format "^27.5.1" + slash "^3.0.0" + strip-json-comments "^3.1.1" + +jest-diff@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def" + integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw== + dependencies: + chalk "^4.0.0" + diff-sequences "^27.5.1" + jest-get-type "^27.5.1" + pretty-format "^27.5.1" + +jest-docblock@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.5.1.tgz#14092f364a42c6108d42c33c8cf30e058e25f6c0" + integrity sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ== + dependencies: + detect-newline "^3.0.0" + +jest-each@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.5.1.tgz#5bc87016f45ed9507fed6e4702a5b468a5b2c44e" + integrity sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ== + dependencies: + "@jest/types" "^27.5.1" + chalk "^4.0.0" + jest-get-type "^27.5.1" + jest-util "^27.5.1" + pretty-format "^27.5.1" + +jest-environment-jsdom@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz#ea9ccd1fc610209655a77898f86b2b559516a546" + integrity sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/fake-timers" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + jest-mock "^27.5.1" + jest-util "^27.5.1" + jsdom "^16.6.0" + +jest-environment-node@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.5.1.tgz#dedc2cfe52fab6b8f5714b4808aefa85357a365e" + integrity sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/fake-timers" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + jest-mock "^27.5.1" + jest-util "^27.5.1" + +jest-get-type@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1" + integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== + +jest-haste-map@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.5.1.tgz#9fd8bd7e7b4fa502d9c6164c5640512b4e811e7f" + integrity sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng== + dependencies: + "@jest/types" "^27.5.1" + "@types/graceful-fs" "^4.1.2" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^27.5.1" + jest-serializer "^27.5.1" + jest-util "^27.5.1" + jest-worker "^27.5.1" + micromatch "^4.0.4" + walker "^1.0.7" + optionalDependencies: + fsevents "^2.3.2" + +jest-jasmine2@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz#a037b0034ef49a9f3d71c4375a796f3b230d1ac4" + integrity sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/source-map" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + expect "^27.5.1" + is-generator-fn "^2.0.0" + jest-each "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + jest-runtime "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + pretty-format "^27.5.1" + throat "^6.0.1" + +jest-leak-detector@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz#6ec9d54c3579dd6e3e66d70e3498adf80fde3fb8" + integrity sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ== + dependencies: + jest-get-type "^27.5.1" + pretty-format "^27.5.1" + +jest-matcher-utils@^27.0.0, jest-matcher-utils@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab" + integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw== + dependencies: + chalk "^4.0.0" + jest-diff "^27.5.1" + jest-get-type "^27.5.1" + pretty-format "^27.5.1" + +jest-message-util@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.5.1.tgz#bdda72806da10d9ed6425e12afff38cd1458b6cf" + integrity sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^27.5.1" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^27.5.1" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-mock@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.5.1.tgz#19948336d49ef4d9c52021d34ac7b5f36ff967d6" + integrity sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og== + dependencies: + "@jest/types" "^27.5.1" + "@types/node" "*" + +jest-pnp-resolver@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" + integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== + +jest-regex-util@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" + integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== + +jest-resolve-dependencies@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz#d811ecc8305e731cc86dd79741ee98fed06f1da8" + integrity sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg== + dependencies: + "@jest/types" "^27.5.1" + jest-regex-util "^27.5.1" + jest-snapshot "^27.5.1" + +jest-resolve@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.5.1.tgz#a2f1c5a0796ec18fe9eb1536ac3814c23617b384" + integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw== + dependencies: + "@jest/types" "^27.5.1" + chalk "^4.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-pnp-resolver "^1.2.2" + jest-util "^27.5.1" + jest-validate "^27.5.1" + resolve "^1.20.0" + resolve.exports "^1.1.0" + slash "^3.0.0" + +jest-runner@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.5.1.tgz#071b27c1fa30d90540805c5645a0ec167c7b62e5" + integrity sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ== + dependencies: + "@jest/console" "^27.5.1" + "@jest/environment" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.8.1" + graceful-fs "^4.2.9" + jest-docblock "^27.5.1" + jest-environment-jsdom "^27.5.1" + jest-environment-node "^27.5.1" + jest-haste-map "^27.5.1" + jest-leak-detector "^27.5.1" + jest-message-util "^27.5.1" + jest-resolve "^27.5.1" + jest-runtime "^27.5.1" + jest-util "^27.5.1" + jest-worker "^27.5.1" + source-map-support "^0.5.6" + throat "^6.0.1" + +jest-runtime@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.5.1.tgz#4896003d7a334f7e8e4a53ba93fb9bcd3db0a1af" + integrity sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/fake-timers" "^27.5.1" + "@jest/globals" "^27.5.1" + "@jest/source-map" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + chalk "^4.0.0" + cjs-module-lexer "^1.0.0" + collect-v8-coverage "^1.0.0" + execa "^5.0.0" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-message-util "^27.5.1" + jest-mock "^27.5.1" + jest-regex-util "^27.5.1" + jest-resolve "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + slash "^3.0.0" + strip-bom "^4.0.0" + +jest-serializer@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.5.1.tgz#81438410a30ea66fd57ff730835123dea1fb1f64" + integrity sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w== + dependencies: + "@types/node" "*" + graceful-fs "^4.2.9" + +jest-snapshot@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.5.1.tgz#b668d50d23d38054a51b42c4039cab59ae6eb6a1" + integrity sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA== + dependencies: + "@babel/core" "^7.7.2" + "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/traverse" "^7.7.2" + "@babel/types" "^7.0.0" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/babel__traverse" "^7.0.4" + "@types/prettier" "^2.1.5" + babel-preset-current-node-syntax "^1.0.0" + chalk "^4.0.0" + expect "^27.5.1" + graceful-fs "^4.2.9" + jest-diff "^27.5.1" + jest-get-type "^27.5.1" + jest-haste-map "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + jest-util "^27.5.1" + natural-compare "^1.4.0" + pretty-format "^27.5.1" + semver "^7.3.2" + +jest-util@^27.0.0, jest-util@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9" + integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw== + dependencies: + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-validate@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.5.1.tgz#9197d54dc0bdb52260b8db40b46ae668e04df067" + integrity sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ== + dependencies: + "@jest/types" "^27.5.1" + camelcase "^6.2.0" + chalk "^4.0.0" + jest-get-type "^27.5.1" + leven "^3.1.0" + pretty-format "^27.5.1" + +jest-watcher@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.5.1.tgz#71bd85fb9bde3a2c2ec4dc353437971c43c642a2" + integrity sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw== + dependencies: + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + jest-util "^27.5.1" + string-length "^4.0.1" + +jest-worker@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest/-/jest-27.5.1.tgz#dadf33ba70a779be7a6fc33015843b51494f63fc" + integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ== + dependencies: + "@jest/core" "^27.5.1" + import-local "^3.0.2" + jest-cli "^27.5.1" + +jose@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/jose/-/jose-2.0.5.tgz#29746a18d9fff7dcf9d5d2a6f62cb0c7cd27abd3" + integrity sha512-BAiDNeDKTMgk4tvD0BbxJ8xHEHBZgpeRZ1zGPPsitSyMgjoMWiLGYAE7H7NpP5h0lPppQajQs871E8NHUrzVPA== + dependencies: + "@panva/asn1.js" "^1.0.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" + +jsdom@^16.6.0: + version "16.7.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" + integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== + dependencies: + abab "^2.0.5" + acorn "^8.2.4" + acorn-globals "^6.0.0" + cssom "^0.4.4" + cssstyle "^2.3.0" + data-urls "^2.0.0" + decimal.js "^10.2.1" + domexception "^2.0.1" + escodegen "^2.0.0" + form-data "^3.0.0" + html-encoding-sniffer "^2.0.1" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.0" + parse5 "6.0.1" + saxes "^5.0.1" + symbol-tree "^3.2.4" + tough-cookie "^4.0.0" + w3c-hr-time "^1.0.2" + w3c-xmlserializer "^2.0.0" + webidl-conversions "^6.1.0" + whatwg-encoding "^1.0.5" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.5.0" + ws "^7.4.6" + xml-name-validator "^3.0.0" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +json-bigint@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-1.0.0.tgz#ae547823ac0cad8398667f8cd9ef4730f5b01ff1" + integrity sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ== + dependencies: + bignumber.js "^9.0.0" + +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 sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +json5@2.x, json5@^2.1.2: + version "2.2.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" + integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== + dependencies: + minimist "^1.2.5" + +jsonwebtoken@^8.5.1: + version "8.5.1" + resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d" + integrity sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w== + dependencies: + jws "^3.2.2" + lodash.includes "^4.3.0" + lodash.isboolean "^3.0.3" + lodash.isinteger "^4.0.4" + lodash.isnumber "^3.0.3" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + lodash.once "^4.0.0" + ms "^2.1.1" + semver "^5.6.0" + +jwa@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" + integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== + dependencies: + buffer-equal-constant-time "1.0.1" + ecdsa-sig-formatter "1.0.11" + safe-buffer "^5.0.1" + +jwa@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/jwa/-/jwa-2.0.0.tgz#a7e9c3f29dae94027ebcaf49975c9345593410fc" + integrity sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA== + dependencies: + buffer-equal-constant-time "1.0.1" + ecdsa-sig-formatter "1.0.11" + safe-buffer "^5.0.1" + +jwks-rsa@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/jwks-rsa/-/jwks-rsa-2.0.4.tgz#59d95e39f300783a8582ef8aa37d5ebbc6a8aa6f" + integrity sha512-iJqVCECYZZ+3oPmY1qXv3Fq+3ywDtuNEVBvG41pPlaR0zyGxa12nC0beAOBBUhETJmc05puS50mRQN4NkCGhmg== + dependencies: + "@types/express-jwt" "0.0.42" + debug "^4.3.2" + jose "^2.0.5" + limiter "^1.1.5" + lru-memoizer "^2.1.4" + +jws@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" + integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== + dependencies: + jwa "^1.4.1" + safe-buffer "^5.0.1" + +jws@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jws/-/jws-4.0.0.tgz#2d4e8cf6a318ffaa12615e9dec7e86e6c97310f4" + integrity sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg== + dependencies: + jwa "^2.0.0" + safe-buffer "^5.0.1" + +kind-of@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +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== + +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" + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +lexure@^0.17.0: + version "0.17.0" + resolved "https://registry.yarnpkg.com/lexure/-/lexure-0.17.0.tgz#95c26ee49dc3df5f28e2826b1647eb7569aab12a" + integrity sha512-0L8GqFgPW36sLNqxdp2VOOef5Ajpb98kc0Zk4AzE+Yf0xYTDndcT1vpFqwkTdrCCw+FV8DH4mC9NUw0RlARThA== + +limiter@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/limiter/-/limiter-1.1.5.tgz#8f92a25b3b16c6131293a0cc834b4a838a2aa7c2" + integrity sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA== + +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== + +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.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= + +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= + +lodash.includes@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" + integrity sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8= + +lodash.isboolean@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" + integrity sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY= + +lodash.isinteger@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" + integrity sha1-YZwK89A/iwTDH1iChAt3sRzWg0M= + +lodash.isnumber@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" + integrity sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w= + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= + +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= + +lodash.memoize@4.x: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + +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.once@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= + +lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +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@^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" + +lru-cache@~4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" + integrity sha1-HRdnnAac2l0ECZGgnbwsDbN35V4= + dependencies: + pseudomap "^1.0.1" + yallist "^2.0.0" + +lru-memoizer@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/lru-memoizer/-/lru-memoizer-2.1.4.tgz#b864d92b557f00b1eeb322156a0409cb06dafac6" + integrity sha512-IXAq50s4qwrOBrXJklY+KhgZF+5y98PDaNo0gi/v2KQBFLyWr+JyFvijZXkGKjQj/h9c0OwoE+JZbwUXce76hQ== + dependencies: + lodash.clonedeep "^4.5.0" + lru-cache "~4.0.0" + +make-dir@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +make-error@1.x: + 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" + +map-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= + +map-obj@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" + integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== + +meow@^10.1.0: + version "10.1.2" + resolved "https://registry.yarnpkg.com/meow/-/meow-10.1.2.tgz#62951cb69afa69594142c8250806bc30a3912e4d" + integrity sha512-zbuAlN+V/sXlbGchNS9WTWjUzeamwMt/BApKCJi7B0QyZstZaMx0n4Unll/fg0njGtMdC9UP5SAscvOCLYdM+Q== + dependencies: + "@types/minimist" "^1.2.2" + camelcase-keys "^7.0.0" + decamelize "^5.0.0" + decamelize-keys "^1.1.0" + hard-rejection "^2.1.0" + minimist-options "4.1.0" + normalize-package-data "^3.0.2" + read-pkg-up "^8.0.0" + redent "^4.0.0" + trim-newlines "^4.0.2" + type-fest "^1.2.2" + yargs-parser "^20.2.9" + +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== + +micromatch@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" + integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== + dependencies: + braces "^3.0.1" + picomatch "^2.2.3" + +mime-db@1.49.0, "mime-db@>= 1.43.0 < 2": + version "1.49.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.49.0.tgz#f3dfde60c99e9cf3bc9701d687778f537001cbed" + integrity sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA== + +mime-types@^2.0.8, mime-types@^2.1.12: + version "2.1.32" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.32.tgz#1d00e89e7de7fe02008db61001d9e02852670fd5" + integrity sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A== + dependencies: + mime-db "1.49.0" + +mime@^2.2.0: + version "2.5.2" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" + integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== + +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== + +min-indent@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist-options@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" + integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + kind-of "^6.0.3" + +minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +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.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +nekos.life@^2.0.9: + version "2.0.9" + resolved "https://registry.yarnpkg.com/nekos.life/-/nekos.life-2.0.9.tgz#5c214fdb7897c58beed6e22895d1a39ffc648e7d" + integrity sha512-O6dT0P9Oji4q0H8Que0GULlTtJCSa1u59evR2LUyrm+c1YjfVP69wkB3ZkjwLDHI2Tqq0sTJ6NOHQ1qn0ZlLUw== + +node-fetch@^2.3.0, node-fetch@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" + integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== + +node-forge@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" + integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== + +node-forge@^1.0.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.2.1.tgz#82794919071ef2eb5c509293325cec8afd0fd53c" + integrity sha512-Fcvtbb+zBcZXbTTVwqGA5W+MKBj56UjVRevvchv5XrcyXbmNdesfZL37nlcWOfpgHhgmxApw3tQbTr4CqNmX4w== + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= + +node-releases@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.2.tgz#7139fe71e2f4f11b47d4d2986aaf8c48699e0c01" + integrity sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg== + +normalize-package-data@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" + integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== + dependencies: + hosted-git-info "^4.0.1" + is-core-module "^2.5.0" + semver "^7.3.4" + validate-npm-package-license "^3.0.1" + +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" + +nth-check@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.1.tgz#2efe162f5c3da06a28959fbd3db75dbeea9f0fc2" + integrity sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w== + dependencies: + boolbase "^1.0.0" + +nwsapi@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" + integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== + +object-hash@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.2.0.tgz#5ad518581eefc443bd763472b8ff2e9c2c0d54a5" + integrity sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + 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.8.1: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + 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.3" + +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.1, p-limit@^3.0.2: + 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== + +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" + +parse5@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + +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 sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +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-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: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +picomatch@^2.2.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" + integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== + +pirates@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" + integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== + +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== + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +pretty-error@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" + integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw== + dependencies: + lodash "^4.17.20" + renderkid "^3.0.0" + +pretty-format@^27.0.0, pretty-format@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" + integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== + dependencies: + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^17.0.1" + +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" + +proto3-json-serializer@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/proto3-json-serializer/-/proto3-json-serializer-0.1.2.tgz#88446e8a4fa827a543e9e30533a8ed77fa87974b" + integrity sha512-BX/FTGvNOj/UNg4VhFOLqCAH8Lys4wmY+Ba4FdMhc7ypvU6ehMPYtDHaTB98NHBpz5ledpICGQJm+ZEnrGCL2Q== + +protobufjs@6.11.2, protobufjs@^6.10.0, protobufjs@^6.8.6: + version "6.11.2" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.11.2.tgz#de39fabd4ed32beaa08e9bb1e30d08544c1edf8b" + integrity sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw== + 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" + +pseudomap@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + +psl@^1.1.33: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-2.0.1.tgz#abfc7b5a621307c728b551decbbefb51f0e4aa1e" + integrity sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw== + dependencies: + duplexify "^4.1.1" + inherits "^2.0.3" + pump "^3.0.0" + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +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== + +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + +react-is@^17.0.1: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" + integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== + +read-pkg-up@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-8.0.0.tgz#72f595b65e66110f43b052dd9af4de6b10534670" + integrity sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ== + dependencies: + find-up "^5.0.0" + read-pkg "^6.0.0" + type-fest "^1.0.1" + +read-pkg@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-6.0.0.tgz#a67a7d6a1c2b0c3cd6aa2ea521f40c458a4a504c" + integrity sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^3.0.2" + parse-json "^5.2.0" + type-fest "^1.0.1" + +readable-stream@^3.1.1: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +redent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-4.0.0.tgz#0c0ba7caabb24257ab3bb7a4fd95dd1d5c5681f9" + integrity sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag== + dependencies: + indent-string "^5.0.0" + strip-indent "^4.0.0" + +regexpp@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +renderkid@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" + integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg== + dependencies: + css-select "^4.1.3" + dom-converter "^0.2.0" + htmlparser2 "^6.1.0" + lodash "^4.17.21" + strip-ansi "^6.0.1" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +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@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9" + integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== + +resolve@^1.20.0: + version "1.22.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" + integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== + dependencies: + is-core-module "^2.8.1" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +retry-request@^4.0.0, retry-request@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/retry-request/-/retry-request-4.2.2.tgz#b7d82210b6d2651ed249ba3497f07ea602f1a903" + integrity sha512-xA93uxUD/rogV7BV59agW/JHPGXeREMWiZc9jhcwY4YdZ7QOtC7qbomYg0n4wyk2lJhggjvKvhNX8wln/Aldhg== + dependencies: + debug "^4.1.1" + extend "^3.0.2" + +retry@0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== + +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== + +rimraf@^3.0.0, 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" + +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" + +safe-buffer@>=5.1.0, safe-buffer@^5.0.1, 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== + +safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +"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== + +saxes@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" + integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== + dependencies: + xmlchars "^2.2.0" + +semver@7.x, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + +semver@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^6.0.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +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== + +signal-exit@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + +signal-exit@^3.0.3: + 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== + +snakeize@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/snakeize/-/snakeize-0.1.0.tgz#10c088d8b58eb076b3229bb5a04e232ce126422d" + integrity sha1-EMCI2LWOsHazIpu1oE4jLOEmQi0= + +source-map-support@^0.5.6: + 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.5.0: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +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== + +source-map@^0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.11" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95" + integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +stack-utils@^2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.5.tgz#d25265fca995154659dbbfba3b49254778d2fdd5" + integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA== + dependencies: + escape-string-regexp "^2.0.0" + +stream-events@^1.0.1, stream-events@^1.0.4, stream-events@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/stream-events/-/stream-events-1.0.5.tgz#bbc898ec4df33a4902d892333d47da9bf1c406d5" + integrity sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg== + dependencies: + stubs "^3.0.0" + +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + +streamsearch@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a" + integrity sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo= + +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-similarity@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/string-similarity/-/string-similarity-4.0.4.tgz#42d01ab0b34660ea8a018da8f56a3309bb8b2a5b" + integrity sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ== + +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" + integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + +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: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.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-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-indent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-4.0.0.tgz#b41379433dd06f5eae805e21d631e07ee670d853" + integrity sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA== + dependencies: + min-indent "^1.0.1" + +strip-json-comments@^3.1.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== + +stubs@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/stubs/-/stubs-3.0.0.tgz#e8d2ba1fa9c90570303c030b6900f7d5f89abe5b" + integrity sha1-6NK6H6nJBXAwPAMLaQD31fiavls= + +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.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-hyperlinks@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" + integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + +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-tree@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + +teeny-request@^7.0.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/teeny-request/-/teeny-request-7.1.1.tgz#2b0d156f4a8ad81de44303302ba8d7f1f05e20e6" + integrity sha512-iwY6rkW5DDGq8hE2YgNQlKbptYpY5Nn2xecjQiNjOXWbKzPGUfmeUBCSQbbr306d7Z7U2N0TPl+/SwYRfua1Dg== + dependencies: + http-proxy-agent "^4.0.0" + https-proxy-agent "^5.0.0" + node-fetch "^2.6.1" + stream-events "^1.0.5" + uuid "^8.0.0" + +terminal-link@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== + dependencies: + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" + +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 sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +throat@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.1.tgz#d514fedad95740c12c2d7fc70ea863eb51ade375" + integrity sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w== + +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 sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +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" + +tough-cookie@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" + integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== + dependencies: + psl "^1.1.33" + punycode "^2.1.1" + universalify "^0.1.2" + +tr46@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" + integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== + dependencies: + punycode "^2.1.1" + +trim-newlines@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-4.0.2.tgz#d6aaaf6a0df1b4b536d183879a6b939489808c7c" + integrity sha512-GJtWyq9InR/2HRiLZgpIKv+ufIKrVrvjQWEj7PxAXNc5dwbNJkqhAUoAGgzRmULAnoOM5EIpveYd3J2VeSAIew== + +ts-jest@^27.1.3: + version "27.1.3" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-27.1.3.tgz#1f723e7e74027c4da92c0ffbd73287e8af2b2957" + integrity sha512-6Nlura7s6uM9BVUAoqLH7JHyMXjz8gluryjpPXxr3IxZdAXnU6FhjvVLHFtfd1vsE1p8zD1OJfskkc0jhTSnkA== + dependencies: + bs-logger "0.x" + fast-json-stable-stringify "2.x" + jest-util "^27.0.0" + json5 "2.x" + lodash.memoize "4.x" + make-error "1.x" + semver "7.x" + yargs-parser "20.x" + +ts-mixer@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/ts-mixer/-/ts-mixer-6.0.0.tgz#4e631d3a36e3fa9521b973b132e8353bc7267f9f" + integrity sha512-nXIb1fvdY5CBSrDIblLn73NW0qRDk5yJ0Sk1qPBF560OdJfQp9jhl+0tzcY09OZ9U+6GpeoI9RjwoIKFIoB9MQ== + +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.1.0, tslib@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" + integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== + +tslint-config-prettier@^1.18.0: + version "1.18.0" + resolved "https://registry.yarnpkg.com/tslint-config-prettier/-/tslint-config-prettier-1.18.0.tgz#75f140bde947d35d8f0d238e0ebf809d64592c37" + integrity sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg== + +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" + +twemoji-parser@^13.1.0: + version "13.1.0" + resolved "https://registry.yarnpkg.com/twemoji-parser/-/twemoji-parser-13.1.0.tgz#65e7e449c59258791b22ac0b37077349127e3ea4" + integrity sha512-AQOzLJpYlpWMy8n+0ATyKKZzWlZBJN+G0C+5lhX7Ftc2PeEVdUU/7ns2Pn2vVje26AIZ/OHwFoUbdv6YYD/wGg== + +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-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +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-fest@^1.0.1, type-fest@^1.2.1, type-fest@^1.2.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" + integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typescript@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.2.tgz#fe12d2727b708f4eef40f51598b3398baa9611d4" + integrity sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg== + +unique-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== + dependencies: + crypto-random-string "^2.0.0" + +universalify@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +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" + +util-deprecate@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= + +utility-types@^3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/utility-types/-/utility-types-3.10.0.tgz#ea4148f9a741015f05ed74fd615e1d20e6bed82b" + integrity sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg== + +uuid@^8.0.0: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +v8-compile-cache@^2.0.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== + +v8-to-istanbul@^8.1.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed" + integrity sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + source-map "^0.7.3" + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +w3c-hr-time@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== + dependencies: + browser-process-hrtime "^1.0.0" + +w3c-xmlserializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" + integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== + dependencies: + xml-name-validator "^3.0.0" + +walker@^1.0.7: + 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" + +webidl-conversions@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" + integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== + +webidl-conversions@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" + integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== + +websocket-driver@>=0.5.1: + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + dependencies: + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + +whatwg-encoding@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== + dependencies: + iconv-lite "0.4.24" + +whatwg-mimetype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + +whatwg-url@^8.0.0, whatwg-url@^8.5.0: + version "8.7.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" + integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== + dependencies: + lodash "^4.7.0" + tr46 "^2.1.0" + webidl-conversions "^6.1.0" + +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" + +word-wrap@^1.2.3, word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +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 sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +ws@^7.4.6: + version "7.5.7" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.7.tgz#9e0ac77ee50af70d58326ecff7e85eb3fa375e67" + integrity sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A== + +ws@^8.4.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" + integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== + +xdg-basedir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" + integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== + +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== + +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + +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@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + +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== + +yargs-parser@20.x, yargs-parser@^20.2.2, yargs-parser@^20.2.9: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs@^16.1.1, yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +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== + +zod@^3.11.6: + version "3.11.6" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.11.6.tgz#e43a5e0c213ae2e02aefe7cb2b1a6fa3d7f1f483" + integrity sha512-daZ80A81I3/9lIydI44motWe6n59kRBfNzTuS2bfzVh1nAXi667TOTWWtatxyG+fwgNUiagSj/CWZwRRbevJIg==