From 9373d9726b6919f17ab6b423c8a164b4ac661588 Mon Sep 17 00:00:00 2001 From: Victor Garcia Date: Mon, 4 Nov 2024 11:27:11 +0100 Subject: [PATCH] fix: corrected externalErrors behaviour --- .gitignore | 3 + docs/.vitepress/config.ts | 30 + docs/.vitepress/theme/custom.css | 5 + docs/.vitepress/theme/index.ts | 18 + docs/.vitepress/theme/style.css | 139 ++ docs/assets/logo.png | Bin 0 -> 65278 bytes docs/examples/index.md | 4 + docs/guide/index.md | 28 + docs/index.md | 27 + docs/public/favicon.ico | Bin 0 -> 15406 bytes package.json | 8 +- .../useRegle/guards/rule.status.guards.ts | 17 + packages/core/src/core/useRegle/useErrors.ts | 12 +- packages/core/src/core/useRegle/useRegle.ts | 7 +- .../createReactiveFieldStatus.ts | 9 +- .../createReactiveNestedStatus.ts | 40 +- .../useStateProperties/useStateProperties.ts | 1 - packages/core/src/types/core/options.types.ts | 9 +- .../core/src/types/core/useRegle.types.ts | 6 +- .../core/src/types/rules/rule.errors.types.ts | 43 +- .../core/src/types/rules/rule.status.types.ts | 1 + packages/core/src/types/utils/misc.types.ts | 5 + packages/zod/src/core/useZodForm.ts | 5 +- playground/vue3/src/App.vue | 5 +- .../vue3/src/components/ReproductionForm.vue | 190 +++ playground/vue3/src/components/TestForm.vue | 8 +- pnpm-lock.yaml | 1374 ++++++++++++++++- 27 files changed, 1948 insertions(+), 46 deletions(-) create mode 100644 docs/.vitepress/config.ts create mode 100644 docs/.vitepress/theme/custom.css create mode 100644 docs/.vitepress/theme/index.ts create mode 100644 docs/.vitepress/theme/style.css create mode 100644 docs/assets/logo.png create mode 100644 docs/examples/index.md create mode 100644 docs/guide/index.md create mode 100644 docs/index.md create mode 100644 docs/public/favicon.ico create mode 100644 playground/vue3/src/components/ReproductionForm.vue diff --git a/.gitignore b/.gitignore index 11fc82c8..15a2e190 100644 --- a/.gitignore +++ b/.gitignore @@ -24,6 +24,9 @@ lib .output .DS_Store +docs/.vitepress/dist +docs/.vitepress/cache + # Coverage directory used by tools like istanbul coverage *.lcov diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts new file mode 100644 index 00000000..1a57b9cc --- /dev/null +++ b/docs/.vitepress/config.ts @@ -0,0 +1,30 @@ +import { DefaultTheme, defineConfig } from 'vitepress'; +import { transformerTwoslash } from '@shikijs/vitepress-twoslash'; + +const GUIDES: DefaultTheme.NavItemWithLink[] = [ + { text: 'Getting Started', link: '/guide/' }, + { text: 'Installation & Usage', link: '/guide/install' }, +]; + +export default defineConfig({ + title: 'Regle', + description: 'A reactive and declarative vue form library', + head: [['link', { rel: 'icon', href: '/favicon.ico' }]], + themeConfig: { + logo: '../../assets/logo.png', + nav: GUIDES, + search: { + provider: 'local', + }, + sidebar: [ + { + text: 'Guide', + items: GUIDES, + }, + ], + socialLinks: [{ icon: 'github', link: 'https://github.com/victorgarciaesgi/regle' }], + }, + markdown: { + codeTransformers: [transformerTwoslash()], + }, +}); diff --git a/docs/.vitepress/theme/custom.css b/docs/.vitepress/theme/custom.css new file mode 100644 index 00000000..6bbf2b67 --- /dev/null +++ b/docs/.vitepress/theme/custom.css @@ -0,0 +1,5 @@ +:root { + --vp-c-brand-1: #4dd16b; + --vp-c-brand-2: #99cccc; + --vp-c-brand-3: rgb(33, 123, 55); +} \ No newline at end of file diff --git a/docs/.vitepress/theme/index.ts b/docs/.vitepress/theme/index.ts new file mode 100644 index 00000000..c25cb29b --- /dev/null +++ b/docs/.vitepress/theme/index.ts @@ -0,0 +1,18 @@ +import { h } from 'vue'; +import type { Theme } from 'vitepress'; +import DefaultTheme from 'vitepress/theme'; +import './style.css'; +import './custom.css'; +import '@shikijs/vitepress-twoslash/style.css'; +import TwoslashFloatingVue from '@shikijs/vitepress-twoslash/client'; +import type { EnhanceAppContext } from 'vitepress'; + +export default { + extends: DefaultTheme, + Layout: () => { + return h(DefaultTheme.Layout, null, {}); + }, + enhanceApp({ app }: EnhanceAppContext) { + app.use(TwoslashFloatingVue as any); + }, +} satisfies Theme; diff --git a/docs/.vitepress/theme/style.css b/docs/.vitepress/theme/style.css new file mode 100644 index 00000000..092cc107 --- /dev/null +++ b/docs/.vitepress/theme/style.css @@ -0,0 +1,139 @@ +/** + * Customize default theme styling by overriding CSS variables: + * https://github.com/vuejs/vitepress/blob/main/src/client/theme-default/styles/vars.css + */ + +/** + * Colors + * + * Each colors have exact same color scale system with 3 levels of solid + * colors with different brightness, and 1 soft color. + * + * - `XXX-1`: The most solid color used mainly for colored text. It must + * satisfy the contrast ratio against when used on top of `XXX-soft`. + * + * - `XXX-2`: The color used mainly for hover state of the button. + * + * - `XXX-3`: The color for solid background, such as bg color of the button. + * It must satisfy the contrast ratio with pure white (#ffffff) text on + * top of it. + * + * - `XXX-soft`: The color used for subtle background such as custom container + * or badges. It must satisfy the contrast ratio when putting `XXX-1` colors + * on top of it. + * + * The soft color must be semi transparent alpha channel. This is crucial + * because it allows adding multiple "soft" colors on top of each other + * to create a accent, such as when having inline code block inside + * custom containers. + * + * - `default`: The color used purely for subtle indication without any + * special meanings attched to it such as bg color for menu hover state. + * + * - `brand`: Used for primary brand colors, such as link text, button with + * brand theme, etc. + * + * - `tip`: Used to indicate useful information. The default theme uses the + * brand color for this by default. + * + * - `warning`: Used to indicate warning to the users. Used in custom + * container, badges, etc. + * + * - `danger`: Used to show error, or dangerous message to the users. Used + * in custom container, badges, etc. + * -------------------------------------------------------------------------- */ + + :root { + --vp-c-default-1: var(--vp-c-gray-1); + --vp-c-default-2: var(--vp-c-gray-2); + --vp-c-default-3: var(--vp-c-gray-3); + --vp-c-default-soft: var(--vp-c-gray-soft); + + --vp-c-brand-1: var(--vp-c-indigo-1); + --vp-c-brand-2: var(--vp-c-indigo-2); + --vp-c-brand-3: var(--vp-c-indigo-3); + --vp-c-brand-soft: var(--vp-c-indigo-soft); + + --vp-c-tip-1: var(--vp-c-brand-1); + --vp-c-tip-2: var(--vp-c-brand-2); + --vp-c-tip-3: var(--vp-c-brand-3); + --vp-c-tip-soft: var(--vp-c-brand-soft); + + --vp-c-warning-1: var(--vp-c-yellow-1); + --vp-c-warning-2: var(--vp-c-yellow-2); + --vp-c-warning-3: var(--vp-c-yellow-3); + --vp-c-warning-soft: var(--vp-c-yellow-soft); + + --vp-c-danger-1: var(--vp-c-red-1); + --vp-c-danger-2: var(--vp-c-red-2); + --vp-c-danger-3: var(--vp-c-red-3); + --vp-c-danger-soft: var(--vp-c-red-soft); +} + +/** + * Component: Button + * -------------------------------------------------------------------------- */ + +:root { + --vp-button-brand-border: transparent; + --vp-button-brand-text: var(--vp-c-white); + --vp-button-brand-bg: var(--vp-c-brand-3); + --vp-button-brand-hover-border: transparent; + --vp-button-brand-hover-text: var(--vp-c-white); + --vp-button-brand-hover-bg: var(--vp-c-brand-2); + --vp-button-brand-active-border: transparent; + --vp-button-brand-active-text: var(--vp-c-white); + --vp-button-brand-active-bg: var(--vp-c-brand-1); +} + +/** + * Component: Home + * -------------------------------------------------------------------------- */ + +:root { + --vp-home-hero-name-color: transparent; + --vp-home-hero-name-background: -webkit-linear-gradient( + 120deg, + var(--vp-c-brand-1) 30%, + var(--vp-c-brand-2) + ); + + --vp-home-hero-image-background-image: linear-gradient( + -45deg, + var(--vp-c-brand-1) 50%, + var(--vp-c-brand-2) 50% + ); + --vp-home-hero-image-filter: blur(44px); +} + +@media (min-width: 640px) { + :root { + --vp-home-hero-image-filter: blur(56px); + } +} + +@media (min-width: 960px) { + :root { + --vp-home-hero-image-filter: blur(68px); + } +} + +/** + * Component: Custom Block + * -------------------------------------------------------------------------- */ + +:root { + --vp-custom-block-tip-border: transparent; + --vp-custom-block-tip-text: var(--vp-c-text-1); + --vp-custom-block-tip-bg: var(--vp-c-brand-soft); + --vp-custom-block-tip-code-bg: var(--vp-c-brand-soft); +} + +/** + * Component: Algolia + * -------------------------------------------------------------------------- */ + +.DocSearch { + --docsearch-primary-color: var(--vp-c-brand-1) !important; +} + diff --git a/docs/assets/logo.png b/docs/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d0741ed983a8fc191e05226027b5769cb5eb9641 GIT binary patch literal 65278 zcmeFZ^Lr)1^Dr9QJh5#%+1R#i+uCSjZj4Q`n`~^`wr%6Y#+&_o@!tCv++Xg@bDpWG zuBq;>neO6qB9#;*5#ey*KtMncrKQAFKtMp#{{3K}zA%9n1c+Z32uopkVGxj-c=$JC z$gg{1Qz;dB5D*_q5Rjly5RjKIRM0U9h&wX~$f*$s2yZ$F2)0vpt1|yrgOa(Hw1vDp z2<;aP0|Ew$1_J&CfqtDJ5!N6O|A9e3zBqjy;J-lsZ|g6x|7itH`vv}g;eUi#20M{o zOth`lwA{4h<#Ch^~of87a?TDiG7@iH-a zdU`T?vN1ZkSTeEj@bEA(vof)=GJH`mxOzLd8GA7}xRU)BlmFo(X6|b0V(sK+?dU-K zkFT+bqq~~`De1qC{`dH=ak^Ps{NJ7&T>pDoUlU~d*TTfY$jtP=yuTjh|A*yObg?%7 z>iHjkK^Ff1Q2xJg|J@Hi)4$IDAA|X?nf?d+HB~`4ey0Bwn;;yH!45PC$TtvaF<~_? z(DM%1c5_K>rq;oZscF@uNf>Du^585GW0*p4F?_OhI_e9jpHykm+rgv-E_wX8*CqV# zG*HucC^P&Rj<2@{?6~5=LEnhUbKFFD$xq00YL2cEe0AntKg$-IJTKfA38#4c!z+0$ zFG|(#7w#%bfn~t55$Ez6K=uEB{(me1tv-O$lGBQ2`SDua_?piaqUCvfyqvgoI?sa7 zDYvRZ!k{+0_DC=ND6Mr$O%MZ<-ClE&Mjd7EaUQt?K#ej9ZnwU@NY`1k=>W>%&x}nU zx&w_|kelxxbl*fccqQbf(|p1>HnuGoDlQ*qfFd~>lgLT`giBQ0c%@lQsj2qzazJF7 zMp4;HWO78`#7{PKu4{E|(WaA0yvT5a&)SUp1S?|=ZKX|^E%DxgT&xIVNo{q1TgOqw zy$p+kb@-|H@3BAKMl&?7$s$f5MpScbX5BJZcqVyHFefotl7{t`^b;Zy>)mw_%B>OZ zD9~(MEylE-goNt%W`X3sz5BIkxn9_u77v8Y$JSV0dKt(*SSfL+H62u)^bXNeC9(~8)Cn5kgoT4^u2DvoqCk)A{qALuJ_%>ATxI`KLb(hr z+&I*R!Wqr7^XLpgKuHuiQE8Zv^LiU_F!lSbdhOnXd$(*f^Mu>^wBI518AdTd0pvz@ zO;q?Q3n~}7C_B`cLaqR&n>iTSjw%v;sAlg~@Rx4}0?i{_h)^d{)G{bFNJWCk+%B#rDpLrVELOmJjEh;cr-k7fh#aSrR%*VEcr zlYUNxTpLchD|ThL^_xB)WoM};Zh|5175WHLLfUN{TER)51Hn@rW=EYHc~zRaM}Jgv z=WH6XAUr13U zr3mNo1KqTP->Rd=8f~Ie2RhT9gO_eh5gJX4A(KL8>XU<>f+ejQMQkAY68*qz`j<4a zxk)6q07i6RkxppC0EmtS8{VHX;sYbrKV>2aZ*sc_?gqKu$;wzMM7mk%p}hv-!iZz0 zFJVyiE8o`CRHL-3>p%{^c}tZCbBDFTjPr-50KO+2`PEonzp%vTCdPma3%;!32JFr^ zgSr}%C~@v4MfG#Xsd>LMJCPQjh=|;?EM6tcs6fK61{n`(Xt2c+?`eP)UrNLw*I*@S zZ^+l}ee_U01Re!>67A>vd-Ba82igEFftk5C51h6W$&T&&v4|sEt61P=h~TsSnz}6- z?%p3m=va?$A~41qbQ1!deEd z;WSbr9vgTBOC;Wf_l5B_yx%{W>|lyL46EJGk`-Z@_)oK){T#B|w4{24TnM_u_$tJTZU#cK6*9*kZ`1B`;zRNFf5bvp2Qp z5xsRWmJFmhV=pSg_lDhyy&vPVW3>&P=wPX1WyeZDk z=XnOj=heAM??Hb@ZlL72JCfWWZgj9}6zG`V;I~JrhtKzD55kYhSSqT+ZoTTO2=p79 zR?Q!glxQhxQq$iQe$ET;CL0TUby9wqH=}X0QvAV%M6ow!?2QS{hjCTrT#W*F zs06HHk&=7)N%aOpZ{P~l5cc<#LNjNxyV0ROEnU~Ao>zGN)TR19%3x`?>asLf%oK2g zJ^8+atL83In$+6B0F??2Zr8LJ^CMVjqiHX!iJ;>(PeJ2wQWngLx`qbcdGVZtLY-nn;;jT?Fw)UNc*1TYu0MoA4)8^z&|AeGEZT?(t)={i%vJUV=Xg9nGh;-;?u;4D!sweUj^XEK z&`{6*&`I;p?5k_UV93_3HSc`~WkvVa!m7-kJJlX4F*+!KlTAX1p>{RxI$7u&Dr%3M za=fGL@?RL3YTmQfZNzUL>=%7a{sqc!93fL zRmR+ng9Gfu8E$g~g#u3>=Iv(hXC~5bW>|)wAn9mi<+;i;7Haq)3C7dZctD>>wpD=U z)lBz8HFTux%E^#ZCAC{kWlOG88zLen{LU8q_mQiZ?Tk9-iw-J_xQPitkDE3=pl8=p zBDCOr3$~%h2_Z9%!+HIniO~r2^a-SF>i&!3@l@{H`mLjo&y>&<^!=?Vz2u>SkX3KK zVihk7J0|S?jn}VqrP3PW;;8Ip?3`C_vM1qm{d1Ky;S=~^J=hUpn2TSmjFw)EYV~#0 zsnT_^9@Q>xMt^zDMYqWiw2k0_IZ|N1&Os0$UUk+=S$tH!Cq@9((r89dR1h_ z3H#3qUZcu=Iy>6%-rvl!=v#d*L4N**$T6ZP(ohOb^^;ir91xL7YeY2_QDU>OOv*fI zmyVH4UB~mNdbkB2fDu?A9lLqkdiAb`H@ohfUQ62eqYcoesXuX3FCL5EoF(bBg|Z5n zw|=}}d1bSw#)hNVKox8QUZx(2LkDWgilH1k!vrFlAE~>{1kQn@$gzC_X~w9Xz@t2R zFm1$WRkqH!ZyC&{zmhO;J0dsj23*^9e3=!WJMw=RNYl6agA*qG%EkyKWmt}b3ZBPZ zzvu0V-~L#XVT6?g{~NuuW4gqf7#23lf-%AT7aAL^Bv%a%%N+hXxkWTdYGDzZfpwdy zyVJ~t&?uhsu$w}|Mp=vnk57-=t7rO{2&{zYL*Lvl&UvOvhqR3lhz_v$XO%EK?&O5d zI*FT5HtY?rk8n1jz>_(q&OQ6AfJ-S)g7d6_ZX*P(Lsoz!JaMJ(ZlJ#VP$J*Qff#dO zzEQ`8B0u+C#WJaS$C#Q48oOJ|t7lRzvZ(zV zC^RQjZzzY?sD*H>QKD+xHlHUGi29+DgjlLxtX{@*D^E`hzhP91CJ0$tw3ypzXh_dHGWQu08D)8Bc5ddj^Jdl|-UP6UZ>W;{ zrN7DJV=$*H@I4IuDDXXJ%BPQoZp7`%T7Lteb=~9O>AX0&Hbl5}ot+~I{8(DC+567@ zBL_vc+X=TL#FgeJZ;UUdTm!&DCGEEfDJ+Au31{LQ61ZNKL|;R!TC_6}Rt7u~qwJ71 zs{)Ai`lB<971&8pSQrS3H6?#8Ob{fU5w{to^!cP_?Wp{bqT!Wgnti}(6UoTD0-xC` z9CCm6tWrntO1Th7<@Ct#n~J(nODuOMNB5=kkm&-S^Hsp2+_Vo~Zcxe92In83$*a#^0F}+A~|t@0D(LGf>p`e1~}{P&?l6xhuvn&hoa|A z(sL5q>UHpQ)82cc*Ly6Cz#y1DG<#iB_RzLPE+Db&Y)O_%?} zWJp^lGkAj*SVOu_)Hr*!jvUcm@T6@yR-eZxsw*{gQ-2#i)1oIg0{OFzpld^VuIJ1t zi^Az`06w94zw5Zy6%BQ@Rm&)Z|*1yz@o4-xvcnXmdcX)i$@z@sx z5$5#LW~u)5-k|6_sSUG<2r4Pfk(u)=vJ4ahCnohKIJAEGO3 zzL2}beXUQ&^#>o}hW7$=oWP3^^K|P9Yr6S+dl{qimlgL!&V7vU4>=o&+j9b8_FJ+c zSVcG{@lq$g;HqYku0~;O>Y)TDw31j-!VEJ?`UgaxCqX#{7F(Q)C?u3F8z#ti92SDy z7kNQ-SSL5R#omw&!(%+quy!#|+QaS2Gucs=%?YZKBh; z7ahcv3_*eg&#j@dORqrL2BN!(OnTql!u4__b0HcuudLUq8`ccucNbtk`EBk%Uc-Rz zBimFNo!xE-!UC5U&7OBpVk4tlfHh^G%#J;-C$cn|#4FL$L(lPjwF3IGb+-@M?^JZe z+_5vTjV?@?qE_e(1w6GS=2^K%&T2KsaolWCojokxUA^#L9S3Kh`XQ)D7OD_aU+25A zJxAN|yly(;0HFch42#d--x(MxJ!KK%45$x%+gNgzeRmj~7L=2Irkg#v08byEzQGl< zkNZcWjoUZG2%)D4KBSGe7W*STwk7GQ)2rY&|gcMo?1zEK;%niY?D-@1$xe?r{Vnr*POh$X|-@>dJIp=;UdB9wzbrQG$n>p$zk>e-~2VTd0Z zAOHECgdgPWRQM;i3Di}kKqeQBX^Ao~GADI)rD~RHs=G5i=+$(YpnIhHajQg5ZJk?o zGDjX4*k-#G!t|cg68|w7XE(Ie*s><}gH^^f#}?$6Gq>Rs{_{u~!NLQUXaW~9lnGL>N(V6qK&c4c0` zm$8^CmYv6sxmkDzIif9tA5KT&ye{*bmAXY39M}wW7u1IL?XP7nZ4P)FMR!Hc^L%>9 zh}Ua6s{6dU9192tcdpPT0#tu3F`!n09xv=Q7^R0qAv{?^p}>R&UMUmA+_x2bRcyd({vohhDMYfNaWM`wEAJ+d2Az`G^K_u+-^ z87Q zy?*u&o*KuGe%p}2akhYi)cE$J!}CMk^BESpn?I@as{i~t3b&ys8CCUP82ZGkFVpWI zktG8hGF8(=4lN?DB@E%C$+t4L%Lpcw(SuVU>*a1A;89KOJyyKg{?fz^K^;abxDL)? zKexwgDbp2V)F&4v(0j7yyf#4}`>8%3@C;v%;r=v{Hp>xePf z6LfiJLAIVt55F|QOVbYTm8nIC%gmzFOk}6tbDiOKKl~fTi(M@nm(LJVj^APbU4O*qK~`I>Q1e;%R41^MYaID!FrZZstq=Gkv#DA&OOwBxp2<(cL8Sj>MK1_nGHUv7PLw0+*i zB*K{lYeIf4J(p2I@Mmt#mFbZxqb{8uvl;2xPWcRcb&EEg_miS+c!6G@_knM=Q+{iS_pyKO)%m_&*ITYy zg!A{LtUhLPbvzK(hQ18_u<$N~y{?BuPt10>Kq!`oIfIH2U>kr9rYl-H%Q@}!m7dby zA$F&R**XS~kwma8#O#Nn8{&YGQSu78b%8^x+-%WYcL596RZ&OmW!1X#Rd93@@U8y= zxpSKUIUj#EA1j&_FA#_2%OXi1UMNd!Bcp2o>6pH|&jDmsxUr;NQrn)|w?yvQNDkUm zeY&JM)|~9A0nEj)tEMRCqD=tb7Av?MOt!<*Lh(liNZ2abAU*DqeeohXwpwq|fzZo^ zp-mR;w=w<9j)a!9ZenW1SkO2q zZ7sh697GO@V=dFg16aS5c&ojk%lTBmS!KK+`c`oJaHe_;C|wKv?p}JRgmvelm#d}! zOUA%o@s~fot)Ym$K$Gk0^({-5lR8_cTk=>7Kz+Xa;9mYlNhP=hS&Sqot`Mxp9ds7e zn`uRcE$+}!z$>_C;2Rfe`w~daqzHR@?rPE-If%^hqVbAD3#o3+lRl(PAdcE) zfU~_;;5s8@KVaGtobQ3a_L067ll|=GQD9)* zaXFK$_}25FPt>J1Tl;X@7bK0RX?U_I6`ATQ)+#Y=6m88ijSX%_>DO|vgr*{kB)ui;BNnpI#^&=xEGUkUOR~A zWR^VtM-yk=fH#`I_t#U$Y{Q3aNbtblig219lUYqmGQ4+DccMzDv3G8&LZ6gNjf-6+ zcL}Cp&PfR4jpfMM);&c{D&(oD4>gy&k&Fw^_Z8?y!}|x(3#r8#T4p1Pv>Ks4k@=FW z58^dC(yTSNs-Ko9v``DCN`82q?EtMyVBPZF2>Cv$TtdlJKB{gP=%Nw7-wu8NzUc-a zj@0%K;?Tx6G*x?xJu<$}lYdv>>wOkQZi6N?6qd^Hf^wz0A)E($!xSW^qVK`T&^dkw z3N3-TI9*YiM*;Rx)VcBnCPVv#Uk!j5(Qv$O`R(U+uo!P+Cu(w&$qh}T?6s!xv9_{C zPx~18!|1X8yR?Suu8sfLx!MJR=j8h9*pg6vA8YzRz;B8e#|0Bp;$+E7Pf1hHd~9ua zUbt*C%6ZZZUJKUW1L*^QDX@~O`t?uV{@^bXB7;ZU`tKdIsMQdEhCE-Xux|cwI4(kYBfX9%^2wZBTn&bsHS|Ru%m4M3XDXqHc((4qC==Y4Bj8 zJV&R0ZD{urvMVdtaV~sq|1@gyi;N|Gw(silC%pi)9is>EcBfn38jRWHR%PnC+w!XO z-b*KNYpJW@h|0sPjgC%RBdcjJ$ehu%9wPft2C~|O5-kT}2{#%vI{2Umm`S2HNNvp>wEhwb7C06-ICJ+irh=6VC?e5>)*Zhb!l%Td+q(5s7Che6 z8aC1U6;R*`TahT?H==acn#v%n7(6&c2=yA(Y$`OjwU(zh2eLiU|as#7K5 z=t;v8=J3%`unGx;zZExhs?51ehav=nE!cW7auhf(I4Ne&Z}5u_yy(Wq^EPbNRBy|- zfp$|n9loE(*92YnW!Mg7RdOYYKs^RmoZDAd1P+^d;ePM=yQr(NoB)=t-Pi87i*_|s zbK7%*ihu!xboe9P`2GiD>+^H}G)Lpcp_JuxWQK~GAg#rQ7wfTbm(HlDWU z7u$7PTsn=rId;>3R```V0kkhAoBs}~#6G?peK4LCf#>kHa9mh?>*E7T=ixO`p^em%~K8kPk_gr%x0T- zY5d;F-gbNEp@z2b*$pa{k$& zc+ZLGbu6M9OY*77(LUzswLSJ~vJPu0CyIuyK1%@yU9Tn-L-XsXeo>*1!4{m8Fpb7$wfeo%a0i}O{AXA%~WP#(@S@Bg5ae# z4=b2086$Z${l*~_L#*hevlYPa7y~gim0V_$pLJ@mtMhh_{oRDsEk8_F(SgVD+#Eb{ z(^NBDC1`v1rp_@`vDqUdCB;PCKKmVkZ~chb+kq0TBdv{Dwe`7PMKIkz6 z$~R+luE>@^Lw0Cck-v}X@dFie+MY3+Hd}77tF}D%=1*=9G>VG8%=_R+?h141q+eCe z7Xogr(`Vr%*wjZ!9=f}S!`AOKA4X6LLn94Q;hr>P#&f z5+znz)w{lJ)%}t?Bv_-l9{7Fva|}be+PLCEWF;II7;m+hr~XX+Wo3XU;A`A0_5Mbj zEeiMb6jr*4@A$~#x)@o^mK%_)tqb|x^WA+?{m#5X$1Wxw)eLmi{JYSx*NlyK5MkU- z1fy2;$ptx^a1|v?wEd_{K|j0d3;s{9$&^^pVv@b zY1JVBP)?f=q^q{blWF%|hfp~O>;FperH0C zU8;%|FYBesj7M~jU1((x2Ty?KHNpciM`8clIDMV5V)s|@31{li=&eTgbG#obqH%b+ zJ=ZHXstCJrFlEeO(zfK1LZ4OB8yXStP(1!e#@WOAU5%%qhkaF@ z6$Pkmd~mRWEfLwx32qoPb_=MKF5C!_ilgB<=Sj&fh3)`>YAV`xtLby_b$UBvAHgFu-a#vVmi@Xe}Q|79CUYz1X)E{{Onf*hHrEhrCnO;$|Q>GLgT|zp) z=X(M?&D3L=)<7s*6}ztzHwm29Tb$Ucbb14tg%oTCE#tgFepCibi0U<}gnO}wcy1@H z)JGq`x{rh(+uNNJxMX^~^t1=qa!NN9r-H!y@_J3vrqdE)Q|Hc?JD5l4#qHiuKW>ho zH$*rr`D4ydM27D8Nk+yPn{sE?2HwL$9)#P3Vh)v*Pa>Qaj{LWC;o&v4@V)7`mc?TB zGz2tQg)Dd6zou#-c4*FKNQZFVe=tp1F=bsveqiB3mkS($ee;mU7Jid@YS+{MeF*0A zz2q>+Wp{Z>$XvwcZn8eo(;{Epfj$yKSoB?umgf1f(L#WK+EGQD>Sf zR43+1J{jxKu)Z_}$U-QiMQ&rpoe8^tAzDbQm|`!kF57^8xuw+ecI8y&4T%MRV6rxQ zA!}z%P>+cMRzIPp)=C{AWhiH^M)n+w>&Vev_fZMIf-5IMnz#1RTjGJ~7bW4u~NT$Fj2cW8)$qvL!gLewrZ1 z=w9bYlwGQQpUxP)qIH-6Y?Y z8%i%BD^wcjVUqp38tSLY0U&7$HLjG(rhwv1*^!TFMI=#T(Pl+6Qim?%b}N%@*dFU; z5yA{I97xy7VVQVh85(zjExcxXHhN&!D?Jy@!Q;|Z2!f=Mr}A0ZqayOX{R#*|e+2}8 z@6a1x7F(+PiwAC~ZpD5(T0KH{c7v_p{UK5=jWN5Qr0kwfxSsj3%>~RE?VXZpOi@Kk zd}Of`m$>yRY7^iwNP@P;_{mG|Cj94S;x^A^)7QXn()F-OA?IQ{oRUf^4^P5!C3aEJd7nf>oNQ zs1C6-`-ZW)o{rH=*CA?$&2{KKQU<`@Znc*mGDIsGPn4NmHI);VTHA19t~p=$1cvfj zcdZA5^#6p+Dc^s%!L*s z3Nyx(PHf0=`nT;qE9;R%wNgB-8DY#7H?tVV3oy83+qf_rV(xP*x3Q~hLLS>dLb3DQ z(0cxZxi!zVpKHvr2lxlz9OF3^rg$G8ogMLc9iROlV~4w|e_}N*)MMGb1C$V_a&ptl z#gxb3-(ia}8|DM@Au(Z&7f&6e>qDixXott?+6^b zIfL}<1|=+N>>hy%YjGyRbD#Q+aV#HIgf%AnLw^RTJ(zL0B`p=~ zkUAI~UqfC6@BcgsoH6(gDQ*n1vs^WnZE5tqGOqL0zBY!$`#UTNcy?`zxn4#b#!u<1 zPGzQPa>>a#hZh+*8c}4P+2wAAs(Y2Nu?dBUW2*ZF5FY;U2=mxBRqF95h?fzLR*jZl zzSJl_kvbYv6J!R!1)Rs*Xg7^Q(Mnli(sV!wPI4pHX$IVHu61GCe?)5>v^4|2BAm-l zd%Y%wg#|kQy6&rqeFH{!#Zib>;1U}khw}*?(WK#5g3&>v}A%Cpm^EiKcOrEmS za~s>#7vfp^Q5l9KT1fIh%#y{x2jI0&;BnBCE$;ANxrjTbq{{@VcQ*x4vX9rz63Iw8fan ze}Mrpd@6Euy4 z(%Ca^H~W4{83>zBzX_-{<*;?58qon7grP3rXVOb~KV? z9HMoN$o<50FT#iStSI~Z?)x4K@UR^b@QEb6qM{sLfb2I897f7`IvULtKVSuP*R3H-Z6$qUJLiWHg53~i z2e4(={xxua72E$15}W@KF>CKc$jPD>x{o`Cj%CWbZv@2VCKDW1MWGstDcq>=2w(0# zHTPr5hEyJ@zoQzz5anh8=IpwNg*g#HELm2+ke}QG)?qe2+b{)}v6l5Y+WCK-n!#!Rl~2a;t*K zaQJs?Uxox#Wd`ZSFdo4eyAGM-i`%-~5JE8=3YEIcpLEUAJ7&q zW|Mr!J+`d=%y^wdhXhWa2%4BT)AE<^zm&5AS%{TmV1X&4D-ZJ`!Rq{k7aI>VFEhCd z-pE!9EX`$tO|hC{zqI$hsg3$!N(JiGB<;pDC&#W*;{Uyxn_yD!gu+;E!RCxXl@At) z1H7_BVT(ADDsecFYy)^)LWiZ@CV#@HlEgfx=(nEO`>VW8Lll&MH7#)&oA@x0{Kp#tE{*-xfY9~1UE9q1tY}Ne)zxl4IC9qF z^{cd~XFU4GRH(>ILC>fM0!Vy|r+rsAq(fDy9Q0smhLB$GygyuQ8=5}mie)Tkp(HV! z!44aQ5^SI?&D+sC5Qvf;8qIKxwF-DR41Zj>dU7en@mh|~3!ZoyQ9Kv)*glYo@L$eU z{Q+A4^E@`K{h^<((tB~s&|^?_b7zYD(@DZhqVQDC#PhR$uJ@>9Z+nmuitDt~TWW@6 za+x$%p15JVA5z@vV3-su2ORF*>6e&FjmHQiAALrY26(NDDLXK&YJ|4)^7Q)RBc@gq;>2wSo+KXE5sH$ z6#9nf>c$o9~QP<){uB7df`_p}^~dH8KBQD~5>(n@$qb#1T+}^~zHlzej>*q;{ zgrRJGx__TlI0qLY{A52e^STwqF#AdNm5d`=^;}aWuWX3u>(+5(>05A#%m>3h!;+0b zF|UCYdHgG}o5eY|9YrKapx=Dl-*#c()G=y&I9Jtf-^@?KNode7Es7}`p7!iEX)SL) z<+VM%*|eFyVdcJnD?s=1%E#orv{^RU^2EgmGxcWGaFFAcg~T{eVsuRe!$@^6EamJE zq7|(IbHX|1ktMrSKTpdh#d5)!fSj_p%l8URTR;cdG%xH=j*uw^-V+UiPQT;uJo6_W zKOiZKwgTrrDj=vF>=+D+EOx#gNAfquOEjvG_3&Mq7ntd)h2EUuI+`a+c6YP@ZF~RT zJ|pr68QQR+2{X1wzs0Isl8uVBg1OLZykXY?H1E}7LlWQ#1TZek*l{d+1gZPs+i)U) zYr;l9B(;8Zr;DF0=dB|0_f3DOuC#Mkmd^c<0MoqN zZ1u(HtShpw;8VT2#M8MNO+|yGI>LC!fyKr!V?%{b9h?R(s2$-p5s-(1@JBM%<&A?` zMcHNhYn&zBw^ufde+36{@_nGN`PglS^u5_Ks^e8p2J~aSPAY^OdgS!Q;!!o#=o(Jv zzVKP}-q&XP;^~1U0iPGh7jMrOK9Bk=@UNXuI*naG+U>jb4Jc*snpvV?vLvTJEmpKiDglHGh(LS})Oif{K$R>rj19tAT_Uip%O3A@<{ zI0>yrJ|Tf8oyn30zw$4D#Q%0W7}1VC^<=Y<->ACXe}uCdXHQ(%L!oR1cbOVPN7|N? zJebzT%dipN<+)p5anLo=M9(UCruP&a4UoqUvhfeXxU*;m6UnBvL?^&lAtMj_-<+ug z=02xBYaa2cPSWBL`R)P4A>IS<0dI~?t$2ZJIr2yfEkEhIX<4zi7<>PAMwb1Q)&kd) zDVmpvntn(foM^1Y-N?o}zjtB*$2PCy`^%UQh_PTThxh2=zOP3ml^L+19W#&4y*@>uoQM-+S`+B{;s{M9nIy) z>({5yRd_#x1;9`?7d zx$pjbl(;?jzj7Ozd+wE|qm1j!$K}J8p$iX*n_FB6aQ`5RcJy0d-V@7sI&(TUM8$;A z5Lq^aUBe?2_$^<0;}kG_Ng5(49FhjjY>@7jZ7$hqwIilGeaAe&qPZEmN1EFn*E{Wr z08d`Lq|L3^)KYF5-rI>H5;+e;R@Yw+LA9cHVw3Rh5wDmkXKzM&NQlg<$G#2ddn@nj zP|KIYC#8>B>1ohnfB9-~mn6hvYBN_{%Wd2L!}eM#aOEWFr#D)=bEE)uTebiXL z%(&w*WVzOc3j;LdI@c4)2s!m+mJX$)x~=N!5Lo-V?_^As)=j*wJJKsxa&MbAT7oD-Xm5RzTG5lOwkqDZfO#NcljJ-#S6Ud zj#aI()*OsA$FTI|j`}f!{-lC%A3e1r>L5gO$laiTShb_;TddSv-4&uH2tG4M#wO~( zx;NWeIB|P;sh0Ou58TUdN#1IkTd}U9!wH(^^v4IW3_(N~pXA~%XYA3lJT}^)#3i}3 z?H`V7|BlQ=q*A7$1}@$-#`i}?WNZbdhnm^*u@<{q3aXmNE~z-D230{Q+%saw)wK{n zf#M?2{3-w@$tUbn%Ni3K?tbSS1H%qE{9U#4IH9>uV6eXmnLxl8{cpb>lT$6FM2Gs8 zK=aNrrtkVtz->6VVYgp|4x~oIe$bTxXo@8$(lyz zI-7^QVe`y-j-VJNN~DT^p_m2ahO9+2?Uij;wU=#?&+=UVm2ye~uC6;XZM}BE?J6GtszZL!CY4FtlD~eH zF@VuYK3D;!%8 z0440R^s#zqB(}|3Zjbe7Q`drLnCr1JZ-g3BDB@2rPNm{g!Z!mMkG~msVDsWoRzv@9 z-0GYToA{b#3+b{P(pD?f=Fn`(s;32h=CK*=q?h|#BJRG+R&!QY6iyN*v=xGKHcHKj zDK2pB%L7iGkMMLMTzd(RYR+gz6fm6gl-ZA)0UxHCcTuMAnn>VlRV|bO7q^C9eJeYM zLj9*TnPbuo)ln@0r5#qw%njD?n=m^J@q$LwHMhzRK_$YeVp@BgYeKL5^Ie$3$4i@5 znz8rq1*t7};!{E2+$eD;Ij&H5WqmPB2hXsVLg{1!mAqIctFOQ`W2QV|3+-{Qv4v!q z2o-h?;(#kMw^5D)jb~juXq0+^RueXTAdZcGI|GWJpGoMkj^qsx-=Qm;4q*&WVz5#h z`^=~(P9s8Kjp=K4!xn&jt=00bh0M^&6&iQh0ui~~ruS)n2QpS)Rr1Y>IyJJ= zVeu&HHImYmQbE207m!pRCXZ1}A7E6CPuTXb*lP&bLN&f&86R$St{OGS;X^;hdGD{x z+&_*S1oAaDmN~V=7HPe{>iD{9fW7iZfo{DOf+u@zVd!`7o6Sw#a&emqbnReN>YQ-w)a-6_mafzC@9uMVn{f`)h zB6U-9X;@SZ0y=1vE>^F(Dg=eM@w;(u@ke4WHof%$_Wcgc+>l)sLE}vK^|K*Vr=Zw0 zU0O>5#G}po;)u^neCe&#GI(&N&bP2F1l-A^8ZfRn8!f>>NMdHzu0`d96BjybNCg?D z6pj9`ZNExAOB17-pzW_7w>r)$5YN@6Q2{rN;;H5npG4`BA8+mW4Lhq`#8@ z(e*!+aLUv*b^PgV_8TmU6ULVhvnD7HA9T?#Q$9z}&O0k|V;3ryPa-onK~=S*I>B6` z!;3U}e~~GROITafgj>hikjMSF2-$^y`>H0CF2oD>Om5@mXn~E44>2k?&UK?ave0#O zxLAEtPcdKmb+de>8XvrUAdD*J^*{dw09-o@c!|x+Tt9Ynv{*?E-9nW3jath0?Bpa; zxNg;F^M`NKx-U(LxvEwg_IP}GUMiCTjoXq35k#Bv207g`%-p^D_8`!08S$2R-k&o=n;(%Ie4KZ( zW8oDDUk07SOKr5llP5aj<5;rx{{go^NWZ90UclZZwl5M|F4xVV2TRe|)!+saN~YZU zUHNgYq9Dmg+gNM18bo3_GWT=ELArG|ZCEj0s^Ubi(7#>`(4I{M{cy*r=!~ zW@q1*0RtcWq5pILGtavCqggFIHi5}~o+F13=|ngMTWvIi+(Iw4(N?}Mx(9c;gY|Sh z^8MGU9pNxf?&GRdL)=mshff~ce--X{S-i?(8NS;}Cuy0>7+)ZOTC86*r7AE0*pbwn zMM2^a>7p%J&ziM4&jiDEO9Wtdn_G*U&vOn#!E4O|43HLCGX@68UqtOCoyAN> z{Al+w0@Ev8`~|LPOSsr(xcCiYOT1xVi!c(mXcyu5P8doo9_FUF^P49q$9%7XC{^N@ z-}=}cZ?rf4m0@n>{oZ)V8yjbDI`?nl*~Y>nIxi80;c zx0YTDq0X@rOnA?F=*gp7*HS%BRaq@_85`5OtFXa|F$t{rmDvJU7H0Yl z11B)Fi^dG=7ha54_FjxHX_vu@pTLM6s(V3DP7ov9g^W3v)M;Y=CB-R;anRgw+@F8r z7rwIVa*1#4)rEnppLyjs!?bd%&vWI#TmqiRl}jvSGQA9Wj_@5aoVEC{Zk#iul*W_v zJaqpI*AT>Me93nnc;M1rbw8c`Epr*;>*K}}MahcI1{sa=d=>>1(-O%T;#ET*kyK*Mvz_A*j9H#h=J7dt`n@>@pbo74wmF z#qLM+2{S0Zq%*EPDE~B$P=Br_!g2f{OfF89_Hptqr=nbJti%FO*WVQU_*eGc`YNO) zgWYk9W8*CY23~N*rQdYpY$uNM!NJ$)0(dxRD1Lh_onS>JNBQf3u@IHAAVsZk!#lPk zz%#7|Qz@J_(uBvxg~m${t_? zz5Au3%GKe81Je?KerXDf*!^Ht7zq(ad?A*H;o%Zio+`~J&!Nf6E{-N!=>e0*bWwjW;J0EF>Yt@c1 z&%&~E+d+gg#u7^5ag0-M(&z5jVONY5n`v*VSA?|hT^LZCCqWWb*HROkluGmtWW{ti zs^NP+0LS=E#V>X&Gtpw$DDP%E;+FXG-pdxaqFsa+bw}B`P=mrGEi#i<+*Hzv2h{@a z(g>i#=lw9;U>QtfiRVOg)qMvZ{24pBFIZbWHut?e|KjI--Hnn*Tnq+quRI8Bq`sra zyHU{I)nq@49D5+XcxWK!;7c#g=pMyhb?P5VU+U5{FqReuN-3mnc%UuwhR)=YdoMa* z?3NPi?ymG4L~H1H_#g!%N!re9j3bEld_ z8>&n+k>H8RWWpYF+D#CvBupylRQk4Czq{|Hz4EgDD~ExXJ>$9eg_-x&6#JAWCV9@D zx(ZB7>im{@(GoO!4zy_a{nxy~0u*WEs$ThA6ULEe&nJzu*L?k!xB`~BjE_*&T~uSE zs63$aNTV#vj$ysRC2UZ*nXbe!{pc3yLUnY}m!sUKf6?6~r4$o1-g}kL0BJj!huQEL zH^rk=WmtjJOk$^=MVH+7@B{DqqsMpHJp^sctq#YvmtEW3IKA-;Nh6x4>Nje()See< zcl?%oI48rYGxdEj+>-FMY|9srIw%!cnry1i%-I!Vf}Gqo`*kA&3LAt>6SQUc`g@RF;6wQ3+Y8MF~#82lrOS}w1*LJ zI8nu^$xx{TSU9Yw~pv|wdI^55D*0XnFk>7oIc%wDu(W)f{lipAgv_`#T z5Xn`Ke7F`Hs@}@clgF;UJ-glBPh@=8_4oCS%AIPbNl42GxEWqnHVH3=iN9$VVfwvG zydsSF7wvK3%y^Qf=|_g5448^qX=DUa%^>>-VzkQ0jU0DFFmbqb?3bT>v|;zY7`R#u z&gX1=#?h?l{zqC*;sEmxoP*So3I|l30aC}WGtiQ@vDR$jon;oI7z`vbT>tFWn)M6s zJ$SStVb<=}PFQ@5gaI{UKQM;bfr`LpnAvCvXNDEymAx0^n`xNv!=^h9+@LtBj2!LJ zV8qvEHhkwi6;vqoMoSHaBdi{qOY2Uf8olW2-~IMm?6Ler(&{lkcIl6`Hn`z!ZquoS zU@p92l!o7w1BH~gR^prLC!cs(J;fiZB&?Te!-&m=D6ExQF^AO(ahjdEv0kx~i-B1y zxfsY8)ya-T1WJQ5;|rlR{lwiXO#I8zlek4&;+XzreheR!uEgsN$J**g>(bf1I)44# z$e*1P5AmiR#)ez;@;qgios}E%ya3l2KzfP8xN&4?Jl#4}oyHf&%;BYq^HG-hLzFdeeE-?FsI{08O1 zIHSZH1y=GlAvRQZ~Mki zA)b|9x{$VVFTe4^x6W*x-tu)tT`{8P_u_Z$9KEkUxP0r?ZV!XWiXW)?CDsM&Pn6Wc zo%d=(e_Ve4W%9SvUOSX*hUtl@G1f9)yLU*&IW9Iv68j%!7OtzkTI;& zcOkjJNQYuWQyr-f0T^a)-B%vU<7nl|WJ7z?#=Nr+(%AGmpM!$02)brGc>(b#4hJAH*18pIVly zwhng}r$b=+w~y{vEAwWy%Q83HF9$;%#-i&)KMa7X%``f5WlFv}bM1Wl)mgq(TPifZ zuHGWAWHLl*88eXvJE&5_!Z96zmHZ`b@t5~rw!n$q3(oWxSlaze5snP2%%IOILwJQd zG8G&LBk*KD362qIRiY59$6o*Sdw0F4EFJ52>M?Ns1?L{ehRFkR%{Ny8X1U11Z|QOZ zyoBkT`jRd_$FBB{Hp)Iu#)2Bt4uFG=i_c~Kq)^`5*H8VHy(U6H%QEU0X2J`c*k)MK zEihu6;o?VokP+Bn;RL=cZ8OYt7t`iSFm+H!ErBq{TI+R3-QjMCFfz-mtfXlF? zl~?JeoQ$bZf~j5b(ER@Q|343Z>fB=b_Wjgj;OYPAIrTV-9|2(nxdn;Eyo(~ZXoH=$ zp#2pY?(#QbR^B}d_FU+|#IU!a=>|^dTggR`0^2ed0~w<_O+s6AoA15SmCn~IT>J&D zSDF$o@MX5Zh+PI_`VE4UaN7Nh3CAR)OcDcAgpAIM}CO zZ#6Hm`>{G-z%rK(E*9+)LOLj+rGgtKonc_i^7ez5FxrERz?yKq{Wz-vT{a{eK2WBp zXkI~(@6TWQ#O%H|U%&50ySKnZ;wg5&(s^Z4^(P;zcwv(tO|2AHHoj&4t@*vz z!-F-*x*jsOHIYz!u_D5rsJN!{9~0s~x*{PL?`x-Y9|IJXCM6{n8!?iQ~0Q^xql z>;~KeGww5}KE?Jr>U+QRxkiEeugEYXxLc?rSIhIN2p=0M18$~FTAQ6})1EJuBhq%t zel4m`SOSK^<(G>IFoC70CrG4{_xYU&a$7Vfq59z?lfD zim}CMe$r0v3&K{wp3H(7FZCL-x=-xRfJVg76)4;iW+|)QFwVj1 zMGllS`K08+cG_yyr=2vMSi&sVbW)bNjPdz`N|15HrsoHA0wzJEPn)nB>9dO|A`4@1ip$_rDB%l9&W_CEJBhEDnb$~@@7uZW?w_`k`+}tvuzmMLD~{AgO8JIm_F_v`mZs^q z(&^*cW4{&^Mv#jw)EbU&nada-ui-RREMYEe;3Rs38oGp+Whr5_2N{7K1jlfJElamw zn3=Y~(a*;Lg&d{PPH?CA{LHKq^K2;yB}z?5Akn#Nr<#<9_F#dLbj3CSihgRp1aK3z zASrn$Lj@8Hn2kRfR!_K%x9++7>n||lTlcBMK#0@e0^iRk^n2$k-?W$AJLcL534*{4 zy{M$6uZ{9Abtx@#83Ut1%f|v4%pT+nrB@QgPGrLM3p3&9UMkpO)9DEZ2}QzKF4n(U zZ#j)x)5+pQNnd0J_Dv+2sd5V04iAkpxH=Kso3~FBOzubLr*R|X2 z&$?~jhYeZ$^Q+k-954}A*U=Wh&}l`uSPe(N&#VvACirs;Po(^vg3&ya1M4{+dF zwOHpXSmx5f#n7&1RQE7?R_ob?!LV^DqF$1Ubbyi|CC!-rgk1{LFP(m2X5K|Ou83oO zef(umgpk>gq15MVPD?QtzH5~j5HZ%(q?+ugKE<&-mw0QO~2V}`t!Ax-RF`c za?uT9&<9zM;W+MsqDH%F(s=11Zqx3^blQpJam{zS&2$F2P55Fuy~2b!DhbSp#Jq|o zf;x(D4D+#CjQe}YXexfiIez50lVD<>{to@2GGkZ*Cgc)Um<^bbDQy*{E0Ma?$S{W` z4CC__KsA4Zf_X?cU^(yvl%fKJPdJk&gXaJ7?Jxervx{Z7@5_gQqZ`h2v3F(t(~`U$ znr)ftZ+Qm-+#mvNuts5E{WpkZ_|VhS8xxG2(Vw(Bj9CcL9X3109b|@qG1C|XU&crn zM;=M5Z#p>*(J*K}>~NUJOt7)BiHUt~ro<)1iovwg=~35qxMV!Q=87|YZZef+U?@PL z&r7Pvgs3v}6DO)<=RGpF@Bi9<$EPnCkem%(A`D!{bTaOsJUtAx6lEq1E6Ij4H`!VJ z967l7+M01OpeDFM)Ocix8u|BVbdo+t<3dpT4Q~d)NVuds$QF2Rd=w+}Uc$tmb_c5C z%L#ebk-MusV^W`FK1(7n7u>gkWyzBpCY`VvU}BRSCLy)tl8%X=vOGIEb#P?*F(0DZ zG(IFG$WiSAb8$f!I_}(L^s2Az{_1N0d%X#7-OGc4V`nP2%UP#<=H&$B|3gilKoCsL@`oR**DIyI3|etm9^L zrHT!VixLZ@7fLWJ71$WgJa?UXqvk|jYm0wI^?mRE;_qJGiECZUg@H=NsiH0Py@j#Y zXn(oNv=Zq82Wga81|zt)%tbIUqD{iehlUc2mSQ@I2(j$=l)D5@h_OJK{>3nX5xWT6 z3%&>^@q5_CiUQGSf3*#NCF~JSF$0 zWTe&)I5FmQcq~8XfHqD{Kx%3_^Iq+e`%XOa#v2ZN!R~#@F}7S*)=DAF;>MlAK&tFr z=GfMvT~;5{&jWJ_?Na1+GqcR4jf&A6Y*bp;uhm674#jL}BE9rVRbb6<@uNMA5%^xP z5?-`>!Hd7Z%e&ahA6$cz>NI?(WTF@hCqy94%+F%wSiPa6NIle?NH;^#0R4Z>a!@iM z1EJBQU>pI1+bOw5DP|b*uLdDjt<{|ADr~3jo%CwIaN{>_d{zHkZ0KS!FcUYbVQA0P zO46(~?=%LURIpflua)?gxs3UxQnVyWDh-!RpQI~sdZjCH5?*{4e{EA1(ozfd z=tBjDMHOH=d}_4@Hd*3WnED)+C_7GlV|M-%@$t9+(e6LDHw1PgaY^5jMzRIWWlFx= zdbI~3EeQPiX(!A_R)e6|e|U!~tpB<$X$@VB-Z{z5jzlKICAVUz4B|lEG}7TrzhT^r zXPV-BF|1#>30rgz6OS;aM86EL3I;%5fpKnRhYY;=8~y z38tkDn=Kg%tbFwvkL2Gly~&w9Ij5FJ^P4o%mX}OsuekT{BR_q+y|psO-O^hpW{#aZ zGe0u{+!JV8C&Or`0{swMP!&XWwx#SX$fd#CbApzpf}ci!Lwo zrF~&n+p`ma(?^m|JJ@ijgChaNqgT{C3f->W_o7sS=x`a9_*Z;f=yjszOiWBUQ)f(p z`2ZU@2h0uh+ziVv`H)eWQjPeR6C-`&AB&{5Y-C(Geg^6JIoE38AkDBkfpf>;3Ffa( zQTCjPhiZ@h(jVURm$xD6?M9WXa|tl89s66pdfm25vLLOt@Zl1mKE!$SYX1lNgKGWw zKI+Ucv>7dPER#(P|}^F|nx# zJ>qJDsL`kvF)3z}zk>{$Mu?~BH^^NUr_8TkI)s;}A6)-1)@9)+G&4jQ4FLk8?s;jb z^TsH>2m>jWLEgpgpTCw|I*bRs8$F!onbA+F0?8p2K|`J_D}Hf6zdPsFu9$J=e#zci zIS9j}hrim{>9?A-r}$wIrksl-Q%9R<&&8=Pq1yo4LBD5E?)~B}MOeT5_4p<4&+OxP zgjMRjSFSU6VrJgiP_fJxW$%*2X}PVLLd-Vv3Qpz56=)!Ilx%Vg34LT9!r` zd_On|qun9w3sYg|CJb#J(Ne2nVjru=q|=izNm}idLPjzSD>D*jP&nfXthgmTsK|o( zr1{z}edVSf-hMjlB$tYx0{h`7S^-XA*otq;qr#O~$;IJn@TJs8aOD@w$@l4H4=Qf2 zcuVC!O#UW}7ZB~HgtE6cLmHCP5Q^MtnzJ7+^tDhOBUG$4TD6C)p6wp=i(T>@^+V6Ry7q6~jIST?NMIN?Jh8>icOjr^bYn0a z1#JA74OiluegxDxrwLbtHN(tEQa95Nq(i;p-e=5xaJEBJ6K<$% z;W9DBSPUj?#+7_bKf1-gSgsL+y<+pOoH{L9KDaTr!sZV9K}->ZP}Yz&|N@QEki`|&6K>a4Q#tlwxD zh}_n*y};c>Jj>E^rl9WG;h+O*GPaTq!x=4o6Pm{!bhG!XZo(z_se0zCSzsj> z15uW_7|0mb8E3q04uWtw4OT?XB*c=g5IT7u)*d&WnZBe!dtB2UHy@QM;-OQd)Ib;| zJ%E}-jR+eWp%zojg{lK`A6Mc_5u&nRL-lQX_MT;}&-AH-h>^a_v{| zy!{#pv-Wrx*nacP!Lj+-m(-h0TptfjBik061t_n4(~jNyyLVv9;;jxpwO9dFBf;dU zc4FAi`FM$Q+;{!M;%{w@D~pFQFaW`YMiWyGV_@XnOl~pUyOkIvN-Z?{iVAFa%M0so@%A;=!yB;fhapN}V@}SF}42 z+9j8nnQ#Kbyy8~PsZ=~C4%0IppE>mF@4w}DpC#ee9s>j6J?GTZ=5t*ixWycsI?Oa@ zEF{LA@6h@7T8%_0XY{9&o|*RW?lEfE6(z&rtZZW}2R9E>LZ=(zI(yg2?|Jz(b6pWm z^OwcYzSA6a-PI@Yr6gk#-C}3xj?w+58mZw`d}olPCt&g}w)l%(Or!WNaAFS%C!C(V zlo;JMRbnQ?U}%baUU*9-kHg2oewz6h(U>RW@hLOIlu62ny8GZxKJIH`Hz<4%0rv& zRJS#%#L)YbvNnB`TjbLCsd~d1Csk1SSKp}t`3NaJHX4+C9nOBf^(-wI8iJNwr zF~f^6=DWZZ(-42L8D3-t#W;Kycrup01`NW-CPrbj*Z|=q7|}LxBuvuMcPJ5QIpUab zn;A0?(@37CUzuCritz=uD;#;G*n3mKeKU=;F;$z)-umx1fA(bpYwh7Nz!i5-9@+Q( zS>SEOdB{#Pl~Ygf{lQ4s2KYtwR~^u9hR=3UkY-yL$IZ-@>NOuE;ou3qSrnCYBlp;J zhU2)cX=7k@eD!v5){aAUo&rJaSNbCHlg8aIj)e7tHN#A|#1)%iWk%u@!^`|lKXFT% zW_-F8gTYvps)Qyc^*OQ6Nqm7b<5RsLDhAVE(k|KpBWao8W>_(tr!`lrRh)g+a4M4( zC!O}rzxU81Z~6Fl?c~0R!(rSH-~aGr5~eTrt8N9$q@W3f^ocn&;#{e`@U6L-lJgUZ z^4DR-?{g~OhpAUT7!Jhb9wSa4a-*nPjtt4A;<|@7RX0Wb;-79|mbr}i#nCAgwKkay z8(%M@8YZGhXX*tyHV1rbEev zlla{0Qk$Dsqdul1aD-9s^i!_xA1O=G?uP2dSHG~JT2XTYfe(oagUq?+oab%`uKnlR zzW6%iVf#W6d41l$dCzw*iL=&A;8U-3pLWgBIn+#O#n#1Uo5(y<19tXo?Va$0MrY-X=lK-&zmBE>Q z;x^02$=GJIsic=$Z61efR-n#lZa&(YeaHK6|LD_9SnKYM0pQks_|Ri7$HvsHoY+qI z2b!yhExswgHwQFw42=F3dekr9WhLz1H5x92WfnuXw0HQ`wr<*T=Qekn*8K|5X>N}~ z|4wsMb*djuEZjud3GKLw9jFu1aS2Svr`sjrz3gu2@;5WCK+w-LCgTx!Gn{Vm7hC)= zhyx+%Fc-y8Fv=t2-~oo5%H^_Tt{jVTaxo3_GxMZhu}t(cjpREBu2-A}7)u3ev3cD0 zGC4Vk)0A=9Slsf0&6Cgl_C0sJ<%YX%u(wv4$m`+$<8OZYj8@Y4aRh^3>lITGmVqk+ z$wdZNY!g%;>4|<7x~QL`)IREaQJNq1T_*F{{$!9ux9@p}&pdbQql>ECI*e?Y%aVOm z-N`_&G?665Z5u(e*g9Ykk?a*t|FWl@o#8OkFyj~?ZKs5{Jq9?;8WL3UQcMG<<8tzo zhVLodO-$^^IB$#x9JHAW!tkOW1-8en9`z9(~Kp=L6@(_9N7 z>HtniX|l|k11CyrLFzwR@h>>J7V2;+%h*lrPG!z(IWJrZBqJ9dF-{^@9EGduaTEvr zvlvYzb%RtY1dQl8sw;cS!#f0A(i~))tU1wTjSDnxT$h zfDxjoI-vpE%ijR$=`_w_%TK4XYyRgg zpZ_@$P&1x&cQEkPhjw1pOj|#SL6sjv?HLBu_6jQE5=iB*GGsa&B+#gViFU5pUosP= z@t~y34(pcmhJ`ob`o(3~ z*akcI8<^N{;xJ3SLz|2Rk5Zd;(v|#+d8v0Y8O9m$QE7tkk>Qchk+FGL%H$@#4~$Sz zv}df0o5P;{$Jb?L7g;IGT*gEonilC>sS)B>8VFAbSH!Xx(2)LSTBf^K^nNfB)+=t& zpYX#QJ%P^)#JFOM6kbUvn$oK|86`=SrJ1ijDnq!GxvVVRVHi;>=E89`n?3W#*fW1P zKM*BQc}%&_dE~^C@40TzP1WJ+c6vbGcjG@?p8Dx)c}zniZb0qnJFR9N8)rN1K#%Cx zCq6{2%yvboh3yCXxE??6ybB*#pEX`wt?a!PW8g3HaF~)lTujAQgbfXjqd6u1bAsA1 zTpv%9_Rx(9VU)&8Sn;E~%nS-=oMB+f(k}W*I%fHbFvGl4r9jmfkAq3DYRs$p>PQ%s zKIv1AHp!1-Mu%+a9NJ+e8TJb!I47IQS~AYx;EXo4_X6rM=0Sg|$7*q{;)fHj`RX12 z_)4VrZ>V#z2!K32&CcC-zdD)DE{`x*#kP!D2S}ZmTLC^3Y@~!I+8pqkqlcKKyKOUY zts0a)<9wo;X8~*Rt7<M&mvOPn%S&L&2pav0Pca)aycpK& zeV91I!1PML=r3uBKi|hSB;+L1RHHN+IGY$d_Hj@#Mu41g0ih>n0fjH-kt3M_3&Nx< z#d3;2Z3&~TSrrBV@K4ELF!EHIb1X2Ri-a=R5IVD7ee=P_(f9w(uIn#_w>7}Pul?hP zFKM{Z+h&`!DJR4i!x1_>WjYLfOl)%nASbtTnQ;7OvZ`^-!4<|LXj71SDNRRMdFTZX zKJU!4?SYjgU(Pa@5~Pgc#ST>@h-L8=Os?MH2#@iK5B=pa!^E#FUDIz+IoKikJ!;h# z%ay~)yV%T&dB|htJ&c>YiD^ZUT)5{&oidB}47zJF5%q9VglvHRd0y?b$qbA~P0%Z~ zTDQN_iNl}aZFr^%ZpOMXT_t6zw6qSLa3qrTsOF@&nK_+yUi7tHU&E>>Yi@#y@XkH= z{fs*mUK9tA|L_qh1-ej+5tp1l;|i+N!H~fy2_9_=7vm*oO`Unyk6rp>SfOG~5d)UF z6frX7yC#1fV0JR9zqr`dG(sS04>BgK=^hl1;r-H=v=*DrF!2Y$P)6V~&^TxDf7nVY0PsJ;RxHopqAUidncTbM1DL94e8BMUGJ$BJpEg`;5_UNqJ4Tkm-5 zKfnJa$gBIKsuWJ2pBs1G{^Hqm{!R074I0DHX+{l5pA99oM3_H=lGq6_(JlKw>^m49a^@d|oS{ByBHHvi77?Irfw@x9+m4({jw&IhS(04Df|Y2YrS>9K}%Q zj7<|z`G}{E&c-|pRU+IlhNJFYM)E03OTtK6%S?BiZkVnx1o55vc8>_ipRzQ|{L~f5 z0q}&)i;a3+oi`SSo7BWGcfDw`k31xDj+fk0x_b#K+AND2Q6hkLSGnOw2F02&ZRSHe z1|y+_h(mp~0e;gADjxiK0rubc|37>00VrEl-HlJ5JNLf#;L)TgD1u6e?Grnws6oMs zAx~+X|uwOGwC1n zxY$ED=}bc_EzY#CVXl_DOu=w7BkC&myKsVku#+1@Q*kWQ5Mk2C8s;mP|wemp8T<|eEhMZv7YR$ILz}W=l||u^WCK_y<(RG zV#Y6@2YNROQy%^=Ygd#ZslM)t zwAKtwUgrX((x+mH6J#d5*vf%PVz7^6hzUQ!i%W-51W$;b7@QU_36_+H#6$vsdK9$D zyC#NKIRAp~f`=Ii|A>Dcz?|f#9=BJ9%R*gP=vO#xQ}k?7dueHDvbD60dd>t#8$))? zV;jAg-b{bNU4&G<~Z?4Xg?4DfnE6B{W9Dtybz?I;XKaQk?b{Y=j zO@b$!xODt5;f1!3Be!tm_ie&xWc#p*-I|PN1Z-ez)tk2G#nE(1g~Ma6H-WSw!fFjG zowR%kN49X?vwdO8u<-}?t9^bDjm)ErLhUH?MC$vWI+jaC?u!<+l^LL%h}G z=MZ4Iz@AGvH&ZHKcii3Y_uaMr9qdT?GUYM__iD3fygd66n2g5#niKA*mF&EU zzvJ>Pc$dNtDO=tnr6R>b;(U*V0&b|pDVq5_S4H8N8tmyn|0-YFR6hL2zyA4||8(WK zYyM!%zx&)L@Xd_J5# zAuT^9oF9G>3e71Ox7vwAXGNUk+`>`vR6-5(VoEqlzP4dDx6oe5Z|^QX`pZ{e{xsen zuQb-0{kG4)ZNsHs{@lxMZ7n{ep2LyHC7h_x;``xwaNrwyEp7pZ>%9!$4LHhSPvb0f z5TtPW*S`8V$Dz{s`S~0cJKntCrv1N#Z+NX0ai_kNOu0y<^4#*p-}>g$yVd^FEBjQd-F!E<*r;Qeux5AQ_~mr{c0Xj)y*I87 zbAzpZ-EdVVaenA z5(q*H#7Keo0*!7yYy5SC(~bS(bB81hALC5lig3&ewgR8u4U~N7W|ho#_Q_R2 zxe_+bu`RK^d22quZ}IL|{Ny`lzUlgHYie?TE9O}~^YyPj>ZaT+e|uYTao_FjMZ06C zgk`rF9mG%}8wH#*8~*X$7XH~KT3i${c)SnQdcAyqeEHrtF@;<2b{gAGXTba9J9S?p zzm8~_R5tR+d}_!Kp2!{LzgXh8UoY0XmmK%tJK1trfd)M2%PGMT5hqsRBTjQ zPrm%BFP{K9?zJ<6tK9tL-=6yiH!j`$w+r0`Y?f^2xl+y)EsAK9_c0%IOi{jU)Yl0g4mf!RtvJ zF9<2zB;XibJ(L(y78K(9c!K%#e7M|caM2L1ZwsdQvW4S~4k~Dj9aY{)xe%E{Q9Op9 zM~Y~IxQpHlSCw&CYFP1yq{Dm+A%G)-FD+S3$4ZD+F0m7rOx{Xig;BVrX*ih{+?G8M@AcUEH8Uywm1P= zMoKh~#;Zb4)lLA68aFJLd-!d*AwKqA*#x3eVL55oTd(Gd z?R~5JeDTHif9AXeWd zEL1i(PY6Fvp_%{1T@OCuOZXOt$Og%N;y92gmpHCW5XO=DP>2ma*hmPDW9|SyAw9um z`)CTIoo3STd{{`whlzfOqwq;=@j}&7v`lHRH3{X>#>%lK6igqp>~_H#nvTRHEY65V z9E@Rv`_DK$!4*e-+1xw_5tD1Q>bVy7e&ptgM}FN9U}%TPxr6{detm;ioTr z>F-+GpK{aE&6O6$ds?{gtJlNPH&FwIJx%snz(jX`UcgWBX?569<0Sf~EYDIkRxa0T zVK{p(G_2zTgS8#FN$yK`I_3|5F$l{XsT@$9Pesar%Q*mXXkVUvjLX5PAy#=&ffMIi z_<`f0NcF|4Ux`x_08qF--hf^}KMeQN7A(w%Pj^yx$g6>Z=7c%&#Fb%9Tq4$n5Lb_n zlgS*)7^&z{`I6F&D?4%d#=4HM>jYdcMBpOV|AP(Oa?F zDk(pETll%xe)xcofAUlRd`olwFR-q*R^Cv}q2FRW9=s!O;lnWhEaHwlLrT-Rb}a3| zqKznV)j!$F6Dzh=ZrZFXFqnVZe!I;FT>O{!_>*jvm~mwM&#I{qNVTu#>L@b<>r5K6e@hfed zmQ1B0UTTOei7vxQLr)SO)AiF8jsCZO>s?2D^rHVbyWVd;YpK0B+v?!TX&iCG`375<2gS)zA5La>G52D_Vc;9z z!Rj_rOmU@fJr#XF&Svuwyuibu!BVgAlcNqh>Pmb+PTRzh$-+iBux57}kCbwkc-&YG zg%yWz1|KGe%a9&_O?Xl0F@4y)0|lS#NNx-#3gN+tzVTsxINfP5AJ@klrS4;;y9YEP z0_I0qk_>q=h~ps@tzH^uT$e0TxMWElLlGQ;>7dtQb1$2)k!Kp;$Gn9 zy(~X|`}IeD^wLkf?biBjC$@|IabzHfe#{YYQ1>^za7+3e+N)e3sg*w=$AAv*1Tcb`oM zUUtIW?{WQGCd+7s1rDtC=Exp>iGCZ#cTbwBG+{O^%uhRwMu?Y$n-uQH-#KpgDdG-Y zRA?M&j@}C;T8Za@K?v+fJ`{gPX!vE+FbbFH(sT>mxkjaP`gIpA-owY+TijgH_Wg5y zebO(Qx4i4t-r~bsrGA-brs3YU94=`=s~q~!R)%S=0ba^r6o5jR&ssBlhkl)98H>10 zldBflOKb4d2q=~k?jG7$nfvXg;_N549J_^+Zkd^o1DSG}kWnLO7!PzkRQ z9M9t>NDbXWLwwTk=_CokFrJshh%*t7Jq7QvtA$ysyfC?AVI!%yatA?UycAv>+vo34 za7kFRrAWgY4tduL=R-6kCZ32_lh~S15v~!B`AOtgge&+!$Rb~w^d@bZcA<0FwZHw@ zOW%6U`}TJsd&lqjKl}X51?PR~N!QhXd+u)=+aJ2nZZL2)_rmQ9q+a9dtr|@`EhMsmtMSk*YcF#8gJE{snl|{(hPW0%vHL@Zn0hX z@`E1upsROn>T8dBHY_&fJ5^)O2|f9S#3*zOX2VAg?r?`VzH3*&meEfc$|7!B9t0;2 zAC=hRcz!?4mAX0f#i79tcIwxc8o8MbbC^KKdGAnuyx2?2V&mwJ%X=7S68sQ{e*RI= zQUprbaJd0m`uTdfb@CU#_w|bb`f!-u?)D?E`LnUf^8^2R?wPlCn`hk8yzS6_1(RA> zMh(@0AwDdTh&D{}U9xOA(r6@`)SC>U9@-mB_&&ls@%u?KEQ9TJ0fOC0L&T_D?yce& zAoN!$nTzBgY&wtgW zui2wJ_c_1v=NG)<0iXHmm)`pO#_wKnbN!~nN^{^W#=$u6#qx39h$pS(FmJ@wczhQs zx5~!v#)ScBWtD$A+ZqpSKqNfF^yBG=?<4fDB!2iUI$GE$$wN!gd$Hy4Xfe!{XRbNn zUJuNUdkL96fq!|8ogh+%GUNb1Xc>LnYUza^u;6|i#icE{ALhHq#Z&wwJkd(Sn*=60 z)7t(=H&ifA`H*MaU%}Io8@K|wjgx5OTBK=ZOe=$*XCKdZ`#8Q^I1oKHtjD1v8hg)B zJk4G+->K#9_w}EA>$Giq=wQoteSh12Uwh*cp>@# z&r^gU4*dhXIG`6sJjkP+Zj?R+Ul%QF9tTsNtzw1N%t+pZrwoLCg(un5;;YOM&nA#< zb)PLbpm-wxU{`XL-xnLty7Wii`#gfKNXo;`4&RD>HrIdTmG^w#fBpOOZfW1TrQWM= z?l(KU;UHIE1RqP~Xd^mH;d&4Kh|f;JbLerHD>`?^Jj;;chD^JO zD;IEK9GKBB^m5l8c))>|;CozNd6S4_;R6o%jmSY@<`}~PtdfNp`QVZSR#Lc9NP|xc z6K%`n7=rVoj>+aF*c6T+ye@StrN2`~C+7*ExfwzZ(aR_m!? zUW0e4um@Ab3bLg67Uj!PO#UUFo@A`$5TCw;Qx8I!5A$m@tz5la6-#^D{bs&Z>>P8| z55N1DZ~pe1_gzkL=ZE~`#c#ROSN{2r|LR-Ue*2lLG zP$(R7bYA!AcF;`c!yz(WK`s8!W((i{7j1EtD>J@KN{rK^Q0VPsV|)=Q0_eMzOG3j4f+dDcwg*1pBxnor6&GLwwp$ zgwsW?Qj6HA&&3x^^n5?B*J2vZM3UM^@Z96@hVWq|DF}t@b6|)706+jqL_t&thbd7Z zP{42`sBBWzO|Vnwvjxl(V~ZTnvg`qg!W=_IQOu}S3`$&?7V${JniJw=6NhQIuZ1^A zbD*M!yHwgs&0J@OH$s*$X-);jnSxP42!exEWpoc!9kVgymmOsS=rGKX2S2glgZPLC zfy+tnt}CPoWcFS-L2fz5H^Jq-`D(GyZZ;nNwQGKGGH$K>=!y9ghu3TlQrmII`9C{< z=JLz0dgy1q`PrAu_v#OBm%1AZP;ku-PL~FAJJ`R%;}%OroQcNa9&#@FY*iTDebDcUsAd2|qA+`>&cEA#^(qq*j*1owWmMO{iMZ4X^ zx7^KbuI+Q(9X8+Lzs@@4tY$31EO0CbGUYOsMavP|HPl*4lN6(h>I7EWXP-hO0L2Qw z0Egajc;nzPBu9cQK1%QC@ZJ+vR~aggQKR7&>LfEmWUz5)M)O5FScL@z)8joa7!Ria zus;Yw834gRKELbbz%v?G&{2C5oY5E%Jd(y#EPUxmnyg&^429Of4fRU*HL@F!>{riI(sa5h6em zUZ@V@@J!U3pkj{1>QZ+rF5*ns!`@4SER%U6B-f$#hG4?e$J=smbls~ps6FBN!@W_h-PULTgy zvKI(r{EvPdx5yI%CH@Q)X(Gnz1@KF84L&McmSec`Po<(_X)iSUbLHyK58ia(#e3^% z3(D`_ZfDA6+BX#G3@4N*5Lu!51NWE~UXmb73XjX;q_~sdO@hNbP^_|E5}yynnCY3Q znatrVVzCkv&lyuoZU_Q`*-!+Eu}#25Qjp4n%7qt+ZQzy27;{oDNKuJzypQ52d=h)o za+4Nuk(4PR+Dk|QV8CcYl2AqBA<92RwD9>jRp)}&K73dxkm1Te{$LruKvVJ zKD3t>W_4sMQ!Z1!C)WxZjZ7Kq3s2X=HQWVL;qR41Xn~T{bZB4?v);>UpV?0Vo%oIxmPVwX34aus!bdNJ3E{m%$4v%ptj5Z6!*(T0A713kiv@wqknVp-< z&102TtJ^)~y5C=a#(|f;_J07HXi4irpO#t24!!excF(**%ZB&$cah*iv7mMcr$%ohg^8UxjPAQs9`-!N)le zKn#Nv9SXVSl~RH#E%|Xcrv8*^eMrS}9#}A+6=i{4q`1q&!&PgWb}+0=ZPfVS-RPgbUXaP5Dt7l2FFM8P9OM zVL;bha9m;8+>3{Rf^unK^Jf`{9vY8OyCC|D7{EX2`#<@?(=oaK)}+b(bFVzN+*~T} z`@NrEee`F~KKWkrjm9bE+46mR#r}cq5_&0I=l~uUXG&18JUo+ratQAPJi%UaFxRac zkTM^Be=Nm#GYK!oQ`tK)cq4-86234FWfr=&K!mw1@@1h*+;8<4^X^Lw>#mI79i*h!ob>O8M&XnglDl&)bVkH;CpN8^RQ z5KsQ)sxF8b70yqcf{H@R1S=~lqM+T}gjmDvUj0pA2=ok>=#m!aP7om)h@egHxZy&J z8TCkPgCCU{QeoT%?s=(hs9_Wc_i|zSg=JBBsAxh%7~?re)T5%(i;UvRPdhG5a8nk8 zm(H@O=Rzk^L1G=QZo@F%+)Ncm^DpIQ%QYyRJlyqJENgw%C6`_KIbeU6G(Y{LPglQj z^*3tQ{O-m>>h+~#-t%7<6Z&!r{bIk+%3XQPVMkwx z?};xsGdswEOu0!B|Zmzl9PoW1SsCo~%Mdqd3K1?4>mH(PEXxh`&{;;>g2w{c<(ajvpqCf7l) zX$ebY3s~-5E~3hEu7C;!Z>o$v8RS{Jg`OSKA1W4c0S$tr7b=u>X0rh_sGU&A+$@T{ zR7rTALWh;wZ9W4L_$ieojM&1Ldt5t6c;m7n z*_MVUT5{u>IzvvGMH5&3+I2 z^okIqXtmeS(zb&DUF(o7Yu=YZlT;3-$$102s0yv~qIx7qkCEo*=X3j2_k$B+70vu2 zoAhYNckt);UYJ)Jl>q}D_=AaKiiby((D-z*Y1?ROGop`6-u1BIvoLts%pVPU7|46C zoU8UXmQMZL)n7ib*=i89F<;47u&>8*RlpJW%r6BW=Wm!<`a4+2K*OsC$a7ov3~fQh z!lc++qA3^9okQfP=oaR0VawH8?me0Bq`iaAVD6NKL7>5XX`CDi# zoVqZ2@=&P!7I5cFu2F1Od$s=U`m^~1nx%HNo^RwK)pGq(pK~+N4W#FW^Y~?Pz6v)W zf>!h(j3|6~YJpB?c3+_zdUPZZLX8%EpX|A;``!x_-rt=@RrJ{>fiZO;jNYaD_pb_>O=TetR}cIqE}CEw_uU+b5b zx=UTVU}@9r+#s(N%s~_|#6!b!h6bsRw76ZneJDsNFd2_W!L;g4^bnw2@F%{rCCU>5 zXnbC9j>jH@I9TK~OY!|M-|f>TPH7Fr_?9w;V^{tX_UlwaWq2%uGfmf#~LL#3<76pH0-z(HgZ z?o7MbFxWzU9*R7NlaFiY>EYypPBFKsy0MFI_v4Rw+(}>18_n#U!-2TEzH=zAVJhu< z%Sp14GCEdjrH()nP@ye&obBVr!6ylugobd&(Q|m#cE?#%92(&wQy20m5eEN2yYXk(eN4bIf+Rs zx58yFr!}lD!ZABS9HfqX@ZvMBuCty56`^Gm!--fv%ptI18HeRSTkFg&&Z9`d^M=dO z2MLfCh60BTfuSO09-u}|vC8)I2LO-(fxVue0)|{|;RATtm|w~jJNQ=T+czA#-|f%e z`kVQtwFD(f(=YljaD&PqG%rKsW$;c>2{iXP$$FASHT^8$Q?M?1|3 zFAaw<;h7+Zzk`Y98s<`H>gYjitZp>rLjQZ8cg{}_Kj4smtL1CA;tpM$#JiNMmMb|9 zi?up9o@s*ddgeMU=M>aE3~O+Rjc1UlRUVcXay?qL=E^{U>kD1xcTyuB*v*{G97~L6 z_^#nW*?JfUbL!WXz*j0RZ73BeUQQozNTyP8yaAJ~EdJci^1Okjx+=yYrU6BPa_V83 z>2_sDc`XADkGRA9E~h?u2*t%}eVFxrZn3^#yqK+Q$W?pg+h+Q;cmB;QPPY|&lk*|N zoP-0Ja+!onF*rRQiyIgTB5Pd&HmuM?HVY>dhykgAU>}DU#`FDtTE5%IiE|4#gt@#p zp~l__?z(r96o?Rx{f8WX(q}u1jZ1KQUza@>JMSGZDi}1=LvkzfQ&w_rg*OD+MPitH zu}N)E!AiAdwBpL3uq0bVe7M5+E;;<sL zd}F`e`$Yx!hj0jsN4N04cCIvAsZsuhoOb0VT`CwF=9&575R?22qw#w%7BJ=~EPsg3 z6gce3Aul9sV9o1rB^72-oS?3%ffvVuI67%~AuYw19Tzt#ETol) zX8`O2htg=bu;&76Zm|=cV^bsMC69UbRR>fz|2tNWHMu;tR-3asL-N>6IAXj>aY6=A z2t|r*3QBYoY^Vn+E*cebf}JNNbF-q94wVZHmHe(U;w^guCcM3b+&mk5H7?L}4+_L# zs;B@4Fd97I3(aRPir^v#&cE=~0jj2OsjpLxn3q9p*Yk~}((%)j$Eu=>BcoyUub zDV2K_h?pKmDMp7C*enghkf7|w=nNgp@Lb$>L+d&A2p{OeMIwD$m_I8I0=f~uxKgbI-jr~(J=3SKBaY2`z%HZMe2^2oC&a^F zql<+JC?`*QF3*&$SIBFKF-T??d*w0wmq*8t3nz-0t6_ebKU;nr*?xX~w{Wx^8G}Kf zN;}w$G^B;m9xE>?i@rSn(n?pr`tEI48EZvkr}5{1P^V+ zPqKxd1WyWQyvdAhU$i|YIM$>Op&lFYq(8aeFYb2xqu*ZXm2NFz?I$PSU5j6-K-iI8 z6!MWFCGpILe%N#ISgMq$SU}8_NgF*F(zYS7pbTkcN`o;wiEw5R5A&|alq2F;R*?r~ zc?fqfhFf%eCp>qKvfh*r>_Qoesp6K1I0Z~qz>Sg!LvIYt7$_e$07e@xHXKV>@E9KW zG-3yFLt3lG4@D85*QmTu;@pQt{*~B6M7h}rXyGtX>}Bb1D9--+kbMq0?=_El$wY^U z@_We4bQ~Dg?&;#M%UFvzTdaef)od-R#hk#Kl)!;Uw9@ zqg?0Iunj-4?7ST-#%#%N=|1Xi_y6x&zI@?qX{KE(RbA^FxE$_sZBE$chH#CF#*dLL zaBdJ(D?KF7iD@cw@|}lSQjpNEJkncd#H?=a@hgKOIYw@rdx&|vS19`*@8i|{WO)fZztg? z+{cY`hj?}@3xSmszZwGm^o)46!;;cs-s)Gmp3=}ZGK|S~=!BBi7P$X2$ zUHeY)-5{8&!|>N@&(}YH((xx=urn@hb8j&FP2)hOT++Cc1jDcxKVm){lHte9*0NvW z!>FNx@p0u2;{kD+lgI?4-&#IRF5 zQMnNRxv%`YZ{PLsqyBBCS8dMZvFz4_D#Rw{8eH#%SaiqDCAhSiM;V_N%p-d(oY?2k znDK{$Ay7=pzih>)tuWa>EOduBAwT8!c`mnLvct6HHzCME;ydC=26=o_?7gV<&G`21 zp!c$#jrE$rCoOCsPuSpK!^2KBfX#1-(|86ZYDiyw!tuu0=hg6HF;<--o?go0tY zu$wX0YLDK2sJzMEl0UX}#D?4bXSGxMRt~3H@;DTf*ua`s5w2_s0~&uni5ot1y+f!E zgS(+QERDudFfH_6%tQ*_^5;TEev`_k@(VfiD?GHv;R!CAIj36<5z;eOB8sbIJ8=qS{sZBr>Y}2KRaxQao|CTEC&~ujYa% z0?Fh@xIPYroBxdD%`3o2Zw2ARv$+67)^LO6t-E}+m`BE(Z$Iq~zuA9w-#6fB{$ERR zIFSn30D6Om*rr%q?;}(YHs&5FCKD_`XK$qo#ln3rlr=-+(TEhzAP(@vbMZIHuW;F- zpTxIua6g{wX(@)A%cAlwV#6sf8{_h1%QIGx*(xeIQ%sDkQR2AvxOZ=aSRFeYt>qM*Cisnap=UV00p)4?U4TR3!MPq9=7A57bG1`v=wJt}xnN~AfGd{`#6v(mnnE%!2mAy zA)t(huRGU$nw-`30A)aM@vxMd7kJ)KI|WC~b&$oAVGX z&3@^Ak-(sBmpTcMVEb`HlyNXWExAJ) zEA@+xZzt2B$nH%1{k-d`Z~95OTYlqQY3_HOrA}_9JcHf-xUv{Rvr@waWZjnaPM97! z>d9f}CIE(cqcK5CAp?QJOS)PO%)7wtD|o*gbW_ocGhrP0{df$U#`tAoKB*wgs7%bC z4UJ)K6ZXCE1ZApmr!<8;P0Fi34td41p z&>H95OA);nJC}_LhI~P}lV~%1EgKA^;!ShjiTB>%J@WxiI1EO^Z-EnVWCk zQa|T}<4^f)rdW(Ud*o*Y;$e^EZ?8?%`XXR{S{IT8u0&9=4`!jN7)F$6?2Zy?x6Yesk9&j(&ZmTmJc6Wfm$1cUfZSheKS| zS@dF}`4=ZTmecSRgUZHyafpo*`y3|Y2omRBLL+?HA>8+iH-1=}dnNc(5eax zM-!etoNk4Sj%?w{@7v5j2foy*rtRZX0CsG@iXUsd`wQytH>b6p+(BuJ>c5N{P z#v+eBh%tloBbf0Ot^EPtkx%wsxH^u#APVTv=v^pI2-mw%IPn!nVYF3#+2X7GX*T08 zO9x@hy_LXyMux*OPze>FbW2=077dS)#(FlkQW4D>&Q7_#Qf>||kE@DHtwOGrtL8TJ zWN1XKb{!;%-H5?{5TdrY(AD3t0!N8Au(1T$w#uOSt zw1ipr!=6!R%4H|8ofViStjLp+R=hZT!IVZ^ zIzEovakR#TDXwq(ah#BMpA360%limEcC!0HkG}Ku2On_IJA2LUtsK&7bG2B+L&Z{0 zNeYHSnECR174*x{&AVebG-g64f-ydomXFI2`qLib(8S?5$d3PtwkY*5QB4&~MPjXU z2vZ)(&)$m-j|p)-+TcZ>`&gpO)1+wmP0r-X{h56E%Kc_Hz4~t-{nB5rNA~QEWzLk# zlyAk!CN~*7Ai>FQJeqiA3ts|+cAQBHCvFH6EuW6ULR=qb8n;hZZqo77nfBx1!ImdI z@TAWao4JqSx-2``(so^=MQW4Y5g%Q?IgPvANVqUR9G;@x#i}tLv(EeH*{@MJhsaC?NCRHPtaB{zWt zTdSzp3Z+r2JLYC&Kp8XMa72eRWw?WzMqy?rM_04~z8xbn2p!V#g3LLfAJAraflEFy zHo*e}v2#4Y2q`7||KVXTT>R;;|M%Tr{r2S#D(^FMOufAXz0Bpe6+6zQgmk(f&%0VG z)l#leUv%e2MFUI56%L6-N$^AFPLS48J=euhQf01|Yf(UB{-OxK*ywsP@%fTakB5?9 zNf3oAH}Vg8Z0QcPF_svE*f96NLzH4M$|rhr%u5fe6IxU__>jtT*uR0ES+50E3r)=F zF4vP}TA+kwxY(g;ikP&R6DG%W@s+{_BaQ5QyZ=|rM?RDl+02Yn9&kjXt;)B(7X+h- zxqh>ot5#-mt;JTZR^HSvF7LDL`;W*dOn%=^qd`2y^=&`C@1}^7;G&!;s7v4@P3VTe z=s)-__qcN3nSI`ayUgq5VgX+iVxPZ+Kv*m?R+T-3h5isP^bhbU zFxjeQ1@s(yJAR|}OMhqE}W z)x*3AmXUD{7+U0R;+Dfh;|vuO=UZBs!{OYE4i&}r?Hq5542{YZhOg8g(h2>dr*PjE zY!bUto3WkyT!L##2}PoS7Coo%QC1M+!*?&kKBn;YxXs+7_oW9f4c{|+W9Vh#`=-rz z&-}9prd-*BMUSQ3?BzDkZR(f1r5k1o)qnZ3XFTOX-hQfbX7=90flRsVz`I~2rI9UC z6zpM`V7{$NuCUOraN0@qC{Xn%eiE+WKHW68@RR7-7)%<031CM)@6cb~`_A`zTW+cQ zTg<=U1YnE;QSk5_F-+pJ2O|MGjvQO^Z27jZOWS%oh)CWr|FXxHDM%y@Uob@p{R*c| zSdvjZ-wtsJW9O}0spJYcIhp-39-d0WvYCKJ5>ha}Vo}OI{k_3$!(Vt`V2(AG*tnoT zGNBaJA?A}kFy6-5ZS-;*O0)gOt*u{eC|6(i+-JP(UC+Mfv*XvW8)vegJ;{MgxlGA@ zst-n0CH5<8NYeFjhM~e8hAejpM|OxIg%XDQe#MpT!$S8;gfHpsEVDJgwfCTVJ@itX zn*51EyVv0z>D3C9Op!`~_q2f1Xm*c`LMA5ehSfMR&P|mRxOSLjBEA#)ar}u36PYwv zh%*Up+PhSID%dtxli^sH$_y_R!^){X_VsW@8HUK%3t(mDx8^^C{K&Bv+N?v&Glw;m zca}wEH~oWeV5T_N&((9k+;4W@*FF0=FL?i%$32b*lxJoy!pM+`Nz=^-lVoqPj1Fd%HyPTeZ0Ru{`C1H_C4$!6Y^C4QtBH}k}UHEFZ=;x9`c43Qz8$`O_!DO^bjE`MkX9?}i* z;{1MG-|gd)7d)hqy%(+?Ba>{%$OexbrWA}HPi`r(y}{=D(4+iV50#xTlxJ|P3j*1j zEn^)rRu|r|Z)wx(&v@EP&VSLdTe4G*^Q?MMrdHbDqK9+abKr7JicL;|s?R3*9(|BT}g$Waa*sZaM9m!}mMvyh^t)-^ON0 z6EGYQi4-aYku%8)f|zFtDjE)parZwb_Ib=dALbSfee2DzN3+t$rN8`l9Ipm&Ho+4f zwb+wvrb-1%zHrqbZ>{9- z)Pjv&PlG%c(bTB+OTAjJblriq1OD-}=RWVfS&xNZ!`^Q)i9vaH+V{gr*<wbg49eEQ+!Bw_&-ZZl9PTfj?Ub*X>y-ZSC69mB2eKYZ z($}%~h3_=su=f>h*X5{Mck4k_L79>&x5DCV}IM0He`<#1W?}f+o^T10g9h$hbRCZSQJ@GJK%0rJEUE$}U zrN(z;yo0=VaT;_3@4A2^fjU^-hf|Kbg=YWTo6DPC{I_SG^`R{f+L9eaNk*;`!*`sS zUBm&lmVF~(<%dZzgtl-LM-`LdzFT;qJqgaFv_jgu(tq;9ANrMkqkG{@vDSr>!I@(f z+uKmDQ?9rnu}Fq4%LX^K@}Z%EBo8Ra`cN!3SsW;6p8#?7_~DbfC*?QkO@gbu$Tr30 zWrm7`8z(uzZwFf<|0Bi}AHt*nQ_4OPZx?waXv*kuRjarx4*BKv)NG`%QNTCX#zCg# zay3`4H*?iurH?~zzPc zmpw^IgiBj3W3`q;TkwHEK@=ayPfv9HFu5%)c|1EQ+(X%6=jnGleg2{MefXR5jr>)4 z48SklwrIjm;0ACe4y0M&+or+Gn7Lkx72Xk8OYltqkPh4 zuaUhM?(pZtzVna9^zr5PF&L)D50_hUl5mp36<_wGcx*JN2WD3yV|XmjQ&w$>rA)U-;|qaZOYI5$HR_0 z{x84!kDvHH&!H2aGJAD#U{8NeLJ7+NF$c%Ie!`>G<(NJkbclL;s|B`fj*u9ov8GJ7QeTvvA=9kA~qYGID@0 zr&yepQ966t)}o9Ot`Oj|>bB|y8UdTiv$@%J@wbf|es|6pCq47U?|Q~-zZ>!^^RF%r z3~S-)%J&}6EgFSrx(^kLTGakLiz>4+D;)W06GtY*S9oYA;U$Ip@r6S>G(Id2PJAys zeq<^nI;H=WC%pLgcR%8obGr-88*7y+uI#`PvN48vqfm9_819W>&xHz##=(}CJ&CmN zeOtH;^Nn!)usHXmcz#?~RP{i()R;7EQ3ZQ193I2omlAp}oWJntyEqQtr?)5Ed=IQM z+`rVo`{0Q@#R9H!ZufeHM)&%;PVwwNf5x+3|H{X{@RmK1zbwt2%YjU}Ovz6kMkbjwfb#h>Qja{AP+U2>%c)pzpY!j16jTM&THneD*2%%%h;;>Q^ zPXaI$ZiM;9==%W^xF?OHe2pVX@hcJRgd?QeE;KwE<}nXH>Alr%<%-Ut>$&JU114+v z0e_V*3N5zWxipt6smW79IUK`@eF|!e7ri6%#QaRkx0tBQf>uIH?;(sc2uImC0pZ{% z8Oq0pN5JqY;c5b|9P2~7cCdDwipP`>${o_2WVVbragPc)>`5`iF*U>&E{8N5?G}`L z+cr_+pwd2WkDRZxix(Yx#L+K*`F+p$?AEPYC&`vbX7*mrfuZEv%QL#SWe?RAvWmZ| zR<6=hs99K4p@$V502seQ(rrU)>;=Uy(L&5N&x@jV; zi&aP%Z?WMQ=DR{2h*o z9Og0R;n`_+HI4^Um>=E-yo(i8{XB+}kR6v6)eZ7(!(&jUxL7PdgI)o)1>pn*r(mI! zxDrcgQwjIMBijBWIPC!r@$@kJ#tQYo*o1Nq`%r~4drjaYl5fLqLYY)%W^=738U~hk z?6!v=ci#63i``!xT-x`IPd(xBFZ|>yF8Eq@WWN8QtPMA7WM-z}z=$Mvl~rUUREF{> zoy`(RitpQ^<%dn<4(Wt`(hS2wziqCBkl^qPVNi6FN!)2N9L3>kp_3o^n2R^`W+jNz5RFi{l82|(l#qR$NT3`Y+u$82&Rib-!IEMr7s#g^j-mD0*g zT>5cgqUuDse9qLa$~%|KWV_>lgZ z41Iv>VlVrRgU5v}ix?B2c$_mD_J)^dl6dSE9?5nNS5}aIp5tQ(!thvouDs#uLpC1t&J!R0 z;BBux^_4e6nR}@%&sP?*`Z*BQz|~)nJzW9`06!lZTJXa{H{Bhyw7j zRySZa(GB%s5)Z%R4W?F1_|ct*fTZN48$Tw5Av>2D3R6Dft>G`j8V?Vn`1Imv3hu{q zd0}tD<%ydQg~#5PdSw*ud}xeMoOg*J3K_aX)m~d!Mil;b+uM8?Mu*cCP+~GJu#k-yZ61&v<4-b3A zjbFI@D{s5@#-AV6-&j7__DEQd14CWd2UFx#jb@N7Yfk%ZC$1ZdR*toK!zIKamhBRQ z>L4q^c)Ln z<21{1zzp*cOU}Jm55^h+6s}lh#jzjHh%a7{DI!)F|It2_abbjyd%tmM`sw@dxc5#t zOHK~3I8-n^Ik|}59hWBC#6RpjhY9)Md-5mp8QcB2;WbV6Te^TKz6~=P4fVRwV?u&W zoZ(i%iN^hIetUPZ{ozME;Kb*@{w05Z?)zWx{u?sI;=jrD;pR7=nQ1vdVegqy@#Fy} zaIyj?8DFR*;lzcf(IoyjcpS|=9rn*#{`t1M-SN)|_&AKOAu)z?u|oko z;ju70Ihlqyw$}&Wt+^wcZa!4fTp*!`ekz!Ok}(B?9?(cU&bdH2LwA)rxy4ea@Y%Z_ zdgn8r_~cXn;{4~m<%_(h#}dze)*T13VX+;2<*JzO9`hkFg}Y{Cq&PUn9~r_&O|qa< zqnsGa;|-~#!H6{uJ`SggUIJGmak;54$c8!CJ+6n}>)zLX`}^%V{JXP5^ejh+pCakhlL6waFz(QCmR2$V~=g;>pKXpFSL z2gWg;z~;gRt}O3xnKp(C%}|NJVH5NS<2%PK%ixd8F{iwkP61j7E6ILd?v^e%`jErV zf7Rc;=w~P9PaJ<ec5MH!G)AP)}L-LLn{(i@5yzbRr_Xx*-(T|T zkNqf9EdCoQq3o)GW?`RxfLmoJ~@o!SJ!bVC+BhIh5 zgh}DEN5f&Ue4h8%V8{wb!tmU&W&=Z9nB2z%46zwyplmRKm22?mdo-8|*qF+A9Vieg z6$yzz z1uWPQgdf$fHYBOT4s9BDRym zU-X=(UAnO}b3P^sTKjI?7sER4FcKXHBL%}`CH1W5LZt&mY0A=s@bVUYTvmNv#KFU` zH2gRi!zM9taTza+FTcGrOzvCn1@Di&5+2td?E|(XiAx2l1lMz2m(U!-&3iIs@_GO@_!ZKLz zlf9M%Bi;?;CLki%$Bo1H;mK4+A$}ZAu)9fi_PvHiI1CBXrJr%o70H!q)m**;!~Y`BmU^xTP`=d20lX{xd(#f}lTs_?#WPD@AlX*h(X;ibXi=uUz^ z92RrKO8s8JmvM1qcX`-R5%}^Qott^psD(?iqh$!(Zp; z-tK27b7ve_#sRO|ErVqN2^^TKplyde7ZkR<` z2eyi3$R|`}>o4w@uT#>Gp6uY{(_GYlWO@%V18)o$h6 z9UgVN=gn*G{}(r2ape_nzvfpzdl(K=yuEt^!%h`@DZw5|Q!so-?7g5+&d+@>e33h7 zlK7ewuH?qSg_mUWnJi3>AIxIF>Oy1V(M{teZ3 z<+9`MeveN)>H!b<0_RgM&V4K?$t*nMKq3b+<&wynbO1KwStF4OhUZyXrA8E9)WmIP zTsXsF5dJw~$DYYh;0**oLNZD4r0@hXgJ8=aB{J;MD^V`+J%eObS&lYFPxF8I}I~eAvVXk3*VJTN; zYu$F1yRz8CHp^GwK(g1%tbsWauY%gq>+4pDYi+=Ww z2OaUr)1UmD?>_ZDkDLdc;RkD!vY(6tlXD_f#sd>RU2mYENC?sJ}j!dJ_e)A*4FGvZVHOiD8e zFDaZ^VYxWJl!t=hlIs#S!pnO|?z1Qv z2Sz!NDVI@xti)#;!&PXtVk6BGP|-*W$GE9nl1!R#U>wm&iXVoHUVN?`ws69@q2KUE z385f+SHt%BC*R|z-~8^C@3>*{xA*B6@|$|-T5%YU(_tkDRNLMW77YGAaJV$Ngx&1p z%!>FG5*s%}Y7LPv67m;?vrjy&5e@RAf+JzN?S5`{^FG%;eeu=Im2E(hZ|Sj;OG2aVtR<3ztr_5;rSEi&Zk&)jQMhc@HX9O24^oQX|bc7e$ar6{6j#eC=;$THXe1XCY z>}LPTk3Ig%O~ttjaQaENg1sBfW;0ivnHkB2vaWd-DjyDw(GDwxc;FL=3-jS}3s1Jf zWh+DE3}xw@}u0zgwtooVo9%U%d2b+qP|6J}DKKSQeIXU_uUr z^=QIq85#zs^f5Khxq2I@)+jW+h>|_tKd5x5Mj=q3zvpm)p7T_~|l+zKOj% zPI$8i!?KT549=BA^Cd}q35ytqN1Bs7{AT!sxRazIoVfJa;F-VeHbbe^YEUk{T%+5m z-MqB@^v^fH`5?qu_DzdkW@j8&DF^udW@Z`=V9l|{@L3~Snf>0%IFiKQnPz9wo0JxW z_0BECPGrcxJZkHW<)z%YrFQ=Jl@jM%cthjxb5|KPzrvE(&{@KJA->}5tZat#R+2^- z*UwWNjO8n0`FIUi5aSZg+){nPmX>$mscfD*>9YIlneKVa%*K5 z8n%VrOTFCLcvENL^!ZQb?lOv>`7#bn$AM&tHyyoo6AKl1piMldm7jh;j0#9f$e%AE z1xH15BBOpEmu}H9S`ZMvUtts+d_tJPk-IQ&NiQr3Z?s%P9wgD()8S7&>oHf&^=99; zvAkh{%aL1n$e%Jc6S6GySGch-GMsba6TKM2p@N|iPkbIk(Uw`l9RYZ~48Nyg^Ep9J zBM$DqlHpfjc|;i$9{Lqdn?`w}V&Tx3=AAkSXd_^;(74aV-}vGS-te9G&$$@cZ^nV? zIglxrDR~!8=(D1-^4g?4+%&4Z&Nuv3B_D<)yM#-dMt;SRUvP!{_9QsOABVRrjlFzW zjAi29m&ZKh5g+Z`R{tsvWgOfdN*Ir`;UqrGB?ZGPeKo019F^H04rI7*e7?!;!{wd? zmWDG49pT6pJ=#u13IZj?PYNfz@Hm(b>>fIC^={)SpTFe4v&sD-n=;pw9LSW*l#Fxb zeN|T+U9@e2ySuvtcZcAX;7;Qnw6Vq|xVw7@lHl&{PH<`5-5ZC?ckcNYr(Wuz#;8%X z*WOiguQlgfui;lv8N07YN}x>nKGdC1zklBgDM^+^D|_kcfKSNu*jj;)i|S2=prHx) zu8u^em)xOI7lvpB*pk9M{$=I9b;JV`{z6kpv(pM=zo2JhiH}0#5h=S8ks%TDH@4rn z@Y*^=29>ZoKr`XIBwqLX?tcRqgrV?Pw@+t2evKZ7ZhY_8(p9h5p72qYA4@kq6ne~d zl3QcJgoL<3IiaGo4SI_+R;2T5cpomHn#P}i^@ZPC4Y2hu^=b`ib@i++7jiw-ltx4j z(9`>|+4^aWb*!Kai~CmkQ=eM`!RwYOYA7w?;5_y=LpFqeXD7Dr9=LNT$loRR1&2ZT z<=TXGscj!awyh+sU-q&y4=O490I1q9JNK5b@nhQ- zffp=zNQ=f1$*4g!!Wv)di_GmFkX<+pz&wsFY{P|jhD&pC9NQ761j*tUjQt|Rp9n>- z`?paU1csWqCHZlY(67y>LeNnwu)J7kFAIL&EP9amcdV}5r|xgxbiU-Eli0{DfB1md$23?@@e^aVuvLZPYT(N#+5gA*QnIZZx8d~m=qT>0(A?lwBA;lBIg z(dy!DofOjcD&#c&VhWz+zNodSw%0RFP&?JMDm^C3ophb#A>S;&WunJ)H#E~g zDXP7e=n9VQC=6S9)GKSF7YgjT zIOYh=mE2arga@9CkViT6w}DXl;D1v>dbj=mU`N9-C*?M~cRFQ#v-CI?LO9R9&KnQX zE)Mu;6fVnvigm`dul-+^9SyFB#c#(GfX1*S@pb_5WRw(=Zs~8OL*;MmsyCo%B=>>^ z&fl{*Q6t43?uryBhtgLi4aG%VtYmZM$+S#EDl1A^|3ok@$jKnR8)U*w?*dVLY=EgC z76Ft-n^`)9x#GQ07B8jSldp=XSwKxqz9RTUtz@9j_b4I8Xq#x|A=0@K{F2Q4(WFwWiMJgpRbb5wzYxOD@W*Qz&1_p#heMbD=C0j?FjY}X@gv=T$eunt zg@bp7{=3=1kS57WC*rH9T|=|7z*F*m$A$Afh|kg12O2ra+wKn^a0+ouMtm%Y*%KT! z(dLAJp$z_e!cF$QuY|@6=!5G(GLDXIXpJn}LGa|Q({GGSw3)j_%C94^aNNkm_X0_q z^6&HBc>Fpra{2-Go&E#+PK@1u@I2>doE|ZlSYy681>_Q(52*r{DN#2*x@Ie{#%1l} z8LT7`e3Mk+tx#}TsUyFiUG{r?QLC!{>c%P5MwvFGgUN@Zr`w~2t ze!EN4oWRcaG{>^XE3OaJ!2Q8YrHv6XGxnpsUyJ4~ZBEE9?oLEBK|;6x@S_UzC@^X^ z@yIr6u9w{D^YOsx6qb-PW`o@5ZE)p6+T$i~Bl8&CZb)-k2BCoK5Ar^OW$^G0QuB@nu_(Jz6&xjQH+f1fug9k#6?kvrgIbP zL|PN*M7eqQI!??|U##t()<-r&EcZi_8gVezU+}j)ngXP@*XZ<3qtqhX+{_b$2JGDa z``hCYUC~6dUWW`ZGS(^L8qhBaKZT7Ey^JFpUf2oI2mqN47JKyoI!{vrom=r4_z#wBJf~3aSeu&=!b|)&qPxRn*NSq% z5|#jWt)Jw@lwC6juSn!8sxIrW(H^1vWn*`}T)9{C=PWTdqa8j`ZHq#}j?qYPMLRFh z#Gf>c=ch)x&^5@9p_X0F^jl@o$ZBa*N<6N`hs=CfprC}s+o zVZbPFl36XBAaeC)AYX2^M12kC-xe;>bW_d0W>E3Pt_4ky92E^z^NqB)1zm| zWayx|4%8^_soQy>q_MW;TxjZZBF{UQpVe4Tx+GLmANF2dz_m$P@qbFU@^dIQda8Qm zbvSn;=I0PF;w)18Vq!)aI@)^p=V?^B17D1}@(?H-jT{wKR?Y3xV;v^L9-^)*XM!-e z_I}#Y{D1+UE?Mizx5SBtUv}tZ&E2HM>yjh(Gdtd+kq&Ni5H}IABv2z5&sLcLE(5S?>Hb z&(fU23x!hiSRfM1q%N~(rXJyCLq25PEL|LQPngO>A&*WQ6%RJ`lIi61!3mA%B}Oi+ z8tlDk*CvGnp|hXVmu6-pDkIkwOTcTw8~TE;d-%D&I7jAmJ6}oQ7owfQnZT7uH(>)B zj22-wp}2y<&u_ryx68Ecm?%l%Er!_B-%dR?AG{9ZX_qLv9H{OeccNPv=r0?+EHNOv z!;}N24>Pxv>VrO3Y{@c_Ozo=_xVCB%D0klbRkUsKk=uZ zw|DjpN@;+p1RC(#BS4NIvLB?qb3rvJPT`u2_%5W(-yMw6iq+5GduWYbUycr54ui6K zU(Da4p?5!kSMeJfJ3AgCU|Ez=(^`yqlBJ!WNVIda7E#gp`Dz;+eK3Rygh2;Nh)GRn zKKXgr?x~YK9mXZ6wQBFOa}QG1P zxRoz)hL#mIusx$X5F1qUGjYquBO8JIG0Bd63ZJGk%f<#R;C#AtC@Gb1kPsgI&^gC} z86B!!bI*5{%kaL=d;O^LUE_4u@f$M%Dfu@V3rLXS9n$GFdY!LOcsbe z@42zPtwtI8hCSfaPT!4x9<3iQPlhILM^N1nDPQ8XBrOo2tID1)z)&SJX?9L3HV)>h zI4dD+S=4HxHAV4Q+PLnf2Xs;zwN=j^HhPhALq%F-fjDSUh0j;Q=o%NKDG3N~=PRbT z2fTO+cNMtE;yYjHbZoX$8;R>0wV1xpUNw)c28V4V z(u$HXdo{>b0G5MCzOM%BQ;feX8sAcX#y#K_@3s8FU8$TklzE5=ZVDNzCeynfXCa>+ zl6zfw@o5ycR(!pLK7VNZ-m-k*cECY1xOgyXcTp37pE;zWo6Adfj=0rUVA@j-XScqw z^8)e9*BKV;#D<{p=V9Le?g5h^uz!_MZYEOM0`hjT&m0ua62>E1j*`uoo_jVD-8Wrs z8IgM)NUD!&J2e+|JOliS)Ah%9P-=T;LPy`Yru^?tHe4MgNBua_q)2qKW=!zA)?rE9 z4%ws!4K16tSg}q?Mt_;m@`;OB6Asp8?cBc+_^CmP*k?B7*+Yj0(t4edoVgpZL;KiS zM=a9!aCxgF2_+U&PsrcT*{Vc6X2ma-OB!o*`)kdwBoumIgm)9!GU%|nU9Z>i>0=G} zcldkGV7PpNGB*7^z11n3Us!h@u6$^vNXRYUHqYGuMNy+wj`TqjD<%nrd=zM{whlL# zU(N*_pWk@9l&j3SymOpCFlB|hUl3MIc zew^kZX_LJI=n;J5fsvB(=2h5I+?B^Ca!2m)$Cc^ejIZvBFNK6x{a4{&3qoqn#k!Z1 zmnwl)q&l6A&-b8+@;FIQCL&PMpI|Xe879coqG}*n5nj@lp$@glB(Y2P@O+V>Vd~*Y zw$sI0?t|f{j8<;5Rb6IiQxXw);M3WSTx6Z-MIZc#%kPTaiB*^Q&`T<7<-f{Oxb0OcEl=Z9iZ;r77Nx8X+7mgpX* zH#{-GUg7~0H&Wl1mMjdqcMN(F-=aT0am8n$&&>@Z`)j2-`NkgP;^ZsE+UK|q4&!1E zqqbdf9c+1(p+K(pr~kIH#U2M)yce@on`*SEQ8k>$9x37{xG9b*^3(;K(rRWQ32YcX z_s#V_V15w52krGwgHniI#-B=?JqfaQl%!`6|7H07nbGR4uMk-}GW)a_{?st~L1_FQ z3CcD~=Vz?VUnt)1#a;xQrc(6vvhk+Ey>TBtQCdGG!P5+H)9x{}4wbttwi=v(>FyvF z{dNtzO0`y-t5g>J_vf$+?3vM*leqt!PquSFM5PKk0!0(9IQ1IbeF}$P{=TTwaOCd| z6;00+F4VjvEse%GKHnyRd#wnIR8-voum242H>T>|j{k{?+TBn(4ubC{2yki(DA3^L zYr-9Q0sRJ-=>?yX6PH9JEeg^3Q(T#?X2i#X2U|^_Oc&te`U& z3tgs-(X|<{-&_OV%Y*dATh9<5+O~PD+en}rC5byED`%h)UJjKR$)y7ui4c(}?? zcY#S;3Y5I0H6Fn$Lo9jfKHeF3HbybGdDtaQS03J&Tp#Cj?+)79FGp13bFkRf8@whpm&&Vxoy=VTt+qp28-1S3xgYTR|EaQ2grcL4Ho&vgXd%ps^vggH-- zd|xx}fvEGI6mY4wQ7-)?!R4}JMhz~Ix0Cfr-xJz0fm9P};cnMTqVII)s zzV|bJ$*a6j@}kc4zUulE^3Po{`cVPiam{7t^@E%4vn8}?@q+~gdfUnA5a)J&`qFv_ zqHt(Pf||7PpWXTt+xlCIS>knK$j4s)l4*1tNgyDqkij3m-E5#(6}F@{zXsCbvQl-~ zo-buJCnOiF46P&o1ibBgz$kzw>))zss6G%rzS`&=t-05{nfLlk{nNq~{DIcL_gFW_ zThQg*qE54cvVT$tb5rI?^1mi+mcuAF%e!WP77v|}iR=O;G+>*1(k=-}QfBRTzP?eV z?r9^xAKYxTZ?`N@`Z~M&X1dXmxL-4o{Ueo6QL~8+LUt_TJvvqePgh;i2z_X7R=8`A zLZPDP7<_Fvgr7eu2rq^3qT3>CkAwI7qs`i#5!4T>4svsOyRtWA<3P!9rmaYi90K?b zxI62S$9j6SsS+Vx7IH#|?PqdftJKzMc0g~plc=JiV$1R}VXzrm@lpB4A0+Q~rHM~-pbH3HPt`ee?+8?jVv@fYcv(8#x+*n{6A3okLmCfNWh1@b|j&Ae7; zkBcEUsBzC-i==+jXYcQmYR@1Y->kkPv!!?S#sN|w$~0erWB<_ABgs8kFq813q`uRK zc<7KE9(^bH!5sx9xwscKFK4k7TEA@mBdsfI-UkFXsq_)q4302!?;KshkN8d>-+96~X^182U zC3aeobA2dlq-J-^_9w-5Z8<}iZzP8FB;ADYk<4cy9K^KsK@0!gcij47SNkB4$lp#` z#Gf{kbhhKBLJIy;|iUA#}B3y+kfv@F8^ z=LtLEeLmUTnnGnaZ>lMcdIlT`efTe1{`?_Q;P*?vzyr8rF{7k)4T(RvSsUKP*EtAo zy`lR^R<5;Gu5SMpStU|J%)&rhl6V_^a1a|ukMkz)|Bi%DNC=K?rbt+lP}h8*JJs3oYEPS%3ke~rit(Gd(|*`!QU0BI zo+lW1MvX3doa0i2nr5=0m`4wXzOT8|+Jq;%%M8N|s=q)oEb6d*Hz>dDP?i9xEHF?$ zS+zJ<&TmJsTQ;{O@_A04b7}v*CsG!>=zaI7&#M~mX#D>Z%(2E`JPld1{3AO#_P)5@ z)Ge=SaHQ>~>834a8Twg6Bb-eGhX+%~h~rV7_n*Og=1^rVaorV}WK{Up|0BLPJW!TpSh`BYvpc_1+caroHHAq`8riIoXa`Y_$)5 zoCkY>^?gs;;#{U$4ziIY)TkoytlU(3q{5KkuvVa)CWwPL1#=4yk>GN^3MwOtoWX3W z!NO0yeny-+8e9YIRl@yIIGrN6QjhLyWZ1fK$~<;`>n+m@I5R7UBiZ0$k5rh~*E_n0 z?xalG+s?=XJI{pCfp;2H^?$t?($^cZZ9nTQTTB2+je{BGU@Cu3f3;q&tZ&vBZ|n)G z)R^n2G?k{&0At6`AI!3GK=f+F#!xyAe(p7M&?jq;HGt2o~As}{4V z2LeBSXY6Zyb_`bTpNz8OC6QNi&{3;5o}Z(epdknpd=ok~@9k6OibB+m)=c2D%Z^qL z&U?|u7hWT<_n02@jy;0qE$Ro@L4n%grx7#&@r3{hl-7~Sx2!~RK#)$S+}zx- z*}pdd(8&JK5jdULd*;uORem}azqX5M$Q7xVz|3~>RK|0+Z`$N?^RU)Mvd1A6h6AJI zJ(Jib8&fiSed~ZTN7^C^3W+>ZXa=z$zJ~fLlmN6pJL36cKU_|=&^cxMiMiF$+}BwM zu|f7NuL1t@ssjj;ixxD)Ugu&1P3Jnp4b0@a8;{#an<=a^VMJqE4V|hmUj7WjzhstN zj%an6?i}n4SAw)NxhwjV!A)&~>wO40(YDEP3#H8a zo(`<0tFw=!~n(CORTchC23N{ap>@}&0e%Ti{{-jQ* za00Nsq9*|C!@D0JA~K{X4a^^Tc9rB`bMF5X!sYNNg?;Gk7kSlcn)-)tCp79yUvI~V zFCX)R|HMDnsW7(%^$tz3s?L3Ujg7L-$~T3`^;V(3v-fwIzEoLb*6y6e zXV&Wpt`*m}+S>LX9ac7|kKo~S%XJyRs%% z^aapR@b9no`b0aZ@0g5UZOqn~cr`rSCmF}bTW&3r4-4n_>WC;DxFtO?2fblkeJUYL zN0CBDD$`1=UO%vN%#UVS=GQw+<;xU%Hfv8wURMUSttS1{?2MjZb}8hU`}d$rOOIr~ zPZ&Ax8BGbbUQIJ$!`?I%j+^tMrOYw7GrLADz2WLp9hk_;*jl)=yPKl%f|GI=8|`gF zBnmcYx1OJ{o-#YxF38SpvRpe}BI5jii05Pgboy7K2m|pb=Mr1GH#Duv$maS8w8T!% z1+%LbCjSIaM5LlpbKrY-;vflp58Jb;1U!IWHpE;5na>yXV$QrhTYp?UzwMhq;E3i# zoF`swS>MZ|DhU&KI#tu=7inuYY{C6+cz7r*AHSBq=okn(rVfYxH0O>d;&UJYLBKGO zfmISneylf;TpNO}!Z<1_2u2puKKPPDlp9HFw9; zow*2?V+4Ue4PrOXUv}aI&h@I!GhxB9&#@PRL-vEVRgKMBG`(~Gq3CtOGj`DBwQc+^ z!RRjw6Wr|DZZc!S-A7$!*^7dG$*Vyoh71p~-QbQ&-1UlS= z;7y>)vl1>P7pbOe=I+)|G;LZ4M$~&h&9Jd!iA`qk~3{kewyK9eqSLkW>aj! zF3*L^?_IM~ZNj?Yld*Ww6K?lleB?iIJ zxV}B8BEF|_=)_cSa^#284;!n<7DdOFGjDQeGy_m@52UBBz5Qcxs6%&CY^}X5XYm<$ zy;*DsPcTp;6I%+0`Kc5!5qTs6i_$OKTiyfLCu{zaPA#;l-)i zA+AxdKX0$D3q4H(UD^{D)q;P@Qq29PsmlpEqI-__-WBIt4S_R&S!br=XdVgdTkt?y zm9~w|CCDMFGdU?f0tsJT6o!Gr&}Y%Hwrlg4{Pqdor>~!F{ekaC? zH}GiLNoLt=)SfDiu!pV5*wY3RR|q5ke>{@X#T zrKov?p+{a|!6OBi&wp~`0(Ki}urp6m6KuE^N|6AT89d0kdiTYR4?K`x0l6qhGpa%}^gVu-A zcUG7z`_;|88u}R?0U4gw&9y;S*F)vxJc|DWrKE^oS>hhS$@HpeB(8&f=1-fLVXUA< z_z-h>#}SFuR#Gg4@wWI|0_J_;fh+Z*tauhdwXKp*iN3}9Cc|z>8&YG9wwzTy%4~jARuDc#; zivGQzq54%mr5wQq*MGOlESX+28HtM zleFF0H38rE7SkI=7+4Emm9(u$Z`@M;zWP-=dO4xas%(91YLBk%R_bleZLpQR81hD{ zLOP>!PbOI81Db!m zd2nxpoJyUYfq90%M^KX<`m1@al^)2MhGM41jb6s*GQYIp6i*=_0FSuLpK}9wIY7$K zlVkqg3s#mSV#nbp>Uwqt97e1SrjSfYdKY#sw^voDIsl4bzCh3EEV(dLP4b4gE)EuM zw9H%nlqzDFBUcdGn9}NGQ#Evxb`upq#5YD^QJZRR);nzV26;;4fQ9SFL|7Ha(C2%^ zgAqMUCS-w*Qe4$8R?8dkzvM7wW0f5mUMICUZ}vgy@l6*>T&fvfIWzO(V5|mm7__Bh zVF8FuYra%`CaH>G{J;d=&%dg*=*e|B&DbNgF5uM?{(%so;F9yX zs0R^4s5@wJ42sG+W@xnSboIu};mu1 zyS$dHFT}6mkQhbKo=f{h@S?OZ1|cBo>Yl^#q?0siIkobvBgd92WcCl=CYisI1UUx3 z|Ml)W57HhjJ1w&$A$~oLiZsZ;E+Iy6)4d1K9%m{t*lQwTXP%F?x?mc>52`O0-Hay| z67|@08a{)O#XQ&wx*u6WGe2|)iG{}Wy##&_J&Dkz$DcnNP9yW%)g~t!<{WdpC;v>z z`Z{zDJ>fY!WOd%W-Hx0YYcFgkGZWKcp2k9-hKj<1{l|+%d$@2`lddl3#km9~pEJFb zkh#t+wK8eZEhF}kiIQM%E~Q_D%4si|DGGi$1{v&Hkb%5H!>%FD)^`s;i6jAkAr=g# zpxe}Rst0mxO2`w8Huu<*{B$vbI?iL7r13FI@WVytHc{PlT@3yH5uc=qSN&lySD9dwjJT*l7{i#NoUFmKemz+%h<(jcHG(HHS?a;SQT2GG{klqsF+g-cJTb=B#bZ~ z4wD(#2&7;4i`E#|bR61&koX z24Eu{>--V9FUo!vs-W_EA#G#{<&+A#1z;*mV8J;>CM511h9IZ4*YB!tFL8ETv%lhR ztC=-O&(G%>UI(SUy@8eAXXPs1_J8Mk+{6c=xy>E{q|eEm*iN&5RBHz*-jz5Na)z=O zlq&VvO8W?UYx!2a@+F}Eg`S_JJp zDK&HcLWY2xA~al6ojVe(=Cn&rklg1+EK1+=ON|RrQ%H8scNub^J|J+lI_J515y*8j zhQ`WD7N(f)gVzs>$YLH{E z7MTEv8<4VS!()8R6vO{nlNWN(WdI`y!l*l0zM)+7_{C)^S$t+dy%Zd*SHal&WT;PR zt^D_!y+eHWj~Y@lGn(&lgb7-F{tJ>*FXvP>U~M_nSe=j8S)9EsEIz;=Z};!frO$KI z{Y%h6k6W`*Rd>>Hnu~I37?}>v=q#YMr#mbxcR|~qicnC_D-Tz4`-W`$Lx4l7&?(CS zxU4H-g!ynmShqn0x?FPfs#s@}rIo3yiA=~rq(1j}tQ}$@+Kd{n+F&@Imm*E8(Uio| z=kAV)c674t>Eld&Y9O#H;HOxv2{vM*Q7NY;vqPtmDQ6=(d>SL9F-|G0vRGfd#hKt> zfRa6@#fWLZPB*Tr-xSg2GlI1w#NDKq>49n%|i{g96h?*jkf|Df_^ z>gz96Qo%OuoYbHU=rU(FvAi)w*($hN{6&Jz4!Wu%jx!Ld;^G6?>_>~JFvnp_{HOGXJae9Mz=JeJ{-$Xx0CIg} zlzTPiSTR7HDby)l`2#cX@0W@JDuoOjsO*NOi<^^mhriGnb|{uUiEfdW*(pwIZW;+g zHPIuvS}YQ+w{KIzL7`UylQ@QJLoAl8Cuf10N1{AI>oY9FO~c=WL0YkHQFttRwX~hIS1W^jvaEo{%VDWsZ_U}N1n8_**9dJ})*iZK zdx8#NC)6NCo`mosvka(u7U%rJ{mf(d&g0j ztnIby;#sPA&e+9F&VHHxR!FH8y*_d^M_}~|Y@OZ4&Ke8Mi zCy#3D2YTNLc4WFoN_$$xy4sXIry+8HX(ZKLV!vGc=nDTqKlrUygEc9&0q(+A_OJr36KFARPZ4=%Me zIw-xJ|B)T^w7ee9*5_|j8O?*Uue*|Ga&!83cT7@Zd~`_(qXdV=>7RT*Mk*?{N&b@@ zrN4pV3;%&&f?6KEiHWhd8E|CJ$vK&^aZo|&>K9K{g%?TO`zC#&KTpKh)vp>!MM)BO zNP$9|xjyF?e!vXun@+&Y7(I?j#*kRU+x8U9KS`U%3W+SapRqBN(D!GQuUW1)m1^Sd zap#p#(hsMnaDd-g1T8YQe{{<_+YagO0NX3#`8NMZ+B{E)QI7y#3$Vf0K*z(`fbpW&%meFE6;1Zy?#P9 zP%0!Fd7~1p0AYnnv%=TR5NsvT+YgJs*(p5X{_hQG#Zk=b+6W+Y|JS>*6r=#qM=15G zs8Ex)d5Z3C|9-RG<@In>x7hJI*wyUrsiwt7GiNHsl4lnBXW-Bozk@8-)Au=@Dm>>0Xz#(*_h4s(nsDT`DeZ zur_50zfTV%-UD9$EO~Rs21B*Xs${$bU_A*nWm;D~gse51@w~2T@_`js3zTj~CO%7l z?Kg!+dWXN?nH~H-W`d#Xv2|b4_4-u2*qLY@ZWOC)BRLYZ17T>?2vsE=gz-=MVuaIU z1B(C~!+FFWPs|Hz%01c=q;%ePHPo`=LcJLfALr>Qj_r)d6ZgsTy?lCMR6Hb5lliut z=jK=0Li=*H#Q{WevAqT|XK=KS$T7yhax;o8)2|jLxM%8HP=wJi!7#!8+WmJ3?US`& zwOHU9ssJ)6OkuFQh7|D*84nGeaEYF)Fd08j@iDir&~p-YJyCH1gt96M?X(0ba8N(Y zjbK3ahHn{c+|?J6nDD8`c7pHMKflKwT4lDL9qpIik*-XM0DI|P49QK|vi<1v_sgKP zQ+G~nL75{dcEaKv+9Jxto3Wia$yTE5`()r@B5cOE zPj|OPW;m)FI7DK^7@cj=eJ1h#m}YaJ3tapv8;H?i%!~rNJsK&$H#r)xOWGN&1eQhA z<-6PdVo(c5#|rc|^7)tfe8`fNRhQvtk$u|o53@0c^`P2<(=z<9T=nl?wWMfL{2bi2 zi(Y&0>6H0mQ&H8=(gisvl36IC6s+sR&d!kI3o&oWON}>l9++;;LovNK>b9bmxoW;N zvb+97=@RQkj?XZ=QW!})-^WOhQ;X5I*=BnhKWjz9&|d!dcAf?k#2We2`xfU@Wsqo} zkF!Lqz*6ffsCHz)ClbJ9KQW{RWQ}I(iIi?|wbhCWBIYwt5nNk0$B(Y6`0(UH54;R^ zDPzV$$AF^3Bc|BAzn^l>BXC_1TYJdT)n+qz9P$S*ulU$-laa!k3CorLi=fbmjvKFe|>+1=$b%i{7L;%hn;oQUxn!UtF}GZ)D8y^VxoEcD_{COC7jpY9f0M@XT3 zM>t`*jF5qrkGkgh<~Dp6A2jGgZ|y7^YVGzm#}~c~mw+pJM-eG0$Uf^iqCZMTdd0t%f~c?T@5NNW%MW{!iIbQWL@#y z{~}wnHp%%YSFwzY<<%G0QqK*3kBVOMtnT=eK^}zB;!d)K%o!nHqz2RJDq9vgw#kY4 z@$I;!Ytmt3^>XI#0s3mY%c^|E z1A?e1;y_dmA{;0H2AY!bPYegW_Aq%2DJRd8PujAZ9_#|w6#EnSE|`6>d2gpH2V%&p zRoU38Z;~Aff+UMH2(_O8 zh@-#oE(Kyxq)fzR7kyF5RY<}IHfv{ybrsecp28HZ$O5*0J8Mmj@;ehFZtDUdYWz9u3LQsE#`lmV z6_(|`Ok+%Yb_(Ud3fv~{uDAauLla%@un z0o1tlr$HAs(XPGM@$)eXJ%XKIW-f+uV~3F>y;EQDNq(G#T)SZ9RuBAE4(H!Xra%bB zD0SkqQ~Qn6$&Y%4?1DF;JMB}QwbcA}Hkf9lE97?qVWB@x7>1!H%Gy2NqwZ;#Gh3VL zH6Li!^vX9f6@PhhVx0de5?O>tDh%Nz#%xNwcTbQXNu2c zwnHUh*EIkmzQ-gWfP6SFrw$k^a_}arw3@K$CR+?hSNi}X=j2eh8m=a#>HF7uSZ$xx zSkI#-7&xhcfjP+Ocnq+~)$u=mgk=?8=mDR(7SVQ_h8@wBV5W0#2cqzaZx%!~o7$>f zqHR6HDps3KYKiBSMpBT5(x}$AXxD6q(;|5xEfFfS*>bK;xjOwu_RyUbk9s1;rx_bQ#?``#fV>uSc!rmVn)4 z1;imYx3R&=bKc-kgg^DgZ4M-B# zl*~43vvjs{HNod(LNlz~>vhizV$OxFmg);AI8Wi4zy7sdtMF5 z+t-55h7nh8nY?Oe6K&ZZIJoM(SGeryT-Mv=r1BtGzMGFgnZ z53^@FOTV04m?+7#c;$CmmOY=aL?7~#iGj7FOJx#FkfJJRX)(2}wSL)M<$61^tO1iR z@nYf?qT9*uF2chEmiR$5j*4|%7K`P9jU9DU*Vv9Z94u`77 zS-3a6sIr|@$x!cm7ZS;wgt#`^rA%1o^ASXW zQ5rtOFtb-fJOoFAOsT}xWUt4`DWFRHIJwWV!&mNoQ{7}}@EsP9fOi{72*(osZGjh4>`!8CTe*z~LURy{< z-J;CbRd5&-;<_!)MURKOBdk0$w)t{>jR+EeQ2Tk%`3M=&u1>w2UXe2lM+$h?yltTHNocYqRNe zo~&)B?zMp~*0RQSV;c(Hp&#KcfxttvN< z*}?|)L5--c_t{c zKA_KI7nrYLovM$~cE_o}1bpxn>+m|JH4Rmg5PkZ*Sd;qnO}D6#{7 zk==7YtwYREZN#48KAik98$$QFJ(p~@hlnHC);>nI|0>sc($%g%`mc5Y=^EER2(}CU z*-#sa7ljYw>-Z3M&;wK-c*Eq6I9IeQ8T#JWRRb z2eCCgNVp*QpOiWgM_(>-4?j@7hYJKzd-{>@n7FRFX5OZ zEAE&d#C;%w#AA~1{(1WNoX+4!>Gy(QcAM<0*`1UBU7tSdyh1#!M)t>PXJs($Y~bTJ zF3Eqd&+8v%-3WV>c_S1ut}1@WyrS&r!GEM*QM^C^L1u#@r+=OP@i%WzdNlub6wJRJ z3G;7Zs0XIKaXa$G{F_m0VVJe0>5e~tn2a6KL)Jm9x~cil?zr8`T#+OVT`7N3O;)Nu2NOY*d{g z3Q0@dnLMp!8>^TOK81$gb#g7^_q-e%IXl-pkEJpH5Z}jNd*{B6?`89Ai_EK|T6`BDvpZ;w?z9a4cMt{kwT)P4` zJA(g42avpjc5IjcK^1NT`sWnV*Ya_0d`hi=S7HeqE!u(KRDO}|w9)sht0~{^-W5c? zxm%n-T8VaSb^!TCw+MZ^!a{2nS8M*0upH-Tm2Q6cWmX_4wYfkW=3T0k2{JTtK$P1wuA^Q2uMRwBO)(*9+I!fC%Tum&^~@53IHUevWM>wms^7lHM-m ze$Osy&#=cGLUy@9@J<&{ZedXU^NKBJvb1J6CXOK4g!A*Z12sRq6@onP81IDE3bT z#Xffk-R+KJ;0(T6djr6=t9AHJwaOiL-lko#r+HnIPqJasM=Y3hf(cO{GC{o2?g_iZ z3}ic;d&fk1!1K?c8yFD*Wv;75E1mx$E^`KPnNu$?4g6QSR+-j2jTT=c=#H)7Ld)gK#T7s2)j+ z-Y>|B+V2B8@G#^7rqvEr-cWklt)K@panC>fhCj9MPi;k8T11f2FvRvrL_mbtUCcP^R^Ub-1J9VBryG||FCOjdEJT!SzU6-yf250jvz??R0f%MLx+5Z=bVe0m{u2Z zX8QRcm~mb{05i`Ax0w1(p4+DQEUP^jvf4u+6T|ejV92-}b}6%7S)JYsMRj_E@0 zBzO~%-5&LHL0io7QSbfHl$`rq|D!zbWAyr_h|}q zpf{%9<=s!7pZ9rUVg7@prMZX#j2C>KT$o4Dors|h`JW{gIjVouM)N0`ZWc8UK?P;l~iXTq`XNIgF9o8cjaoDy6HO)Pj{Z zUlQI9wG!ZzSO9VpIQ~wm-l)vmqz$B3Yf;!SX`6lI@pcIwvp`$B=%k+c<6z<00lC5_+>{l`2CmkP!yd`o{gu4`?FMg|RTLXu&U#N9pA%FN4#bpvc zGoSE?I0t#J_09uwyS36>i!s~d1is^TMT|U>c)dM{D*AX&;)iefgsVf@PsW~8Xnlfk zkCdj@%Z1W`g}f}z3E-Ukw-@9#k52)e!CX4N3we4VAZy+S*F2Z_LHOY17+-FAX{5D38hZ!V3EA$^ zpyO(t2Jps`P4*D5(WymVHPC+Yen$?w0&RUJK%SrQx4ml~xn%wdOYkYNdhA#1kb-^v zVorCky@T&VcX>3(cj&ZT8R49_x}YD<5KxK!R64f~wx3sICFK;+za|=m-#X->$vWv- z^W^=-Uu6w`EA5U**LaTEn(gm{a*t;t(WXO?HxJ%{y!pE>5QI8)&{pJWx45GHjNa#m zXzrXMi+XOUIryQrAVRH!=;FS(Rw&&C^$s#0tc6zl1PkmO`}Z?eapivR2E{()x(Vk_ z{GfPuw0#G1|L?lDs`u#ZC;Y#l*m@zO*bD^a))WUXMx8`V=_ESMMuhXhUSM*vrj6XKU#o!8JZ$ z%@aKV{qRLyg^@!C??vVa64IZu7F*WvHMW6c_5D&GVK+n^M!x?L^8N37qV|A(P&_+w z?R!01$oNxQsMfNIrG5PwZ>1%r%>k)Fkv^X)Ir` zbFI34^BiPj@eD;B<20&2VCXc9BVIZ`4xu0Di*mmgWk0{vHjq<7f5coqo_cQNsOymD zi&`gS%_Afg4uIb?;1(DFrt=DIzn3g^@iUcE8_DPBYHlN?ccA8>LO;k^57kjGh(P^C zb%@oX+|KsmmY6rOQG3F3DAYR9ua)3kuGE?*nvk$$0y&dHolOxGV>k%>V%(Dy+qcO| zUD+eqWJ-R_32q~$3!Gr1Ucv(PaRvqAi~0!bnxx!eC#w{nW3*q2+F95Ee6H~M3PoOB zv1cN+=EW6`M6*HQ`>2G3`Z&4Q1NSB+6P}4n9N#4xtSL4QS2p$(zmd{>K1OYW(tTJE zRn34%)EvSOdi~jF4gD#*R5$jD_fU_cbTQQE-uHm8{T?rrdp&FAYdqibFLSODl{tNn zcp+Nh1Ufik*bk@?iOQTGOUoDm!`Wm?Ui=xs<(M-Zh(1m9BDM~cFHBG#_5h!9)CbXi z(c88Vj_V_$N8cmQSHvN&|5P1dDY3tCs!gg_f>(K~1Ipbl`j@)^ffUauk#kDDz%)rY zuKCp-C-rBMOtIBa*~D{xm#3WLLM+jn&hSv@>GLJxs3&DVw~P)!xMs{BC#Z2o9cMq7in@iNF;Q3gILY7k zY!7;8BFKjTYHOwgLi#?@B5>0Xv zdB#3sKaM^wj325m!a;{svKNO`dOy*fQzK{91|qDA)kL1Tq1rGuJ+)DCC8-hhu?E!a z>QOh;`+}NX)JIINf z`v#3PKC|}7e;58P`%d@{HiYkBAxNkP3zR$AU&rl~_>9!fNcl5bWKF3pI-O9jStegW zUmATO`YZ>cP&1~UFVu76>(H-rzN@l^IP=)QF8~-9xtn)Uy%*0Z8bIV;?sxIKCI0>E zj3%CTJ*a8=bv)yE4Sl#OqO@0{c}{H-q3$X`KZKBsz7Rb)`J&&Q)K=AN#`HtpkCXQc zE>AkZhe-!~dcebwfZX%HP1xuEi}|eCH|5Plvz>vOEzwHJdCgR!A@|HlD(c9|sNbes z7ClaF3=TEMc2XwcXgEFgkZ(uKVId4gG)X(+`-jw{fed5Y8>(DJTS#--9ZF|~nYW}A zh%eKqIYD1=UZ%E+pUr5J?ilKLlkEa8B-obj)dpSdno-wKStnRY--GB9~@dR261k zR2PsiqdsD7`lax?wEB=AXVr(mtoq;{koZ8PUBa^lmlPdyFGV;TW1BH$vRcEN(_8SI zc@HvsLXwu=jJSe%1efv5d4KerLD!!}H!}Q7R(-^RtQ)`HndZ5zkPv>7#pUtUN z{@Y0Qn3|t`JEmFpKLhe#149_}{{#L15QYoMe-;qR^*fHThTjk+{Z+JS$sFH zCHwAVSTG#$Ov-}xXrqvQ7tf<$TLcR~ne_OrTM6^>ZX~>J>bM$PUegiZx~MZ6&#CmF z1H<8P56`sR!!r8t=VhNRychG$l6$cSm))B>(O5f1TQ0vV<+A2M+>@N{DL-OJA*UNd za!-Mz#Xq6Yjp1N)#r;*&9rtZcSKO`KuJ}VsI^%P5?r0tsOn%AAe zEJ76COJWs1=tFNBrjxiHq`bb)vaadgn(idG+|Fb>ZENalzs8=%7`tDVc{u_vN8sfM IjO7UY9j~zVJOBUy literal 0 HcmV?d00001 diff --git a/package.json b/package.json index 07009b34..3176d004 100644 --- a/package.json +++ b/package.json @@ -14,18 +14,21 @@ "test:dev": "vitest", "release": "nr build && bumpp -r && pnpm run -r --filter='@regle/*' release && git push --follow-tags", "play:vue3": "cd playground/vue3 && pnpm run dev", - "play:nuxt": "cd playground/nuxt && pnpm run dev" + "play:nuxt": "cd playground/nuxt && pnpm run dev", + "docs:dev": "vitepress dev docs", + "docs:build": "vitepress build docs", + "docs:preview": "vitepress preview docs" }, "devDependencies": { "@regle/core": "workspace:*", "@regle/validators": "workspace:*", "@regle/zod": "workspace:*", - "@types/prettier": "3.0.0", "@typescript-eslint/eslint-plugin": "8.4.0", "@typescript-eslint/parser": "8.4.0", "@vitejs/plugin-vue": "5.1.3", "@vitest/coverage-istanbul": "2.0.5", "@vitest/coverage-v8": "2.0.5", + "@shikijs/vitepress-twoslash": "1.18.0", "@vue/reactivity": "3.5.0", "@vue/test-utils": "2.4.6", "bumpp": "9.5.2", @@ -38,6 +41,7 @@ "prettier": "3.3.3", "typescript": "5.5.4", "vitest": "2.0.5", + "vitepress": "1.3.4", "vue": "3.5.0", "vue-eslint-parser": "9.4.3", "vue-tsc": "2.1.4" diff --git a/packages/core/src/core/useRegle/guards/rule.status.guards.ts b/packages/core/src/core/useRegle/guards/rule.status.guards.ts index fd279dfc..74c4ff95 100644 --- a/packages/core/src/core/useRegle/guards/rule.status.guards.ts +++ b/packages/core/src/core/useRegle/guards/rule.status.guards.ts @@ -1,9 +1,12 @@ import type { + $InternalExternalRegleErrors, $InternalRegleCollectionStatus, $InternalRegleFieldStatus, $InternalRegleRuleStatus, $InternalRegleStatus, $InternalRegleStatusType, + RegleExternalCollectionErrors, + RegleExternalErrorTree, } from '../../../types'; import { isObject } from '../../../utils'; @@ -24,3 +27,17 @@ export function isFieldStatus(rule: $InternalRegleStatusType): rule is $Internal export function isRuleStatus(rule: unknown): rule is $InternalRegleRuleStatus { return isObject(rule) && '$type' in rule && '$message' in rule; } + +// -- ExternalErrors + +export function isNestedExternalErrorStatus( + rule: $InternalExternalRegleErrors +): rule is RegleExternalErrorTree { + return !!rule && '$each' in rule; +} + +export function isCollectionExternalErrorStatus( + rule: $InternalExternalRegleErrors +): rule is RegleExternalCollectionErrors { + return !!rule && '$each' in rule; +} diff --git a/packages/core/src/core/useRegle/useErrors.ts b/packages/core/src/core/useRegle/useErrors.ts index e7a144d2..ddc6ada4 100644 --- a/packages/core/src/core/useRegle/useErrors.ts +++ b/packages/core/src/core/useRegle/useErrors.ts @@ -1,12 +1,20 @@ -import { Ref, computed } from 'vue'; +import { ComputedRef, Ref, computed } from 'vue'; import type { $InternalRegleErrors, $InternalRegleStatusType, $InternalRegleStatus, $InternalRegleRuleStatus, $InternalRegleCollectionStatus, + $InternalExternalRegleErrors, } from '../../types'; -import { isCollectionRulesStatus, isFieldStatus, isNestedRulesStatus } from './guards'; +import { + isCollectionExternalErrorStatus, + isCollectionRulesStatus, + isFieldStatus, + isNestedExternalErrorStatus, + isNestedRulesStatus, +} from './guards'; +import { isObject } from '../../utils'; function extractRulesErrors( rules: Record, diff --git a/packages/core/src/core/useRegle/useRegle.ts b/packages/core/src/core/useRegle/useRegle.ts index f07bbe5d..991e6b01 100644 --- a/packages/core/src/core/useRegle/useRegle.ts +++ b/packages/core/src/core/useRegle/useRegle.ts @@ -10,6 +10,7 @@ import type { Regle, RegleBehaviourOptions, RegleErrorTree, + RegleExternalErrorTree, ReglePartialValidationTree, RegleStatus, ResolvedRegleBehaviourOptions, @@ -31,6 +32,7 @@ export function createUseRegleComposable, TRules extends ReglePartialValidationTree & TCustomRules>, + TExternal extends RegleExternalErrorTree, TValid = keyof TRules extends keyof ReglePartialValidationTree< TState, Partial & TCustomRules @@ -40,8 +42,9 @@ export function createUseRegleComposable( state: Ref | DeepReactiveState, rulesFactory: TValid extends true ? TRules | (() => TRules) | ComputedRef : never, - options?: Partial> & LocalRegleBehaviourOptions - ): Regle { + options?: Partial> & + LocalRegleBehaviourOptions + ): Regle { const scopeRules = isRef(rulesFactory) ? rulesFactory : computed( diff --git a/packages/core/src/core/useRegle/useStateProperties/createReactiveFieldStatus.ts b/packages/core/src/core/useRegle/useStateProperties/createReactiveFieldStatus.ts index dae8f55a..2e63af95 100644 --- a/packages/core/src/core/useRegle/useStateProperties/createReactiveFieldStatus.ts +++ b/packages/core/src/core/useRegle/useStateProperties/createReactiveFieldStatus.ts @@ -61,9 +61,7 @@ export function createReactiveFieldStatus({ let $commit = () => {}; function collectExternalErrors() { - if (externalErrors.value) { - $externalErrors.value = externalErrors.value; - } + $externalErrors.value = externalErrors.value ?? []; } collectExternalErrors(); @@ -231,7 +229,7 @@ export function createReactiveFieldStatus({ if (!scopeState.$lazy.value) { $commit(); if (!scopeState.$rewardEarly.value !== false) { - $clearExternalErrors(); + // $clearExternalErrors(); } } }); @@ -270,7 +268,7 @@ export function createReactiveFieldStatus({ $dirty.value = true; if (!scopeState.$lazy.value) { if (!scopeState.$rewardEarly.value !== false) { - $clearExternalErrors(); + // $clearExternalErrors(); } } } @@ -281,7 +279,6 @@ export function createReactiveFieldStatus({ async function $validateHandler(): Promise { try { - $clearExternalErrors(); triggerPunishment.value = true; if (!scopeState.$lazy.value && scopeState.$anyDirty.value && !scopeState.$pending) { return !scopeState.$error.value; diff --git a/packages/core/src/core/useRegle/useStateProperties/createReactiveNestedStatus.ts b/packages/core/src/core/useRegle/useStateProperties/createReactiveNestedStatus.ts index 24b854eb..205bc7eb 100644 --- a/packages/core/src/core/useRegle/useStateProperties/createReactiveNestedStatus.ts +++ b/packages/core/src/core/useRegle/useStateProperties/createReactiveNestedStatus.ts @@ -1,6 +1,16 @@ import type { RequiredDeep } from 'type-fest'; import type { ComputedRef, EffectScope, Ref } from 'vue'; -import { effectScope, onScopeDispose, reactive, toRef, triggerRef, watch, computed } from 'vue'; +import { + effectScope, + onScopeDispose, + reactive, + toRef, + triggerRef, + watch, + computed, + unref, + ref, +} from 'vue'; import type { $InternalExternalRegleErrors, $InternalFormPropertyTypes, @@ -56,7 +66,7 @@ export function createReactiveNestedStatus({ function createReactiveFieldsStatus(watch = true) { $fields.value = null as any; triggerRef($fields); - $fields.value = Object.fromEntries( + const scopedRulesStatus = Object.fromEntries( Object.entries(scopeRules.value) .map(([statePropKey, statePropRules]) => { if (statePropRules) { @@ -82,6 +92,32 @@ export function createReactiveNestedStatus({ (rule): rule is [string, $InternalRegleStatusType] => !!rule.length && rule[1] != null ) ); + + const externalRulesStatus = Object.fromEntries( + Object.entries(unref(externalErrors) ?? {}) + .filter(([key]) => !(key in scopeRules.value)) + .map(([key, errors]) => { + if (errors) { + const statePropRulesRef = toRef(() => ({})); + const $externalErrors = toRef(() => errors); + return [ + key, + createReactiveChildrenStatus({ + state: ref(undefined), + rulesDef: statePropRulesRef, + customMessages, + path: path ? `${path}.${key}` : key, + storage, + options, + externalErrors: $externalErrors, + }), + ]; + } + return []; + }) + ); + + $fields.value = { ...scopedRulesStatus, ...externalRulesStatus }; if (watch) { $watch(); } diff --git a/packages/core/src/core/useRegle/useStateProperties/useStateProperties.ts b/packages/core/src/core/useRegle/useStateProperties/useStateProperties.ts index 495749fc..7c69e180 100644 --- a/packages/core/src/core/useRegle/useStateProperties/useStateProperties.ts +++ b/packages/core/src/core/useRegle/useStateProperties/useStateProperties.ts @@ -5,7 +5,6 @@ import type { CustomRulesDeclarationTree, ResolvedRegleBehaviourOptions, } from '../../../types'; -import { RegleExternalErrorTree } from '../../../types'; import { useStorage } from '../../useStorage'; import { useErrors } from '../useErrors'; import { createReactiveNestedStatus } from './createReactiveNestedStatus'; diff --git a/packages/core/src/types/core/options.types.ts b/packages/core/src/types/core/options.types.ts index bf7bf571..287bb211 100644 --- a/packages/core/src/types/core/options.types.ts +++ b/packages/core/src/types/core/options.types.ts @@ -23,8 +23,11 @@ export interface RegleBehaviourOptions { rewardEarly?: boolean; } -export interface LocalRegleBehaviourOptions> { - $externalErrors?: MaybeRef>; +export interface LocalRegleBehaviourOptions< + TState extends Record, + TExternal extends RegleExternalErrorTree, +> { + $externalErrors?: MaybeRef; } export type FieldRegleBehaviourOptions = AddDollarToOptions & { @@ -32,7 +35,7 @@ export type FieldRegleBehaviourOptions = AddDollarToOptions> & - LocalRegleBehaviourOptions>; + LocalRegleBehaviourOptions, Record>; export type AddDollarToOptions> = { [K in keyof T as `$${string & K}`]: T[K]; diff --git a/packages/core/src/types/core/useRegle.types.ts b/packages/core/src/types/core/useRegle.types.ts index 20761855..998b8f6f 100644 --- a/packages/core/src/types/core/useRegle.types.ts +++ b/packages/core/src/types/core/useRegle.types.ts @@ -4,6 +4,7 @@ import type { CustomRulesDeclarationTree, RegleCollectionRuleDefinition, RegleErrorTree, + RegleExternalErrorTree, RegleFormPropertyType, ReglePartialValidationTree, RegleRuleDecl, @@ -14,12 +15,13 @@ import type { export interface Regle< TState extends Record = EmptyObject, TRules extends ReglePartialValidationTree = EmptyObject, + TExternal extends RegleExternalErrorTree = never, > { regle: RegleStatus; /** Show active errors based on your behaviour options (lazy, autoDirty) - * It allow you to skip scouting the `$regle` object + * It allow you to skip scouting the `regle` object */ - errors: RegleErrorTree; + errors: RegleErrorTree; invalid: ComputedRef; resetForm: () => void; validateForm: () => Promise>; diff --git a/packages/core/src/types/rules/rule.errors.types.ts b/packages/core/src/types/rules/rule.errors.types.ts index 874a6603..4ddaee46 100644 --- a/packages/core/src/types/rules/rule.errors.types.ts +++ b/packages/core/src/types/rules/rule.errors.types.ts @@ -1,29 +1,50 @@ +import { ArrayElement, NonPresentKeys } from '../utils'; import type { RegleFormPropertyType, ReglePartialValidationTree, RegleRuleDecl, } from './rule.declaration.types'; -import type { RegleCollectionRuleDefinition } from './rule.definition.type'; +import type { RegleCollectionRuleDefinition, RegleRuleDefinition } from './rule.definition.type'; -export type RegleErrorTree> = { - readonly [K in keyof TRules]: RegleValidationErrors; +export type RegleErrorTree< + TRules extends ReglePartialValidationTree, + TExternal extends RegleExternalErrorTree> = never, +> = { + readonly [K in keyof TRules]: RegleValidationErrors< + TRules[K], + K extends keyof TExternal ? TExternal[K] : never + >; +} & { + readonly [K in keyof NonPresentKeys]: RegleExternalValidationErrorsReport< + TExternal[K] + >; }; export type RegleValidationErrors< TRule extends RegleFormPropertyType | undefined = never, + TExternalError extends RegleExternalValidationErrors | undefined = never, > = TRule extends RegleCollectionRuleDefinition - ? RegleCollectionErrors + ? RegleCollectionErrors< + TRule['$each'], + TExternalError extends RegleExternalCollectionErrors + ? ArrayElement + : never + > : TRule extends RegleRuleDecl ? string[] : TRule extends ReglePartialValidationTree - ? RegleErrorTree + ? RegleErrorTree< + TRule, + TExternalError extends RegleExternalErrorTree ? TExternalError : never + > : string[]; export type RegleCollectionErrors< TRule extends RegleFormPropertyType | undefined = never, + TExternalError extends RegleExternalValidationErrors | undefined = never, > = { readonly $errors: string[]; - readonly $each: RegleValidationErrors[]; + readonly $each: RegleValidationErrors[]; }; /** @@ -58,6 +79,16 @@ export type RegleExternalCollectionErrors = { $each?: RegleExternalValidationErrors[]; }; +export type RegleExternalValidationErrorsReport< + TExternalError extends RegleExternalValidationErrors | undefined = never, +> = TExternalError extends RegleExternalCollectionErrors + ? RegleCollectionErrors + : TExternalError extends string[] + ? string[] + : TExternalError extends RegleExternalErrorTree + ? RegleErrorTree + : string[]; + export type $InternalExternalRegleErrors = | RegleExternalCollectionErrors | string[] diff --git a/packages/core/src/types/rules/rule.status.types.ts b/packages/core/src/types/rules/rule.status.types.ts index c3faffab..6307a380 100644 --- a/packages/core/src/types/rules/rule.status.types.ts +++ b/packages/core/src/types/rules/rule.status.types.ts @@ -9,6 +9,7 @@ import type { RegleRuleDefinition, RegleRuleMetadataDefinition, } from '..'; +import { EmptyObject } from 'type-fest'; /** * @public diff --git a/packages/core/src/types/utils/misc.types.ts b/packages/core/src/types/utils/misc.types.ts index 26f3e566..54d3c729 100644 --- a/packages/core/src/types/utils/misc.types.ts +++ b/packages/core/src/types/utils/misc.types.ts @@ -17,3 +17,8 @@ export type ExcludeByType = { }; export type PrimitiveTypes = string | number | boolean | bigint; + +export type NonPresentKeys< + TSource extends Record, + Target extends Record, +> = Omit; diff --git a/packages/zod/src/core/useZodForm.ts b/packages/zod/src/core/useZodForm.ts index 3f43d9de..59898c7d 100644 --- a/packages/zod/src/core/useZodForm.ts +++ b/packages/zod/src/core/useZodForm.ts @@ -2,6 +2,7 @@ import type { DeepMaybeRef, LocalRegleBehaviourOptions, RegleBehaviourOptions, + RegleExternalErrorTree, ReglePartialValidationTree, } from '@regle/core'; import { useRegle } from '@regle/core'; @@ -12,11 +13,13 @@ import { processZodTypeDef } from './parser/processZodTypeDef'; export function useZodForm< TState extends Record, + TExternal extends RegleExternalErrorTree, TZodSchema extends toZod = toZod, >( state: Ref | DeepReactiveState, schema: MaybeRef, - options?: Partial> & LocalRegleBehaviourOptions + options?: Partial> & + LocalRegleBehaviourOptions ): ZodRegle { const rules = ref>({}); diff --git a/playground/vue3/src/App.vue b/playground/vue3/src/App.vue index 32eeda09..16150df1 100644 --- a/playground/vue3/src/App.vue +++ b/playground/vue3/src/App.vue @@ -3,7 +3,8 @@ - + + @@ -12,5 +13,7 @@ diff --git a/playground/vue3/src/components/ReproductionForm.vue b/playground/vue3/src/components/ReproductionForm.vue new file mode 100644 index 00000000..42fac580 --- /dev/null +++ b/playground/vue3/src/components/ReproductionForm.vue @@ -0,0 +1,190 @@ + + + diff --git a/playground/vue3/src/components/TestForm.vue b/playground/vue3/src/components/TestForm.vue index d40832bd..f4463257 100644 --- a/playground/vue3/src/components/TestForm.vue +++ b/playground/vue3/src/components/TestForm.vue @@ -128,7 +128,13 @@ const { errors, validateForm, regle, resetForm, invalid } = useRegle(form, () => })); form.nested.array1 = ['b']; -nextTick(() => { +nextTick(async () => { regle.$fields.nested.$fields.array1.$each[0].$touch(); + + const result = await validateForm(); + if (result) { + // TODO bug never + result.nested.array1; + } }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c07e26ba..024bf8e2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -17,9 +17,9 @@ importers: '@regle/zod': specifier: workspace:* version: link:packages/zod - '@types/prettier': - specifier: 3.0.0 - version: 3.0.0 + '@shikijs/vitepress-twoslash': + specifier: 1.18.0 + version: 1.18.0(@nuxt/kit@3.13.0(magicast@0.3.5))(typescript@5.5.4) '@typescript-eslint/eslint-plugin': specifier: 8.4.0 version: 8.4.0(@typescript-eslint/parser@8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) @@ -68,6 +68,9 @@ importers: typescript: specifier: 5.5.4 version: 5.5.4 + vitepress: + specifier: 1.3.4 + version: 1.3.4(@algolia/client-search@4.24.0)(@types/node@22.5.3)(postcss@8.4.47)(search-insights@2.17.2)(terser@5.31.6)(typescript@5.5.4) vitest: specifier: 2.0.5 version: 2.0.5(@types/node@22.5.3)(happy-dom@15.7.3)(terser@5.31.6) @@ -127,7 +130,7 @@ importers: version: 3.3.3 tsup: specifier: 8.2.4 - version: 8.2.4(@microsoft/api-extractor@7.47.7(@types/node@22.5.3))(jiti@1.21.6)(postcss@8.4.44)(typescript@5.5.4)(yaml@2.5.1) + version: 8.2.4(@microsoft/api-extractor@7.47.7(@types/node@22.5.3))(jiti@1.21.6)(postcss@8.4.47)(typescript@5.5.4)(yaml@2.5.1) type-fest: specifier: 4.26.0 version: 4.26.0 @@ -188,7 +191,7 @@ importers: version: 3.3.3 tsup: specifier: 8.2.4 - version: 8.2.4(@microsoft/api-extractor@7.47.7(@types/node@22.5.3))(jiti@1.21.6)(postcss@8.4.44)(typescript@5.5.4)(yaml@2.5.1) + version: 8.2.4(@microsoft/api-extractor@7.47.7(@types/node@22.5.3))(jiti@1.21.6)(postcss@8.4.47)(typescript@5.5.4)(yaml@2.5.1) type-fest: specifier: 4.26.0 version: 4.26.0 @@ -258,7 +261,7 @@ importers: version: 3.3.3 tsup: specifier: 8.2.4 - version: 8.2.4(@microsoft/api-extractor@7.47.7(@types/node@22.5.3))(jiti@1.21.6)(postcss@8.4.44)(typescript@5.5.4)(yaml@2.5.1) + version: 8.2.4(@microsoft/api-extractor@7.47.7(@types/node@22.5.3))(jiti@1.21.6)(postcss@8.4.47)(typescript@5.5.4)(yaml@2.5.1) type-fest: specifier: 4.26.0 version: 4.26.0 @@ -375,6 +378,71 @@ importers: packages: + '@algolia/autocomplete-core@1.9.3': + resolution: {integrity: sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==} + + '@algolia/autocomplete-plugin-algolia-insights@1.9.3': + resolution: {integrity: sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==} + peerDependencies: + search-insights: '>= 1 < 3' + + '@algolia/autocomplete-preset-algolia@1.9.3': + resolution: {integrity: sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==} + peerDependencies: + '@algolia/client-search': '>= 4.9.1 < 6' + algoliasearch: '>= 4.9.1 < 6' + + '@algolia/autocomplete-shared@1.9.3': + resolution: {integrity: sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==} + peerDependencies: + '@algolia/client-search': '>= 4.9.1 < 6' + algoliasearch: '>= 4.9.1 < 6' + + '@algolia/cache-browser-local-storage@4.24.0': + resolution: {integrity: sha512-t63W9BnoXVrGy9iYHBgObNXqYXM3tYXCjDSHeNwnsc324r4o5UiVKUiAB4THQ5z9U5hTj6qUvwg/Ez43ZD85ww==} + + '@algolia/cache-common@4.24.0': + resolution: {integrity: sha512-emi+v+DmVLpMGhp0V9q9h5CdkURsNmFC+cOS6uK9ndeJm9J4TiqSvPYVu+THUP8P/S08rxf5x2P+p3CfID0Y4g==} + + '@algolia/cache-in-memory@4.24.0': + resolution: {integrity: sha512-gDrt2so19jW26jY3/MkFg5mEypFIPbPoXsQGQWAi6TrCPsNOSEYepBMPlucqWigsmEy/prp5ug2jy/N3PVG/8w==} + + '@algolia/client-account@4.24.0': + resolution: {integrity: sha512-adcvyJ3KjPZFDybxlqnf+5KgxJtBjwTPTeyG2aOyoJvx0Y8dUQAEOEVOJ/GBxX0WWNbmaSrhDURMhc+QeevDsA==} + + '@algolia/client-analytics@4.24.0': + resolution: {integrity: sha512-y8jOZt1OjwWU4N2qr8G4AxXAzaa8DBvyHTWlHzX/7Me1LX8OayfgHexqrsL4vSBcoMmVw2XnVW9MhL+Y2ZDJXg==} + + '@algolia/client-common@4.24.0': + resolution: {integrity: sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==} + + '@algolia/client-personalization@4.24.0': + resolution: {integrity: sha512-l5FRFm/yngztweU0HdUzz1rC4yoWCFo3IF+dVIVTfEPg906eZg5BOd1k0K6rZx5JzyyoP4LdmOikfkfGsKVE9w==} + + '@algolia/client-search@4.24.0': + resolution: {integrity: sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==} + + '@algolia/logger-common@4.24.0': + resolution: {integrity: sha512-LLUNjkahj9KtKYrQhFKCzMx0BY3RnNP4FEtO+sBybCjJ73E8jNdaKJ/Dd8A/VA4imVHP5tADZ8pn5B8Ga/wTMA==} + + '@algolia/logger-console@4.24.0': + resolution: {integrity: sha512-X4C8IoHgHfiUROfoRCV+lzSy+LHMgkoEEU1BbKcsfnV0i0S20zyy0NLww9dwVHUWNfPPxdMU+/wKmLGYf96yTg==} + + '@algolia/recommend@4.24.0': + resolution: {integrity: sha512-P9kcgerfVBpfYHDfVZDvvdJv0lEoCvzNlOy2nykyt5bK8TyieYyiD0lguIJdRZZYGre03WIAFf14pgE+V+IBlw==} + + '@algolia/requester-browser-xhr@4.24.0': + resolution: {integrity: sha512-Z2NxZMb6+nVXSjF13YpjYTdvV3032YTBSGm2vnYvYPA6mMxzM3v5rsCiSspndn9rzIW4Qp1lPHBvuoKJV6jnAA==} + + '@algolia/requester-common@4.24.0': + resolution: {integrity: sha512-k3CXJ2OVnvgE3HMwcojpvY6d9kgKMPRxs/kVohrwF5WMr2fnqojnycZkxPoEg+bXm8fi5BBfFmOqgYztRtHsQA==} + + '@algolia/requester-node-http@4.24.0': + resolution: {integrity: sha512-JF18yTjNOVYvU/L3UosRcvbPMGT9B+/GQWNWnenIImglzNVGpyzChkXLnrSf6uxwVNO6ESGu6oN8MqcGQcjQJw==} + + '@algolia/transporter@4.24.0': + resolution: {integrity: sha512-86nI7w6NzWxd1Zp9q3413dRshDqAzSbsQjhcDhPIatEFiZrL1/TjnHL8S7jVKFePlIMzDsZWXAXwXzcok9c5oA==} + '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} @@ -541,6 +609,29 @@ packages: resolution: {integrity: sha512-YLPHc8yASwjNkmcDMQMY35yiWjoKAKnhUbPRszBRS0YgH+IXtsMp61j+yTcnCE3oO2DgP0U3iejLC8FTtKDC8Q==} engines: {node: '>=16.13'} + '@docsearch/css@3.6.1': + resolution: {integrity: sha512-VtVb5DS+0hRIprU2CO6ZQjK2Zg4QU5HrDM1+ix6rT0umsYvFvatMAnf97NHZlVWDaaLlx7GRfR/7FikANiM2Fg==} + + '@docsearch/js@3.6.1': + resolution: {integrity: sha512-erI3RRZurDr1xES5hvYJ3Imp7jtrXj6f1xYIzDzxiS7nNBufYWPbJwrmMqWC5g9y165PmxEmN9pklGCdLi0Iqg==} + + '@docsearch/react@3.6.1': + resolution: {integrity: sha512-qXZkEPvybVhSXj0K7U3bXc233tk5e8PfhoZ6MhPOiik/qUQxYC+Dn9DnoS7CxHQQhHfCvTiN0eY9M12oRghEXw==} + peerDependencies: + '@types/react': '>= 16.8.0 < 19.0.0' + react: '>= 16.8.0 < 19.0.0' + react-dom: '>= 16.8.0 < 19.0.0' + search-insights: '>= 1 < 3' + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true + react-dom: + optional: true + search-insights: + optional: true + '@esbuild/aix-ppc64@0.20.2': resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} engines: {node: '>=12'} @@ -991,6 +1082,15 @@ packages: resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} engines: {node: '>=14'} + '@floating-ui/core@1.6.8': + resolution: {integrity: sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==} + + '@floating-ui/dom@1.1.1': + resolution: {integrity: sha512-TpIO93+DIujg3g7SykEAGZMDtbJRrmnYRCNYSjJlvIbGhBjRSNTLVbNeDQBrzy9qDgUbiWdc7KA0uZHZ2tJmiw==} + + '@floating-ui/utils@0.2.8': + resolution: {integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==} + '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} @@ -1398,6 +1498,30 @@ packages: '@sec-ant/readable-stream@0.4.1': resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} + '@shikijs/core@1.18.0': + resolution: {integrity: sha512-VK4BNVCd2leY62Nm2JjyxtRLkyrZT/tv104O81eyaCjHq4Adceq2uJVFJJAIof6lT1mBwZrEo2qT/T+grv3MQQ==} + + '@shikijs/engine-javascript@1.18.0': + resolution: {integrity: sha512-qoP/aO/ATNwYAUw1YMdaip/YVEstMZEgrwhePm83Ll9OeQPuxDZd48szZR8oSQNQBT8m8UlWxZv8EA3lFuyI5A==} + + '@shikijs/engine-oniguruma@1.18.0': + resolution: {integrity: sha512-B9u0ZKI/cud+TcmF8Chyh+R4V5qQVvyDOqXC2l2a4x73PBSBc6sZ0JRAX3eqyJswqir6ktwApUUGBYePdKnMJg==} + + '@shikijs/transformers@1.18.0': + resolution: {integrity: sha512-EdX/UIVaaS8qp9NWRyHIXp2dmuLpdVvx+UVpbIn9eafFlLemAuljPb2+K40ie6jrlg0uUIqkg25CM/8I34yBNw==} + + '@shikijs/twoslash@1.18.0': + resolution: {integrity: sha512-nbv1vEiNlM9GbXpN0++5QiT2NdUbAJ6y8yBuMWIiT04dxD3tdl7Ud3TL6hAZ6CAwMGn5hRaN+2va2oN1Rsy1Ww==} + + '@shikijs/types@1.18.0': + resolution: {integrity: sha512-O9N36UEaGGrxv1yUrN2nye7gDLG5Uq0/c1LyfmxsvzNPqlHzWo9DI0A4+fhW2y3bGKuQu/fwS7EPdKJJCowcVA==} + + '@shikijs/vitepress-twoslash@1.18.0': + resolution: {integrity: sha512-yk1VyStviw/vmVXOZ1/DofgYjFmkm41UKzjEHu/8ZJ+UuPFjqu6Y2n6rtd4vkr8vBs5lv32FGPcQUseURTDs1g==} + + '@shikijs/vscode-textmate@9.2.2': + resolution: {integrity: sha512-TMp15K+GGYrWlZM8+Lnj9EaHEFmOen0WJBrfa17hF7taDOYthuPPV0GWzfd/9iMij0akS/8Yw2ikquH7uVi/fg==} + '@sindresorhus/merge-streams@2.3.0': resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} engines: {node: '>=18'} @@ -1419,12 +1543,33 @@ packages: '@types/argparse@1.0.38': resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==} + '@types/debug@4.1.12': + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@types/estree@1.0.5': resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + '@types/hast@3.0.4': + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + '@types/http-proxy@1.17.15': resolution: {integrity: sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==} + '@types/linkify-it@5.0.0': + resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} + + '@types/markdown-it@14.1.2': + resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} + + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + + '@types/mdurl@2.0.0': + resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} + + '@types/ms@0.7.34': + resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} + '@types/node@22.5.3': resolution: {integrity: sha512-njripolh85IA9SQGTAqbmnNZTdxv7X/4OYGPz8tgy5JDr8MP+uDBa921GpYEoDDnwm0Hmn5ZPeJgiiSTPoOzkQ==} @@ -1435,6 +1580,12 @@ packages: '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + + '@types/web-bluetooth@0.0.20': + resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} + '@typescript-eslint/eslint-plugin@7.18.0': resolution: {integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==} engines: {node: ^18.18.0 || >=20.0.0} @@ -1550,6 +1701,14 @@ packages: resolution: {integrity: sha512-zTQD6WLNTre1hj5wp09nBIDiOc2U5r/qmzo7wxPn4ZgAjHql09EofqhF9WF+fZHzL5aCyaIpPcT2hyxl73kr9A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript/vfs@1.6.0': + resolution: {integrity: sha512-hvJUjNVeBMp77qPINuUvYXj4FyWeeMMKZkxEATEU3hqBAQ7qdTBCUFT7Sp0Zu0faeEtFf+ldXxMEDr/bk73ISg==} + peerDependencies: + typescript: '*' + + '@ungap/structured-clone@1.2.0': + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + '@unhead/dom@1.10.4': resolution: {integrity: sha512-ehMy9k6efo4GTLmiP27wCtywWYdiggrP3m7h6kD/d1uhfORH3yCgsd4yXQnmDoSbsMyX6GlY5DBzy5bnYPp/Xw==} @@ -1651,30 +1810,51 @@ packages: '@vue/compiler-core@3.5.0': resolution: {integrity: sha512-ja7cpqAOfw4tyFAxgBz70Z42miNDeaqTxExTsnXDLomRpqfyCgyvZvFp482fmsElpfvsoMJUsvzULhvxUTW6Iw==} + '@vue/compiler-core@3.5.8': + resolution: {integrity: sha512-Uzlxp91EPjfbpeO5KtC0KnXPkuTfGsNDeaKQJxQN718uz+RqDYarEf7UhQJGK+ZYloD2taUbHTI2J4WrUaZQNA==} + '@vue/compiler-dom@3.5.0': resolution: {integrity: sha512-xYjUybWZXl+1R/toDy815i4PbeehL2hThiSGkcpmIOCy2HoYyeeC/gAWK/Y/xsoK+GSw198/T5O31bYuQx5uvQ==} + '@vue/compiler-dom@3.5.8': + resolution: {integrity: sha512-GUNHWvoDSbSa5ZSHT9SnV5WkStWfzJwwTd6NMGzilOE/HM5j+9EB9zGXdtu/fCNEmctBqMs6C9SvVPpVPuk1Eg==} + '@vue/compiler-sfc@3.5.0': resolution: {integrity: sha512-B9DgLtrqok2GLuaFjLlSL15ZG3ZDBiitUH1ecex9guh/ZcA5MCdwuVE6nsfQxktuZY/QY0awJ35/ripIviCQTQ==} + '@vue/compiler-sfc@3.5.8': + resolution: {integrity: sha512-taYpngQtSysrvO9GULaOSwcG5q821zCoIQBtQQSx7Uf7DxpR6CIHR90toPr9QfDD2mqHQPCSgoWBvJu0yV9zjg==} + '@vue/compiler-ssr@3.5.0': resolution: {integrity: sha512-E263QZmA1dqRd7c3u/sWTLRMpQOT0aZ8av/L9SoD/v/BVMZaWFHPUUBswS+bzrfvG2suJF8vSLKx6k6ba5SUdA==} + '@vue/compiler-ssr@3.5.8': + resolution: {integrity: sha512-W96PtryNsNG9u0ZnN5Q5j27Z/feGrFV6zy9q5tzJVyJaLiwYxvC0ek4IXClZygyhjm+XKM7WD9pdKi/wIRVC/Q==} + '@vue/compiler-vue2@2.7.16': resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==} '@vue/devtools-api@6.6.3': resolution: {integrity: sha512-0MiMsFma/HqA6g3KLKn+AGpL1kgKhFWszC9U29NfpWK5LE7bjeXxySWJrOJ77hBz+TBrBQ7o4QJqbPbqbs8rJw==} + '@vue/devtools-api@7.4.5': + resolution: {integrity: sha512-PX9uXirHOY2P99kb1cP3DxWZojFW3acNMqd+l4i5nKcqY59trXTOfwDZXt2Qifu0OU1izAQb76Ur6NPVldF2KQ==} + '@vue/devtools-core@7.3.3': resolution: {integrity: sha512-i6Bwkx4OwfY0QVHjAdsivhlzZ2HMj7fbNRYJsWspQ+dkA1f3nTzycPqZmVUsm2TGkbQlhTMhCAdDoP97JKoc+g==} '@vue/devtools-kit@7.3.3': resolution: {integrity: sha512-m+dFI57BrzKYPKq73mt4CJ5GWld5OLBseLHPHGVP7CaILNY9o1gWVJWAJeF8XtQ9LTiMxZSaK6NcBsFuxAhD0g==} + '@vue/devtools-kit@7.4.5': + resolution: {integrity: sha512-Uuki4Z6Bc/ExvtlPkeDNGSAe4580R+HPcVABfTE9TF7BTz3Nntk7vxIRUyWblZkUEcB/x+wn2uofyt5i2LaUew==} + '@vue/devtools-shared@7.4.3': resolution: {integrity: sha512-gcrQtLteurIh3A9QC0x3Q5TvAp599Pcr9aBbbBd9jAICxUpX2qcXlDczQauWuRWmZwXeCI6i7OfrTVd/QMMgqA==} + '@vue/devtools-shared@7.4.5': + resolution: {integrity: sha512-2XgUOkL/7QDmyYI9J7cm+rz/qBhcGv+W5+i1fhwdQ0HQ1RowhdK66F0QBuJSz/5k12opJY8eN6m03/XZMs7imQ==} + '@vue/eslint-config-prettier@9.0.0': resolution: {integrity: sha512-z1ZIAAUS9pKzo/ANEfd2sO+v2IUalz7cM/cTLOZ7vRFOPk5/xuRKQteOu1DErFLAh/lYGXMVZ0IfYKlyInuDVg==} peerDependencies: @@ -1700,29 +1880,104 @@ packages: typescript: optional: true + '@vue/language-core@2.1.6': + resolution: {integrity: sha512-MW569cSky9R/ooKMh6xa2g1D0AtRKbL56k83dzus/bx//RDJk24RHWkMzbAlXjMdDNyxAaagKPRquBIxkxlCkg==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + '@vue/reactivity@3.5.0': resolution: {integrity: sha512-Ew3F5riP3B3ZDGjD3ZKb9uZylTTPSqt8hAf4sGbvbjrjDjrFb3Jm15Tk1/w7WwTE5GbQ2Qhwxx1moc9hr8A/OQ==} + '@vue/reactivity@3.5.8': + resolution: {integrity: sha512-mlgUyFHLCUZcAYkqvzYnlBRCh0t5ZQfLYit7nukn1GR96gc48Bp4B7OIcSfVSvlG1k3BPfD+p22gi1t2n9tsXg==} + '@vue/runtime-core@3.5.0': resolution: {integrity: sha512-mQyW0F9FaNRdt8ghkAs+BMG3iQ7LGgWKOpkzUzR5AI5swPNydHGL5hvVTqFaeMzwecF1g0c86H4yFQsSxJhH1w==} + '@vue/runtime-core@3.5.8': + resolution: {integrity: sha512-fJuPelh64agZ8vKkZgp5iCkPaEqFJsYzxLk9vSC0X3G8ppknclNDr61gDc45yBGTaN5Xqc1qZWU3/NoaBMHcjQ==} + '@vue/runtime-dom@3.5.0': resolution: {integrity: sha512-NQQXjpdXgyYVJ2M56FJ+lSJgZiecgQ2HhxhnQBN95FymXegRNY/N2htI7vOTwpP75pfxhIeYOJ8mE8sW8KAW6A==} + '@vue/runtime-dom@3.5.8': + resolution: {integrity: sha512-DpAUz+PKjTZPUOB6zJgkxVI3GuYc2iWZiNeeHQUw53kdrparSTG6HeXUrYDjaam8dVsCdvQxDz6ZWxnyjccUjQ==} + '@vue/server-renderer@3.5.0': resolution: {integrity: sha512-HyDIFUg+l7L4PKrEnJlCYWHUOlm6NxZhmSxIefZ5MTYjkIPfDfkwhX7hqxAQHfgIAE1uLMLQZwuNR/ozI0NhZg==} peerDependencies: vue: 3.5.0 + '@vue/server-renderer@3.5.8': + resolution: {integrity: sha512-7AmC9/mEeV9mmXNVyUIm1a1AjUhyeeGNbkLh39J00E7iPeGks8OGRB5blJiMmvqSh8SkaS7jkLWSpXtxUCeagA==} + peerDependencies: + vue: 3.5.8 + '@vue/shared@3.5.0': resolution: {integrity: sha512-m9IgiteBpCkFaMNwCOBkFksA7z8QiKc30ooRuoXWUFRDu0mGyNPlFHmbncF0/Kra1RlX8QrmBbRaIxVvikaR0Q==} + '@vue/shared@3.5.8': + resolution: {integrity: sha512-mJleSWbAGySd2RJdX1RBtcrUBX6snyOc0qHpgk3lGi4l9/P/3ny3ELqFWqYdkXIwwNN/kdm8nD9ky8o6l/Lx2A==} + '@vue/test-utils@2.4.6': resolution: {integrity: sha512-FMxEjOpYNYiFe0GkaHsnJPXFHxQ6m4t8vI/ElPGpMWxZKpmRvQ33OIrvRXemy6yha03RxhOlQuy+gZMC3CQSow==} '@vue/tsconfig@0.5.1': resolution: {integrity: sha512-VcZK7MvpjuTPx2w6blwnwZAu5/LgBUtejFOi3pPGQFXQN5Ela03FUtd2Qtg4yWGGissVL0dr6Ro1LfOFh+PCuQ==} + '@vueuse/core@11.1.0': + resolution: {integrity: sha512-P6dk79QYA6sKQnghrUz/1tHi0n9mrb/iO1WTMk/ElLmTyNqgDeSZ3wcDf6fRBGzRJbeG1dxzEOvLENMjr+E3fg==} + + '@vueuse/integrations@11.1.0': + resolution: {integrity: sha512-O2ZgrAGPy0qAjpoI2YR3egNgyEqwG85fxfwmA9BshRIGjV4G6yu6CfOPpMHAOoCD+UfsIl7Vb1bXJ6ifrHYDDA==} + peerDependencies: + async-validator: ^4 + axios: ^1 + change-case: ^5 + drauu: ^0.4 + focus-trap: ^7 + fuse.js: ^7 + idb-keyval: ^6 + jwt-decode: ^4 + nprogress: ^0.2 + qrcode: ^1.5 + sortablejs: ^1 + universal-cookie: ^7 + peerDependenciesMeta: + async-validator: + optional: true + axios: + optional: true + change-case: + optional: true + drauu: + optional: true + focus-trap: + optional: true + fuse.js: + optional: true + idb-keyval: + optional: true + jwt-decode: + optional: true + nprogress: + optional: true + qrcode: + optional: true + sortablejs: + optional: true + universal-cookie: + optional: true + + '@vueuse/metadata@11.1.0': + resolution: {integrity: sha512-l9Q502TBTaPYGanl1G+hPgd3QX5s4CGnpXriVBR5fEZ/goI6fvDaVmIl3Td8oKFurOxTmbXvBPSsgrd6eu6HYg==} + + '@vueuse/shared@11.1.0': + resolution: {integrity: sha512-YUtIpY122q7osj+zsNMFAfMTubGz0sn5QzE5gPzAIiCmtt2ha3uQUY1+JPyL4gRCTsLPX82Y9brNbo/aqlA91w==} + abbrev@1.1.1: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} @@ -1778,6 +2033,9 @@ packages: ajv@8.13.0: resolution: {integrity: sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==} + algoliasearch@4.24.0: + resolution: {integrity: sha512-bf0QV/9jVejssFBmz2HQLxUadxk574t4iwjCKp5E7NBzwKkrDEhKPISIIjAU/p6K5qDx3qoeh4+26zWN1jmw3g==} + ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} @@ -1974,6 +2232,9 @@ packages: caniuse-lite@1.0.30001655: resolution: {integrity: sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg==} + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + chai@5.1.1: resolution: {integrity: sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==} engines: {node: '>=12'} @@ -1999,6 +2260,15 @@ packages: engines: {node: '>=12.0.0'} hasBin: true + character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + + character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + check-error@2.1.1: resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} engines: {node: '>= 16'} @@ -2056,6 +2326,9 @@ packages: colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + commander@10.0.1: resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} engines: {node: '>=14'} @@ -2242,6 +2515,9 @@ packages: supports-color: optional: true + decode-named-character-reference@1.0.2: + resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} + deep-eql@5.0.2: resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} engines: {node: '>=6'} @@ -2291,6 +2567,10 @@ packages: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + destr@2.0.3: resolution: {integrity: sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==} @@ -2310,6 +2590,9 @@ packages: devalue@5.0.0: resolution: {integrity: sha512-gO+/OMXF7488D+u3ue+G7Y4AA3ZmUnB3eHJXmBTgNHvr4ZNzl36A0ZtG+XCRNYCkYx/bFmw4qtkoFLa+wSrwAA==} + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + diff@5.2.0: resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} engines: {node: '>=0.3.1'} @@ -2589,6 +2872,18 @@ packages: flatted@3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + floating-vue@5.2.2: + resolution: {integrity: sha512-afW+h2CFafo+7Y9Lvw/xsqjaQlKLdJV7h1fCHfcYQ1C4SVMlu7OAekqWgu5d4SgvkBVU0pVpLlVsrSTBURFRkg==} + peerDependencies: + '@nuxt/kit': ^3.2.0 + vue: ^3.2.0 + peerDependenciesMeta: + '@nuxt/kit': + optional: true + + focus-trap@7.6.0: + resolution: {integrity: sha512-1td0l3pMkWJLFipobUcGaf+5DTY4PLDDrcqoSaKP8ediO/CoWCCYk/fT/Y2A4e6TNB+Sh6clRJCjOPPnKoNHnQ==} + foreground-child@3.3.0: resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} engines: {node: '>=14'} @@ -2748,6 +3043,12 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} + hast-util-to-html@9.0.3: + resolution: {integrity: sha512-M17uBDzMJ9RPCqLMO92gNNUDuBSq10a25SDBI08iCCxmorf4Yy6sYHK57n9WAbRAAaU+DuR4W6GN9K4DFZesYg==} + + hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true @@ -2762,6 +3063,9 @@ packages: resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} engines: {node: '>=8'} + html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + http-errors@2.0.0: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} @@ -3106,6 +3410,9 @@ packages: lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + loupe@3.1.1: resolution: {integrity: sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==} @@ -3137,6 +3444,48 @@ packages: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} + mark.js@8.11.1: + resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==} + + markdown-table@3.0.3: + resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} + + mdast-util-find-and-replace@3.0.1: + resolution: {integrity: sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==} + + mdast-util-from-markdown@2.0.1: + resolution: {integrity: sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==} + + mdast-util-gfm-autolink-literal@2.0.1: + resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} + + mdast-util-gfm-footnote@2.0.0: + resolution: {integrity: sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==} + + mdast-util-gfm-strikethrough@2.0.0: + resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} + + mdast-util-gfm-table@2.0.0: + resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} + + mdast-util-gfm-task-list-item@2.0.0: + resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} + + mdast-util-gfm@3.0.0: + resolution: {integrity: sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==} + + mdast-util-phrasing@4.1.0: + resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} + + mdast-util-to-hast@13.2.0: + resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} + + mdast-util-to-markdown@2.1.0: + resolution: {integrity: sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==} + + mdast-util-to-string@4.0.0: + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + mdn-data@2.0.28: resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} @@ -3154,6 +3503,69 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} + micromark-core-commonmark@2.0.1: + resolution: {integrity: sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==} + + micromark-factory-destination@2.0.0: + resolution: {integrity: sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==} + + micromark-factory-label@2.0.0: + resolution: {integrity: sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==} + + micromark-factory-space@2.0.0: + resolution: {integrity: sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==} + + micromark-factory-title@2.0.0: + resolution: {integrity: sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==} + + micromark-factory-whitespace@2.0.0: + resolution: {integrity: sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==} + + micromark-util-character@2.1.0: + resolution: {integrity: sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==} + + micromark-util-chunked@2.0.0: + resolution: {integrity: sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==} + + micromark-util-classify-character@2.0.0: + resolution: {integrity: sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==} + + micromark-util-combine-extensions@2.0.0: + resolution: {integrity: sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==} + + micromark-util-decode-numeric-character-reference@2.0.1: + resolution: {integrity: sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==} + + micromark-util-decode-string@2.0.0: + resolution: {integrity: sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==} + + micromark-util-encode@2.0.0: + resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==} + + micromark-util-html-tag-name@2.0.0: + resolution: {integrity: sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==} + + micromark-util-normalize-identifier@2.0.0: + resolution: {integrity: sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==} + + micromark-util-resolve-all@2.0.0: + resolution: {integrity: sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==} + + micromark-util-sanitize-uri@2.0.0: + resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==} + + micromark-util-subtokenize@2.0.1: + resolution: {integrity: sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==} + + micromark-util-symbol@2.0.0: + resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==} + + micromark-util-types@2.0.0: + resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==} + + micromark@4.0.0: + resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==} + micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} @@ -3211,6 +3623,9 @@ packages: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} + minisearch@7.1.0: + resolution: {integrity: sha512-tv7c/uefWdEhcu6hvrfTihflgeEi2tN6VV7HJnCjK6VxM75QQJh4t9FwJCsA2EsRS8LCnu3W87CuGPWMocOLCA==} + minizlib@2.1.2: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} engines: {node: '>= 8'} @@ -3388,6 +3803,9 @@ packages: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} + oniguruma-to-js@0.4.3: + resolution: {integrity: sha512-X0jWUcAlxORhOqqBREgPMgnshB7ZGYszBNspP+tS9hPD3l13CdaXcHbgImoHUHlrvGx/7AvFEkTRhAGYh+jzjQ==} + open@10.1.0: resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==} engines: {node: '>=18'} @@ -3711,6 +4129,13 @@ packages: resolution: {integrity: sha512-Aweb9unOEpQ3ezu4Q00DPvvM2ZTUitJdNKeP/+uQgr1IBIqu574IaZoURId7BKtWMREwzKa9OgzPzezWGPWFQw==} engines: {node: ^10 || ^12 || >=14} + postcss@8.4.47: + resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} + engines: {node: ^10 || ^12 || >=14} + + preact@10.24.0: + resolution: {integrity: sha512-aK8Cf+jkfyuZ0ZZRG9FbYqwmEiGQ4y/PUO4SuTWoyWL244nZZh7bd5h2APd4rSNDYTBNghg1L+5iJN3Skxtbsw==} + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -3743,6 +4168,9 @@ packages: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} + property-information@6.5.0: + resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} + proto-list@1.2.4: resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} @@ -3802,6 +4230,9 @@ packages: resolution: {integrity: sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==} engines: {node: '>=4'} + regex@4.3.2: + resolution: {integrity: sha512-kK/AA3A9K6q2js89+VMymcboLOlF5lZRCYJv3gzszXFHBr6kO6qLGzbm+UIugBEV8SMMKCTR59txoY6ctRHYVw==} + require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -3872,6 +4303,9 @@ packages: scule@1.3.0: resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==} + search-insights@2.17.2: + resolution: {integrity: sha512-zFNpOpUO+tY2D85KrxJ+aqwnIfdEGi06UH2+xEb+Bp9Mwznmauqc9djbnBibJO5mpfUPPa8st6Sx65+vbeO45g==} + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -3917,6 +4351,9 @@ packages: shell-quote@1.8.1: resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + shiki@1.18.0: + resolution: {integrity: sha512-8jo7tOXr96h9PBQmOHVrltnETn1honZZY76YA79MHheGQg55jBvbm9dtU+MI5pjC5NJCFuA6rvVTLVeSW5cE4A==} + siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} @@ -3956,6 +4393,10 @@ packages: resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} @@ -3971,6 +4412,9 @@ packages: resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} engines: {node: '>= 8'} + space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + speakingurl@14.0.1: resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} engines: {node: '>=0.10.0'} @@ -4012,6 +4456,9 @@ packages: string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -4090,6 +4537,9 @@ packages: resolution: {integrity: sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==} engines: {node: '>=18'} + tabbable@6.2.0: + resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} + tapable@2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} @@ -4175,6 +4625,9 @@ packages: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true + trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + ts-api-utils@1.3.0: resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} engines: {node: '>=16'} @@ -4206,6 +4659,19 @@ packages: typescript: optional: true + twoslash-protocol@0.2.11: + resolution: {integrity: sha512-rp+nkOWbKfJnBTDZtnIaBGjnU+4CaMhqu6db2UU7byU96rH8X4hao4BOxYw6jdZc85Lhv5pOfcjgfHeQyLzndQ==} + + twoslash-vue@0.2.11: + resolution: {integrity: sha512-wBwIwG0PRuv5V+1DD4Zno1j6MnaCbaY/ELops7oKSoMBTIQL720iRXppyldVVoYvti2caUA97T36XhZXHpjQyA==} + peerDependencies: + typescript: '*' + + twoslash@0.2.11: + resolution: {integrity: sha512-392Qkcu5sD2hROLZ+XPywChreDGJ8Yu5nnK/Moxfti/R39q0Q39MaV7iHjz92B5qucyjsQFnKMdYIzafX5T8dg==} + peerDependencies: + typescript: '*' + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -4272,6 +4738,21 @@ packages: unimport@3.11.1: resolution: {integrity: sha512-DuB1Uoq01LrrXTScxnwOoMSlTXxyKcULguFxbLrMDFcE/CO0ZWHpEiyhovN0mycPt7K6luAHe8laqvwvuoeUPg==} + unist-util-is@6.0.0: + resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} + + unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + + unist-util-visit-parents@6.0.1: + resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + + unist-util-visit@5.0.0: + resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} @@ -4369,6 +4850,12 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + vfile-message@4.0.2: + resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} + + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + vite-hot-client@0.2.3: resolution: {integrity: sha512-rOGAV7rUlUHX89fP2p2v0A2WWvV3QMX2UYq0fRqsWSvFvev4atHWqjwGoKaZT1VTKyLGk533ecu3eyd0o59CAg==} peerDependencies: @@ -4459,6 +4946,18 @@ packages: terser: optional: true + vitepress@1.3.4: + resolution: {integrity: sha512-I1/F6OW1xl3kW4PaIMC6snxjWgf3qfziq2aqsDoFc/Gt41WbcRv++z8zjw8qGRIJ+I4bUW7ZcKFDHHN/jkH9DQ==} + hasBin: true + peerDependencies: + markdown-it-mathjax3: ^4 + postcss: ^8 + peerDependenciesMeta: + markdown-it-mathjax3: + optional: true + postcss: + optional: true + vitest@2.0.5: resolution: {integrity: sha512-8GUxONfauuIdeSl5f9GTgVEpg5BTOlplET4WEDaeY2QBiN8wSm68vxN/tb5z405OwppfoCavnwXafiaYBC/xOA==} engines: {node: ^18.0.0 || >=20.0.0} @@ -4534,6 +5033,11 @@ packages: peerDependencies: eslint: '>=6.0.0' + vue-resize@2.0.0-alpha.1: + resolution: {integrity: sha512-7+iqOueLU7uc9NrMfrzbG8hwMqchfVfSzpVlCMeJQe4pyibqyoifDNbKTZvwxZKDvGkB+PdFeKvnGZMoEb8esg==} + peerDependencies: + vue: ^3.0.0 + vue-router@4.4.3: resolution: {integrity: sha512-sv6wmNKx2j3aqJQDMxLFzs/u/mjA9Z5LCgy6BE0f7yFWMjrPLnS/sPNn8ARY/FXw6byV18EFutn5lTO6+UsV5A==} peerDependencies: @@ -4553,6 +5057,14 @@ packages: typescript: optional: true + vue@3.5.8: + resolution: {integrity: sha512-hvuvuCy51nP/1fSRvrrIqTLSvrSyz2Pq+KQ8S8SXCxTWVE0nMaOnSDnSOxV1eYmGfvK7mqiwvd1C59CEEz7dAQ==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -4670,8 +5182,115 @@ packages: zod@3.23.8: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + snapshots: + '@algolia/autocomplete-core@1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)(search-insights@2.17.2)': + dependencies: + '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)(search-insights@2.17.2) + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0) + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + - search-insights + + '@algolia/autocomplete-plugin-algolia-insights@1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)(search-insights@2.17.2)': + dependencies: + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0) + search-insights: 2.17.2 + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + + '@algolia/autocomplete-preset-algolia@1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)': + dependencies: + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0) + '@algolia/client-search': 4.24.0 + algoliasearch: 4.24.0 + + '@algolia/autocomplete-shared@1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)': + dependencies: + '@algolia/client-search': 4.24.0 + algoliasearch: 4.24.0 + + '@algolia/cache-browser-local-storage@4.24.0': + dependencies: + '@algolia/cache-common': 4.24.0 + + '@algolia/cache-common@4.24.0': {} + + '@algolia/cache-in-memory@4.24.0': + dependencies: + '@algolia/cache-common': 4.24.0 + + '@algolia/client-account@4.24.0': + dependencies: + '@algolia/client-common': 4.24.0 + '@algolia/client-search': 4.24.0 + '@algolia/transporter': 4.24.0 + + '@algolia/client-analytics@4.24.0': + dependencies: + '@algolia/client-common': 4.24.0 + '@algolia/client-search': 4.24.0 + '@algolia/requester-common': 4.24.0 + '@algolia/transporter': 4.24.0 + + '@algolia/client-common@4.24.0': + dependencies: + '@algolia/requester-common': 4.24.0 + '@algolia/transporter': 4.24.0 + + '@algolia/client-personalization@4.24.0': + dependencies: + '@algolia/client-common': 4.24.0 + '@algolia/requester-common': 4.24.0 + '@algolia/transporter': 4.24.0 + + '@algolia/client-search@4.24.0': + dependencies: + '@algolia/client-common': 4.24.0 + '@algolia/requester-common': 4.24.0 + '@algolia/transporter': 4.24.0 + + '@algolia/logger-common@4.24.0': {} + + '@algolia/logger-console@4.24.0': + dependencies: + '@algolia/logger-common': 4.24.0 + + '@algolia/recommend@4.24.0': + dependencies: + '@algolia/cache-browser-local-storage': 4.24.0 + '@algolia/cache-common': 4.24.0 + '@algolia/cache-in-memory': 4.24.0 + '@algolia/client-common': 4.24.0 + '@algolia/client-search': 4.24.0 + '@algolia/logger-common': 4.24.0 + '@algolia/logger-console': 4.24.0 + '@algolia/requester-browser-xhr': 4.24.0 + '@algolia/requester-common': 4.24.0 + '@algolia/requester-node-http': 4.24.0 + '@algolia/transporter': 4.24.0 + + '@algolia/requester-browser-xhr@4.24.0': + dependencies: + '@algolia/requester-common': 4.24.0 + + '@algolia/requester-common@4.24.0': {} + + '@algolia/requester-node-http@4.24.0': + dependencies: + '@algolia/requester-common': 4.24.0 + + '@algolia/transporter@4.24.0': + dependencies: + '@algolia/cache-common': 4.24.0 + '@algolia/logger-common': 4.24.0 + '@algolia/requester-common': 4.24.0 + '@ampproject/remapping@2.3.0': dependencies: '@jridgewell/gen-mapping': 0.3.5 @@ -4894,6 +5513,30 @@ snapshots: dependencies: mime: 3.0.0 + '@docsearch/css@3.6.1': {} + + '@docsearch/js@3.6.1(@algolia/client-search@4.24.0)(search-insights@2.17.2)': + dependencies: + '@docsearch/react': 3.6.1(@algolia/client-search@4.24.0)(search-insights@2.17.2) + preact: 10.24.0 + transitivePeerDependencies: + - '@algolia/client-search' + - '@types/react' + - react + - react-dom + - search-insights + + '@docsearch/react@3.6.1(@algolia/client-search@4.24.0)(search-insights@2.17.2)': + dependencies: + '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)(search-insights@2.17.2) + '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0) + '@docsearch/css': 3.6.1 + algoliasearch: 4.24.0 + optionalDependencies: + search-insights: 2.17.2 + transitivePeerDependencies: + - '@algolia/client-search' + '@esbuild/aix-ppc64@0.20.2': optional: true @@ -5139,6 +5782,16 @@ snapshots: '@fastify/busboy@2.1.1': {} + '@floating-ui/core@1.6.8': + dependencies: + '@floating-ui/utils': 0.2.8 + + '@floating-ui/dom@1.1.1': + dependencies: + '@floating-ui/core': 1.6.8 + + '@floating-ui/utils@0.2.8': {} + '@humanwhocodes/module-importer@1.0.1': {} '@humanwhocodes/retry@0.3.0': {} @@ -5692,24 +6345,103 @@ snapshots: '@sec-ant/readable-stream@0.4.1': {} - '@sindresorhus/merge-streams@2.3.0': {} - - '@sindresorhus/merge-streams@4.0.0': {} + '@shikijs/core@1.18.0': + dependencies: + '@shikijs/engine-javascript': 1.18.0 + '@shikijs/engine-oniguruma': 1.18.0 + '@shikijs/types': 1.18.0 + '@shikijs/vscode-textmate': 9.2.2 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.3 - '@total-typescript/ts-reset@0.6.1': {} + '@shikijs/engine-javascript@1.18.0': + dependencies: + '@shikijs/types': 1.18.0 + '@shikijs/vscode-textmate': 9.2.2 + oniguruma-to-js: 0.4.3 - '@trysound/sax@0.2.0': {} + '@shikijs/engine-oniguruma@1.18.0': + dependencies: + '@shikijs/types': 1.18.0 + '@shikijs/vscode-textmate': 9.2.2 - '@tsconfig/node18@18.2.4': {} + '@shikijs/transformers@1.18.0': + dependencies: + shiki: 1.18.0 + + '@shikijs/twoslash@1.18.0(typescript@5.5.4)': + dependencies: + '@shikijs/core': 1.18.0 + '@shikijs/types': 1.18.0 + twoslash: 0.2.11(typescript@5.5.4) + transitivePeerDependencies: + - supports-color + - typescript + + '@shikijs/types@1.18.0': + dependencies: + '@shikijs/vscode-textmate': 9.2.2 + '@types/hast': 3.0.4 + + '@shikijs/vitepress-twoslash@1.18.0(@nuxt/kit@3.13.0(magicast@0.3.5))(typescript@5.5.4)': + dependencies: + '@shikijs/twoslash': 1.18.0(typescript@5.5.4) + floating-vue: 5.2.2(@nuxt/kit@3.13.0(magicast@0.3.5))(vue@3.5.8(typescript@5.5.4)) + mdast-util-from-markdown: 2.0.1 + mdast-util-gfm: 3.0.0 + mdast-util-to-hast: 13.2.0 + shiki: 1.18.0 + twoslash: 0.2.11(typescript@5.5.4) + twoslash-vue: 0.2.11(typescript@5.5.4) + vue: 3.5.8(typescript@5.5.4) + transitivePeerDependencies: + - '@nuxt/kit' + - supports-color + - typescript + + '@shikijs/vscode-textmate@9.2.2': {} + + '@sindresorhus/merge-streams@2.3.0': {} + + '@sindresorhus/merge-streams@4.0.0': {} + + '@total-typescript/ts-reset@0.6.1': {} + + '@trysound/sax@0.2.0': {} + + '@tsconfig/node18@18.2.4': {} '@types/argparse@1.0.38': {} + '@types/debug@4.1.12': + dependencies: + '@types/ms': 0.7.34 + '@types/estree@1.0.5': {} + '@types/hast@3.0.4': + dependencies: + '@types/unist': 3.0.3 + '@types/http-proxy@1.17.15': dependencies: '@types/node': 22.5.3 + '@types/linkify-it@5.0.0': {} + + '@types/markdown-it@14.1.2': + dependencies: + '@types/linkify-it': 5.0.0 + '@types/mdurl': 2.0.0 + + '@types/mdast@4.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/mdurl@2.0.0': {} + + '@types/ms@0.7.34': {} + '@types/node@22.5.3': dependencies: undici-types: 6.19.8 @@ -5720,6 +6452,10 @@ snapshots: '@types/resolve@1.20.2': {} + '@types/unist@3.0.3': {} + + '@types/web-bluetooth@0.0.20': {} + '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4)': dependencies: '@eslint-community/regexpp': 4.11.0 @@ -5882,6 +6618,15 @@ snapshots: '@typescript-eslint/types': 8.4.0 eslint-visitor-keys: 3.4.3 + '@typescript/vfs@1.6.0(typescript@5.5.4)': + dependencies: + debug: 4.3.6 + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + + '@ungap/structured-clone@1.2.0': {} + '@unhead/dom@1.10.4': dependencies: '@unhead/schema': 1.10.4 @@ -6071,11 +6816,24 @@ snapshots: estree-walker: 2.0.2 source-map-js: 1.2.0 + '@vue/compiler-core@3.5.8': + dependencies: + '@babel/parser': 7.25.6 + '@vue/shared': 3.5.8 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.0 + '@vue/compiler-dom@3.5.0': dependencies: '@vue/compiler-core': 3.5.0 '@vue/shared': 3.5.0 + '@vue/compiler-dom@3.5.8': + dependencies: + '@vue/compiler-core': 3.5.8 + '@vue/shared': 3.5.8 + '@vue/compiler-sfc@3.5.0': dependencies: '@babel/parser': 7.25.6 @@ -6088,11 +6846,28 @@ snapshots: postcss: 8.4.44 source-map-js: 1.2.0 + '@vue/compiler-sfc@3.5.8': + dependencies: + '@babel/parser': 7.25.6 + '@vue/compiler-core': 3.5.8 + '@vue/compiler-dom': 3.5.8 + '@vue/compiler-ssr': 3.5.8 + '@vue/shared': 3.5.8 + estree-walker: 2.0.2 + magic-string: 0.30.11 + postcss: 8.4.47 + source-map-js: 1.2.0 + '@vue/compiler-ssr@3.5.0': dependencies: '@vue/compiler-dom': 3.5.0 '@vue/shared': 3.5.0 + '@vue/compiler-ssr@3.5.8': + dependencies: + '@vue/compiler-dom': 3.5.8 + '@vue/shared': 3.5.8 + '@vue/compiler-vue2@2.7.16': dependencies: de-indent: 1.0.2 @@ -6100,6 +6875,10 @@ snapshots: '@vue/devtools-api@6.6.3': {} + '@vue/devtools-api@7.4.5': + dependencies: + '@vue/devtools-kit': 7.4.5 + '@vue/devtools-core@7.3.3(vite@5.4.3(@types/node@22.5.3)(terser@5.31.6))': dependencies: '@vue/devtools-kit': 7.3.3 @@ -6121,10 +6900,24 @@ snapshots: speakingurl: 14.0.1 superjson: 2.2.1 + '@vue/devtools-kit@7.4.5': + dependencies: + '@vue/devtools-shared': 7.4.5 + birpc: 0.2.17 + hookable: 5.5.3 + mitt: 3.0.1 + perfect-debounce: 1.0.0 + speakingurl: 14.0.1 + superjson: 2.2.1 + '@vue/devtools-shared@7.4.3': dependencies: rfdc: 1.4.1 + '@vue/devtools-shared@7.4.5': + dependencies: + rfdc: 1.4.1 + '@vue/eslint-config-prettier@9.0.0(eslint@9.9.1(jiti@1.21.6))(prettier@3.3.3)': dependencies: eslint: 9.9.1(jiti@1.21.6) @@ -6159,15 +6952,37 @@ snapshots: optionalDependencies: typescript: 5.5.4 + '@vue/language-core@2.1.6(typescript@5.5.4)': + dependencies: + '@volar/language-core': 2.4.1 + '@vue/compiler-dom': 3.5.0 + '@vue/compiler-vue2': 2.7.16 + '@vue/shared': 3.5.0 + computeds: 0.0.1 + minimatch: 9.0.5 + muggle-string: 0.4.1 + path-browserify: 1.0.1 + optionalDependencies: + typescript: 5.5.4 + '@vue/reactivity@3.5.0': dependencies: '@vue/shared': 3.5.0 + '@vue/reactivity@3.5.8': + dependencies: + '@vue/shared': 3.5.8 + '@vue/runtime-core@3.5.0': dependencies: '@vue/reactivity': 3.5.0 '@vue/shared': 3.5.0 + '@vue/runtime-core@3.5.8': + dependencies: + '@vue/reactivity': 3.5.8 + '@vue/shared': 3.5.8 + '@vue/runtime-dom@3.5.0': dependencies: '@vue/reactivity': 3.5.0 @@ -6175,14 +6990,29 @@ snapshots: '@vue/shared': 3.5.0 csstype: 3.1.3 + '@vue/runtime-dom@3.5.8': + dependencies: + '@vue/reactivity': 3.5.8 + '@vue/runtime-core': 3.5.8 + '@vue/shared': 3.5.8 + csstype: 3.1.3 + '@vue/server-renderer@3.5.0(vue@3.5.0(typescript@5.5.4))': dependencies: '@vue/compiler-ssr': 3.5.0 '@vue/shared': 3.5.0 vue: 3.5.0(typescript@5.5.4) + '@vue/server-renderer@3.5.8(vue@3.5.8(typescript@5.5.4))': + dependencies: + '@vue/compiler-ssr': 3.5.8 + '@vue/shared': 3.5.8 + vue: 3.5.8(typescript@5.5.4) + '@vue/shared@3.5.0': {} + '@vue/shared@3.5.8': {} + '@vue/test-utils@2.4.6': dependencies: js-beautify: 1.15.1 @@ -6190,6 +7020,36 @@ snapshots: '@vue/tsconfig@0.5.1': {} + '@vueuse/core@11.1.0(vue@3.5.0(typescript@5.5.4))': + dependencies: + '@types/web-bluetooth': 0.0.20 + '@vueuse/metadata': 11.1.0 + '@vueuse/shared': 11.1.0(vue@3.5.0(typescript@5.5.4)) + vue-demi: 0.14.10(vue@3.5.0(typescript@5.5.4)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/integrations@11.1.0(focus-trap@7.6.0)(vue@3.5.0(typescript@5.5.4))': + dependencies: + '@vueuse/core': 11.1.0(vue@3.5.0(typescript@5.5.4)) + '@vueuse/shared': 11.1.0(vue@3.5.0(typescript@5.5.4)) + vue-demi: 0.14.10(vue@3.5.0(typescript@5.5.4)) + optionalDependencies: + focus-trap: 7.6.0 + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/metadata@11.1.0': {} + + '@vueuse/shared@11.1.0(vue@3.5.0(typescript@5.5.4))': + dependencies: + vue-demi: 0.14.10(vue@3.5.0(typescript@5.5.4)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + abbrev@1.1.1: {} abbrev@2.0.0: {} @@ -6243,6 +7103,24 @@ snapshots: require-from-string: 2.0.2 uri-js: 4.4.1 + algoliasearch@4.24.0: + dependencies: + '@algolia/cache-browser-local-storage': 4.24.0 + '@algolia/cache-common': 4.24.0 + '@algolia/cache-in-memory': 4.24.0 + '@algolia/client-account': 4.24.0 + '@algolia/client-analytics': 4.24.0 + '@algolia/client-common': 4.24.0 + '@algolia/client-personalization': 4.24.0 + '@algolia/client-search': 4.24.0 + '@algolia/logger-common': 4.24.0 + '@algolia/logger-console': 4.24.0 + '@algolia/recommend': 4.24.0 + '@algolia/requester-browser-xhr': 4.24.0 + '@algolia/requester-common': 4.24.0 + '@algolia/requester-node-http': 4.24.0 + '@algolia/transporter': 4.24.0 + ansi-colors@4.1.3: {} ansi-escapes@4.3.2: @@ -6448,6 +7326,8 @@ snapshots: caniuse-lite@1.0.30001655: {} + ccount@2.0.1: {} + chai@5.1.1: dependencies: assertion-error: 2.0.1 @@ -6503,6 +7383,12 @@ snapshots: transitivePeerDependencies: - magicast + character-entities-html4@2.1.0: {} + + character-entities-legacy@3.0.0: {} + + character-entities@2.0.2: {} + check-error@2.1.1: {} chokidar@3.6.0: @@ -6559,6 +7445,8 @@ snapshots: colorette@2.0.20: {} + comma-separated-tokens@2.0.3: {} + commander@10.0.1: {} commander@2.20.3: {} @@ -6721,6 +7609,10 @@ snapshots: dependencies: ms: 2.1.2 + decode-named-character-reference@1.0.2: + dependencies: + character-entities: 2.0.2 + deep-eql@5.0.2: {} deep-is@0.1.4: {} @@ -6758,6 +7650,8 @@ snapshots: depd@2.0.0: {} + dequal@2.0.3: {} + destr@2.0.3: {} destroy@1.2.0: {} @@ -6768,6 +7662,10 @@ snapshots: devalue@5.0.0: {} + devlop@1.1.0: + dependencies: + dequal: 2.0.3 + diff@5.2.0: {} dir-glob@3.0.1: @@ -7154,6 +8052,18 @@ snapshots: flatted@3.3.1: {} + floating-vue@5.2.2(@nuxt/kit@3.13.0(magicast@0.3.5))(vue@3.5.8(typescript@5.5.4)): + dependencies: + '@floating-ui/dom': 1.1.1 + vue: 3.5.8(typescript@5.5.4) + vue-resize: 2.0.0-alpha.1(vue@3.5.8(typescript@5.5.4)) + optionalDependencies: + '@nuxt/kit': 3.13.0(magicast@0.3.5)(rollup@4.21.2) + + focus-trap@7.6.0: + dependencies: + tabbable: 6.2.0 + foreground-child@3.3.0: dependencies: cross-spawn: 7.0.3 @@ -7342,6 +8252,24 @@ snapshots: dependencies: function-bind: 1.1.2 + hast-util-to-html@9.0.3: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.0 + property-information: 6.5.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + + hast-util-whitespace@3.0.0: + dependencies: + '@types/hast': 3.0.4 + he@1.2.0: {} hookable@5.5.3: {} @@ -7350,6 +8278,8 @@ snapshots: html-tags@3.3.1: {} + html-void-elements@3.0.0: {} + http-errors@2.0.0: dependencies: depd: 2.0.0 @@ -7666,6 +8596,8 @@ snapshots: lodash@4.17.21: {} + longest-streak@3.1.0: {} + loupe@3.1.1: dependencies: get-func-name: 2.0.2 @@ -7702,6 +8634,123 @@ snapshots: dependencies: semver: 7.6.3 + mark.js@8.11.1: {} + + markdown-table@3.0.3: {} + + mdast-util-find-and-replace@3.0.1: + dependencies: + '@types/mdast': 4.0.4 + escape-string-regexp: 5.0.0 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 + + mdast-util-from-markdown@2.0.1: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + decode-named-character-reference: 1.0.2 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.0 + micromark-util-decode-numeric-character-reference: 2.0.1 + micromark-util-decode-string: 2.0.0 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + unist-util-stringify-position: 4.0.0 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-autolink-literal@2.0.1: + dependencies: + '@types/mdast': 4.0.4 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-find-and-replace: 3.0.1 + micromark-util-character: 2.1.0 + + mdast-util-gfm-footnote@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.1 + mdast-util-to-markdown: 2.1.0 + micromark-util-normalize-identifier: 2.0.0 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-strikethrough@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.1 + mdast-util-to-markdown: 2.1.0 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-table@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + markdown-table: 3.0.3 + mdast-util-from-markdown: 2.0.1 + mdast-util-to-markdown: 2.1.0 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-task-list-item@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.1 + mdast-util-to-markdown: 2.1.0 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm@3.0.0: + dependencies: + mdast-util-from-markdown: 2.0.1 + mdast-util-gfm-autolink-literal: 2.0.1 + mdast-util-gfm-footnote: 2.0.0 + mdast-util-gfm-strikethrough: 2.0.0 + mdast-util-gfm-table: 2.0.0 + mdast-util-gfm-task-list-item: 2.0.0 + mdast-util-to-markdown: 2.1.0 + transitivePeerDependencies: + - supports-color + + mdast-util-phrasing@4.1.0: + dependencies: + '@types/mdast': 4.0.4 + unist-util-is: 6.0.0 + + mdast-util-to-hast@13.2.0: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.2.0 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.0 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + + mdast-util-to-markdown@2.1.0: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + longest-streak: 3.1.0 + mdast-util-phrasing: 4.1.0 + mdast-util-to-string: 4.0.0 + micromark-util-decode-string: 2.0.0 + unist-util-visit: 5.0.0 + zwitch: 2.0.4 + + mdast-util-to-string@4.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdn-data@2.0.28: {} mdn-data@2.0.30: {} @@ -7712,6 +8761,139 @@ snapshots: merge2@1.4.1: {} + micromark-core-commonmark@2.0.1: + dependencies: + decode-named-character-reference: 1.0.2 + devlop: 1.1.0 + micromark-factory-destination: 2.0.0 + micromark-factory-label: 2.0.0 + micromark-factory-space: 2.0.0 + micromark-factory-title: 2.0.0 + micromark-factory-whitespace: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-chunked: 2.0.0 + micromark-util-classify-character: 2.0.0 + micromark-util-html-tag-name: 2.0.0 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-resolve-all: 2.0.0 + micromark-util-subtokenize: 2.0.1 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + + micromark-factory-destination@2.0.0: + dependencies: + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + + micromark-factory-label@2.0.0: + dependencies: + devlop: 1.1.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + + micromark-factory-space@2.0.0: + dependencies: + micromark-util-character: 2.1.0 + micromark-util-types: 2.0.0 + + micromark-factory-title@2.0.0: + dependencies: + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + + micromark-factory-whitespace@2.0.0: + dependencies: + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + + micromark-util-character@2.1.0: + dependencies: + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + + micromark-util-chunked@2.0.0: + dependencies: + micromark-util-symbol: 2.0.0 + + micromark-util-classify-character@2.0.0: + dependencies: + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + + micromark-util-combine-extensions@2.0.0: + dependencies: + micromark-util-chunked: 2.0.0 + micromark-util-types: 2.0.0 + + micromark-util-decode-numeric-character-reference@2.0.1: + dependencies: + micromark-util-symbol: 2.0.0 + + micromark-util-decode-string@2.0.0: + dependencies: + decode-named-character-reference: 1.0.2 + micromark-util-character: 2.1.0 + micromark-util-decode-numeric-character-reference: 2.0.1 + micromark-util-symbol: 2.0.0 + + micromark-util-encode@2.0.0: {} + + micromark-util-html-tag-name@2.0.0: {} + + micromark-util-normalize-identifier@2.0.0: + dependencies: + micromark-util-symbol: 2.0.0 + + micromark-util-resolve-all@2.0.0: + dependencies: + micromark-util-types: 2.0.0 + + micromark-util-sanitize-uri@2.0.0: + dependencies: + micromark-util-character: 2.1.0 + micromark-util-encode: 2.0.0 + micromark-util-symbol: 2.0.0 + + micromark-util-subtokenize@2.0.1: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + + micromark-util-symbol@2.0.0: {} + + micromark-util-types@2.0.0: {} + + micromark@4.0.0: + dependencies: + '@types/debug': 4.1.12 + debug: 4.3.6 + decode-named-character-reference: 1.0.2 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.1 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-chunked: 2.0.0 + micromark-util-combine-extensions: 2.0.0 + micromark-util-decode-numeric-character-reference: 2.0.1 + micromark-util-encode: 2.0.0 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-resolve-all: 2.0.0 + micromark-util-sanitize-uri: 2.0.0 + micromark-util-subtokenize: 2.0.1 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + transitivePeerDependencies: + - supports-color + micromatch@4.0.8: dependencies: braces: 3.0.3 @@ -7755,6 +8937,8 @@ snapshots: minipass@7.1.2: {} + minisearch@7.1.0: {} + minizlib@2.1.2: dependencies: minipass: 3.3.6 @@ -8089,6 +9273,10 @@ snapshots: dependencies: mimic-fn: 4.0.0 + oniguruma-to-js@0.4.3: + dependencies: + regex: 4.3.2 + open@10.1.0: dependencies: default-browser: 5.2.1 @@ -8246,12 +9434,12 @@ snapshots: dependencies: postcss: 8.4.44 - postcss-load-config@6.0.1(jiti@1.21.6)(postcss@8.4.44)(yaml@2.5.1): + postcss-load-config@6.0.1(jiti@1.21.6)(postcss@8.4.47)(yaml@2.5.1): dependencies: lilconfig: 3.1.2 optionalDependencies: jiti: 1.21.6 - postcss: 8.4.44 + postcss: 8.4.47 yaml: 2.5.1 postcss-merge-longhand@7.0.3(postcss@8.4.44): @@ -8379,6 +9567,14 @@ snapshots: picocolors: 1.1.0 source-map-js: 1.2.0 + postcss@8.4.47: + dependencies: + nanoid: 3.3.7 + picocolors: 1.1.0 + source-map-js: 1.2.1 + + preact@10.24.0: {} + prelude-ls@1.2.1: {} prettier-linter-helpers@1.0.0: @@ -8402,6 +9598,8 @@ snapshots: kleur: 3.0.3 sisteransi: 1.0.5 + property-information@6.5.0: {} + proto-list@1.2.4: {} protocols@2.0.1: {} @@ -8468,6 +9666,8 @@ snapshots: dependencies: redis-errors: 1.2.0 + regex@4.3.2: {} + require-directory@2.1.1: {} require-from-string@2.0.2: {} @@ -8540,6 +9740,8 @@ snapshots: scule@1.3.0: {} + search-insights@2.17.2: {} + semver@6.3.1: {} semver@7.5.4: @@ -8595,6 +9797,15 @@ snapshots: shell-quote@1.8.1: {} + shiki@1.18.0: + dependencies: + '@shikijs/core': 1.18.0 + '@shikijs/engine-javascript': 1.18.0 + '@shikijs/engine-oniguruma': 1.18.0 + '@shikijs/types': 1.18.0 + '@shikijs/vscode-textmate': 9.2.2 + '@types/hast': 3.0.4 + siginfo@2.0.0: {} signal-exit@3.0.7: {} @@ -8627,6 +9838,8 @@ snapshots: source-map-js@1.2.0: {} + source-map-js@1.2.1: {} + source-map-support@0.5.21: dependencies: buffer-from: 1.1.2 @@ -8640,6 +9853,8 @@ snapshots: dependencies: whatwg-url: 7.1.0 + space-separated-tokens@2.0.2: {} + speakingurl@14.0.1: {} sprintf-js@1.0.3: {} @@ -8682,6 +9897,11 @@ snapshots: dependencies: safe-buffer: 5.2.1 + stringify-entities@4.0.4: + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -8757,6 +9977,8 @@ snapshots: system-architecture@0.1.0: {} + tabbable@6.2.0: {} + tapable@2.2.1: {} tar-stream@3.1.7: @@ -8836,6 +10058,8 @@ snapshots: tree-kill@1.2.2: {} + trim-lines@3.0.1: {} + ts-api-utils@1.3.0(typescript@5.5.4): dependencies: typescript: 5.5.4 @@ -8844,7 +10068,7 @@ snapshots: tslib@2.6.2: {} - tsup@8.2.4(@microsoft/api-extractor@7.47.7(@types/node@22.5.3))(jiti@1.21.6)(postcss@8.4.44)(typescript@5.5.4)(yaml@2.5.1): + tsup@8.2.4(@microsoft/api-extractor@7.47.7(@types/node@22.5.3))(jiti@1.21.6)(postcss@8.4.47)(typescript@5.5.4)(yaml@2.5.1): dependencies: bundle-require: 5.0.0(esbuild@0.23.1) cac: 6.7.14 @@ -8856,7 +10080,7 @@ snapshots: globby: 11.1.0 joycon: 3.1.1 picocolors: 1.1.0 - postcss-load-config: 6.0.1(jiti@1.21.6)(postcss@8.4.44)(yaml@2.5.1) + postcss-load-config: 6.0.1(jiti@1.21.6)(postcss@8.4.47)(yaml@2.5.1) resolve-from: 5.0.0 rollup: 4.21.2 source-map: 0.8.0-beta.0 @@ -8864,7 +10088,7 @@ snapshots: tree-kill: 1.2.2 optionalDependencies: '@microsoft/api-extractor': 7.47.7(@types/node@22.5.3) - postcss: 8.4.44 + postcss: 8.4.47 typescript: 5.5.4 transitivePeerDependencies: - jiti @@ -8872,6 +10096,25 @@ snapshots: - tsx - yaml + twoslash-protocol@0.2.11: {} + + twoslash-vue@0.2.11(typescript@5.5.4): + dependencies: + '@vue/language-core': 2.1.6(typescript@5.5.4) + twoslash: 0.2.11(typescript@5.5.4) + twoslash-protocol: 0.2.11 + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + + twoslash@0.2.11(typescript@5.5.4): + dependencies: + '@typescript/vfs': 1.6.0(typescript@5.5.4) + twoslash-protocol: 0.2.11 + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 @@ -8944,6 +10187,29 @@ snapshots: transitivePeerDependencies: - rollup + unist-util-is@6.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-stringify-position@4.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-visit-parents@6.0.1: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + + unist-util-visit@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 + universalify@0.1.2: {} universalify@2.0.1: {} @@ -9038,6 +10304,16 @@ snapshots: util-deprecate@1.0.2: {} + vfile-message@4.0.2: + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 + + vfile@6.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile-message: 4.0.2 + vite-hot-client@0.2.3(vite@5.4.3(@types/node@22.5.3)(terser@5.31.6)): dependencies: vite: 5.4.3(@types/node@22.5.3)(terser@5.31.6) @@ -9126,6 +10402,54 @@ snapshots: fsevents: 2.3.3 terser: 5.31.6 + vitepress@1.3.4(@algolia/client-search@4.24.0)(@types/node@22.5.3)(postcss@8.4.47)(search-insights@2.17.2)(terser@5.31.6)(typescript@5.5.4): + dependencies: + '@docsearch/css': 3.6.1 + '@docsearch/js': 3.6.1(@algolia/client-search@4.24.0)(search-insights@2.17.2) + '@shikijs/core': 1.18.0 + '@shikijs/transformers': 1.18.0 + '@types/markdown-it': 14.1.2 + '@vitejs/plugin-vue': 5.1.3(vite@5.4.3(@types/node@22.5.3)(terser@5.31.6))(vue@3.5.0(typescript@5.5.4)) + '@vue/devtools-api': 7.4.5 + '@vue/shared': 3.5.0 + '@vueuse/core': 11.1.0(vue@3.5.0(typescript@5.5.4)) + '@vueuse/integrations': 11.1.0(focus-trap@7.6.0)(vue@3.5.0(typescript@5.5.4)) + focus-trap: 7.6.0 + mark.js: 8.11.1 + minisearch: 7.1.0 + shiki: 1.18.0 + vite: 5.4.3(@types/node@22.5.3)(terser@5.31.6) + vue: 3.5.0(typescript@5.5.4) + optionalDependencies: + postcss: 8.4.47 + transitivePeerDependencies: + - '@algolia/client-search' + - '@types/node' + - '@types/react' + - '@vue/composition-api' + - async-validator + - axios + - change-case + - drauu + - fuse.js + - idb-keyval + - jwt-decode + - less + - lightningcss + - nprogress + - qrcode + - react + - react-dom + - sass + - sass-embedded + - search-insights + - sortablejs + - stylus + - sugarss + - terser + - typescript + - universal-cookie + vitest@2.0.5(@types/node@22.5.3)(happy-dom@15.7.3)(terser@5.31.6): dependencies: '@ampproject/remapping': 2.3.0 @@ -9208,6 +10532,10 @@ snapshots: transitivePeerDependencies: - supports-color + vue-resize@2.0.0-alpha.1(vue@3.5.8(typescript@5.5.4)): + dependencies: + vue: 3.5.8(typescript@5.5.4) + vue-router@4.4.3(vue@3.5.0(typescript@5.5.4)): dependencies: '@vue/devtools-api': 6.6.3 @@ -9230,6 +10558,16 @@ snapshots: optionalDependencies: typescript: 5.5.4 + vue@3.5.8(typescript@5.5.4): + dependencies: + '@vue/compiler-dom': 3.5.8 + '@vue/compiler-sfc': 3.5.8 + '@vue/runtime-dom': 3.5.8 + '@vue/server-renderer': 3.5.8(vue@3.5.8(typescript@5.5.4)) + '@vue/shared': 3.5.8 + optionalDependencies: + typescript: 5.5.4 + webidl-conversions@3.0.1: {} webidl-conversions@4.0.2: {} @@ -9323,3 +10661,5 @@ snapshots: readable-stream: 4.5.2 zod@3.23.8: {} + + zwitch@2.0.4: {}