From 8b708cd6e5baabb72f1a23d0d27de244d48e8afe Mon Sep 17 00:00:00 2001 From: Gordon Smith Date: Sat, 28 Feb 2026 09:56:08 +0000 Subject: [PATCH] feat: add JavaScript bindings generation and transpilation for WIT components - Implemented `generateJsBindings` and `generateJsBindingsFromPath` for generating TypeScript bindings from WIT content. - Added `transpileJsHost` and `transpileJsHostFromPath` for transpiling WebAssembly components into JavaScript host modules. - Introduced interfaces and types for binding options and results. - Created tests for guest and host bindings generation, including complex WIT definitions and command contributions. - Ensured backward compatibility with deprecated aliases for guest and host bindings. - Implemented edge case tests for WitFormatter to ensure proper formatting of various input scenarios. - Added comprehensive tests for WitSyntaxValidator, covering error parsing and diagnostic creation. - Introduced file-based tests for WASM detection utilities to validate header reading and component identification. - Enhanced vitest configuration to include coverage reporting for better test insights. - Added a new command for running unit tests with coverage. Signed-off-by: Gordon Smith --- .github/workflows/ci.yml | 4 +- .gitignore | 6 + .prettierignore | 1 + .vscode/launch.json | 13 +- README.md | 56 +- images/component-view-menu.png | Bin 107967 -> 149209 bytes images/editor-menu.png | Bin 77182 -> 72753 bytes package-lock.json | 2296 ++++++++++++++--------------- package.json | 120 +- samples/.gitignore | 2 + samples/Cargo.lock | 819 ++++++++++ samples/Cargo.toml | 7 + samples/README.md | 121 ++ samples/adder/Cargo.toml | 10 + samples/adder/src/lib.rs | 19 + samples/adder/wit/world.wit | 10 + samples/build.sh | 54 + samples/counter/Cargo.toml | 10 + samples/counter/src/lib.rs | 60 + samples/counter/wit/world.wit | 25 + samples/greeter/Cargo.toml | 10 + samples/greeter/src/lib.rs | 34 + samples/greeter/wit/world.wit | 25 + src/bindingsSource.ts | 37 + src/extension.ts | 685 ++++++--- src/formatter.ts | 3 +- src/hostBindingsRouting.ts | 30 + src/jsBindings.ts | 251 ++++ tests/bindingsSource.test.ts | 78 + tests/formatter-edge.test.ts | 174 +++ tests/hostBindingsRouting.test.ts | 45 + tests/js-bindings.test.ts | 470 ++++++ tests/test-wit-validator.js | 0 tests/validator-methods.test.ts | 318 ++++ tests/wasmDetection-fs.test.ts | 125 ++ tests/wasmUtils.test.ts | 168 +++ vitest.config.ts | 7 + wit-bindgen-wasm/Cargo.lock | 24 +- wit-bindgen-wasm/Cargo.toml | 4 +- 39 files changed, 4661 insertions(+), 1460 deletions(-) create mode 100644 samples/.gitignore create mode 100644 samples/Cargo.lock create mode 100644 samples/Cargo.toml create mode 100644 samples/README.md create mode 100644 samples/adder/Cargo.toml create mode 100644 samples/adder/src/lib.rs create mode 100644 samples/adder/wit/world.wit create mode 100755 samples/build.sh create mode 100644 samples/counter/Cargo.toml create mode 100644 samples/counter/src/lib.rs create mode 100644 samples/counter/wit/world.wit create mode 100644 samples/greeter/Cargo.toml create mode 100644 samples/greeter/src/lib.rs create mode 100644 samples/greeter/wit/world.wit create mode 100644 src/bindingsSource.ts create mode 100644 src/hostBindingsRouting.ts create mode 100644 src/jsBindings.ts create mode 100644 tests/bindingsSource.test.ts create mode 100644 tests/formatter-edge.test.ts create mode 100644 tests/hostBindingsRouting.test.ts create mode 100644 tests/js-bindings.test.ts delete mode 100644 tests/test-wit-validator.js create mode 100644 tests/validator-methods.test.ts create mode 100644 tests/wasmDetection-fs.test.ts create mode 100644 tests/wasmUtils.test.ts diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b01f824..861d1e3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,7 +13,7 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest, windows-latest, macos-latest] - node-version: [20, 22, 24] + node-version: [22, 24] runs-on: ${{ matrix.os }} permissions: contents: read @@ -30,7 +30,7 @@ jobs: - name: Setup Rust toolchain uses: dtolnay/rust-toolchain@stable with: - targets: wasm32-unknown-unknown + targets: wasm32-unknown-unknown,wasm32-wasip2 - name: Cache Rust dependencies uses: Swatinem/rust-cache@v2 diff --git a/.gitignore b/.gitignore index fbc185c..836d812 100644 --- a/.gitignore +++ b/.gitignore @@ -72,6 +72,9 @@ typings/ # Typescript Output dist/ +# Rust build artifacts +samples/target/ + # VSCode extension development .vscode-test/ *.vsix @@ -80,3 +83,6 @@ dist/ types/ out/ tmp/ + +# Test coverage +coverage/ diff --git a/.prettierignore b/.prettierignore index c2f3de8..a283028 100644 --- a/.prettierignore +++ b/.prettierignore @@ -16,6 +16,7 @@ dist/ *.vsix wit-bindgen-wasm/pkg/ wit-bindgen-wasm/target/ +samples/target/ # Test snapshots (these are auto-generated and shouldn't be manually formatted) *.snap diff --git a/.vscode/launch.json b/.vscode/launch.json index a36bfed..ab6a573 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -6,7 +6,7 @@ "version": "0.2.0", "configurations": [ { - "name": "Extension", + "name": "default", "type": "extensionHost", "request": "launch", "runtimeExecutable": "${execPath}", @@ -15,6 +15,17 @@ "--extensionDevelopmentPath=${workspaceFolder}", "${workspaceRoot}/tests/grammar" ] + }, + { + "name": "samples", + "type": "extensionHost", + "request": "launch", + "runtimeExecutable": "${execPath}", + "args": [ + "--disable-extensions", + "--extensionDevelopmentPath=${workspaceFolder}", + "${workspaceRoot}/samples" + ] } ] } diff --git a/README.md b/README.md index ca9cbda..2eea1d8 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,9 @@ _A comprehensive Visual Studio Code extension for WebAssembly Interface Type (WI - 🎨 Full syntax highlighting and code completion - ✅ Real-time syntax validation with detailed error diagnostics - 🔧 Automatic code formatting -- 🌐 Generate bindings for Rust, C, C++, C#, Go, MoonBit, and Markdown +- 🌐 Generate guest bindings for Rust, C, C++, C#, Go, MoonBit, and JavaScript +- 🧱 Generate JavaScript host bindings from WIT or `.wasm` components +- 📚 Generate Markdown documentation from WIT definitions - 🧩 WebAssembly component detection and WIT extraction - 📝 Context menu integration for quick access to tools @@ -50,19 +52,27 @@ Format WIT files with a single command: Generate language bindings directly from WIT files or WebAssembly components: -#### Supported Languages +#### Guest Bindings - **Rust**: Generate idiomatic Rust bindings with `wit-bindgen` - **C**: Generate C bindings for C projects - **C++**: Generate C++ bindings - **C#**: Generate C# bindings for .NET projects - **Go**: Generate Go bindings - **MoonBit**: Generate MoonBit bindings +- **JavaScript**: Generate JavaScript/TypeScript guest-side bindings + +#### Host Bindings +- **JavaScript**: Generate host-side JavaScript output + - For `.wit` files, generates host-oriented TypeScript declarations + - For `.wasm` components, transpiles to runnable JavaScript host modules + +#### Documentation Output - **Markdown**: Generate documentation in Markdown format #### Binding Generation Features -- **Context Menu Integration**: Right-click on `.wit` or `.wasm` files to generate bindings -- **Multiple Targets**: Generate bindings for multiple languages at once -- **Output to Folder**: Automatically creates language-specific output directories +- **Context Menu Integration**: Right-click on `.wit` or `.wasm` files to generate outputs +- **Structured Menus**: Separate submenus for guest bindings, host bindings, and documentation +- **Output to Folder**: Preserves generated relative folder layout safely - **Progress Feedback**: Visual feedback during generation process ### WebAssembly Component Support @@ -88,12 +98,16 @@ Right-click on files in the editor or Explorer for quick access to: **For `.wit` files:** - Check WIT Syntax - Format Document -- Generate Bindings (with language submenu) +- Generate Guest Bindings (submenu) +- Generate Host Bindings (submenu) +- Generate Documentation (submenu) **For `.wasm` component files:** - Extract WIT - Extract Core Wasm -- Generate Bindings (with language submenu) +- Generate Guest Bindings (submenu) +- Generate Host Bindings (submenu) +- Generate Documentation (submenu) ## Available Commands @@ -115,31 +129,36 @@ Access these commands via the Command Palette (`Ctrl+Shift+P` or `Cmd+Shift+P`): - Applies consistent styling and indentation ### Binding Generation Commands -- **WIT: Generate Language Bindings** - - Opens a language selection menu - - Available for `.wit` files and WebAssembly components - - **WIT: Generate Rust Bindings** - - Generates Rust bindings using `wit-bindgen` + - Generates Rust guest bindings using `wit-bindgen` - **WIT: Generate C Bindings** - - Generates C bindings for C projects + - Generates C guest bindings for C projects - **WIT: Generate C++ Bindings** - - Generates C++ bindings + - Generates C++ guest bindings - **WIT: Generate C# Bindings** - - Generates C# bindings for .NET projects + - Generates C# guest bindings for .NET projects - **WIT: Generate Go Bindings** - - Generates Go bindings + - Generates Go guest bindings - **WIT: Generate MoonBit Bindings** - - Generates MoonBit bindings + - Generates MoonBit guest bindings + +- **WIT: Generate JavaScript Bindings (Guest)** + - Generates JavaScript/TypeScript guest bindings from `.wit` or extracted component WIT + +- **WIT: Generate JavaScript Bindings (Host)** + - Generates host-side JavaScript output + - Uses host type generation for `.wit`, and component transpilation for `.wasm` - **WIT: Generate Markdown Documentation** - Generates Markdown documentation from WIT definitions +> Note: legacy command IDs for `wit-idl.generateBindings*` are still supported as deprecated aliases for backward compatibility. + ### WebAssembly Component Commands - **WIT: Extract WIT** - Extracts WIT definitions from a WebAssembly component file @@ -248,6 +267,9 @@ npm test # Run unit tests only npm run test-unit +# Run unit tests with coverage report +npm run test-unit-coverage + # Run tests in watch mode npm run test-unit-watch ``` diff --git a/images/component-view-menu.png b/images/component-view-menu.png index 75f025f9f7c84356641b920aaafeeb6a1546eed7..51d20d5e340845a4f4cef6e2360f960cfd8a8a02 100644 GIT binary patch literal 149209 zcma&O1yodB^gfJ<0U{yNC<;hPNtYrBk_rmaBHb~-(7YnuokK{9G(!z3A>B2=(49jJ zJ;ZnLjo<(Gt?$3qch_=pXT0~^bI;jlpJzYM-sAsHK??s4#T^_R9Q?P^5=uBYHw18S zt_j?_3BKvd=1~WKu0WKe#BmCGs8+#;>qf8SU*X^shu%Hay#YSoww6|d;NaYAy8L&g z)#`^n4$ej9TZva69JMzlT{J%$OkG^WCiwExl5{`uGfDNwrE0RhPR(}BzOSPsV&{cH z=Hy|*LrZOQ?jRLy#8TcK|1E;esI z^c`Y$Mnfl%_W5Np(05u4>Gb1nOb#6-$$ z#S~t?z@Z;3svFbdbaZrlFkfHBiph~*Ir+-j3JSefxVX4r$tj|432>uc!LsO|x)AY; z`wE}GnU}loQ2Rblz>OMm+kWO*qZnT2d`(E!3`4N|U6gHhTSZiqy7@I?igi$OY}5;pF7x?5!h1&#;GZH>?Aui0cL}?jYPq(f#~*nVH%MQiU>B zH}VjF|2`Zco1v1UT9}M@yYLgdyC1hvPh4W|(?^f~%FAQLVy4}(!IsN4VhP-0#4l z!~K1FM#k0&#{apAacF%Yvoku9Q857}DIu{|1A0L%CMGs9G4VsEz7C-w0luv4jAe(M z?3viw+Wssf5BKw%5MHxi>6;C3c=V7kJh6MTVp;)vu*vl7*&{Kr=?ON_Jl|K8Wi>t@ zAD^&@h=BFXU!Dqt;ToULzv^lM|wIJc@l zGqfZoB+S8pp1jNS^z&=WpPfKJDiMhIL`jJSQl<2}QNv~%E%DzyGG~jJtgEvx`?^q- zqf;+>BANW>`ig1y!4ni6T}7ocn|f*G7t6d5=itesegEIq2UOHg8m~M%cVdh^Kj7D_ zGNyS>M`tTP>2^4&Z(tCgxJY4ZZ~y!EZ*O8og}7?a;{wEAf8n^F?npu4Z66^}sL^<- ziQVS-Fin;Y7;dd<2Tmwj^DkR$U_bz@M>Sd0?Swq2sGjSB$Vu7Q!At>}aIZjnS_|mcig4zl!&)r@Nn> zfDTyqiX8S8>AnUHiGwEFy1Jfna)yI76HfqU8None+fg=4vh&L8c}E1Ve=*Y+ffxO^%%SM#QHm~_W(3S&3m*KgibS+@_`YW)Ek zkW1vn2TMNtAYCeyh>}uc6-ii(I5|F*zjnkUNK>F`Bm8{c@yItW^oPyehtEqdKKlm; zmt7#r$;8}i&Juj^DO(bF%*c4nR>d0d=P)H2K?Gk61ogBK^E)0q~i@}=kD z8tQ$-m``x`E9u?TNQqkn!Y3Txs(5*z(rl{r?rtI8Hs|v69SV4lrWjg3BGzEDExZ&kj&lnuxhLZk6{Q2BoIM0WHClaQpQUqOYG# zo@-S#kK}8ZOjL5_tCw*>W7`h|fxTLIUt#<;1~)oh%PstQCK&A|#+#g+{Lwi{qr2Ik z_^q5A>mjGjoCHRfPxH%{G(?V9M-Y=@rg%^1lm$Pp8*%LTzMW}3$xw=3xQBOV>?T2B zZM*f2Whs1PR5{yL9kyWbVK=FQe8LO=w~-9-1cZQ)PU z>fLM4L_RK6c5qE+^O%kFfg!^bQB+vZiht45+w8S!MmC#|7U|YpoMY*y>UZjT6L%ZjKJiCf#0ZVw2X{RaJ?vF7$sVg1-x!Nr>Q2M}P**Usa7G;Z{=GJ1Y!$K z1oOp{@jtat#Lbi;WtGTP_2f90^tzPJJ}5=!<`&AeH}6fW&?GTq%e?HFt9sp*#bHso z+ku2c2HHO;=qWSv&j~4g{fy%x%ID0?0nN7JUCqrBX=!O)-5-^5!r%79XZEbczYmXb$U&t8>{eO~6#Z)wLL9UZ;6_gKB$ zJl?6zez@F111vUJf!W!~eyPb|i|}4d5oB56xn|`%x`mCYTA_!}HD@~6>+MVn@xdZ^ zV{Xn$$!A&WfuG{EM1JSaodT4(^8B*V>OiKKuWxLnuPxlxpl|3#vq)dq!cn$AcH<

X;NbR$J~gRQtLbF02W*3eP`Rfb4U4*!D^0pTkptViU=hth+ zHs8~nv7&?*vfiDZiPI$U#jpp_b{Sr>%wL0t3DPxCEIG$Jso<;m0wt|9N0wMEQSiN9obrKu0aR!;5MfF z_DxRi>=~YK_)n}|E?kR>Nkb2JltsnI%A1*O`B{0XaE7Z2%#^my1?N@?R42EeHz9;P z1j?5nA^`!Y}K8> z#xACkEIl9*Cy<*BT*^rnw5Q`uM6{B z3~SE4ysl?+Ibh`aRdw8=q0?@$V0&;rL|fFiE)~8tH_tmGn-{Ri+y(x*%p=LvbY!mK z8*Y0?2i?r~w^Q}T|F+rV#n!z+8 z&f8!uVL*qPm^j27w;!?BpO%R9@oDQh>9i(Xnh`(~76cu@gjQa_2al#K4hIg%xjh^* z%J0&h3|GWcB}g@1#J71`{9d|(ocP@|9ez}pB7pkI_x_sayB+6EB(O-^hXZ0@`QiZN zu=Kq6#9@k`)O|YW7KDS&Ho8v4{VFmmL;~aAbFP085$s`vrIJUl-*UM)W4rD+f6{3= zRe?Vx9E(^y|1!I@vsr`iIdtGtRkpEpQ`s?$y!-Xm;B}9) z>hsy-Ssi0reFDw8#^^T%eWed3&;hNADf9csRFyMFDTmRWJ)xAp$tWZxC5vt5-z2-B z5frzHI|slL1m^-+xf%pynTUeIl%}Q54I3wD&nzGyaJqGIZWY`mBLapO7=iB4kN25A zh;oiDULlT0k5VO=N{&x1c0xTaX98?Xp+wx0I!=oZ+|Tw^TSBO1Ra8i)-43b2T4OCH z+XZ_iSg3akYj$P)Ay+Q}S!(K|WRG(vZE(x!>8XsSs{Q78*F#L*~h=thlSlA7#M){e54j}-kSkC_{IccaKZoy{QR3>3P~j; zB?K@6F5|vO6g;LM&^+Wfu3ry}iFxzk1BsBs#%JLAksH{2uw}Aplm{7f#`Kq4pzfr| zI(d>EUT7O=F5k_tXm8G(9uz+N;1p^sbN(SWNagxI9(`$zugB}%do;_oa5P?JeYIzg zI(lz)@P%>TuL<+zxw%HL7+Zb^KJ3;S9t2JnA5N1Jhke|c9ilrv@YW6r&BVfeh~DX~ z=GS@+smqwHK)Rl~dL9wc=VlFPWZP;tb#a=R91)i*&6db$cW!UiA5wS{E=L?3^=CzV z;m}fLnwQmO59f&n_lBo%z?!z*ySL21X2LVYsE5c`ZZE_jpSjz$>m`GSzTf|&>DhQ1yncLihmXz%%)xkUHc@6K8s=tA*8d7WM*cb zTa48)T{U9V}kSm(@3oz`JeDlV3ZHNgg_eSGrq|~JQ6fW@S(Jyzl z@_4szH}S6)#foo@7Jmz-^xOpyy0))ru|&IrVW_H>UdeMh%j~^sk7M|tXHUFV^b`$f!0kRoB&2k z_vA@?dwX&3o-kNx00XmeYV4bmi6I|9e*E#y47{Xd16gi{e12)ndec_6-2AeK z(`UPua!^M4x zEwNp&xL@asejknZ5jN3TnyIH7oevWsqzPK~|Cmw|88TsX*W(Se;UadjMrXuvQ0>y{ z-#-9Q!c=juHa*`cuTycTzSW7$+I1bnT;hiH z%wBwM*PBW?c;;XK^1vvRBIX%~$-~8455!Kx2*iRKwO>qJt}27Zm_y4mSP+f)p>QiU zsqSY)p^Rwn? zy6t15vzt^Nj)d8$L+>Z?FXX1b5D4~`-J-kreynM}dP}VUnE;C(8*L#Q?ScsqTUl*U zXrvERI()aena=s6iZF&v<4u%3!xyk=*6LU4Hu)$#w%MAhmDOVG?(Geg3?vPYi)%}h z3^bms;sG0Wx*FV2v&ONwV`~%mL>T|9=BcuFSbSupo@EuYiHQktRldN}5fKqJ0_5K5 zN&w6g_))O2r@I`YFN19mL(k04zB)utnv52GuYHO!MO0M@-pB?%d?8v@`+Mamr}DU~ zhXRcMRg(|CnR$8ICZyJGRSEd-pIWx=D}9dvc>8Qwz==yhqknp|6GSVP40dvrBh8M; zp4|&~|3xt#x`n!zJ+5cGR_sh$;V*w4lSJD_)CwuTJ*$IB9Z0&4^Jbs>Cz+poVdTLi z(IY!RPcI=Pf#}hr{dJ*>Xu79Qy(}lIiZ6kpPJu#|g=X~t;fkx!mX_>&%%i60vY@Jc@5h<46i^>b6u| zOvx52=Kk!q?G$RPxISZ%7;Z?gpV0qvt3qL&MYJD5E<`+C(bLRgQM1z=L+;w*vcFlQ z-()WO?EGA->C7I@U00YF`J2S!B4?jQ-=>3?ll~W_>LFUL#5om=^>D-`%06K3XP3+imUTxgt9WPEt9fiueJk*uuXx+b zdmC+*>o0)2ZaCR5>EY+8Rgp~TkEk=~ocfZ$Q;)Q*Kd_wDpi0Rkg5TeKWl1Oe=~W-X z>G?eKoxo1rQ*CCoIjxw1dT4IO5cyQOT0@Ku+33hcEp*M6PT_gpXOWo_;a8{dsi!)> zMTo+yeosy&fdCHE&X_WKA#x1>N>Vt!zoeCHx?ksvss z?`V(HwJyPTYy9EntL5XRSFn45vtL-u`kco0D!a~XG>+4$s`*U@3TOBPWV+nBpql8N=qZ^ZTLG(X8+BJncmryjN5ffC=FFGmLtZE2~BpmRB`G z7UEGd%;mj~aM6xi5}PXW%l%Tc22i7>uKx7}{~zej1c@coa7p|tg|!*ATQBHb4@!R1 zprb|4tGIC^__!vqF1G+;0LGW?Jj9z=N|Ev& zwQLB;H3cf@^}+)AEl6IgS|e8OqN~!u=p&h7z{r~smz6#8vR(;Z_buUuu;hZugVHYZ zveT;#DbEJo_zGQ2S)f+@JdJ`=+kr93k<2>0>~!`$NzkdcxhnZ_A}-};(-DAT%=(zC zGU2qGv@~1hnVZW3c)L>Hk_RG&JutNPLF?4eebUCx1A=~|JuZh6Vp z(gd_xLxFN8*U4IfKrIUmY7kb?iDXQx zLK(%=v_tG`3hNI0iv=T7N)+Ck$34bMESEUEsc@wG`NTyv{`K);JbJJ5n?y-F!%n|V z*QEI;7Q11~))IW5!;&vk{Mlj7vxmP&w6=2hlIZE|yTE)L0djSt*8{uBS1{4`QX+$t z3m3-A^T1Apd7*}l@f#_vVn+LwWdk@R&7^nlMcqo2v9_^;YJPk>!u`yd*K*=hroC`( zeN@pC6Tv}I@lPlFh0i%l(f&yyH?s5M~A`C2|tJ{ShXPtFE8Ejpp z@!+;<=vMhfj4=qMYIa&E4Sa%;;_B)YAi!Mo`3g+*o;sgBSHW_8c=+W8D`2-0wkkKw zXEwrmei>(Fi=DN*69VLDKOS7mFeaKF9v+Sd;`xk> zr(kPlJ~fxsQjr^vXs_Ap)w?dTfAN0!_Pb$X@%m(UlC81kFn#XPsNhZy*&DC=`}-ic}Vgxtk*$*YdROMl7hho(Diey?`SM3NH2J~9mGN2 zZeqofe$`LjeqE$~?wEL(&8D9n`rWmDUYnGnF=kHKswJjhl__zV3k@fxuh)Lyc#*v! zV|o2U08t_NjTAMbIda(u{7#AwC;Ku2Q%dTV)xKJ(3EToKkiu>qcGOMD2kviV4bt-l4(4s9naiz>(57LMu%b!7ks0SoMyL02k}#0&%0c5%qkHP5gSgg z)I!0C|KT>tuVl;1Ur*XsFEzFqu2-+LZk=4fPcn0|J;ytTPFieL!}diU#(dbPN2`|i-D!Hatb!_3D7+R7k+?F(9*)ZmUo^rRrxZ3+up&7|=w zds1pO-oAW^BX)k2j!;|pIrftbY)D-m=NMWX_rvPxOP&?m9JhPIBGix#2rd9IBZ1^{ z$@l`oS{Ar4M>JyDaXr662DS{C-sLf)6nYMhu*ypQ5Lz+xkWLKXGr5870lv-z&5Z0% zmjb+W{=jkFUn6IGybxoVG}rRBjQ)~ z@_5)OS2q`wKZJE;-VcOyHvuuFfXN$X-?ie{>BA!_q~`bp390!#@$>sAF+}X?&m?=c z{&kWUTA?m(;Kk+ER-Lt`V?T5UA8ky^TvGXSXmk%CXI4N&wo-EQXagrGMG&O;=)vu!K|TN)!vEC1wd%SgqnEQYOUl)IzE&aPdYMX(y3Q31d7Qd8fG=hCDm6!jdq0+)*0Ps09LUCoe25Etd>0E#x-PvuuD;1c3vQ zNSwqrz^_f7iIEW(2thS9HChXj0HYKhVv8kDS35`CzR7Io4iyUv~ZPLn)hS;s21pW75&lai=J0nP9Dm>q!ZD%EyPCVExk?pI>2N;d#h& zI(u;~tW#zfhGB7iy>oRiySv*q&;|m@RTc~T)0m}$J==@>;To!!m+=Vv*S8D>h72|Nj@d^M5`n7YPC;mZdj2SO68l43#1fN}gy~Q*E7( z55z_KWcHeS=7ak6Q#`Fnd^ZFWE2^Tu?@^gQ&}R_{#Gk1o3|H?gTQ{D|5)}`tKxE@( z4;&k7Q{_55NOUo!2cvXGttGMMRds+_TYKH}7cM#F@D)`^wH7CqI2Qi6bK*I2VAu;* zUw?S*X6cJ^&4uPVt1&4fcc>A!CAS0hSx~(@_G_`EDdFGKrBva?WpIplwLVm@Bke^{ zv4P_T1w%<(I9v%YzrahFJEbx?zKfhM<-==5i;qb0YlH~<;pX04uvWQUkF0^j*sX;F z6Z1$0s?AQ1&{kaa&yBUtVK)@fDB^BXr>k9RzKzO^eV@Y$$x={t>x4NHoMquzm{}G? zmA}sBFzUGf6Kbb59A*gh8EmDp9{EAK7wG?8=PsmLUNwzTa&UOUl{g?yIF?+ol#@@R zOn2`hz7yiXQ2{Iz7%!fVZ#Oq4 zt7B6<&d1JyaJK+uP>yPbGo~O^LRBcb!_!}*Z)K^@CB>8P}gO{N++?Kj(ZkbxK z`+|6zcNzG5=;`=Er)pi43$;b2fY6ofyv78yK+u|6i5F0BFC$VQ1Ct5bt$f5yQl+)^ zsc*)nxb+zMv|`y0c|wW8Wz@NyNFe7o2#Z-9AwSqw%$th%R5<1d!i3F8dM^g;!v5I# z#P}WMc-jY&AijA2K2oj6mZ4BgVdc8nU*v?X&8c=vit5^5PEYq9WwBBj34WIcoz1=< zB|7blewL=K$hdMtFHTKvZGA*^-b`uSUXALLm5?fPx35~GA|XNm=p^%7TZ(|KLOAZw z0g89&v4c?$Y!+Y?7Vrs=oXhJ{SM&WaKI{uaO)u}Oo)d86g(6iqIYOC-MdpLxkJ#XJ z)CLO{x>kO>*xdF>No&_gx9bJN0yA9Qv7ey>Brjd5*^F7L}=h6;q*Wrx_tlQ^woKJc4Cgh@OsIWy<%~G_%sp z%C{2JT4}MySSNe~G}{RwH&cT92!t|pox;L(%F~@Q((iT!t?{#1zGM`C%bt50+g6sO zBVJ@0wx7LaoMteTbOa-mtor-0iil8vz=dhoHH^ykQeO|Ai{6bwNnQr0k!Q*77h%UZ ze;Y?ci~_@BzNlH^&lB74LKs_hHT#Dc3}l_hIeE%O5L zBKR7O==B6tX9P^#Sr;-M6(_<>XW#$Vm1~Ym@kYiYdGUx`IUxPdUyd!K0_-!OI*0EG z7K$#g2J1*w`8rgHjmH$T^w&d;h(>>tvX*C%XQ#&Vc$yQ7Gjd4_>EC{ovX<1E&27k` z*MetQlk_S(yLHa*X)PjqjK;7luHjUX)qCOIA;-b0f_{yKhy(rvvN}qAdg~x;Omx(} zC#HLbq&x4cv4*&yc#Fb3;-b5nJ7#-JIqbL{@AYl0{8HC#1=!c=fL#ITFosFcr-2gZ+n!q z^WU7HHs(KkUWs*=Ju<0U^1fY7#b~ujpu?&^+vrgeSRgFC>YlxPNa;DyQG7j#ouT2H z)zclrr>>$Oul(7lq`U7dXC4y0b={(0?`jH2Mt-6BF2|I4>Uv!DA%Q^lX~J~|b{=Xy z9!tk(3;GF(S8iGL!{+v)B4$_4g#+ABQ8nzu;>Ib_hAG8rBlcsGUc?fDOzlhe2yG0{ zoj&wqDCdDDG7At9AD?O)ncY3GDza1D$AvS*!KyxR_Izk~uCo+%9M?Es+l8w}Ez-cG zQ8X$TM)w#4D zL<}3Rh_)KMXu6FVB?{TGZ$whTMNwrJMf-|uE68*nUnu`cNTzE;f%rOc6_Eqq#`w}L zLMXj!@TM{PUOG$lsNr3XP=he7m9G^dQo>z5B&c|Ng@yN{f_+3jQ`CN~>|-Iz-L5mS zc%A#FaWl81z_k|D1;kDy&PVTTdzh>p8Fgr{@xN(d_oh#F8EyRV_tG(I_(UrDbB{bx z0dH3C#qBJu_1uo=zK40Q43RI=%;|Tc+_W}*)mjz*`W=nXCd?uJNo+kn>e&Nuiw^;< z_F^gq?2}QdPIC>ojzwLq^QY4#?&{PsPv)Zty2pQsXt}nH9y7Vz8%@TIfKKr8?UFEt z2+}(5H8Z&;s203DjXIuDqJC;oxDTuSwlkL4l3mTc*?UbfsZzkmRHZrpfrTRD&gSBM zciD@W>C+ixn#!J?Si^TZ%#6|m_2#p!d(f`mUgEnQ@^9}7e3VfzS?-Va-K1Y67#wc8 zmJ(nnPTAO3KrP&Mer(1?fJ&~&;y@mF`Y2)E5(pW_(O?sznfeN&2CxZ6WBMy)(nqK4 z;le4`3A$J;xas~3PEH+(wi{Q#4@R9bAM*zyg=UTZiT68p_TN9fzgg1|%IW&TCxU^g zHDrEGRc6NtmsS%(ptcogA>VWT-gP`?gZZ=wRx{fk#s{(jwSFI(Pcc8zmdiBU-9;}c z1hDDI#dCRs+!=1CUHzK`m%NEfC2;H>M@_W1?%d&`RnN*L5O|$p*n`^IcJObN#p4cT zn|);B@?H7RWrLeOG`UFhut&caT5dCS!0eD1(_MrA*!Z|c9=F0=MFt^gZEbYZ4sSMj zX=Gq8oiVT1t!+Z&v|b%@+g?4$v2o&IUDBH8fMiy zHt9sEf=EClj03szQ>`=4{@U;pF0P1`6=SU4%&)INN4ZQc0~uCbzA>x7J}18EpO+@4 z$Os>d$%c1AwjF7vsJGIIW8x!XQg=iJlg9Pf6f3%l@Tg2beS>%3N1IvUz3OxT}}{eO-NXgq$9K`A+fqmc;gk4qgAuL zKv#?U@p5Q9mE~k%RJWguUVO9(r3-7t{ZNO=omN||R`(tsaK_%%tVFft8|teYV-l!v zB$Sz}vKU>UlNo+jMFaYtwh5Cmid6dyM)?y|OQ$=LAn_j2r7?$VB-(6tHuE%#P_`!M zhJ8-VjHhay+e#qTT6(_5>ob69mLQdrer!49I`A!P6h)-7J=^&sycy5{hPG6J!PRAn zg}KeFy^C_%1pT@5UDP1pk(HL70UG`j&^kR0NFT~~a`av+Gwz=YK&$ zP$;iqUfFKEy4i&IJAkFzQEpACa-vDP8tE9CmL5bXu~lzHVf7fmuF0n5-sGM6aCVna zgPwQmdnd{lOM|sZm7$?=7q{`^cS*W=QQD}IdF*}BGFsH-4Qp`?MC&c$2Fci=`b|C4 zYXHGtrVaoAoGP?zU08@H!}~i7m@qYne_+CLDC&B|k>6fwH9E-SOmvplZa5pN6FFHR z}q}Uf4-s>se)kn)6g#sgKw44OkqCwss4(>s&K{!i) zBx@q6TC&E;na43Bi^aO*6!1v-?805T!fn_u^g4XprOIsu9_j^U0N4Dix%F}#XCim7w{);M1Z(+(3^MG%|F!XCq^_pvZ7tOsU;dCRjmq%wRPAH>04 zYo|3;;g6SxV{`vR1Acx(ejiBdj|rWUvbU3Ko5yzJ22c->Q$7)^%@Rb!(|R%$!bDS= znv7RL42y91H}I3re_vzvKslupeWDfL8mX*SmOJW70j~J{caJV#6{M{F?-=%fg?#__ z=#mf+XsyG;(U)1AAcbajb=8DMso*9)#mwB?7t4ZowWMt7nw)$xlgs}rqJ8rJ8T^8w z45k)}X{B)q3Kc!^0|^nk6Odk;*~S}6%E}-El!Ji%I|z5|)`tA=Q41D9x3seqQxtS{ zzdL=(A+epxAhEskPq$5z*1T?lpkEv`X}>j*91leHh@_8R=?Sgu+#z-1F~Pc0U zB!cti2 z*8+k!aYFx51PjbVRblXbH$8IRU0qM%ZV@HujX~G3#L{5S3fVEc-hVG-&L#DRy_(>* zWzD}kD4>V_Mlj%$Zz&3Yk8iX|>xlIT1_J4T97kS9R`S`|X^2V)a5#y_TiI9j}qNE4Cbc zgu(CaxNgdyo>}0M*ly&13h~f$5%nuCpSKnrIp+6;5r);d)jr#Hu2hG7a)wiP?~baQ)4YqZo>Nh5I9I$M z@Yc=ksZG0&s8YNba|p>_e*7af_wP)18*viH4^&4TMnu0HD!5PNTeke`C3ad-q36_}b@$LRCz8mgVtC6>i#UJ%-?n5>uGgdLmZpM5(n z7)tFYGOTjFNKp1bEL-wK3b`~s#@b&wMvWQVedSUoiA-)CH4<@09!wk~T#12j&_rBX50LCJQ`7WZ*(u&bl)uw6+r=)x%IY9YRyCx%JWhSYu>FaBnX z)l}>m?@erGx{wyEB{SbVOqFcaxW^@|)BiWSG}H zVL7bB*$&N69_&8QOZ1wu5*e|bOcKYml}~fip2h|{cojSL%?Y5+v>S`XJ=8xHVt;PM z{~;uXw0@h^h=_!+KYzoqzu&&cMDN1deqZp7B;kVxlHxHe-`VpX7Z9PuGrB0=UXm8; z1US~8YZs~BN3z-&ES4F)Gp|JS&*0o1Sy%qWM8}gq;sq;vi#8&#+4EcMb#mcq$jujF z?Q-cQQ-A)1ol-MF0?y)w~SgRY_2}VKDsMnqd5f6fFSV3p2yOwCf z*9G?_{__o^l*si5K~NU6Yke7Si6IxgT+8uW~ zBU-N}C!GmIFU09Oq072qyOqR>W?~A5E(AAR?wSmgmZigqSap9G+WcWRC+vPw*eQ@H z{J^D>F7Fw*9-}BTgHzyjkJgC7b(7>F>HN6MmrT!(gy9KUVQ?-yT{@BJH0Z`n?7YHj zwVlmwjhF5;M%4236I1YqbtDk3Zh;xE-CnnYBTf#l7%)y@XWw{+f>Qk-9*M5-msb>T zOwQQ#n*`hm?CO5Wd*h&}k0@2Z@E)nHXlK8wxbE}iZVR3?o?wxgjUA=Nw}~}+2is+a zj(wvl;_o*PAIK5YZil!=hJ~6FydJCmV(kegI3HmNFAxR+ z&?D>aUbj;u!*Si?GXd?Uu&ar=qs(80-&wJyR7Y%enXWAZLQ*U2FBbgRG~~q0%xZewF7f zDzfAidP#Cd%jdPB5TCNwvMl+9cY2X@JI^Pi8u+5!bPSj-s#vn;T$YZ<6TMtt1TOgy zIsO4dh`0O}FZXzJmfXK}!M>!5JSGmx|9a&3(#AQU)@$-D2r|FUx5{kh*JVb&ZM%w` z`d-R+=EdMs>lmsjh?#r5p zPmY!K`Z27$J%`a>-p`0E+pAJGrWrd(Le?+LJb4Slck57(IU`})#aq`L@6{b6X;Z1& z9Hsiu9JvsFR{0z;*To5`%9N`bb4g2C`rF%zZv?d zF&|>fN{_~shHu4bLs-|p2KZ^}?2nh3L4Qv;u9s|tpiAsIu=RY0lb=KtEmQ3aFou%g zWJY0RR|`Q&{Z=iZhQG5!sLBG9TGdjAsp**cV_5|io@rl%Ct1b`e*n#d57hE>ci;Pn z$4{Lnl!uBX6?!Q?q#qn>ehH6k?NNoLJ_36Wny>BQbR4z6E7g1PzqaP<}>vf?yFwJbM%_ zAJ|B+f6IX_vzS=!UzndmlmEyrmZfG7fE+VK`X5xYv<0UNhN?*M9(DN6-vsuhOOUqz z{|n9sTVDSI>pp&X_o3^qN4&XZL7(phyk+7kos!vbX0Y%7fXjZMoY*t{ts$YbY5{6< zzb-;1DFt00e1iH^Pe1wM&EJ@Ap@rocbIai5@Py`LKE4XU2Na-6D!0HJR%R%#a9D6= z?8YCyZ#HFcmS90;^`PZff%}r~|Da0+Q~5Tv()ASciD*5yn4Z}uGjp?M6#r9zX78V! z%?L8v`6jFE(}C)KgvDM~24RYFl>$44lgjF>SVi8qSN-vgenX~xwdA96K^{Rk zD1QPecDm>}0D$!k4R^cwrmdH{$RW_^;hr$~=4T&oMDZcUBSQN#`X7Z3Q49v4ts8AB zeu>BX3U$PQK-U$|ZFIELO55JnmYSOS7buUotX*>6TX~hpYr*ewzzP%<0gy_=laeK4 zs?)Yg-tr6A^V#^p^9xbq{~F%;ui@=&>ngj|M!+8(ovark>{cV3ZsEu$^3nrN1Uz&b zWPw@lF1*Er$>eH1&gPkUD$-vh`j2QRy{Uu}?*TfB-0Eg!^0oE!xSF8@bE>;U=_Uju z9(*Z4t77dYw8?XNOrrW%-t{yFwu%q}M$3H?aS^J`OS`B3EJXY33Q-yZe1bRT!%}EK zle1ymAN$9j5BwV;#`P>3L#^wk*w3==Q-3Bi5`uo;c_Am@aWnJzPs=uP5|U;>=8x98@G&txaIfeuHBt7tM=b-=B5vQl ztyyW^Ae^CO+THT{4p=vr$HEAS#9o}#Ehctud;HmO&i?E1sA4ZUW#?+!&u&1NsiTmwwFIqS_umJ>qQwmrIA;PBab>ZU1tZY;+1HP7fN#e^_)6!jXb*9q)}QKs zHQSmEarwlwNlv2Cp{lp4k1czs(KPtu$FsDq*)N%1gA9xfCp^-Z2t&b-+w~@(BtPR< z$r2N`QUH}{-^={H5zPp$_toB`Pc@FVm_nK~_$GCKmawJao#rRJQbv8xMW-XTSCyos z${WI6kN!Xl`PHu`0$0!EtgKBmbKnHQO63{KcrUC7EpKnSS|BH2yo4_$C=;&XI_w4TBY*vR{YrIWho5?SdG~bhshsVv>t;G;yW~+(Z z)xyP571xn|YEx$OMpqz$z=q0t|88k7mq>E5Lh*j>sApx(*@MZz1S6*;CNF1_$f{CP zZnjWHc80P(VfZdZ0tf6J!7~NLV$E#(n5C}^>>y`dLwt3fitA>7Ie95D>8Fl`NLlQM zj{J_^UV^`1u%91IE~}40MJmvhfw0dFRh7xV{ja!gsdgDAxY4xZ{Y(&q|*Db z$T89*JYC)gM5#U5%-kE+b@9N|f9re5jL{BK@{<+C0VW+}p@+^R?dTU68XPK5?6 zu95;n6;FG%UK`e;f+n?md+tqxjX-~t6*@{I9^^b;CU~Z%uE9y~-nj#Ewg@XG9TE|_ zO8;$0LpOhGsBL?)t-!kUHGUm8UM-J#U_G9BpRc1hB;7zIOYcmkGw5}vp=f4wo`&J4 za-%-4N17I2b#IsR2;^3aW^~&!NJ$cwO>yPIo4W>-K8-Az_oVtAjFfDX+*`bQ+<_mpIARS*oi$`(XkcI< zB3FEWT}MmK$zJLowobac7&nPf;se(VUZ~c)FE@2<6tcd5m@MCs6KI$lu+Jd%%=OJp zhaFRpRTSypKHkxLP@j;AH~B#IHKHtkZ*sUvP`PZv<$V=M2`ue#F2l_j;W{os2OF@x zlWlkX7^)?jbBA(2>eIu)VyaiG7}HkHnu=WAo7vG8kSACliI`r0H>l$}-Y1kBK^6PN zsv9e>S56Cl#7`cU50=b;=$vpsSvWdIRk^6eQ@k+#3&h?aT@5DUGV*^?Nv4r=`K*qD z2`kww_xRZoG)5{xo?h2a7CD2RJd(~Vj-{|dSj2wR-j^Z^F6EEFMv7zJQXro*0bbd$P?-7MIXq7=O))5eP zs>48$+9M8*zKM?oAdPBne!j_{n33P(yarLNv{q(@Ld~ne)3k&X5&w^9}zeoOv&BOEJ^F?>V{98K#}~T@d~S6qZGFmP+|w%HAuS1 z0Er+V{IXqWBZNRRjT!z;{23D5^cAp5eq#Spg38R?%(a7!g@-2^R3n32sIQ@+p@?d) z=`%F+Iw+(H4}ZV;7jgH$2}C)9;1u8+dn4Pc00==q&FdvsSZ+Qh4)SRMN$Ef_zqItm z(UJekl`A-)tTVB&{=BNWvP0?Lq#q^8KOhpy^O$kOo)?r31XWbP__RKFR2(RvBjRj<&>5FQ4lh|rYRfrvNYPqOiFviu!fchju znlJZXb-rbv`vsZZ6IT8~&l8 z1mHP;(#C+x1AHmS4{iWX{<4T3q)%LGZ$QmAQ*0Y^;Am<@TMLVo1n+AM1V6E)_|pwH zu|kc1)8x)4>$%hqq~ma@=&-=MIgiGW{iaYQ5<4=l22r;MFg-s{{0x;{bjf zVr3|Y7*sl?0g`!1*WjlJw}8C*G+#_=qXaLygA=O7{U>fgn{Ax1j`f))ydN`V&}u!H zbI<^cKn)1MK^Dh$9__Y2^;h|&V!HTz~}_snbrQs4636+_mE+trEcoG_p5k5uSAw%rH^MBTbe&+%dA z@zxbjlRDN2lyYp?!6j2y;-$BjF=+OUwe|NY-z8n%9QF>2n zoS%YgN+2yaS5eBI4uUe*XLj{6Ya20n^9)I|7r{ zqFqJdfSl$ET9R^z)Lu35%cWU*Gqw<;u&hv(oLhrBO4Ny!iub*Wp7LW-ExX;lic5Hg_J`%uJ++| zRIetvCEBvGvMMf-O;Gb!dMY8dd-K02>1KHAvrnu5?X2aXBgZVDYm(8>;7@n zTbID+y$TE}Pt`e}r>bFTBrK|L+aj8aAzKdlbP?y#m$O%sA-9XSxahQn&l_E@lQbxq z&BV;g#iv1nPM@JfMT$_-TCoY>KI>Yn(bK*!#S1d5=5Q{BbL=I9mr`LYKG_g-^N8X2ppMc9lO za>%>lDYASA;_#jsYT*?UcYHQQMeZO$oPq!Fzbr+~GIh#77&!LH7!@y66IVW=sl8Oc zXQ}*Gc0ECbhLKgWJgP}8n}@e`@Mks)LL-Tf^k)oUw)XF|R7Wr7^hUA|WCdmN<(e-l z!WvUZ*~dNQ^!!g~?i`Q~Jl%7bO4UrO`F~h@3!o_9wtW~xM5I)tOIoBuIuuYE1f;vA zW9e29P`VqG6zP^uS-QKsyI}#pYti5Hyfg3fe)Imn|F<*FII|1v-g{rybspytCrNwf zN)j~L`DS+D9W{(de%<8*=BneLJ1!@pe`7DaXx~)$NBy2WjxTnlD~7F6K|N;(@@F)B z6Tl5ty#h7rhHB{0;d%$>sI>$aR!tilPb8UmVk5sSNwIGN)6IvZo}My$GM7(Udsfhu zCXC~dnU{O2U2k4RPhKb8SC=gz9xKnLKMyTRTIx86*`+Kj+5>I6QMN1xu)TC~rlwcd z|Ly5~2@9R2T29Y?A08{}_o9{mOr3!sNATS1I4e_V5L#T3-NTi8PK~3^Z$ff3;H5LC zR`KTxz4LOj`NF;Fy0uO)UT}D|yzG zT_rjEnd#~Fo}L$6D#_;e<)BbouNK4Ax+3p<;Ph6ZPx?86t+ye*C^=)S4=}2Tcp%^r zAh7|{Pk$KloQ9*iU{=9jG7qYL`hI|uXQuk@6nUgO7T73OFJZuDj!O=KK^PQ}_JeRoa z0dKKd!i&uVXg)kM_fj8wKS|U}RLM&?s&V;O`sY2F@)Q>v2j|yv=INV9;e?rCiUq0E zG6!B?Np7C2{WEu{Qcy#D$biH3cVHjwg9s&J|2$dh*Ba}o*7jNyh~uB7>oRe0SvFs;69@$r(iE(3NC1$QVkfU<;eIy#oPKwiHXGot61GvQ{sHoLQpF90MgTgz% ze|ArLSx2+p2*wzyA{AA+KQ4Q8y}fV~7r7GM zGM?Y_Y|M}$LVZz*#1eump?Dw>LIoN^?d=Zx(9nP_>#c@BR{FJ)XHA#REwl2dFPtr! zyMp9rg8zJA@qC3XVR*A`UGdKH7s#P)_9+dm87K!QiihsW_9s#b*eU;tpUrtBpd@M{RGfofP zQ>o?M=Yv^~JFh>Qq-7sSALAJ!Ps?3NIT6UoXZ11*h-L@jjPT-m8o%!5*eV`!ULE3h z75I&g73cr?&pT|#P^=kUK1Mf~N6P29y0GFWTNiFx`%P8X$iF^Wb@_saY-J?--V#PsSj4OecdV2L~Ia? z&eV=KYU0*DYFRM9IW-muBjk@9nK^XX(qS2Oyc)m=x;$=q44qJeb-l2qEJlK;vR>I@ z5+!K#$r=RB-7`nvN@?0MerT5HqER%$AqZ}O;IdgfNJDX9*zoyaa~u9@A&KP6Q`#Ws zZ-(9Du8xET&HUSar9zzknFst;rYy8QYozChky&R=Xx`Tr_$*=XL@GtlkH#?Phd&N< zUrhG%gTIR9P$Xzue+s|VjLE02j9Iw*2aOvFJ`;WRxW6{WUjC^*(nyHOYl;}RzP6il z&~?Vsf@ojhRfU_%ssLktA??NikMG26O`R9N&zQ_d0UlpJ2k-6|7P?eENXdISN7tOQ zm505S)iiul9z@WO84m|3XiKNZXM{pR+gj3`*qrAtUb4+5^*q>84olW?jW^*lIy{T} zy+FIf8ol301R?0e<3EZm?AF3T^9nj&tCRSw-MZ$tT0f+6pi`&oe*wAOJGrRy;Uy$r zeutW+=iM2iyBj(>W4fgb+Oyg}Yibe`cO>_IhsDOUvY2)F4R)n#_|2b)pi78pt&ffc zE>jb=J2phZt}Kuy9}(=lK8(PB!|0Moc3&?qzn0&brVlywsi_2dI{c@Pn9t9&x&u!Q z5YHZ_l#--|wZ+F=I}h}+mU3)7OPV;USUIO=rT$k97#mA{ilpm>d6D8-#)8RVD&R)N zfT;^^cw>w>k>?%(DFU;zWS70-wG}c*i?z*Es}B=B zWf#gh_L{Sn?jQO6Gfal_yY*?LsBAL&a+MG(&T7_rwQe{M+ zXUkX@A-dds^8J^DT_0@GEY0maMTz~n@Ac0Tg*Hpy7+`P{z|i|n?NG3+C&zVQm+RBC z4@2`(lmBoKU~{S}HUkK%f|f*LZLY>bk<2;?UO|KWx7bSZZT9cq8>C;GQmLD0r%aT7 z!0NtETJZN($=jJ4w_8VN(%$iA(cT{Iy@(Si46`5p6p|cdZb2B*H_ zRD=yXPYJLSn@86T;0hD<89bV-^BKApygIyBB2Z&f=`oab*rye<&!_&@odTPNLHFmL zh72^-sGU0gyOorsSO@eR$bvXPg&ga0gI=;j{e(`A!^ANVtI&h zmUuQ>EvmejVV5Rb7Q*IU!8>0Ci!ijG*bPRMYZDpx4fv4c=`2i7H}@eG77?7D5!ZCQ zEzm*rZvR_Y}$oD{c$UR#V*fYCk9sVJyE} z=NfXI(EPLDgCPwxe6Rt7@xh@@Li^@Guu19}4Yey_pD6R<(f;ar1hlYXB02ie4gP`1 zWcW!=`gWaNy?zQ1*RJPtcz7}?LKC2W4uXL8Uz;L)rTY z+$qK~mJ9m)a&jo7HKV61};^3txfOv9J11uW<<>>qwUfaEzu;hzx>GlH7ETL1EJ}5&y z*LV?JDl9caPw9W7Gg&rovy0?rC=p3LtQ0~i+@&<#jBf!}PNSp|0?UMsjSTfBLvZ30 z80~DaW}R+in7BUV9r#IOh_T7#gLtE6@r9YdHfwh}RArp%-c(mvZm0U_-1C$gABbes zCzV8px;_?I!uKTt{vxD{snOw=5)CT}*JO6uZe^03q!e>yq;xM=KkH|&Emf;KYCULR z#+Nk|?v!PFFthPum6aFC2G8KKJe|cL`zTAqAXQJkSrfNzU~YW#iH)q+iOHHEkp|tB z+hz=xK3ZoUnDFw`P&-SH_BJjK!8kv&fwpGz>}iI;U_%l|ZdZEWQ||9&p>Hf7_n$ z>EBRmwUW%WcaFPUL*PuZk80+NZc(w>1t)gi*fa_=FN?DxZgC`&w00WQ>U z5pc1}tT+wbt(DMzV>Z-&xGD7p5k?nCs)$-MoGVXdur3Rv289Y8q9hWtRElBTp z1ThR8#?WA)@A#q2510p0-<65$O7o2+P|P{uC)u)P zl8o!37-HJvObpc+{c?X@A9LvscP0vM#jygd8v4~X4JCVf4#2Rju5K;MYkT}4yFkTu z*=gIWqiSXG+Ch+I?0>^H_RANU>h&_K^*drE_2;FW8(cn0k#1p;+#l((UTDI9vQ`jkP^nXJF5>ey93<-E% zB>(xm4~NzCIDcN-cg>mkwwS+~S#d4fmaY*k5ocb(5Eu~+``#yH3y0aR(o;A=8o<9g zwvw46Y9+6tSU~#lVdM4LTp#FyaN924h1-Zhcm^<8fV`KVHVYpw!g901hF<<-^?cWc zfyI+!)lVQhy$RSM)fAjRRIRrygLqI@ouw)uPa_%1l>p9-YuDf6ehP&2*t!SbxfSq1 zyZO~}z8vj))n^5M1}#8XoLRXS$QPWd2VD}`aRxUc#juO zlwM740!-}$tonBWk3s}2>`Q>fMmSy{@ByM$PRq&GJ|Pt=%7q_qtNv2w;#%*L+NOq< z&KLFXD(ZM8yoGq7#(1+o^ALp7sjsQStgJ(`E}SY(pFIvRma#Aj?AAgJ_Wm^rA-x}9 z+;mqw{zb(16O^wk(HHWg-jTKp&g22dV~mB^<)mrBE8B>#ia5SJ1K+YkOkf~dK|ukr zp!+zf%^hNH8*k9~?oWG-mVNNz^* z?kML7l+ZGx7t@hd$K|k=zYJdhI=$2rYTJ%czf4o&{eAL&&c<BN#N6`pCxJvOoB2k>>;n)~pa-tM@25`#RS**(B4`8gnYQ3TsPfl;3QBATnex%4 zyY5p_f_y{Mqyv7dpIi(Hr_98QzcI`n;^#~xQgFpDFB={n9-hzac|sw50??&UA=#lU znG0ZR=k~n%>7iL_+;bldExo8H3`Uj(1 z8fS?4JzCK$R(g*mBx0aqg;AGdf8-NY1WH`Js>$0muzG%cLzc340cAR{~M zP6jbwNN%0IK+;dt3K^dtOh!_?$0_2PBPD2$atwNtcv?X4>N)5{!y|~`nMNy}(eTs` z*`=%NYtWBGq@$w)dy5_5J8rJ`ydsm6Wdd;-_d)(Ap-##qww{uX>^<||mK<&$_=K_u|hfGw!IhbtKB zpGQUU+p^7i)_AwN;}`f^0Up89Yk33FSvgLw|ANY3bnJk^W72PL0CHqF9b{BrDvWVZ z&=Q;ya+C?|w`uwvBKKXb(0>(D#NLHE!5(BaT$Ua%WD>#91FNqr1WuXS@`yzWHK(e6 zJiB6DOvR#F>Y2!U<}g48Uq#{7xo}mnOOr)OYdZ#;6 zVv>>_HuD8FyYQuGF;xLX{f^!aPNxek{*aq17Z6AV1$%6_f3zfdb`$W)h8}Jz`W&Fl zqYF_)+e4Z{UaORHLH7qqTP|u=jz$}F^LEbDiSSQ0{Ha4qOHX6X7vJcktQP5?FA;Nc zRHh`i;WuD(Umn@JJ;gIie5Lu{S_BF{?f>o&=w((7*)i&oo~})hCHge63HN>=V=;9l zt3?>^^Fu`HQvJ^7cVUiVW7hP3)!p)a%Fpm|e_qv8{K6SmA(mRXE!C-V9xcc!;g(0) zeGl5erp&zEK^tH>#(0=;wC+(d3a`cvMLjygF9F9caFn%WgH@eTfmjtL)XBQ29A%xSlu)Pg2 zw56w!qorcaivZT&2k4$BW6*znVrl34+g?zs`4q9a7eZ;$o&H>Ux=PXbrbVs!~zu!h7a9BuV&)@@fQF&eACuU}!n}xfj{!xWbfrfP3+>R+O zOhOy+A1Ds1Vm&2D*;&CPoh@Un>wUp>%5*1a>`(KVf4d~5Kj zjGg+qOIT_tnRg2_7DsoOW?QJ+gM-7;9-FfL2O&Sd6s}2T1>wtgGW0rAGy`Ae&pd*- z7vGp0_Le0_t=7hX@eR#FW8HZ!a4bx{|HD%lVZx9LvnRc8u;Ko8)454Oj{CWK%1gM< zGJH@d#Ke`%Kx>)50`Ezr$?PEu*fg+LOWxmie|(Lsc5Wl4bVl>QD~Q&uD)PiZ$=H@~ z6p3W8VAy~Q8fx5nzi08UK<^PazxjcAjnOU8+C;{a_D1Ibq2kyj&>&rCZF%48E&i#F z=5emG(;hexa4ig$5}eemJ=~*r-}DhZu}=Yv)5ni@4&|Z+8w%5I2v=q!1V@Edmz9fR zj0XfO#ygiL+RSq?R<@(<;n4e28#2-T@$&oI@#d$U`pr2EhxEa{H=K$jTB z4epnlsf?w3P*s@JoOCwfy^5wlVOjN(QFDWC7S|%56Z)h?jdPcI9L|=T6ay}T&J#;c zLD^kIgaouNP4eGyW*-!zVs@H(p-8nemZzDI@s21Z&@t94FS~um#t_$dENnDa5 zZBRCSW8{@3IEPVDs5@J;T7P)e{Ur{(Kp@y8O~s~UPIFPGx{Dt~q1-;K$bs1^8w9@D zgUYWp-Rt*_v*01`-WXAL!9AygL^1R4UPQwU!E^lTkSxU~Rai`4S+*OxvmF%Ngk>Ys zbTA=p)6OI-sh!#1zi*GcqTeiJeJ!?QZg+V>XkzI%(5cDj72TW6CuU{EbaBzP??^x^ z>)Kx?!v9JJB0h`y3L83Ay# z5x%h3e=FPZI}D~i&y4Prn{JPrpRpKUh3amhkLTie`cvy;S{Q4=vb~7ZpDc$Y4Tovrk3K#G zoEG>EzpwYC_-~ekLiU(rOL#ta#LLPj5#n20Rpe&Ed-iAd7VM~|OiL3rzRc<16KxAS zuKI@zp3FD#TWw*HN^_m*h!-@=Zm3~k^mDE#*r2qk2_ftq$J< zc1PaW;82e?1%;b8UIw{}jcTVMn-vkq01H~7x_gmsugHSsdIUf9fx?B&D@gGlo@6=$ zJ`ez$vMwN*NVQ1!!!@g$o5!h+l@+OW)=|E2SJHr*xuc2`P^w@15G!K$Wzd$`#@3x) zR{z|b8SybGskY`*Om~Pq$r_#MQ)zhB7#1zM+|YC0v*Ub{Y`?*^4BVRt{CWo@WcdUxTY)%x_38EdpwGENww|PY}RIa&LXROLf^uAx3ZE)c4~Yz zMC7wcIxV|v@?slms$ID3VE2S@lBR0uYd#sop4@h)dpM&n6W&f7H+fpibVo553W>VBu`uz*Eo!<$v&E|e(ULcI2Z&>YB~ zi8LMBU6e>)+)Y^(th&*UYj8x!#vLxfu)BmF44?_RKjMjBS*@>5n?qNY*?lFuct0y{ zl=oKbkVF5EoLCkF(gHB?22}mqmSAcK(VY7c21q`;2Vc_MLv)=sPwXuw1DwdrURUxZ zfEam(3pr9nA--LXdyUkTk3ucIAZEFlE1MKtlag7(Z6u8iUzP%qKA`Jx_s%}K>AbVp zt+ZCI@Ly3nILNrl-S+D6$jHcUj#7W`k7`&S0MlU@FovkA#tEF)+K6!-={a+nHbRAP z?Vz~??lJPMKFN~Gi3)ASKz_6tw-UKpJmbVIApy8EYSxnieuYkT!BXXk?j%-9d{*H< z$rJG0rA|QKfn-*=nG!5sYbKp~X|U-4Bmi=t5xl&*n%x_!)Hqc*Cq2&@ykMNMX-Ba< zXHz&#T1<5ab!7%PcB6!3hl7u!e@Gc+Jmh*F(JsDa@Q(P@i1lwTMAYglsCsOGA5~sc zb9>km)SRH|_RTf_CFQ|CGv$xMS9KsWN&ry-hR?sMgJE(Y<)_qJ81j9WgdGr|=>+O? z8X=)nu!@!z^`~AE0UelJ`kP>G$8CIs%H)cxvF%@TTt=&n#(8s!t&r3!vt2*75T$9y80n_4I3jap-=9c|*6qO|) zn@kY4&EA_TBnLF?`zI$xAnVp0%#+cqwnz1zVsGFeYfG*VHr=o#iiDlN#m8&y^V)c+ z;{~;Nn>ZMf5APohs_fSyzZMgV3=7l!V}gG4$X4N2GB+~x`XBqn$P!`m(1Gpr980_l zGlOpK(V>$Oys7bi63NEf_vGQsi{S4PUF4wQ!F(QeqXiLmyOnT9#x~zt3{^vzZma|; zO(q+w;L!K=lmhxL52@Apo#jsn|*mjTBM5i0D27XnEe zPmHXXVx`_tkWSqgTa8Np&Fc#1?J#}wj{?BTfg>-J0!&@_{+&bEZ(>P2_w;UY-1lcv zjRd4Me(xXWEv-e8a{N;Fv*H~Ckp@89V9Q`)H|(x}wg7yRX?chy6KjYz)WgidK=Tb6 z9F_QBNu?izzk@*H3CScFU(Ab=uayt{PkeJU%fIPlxsjmwzDXSRb#tr2%r-`83c8NN z^Yv&Ocs3dQQHt7vN*(PWWr@)hUwh+ygpawOsh737KO0tURdwR>fNtX#5M^s0YIe|N z;BjWl_?}cn+VvvEsC_*Zd{i~!Y@HM$^(L*V>TYb1Xf2m47uVFtKbGCW%b(2c(~K$$ z2jui>qg>t73<$?YZF@-Vm&TZhJzC|mAo?is=kHd25TE@yC<&TUlSSx>=89*a+-oHN z@#Nr**IElb;1T@{R0Q9c9C_PulO(dl<{0!)-qs@-ZQRkh4KkUl!Yia{W)NyER1fm- zR?#j4Noy6&>pP5Ea5ZQJEsZSsa0^Z<=IWAVCr@a=^dW!6HO5>Y%~C{oyX7bUg+ptb z3oa{q{vhy`)~CuaLGESCFsermg?>dzUswGJ7X|htkNxVYr&(JPQGOi$n{$cFn%zmF zfgtY^n}I|TMYtCgO?)%q%`#PsH7|xGRxNAnH}@uXuZsukeZ#)6gPHn|8-+I({8Afj zf-PxGLK>lUfOUuV(~mh8JO|b3`5ID(GlY}=$7$uW+pS-H&#$mUE%}6-mf31`Wg0fr=OtkcXO|@=>lNbGdH%Xnb_p9d629 z1>aA20W=}$MGny5Sxg=I-Aj701X{B2Mz}g?f#V*frGBG#rpfic`h+K@2K)HCxg=Y; z#C2F_-9X5ZCKRSNm3+xyVYFZ2ugK%RFWu$5bRa_Nz{^xZ{qwHS4!3`KgC;iDe<;Bu5?ehha#Gfr5raP&U`aVGsfL}e+s=$?tSb~;j}BI5vAebec?QmJ zEY4_>eg@!L$gy0H=$aD7?}*?7nq&d-wZ-pNTuIMgCR2g?>%(<+>}+#dhW9zVR)q*& z&rj9bK@&2Gv&+and1M#r?@TInubb?`FZQEw$sF0n&nt5nDEz_%R)u$np!>5c$mLxU zU1oB}&9I#SkjR6|qhnF}maFEmsTe=& z4FeL}@&@^Leb&ua)33I-^fu}BumH!P^gZ<~)3BAqG^Z#udLLnJY*j$>gT0#So3^8 z={Nd8@aHNiMWz>V-?3m@b-RlN^D~-0;zK{7H|~Im!}uVV*6@nJf32)R6fF5 zYlxvlzXV>J#KbEDM%#UJ5TZr9de8Y#xJKku0-D!*ML8PQs~S;97s#qd>bFFG(l;9a z1t%&<2kq3HK@q*hwJAhS8ga9c(|O=SQ(MHLe>eU6Jz9_ACAG~|r0s812*@=T0}pSk z@JSopDh`l&h#^4?N~f|dA$ox*lO~P0sqIu(^}6R)BweVj&?9{RASq*4`=trEG$y5u zeIW3hzm}(d`M^Bd_}!_==FyBU?7?cC`7V85UtT~wc)^e}jVm%OtcUt0v!>hU&oRgu z5MZEhEk37^>BRtUYsqq|LAW-}z(0YFI7yN1BjqwIN~IU1&+g^06T3C+NU?RkbU`0BuXP!O?dA2^w#* ziE>DGyo>QxTn*~8?)gLo6P#VAsOngCGcTNODFpldbhe|9Eqg`8IOE;bRZg=$e0c98GX`9%v_F-rSK3eU) zSN-zUr2KJE%j+hejnx~p4yAEAfj^{o5-0nQGG$9$IX3^ZwfPYbDj5L?w_a-II)5(v zBuC`X=i;ln!OmId?-rva7e(PAkM|!NEqcTszz|C6=>WbC?$~BtZ`2*)jentkaAr94 zfdzJ%k{LA`OTMDAc99B})GOA< zTot^?Nk)6$t>`7Z;#pT>8qe06w08}690fy-mcEsDlPwMZNoXCLwxc2H>Pok$Nev7b z_5eQb<@tN{l1}N_mP_AQ&OL*_xz{n>PcfaTa%Z{u+0R%Vr8U}R#Ai&Mn=aBmvHgr| zuG)pdddKulhNa1IeGmGUlXCB9Pwx4Lhbg(8yPJ*0Ny1kx)i#G)Mlt(^rYKiCE2Bda zv&sR#MMfibH$1nU5;{yLU%N*dwUD??oPs8wqZj}EWUFb3T8a<|7Uo?b25BX9R1>Z|-vcs(d(pc=}q#}xQ@*IzC>`kB+5`*cZ`@XOdAzN7ziNR9qq`RShef-Frb z*1|%g#?K9`lV!QCV5x+JYVR)uiXZ9EJBWj7FJamzsr8XG-3#46=}gxTzI-{buVkWB zLjLaz^$$>TJ*nzdu4hTJ0;UI@UkATFy!2xxHnD!-WrS$E`r}AFhnZbD&nW+2TB;nq z{}UJ+Fw790OEf)h=WtubJj$Vm=L~c4MgNo41ZsOtG4LDzH19y1@&78McbWoV1Vb5+ z_;Ha?BVR~QQHl8}Y3yZceW2R)u%tEy=b5;gdY>$%qav=HEXUcqX3+931G-kH#U24A zc4I+vmF};FRoBKq2MmCC40MzGSOw#@&YENjSZ57=s4(ldTR_gwMw9RqQUm5;evR>k zd%(G4^eB5m;nLR7=uOvuq^)QOf7e}ni!nq+?O$rvF}sCAcTojV(jy9h9D)pI`Up^d=}S zxU~(Yg^#M5yPUN^wuh3Ga4+$okX!7DIeMsN!yRCWUSOmQ zc}&B5U!gZw56LPTctCqL``~P+f9t};x$%O^=w~3S!5wh!!n(5?9qx}I6RdxEO=_G-pG4cNGeb%pQ$1+Zg^-_Aru z-fu{L*C7O?Juooe!Nz5weg-7&F$aMJqTl_Ou7JcKfTqc=;QK`eii}>9Z`7cUifD%4 zNJLm^#;E1qy!7Q6Fj5Sg!HG6{_AuO`VG})i01%Qo7ko_A+lWHR4!;lChBG!%pPNE?@~&4B0MF$>);~Es?dq8D zjo%%JSb@m8(>V+aiVVHOQzJUwnPQ zklYPK8A7z#VcPGv8E71mcXY58T3?r~y)4mdZq56ZF$oPdaJEKYQUoa&SuTN{y{-=* zRq>Xy16efX_mRSky-wCMO|JhSroC4pBY;qb-n8Y99}!aBpI?aAA;lTC<4Joq(bDfI z`o=B17EaC0uA&Izo6|F6rF1}=XvNjxn1wZH@(S(7L*~^FxBGn)A#&nN(p{dl>uYgp z3HDEVw_T>}t^kJdxcs)Diw5HOYHRC=F<_APv*YwnwqX)m6O?+k2w)Mgm^TtDY>1SR z+n{@xP-#!Cs=|=sUR>FVI1417-9DW#xTl7!@Y{lC%}*Kn?TU7o7k#@YRgOPewG0E6C=AHDcCnPZ(jf_(X=H35P7q9M zE}+6YHEGG~#q}gzUQ@lAMm*J6}>gJ;+r7dRy6t^ zk`?^E`41%Ra}{lb`-p)kCFDasnAb@r?xz@AzUHT)QLd+rDJsRQ#^itn^|t*7aXd}= z+IVeI6g$Rj(9(7-d-m+4uR`~+?jL+&J2OFK`Rc&4qOP`k)=Fj50cCN?B}hc)6E;^p z9`uGQ!etIe(LK#j_zGys|ESdH&taz&{0S8tSULSj*3)t?7qHw<3#zg$fDC;C2xqVF z;u}ZtzFRAOdixDT-Ws7b9U6I%Qw`0lT!-CTy1NH|E-oF*)xC625*|RJQk9z636*#* zix<9?e)=gXMelC;^TmB;E-TzM5YYDw%zyqJB`^z7koO9W`>-(3y7G^mG2)^8U zruB`qp(i-F1nU2d-_yq!3!tgo?CNbzZ`5}POEcww7>Z`6oI3 z8~@bqe_9i9eyAR!bciSN;vsF}lRFw%I=MCFyNCnyBtX9+9)s8!o*Oy~VUuqpq3bIC> zP!{YAxi+|*TfSW>UOd4eXc08QIT?#fOSdS$8R#41HfIk~UNyVOwFhww0F!j|arym6 zMJ^go6kN^_-7}X((Fa&p-V#_2PhkdPIyo!nE6+}iGMhbe#n-;rEBcbbgW`&v>5aFblM=AnP?AOL;fkWiiWCyzMf>I{h?9m2LiRG z2D`WWc(|EHJrmA$O%k)o;pI}u<0Di-Vy@qi-lwxYqjMKZ)XK<2-WbA>g-G`K?By)twf$I z41dYe)X3F&k0tWMjhAngkf#1%pZUii3u;2xuq&_k2XOZq|J*IawCx@r5lYgP^S1RZ z6KeZbIDa(L@Urn*y4;e3qe7^T-*Z7MJL0GYztj$t>5{uiyZ5;{FHGd&Eb}+kjx`j(hgcumUi!z8k%8Vq*TuG;4cNrF6j6jTG=jl8(@n4A~ z&RnN7`49@V#hieuIx09tm!B*9`6d7x3g=0KgNPUEYTY`-n=M#ouA&WvR6yiH!3AJkf`>ES#N_*#F*CLskLHu zla~*IDLOx`yq7USi-$aMp#12j4A3Vtrw4(h() zAMYZu$sRizUBX^fu3nxlCe2=9jbe6QWv-A3v%s|Z@o;~=bq^L_eTyfSs|hPvKyIVy z1IE`G!tfwd0dQo`x`hIHz(AfFJE_O9JgM_Mq9&NX){=XhFj^2tWUVwXFhE5`6_;2T zDdzGInM+hjyaA5FlX7(K1FkoTj!F$KpMdA}xnM`Qw6@u9E}y=(PS@L1k}FGTBjfp7 z!c3D0`Sma7Y7N|vKOX!;3ONXa$r@S5oV9Ds@Cc&xAPS~OIZMD3TDZBU1i}lPW?g9E znnf8Y%8x)UdJQ|HefrcJs6K*+hu^`&0e~hfsZHrMBQUhvdE~q6wK6`j(WfJk=%v~Z z^?PA+2`!$-QS5QCd;w6-*z@^Y?MRipf^o3@ERPmo7vBwmNGD(^H3TX;(2If(wTBOU z`YfBw8}F|ShN6UPbPRTM!wQgFA|u2lB`G#O=^j=Lhd0FJ#We?jUf*BUF%Umz*&MIS zD;H|_#OipWHhz8O<9ygbn_JEk-Z_F{W$}-?b{MBpAN+q>y`Vx=+78Vu=Z2*%a z@w#WI0hj3whO#{*Bm`UW$pr|*zgX}m>u%}Hi2pBRWYR&hEqv1Za~zvHfTjDqGgVn? zw;~C~2g!o*LLi5c3yc0=K22~sNPAXQHP7ncdb!^+_Y zLd|Yv zT<~FmVAip$LFZ6oR~LQnv~w;P7{0ic>cz?RH{OJs$7_K?hLDSmOXWKlH+Y*I!a$+0 z1>D{5F4v+#`U_CzrUAF1~Ab9W=$SfH6p+pa8PZMUN zJrKYk;)mWeHgTOR-~dMQZeJ?e^*BElm0R~S$Zx+Omq$UOLA#XnqPBn5KYgL2I; zgor>0%S4eL5(w?e1T%@j9BeP})&oHh@t-ISzl$(Qd0oRVUIEBv0q@PIn^dLq7x8D@1JjkGK=K6`>DdTA-^FU8brR`Rr8O80 zfd-PxA|fMOz^#Q3Fmwxey z*7`#()-OTno<}}4t)z5q%+e?nD07h5BVd&H7mQ7N<^$E|AY5obAYo`o75*EoMFslE zimX312Y3t&Jz5*=V}}-2Y5)gD0%dYdZ*X}z(M(1;yI=jM2*JNCLaNOEA;hDE;(ypx z3p7WGRVQjly}$5BjV7d};A#LzWH=~@v4pPXkHzKW)<7H^!WFp9-NCGJi`m+E_~3G| zvH`nqA*d8RoDeotx7BiNNCf))<}Mbn=v6(RLa&$akp3rh-d7$AJR3k22$#2pihy2w zk%s^%fX4>^ivPS)taj-@1pFh$@taG-n5l%A0t3D#-!mwo!ffc?DbB5qYW51zHCS&` zH9ImY=ST``fUd>W;@0M>a}ma|;uS|K(BrzzA=t6gR;q+5aoeoPP*A|@T|?WY-33{# zIiJ5Oie}sa4W_FNIj=O}OADF?@ly z3~A&3D(eg!t#GDKx#TkESM9pV`h%2?O>(b=U-F~%^9@DYInjBfCwQ0Rp~)Rfo}-T0 zf@m556)(KQB;y}qn{~bl6H5*Wv_NHQlH=>u+hJBAD1CIx^U1?m9St>SWxAzcqoviG z&ZsCTFn6er){`3SB8cSF?8t9KIBD>l!)4!q%A2;vYbnwWEAHV4ga9kzSb1#XR4?o; z3LKXy=(Jp1YFw?92 z&xIBKcMh)7tLy+x6fpafnv&87$oC*BsK7!8W{|#fRZQ>v@q&D9!KY#I@e?CP`7_G( z*{7NzhLCaoect~Q?Wzfu$khMFl==cWXP2Dcginw>n4J-Jkd|s-Y&s~wJ_4lbp~= zvc|lHP@?(*6%~cqTYE7O2l6>78T(8cOSV~4&rO^3J6$5&DdA#WGdD2jmlIqTGpk*4 zzynU+VSNuF^r?0k|X9p4;97y330p>73%CTeKz`jN)m6VeT1>y<}C6(X z(IuLzZ+u8J(z-8CRuu!FA74j78u26lK;knjb@D6?ZV0fi6P>Px{yC-9UpvsNM9 zpPu<>;lw>XcwozyQGe`Pr`%@s`#;dy*@dWC(C5o#*Sn}UY307x|F=9JG2&M}WfL?Z ztV75tk_{YLE9@Cv{mg#I+<;ke525xWrDXTL{93qQ_2VPvxWHdapYI>RF^RM4(d8jb zw!mz%zoE9uxLRraN*iv* z`b4qi-^RkbE+{eQ4HDD+89r^dN`rR~N*5gGK zLANn}1kkAd_=qw~b1oC{_V}=R1JAQqc~>}5X4vS9xLaxPYFNXNqC@)j$9)gzrOx_p#_hQq1%~-&5~Z~xuoTFCPBgY*hr5*Lk9yV z}uN$I56iz$r@3;q^1GtV_ z^9}0+>ag-v&_M0QB2}TNU`yV3L-AN8N^dzWU1{=2NfAsuzCU#_6gPa7%4hQ9N$#)! zkI8i@N~mG4ev)U%L*e`6z7H1%S!Q27y>Pdxz+5hMamyh*#U~MM7@S#-qDNZwi6Ye8 zuuOiN&|Jl|ezB$!5^prLU) zgmV4^3JCLB_PSZ~at8m0&u%O)FGnZgjRG%J^ty1_qLPqxy0WVN;CKDo&^uknQ-jvWphAKCB$CO;yZw@%HzO z$+&>x%w&w!Avt4T^1f8cI`K<6B$iGo8BwhDmG%KLhK}BJA@|PNbXxBgcYGMv>2rwR z=?1D2boea)K}~2BG`NU9IMeYt>y*WH<&&XEBEnD)yxYqutSKIX$e&c=T|Bm}yOH$5 za?3lH=Nk>t&ZddNRA*#_^l{6}KI6kUsBGB_MKzIV^&(2&^)CetH?Cm9G2B=MAKZBk z6nHsc9O%#xHt?^2u_ZlFGOun8>$+c{eDMbfphQFxE@p2*u=SK*H1}=kzBiSJPo0uk@k( zg!A*RY*WwMCfgp<<;fqt;#$<%!4OGlPN)61Y_Py2)Px+N_4PXhtay=5tUPp%ib8P_U8{DJ*`YvnC_xc(XM7HGZZr*Dn^r z9#QNOvsJMfs$+%L)%q&MOC_XK7f9G}lD^Eqb|j;Vmr^ZXsK-6KAimUmCRqOZN<#(J zjK_IhW;LXU0t_|JkJcjtCpVyV;dIU)t8lFO@_nTh1I zDI)u+cWg&*1yyPs*@))o-!+svpIK;~m@hfu3LcNR$q9L@sm*le)y%k&Z971|vnbY>}Y^ki4 zlt8nUKH-Z(t_XAsQS6>S`q*pVKbwoCT>+}>(JM)e57XaxSk^HO3@VD<=g3*!a5VH8 zH+*f2VT4vEQ@07;1WOj0OxT~yx{^vfT9CnkI+ z;#r;5srdh}_SRuhu;11&DvF2#qLKoFgn*Rf&>$f(Al;xM&CuN-ozgXclG5EJ-5}lF z-CgfJ>T`Z4ulN1V_5Fbti~}=s=U!{Cy|#n8J~~7RovLtq4i7gzg@VVh3-Wv))jfMT zOVAS&CowB)L+IveT_BV!-HQw&6vbw6D{keq$V9nVrUDZGjApJtM02Ef(*t~%XdjHD z(AlTI&y{!$T}g9mCpSULskZvT?pGP|Bu(VMhC<=-DeCI?&G;P)T~}{7#dhJZK_lz7 zj@XBqHlE0oKktPmCHeS;BB%eE55>ZtdQYyzFvQ$t@AuKkv}c&<(?C4`{GWj3Gnsa~ zIokk9GU1{VN|v*fyiWbIa2t{)p^+hK2zh%3iKyi7!2|!m5Z^Z~EV2G{7p%+W z2F7)?K=>^+MSt`lt{vabJ@xTp5C-KRs=6eoKx)hc8eS`C(@AR__?SrDW8UPE88nRA zm2-C%Kr`a8LCw-2N=^LNzn2cxg zRVL`PxHx>=2Y-2RTS;&K#@6!@<&br(A?<&fUp4!Zl!j@S!EIQlJ^^9v}u@#b6E!RQN2 z-w8$gkFs8m2!VK^joG>)hry}`UmOw8SLGt## zR!c>`i!7^%Wf47s-~nciM~z#i^!~aY3y=8jEO*6RRtTV;)$yIX8gxnC!i~pg*x_pX zHg}7C@Y(LjVO0B)26peRu89uI%a?adk=|=ze{WPg5OG1-@Rlx=4SRRw;%2GE;xdH} zI*N1_`JS!DQ;cMU+xqJmYh6b_=%IkVeUljEy)U_~PqyGKNJc~yao7ybd7YwY}B zz&!2Mj6Y9q;7}oFvqm9f)Rb8TI5ZZhx^Dgw`JFyv+wR%+Th?DE!zhx(npwmAnh zg0H7tlb{_ou$`5Zy|d$h{3|-Sj-!vgCOX(zKF;;A^TpA%Z~R^JUY=IXU{UNd7A0H? z`UcErbQSFOF}+qdu@EJI_m(hhFOhr5r-f9Xs&?yj)?xqIJ*%%+td4Nu&yN~&DzDEs zGBPv!G0;c^(-+p)$5Wl_)|n&V??s@2%P=U5m0EBZ1?pgkntl1~B1l_RU!8Jtm9a)f zmy8`xBy-<3Wo!+V-*z=CN8=pUk)5}EX;ZFBc}Pjx?@4H=<*QtEkLebf(nRN#=4|kF zYr6`8c-OenCu^b>hf{+Dg}l4)+o#D#=Uun)xrBF%9kjId6(G!;s#+D!ule zaWk(~G(5YPS;3gO~q?5I>){8zE*tXWS5nEWvL>1ep+cn zLLvP{BVPRd62;N@Ch638`**oI-5TR3h)aAwKi3HO3_jcZF3bU%!!EMNbqmi z%Wc>8j?ISZEI4?soDtrB_$__zm3E>>!EF79pleNJ@w)8v>vE{qvvBGT`Ixn!+qM-k2W!ET zBvq%z_(5n3g+d<)NJm>ABwVyGbl|ePgw$MJxF=+C3aP{5 zbyB`|;M>>-x_#q&m0^^m}b4FLm5~=!wNfzLr9l*fs0li&!~HiKTgJld94gyN9LmwMmb*5 zKUdC2Z{m=>KIGy-{vBLCOGmQ!i$i}t`-FFtz;=0X&~hJ@>{D@Q$037RGQK!@I>p!M zRlcj+@nW-txtj{xY%JWwjjMtZQKU>XP0zj!kU>83YQFMDcgol2)*LLKl~e2{Z!^37 z-l;IQk^@%Qs{jyaTCUnu*ua#$Y6+fzrc>Fa9S3Mn55gHaMZ>VNJhSS4yfQbc(+c_g zm&BJkJn!h)49)xcRRYskIB4?}ENZj^H`~P~EXC;PY&5?Krk8dclKR%Pd!O&{G;YVN z50_eoVd&d!duX-^rpHA=hthO4w`!4B^unXa`MJMQM)IC`%q^+(`jX=QLX&*z)QKU_ zx7Ql$#6U~CDK9cH&B_BtjSK5x)pem?&iMz<&2HMH;R+OubJsudLPKss*>tOWxc3$% z2jLxCcI{gyQ{%G4(szXoX&!MikW+-{K^f-VsQO~Rp^>S`#*ea#=r5JFgd?Yb$SX7n z8jV%*EIRTiPT})%SkaWqXX&2nPf&$#T;AOV5BD*`-M{M=4Z&f~3D}vmaV|s?#D+8y zB_k^)(-O5u&@*TBAzafMB$t{e0?b3cp>TXJ%$9(I#kRWrRafRuD~s1;sMqM>PiqE7 zE4PVzu)+skddBoo^GxB^rg`jotOz?xo86<{yq?zP!r`xJ^kcT{4cGUbaVGMpBRvI@8^dZComtN%A9Y*%%_FC>1 zA@K?pXyP=Np)I|7E#3S1+Ed`z z<-RyFmWQgpMEojs=7pj5XA`vyw}cL1b6~Py?sK)|x+gq3trYLW*bw@fS@_9-BolHgMYBucL+E4KhTUR{B&0%_KI_Y!e%8d8g({!n1y08 zEAi9Fe}m2hM5D=zUglx%R7F@HeYSZ3qlU;vr|D}aCTc-E-f=(ITV}PIB+zva^^ZxE zzdPny!#auLhId|1b5E3>TTRF*P(RDFt}7bSYNIQh-cg$@W#KMfYpaf6 zRYmS{VQI!zw&l{`nUu1bYxIy3l<4023OrV(ij_|`~Z~U36DtDIededDxhDo`Oyx!R^HhDji zT4oJy90L&q(tuKYhJ#5y1u-m>^5qM|_%~9mxX^$Cuc_e<$v6WE^7he|6{?xqian+- z6si(uVe#H%`Pk$$9`jLkgP$XsiA#q+!}S_ITvr2V4{TM9wd-rVq(tc(9J>g z8Sst6g2JU#_US7QmA^3@pG~H{B6f@WVft#tOZV2{H7#|K&BBKi$CrLfd-UTo!hF9E zYajIYvWmg=?HZc4od^adGc)tB5hqgXRWPlCUkLBc2b7n1cHQWaJ<9yX;;54EvCJZy z=6yM_*3K%9>qIAQU&xCt+kFrVAo=y7CfDoIk{l0Ej{26o-@@T?;#sA?!Qr+74T-A5 z%)2vq?DIIK50+RIMy;EM8wbc(@t>0t?bR1*%8t2!J%g4d>Eq7@l5wtqdrM!BII)ua zO|7hIPU|$)`Qp<;Wqo?I?}$oA$+|z8mBrqC_37tL_J>LR*<0%wkiZByeB$76TmM^&y=|7aZ`1uY zu?X;jIB{eU&+^c0hk#Vg5NQh^sLz}^t` zRvFU0O+f8YZVEv1LVsx%+Fv}jO3h(ab#7NsY+N)|$}&~PUIQwNU~~5j#HgD2#C?G-(t4~S=)Fe6Hw2xKUm>8GO z-IIi~^Xq4Hr#*&IY_0zbkAV}frM(>$6kk{68Rk~B=;Ze4Edr(xk*ogD;DI{ne6hv4 zS9+e~@85a*YBmD2bqO}9yHenN{SPW1JzeYSwX7?Rb1s*ksKV3)r39E5! zE_|{^gNKV;w$B?3CHz)^Yzz_8B@{&LQtKd4!BvxG-PtVNlGkU?0;+Nu7&Y7#B@9%&uji5ykZY>Xp{O!xhJOrWo5 zHDZ-jQfdRXJ8{*OHan6twN8k@y6$3X=M@dj!j8)gXWivKT54)4J3G5+Cv90VXCIZQ zoy|(a>BDVA8bl(Q^({#t4QcCVw9G!Dyv{qk>#?@*ui3%@a_Gl5 zr>(q$$mv5aHy4_S;^*3nZO+?w?(7{L6#25HH-^C_%O)FBs8Annqz5y%yv{S_I(pJ% z7sK)KPTnJoJ`By4&@q7jzw19CKY#BK813I)6%7xMKYw?C0K*q1HkF#K0CQ3pE}}*X z3j&Q733s^!|0 zD^9>*%~|1{nfVE`@tjRb9J#x=4HpFfGGQVeus6?RaDEDeVGt;8yu_ISY^9RkgBK2Q zJpForpBz29MR4dwr^^xM;u3zMg}s~cW`7NhSay-%r)4LVfQOm-;uF4p$xyuw4ILB$OL(f|2+0v<7MTeTXHd36-Aaes_8? zT)O*-^PmK_aBi!r(xD~V-S$FDIhzM5R>5W?tDAO5YkFDws1k;}wveeraktUNu9CVZ zX2OU^5yn;q`b_dMcwm{FFd5Yq?cNIPR2g;FWzE?HztabYA?vT`)yf)fR2@4MI8%P? z4NmQi+BvXaF!;Ig^f^8sA8A0GUQ-2o6f^mqN*gn}=EId`R{77);wqb@M=HZE;*65z zXX|Mt?PZtmQ;Cy@G|~QTS+8F9ByjtCd!sy|lx(W6ucrVO1Z)kBjeCcOi~jVr--?R| zDW>7*;^xCnS9F@p4pO?cSbgIAhRPA+afH|Dr5R_vKh(oN8&8K)#Ytu;eO4Ygnt^RULovsLQ+RVU;F)qZn09_|8_6J%XykM)$sU3dJ_on&$9)=$f#_5+21IJvmEf01R=CgLy7ovTx7+!+o}LfjzdwS6L59oEw!Kkw$n3 z)ukbRaZc-}bc*P=fpN>9Q<9DivAGX=c@d4!eSGe-^kqOzuYvPZgAwZnJxsxy95T_; z-_N5jc7GAEoxgjDx?1kmIG#5GjPNXF$^u6=)iyC8k^a} zv)v=7`1H2v=V@GM)`{Wfn4-V`1>Xh|65aL7IJqySQ@_dT*kluIsgIw1n8pKx- z@c&Kzm{;n~lv#nkg~@rm0LcZ*v#cuOe!0-wLl@S}3Z2Gr9b$&h^t)00ggxha>83SN z?$|@j4^bv0l6pN5Y$YSjK3*t}i+@zylah!fRtpuT|2IYiEXVjrumLf+4>5zekE5qX zz>!?BUAckC3InYNLg0M3KIEUD5v;Y%9a4A6?&X4e(^W7UoB_YQS3**BHl|*so9q-% z)~+lBC1l>5Nz&IZE6yJo9PQbBHAIJ}tTv=t1#rk$NYbUY}3B>dN z|0asjVpfawEfh7n<(*51UeSxY+w)01zjeQ{vn1h(5W_bd_$!&?`q$Udi_OEVX5wfL zLw%)Xff!E4M8U|7xpmo}vUo<(9W4BRSZ%vS0iN;qMZC%t&_^bOvMv(0iyJ?hW+&j2 zn^#+#P+iT12pp>Nc4{wzm~?yc4M*s#jE=r*WM>ffMCqQ(p3Q8W(bvsw%GWL7=t|+= z3r=6peKzRTHS7`|C>gq#J=+$-@%&PFHhr^x&9W1En9JD^A|Ae2y*QajRzKqwnq-5o zI&#$*V-R@Zt!2s46%?N%XJhbGk!^PN*(Zx=>A0gKcPCDE86`LI*{72aLGcV+I5%fK zz(~gGhnb{r`!af*sE$hr6F<`t3ZeRom&>2_=_n|hjr|5%LUy*~p5rLIhn4%r9eGp1 zXp&>yPN{q~01sb^f{}BLL4I$-2}F7f~nw@M9}U1^l*Y!vJ)D41(XDsxfH&caNuy?m4nE6jSiEt4FUby^L%M#Z{>95{f7AwgxNx;?iT({+pa$g7BU6bmw5J3*k z8ECBx8r8;=*gSjIxu98G7xa|^OY}un9PjPLzX5u}pTTQ1I7|t_%3rI!-0jsz z8C|_)u^A$1xlUF$Hb*=O?gA*@Ad@F2)?>}^h~wS*vZMIupTsXkw~VNIJIUVkKN7px`-*?bHx(xZDrti z9ENY?#u$s6_%WhL-M~?yY`xA}yK%H(GhDH@G;6sxJ zVrQ#$P{g<7Z4K~tUVL@rQOu+vN$j2&8u+sJM|%`F6!9avSObY6!zshQ-p?w zhDZ52P&QY67CsL$Dxih%o>EDtp#Qk zXQB1!t2-SHse!NaIe*E}fAUi#O%Z84QO__$u+B_5vEYc&xn1#g3+vG$`Vzwn*L^4N zpSXROJaJd<_*yM`5?5jny?gA!@=#vm;#|W31q@1e^JAQmU-ac>CQ`wD{2lco0zN&< zz?W4G0H#Ton=8;fa@=VOFbS4B(}W{4*FWm2yK{N0Vf&lWhQ^+TgTJzhyJB9+ z!3QkBD(1Wh4jZAHM*&G)w1T`3e}c88fxprN#&a}UGY4Z~cM2PR5IGS51O;#ZH4x+T zeo%Ak2me6`A!M2>+EaQyHkFuJrLgM#{gJ5TNF8qr%d-ok7KA+FFK>XUF8ra`*Eto1 zyq*dmMQAh6^V*3d;(H&ooLLg+3G?G-El-Wb!;mRM7pvI?yz?lWTJB+AY`jc@02~mV zDBD#WbKZ9L?xPBV9`HlZy{EWNmt0+wEtdd$t+n<_1CnuCf+&}mhjMtw9Kj-JLi@Z? z?T60epZ;bI<_^sFhMm9eo=oKH{8#$Ghptu2GHJQ#m`uXUu|H>P56E7+AtsO!=Q>s1 z$!x>AnW+@$ROY{<4-9ppKK#};ED>EUrWB(YuX{YIW}Up&K#5BK%o+>8_qd=h&tOcz zzflNn5Xc*PS5FG!{(XZZ5+rM0khBfM7!v{?tSZ{DjAHYw`*R>yeZS9rP$H>xp2I7Z z1D|Fm`G}qMChAq5T~it59sBxR^@hwSku}}F1FQ1B)+v6=7c>d{n#1l{?szyFIcX%6 z9@%K4x>`W1%$xn6n1o%e(Qsrg!;^t;7*>qn#>6UOja-RU=<(B0dSZbf4x;MjNWOd= zK{5J;BFOpQDIL%;foAN9ec=XuF9QfmHOB7N2lsx0Z;^K6Hp@PlZEUlsz*egBQ|>4! zA{`iA;)o1i@mkeI{bwC0zFw(bD!;yB1oPi8R3b84SNGG!Wo~`^CA(wUU9fb9jqaw) z1B4WBjOR8NcVu)?sZY=CxEP6N02a zT}$nc1LmNWOZ12R7Mg^WVhijO_AsmMMrRt~^v&H)$E~9$+a(or4R@Yj5*w?%^(_NA zgyp&$)`ZHBAVi8)&=aRA7$=?jTw4lLBQ_Biw*#~`-sji;LnwSR2~$0hHZX^hsounj zZk?^=@zk7?Z-Hf7wVz_1KAc%n&SIyX(H^Lvk{Fmy+^&u7sf$)QKQmI^m=RSSDeWmT z!oxhiR62J&^Li-X`lH{=z3D4uP5OjEclstKI$)0ms0N> zFJnuKOBw4)v81o7I_FpET6EU6{Bs)kbWVX?X4<0~G;v{eXlL=$#?^nJ)mLFSzK4CbwUIGbq_}Kgg=QR1otZ=vmv2dc}z4wT6#Zx%$ z?uu+2#oT4K4VcwGY3b_etJurfrC@78eKjjG0pD91pflv?t^=dO!1|E(U8`wCO9A{_b#4ubnOo#fC8 zI$8|(P?ig$9%t^Q$`(tZ=@+N6<2Vr~G(r)vrT(a#Oa|rebFO&L0NAG8&XM zu6lc5CUtJ)lj$n<*ErZby!QoGD3x4dTeSXQG>I(Xe*x?NgLuJ9#UU$WeRE-3!b*q) zNn|;Y#39bA|34x7j5b66M`R!vU=f-572nW?sVg>3@OGl?M~O`C)Nr&Q=Nl99D#Ls8 zY){06mZII{R&oZpRAp-beOlv?pF0HqO8^)pZs>Vh(LMI(B+ym}*)f7ofi9?Uj{YdP5|t`vdSJG;|wtF1`bV@z~Tm4hqbSPhfcQ+?=U zoB*)AlH;bv#AKcsI7*_%0mN7$r?+eG+}?0>4lW<$Xym?6(&R}YD#`gTWkcC;*>7dT zVC0csCYSpA^z9dkib^w!dn<>>J81Tq+fS`ZtYSk1s10AE7XO>Bp|-$aPa5iP=IB$j zY(IMSHMNqdb_{#Tg83hXcrU;B2zpcZH#^~~dst8B9}3;*$Iec&MnoW%kPRAaWG}2d zBJcD?xAke;$+JkZz37l~d2IKR%%U{+9QCF%kKdufpkF6+Y?5dOX&43}fg7aJe==tY9AKg5Y1#^ihCcQES+@x0xiH`z0{ zNGdIKnurK?fFykAs@_j2p)Q6U(`lq^cbSEtCE4*HyiG=4tjH?+zJjAP1JC?z2g+@nH43ZI{17!+FXo0* z_9(U2ZEpPpYwHox0O~Hc*cfI0QC#CJQ)GHJ$|Lds($O;phhf89G$6O{BDcgqdPuwehO1W#BLNZ)*OuL%)0OM`714uCZ^hHWcA9a|*Iah6mFLk)Oaa z!~2~;4mwlM0$^Xj_*by`YZGqGaQ6Y)6NU~c%~+*Yw;V#77t;S^mrD;^+z#iitiC*o zX42i)EyH=orf>j+jC(QpZXrX4wx+r+|A19BGlUFsf-FnSdb~8w8(p)T_=+&xrlWHB z*z%_3C?_Hj>bYy#)rgy;35su~8odu+qip=#4o501Lu3RjP)Vbhm)_%wPsWbE{%n)L z$-h1J+VPb#H<|E-+R*sbQ(chunJT@o5y;tB9zFq*5{aht#kW-s*!OBwB!EcdgnWm} z`?B~WY{C#NZZk*!!YI}u5usrmV4pcx7K&3keQzGNacGDk&6_s63*O zD1H*Ju(BkBU?s*AiAzZ3KdN{3^rD<6h7AYU#fgNym9|OADYyn5WMLCKLN^DK{o|1< z_~pHokw*~2vG_vw-LYFw1)pMmWr?}&m^qG=afi{z>-DMR8dE z!{1dC>?5&uLaI6Xgd;u8GI$)~1Et2I9s+wJz4>xsT!esRB|;s(oKCCi`NVE9pkt9` z!L6BN%V&WZfeGjX{)?#NBHiBk^>x3nuqTMDpQ5@|M7J7=N4X55n0FvuN>*LHdvBo? z_G#ZC8B>u$QBm=CPCs6ul^jy#dLU_@5aqyvD&-`hrtw=WE)%MZ^9~oSKQU<~=suBZ zdaxB?LFb$3(F2;u*1Azkv^(I`!UuhA94IrOy74Q>JES^|O$#-oi&ZTZNX#%*-tl-M=}6dj@S%Gl7NysHN$JW7&zLb_jiS3n)w4 zFxQ(wzZOt)u2cz?9S6Y3l;9l@YOi=6P@!2rWt??UV3^`yHn>HTfKe1btlXR)8bX3V z)2sK-AN15ZU4Sy1PDGU_V7dUD@hDG<2SbqPeD15&8f13(i)4D-4z8;KuiuH#X|Oos zezP0I$B-TtTNwo3cVtbs-bSY6J3F>YDP^n&GIhauJ&db-%z3O3fL@b8+Z|l-y3NML z?B8PY*o9u-UYL~PPH}&zkDni@7#2XKX3}d<;GjSl4zUonnN0$a*L6IMceiowWi@QO zMT?%Ni=h)WaU~_KkakUg#Dm?XKR4G*f8q~}1X~sKgSgq)+JXuR-9^wM-9Y7j%XF(` zq(94scRTu;*`@qgGdsG$g0il(@mh z^2I&Z{^v4mD{Q$893i;L+HUw3=-!U*FANDGOGp4K#;of4h9>3)I7Gh-FkAXM#`mp{ z4=_3C=whU+g5a4F9annG$&=m{UVK`-23>2PAM;D}PDMIM4^Pw(N+d@}F{Kw7bC&js zP(d={^s606=rH}-XD4P;wR)?|x^Bq(HGYT-X>66G9>=S9rgl>?zQ`sT?0m zK*3Y4Fl!n6kTW-q8>3#!u;lFB)582rbx<~fsmCvBN->hja8j<@t=Y zvkw737yC{fS(Ytj5I{HmMFbo_BqYRW%D`f}@DJxaUn~zFjtUOOKtX^0OX``x{qKx= zzg|25>+#ZE7jNQ9R)*LmK5tyEUH>s|d{ZDwcDrz@fsAT`=?8)Tug9 z2lmM$HFSVGHf5H&yPhu=S8OSjVr{fMm&Hv#<4sBS%pnh#FePiwqTI-UhM@_JgpOY3 zuRuVM(u@v88z4wM=B)}!yt9d3rR&X&%N5e=TKi4Gz-9GE^3P(+?7jFth5oihprZ2P z`*KUs<|<`5TVD?EL$Ma&VdTFkPxo z6g1SMTegV_XxJx8>2)utAqXW0zXDSPJoaq6kL(eLUXe?Brsz^?je$6HNtfxQ&yhTR zi-|>D)u+>6?yvHo&sRO08U!-s&vWcPa#!JxpE{%iB@Ee?bJR)_{HmGd5RG;2dw^{K zx(qtr?JgA9$&S&TFMH@m30%S=m~AA-;uEHQvRd7&O-f?R>$a!8~*k9Nc?bten5!-3{^Y~d#b!fdzBJNXpBV=1 z5p{ip&OzCQ@vSMB6#3}u{s5AuR*c!IIxek>JDhv42cp`UnI;*$?eYSWI{C=h8;rCRx^-ms3!+H1UD z+#?_jfAcE4r-gQ`QgXq9AMGS3UtvlmW2g))yUJ8oACaM_lt_PzI(X)LGf{UxBB+o8 zGkW@uq{K`c?NUa$`thlx;m2|o1^^fm1(z?eo=qY$5{GolZ;vjpLAd$2SX44&@u`5% zafMt2oGAH;FJq>QvU{v!e{Vsv8a2d|-A1N;EFhi=qd0nS)9808$6^Yx!dP%!qXk0a z5C`?8yX`81M7OL|*g?pEZUa~lBQdz~BD&3n$A45uc+8PR0*%UlmPcrI53HBC$|AWG zYa}Z3eQCX)U~Q89x|`bD%gONdNM0Z;baoSHW56{I+)r~>`Fs~?#>7|SC=;l|<4RG#qm zj1`>S_73mODj++H&E^H?$B^@}!!u-Z!{eufn0^zi#D$N~-7Z?rx(r5~9Ypc?OUK-+Q~Yl0dCU-1p%l&L&J}wo%`Clkqqu za8r`d5qCz?zJw?rU^L>4p6)G-m7Bc;?HEVAk$n99wZ;my&p(pHK70PWYay67C@(LM zhm0;{e{16%6bf^U*K&XI!o?yJ=poAmER{lw)aPYmR@HkIi8W&F)3>Lpv>0$r*S?D$ z>lb62D5&334e#jmavH172_A5T9N1}d1^0I1o0_g+cWZ=G&w8p9i7tGoYwssH1zNZCc@n1G?_L zAU%m?gDq#asP$WA8K~9Yege`4R+#g2sA;0nq6zx7tZ&BBFXkDZYZU4s)`4*QnF!&NmkfOs^p5J<&P#AA2JaB0FSYFf}Q5 zx>T(4p^NFiq*57{BGx*#2-U@Bj$5@tj+YJT9#g-(&liMZ{cj}}WaFEKDv~CCRM?yu z-I%zuG9DH_)?*Nodi#)pxb$T9+kfLe@cl6kPAj6fEvRfy-4rEmMpU?ipIxM}ywss! zqA0?Afo&DmvuDklV?_vuro#abq}c?A?T?FXA)BKGU!pYZeGy+k?i%UpigYz-jcA2R zLUN0(EG^Oa_>pbb-8fg(?UV|w zh?xgPcg6)zJ*bM*+#fz(4;!ldoR~8_k0YU8QAr7!4wo7*dDNa8pP_xr%oK~Nb_!gG z=qZ0BQQw>6PIxxUcEE36F(jkxlM3U6JZ0Wm)we5&-Jmu6ETy3GRo2|BqRO9)1Ex|M z5mh?m48;AJy_=HdAR8*vw@w)SNq>#*Tq?{@%#eItV1Od??Q$tipK=cDW~9Wr%=k~K zSDZx#mC;p2?2n9}{c_V@7aH8cguS^B$*-@<_C6zVKl=HKo~54WPZbjxXYlndl|yg> zl2KUL+lxbwOf8tC0{TBv6z1&>J4uA#kGtY~4hjxPjFivg1`2OiA4pEyZ_vgWG|{S- z=38wjfObz_QBgQxFX;lmFs{9(Ck8CZwU0O>W!M!HBaOKetOVe1MML(%AUrucutb z0?_?F#ld+(K;U0g#DtI#53cukcpxK8=0HJev|xz zF~nkdc4GrHMa-LWDA3T#xnHxA;J_!E&jX;uByd?^1(M#rn4^u6U?6+$|MiPcLxU*M z=~%f+12nu^uH4970G&h|>g#*P-sG%uiAqA<58T3!OMYoY{y#8tNeW)2;{U~e!Hw~+ z|H32Kg+p9(Xlw|7OQDj}?7TEJ_RtlXs@bALiASlKkp?UIod!G00M4ozn7(EvAdU~U zK!QQ0>?ZY-jWY;&gRycaw2HdtDa~j!_xLStzUJoy7*xR)uwgE_Pt&Hjzpevek2(5@ zQ*lG=Yx;SQ?h~f}t6KxSayoieO;9C_$kwxjye1-Sz?%ohPYU+Wvx4@AL3@>819aw>0 z`Wx9{_T}Z}C^&V&PjYf{46t!#7M+OD&;}7=rzXJYAf9May?4*d%nUe)$mJwC0-KCz zE<5uuvWzjK<%*Sr1#lHR9`=cFfkwXJ5z6+jiW9HES;Az#_)f2pTQ#Oz2be!@wG>xZ zSKFS>dAGN>lYmZ4z>&=i{H4sjQs;!#O7M;{va%LHTKpUn2!=m_w$_8g!~1|lj8oLG z^X%vlL$W_w7t+z8$gAFeaCCHZF5c@8w#Uu&NuAwVY7{##vitb)WB0T_i``kjIDLWf z6bE?KA?xF;yxQ1}+^QhNVFgx~;t3U4UT3xr4hKM)UI;dt_13uOn33@aXjmKUa3=-gyXDxTddX?k|z1iA5P8j(H3eHxgEA4Q8TBfuWZBHHBXL6KY3vhPm341=uRwdJ3e8$b=gsMN4o z#Bpr@_M`x%`Fa+l*+MzlTNOX}DpuY@4J%9V4*&tLicVlqZ39)Us4U$F0oxSS`M_A% znC4;t+Dv}yvfK#@s*C1Dyb?Nl{|%H#>^tq}z@U1U6iG_JONMS`S=JTDT z_bz*7krkb~+@+8ZdCb_eHPYi1`{T=Ua@0y{3sjJs7%6@0KX}DXn}-N5 z{Nk-o{)35yn(z9?#*oK11$p^r>5}m>Gi=Pvh=cBZCSKj?JQ`RqsOacAqxl~l_nL9m zIUJ5R3(nBo#*7qbgibccz9c7WWnCEC+u1Q1jWU>qapNzpKQ8Vm z>pqN74&bg0U&V=~DcZaZs+4eddK78srkooAg-Ff;x}gMD0=qSN&FkxHP|NXC$5_M{ zMA2YCt54_sp;+5FSWwaHGAYL)Jlld>{zG8hbSLohgB+8#MD;s;JT9(04I_9F4bAY$oeo9WtL z>WtyEF|Oj3vZOtkw7`&*l$K46HtznlgO<{vB~R zvHD7ZIcaEUI0b&QLl53>*a8dEv9U2IR_gI^?a{DmI{@4H6*%BYz~uyCNY#xGn({3G za#0&p`hcF~po6bXF>t5+$QoC%o|%Odd#QNe%+A8fDiy>eKqLaxX2#Wf!qZMC>X}&+ zGp%U9>Reo|cfEOcgIzAaGBuj39R0kSi*5%JrW$@L_S_aY zm(JK|gOYn|*-DTpYnk*^qp}yjRa_5>a>>;@RcOa1HD7_q_Y~M*LhKJ;>Gr@$XlbF` z<*%rzJJPf-)vQ1tSkWQnJdGN5`@zc2;|k6w2Ra%WEf6KJb8w93Pz)*lI9}75YQC7{ z0i#DwPRgp4j&c~a|z>Ah%xvEkg#JeCgdjI=`F&cXlH+%@JQ7wSu zD{vBhC?+5>@un6$3{IS(6Jn>s$KW;;E}~sH9v{ltnys-vlF5^jl%!y1$K9NaN;ray zk5hxt$`CJ57{o!z3E7!7D6p!^BgB>1%QB+&_U+p{2p42v9&do=pb93!39*dtprFgm z5OZ2fKlY z#XzT5&vx4E_F1|1z8<4)Y6i^bsd64lX3b5{B-Q?itf-<$nj zije2c%Mbuom}!S`e|-MYrtw$skYa4mJ9Bh=W*^S&@-N`COzT{NA~`ZPwkUAajt7(p z9{+hSzbR(*#4D_ZE?(%$3AC&kmQdx}ltKoSg73tb=ROjiFogVY3Pwq55|ki%}`S|J4GTGWe#fRK7dtA!5{@^uLm!{23*wf-h94~h?5UxH~*bdk%aCm{(g~pK5NX1 zOM(=%j$k7CMG56s&VWd(?0vSC_XbQNAWaWq66Uzs?2L>#M3EjM0q5rCre-xHe|mQI zkpcHmHts9giV!A;BMZ<)<&SC-KknXBllyrI|CH7}C^Ft+U$aya_=2;5!Y~-57UL?G zI~d^=`gkcV8?AYK$=LZ28h_9%w6IWtK^^FY5wivW+fmGzhk96N$C>_0>5cXos==Yw zmO>+{gQ^AaoQpstybwdD=CDv8P}=G>T&uga3mK|ktcA_u>Df#pyH2G;yL)- z2%0I0Gp|SM=*A(Qo)+SBe6Z^KJoY-WryGW${~YbTe>@P)Net zZZ3Oo81(ze;uHl1k%2cXIBxgjW|U+?XPiz5fzR3E?p!12(jEBi+Y1oYFvfLXo^RxR zdu}}pqJpV(mLWHUAK$jv2V9ZOn`MRAZj`uTnmpR)rsyBLXt&Rm)djYDVw$o8mnxh< z)}klG?$&F-0h*QY^xp$@B^hU4+!Kel{0~$v-rzWdVKgV!v`IS6`hjwr5U0_SO~B-% z=Qt#)pFUxIKrRaTZy50G@4Zvqv!K-PC2!iOuF*tTO5%0kVw-NbVd7jP^~>O5N>S?H zL(^nuf7Hx2I`xeh=Ii#8GrN0@D4O*4ciXyDr#o{BB7`#2#8XOV$l)`2+}Ch zrJ!_3H;76%NSAN?CLZB0G%E*-aYi=h|9EXxko3>vxB$4J+qcX*gU@@HGB^LchPheI6i2AS9 zv)@k|Bl`AI+e6})6cV0&cTU7gVogV2UuWbv;aqg;AoSpI;b6n~^@D|`RQ31oPvD=> zZoG9&yu8Ic6f)DklmxK7e(H3_0A;0>ttB(~+&U)N11=e~L24C+fVl5XlT@zFSse?G9*+I_mN_~v^$u0+hP7YFeb!g`^#K~!=}hG%|>8K~y;)$E1N zPuS#1tYNbVXmbr+p{f>QwaF_BN`*0gKrfSlwO{I5E_-LsHU< z&VSRsyJ#PFo{IgB%UxqU2mUzQY)0qKCQr|$BamPIKte^WdCW(g@O|3t1jRyTTi~Dr zJ37CJ{m9n0E;KrC?GZ|Ne<%_w)?o7O+_bSyG%-((D~J=1GU&|QJv>fJ80$mc_`8jn zHf<&pXbq~Nh}nT6+||u329_vvxCF?yI|v5n6O&U@S>O$7N)|PhrPdhgSOi=|Zg9F@^2;sK?OTgx56=cqu! zG)flSUeMb(uoCZs(dJox)zqJNf2)|{HCINhpNr1VgW!D2H+y}{QiR`9`y@@C(diG^ z{AMtsnb9|26A7bx1VNT+sYLfwX@}1jb7_WNCVg1rS0OFGi(~l>LJqekNn`Owa{`$DR ze+ih3Te(qbNedBn4JX{n?8t(f&(BAO&*F|c$DX*b*g@o0E=7bSE!FW+ROFgt=X(*1 znSY6(JBY{BzdAk-*!j7_Bzt_bZL_T|6){)hAew6ug?!GaaMQpa@m6U+x781(-%!I} zh&8i+DD4E7%6i{DsNC6eM@Qeri${s6s@@_eCx?#1Cph?}tn4-J{S_=cyueGVh&u`< zGywEciJ1POr9@hbm6a6BH`$BpW|H=yt2bbf**0Bg+CtUOG3^V0wck%<|sTx&d#L0@ebOmBw|0Ou4m*+Q$ z-d2Uv#r$ylCuNb3)&#&dP@P~^;IRx=JSgA)1xcA~)?4=+9UTETcQ%};9a~(~%YR)` zP!LRExAUBPkS{?9acZX*JwVasvOM~4;l>AsjNquGqb1-8ppbquHT#*}6nj_kzFpHq z%k1I^@dlD?tUb?o8FNr>Pka*oE+a-r7jsGdZ8K;<(+Igf{?U2{9Y$NC>B>Z0p z35y)6nYCj=;x~h~;z-`DtPj9b8NTAq58h?#&)d$sev}aB46%IPy&C@aa{3N85PheV zZNLd^s`>l>Jt)~-m!VGMUJ8HsWWaBY;46^ni{7dz z+@kuBmo0x4aTA~=_uFo@hrX9k$g~S6qD7_JZ;kpk%6W9OTs*2p;S0MjJSMA9G-U&@ z7X~hwEfy%Gb^$;^$^_`8L_!|N^_@lmV7a@$-m+O`W|~ZuAU!m8n~}9p@n_RlNHvy} zNf6!Y)4p$4*%^>xZS>c#YVGi(0_ckPZgEnjGu)zg z@1_ML;);eP;)e{R^J(PfVN`nThKl|QtoxO>d$uOuH;jbneVF>Pp`F{_i=Ow8?$Pg> zdo*X-7Z6>ISQH>d?&LKP`7C2^7){O)1inYLQE+`&ZX>FA$K`<`wGLoAW*g@Aq#cI@ z{!H-q2GqWO8W60Pcc9=lTaV{iSN2Z`3!zdo(lo-^MtARC_1lMxf*&J6!xj^BYuNtK zHaEAFDT29v)-sy{eCsE9XIOa8)G;~lXr{2=HVp`8&RJa6yDF^BfA)HV>ZXIc zKvMMud#UUUbzCo-5tGB-+v`8?TqkUfRU7QXq)%7G(40@w{mE3Nb0ed3aXzUxLdC`1 zE~;_MC8|2jrUqLJ{Y)~_ot*l2YeA5vyZnChk>Hh)=Cg(vmmPj%h7CDv=R4Qkgj=Wgqs3#a=@b9L{@E6y$(Fj%q-ks2TA&kKLdCe4SQ)&Oa> z>GS^+YnS?5%g}K1_QZeYBEz~&LAG%FgY~E%adBB{b@*;>ZgdO`G=L@N;miOD1&;@5kmPTFLWVshq1Q{?=+T0%tSEfZf_wsjJeO;EN)MUZwuu$)2q27W+N zj9c9PdK3=nHMvqJZ1XLRRga5rG@2({uJrr&-PaWpH!vzHis%>!_^%>Y1tT)N0jcci4x|{jX=D!?mxp93 z%~*HLwkCA-mGl(lMh>{2G1@XO+78&E@sFZg2mNTr>i)yS@&;-zHY zmXk)?sM_`QKqB?2=@7fVl+N@O(HBWwE0ZiCWD74b>FRdM2;WGP0GUJ8g*u0`b385$ z^^WXHrLiVpH^yaMrb1a3%J{Ez*73>2iRPG|M<`-7&fi)~KB3b7!NlI63TsGO67?%3 z?)evr+MoSOot7v{sMf-~On&uQ*tXmi5TQCk1QX%-AcBR^E64~Nne~Izsi-7m;9L(G zt4Td({RO!uL#3tT|A_8Q9iw|>n!x7WQ^*qmBOU-Sa^-fM{IRbnj*?Xh5+TW_+L75f z%m|(Tv{;fcZ8*jl{r+Uzq4~E_Ho5m7KKKSOT`$YaOENbD5v$v+yGIhywkw_#+>tO~ z$r^2(dPn0IrIdQGrJOOE8NoDu&ykUjUc~5GyHU7|jKTg^}Xp;}4p2h|UEk zB+vrZAM^eDGqR&NjTw=DQjPeq9|IT+QUc_60{{7fYy@B$2r&2nh_!{KWs;O1f)>gz zCK(U`9G6E5VE=V{bVrnIwmRPR>(_M$3)=K^$E#Q@7t#WiC5xXNd{^$Zd1DqUE z0(#TjI%TBUSy=%r7X;-RfZ?@mZLdUWYHMns255qE0D6d1)U#SsC=>#Xf}S@fCg!tN zM|{$wG+=p+*PB?r7#VnZdD*~hDF6^u8A(>x)_x5Pgh5Z#tGEqNxldpqKZJJT5;IUy zQ=c)}4i5};DlWEm&L2Z|_VGWrq0>I<)7fPKg8`%!{SH*vtfq6{&}Grl4nXOil7Iv$ zVig+)h_Z(;nG2-M9su3*C;=0|$=nsBo-LPlc?eKicpJ>t2J*J>rl1$Xifwag)BFL@ zJRBP&-+mxLv~=^ij$4tq=g%i*WaKAZzQUvU?r)p|JQ1J$0ogmcQe>%xUt{6Nfr^~? zeR1#Udl_kIgreNUe8nN^%v-@BqG2pfKVVOTnJ+My%Mn(9EqY@N9t23XdiDA>PZXDJ zC-XKqP%v?6cj@VYA5eyPtr;GD<5q8o9YP^y=;P1qQ%0?nlKV9V78Lj4{u3DcGzH87 z?8`~m#4x&Q6?(UUG(tT=Il1dFwPnz3Ko2VN72p&;y&jt#8+(3ufVp$$j@EV&>=#wM z#uMlK_&}14i-45JALX|$v+-!fNkq30R(f}0eEb@V{tZ}XuZY}W1p`ol|Lt^Q{d-lo zmfEUD`#Y;<^ehAOGi|Yh00;v7BRWK%0~4Cps6TPps2-LA;!ur1T+;C<@^ofL+p16 zsMu?RcxQ!do`PH6LbeJcGHCJ4H4bF65ia#rKQlBuS}5Bk1A3=znqVJ#XD9_Xr)3WN z0Y1QFB;F`rOy}1o!+1oA))h2?mMg5UgZBtiz2g+4584%$S&d~$)4bfD!VSmJGGKyZIF!@(aE00^J}F3;Zu9~4v&8QY>DUmw=+KR@P1~D8_5^?Qd3|dR~3kfgU+BU-BXAo zSu87kZM+h%gxOsnMG5YDdG8+3&fhS%yE`Z_CC*H&@&;f*WRMsr{E&y;Fa-20GC}=n zLhzuR0mNgi!7JJN8rB7jw#jRd96l~%msl2oi%fUFNvMEj4W;=P$+n zPu>CSslxx-rH`MJ|L^`R^Bo$oY$z!}mc+$pWc2t*_}3sz!A^TDErOlSxlQvuD4RSe zxRtrncyl-QW7gM!gMtf9%gQQCaq1@MhCooXiQ(KHtjccTYCt4KVPRoSgSenGbFf}2 z6hLwoW4^rflgv?RH1o*#(V@gW+&2{2?8B0;*6OXG)QEBur@pPnP_;Rs=l611Mrej2 zmO`f2IvrfSe{(bB=!4Tekv(zTZ*6Vuub?V112;sXgz)w2*N9*Rih>Sjc@R5ktSdq# zQC(956mST$9tpBH9{4fq=<69;;^N~^L#aOv62vL^FIP}85BYSdD&^$gz9vF^8#3oF zKt{Q;uFe_wtsB5IV?OBl`S`SI|72ukEf|UdBDMjluTBlUmUXx8GZ662+RqE0u)xE_ z0@*gKgBhtE-eF8m!aM-rP6YRgs>E3Y!@ZM;m{a| zmW^|l_10&|AiH%yK$Gy`rbxs?w}i(*nL?Iv94yt-YkAiIot6I3e7nrBEl)5w&TffK z3APg+MH<9QBQK9kn1=%Hm5NFWjB?rRDEa|p?PehqF3t2=N#>7wu11Ih$BvBhd}_8Z z8W*HI4*$hK(NQz0YK+Joj$B}(FewfBs0$jWv9XOIC-CIx#6&DXz977ofMey8-L+33 zCCJw5pi#D(r3T$YooSDfbN%~v@p*}SwiyAq%f|mT$sl!ZYrQ^x)8?(MZJ7!;uS>c{ zb;O0~qqK1br@zvF?^VcY{a>{Ixw{lD_i@_8=$ks{c++seCWph>w;2Qw#qNcSh0mjP z8jqj_Luk-bivZ?;tS)KU-`~GWy9TsN4zKGIGjjin1GX*P6j7El-?k4fXd&48#61eJ+%PS znK~9YWfkTYZ4s4Js%+M0P+uhK=%93Za=GSV!eD~275Te)xD~J(Qe>cy zQ9CXnuc*DBogC!PkRj>`qCClXk#|5rdysRIU}Iy$Ft_%lEh7U1gS&U{CMG6U3=Akx zoUM5OIHE^GR!Um>^{ZFUp>P4U$!6;y>u0LAJ6~r`vEQqQ2&;1!Mp88fdb-f9Q#D6& zCkf>g%YLQn=JtL)>b=sh#Ue5tHm*N-yUVf%*$fkB;_t2_nkdd`L7uKYASH9v7xC_G z^_<42WH$CFbB`&9&EMjvs5~62W%_2JU}8V6<6#get2}XbE=G99z_V0NHGgVg8qH#w z*7ImUPn9?FW#{RW;2JziYt#>qk1Ex4)srpW@@NfQPN_GR>#tr+Ps?-B;TmZ+#;O)8 zxl*<#B2$y3P+Xtej|y$T6JxHNj-oewTq#A7Jxa7VDZaa*uu^{e!X^HT3pT;xU}*Vz zP@7OQYTQA$c&3SD+lVdzCV9jaqF>I}iZYHXh70#61a4asqh5>H>vvPjss(-U@%42p zjnYH*4I|(IYBJwdA>sx)L3X&n>MfC?&;rm2GH3URfJO1#xpOC|L#AhDTtH{GMe>Q% zpu{(S*vdUIk&X*Jb6bQ)vUoe%_>qe4Y5J)hCo77MITfc|Q480>6&uD1}!>h>ccHTj}af-BSOd-n&b8~ZK z7Hy7J2j~RGVe%{uEv+;BV~FS!s-V<#>n5h2(S-#O`1ha+o+F8|b#r$wM9-y!uo}j2 zovwf!T2Cm>=X)|VK-mjfHAm_Lntx+y7AsoY#T78kE@wCrdQ8#pX z1qH_2KexMR>s^Vnj$h&lF;Mkc*{Yw!Bfo9YPiAD^Or@@OPj0F;)4+2Iotsr{v*9(Z zihE4Z^y1g*YP@`VriQ>m&8~uUy_-k$q3>{p$XL-n@%=1poJ1o%;4!5n5S5o z{#e9R^z~q3aQB^_+QPu0QiAdTNma~1qIAztb-kS=2~lEx!V|vYt$sx@od^1>g%z2a z3@qV;ojZ!0@iUh)u^=5PyhA6T#q4}szTHUUUqiWS*!aRh_2rlO!}(KB*QI;%)+4&L z81%;q<3}EUipfyHj?ey8M5}>5wKGO{0>Kx@4f>KBDZnpGgFca7dOg|h84Teld@1@m zujTK&k3JdU7fHyp56t2kQliN8Kwv4f86dEFJKG)yy}KjJum!JZyDcKzvkUINE1uog z2#T97A*R^2m(Xee9oM9cwNie#R}MdY<^()Nwzj24#Ckojuwd6bNk>Qby{xRP&rBJf zwp@~*aeoBAX&`<>ID}4oKb91sH)dm_&KKpTT?se=B6a2-MPocrb#(Uh4CG{mHK}jz z!Xkv;)d2J=d06Ebvx%ri^MzgqXJ==5wmlH*q|D2rP?M9N)*`~$P0s^UeFE_yZ-!JC zrlh7$!cl%QvzU7d0sTScU;z6to5>6zt#~8{Dp_E@k`H#@X!GS^NOxLW$ZqL>^X}~F z(;qjxWWWX?VrcjXf|iAg<-3V4U9tdW;dM?cM%%qDsqLZ8yjXZu1U$tn@UlxF14MMV z@R;d#&uSVxkZVrhc3zwLwZlxc&jDd#AnpM-!;g51Uo5qLbd4k7yjtZqh1)wUupK7- zb4zcWo8&jTw=UUHPwR6|uRSa3!F#4!Rli%h!voDsh7%{}HK5}f3Vz?U27Q;{dWf@) z>bI|&H`^YS-4K%LemNvkcAyG#aJt|LVm4e;`vyyaHIVz3Ny)KcCX{CHa#Ia2_Q<)t zVZbH-RFvs9nqsbNrxgrtbJ!1I*N$-4!#tL63!OBqCrKV^$k(myl%$@-4mx;tPMmbF zBlAJA;XxUy{;v7k*0+n~VWIQ%YpfEePwp6Q>;5i?O-VN|QVuE+{jt4>#a3v_$Q1fY zs`0Y^$Gel*Opgk^)Mg9Am(0VA2%9fiVY9Q?bDn74*oi2!lGH({DZZw@?*tN0#EX}n zyb1bcT6$mS`Y&Eed+NG_xWZ>$e~hzE2iZAZZn5UKEca47y!&IX!k76<5N-Z&Osc_N zpL7-P*$LU7*qDf@gORq-J$V7qclU>s0)*Ow?+iX;pl+hF4zo}Hn=jEJBNpEhB<#9V zek<{Atf2DiKGJpH$`>VT#7}aYIcE}M@$coHza?TE0jACbQbiH-=Zc@ED z$Uz~CJjdF|?hv!>af7X$hU?w0(@Y^O@bv~689+b?o`A?80p&sz)BRNKp~d_I(wz1O zHaExy6umykK=Ql0>+8j`5K!l5gkIBa2Ax?fjm?wCkI&)b=V=Y~w5M}|t~*yg8=j4f zpv9uj6DJNg1o@u7DMPzCU|}cM%Ua79ZKKgvVP68hZm{tnzIs#B+z<`uvK|CJP!WR+ zJpcd_V7_J(ja|(y0#ZIG-MIA39s8iOON$<>9|c9n6x4pIa17jdYUTl2#8uE?_q}AM zvOl=SElM}i5>0}|$$4U}ucXwe;;BgRXS_*`DG9H~WqqMS_cZLYmJBrGitF$6RGTd0 zaa!w4PiM+u7H*gYk$_@EgAJ>&>fCPBfL(lL6BeYhd7hNfd*lnjJYXDX4&}(x+M3vZ zf4Dhl=6WdtA%WuKo#y9rkWE8PJu-iaf2ZeZ8>OVN3|c5k_%r5e*tBXlO$+szBkJ<~j+ zigB1C$Bvf8w%nq<8G;;knS5(QGOX3M)S;Y+QXlQyTUWHFXHz89AW=%iR+CoA+?t)2 zQHKD>q`QSx;D7M{5F(fFN8)yuB=2vc>Z#J63)ROH_IPzOuep zr?mWm=51uLB|!!H5~j&_x(Q&S`Jlp|6GW+JUl$M%$X!c;5$rWOib_hB3t4r&Ia);U z*Y^|)GW)1T;$A}+0F%n~mTaLpKx^IqNn;DUT|JZ(8}9-D$$}l$vnkR`y8B0F08|Pf zPu1GWB*9R=d}Tz~{$d+yj=W;4H69Qe#sM~W;RdTjS_P6K4|*wR3+5A|@Ow>ysqSch2FVEAijh{w%7o z$I)fb@4!zl$#JbsA|h9pkYiR)SjmepQI_#C-QzWvS==W?GmnVciy@IhAVcr!+VU@M zGBQHRFYX;Id3Jdn-klK8YmBt7SxL*4;v6B1%A;X75ZCx!;1E98-#e#l^E{uAE=Mbi zg?rR<*Z0~$;C5j3h==&1xy_ci?OPm-#@EmNUQ12+yNg`4bzUbo7*E8OWHMXe{l85@ zC9Z><@H3a~MShxcOT;;r&LwV^BB;oR$6-x2aGYrSWtWtMLkm7YHJD>OKR;gx$(MH? zJV=1YA2=!XjI2Cy3O1wDjC&SlSG!SKcOLa!l}r$uLPgoDL(|HPqxK2L$tEw(!Z+gp zW7jt7{S(U39r=+PJRO@)yPt$L6%-fe>nuyO+0ppd#|I2RS9_%06cZ?1%o_kV#t(U0 zEn8?Sn5|E=?e^#D5Ci1;)zNX5mu#*%WnC6?sElgJJJ@@fl#5rg8YeA7vV1c${u_zf z*M9z`V`QzX5JcUV{1t{y3UtyInQ5 zcj=z}jd_w`hW3R*E$^QMD6fd+71ZLH)^^2hTEP|b?>}ZDYP(GjKTi4Fs`&2{g~F;l zsC_yNaE&$sli!JVU-2A>UR0nB?!b{w_Gm9_sdH zipkU$f{hH$psqcAEei3)$nfib>Zgu?TF7!R-vfU+Y*lM_DKAE1^(sTi8n zpMZZ;ZKgGPuD{Nk!eFcQCX{&45&&Qx&Tj9yG-+*k04AktkKenhwe-TOGAP@PZ;~|z z{`IgGMo`e`nEa4YvH3Ejm-g&2#gCk*q>%H!pT!7}{ywyM5*0?dg5Q82g}|I_h9V&o z4pHJ^Ldpx-OS?F4J!(5MzJ2LFopLwoOC085lJiX_0r?)s8SV7Bk@7=1%;<|YP^wb0 z%m}arB4ZgV0g$;i)e~H=)msj7!vSFnB@PgwzgJhEa~`OJF4V`z&0kUE`XgD1fbz6S>B(!~_px%fGBOTScsO!;8S)4*>wVYuQPJkzQ>%tw9(DM5+*Nw-{snhkg?e#)DSQgIzH}X|j49{b zZd-=5qami^_0FPOQ#o?^3_%oPPVKRCFXHq#pvjOW`kK3+$sD%yL_ZdNa-J(ZjWcM= z%DrRvPd_vf@1345Zw)JYkwOgP8fnLXbSd-~As#0{$`7XcL+E`!VBALQ{dC+QAmt_RLt z@|;js{>2v+p9Nm;3E#K2IEG}!2Qh3ubTG%0oMl`QA#`i#=&T*YG7pv~9)gVUHDn!= z9A{)CjpT-7n_x2|klmu`mhJ?FDU?SkW&0Qm+sDyQO^SxQa(TLP?)5^Hd<|#uNWKE& zmzi%|}}!PIG5o#6LqI3hzD+{vQy z7y#W}wtT5j0bo($36C-sGE%;UKAlK7zHgdKr9rDFLmZnkDZE`*m*#dxAu=>>rAagF8NsN!+KZ~YIL;dYB1 zORL2EuZKD*R=D>U|Md?P>>#vd4pmfBQW6Yph@&JAB^8h;z7zq+zSe$sP0a@fyOr@d zN0g}YN2;jXOx=$JtcF-!RLZP^Y`e2UbHp-HSLZ`!5MPFnpfpsTn){DU7#c4$d?3`CIidqb(a&Ixv9f0)AR>#!ta zaPkzU;}8UZM&9@VW`$Z<4(pVfpG#|*cV=Elewmk6>vQTrg4%N;_tve)q!c-sq8}YURLw|&17rkn z8GAXL_!n;yDtLlVA$yI+<6BFIS>brpzCa$ZqU2UL)on2$>ttz z)Zo32OoyZ;e>VEv?wkIINZI2I8*4ALnvi))&)bqO&(?Ma(cBqpm>bDpw-CJ>_|v-h zgVAmoZ|BSisp9NVt*H?+z4`ZQ#jupB#|HX?<~cC_j^V|25@C$1m$1w#vdg#ux)SF0- zeW`hJ8HLsYg#&GmZ@=6OCo6!%^)cZNxF=>st zcHHj74`?7Z0~~blhHAmL-?a;GFS}6L+5jOI_NL2p78U0$6zmVaYS#aoC}yIeY>|3# zCD7(OHYXm_8>tyu#wx;>B7b4j8bVD?%9DM5%o&o+u2+eIAfY~Yeg@__3P(@)g~#;; zVmX>TSah8?RVhz#6@&rh$o*EdgEtI4Tr`MrC}46;2cUSTPMvzzhud%rQv=HF2@e0z zR=|m?K&1j%PefO)oDurmfQ&(dD@6$N=OAPb00Bw0`)ob)IoqLufwfTA;hZ}+3f-VI zJ$YJ}*Zra5&GK$-K>*m0QnRISI#lPQnHddO#J_#J4DSI@ZeonF!UUk~RRr9r!wra( z2($)WRI%VKgzX2`*(!)*5_=FT1yU=I8(|o$XQTW@@iDctm;k>kJ)P z(By(@;OS0D1xjbUBL#&EF3buUUOI3CuoCb=A={CEut~^LfVoT(DMZeAq=?ieIvun? zk?`MInO9?0YO1QBnHie$_b@CpnU-~tD&)Rhd8Xhls;<~63+`@i6eVz zmblIW-MX!4X9lHhiwxVI zyUq+tk)gPVcN@)~wOuH|>;4wLjoqu%Dv72uo+)|fyQ&COAY3U%5_BD_;iQdWZ|YJ4RnB}Cx`0`_ICWWY;dTb$biu}@-JJ$NlO&6F^vdZy_;;AG4Vy_sXa z3_i+n_?afIa?bAV4d^BSb@D2 z%{-lLX^rRb=nu)o^v;*m34{?)v6=p@CrauHS3S7sj!KDY%l7;qI&unODanip7j!^6 zwz}TJjkrUPDbmn>WwI+*x;}`F>Msp@Q*es`cGfv3a01pdKw9d?r3f@)jB1{OMR8L| zYc?ZM)6TyfceAhw+OaG-g@MrFi{l_AV%81rPd{iApqNcKXXrbX&1R}J@tikIQZC`f zsngFa@#njz-jc!0&h#u(#p@47%DmpppM2IopQAV3&Gg4uHmKji;?=-#{yVa%VN!)Y zKt2+*3|I`hQ?o*v=H)HaDfyiLRhNb71 zV2*8WZbmv#KsS%rtF!Sxen_aOWaJ5G&?T6e^8>^$A&w6Z$o=6x@PZ?r;5u)BO?Bss zq0|SRfMj_ckO>2grLs{v-hH}A4h=}N#FP*lwCJT|;*J4>a=rBnP?J>$OeO;$8P!E_ ztf??$WBng&@&73ldKflfyTANF4YXbRV+8gHpP>|UMFsSw$KiH}H|T`u0X;ZpkJaP54Mj85y+H)GxS2k$w1=Q%;I` zu&)INno<9S{q%hKax3-&dvmUeQSM>>ZNGcxBM+Rp`rWu&4UA87Y9Cga6O`3!*%n;s zkWqis*RwWp6bSn(0ewfQ+fT|lWE}T~QJr80(mrK#tL@7Am=^AmV&4x)!xqc;s90&T%Cl8UBj}szTRuy&b(rvlDE#)S#Rew_n(KGP zZr{G09dmiqp^R03V_WUdT}%$PUQ8ep<0?&$f?Q8qt%CAiQSop`>VS!tUP)m~SK<1} zvj%pbY0hM4i4(5$W0}Ydo7r1Yo(wyTDY@FdC${+B-l|;P6XSSd$jXVErS>fMVumZ@ zd272Ta&lpE5C51AP8%QYV-MWy-s`c+W2f~vb9*n7UebT`w5-fCUxO1J*Ln6`4my|6 zU(wV;qcWF+j@(YJ^ zf52!eK9KTsc^UW0VPElK0o}aK;UU4k1KrHI+b@3;#>C7d^G@=UrCrd$JYt}|V<%9yjbiXx}<{@$;v|9jwP? z_KMuoq3+l1=x+UM0YmW!SrXI)XZU4M+H%9VW`1jnqU7>j$Y}$KNW)Jr61Xvj~sa;SG=gBD1;Or+Q zv#!Xv?swt^+Vo_?cBcK1u#okybq^uBso;Kldu3K$yDgnYCOherfU-*4A#5(XsZ*4v zExrcQm>>8&JP5K)63=|FiQ{E+YK)ul?04>)B}OU3We+w9-jEi_aHrjPK=<&5ZoGR7 zgEaTLN1>ox%6bBhVsEnTl5}!R0^RdDPV*<>Ejx94@}G(V-~{%IunYgA{plQfldZwm zn@gsy$T=Z0v%`6KL$YUC_ldF7qm@R(gBIZ{8ef)$|J8=_Ft(~wY6$ard3<5c7&l3= z*gGjy_S#Nmx6g2fG|t&EVBRBoO8CvyXBh_*0r@z0deP*l;Hw-~Ov(hTO&q{XP2 zu?-H)bt&?mD={iEzgM2WDOp^yA6wLWvq2`da$@rYvSCXs-?Z9ZTI729C@5#YRif*9 zEBEQU!T}KWvP19KVi&(%P%wXucu#gVn&M=P0AuP|JqP=Jc2F3+wv0cMU5XV+F0c~9 z@#i3h%rfX#+L_bU!$K9`2~W|x?bLC$tV|3DSsMRY?vqsFoic2B^et(cem5$=3|ryq zN6(Le6(x%<3M1fNd@k!X9-et#fKOPcUA;jO88PsCGeuWXHG5-*$Dnm=3{*Up`E zm1em7UB*LV%Bp&|9ahqKljmOC zWy`OLrPtT1Z*T0OPTAQUp0X=fzs4dL9rGq-Nf$rv)HlwIl|82Eyjq)PdII{Wy@@@Q zu}&p=xzz@zG3}~lVLA8gw*x^`3&kO?T1?h8|4x#0>E2kW(rOG@r#oDw@P1;x$uc#){R{-q}ig}(1j=Y@7!zF-1e%JghAVk3SpkJug=Y&PBSWt&p1%BfE( zPqf!=-W~3a|CZ8GD@808NWyMuPPr_%g>umI(rRj?sg2L^!#%AU7JKG99zDOOZ9q`* ztt+F@dq8Z>M|2LVC^1MZB3k2cFSD8_H~TZWYt?L91_80y-L9}e4GP+D4lm7)wx|{z z!h711?b~tsQ@_%@^Oah!Us}3YaCSo`a;_lk*U4*_NfH?c)ozy*`AuB7^;O7A@>kN6 zkF~eM-^6D|{plHInIez0nzz2dv1)$xAdk8-G2~~wMwDIT;qBS^J$a1C={6z*8iS3X z1^a1IZ)Rlgf+e9Tnw7F3&bW z+J#6C7u-7YYspV^STjC^;Ivr3QSd{>#4KNP5|K{G*!wuPi2W^>i!?Q4)_TFmy7t*{ zHdi-#@OjrNNveNXVV{r8*hV4;-zIh(;U4EbN{s@OU#+P!BKQf11f2A2oY&*a^FL*H zI+MhTgo)o=c(?f5_Ull;b8>|JRA~k$7OJ=opO)~ZE#sHFZadCb?|E5%66o}F;@@BM za?(*7#$ZX8D^lJa5(FX&W+_Vx_PmvO!oC- z1uT4cCiknD&u4HW$GH#J1)){d*k90amy6Kgf{i4dyFARGtZ>+7CDbL9Z*7q!#M@|X zf@#i)?_IU18KL#G8neAcDUX=x#LX(M2gD*e8cvPOBDc9qont!GW@O%R2=u-AjUiB| zW6N7ec$2KQ{WLuy#a0^ch0Zs(2L3wo6&?Pj>uTp;xX`hl8PqH(Gt3DQ$CM_g+_>8G)_ON~8>-HlL znaluN@$!_iLhnRT$#cw%Sc?0TFTAdG@0RSzgjvin_xgWO4C-j;4X$NT3ggnZVpb4X zRQq$#ri{X%ZqVybE$l; zyQgP9W2|aGv)h%B$K)fJOpKeC_nvTLCiFpgbz(y$?5emn|D{)R#lIFqbdBzGl=|m< z>9Uq9XAin$dUv&;^tzS(V>YR_uzT+ryf;~Lb@Rr=jWNmr?s z;Z3vp;^|&cl26|<;q1lu2rqZ@bSd6va&jr(qo0CPGXm{kNonH#G!5bRqjIN_sgi>w8lU5d>HfMnOiS~q68ap zs2{#L_2RXlfdH84+NVL5z{&;fb;K@Fx zJz>YeMj}ifQTdRs$!=qvkJhoz?Do~yKYG}qTIue5;Ph%W_8J*CiS=hPg$L_6%Dv8n zQo-}-`uFOod(LFa;IW<*Vzv2|Ln$yuyHwH26=<=w7OhNK7$iD?+chHK!${-yYtiXh zHdT=L`Pgf!GQ+hA>OQ{FWhA=Hoo^1$ji3EBoF-I(lWAVOw@oN8*JzQPFI;hl&zh1_ z!#VSdAItW$UmfJd3EPiFxex0HO5iIL}@0 zUAc(yh)z7C6FhdmmAjf}^A1J*do0n-d_vXzk6*N97_9FL{t#a={7e|rB>4MZwf?z` zzz2t9^fCvLhX>1t@7)U9?%i_T@OU%s;McO2)<)M~2{w#b&QNrudkGdo=PUP`oN-6r8bYRUUtx0Jol#rlaiti z2%xrEoxLbTGGLKtegWsU^{cfuN}-m>(T>lNgTCRvIL!wu$>6(1^O9WsrVf=Iejz4x zWP^qRmrXweoh$h0A->+y{*=bSms5CWMk0y*?Hy+iwZS$|@jMwKwY14t-nj6l!*8FJ z&3!l)$(ITy@RzR1)s>UG{k~c z#%RaB+Ksz2g1<_)4aFzVRGH!$s?7i@Ld;+iKDGMZ-1H0Rc#OuYasHkUZO`kMkk)QW zRZY#XP!Z2eYWuoTo`Va{tjIh1lzbL*p(4U@p`)MqdzccY-M{5}$L#l^$SE;OKHf`z zqxX@*i_DEyYRHij$@2|aePf^^n*JU(ln3vNik|C;$}F?(;_*|Te!Xh;bTEl?%u+v$ zU~FHPS%qLDF&uumDr1?D}%)9T2-rzr3kA(+w?t;1oMgXYu6N~JiZ z0-P_`HrS~6LlkZrE!^-+C{`J6F3j?z9oJZX$XaPrlFLy$TK^@{!unEikf`eRV;t5D z`N?&Tj~#}?7CL^X|MuBPsn{b(>J$zqT_o?Vns7#zq%nebrEe=C$?Kdkx>P0tX7sRaNi}Y@AiMwR$?c#AWO~D%~YBKL;g^ zPPp#$iH|nvZG^@~7>BDh*a=Y+KHej9;wu(tSNv@qh%s1}7-nSd;()7H9P5WM_~pZ< zHiIMKQ?+F3H23Q(s!;DSTElAP8tDVcMbGWC;lou2+!#09@52Kfz361U=@z{|RoogI zmlvm7B+&b+Vs_t4vN`qyeu9!HIQv*s_Ud|+kZf5Z*OMEHT578VuUdBTV= z5t;3=g@YbW9?|UaUm3GkP!b7=&KI{03^&lp-B8wxnA)>EAGTml5Fl<&7Xdc{zQdM&RzSsY)@*=n7_!pf3Q+gMDYj!u4R|GV`L zPMm0q~%o zBlo-S$1n5Vl2x?=Tm1SCGQO)%`}W7)t;^}%x_R@2dkxRX+vQ4WxZg<@3MpkrwWyW+ zP?x{wESnYUWa()7U}HlxTs|I-?&Z{IO;7o_-7b8w2>c&11=i?&xB@9%vDy+zG74qY z#I=7KAjjt`(Zgq!1IBB7sR`R3MQ{~4Irv|07<$cO%q7;^46X1{viC#FY&16 z8?o}Zvb!Gs-q+)^Q%aP!Id2b-mhO#IDs#B*5m@5dAMwsM#;i9$YvT|eeghEv-+%r* zj%uINWhPCLPP=vge$(LTPeb~&%*=sE2rgu1zJBxOJ=c_*W@XZre8I=)-OI>=a!KhH z<7s|4US>>$A~^J~>N?@vm%FMaw&kT(ZQ2ixp)RfFNKPHDRGnmue8JmrhV-&fQdQ=7 z)FjKbOL~bbjH3DF60g)OP@Y)^RkI6;l^dslV#2EKE2LRc1w34DvZGTP7s?o^~5TFY*4VB``B$sh3I zkctSHv)%xeqz@PiuRc&tl~D+#7xR<~23hX@R(|;hcqv{jmc>l8b7E4Gmc*4JliAmb z48+079G=_S`2%v`P!|ro*EZ16-u_Zpc-H(A>e1DPA6N@a%8^<-=j?Rn#VN-Ff67*dI$@rX_@TZSnby zp{*kMzP{&F90tKlWG;Hm@HFgrUOnRIPpS_|BJwxBh_n!~xz6?u0 z5a2gh8?=}aQnE37B*2A3DNkxHw!E3pttu^IamvV4AE?`VV$jv z?U;RE<8}r4GlX$Ko0PpQ&Lkq0(<$;bnXpevndxB5?Zrh0PdbOLJZz&Z=N10 znAPg^^VPEZz}xMtEGiG4dhqve+Cicu{19UQ0pc?|vYarYo`Q#W=lQlyR+!ak!P!}= z7s1{-kw!*+ua2G>c`WAi5EJ zMV1E-FzUU}SkRD=5O(9bWDw^9zN@Mj>h@+GJWo;_aPdXO#lX&UA7tWsNq`eQUg@k? zYIVo0ItB1KE4CC#UCn7v!Z5lz>!AXaMdPEuj`?3~A`!E|M86C%H#Jo^GU^6?Y0+lM zQ}*?$6qT&Xk;PJwLg5H(@nA&nE_BU;FVeK^^0Iu4($~I@)OZ$Bg}p1rzkgCY5kw?V zH9Y*xPsf+$oWn0B?(P=c*)>hFOH3&vRz0eKHnVGkHSvnH9i4Dd~a6r z!j{(Y{@ipNN9iK{eEd(F*2vKUkhekEb3BmIBNFP}iH|uoM9T3JP;o#iU83o$1sSWJ z8o9sigW5o#hM~ldCYp#TM7KE&LG^J$7|2x z5+kBSaVv@_G zR1a8d6ciQ3A`NeXfenJggh0xJQA&=oF380QJ9Ht$tP(Dy2<_yrUunL>zSMffCs78+ zzXwYGz@wdHJ3AXiSkF{XTCnQCk?H%<7qP(}8YoBnzH$1GPmxa<<*BQ;{f1r~0fp_v z`}dl`@V(y!^5e&Y3<*UT4N|aKFMm%ja26(lgtJTF%7c+lvpz{B>hT`*zV(>6y*SmMGkDgz)27t9B>h&!pOjr zh)esyl-w(%@mit-7h`slf))VC@V8)2hAvE(=1_ZwxM{nUQ>}>D^qh zIB#@kr;-zH`qN*7^(9$6&Y!Do*~*FShr{V!N(sx)eatDN4O70~&Sj_JMQo!x$}_Y` z!rMpoO!iiz4i7Ky$lSJEaE|c;cc79(6l*|5;nTkxR~gFot}aGyZgrTrnDrn#kj@A9 zEjP_O6#@|tNdC+&_a3VpUv~MJl!Wmor@^w`g{WjjgLqkOTF79Yo>yx*hzLYf!@VIi zi(oA7RyAjEa>RvUmauDBSSv&E(b0`@#(p6k^Dn_FMg@|Ke}>%!F4M-n<-WG=?z-Ra zi?g$XF&QM_cbKIL%vZ3u)PN=qG($b{3*u0^08Yj^yY?r~UpjC0N}=3uF+_x%yxlY6h!RTY`?bm%097(-_th@ar8n zr5iJ`Hlhp{AAlKClv4WjTvC@;I2}G`4vw$2r7ASXpHL2La1t@`3z5O{8+>`pEAv-id4)-iY)0E2ES7f z7uISYIZ>_T5_~r&ukc)Jxn6Lb_e!L1dq}aGSN8Yf%~XS2NS>CTOR$E5kXBE$$VbhJ zMS_ge$XjA82Yc7dy<6UM72Rc|rB1v3da{Wj{Ht!892F}cdbOE(3?5R*I>ZoQVE|HC zD;#Ft9y(MrT02n~bX6tl_UU4dUdn*7hzXFR29;p7HsH|pcj(gvv!SA}H8ELvNo+;( zV-}LGa3--qCNf2O#|6cA=;oEA`tN=jJc{PW6KV`j5)G0G6|%I`Xha5x2YEtgDfsOT zq$d*uH^?c?#V_dXi_-=E5iJ>UK~1L9ylPq=8qp?``@J_dGt0O3OF)0usnbaWt+LiJ z6S1kbMzfGumB_LPj+8q!7$&9+AW(Io6R?rK+OJl!fMLm0^Dw863B_vdzVnwtE9QL1g9S{AtCiacre8nK5{B$a412o_Y)&;Ay-L;*-GY znWrPBve%B^DMI)M*Hkf!cF>ZT-O$sL;}^Fr5+gZhfG-SJJ5OEzjd|0 z48Raw9=07!Nje6g>1vxg&hlY5h_>H2IbIX;=H#J+>l`C8loD*|iP!TmeM zA0n0W%eL>cG~5S0YyuLqbKO_2ytHTh?xEkH6DfL3ehF+!?lFv~*IL1Kd=EJWuJ;t5 zJ4}oJuv?cNP;u8@{Aqq3_lvjpSwGS3L>lkKP}+|l?`!`zoTZthtn0qZ!#CkzfXlDy zcfvhRqrB~!STHG2!5LRy*$K3FU0HA9-16;TytoI3g+ZN90%lFB=KHmgTCh>@-32!x zU)cmb$IUn)Xj;>|ykup%luQ&FcN)`?nAsDZbqNpOB#ETd+Nb0IpsZ{YlO;nQc1wCYLCj%|>mO2-v5c2PX>HvXZ6ZaiEBa~M^l7F)2C%>t12%M93f@)a_7zZ zhJtd5X7A47qXIL-F8DIsLU=Ab&*Dt~6J7C?$x~y#B_+(PZY(slVr0@k$fmI-dRfLW zXLC|Txj7afE3KgP{Zr*O(mB6wFJa39CRi(DEK#fMPP%CHf=-Fnj;ha3_A95cQhYxzhqh^s{+xVyNh z5IgZRSrNCDPrVXvm*-ns1FP;vNZ;VAlf)YS5dYUjb9D-SsD`)^$l<^TrK`AiO7#AaACpQOO5-lTT<2bBeIe$Qn~B??h&xi#q4=@)1D z$b$k5eqnJJ+_Qg&uDv>>XZiZ|>G!{UL51T4@h#bGzGN-kF)QN8 zz0fBTTL3KDzRf=0ia{@|1yG+YG`+m`|b-}Z72r;nZJtJ--ZDu^7<%O)<_@Flr*^CwzfmSF_h3kGU8d}39XuV?sf z8MZO_x|7k%;?eK@lCQ`SFh`wTtz2!WKG+C02`9VtBr4iUV)X%&2o}k0u5d?)9I@B( z4P%|k7RnK2Z(603xlKpKO`b?!Uv*!J$RyTXmf9Co-ekR(M};zvZ|2VzbE>kny!2n< zzW>2--y}SEqoEB_ikEaE)_5G9UCt;2Clg|MdoUKXgBEa~X+Qq>!98GhXr8C`C^?;S zB1Z&8UB|J}FartdGDNiMUZoD8_VvfTE8MMG^iQ*1Fz?dtTq7AcX4tH+OBgbq>YOa{ zYnsX^pcGu1s$d?UC`)RoZB433&Ahs;3SyQ=DLIyp8r26w#AD{1pp&cc3c zu57*yp&gAXqTeVBRh5_tqd?(bJ?y@B@cXlf%*k)qF-zYh9!2*H6$dq3E+C7k%Dh{P zQVvsb+|w-e>08>e&aw%yz7Ky}&VA&w>06=lJ37K|3ukCRZr2j_N zr!B3sa*%u%2z;^2Beu;(BR!GR(0}MkFSvpyPqMbKkrEh?oWH_-=5sDm<9;r3BJ^t< z<9z=!^Vs8#AJ0EwllInjF3QO`#5$!UBoJFoojlFaX}kG?fbsZO3zs2vcx=M!QURJS z(~X?9(GEeriE36H#hJ_`>|f7Q5{+DSd}%#G5s~Rw$?m@vgZVeG193Dn+BGZh27_@m z%ZStaiC|q=sdDwL_>{t)kAIgk$;fh3H$l={&2B z5`9E!mDd3+wPXhq4~dK;scVXwOl+#H^u9s6D;kxQ^iN>|Y)}=80x^bI(C%GVl)!=+ zp^hSFwh&xZo|Y;{+lf`PqA{>aT59#7KfbkH>NLE_2=6Si%#R80toyNht7lC>(Kq#R zzNhwf0UEJ6DbLk?Q@?LDj0ZRw-Z4%M0FSgZf86~Xm>HoTjLFC+5u z=F_F?d;QYg?e-nZG&*t<8TLYzkVn{Ou5Y5yCmrLZeHPX4d98?V`gATt0JyxjP5pO; zxlOX%v6$mx>sUo#7v<1<^nfyh$4x1b0A7)UH3LC)-@kwgxHd8^+~3TNW$|bf;@4GV zvG{46bbO9(8efb2l?5mKZrG-`4b(FEj;ccS5uBo|O!Wtg*r~o@_|{HNZ=rS2x8I+a zu*|oK4v*)y&oahb-%rbYX1H0L7K~WFZeFUjd+q#WPt<=?y`?r^fN#{5JZo~Q4~CdJ zkE003>D`yYdZM;C6x*XH(AZ*PP(V1XRBk1!8uel&oT1F`fN2xD^2mKv>%^|^aKUT0 zp{&Qd-+!D$uk+X*+Nt*=IBD%((J^+nUu(DK^u87t>aYY2u47Bm@txE>l| zepoB-&n_Z~y_z2-h*S6Ly4C&tEGj*~$P z9J;2U;NX4P;lj#F@tnQf*RoonTUM`dPh4?3ZnVCy>4PA5q|sjUOYW3W*&{4;hP(Zg z>sRH{KOt_tA4b;QfYd-vUq7*OITZ6lo}Pc>%%yv57u{QSEv16p<~Cb~cDnCcJJ6g$ zPu5#m`QuJt;4UjenSD}~EMR2ZwO~tmX&8lsI{G==<46b(tXwvibM=){=~!oIMlH-W zLsM@?AUUs01p z=?QM$@?q5+hL2f@sTB8VX9;-^7I*h&Z|`rj*Q2S|enwZIAL_;ZIfM#ujWCTpF^7<> z;*NR;plX1Afk>E_#Ul=aRKP_P2s=Mn^m>=!X;ofG+&BCwHumR7MxdUyx&v%4dC$uU zswXyj%UPOp=0`W<*!9w&Mj({U($bP3zA?F&cG72_h#GD^y zb#;VTH%0^jLUnY5u=ig@q+85kVkx>Zy{_tHYgn{9ML$ zH<7gbRHBn;DLmV#o%aiZF7{l~o1 zGQ?^q!*CbmOpx=M;eqR7vOZdh;Z~NGEHIXk0V~v!d7V35Q|T>A$_{UT-p_Cem(|OL zRg!T9?Hvf*r6j^OCK;*mVByhbX4ZIM>7j#Z4FGRrU+}ph{XX%0h>)cHng6oc3=D;N7IY21psnDU|^!EwU(n} zVGAEf^;n&KXjBsq8Z?14q2*pV%-BxRO?sD{q5#{*BV^4`%N6`{BLg7hkEtmbuy`gV z?YT1fYAgSNpM?R?oRgnF4>FH>1vso!DX|9n`@aFUCCYkNr*f1S_(ZnJ?3=^MX{-}5 zPKq?===a6iV$HBkXb}2i^Y>mVqelW4i&(G7#X{SLJ`CQAgKMkdL-E^lDF+P3>$5*K%HcWxi!1&JnQW@(-k$M(re=f^nB-<^riN z9E}{f>W8;vKPwM)h7(DZ&;rcvO@W$x7(NGdm zpCb(tYbV+FG2+o4VLJt*rKtmBimyF1cs~aJQeo?4bnY|CXbEu1{H85N82t1;hLuTC zyt)0=Y+T{zzRydhCJ6UlMEv`1rRpQe$20p%{FVJ@yaUcG3p{9HioD+vEq~}I=UXe;bZPfynlkE;&wk>Z zU~}RetK&GH@^5kVTljeY{=93uy*J7tH%9ZOAVejPnHPih8|OndeD05@*>$ET&zZTkbS>^K8fYV(jE7lpT5Y;fpGv0BzmnaPvc3$n;V%pi8c@3q$Pw8sksQb=czfS^D2E?GVL=`;i&tBng0Dv`u3Vvt!p zW>8A_5_~WxaGrE1p$Ba4)inU+aqe_J92$B3z{@eYec#P6W$>QVTdRXSi=cmQ;&h`y z9AY7AxPq$2HLvVYx6OWP80G|iU|N`EjMbuSY#|lY)3X(yV_^*e20c`)%xzMs8uPT& z&Y=eZOKO0PX7>r|qNUN9icvT4AwAj~fP+ff??S18%J`xhv`gmit8$%IwFx8ymyI#m00-#dhJZ|bTi z2kQ;y$N9I{g*@*M_IV3tUN4}bp=US}Y}q>lLWw0oG3*F?H9m@dkzk`YwMufAk9q{Q zS#$5L_7$!{p;AKvfb%*nZ5WO-`DPEz70Eyx5`^4>286CjfgwctObLlx3zpM^GI-dyM8 z6?i-Ewvj?6zg<>_Si_`yF{>nBD%IHC5r_k&vNztC$1(6~iGJ9%4yQa02hvW}zEyg( zehLO(eXzehaQ$lC$>SNA$g_gG)%}tfhv+(^c4^Oq(p$70<_hb7 zNuQrQP2-Q4{k0nwJ6#g8N^s-GJua@E4lxN(=%|`(Rf?T#)EaNseR+Zz)A{ha$y414 z5UF>{=X2l?`QNhp3Ih&|b%5doLp1B<>#(xcAhqqHMg`}zu5_On``SE%^?e0uZr#Pv zfaDK%kX2cTB*Q1IBhEXNz{kc%g|0aZ9J1t^9$LA57}&5JdjkV2+vo4yz(X+2?M;;=cAwgS{#%dp{2|Omf+|{)Ji*60skD;Uc#hq&Wek!lhr`tVri~AVY}~$ig)D# z+csE3#jZzv;{rlbya=%c0(#eopyc*vbTM8x8GEHv%5trJth7@eX3ss^ahg!}4wsmc z_|QI%{ft3#5ZvQ~t1-trU|H|egERnm#Y*seh2>k3*`2w0u9xA)hDdwF&iz z7L>2r{Q=OLN--x!%0LKU+)LvOb8FuVgn{|}$)BREfbYMc@4;TF?$u%deP0n&nXh~- zCCV>;5eENfjeE!l-e;(bfOLIQ`XJujWAjYl8HdTg7-Q2Nuqz2(UG79woaY0j#U~}b ze}i@^H2zDC4X&2(qnkp{+dzlJE<^;8pc7PqSISNDzh36S=V!t2;e-0HjQ}JplqnY)e*qsP9Zf%`@d6_3 zioWRgn&V`46Wu?}aVicv-Rk(tOQlhfr|l^5%2Y4s^uNbbLNd{bJxU4mJInGi@lm*r z{uD5(#)s~*L~%VSEl?lAOHpSQf*ri}<|{EGU0Lp|e)O{8@53+Vj@0=3mDSh_>y38} z0C>#6?6DHZY|16UK58oLjIhdeH_KZWTIIGbJM__(eey8zuz$7XLNG9h=+0;wXKKQK z;OfOwNYCzqFRoI4)DZ*wMs&;Y=3~R3?s_MycRLLW;s>lU($aqTR7~vP5)#J!*%L~Q ze+!q)+J{frUHl@^!IaJ%2)B4c${%dz8m{Wq)?N!{=A#dJuwL@RfJb0m+e_)GInMKe z-Pgekzp}m$4phbvsaiGXYuO-~&7?$0rKf=6zOw{Qd+oLz@>R6rx`d`!oRkxgY@|E|TxFc;3lx%(0y~2mGp-gJEaVR(; zNtRgpN-c3us97bwtDwM?3-9@Hi~G`ODVwVKLXF6DgQ1Bs4;I3e}>(7qF*0 zDcf{QT0BVc-ph&sE;l-L5{(eKoChgFTrkwispVx3G6`of?+|md=G#$d&BRkG8FSNm zsGxK-Rxf7(A@^16Tcmen4AJ&Es8xj&V_mCL4(F<}&)QeJBcJ{=N=M&!nL!3}wShu& z384+wF#*|fSt|g4!ZaDMD^E%)Pyo;ZXp#fWG_ zzFQ%;9{cIj0(T}+nlGG1Lb_`N!IE3?!p`c!|F2Ak>#SGALEgPsUaU253V0sEdJ3$<$?BrSI-3=c1b*=ww0V4(m2Y1@p z5CFQu=xaf&L`HUYtIw#bD-hseWR6$5fG+H49~8O0=_m-$P2IkI+ryw9sEhX3M!tfU zFQy%&?HwH$4X(VrJO*1i@&uVZqS~;%95;f~IzlaEo8&6zqwkMty3&{&IgX z91tBlupph9_OZ3KRn1sl#)PiPn`uSIDgMN2zUJT=?jda6DNoIt_6dq*ePvc2MfQ9Z z*0HkwKIVg@Y@q%GiwxW057hM_{^V&Mv4dtJ8>38Szn|qA?ijLdVo9Rn(;RfOMl$Ok z&Z6Y1J}O;jdC5WWS-Bl`{TT}3Irl;C+cS1{qnc-k7=u58SvqFs7HibkLYzJWF^r^E zCtv@Gi_0TObGQjcahoe+$YJ_H2tI(bg1U}{<#e=X38DkDqA01ULC?S(Ib%Qo&nBq} zdhRpXE&GQ4;9bz+WT%^i^LDk+OMTPQb@=6x2X;M~KiLoilW+mC7>9#vO?XkvGAW6E zMH;^LEOYVvcf@CPSWA{y5-K+oR4xrMZEDWFv$zghI|xWKymNFL1(=0rRZTl9#*+-z z^VWb5$rwwJ>DIm;U+qTm&ywCt0O|qIA6#BZ3E(~4AW4dVTDS?}hhj7GoWGL`hl4yj zayFg3OP@glTEIF60afcCnJY7Bk`8{rJWV#7>`mj$ceCO`i{AS{PY2*m6A&ojbBY?m zsBA&N47mOn^aQ1*nQr^&^E((os1g$?+}1~bwtk?$Oa=m|&(6;9k8tShs80P?9@OE9 z2_i$HT^Gz$3m~`k!>yJ6EyXueulVIsgo(R~z5U9v5#g(!J6G)UO_eT3=q5ylcsVdv zabDPt5i4V*1pJ=NgN=KjB?ct|PO6%625J0gPz9S%1VvI6N7Ee&zTN7*Q_zzBF`*D! z{lhG|gYtf(8l{=CXKwYnDjO2#b{nIX|4Q+8L0@2ia#^amRstN^%E}6~DkH!^U!_An zn=cG>bz35-MfT7@ygHEec5|#e3Z$8-`L~Xa>ie?Cb^OGrr~T?~-?^i%ruG>-5%lw# z1NTsn-V+K`j9^s&(WmLTxe8#Nv3o&(v`-Jxt-eJhx7S}6xaCw7r<_o!HDO|9-=4DamRmGeVa{LNiGtRZ`Z9mpQ6BQr)6Z z%~xyUQT80y;j_;g`2r8yOyM1AD)PvC^rY^LSz-gHo|xrzv$F65kuIAkM<5tE0Y;$< zza+ezE9QprvE$RAOHJ zE@opuVl9g5*Q`0-s0OlRXWl>h{9>S7teu!~;QFHn2IjEgb+?7Cq!wTp&Vi+C+XMy% zzNL6u2crKm@E^cOc>r1;g_N8y$gZg|KoIZ&&%(I-lrILp7II$L+Njjg@Gct z`A81`MdGY_x311s96qN50)jK6>Baro>4A5dFX(-43#gMWtI`!-5#fux4opdtMvaMK z!$hZP?Jo3O=?48lL59o)ps%NwFi8W%D{F<}zyOH7!e_Y|2HG;Ruzgu;#U0pE|djR6BCEf*qCg>|Ov$=`D{(`xl7SA_*zJ;9I%Ppp+ z*)d>BP|SC>?W|$K1Z8`iY`4fODEwG<`R!EcAe;ia!Ob`bf(KgK+RH!#Qfa^;4tj(5 zc7pD505wf72d9bqWz!8{F?m+w!F`w0=-LY~RgMbQ7A6MxFj#9rL3jGgV$h|ws!A9v zAFpsOoS~!F^`ie!8RI>pV~Jp+(5v3m+zdW+Yj^jm#TEw3#%u<`q5V^Z%257uc3e2< zV@g>rP`svy^w=yoGmrV97M7(w+->{i0x8a$Cb>9XK3V%0L%B+2OC9L=Bgf>2VT0c~ zo+q`$lLypUQ(>po!5U`ES;F$JYOVWy=&XOj1>WIc?Ec`I8!XJtZ|&CRkmW(1H6q0P z{jGMl+0t?Tp!uo8@F&(wQfBl>8YfX>FdUqiUTWR(gD*iH}jL z#85~ShdFB|w|$bd?D_i2?jF_9tk4vH%dR({QIahyIXX7ll4|JWWOT`V=malfN-rHf zjY`;nl(g(>CDr&0+3xTrq(<=SofAHdMLv)8++t=%6F#DvSbH&f7x~TcEdQDnwrb70 zS#!>-TT8Iy@u=fkyAxiUWZIUQyk*hit2C#5vNrZAiwV?GAJ=PW`9TA#=O5ePwNG)aBz@iuNSOnHcX*k*VayL`|&yjsXLDzBi2V=>6{`%9#!LafLwiekL^$oI7;vflgP4bEC5?z1f6iVJH@w4zr| z%^QF3(!|2zFr$*!q58Pm4}3B7!HC*O=EuTmQXJhJr22WK+Li7va>jE4P(MYXi%<5W zUFDwVy>B0qNg2`vAG+3#c9T;Rr=`we+U}*jRn>QzvWh$`6JkFXx6zCFX*^&p0_})8 z=zX{tYh414MsiUM`l$1lI`_c(&?5fZ!hi%lJzt&lsspml)?WPR{N&I_ zXXsbf<~Pt&YY?#sEG>a?nrHq~1<;_{?+>G+bM$y4&JWhX-;9wWuq#(L7aEe>cy0GJ z^Nfw9*4E?_NYhFtc!UxjSQCAs%BWx17?JqB@$|vr0sfi#rE(=dqK+AX1G$EWN>#Pk z3@Z1fPL;UI;MmPs+v(SE@j`#R6y!WAzzz{X2Ra#onNAT(C3zrlhkAt*M4MhXr~yMn z8IS}@nqDE$P%{h^-SLFw&xc&9yk;ipwGs%gteu6=Hhht}q&`L4@%iLo>YY#3LtDQ$ zh?@N*+8v1Qh4xIdwks+HC8e)Oi@##mv<-xmE5BIkHKfv=l0^}6KPpT4B<9biRT4#S zR3E-?b=O*F{p}djdkedr-0KpQWjW#alRv|Z;QV5YlW|Yyr$piJBo9aAU)@a#9|(Bz zy!GTcV+h((mrCle!7#uF8X4yue7|3-Fgy6=N`)lVd6Ldg_%LcGYz>G1^rTFr`hXqA zRuyE39YsP#VIrQlgUTB%hHgbQ^6e4UKlg=xba(&m8&-q(jZH92=$ZO@|W6>gGS5En{)S5=GdIseA}x#JGKjb2hoi*Myf z_OCUp@v=~=mzgWb7Uxd>mr3oz@e1u>`hJ8VQ{;1~`pfSS=B{GbomPFARkBF3oavF_ z0_9U(6OIlC(zZCBP#fd5**V+3p8Flucc-vLQoj_^j?8wPbutegx9wBBm;}#c9x10V znuMu#KA1Ae{^v&Gm~MUgUXw5-26ba%b>Vunpf3K4y4{4RQbOPC(Vt;qq?kgN|AT@o z$v{NQd1i98#Rp6L?uoIHJE8_Rxop$P^)s&J+r6`CGiXZFo)0&yt7$`8p5q};j=yE# z4_efGs_{cSJQ=Zg5Sl~2!rLCdLcsj|197T%&I|TYsfDyBHP6I9&3Eupl$C3pk)9rw zEY&06UxSd&K~Aq?%~59Qcu*ZYiD8FY1H$~%yaIiE*efBx=nGN>^6_9#BCuc*ZwH!7 zc`q9+bWNNNgetl}9;pB^3@fTj5@+P$e4j6c*C$nk`qtom^P)YxDz|z$_n$A`J5u7; zYI!3?)c+H!TfTl%+LPykG_wRg3hnS4%TrwXp)0gfv2m5-oru)7m^zX`%*6udx8lc80aa9~{Loao+fK}jK+dG>PkAN?IwL#hMpdGJzS@S1` z%*$Q~`%yXvAxBHj%qIQ!&3{fs@>(RL%^?eid81!Q>_HvUI*wniVofG=Hrv>!@FGDx zqN35B^|Gm^n`k49uw|P*DraMBspR?1e(8bZ5XsEEKg{qTI;e-pucwwbzkwVCs<3V^ zfKX*O1WLM_Y5ipc-PZ>vV?kPz`@q`F-QLU=HKo%QWaOr5ccul|#5v!mi!B68fcTHP z=7o^5FPSjOoAcWKc&pC2)-*@SlVcS>qGPX74pr5F`B4H}yu2~-gUy}4{;2<;xOYix zW3szoI;Si9i2YSZw*v7ZMI0ws7t%FDcK8FqEq#j6B(8j`#sW7fl7P|GKy$Uu>saZj z&z>VOT-;{R*ntQZVya z@}seFwF?_zaNn6nYGlJy-{p5YD3w+xzca2JlZ(bt%vUX(TAEv`>|CH!wP^A0Q*ZdflIr~1O(>Mi2!p!tV&s`l&n zi2Rvi0SV{y2T|T)-K3fsS&O_@SFN%wJ&xA&O^-ac_iOogIw|VqOx^cne4iqbyAESi zpPEpwhnInTfJy#%)@zs*P?JP9qQzC{uoWpSIwJnHZx(9tkbjyvqU9e zYM-d~yye@GuiI zVxt76^Qc0~wu*;p_BkUdZF{C&gxWy6EURgZIB^|10I(m%Q<=#Nt_K;|vhe(dQ!wo> zheG4*1=V7Z_SR#K8!NXMGLTJG%+bmm&SL|i%zTg=Ej$8+L*ooG%s{G z^w)@#=6j(wDNq8)Wx?rTUU=laD(kyeY${t@%ZkbY$$(gA$mvkL^KUGW48sTUK83mt zshSC?88^nS;i_Ht!TF9&4sxm)qZ@HjLne8C?gEqdChpXDLT=S?M{K! z?{)Re?K{nW@5Y=>-U2wK=dyHnfuy7)GX9^8OL_oyZmK~o?}Cu51`sK9gc=(5e@oue z6-6_Zx`;{~m6htg@$pymGRlMrK6MftCBC!Rt+)LwS9PoRi^dYQ^p94PYjJgLyNI(C z=?o%nx|F%p^ZU-IB%eL?%MJ3pVh9+;|kulF&;AS6Z{8qji$x zj6z4dmrc};c<|GJ&H?)!%QHPB+x`;z)|q?v{Yj0kkSGH66~|1X6xDwnO0Lv{{~EiR z@LT@m`iQ^t;Y=z^ihIpAM2lgJyV7_(MZht|1+h$i0Bip8x3yCCn{loF*`TFb{h<_Q| zhMH%3iPA%uwn=dZxtyWO^s|q06Wc!-ej@_G7=QPKn0viZ#{b0_bCEum-76-W^wfN6 zXU3G!Jj7I5RKzv3>tP0=#OLEtNmm;9a*OVf>rVj1$^Qd$f||jDkE4fhg>!elO{%D# zyF9T1014`uui1W+TidhqjCU0Nc<@nUwhO=gnY#Sf6$oGE2ge$KB;WIu3K&I7ojh}| zKPcSB6lH(HU`*5!%O-r50*UL~-W~#Z%J|mk*v1NfQpA%m(pwZ1xwOFOY7Qh|03q>A zhC2#UDJAhotgYD?aKKEJ9s+IJ6CjlXNEDaAGC)gq7m-=I2%}5M642DVygZ#+0(yIN zuA#J@9R~nlt~WZ50~MH`(v99K5J7V&Idij27iMx?zC=lIIO%c272EaUgT1=yBW4Md}XxoMd}rK!$l3xV~o; z(t6mhsk#kNh~F;4U0p_=xM%v(nsnxW)MmgV{?O|^KoUW(ksHv1M%vD-avb}ajK-P& zmbUdzJ8z6vV*K{nun?jj4}rlku4CZdxXq)vMxNr(S1qrjfit%FeC>ow@2Qb2p0vd)c1%qaLp7I70HENvT0(>Oigc5Q{!h^KLS|~bgw7N0Cs)< ze$10yzw_fMO)V`M@D2Z3y@6zl7ib+pjuFB1t#+^D8ejfvvhEY00#WcZbJCf zC>%{EW9~LUXAV$005=I}spHTIM@Eu5wPW`7m@2j8Dv;y>y%R9&7LM3pQvIca2)5zI zr=b}0{mP0Jh$YX&h62nDw96950Lm|a;()5w*aFZr7r+^SW{bvw^!9Cx!m`M; z*3F%9&9gB!fjYr49(9>1pOPFS-7>~4u zn%ZN4u}BBvVN{=>$t1?o|2`%rV8RZ4Ai6GO37qjDo`D@ChJX9U1;mM)+mmCiH|Y|I zRdeeoy|Bo6XLBYwE`$E>w*L?O2ykbN##Jo*d9~X^ARGgltRR3Y?T%U_5~^3gf5U~4 zpff*!t%FQ!AiDz%H?Q#B&I7W&7N<%BFvt`(hvEVD3R?|eVr0DRVK56&%i!Q(fZo2* zr>n9Z<5!dJ1J=vaL=0;6;K4mnQG-nc!0AAC0x!Un#QIN`(xbBB@L7?mLjo{;|3X@q z&bERimIgAx6$J0D*7yq`Q=kJgK$8Q2un*|xbaV!%Ys*)Or5>4bCMDKV0*t4G1H)iq zuDt~WM5)&Ra>0lV5A;E70Em<)Ft7Szg--(WHU?W)Q6WHzp{an?`_f-qI%!14_8lUt zPC5(F(Gb91z>OHS`v?pU^bPlxaPry0%hAo?bG5af)cc)^7MugL6=)MN#&_TZe89nh z#rN0{0Q^Ae3V{81aJXvzQvj;Q2=KrM4lLDT#$*}Xf-;;*~A6`%_b7+6OJ^>EP54NU*#89UJ19$CssNG13kVBO?G zP7DC@x`avuDgkn^Du4ucfWZ5%_kf;8D}CFg3M&1sVwxHn;M7mIF~c7Dyv3X#JBI%N z_9{SHd<#H&0Ezp~#aP3l1HS`>LRC_Pudm!j0VtX4nm?h~9ub)vqkU+{{BKZEbSCoQ z1~q=61vw!nCyNsHTpU)9pKECRF16B1k`?#fw{ecv%~DBu36cshO|n+sSwR3cs6!}D zPfstIfB#9XME=LV?82PYi*4k=zkE=_(3}A{gHaM^f`HEfC@=8h1I6OkuMB_>0}lWI z4iZV$3Jasah1hPurd@)lB=IXF%v>rBKyCvD6!aBF1IxK&3I#$LRW`PssUFMP3KXrL z2Jpt2=?H;I3obiwdxi2k?cWG#h?EeW`k4URCI$SN- z)&#kv82HHGZKl{qg@3(X|2NeQ#*B0{Ca4OG zp5K8?e+-ELxBNB#>y@m2Rd2qcdzIU=LR=`}Gv7V2-5g*&f3Ng!Uz;X;larpO_vzEW zjo3Al-ci;%=h|hF3g+iWHM|ksa{!L%tRYZVsqY;e`&@Bmil@}yD7bm;#8>0v9NR8fjWC==b&RDP{*wl<}3yqk$y%qh5VdVI%KwcQd;PIJC3c1iRoeTE%blaiyk@d!4Vn1vj}* z{C1x;ZughjxqFgp61pq5h>a!=qM$XtpU}sv+`6mtvuFApOX_Dm;}fK`fn?{R;@GP-j*9Z3ZOra%D$a`Vk;+$C zfTf7_Tuj|@!8+$b?sEr{H*)6#1cWfseARi_p+NE?D*i! zB=B`l{_6R-qQG=gxl!6#y^#hI8fAZJ?~HT1OJaaKs(w+N*`mZeKBx55jW({!)`&&Y z?E7acj-1Q(UFfnOHCofwb@Gl=Lx*C`bGe6TcT<`l9|ehWqts4IE7xVq;)~4X98X4G zIZN}72P4_R)#fqrWOKCX4m#-)q#{_z=ZCq^H!G9jcq00Qr3=hb8{a^hi3<#0{pmF$ zBS#GO!hl`^jb^?Q+hfGTMwX#Z?~BpLe!aQ;>Qx0B_pD~=F7Hzq(F`Qd<>UPl2#_i~ z?hnA@`4!#c_w|{sOTd zdq%;ZDuARw!s8`z62IMoyP|RWzSAY3F=KRj!RL3N>2CGtx^aI3pq+;9&FyKJWb0l{ z94le@ZFSwG``QVfX6wYAm}WnP$4d*=O7kAy?U~3%2SR^V&Mw{3l9}+PAMYD*4t!Id z2G>ri@Sq}l)H(ipxq$2Bbw?0kWmNuXQ-*ePbWCpdhJTDhkz`WHlzp9|KyGD;W4+fa ziBj)ex(A~!Ok2qHeroKuX#=@RvFJF{b{p0+a733k$d1~<= z;%Ax(2-O;h)i*qHn)mSE#vA%#aD3%R?-EuOk~_-O%M54tlpGdTseIU(%Dc~N0c8B^ z((Gs!q@Jbjk<28z=nG=mdpoDl+^mk&wbSuKfMX>6SZwQ-!N6jmcs^YUHc3y50F7?0 zT#6uyWd}d&P1N%$$@4?Iwip-H_6q%}IWp&J&eYTKp`2|u!i&XAsw4xm6?@^$l#r0{ z%8Ulm8t|Y`NWJM>EXX?HuZ)@I3^72RpymjZa{@s>wLuVR!W-+cU&I0=7Vs|);AL=U z7WJ$0o3odm1rrL%nwc@d%i}6If4YYM$fi@^y17UA#wu?Q``+7%H}B8&ZW1Ah8i#>6 zqdnjTV_Nh>%m z?>} zq7{3!C<9?^!#Dvzsh*3vI~5 zg|CxcjpeZeue*GP`y@KDu`^bRKcK{_RcMuUL;F{d&8{~KFPY<+F!bMrU1o3YQxZiA ztO~bdX*nN$tIW9BRa4J4z-xEU;cby``!Q~i>LuSLF%4YiiN)LXxSv|0mkn!!W|5H^ z#t@WMvmM&EwQFBI`LueFKlHb|v8F#Cq`oWJ^fN`Br*)rb!2I_0z2anta=qq9c+^Rz zWMb?@p0wgwUeMi*XN`{QymF2{{);g#yS$nOeQ4)pAxMlqpK$2x>b^tBn+@;aA}7lU z1r=@dm#OcXJ~?I9Uc)Wlr%G4XrRz5ZnCDQaPKwIzlrbSEj^Kdnl&v%)N4SYm&l6>o z{5Td8R=C^bwenr29R!DyX{DWbr8?MBKBlJDz7F8YkkURB-6fxlcz#3@hrE@TG&iH4~vxe9V%YI}C6a1Lb%DQ3y7gKBB5 zdSBcOQq_Vi-|cnC``9?A`~1dsA|5{v!KHyf{`6=qEjjL{Na9!eJ8eT#=oST_|54k3 zL@y3+oRQ`kog>1I#TCUnvPMrP)86GsJz5_R(XV5C?d-QGug?{83{&~4f-hLAJ9T;S zpsl7kchb%$pUNrl7hkK|dKMPsQYUq$Qm>zVwbyq=?UzJ8(X}aFbqhN)R-dEd{IKvx zYr-va>D*k&x~bL68O!2?-UXyBkCWR7#L;knZl57LanJC5I4@Za8c7 ze$Mm0=btlw__>)IW`4EzUi(_t`mWq=)>O?v{;X{!ya&(9w;uCssKnQnY*1a`KJW?;yVtt?Q30wYia%o7#E*6``J%%;w#c?*!MMbyRnLzeoRd`fBb0X{*F2 zEPEYVN7XU%2(n__y&+@UVX@sx(jpr!6P(xC9X}Yng2&C9i6jL$G!iSA40Z(T+Uv!5 zf)U6|xA;jjzxwDsxYx6XuIlxcoDa9ban7qvf+72wK;D3QT~TVVrUO4R)~%sGku7%i z`77$LUoi+j7yn`rSmYw_e48q{Kw~PXCg!t)D|V>sMN9Lta8UTps(VU&k>k17w@1mu zaT^{#yZ7mlSl6u6j&=Wq(Z+|%AJw0DmBfcioJc6gQZ(cgepO{1!zGzBsm<~mD1TP` zHv58UifBO5i{(&p?q1`ihvYP!OorLQ7`^Y?7O3xy%*c{$w2O`El7Y{sPWaZHyPdD- z8SDx?XOI1)D3onusXYy`_&J7eG|fHB5#b9IZnEB`(N)-Pa+yvkix#Js%*M+M`8NC`mR3bcd@K<=XDnuVJ^yY?nMaB}Jx$<4~FN=3}Fhz>g z&Z@+8FS+{+blzND^}i?^FK8O|e1y=VcyYFjzFW-kJxf!T)I>LXc)4%5d5vYjH-lzs zv^g|eZI^fIByt-@trt5r!YnCd#?vX%)F-jI>O;>sPXEz_TB~dx%r1<@S7#hBUyI-Jxl;Vr zRk1BZ^~bEaG+j;XxTDQphK3S}x%$_sA|?08Y;Dk`(ooJDQdv(4Cv$i0cgNEYX4Nu$ zVEH%p_e=||n|^hA@!ezWbF7@PF}q?|1%G?RPIrjP-Eoan6}6(BwGSBzY(?jbO3>U# z226OhiE<0N8on@@5BAVy$>U6KRPkkh;eDKGSXG$W`6O3qjg?hwS}J?sgR<4QtAg%% z3HM@B3PIZ-ccWX;qnx*v9sLVEyl#A9PncT@XYrqSso%D`%rKg(L@jCAckuax@GC_e zz4^&3{{9na@_c|$JqQz5)oT@~m)ZLmpHso{{QGaN-Mf>i%IQy8If9Afa&4xkTC|;d z+y?}QF+~g{OtatHK!<~Iz@p5j)N|RFR z1K$u%tNw(PPh_@M8SBGbuD9N<8Gpp#WrT|iv9xi2lk%bkBQcMg#_HD7f#J+to6LNT zJl%hr>OX}(s#NXKsaKIgcBSu?lu#bQyXu|9TS23F)D2^Q1w7pNi)DB}NZ#Do$%ua5 zl`z@-r*HO`aB~IRs_Soih@5mpxh92+;|$GH#(}o&lu_BJhhcZQVM^Ul9r3Q(J>A$l zy77YK8pbl6$zs*wF4jfV_{V7GNs``;gP!g)HQNbnClp-pnhD%!UG1^-_K=S}CK zHon#e=8-<>%lue^=RVX@F{4eI&971>?lRsSalV86fV!{DPqT((StwRVZb>0%If#QD z)Uio1q7QfpgTE>9S$yMI{dk=pDsefZ;wH8j0j=kR4vhua&MUKhcT;&@Bd>kEP&4N*Pm|tYyVS7x)EEazS zTXI9a=xhJWp1>Dhj+48pGbqTdMHkknMLm@@JlF*O4OoE$La&ogu50&x$|x_+_{C!h zjrC^kd6Z-iSMhNB+vc~#B_!=z>p-1cxCheS3u(8b)uGp?&^4vLTvAuNX%|-t?otxA z(asU2H$bz$#P%emJyC*{#GIKl5fiM2zD7WTW)*NiN3pwJ)$ZO9BJTGC!UN;}k-i*87 z%pp5G>X{I~9K{nsE&0&BJ@wO!4Rtz#bk9IOq^a}a24l*FxcTEs0q)FN=1(hU8Jh)J z&-xW>sq|I!x)d*AYV7pcE%SG!?M_K3=G^ByTq$QZ8((-h6<|y`NKwnPV~^BTt|~aRDXjQzQEAe>1co^k6kOF*f~1k=LCr16IRDA?49iF?>aLsFcil=)~KuDa;l ze=n=$+~9PUe6$hvL|4Lm*#&ID#c-vqrx{!#6teboak78CLL^~%8GXAVKRje4At zdeQ`5sM(mWTU<54+_A=AuUkQO!&CclFik>DJLIT#4MEt3GWVJJ`ZY#iF+jgO@aMj; zHYb7X0GK3~ryJ_LErIT-DXMSyzlHXYWr>Z~24x=%%Y!q}4e~^^iV+SN9D=XF-CnI* zN|0RbjfqQo-`<`Z`XpM8mA(UAcZXSXA(s_ITPmHb!Uc@#Q^Wa?Y3&iuA}Y)T*D){M zOUiWhssbOw|6UYR4Ny~1?BMu#1@MdiC!s@gOw9N`2d~4ByWn30{O}ean^zC2prYG- z_q(QyjRRD44;E#Bei}gS-sSm$fa(VjE!)8)ij9r^Vs#{EJtYmU`M7?b=6~kD!KCsk zd1Vmp>fLr+clreEgcFyH6HA853JXKvPl>aJ-$TY_yxa^*!hA~%JNo=+S<-| z9c-P<*Z?(Sjy8F8Clsk?hU@OkxP)T(5iDTIH#@%zwteJ5V!)^czCaX zlS_@j;k20+y$+(VRn-)Vph_{BwY4L0`bP@Y$Uax2#~)+-Ku1@1azU`eq{ipMJO62( z_eGyu{{z=_4aX#K4a0HU&bD6JVZL`8#mKUz0+DvWyy6D}O!|PqMRhH_SXB8Jb5jKG zyG+$>)UMUOOHfiOzyxnDn@)KkxK>NR${b3|&dnW;x)YGCSfQJOoYGje9X&j(7NyC+ z;B6DPI(xLPYektgJodb{_NcaRo!roOS;3Ib#PERAZce($Futho8>xNVWetZe&|p2m z9Ie&pDFkiKQ0!2kla5zdP)t69!U)js;iA4~Ua+*J+}UH-ttNommRHm$4;npr!!0^; zda#?O@i|q8@vyPwpM!_j^JKkh>A#*!!lLsMa~4e(8!k;AdVlE&tCF!L=4yFykkFx) zjOL2DEXu+d{QBVce+Ecj#z|?`PX=`8@|o$zt3Shm&Y6SaQpyfp2(9=IO7b{R zuz8=##=$$01^bkhRuex``l|0_l@vYgUa_Jqc>Lp#?b)^%_H1v3R&U*!yq z7jeMkpAMGz?eOUO1x60HZUz1Aa0K4P>W_l>qs^~Y?3|pc1|GwU_FSN^!(*^SC=Vll zd(vUx6QEQb2E;mnS+R^LN`7(kp_tTzWC{`zWAXMj;QK<$T}bxG8XOEv zkf)75aY4%(?hYd3aRm|rP#E?E2W}Z06vOQU$E+*xh5_3Vi5S>#ufBtXW*l)-O<3%O@oWZMy*6m~&UI5T!tiuIqDHK69DDY~wc!kfTmR1I zzf)WD_aeLK_YebPFCcNr#N5kkx}_u~UsLy(aqQ?sO!HPHmk6s*9A@X|fAfqh1aL8= z>)H(=r-tOuP7rndL)+5QqDkD(=Zp{eTUtnmq0%gX#&$p$53(>6Jk6`gQG)~yFp*a` zA?Ef!&4t0U1fLsE-0`7b0VbQbs=6~xv+tjVDOV1^ zcW8Uu5gRX@@mIwbnewd1`(iThC_IY5jH+zE6`pi&=1fC@X(G07@9+~LxQT_}grK;q z2WCldPc0d%4q)Tp3?sf-7Dnxs=@dZ1YmN9_x@_njLBXG%?Y9t>N&IH0mfJEn>MY5n>TH{f~Aka1b967R z-XqAntn0W}M&Mb6ljs*XmPQzM&HQejwf$xL?RmHIj!=Q+8vvJQ+~i<+P^##*)o*GNcHL|mSQ1{sN&^egr}%iB zW*8F4ojAaF%vabb{7<51{^qS)25Q+x-ccPVDkwO;u}$MqW_}+t`CfF>={tmh4{T#3 zb@8mqUZS2@#0Fzwf`O}RwW#Evb%u$ET&_-ckTH}0yjJZC^p+Zw;9aFB1=r$*Bxg;C zTX|n6%Yo4DBZVZT35%lxgnY-nS8aZ&l-fdX7)3fu9NScWUEy<89_Warl$iz_RINr4 z-`@~Kuy7QAmUuE5x^-*A@Q^Uox zHB$klOE3qOV<6_4h zHYFE{ZQJk?oux=3R{p<*&}CSmyfR*z6neRA@Y z)pGtp)B8GVZ(lVp(YW0bKI-II2eweD)w38(Ou@2bf%9#ZM$GCJc53hEH%;nyJA1{X zN(PYh!pR+%`Z~r7ffD&J-XTC)$2Ii|BXY!?U47JmK2m>WOgY?e^2G@3q_jA9u~<#m zUT9TD7zLqc2pey`5gg4KzbYdv7t(D~HjhR>N|1RdNplwU{m@BY%_;F{deq}3Ply{Y zmd~V>CP}>;MxV@4{3t_Q0yqh9%NY|F#$x#z6=g5Qa zT}~`I`}tePWgBk>2uNw@XpgeRdeD3-D0CO|S@=-1Ter6*8>l~jz zYzGvg>A97i2fD1|$1#ouPwlc!2w3oy!9@Ik&8&`d4Z>RhzFWay2o7Oi#CDf*0^j)O}cU- zGOqjM&-mWv*&b%{t48HbE6rorjAKXkdcO5f(g@qQW~74W-JxVv;MTB=2pVV}U)GsH zjiRTh?6&j{83Kcn*OUOl_mR<2J1Chmw^++Ay7)2gNhiIwwX@R(d>}Z{xy{W1pq8(c zOj|#@nh2r$=imV0#1|M>CACX759cR8t#8;GA&HCyms+YHwFc6S71zACW2sQl94}(d z41SsrydHAqMvNSp*_iZx>%c`H=`buy6p=h(^k-y0?l|PLbCKdeyG3M<05bP*(leiG z9P)zkJ5v%WN%7?CM%}np^I4Hk7-J_Q3AlvrB=?D5Y97ezC%h^8>nn)G02JbnBbO zXMBj`bFj2P{AC)%^(()qC<}Z^5c~Q==XCp(Ax3P$chw!xcfH1Og@{Qd=}T>GTy}Og z=6b6Dwvb5TK+X_R6G^X0nG}xp2qK7aDWbl5$UFFF&08{RL-#ySbv&Fqk8rk}t&v?d zq%xUO$6ch`_=mrpsQC7%j?7hvf&y(hXZGNY*7 z>W3+r{E}%R)D<&o zy+qJqDX0^wHY@FxzLCMt5GwNtVADWxy5nbChC4MSxjY;rwwywB51~;(^6E~m0|s8A zZ&gf|TSo~mbBAhTZ3JV@(N_j5T4uIT1jQH06(f;E!J#t-Z%B$P>{%q|{jXrlYb?}=^3#yX+w&mGcK4`WZw~DI zj!@CpC&gCE@6Pd*UG=iKOtyK!0xr}8JB_+Lfm7?Lc|J>rB5ku;f#AkB^|^d5nlOb6 zZQtkFR2cq4t+RPve!hWM1O5UYv+lTr3c5Er=lzQ8Zzpm#$J-`>WhW5ke#&l;hD5Nl zT}2ExY~w6uADb+GPn8n#J{6qtW>p_~SFI212T~Yg;6eGL6>*L2x6X2Af6=kTP2_!hjZHrh9)!Dfb}kGCVk$Gg*Zk`xVDvq_ z)w;d}v@E+f=A>b|SQHuMk6dp{*U?|-@rVA8??Rw_Nm=t^`|2~XX+Y=(D+Hsjjxw+9 z&9qiUmsr&rBo~T%9{%~?(_@d$Yk9H<>2-FLyW?N76l?JHh)2Q3O|W)K{~spG|BpLl z(2Ojz5UQZA-l0R{F`!%*%1xvDf>GAC;fdDb)0iWA`H=|!%CS9B2sALqT$fkBM67>X zazE|*yOG1Pt2h_rOISR3H^@;8QS%YQubU4h(f&q;o!HjH-O3?!K4ns4-Q!$u7!mHQ zYjz4_VGz9Fth*q7|Nq8=1eczBA9JooOY_W3ey7C8%{-T&|2z{KoVn`K)>jfB?nq^r+rZBMi_P#Mznudcb^c2cZBa zIK52q=5J%uCtuF%!$b54Mx8UDZ|hg@zc9aA;+{mpDPo)djh;eLLOTNO& zL7dAy{v|S;%#vN<7gGUoSEk9l<>Hqu^9|V7N_!Bum^4vHHf&{FF#zqKGyt+>^-}6H2b9DE(90=n0Rg^`ZL_q1 z>5K0(wyre?7aWiPRtBtKQ+TftWPomP8lpsqOw2fU5)?3TCVk5tf@)Zyjlr3>WPNW) zXFf1Q;X(g(rP#Ov4I9SJLu(6yYFEVqXUz$-NSFC2>pzc)mkhr_NI0f2T8YP|q?y;V z+apMGM%p=qN1-Lmo@jZd^VzIz9LdyqU$ylThgbZNt>R*m(r`EhrTPiqiNljNKWuKA z9d0M@$sxSepN*S($a#^+Th(wCd0?a zAD26GMQWPv)H}67-i^kG20h6%skgpK!y`$SJ<%n+h=Wyxi=}f87;>NHS|MLP(h&|xR4`sXaAdd1sPnVZ-;rlD46op#vg{9~ z6B5zG^La^X*5x)N+j0LKJx;(}%AGWU^77ZP-+bS8+D{s!hG*1ZDek8ln|>a5T%Cd6 zildVpx$q)ed3TFy-H1{_fZ;}_gh|GXUtV=U-r2b)S=BBRwZsl&$Tw&7jvu}3r+QI$ zgwAJ-bPh?_IX$Yj7t!W!YgsDAAUV9o(omgwz=Wzje*deC8QrsXkDzUale&m@r71Yl zze8T7ZFjk3@X47qCx;m4PmA`K>Sy-D0csa@gr57pMpxR&^TV@ zl&h>1nNK~>S08Y+(w42VjE?@=XcaLNqu}XP!Yc5Nb#o~TpGQf^W`l=UBg5P)xamMB zXTwxUd8j(;ttb z-rHEc-YcX{;oSm^%DsV|A6HXAXMg~B)r%k16-V`xS-sD^7x|_a4AEngiNAc>wgI1W zhqH4SgTW}jE+;2Jd|zhhx@uNJyhP{W+4I_cs32eN44(fUl#D*_QUOO1#il*PGLv5I z4FOGd$2~@72=Mf!(j8^o%h!$Mti>gznC?ctl;cXUu#DTO5q+BLt|o6eYFC4XtJ-r?&q^HX7Z z!~RcMde!#)J30g%W-pQq9mK;1mPq{FrZ*dMHccr%y-s|M6S$>+&+^e z^4snn71=QA#&JvdNS2d0cz5&QJLNr(AGI-`#G$t=v5`IQQOz`hMQK3!PRAd%N$1D9 zm@huv%WJUww(55M>C(GTli|VHh23X*vt`gX!Olwb`^V~!x7_LmSNfmYN0YLMRp~E8 zF?SRfTn&{;)SNKCU!-MOJ9F>z`~eQ%bFY->SzW7yYvEDUbBp$Zi3T5LI2wO(ea@MS zCA`(G%Bo^;=a9uuXi?avhhvmgdul#*1N@yy6~_*z+w3jvooI1w$1 z9r$w#Swo*1P*e80$nNv=J+<6jkJGy>F@hD*HTPVd-r1?r3G=~P0&oooS~vyVzF*4u zKU%B(Fbw+mu?>140h9#1xcWjdfK^eWGpEGa+bJt8jREI3$dEiH{maSdf4)oMqXf_Y z8*Kp^1`jCm|Dk%j`T+4gS<@F6VqG=S;N6e1P=k3|iXRR^S{majKK1Tc);~CCrb_Y# zU&1qJh1hvUBV;da!!vyXEeOSqoi?WvQ>6m7p)vrd01uRu@KnT)z938nKZ7~E6nw*> zXwM8!6Tlu!NJ5h7Q?#_XF_fVI-rLxK??=aEoIaXho~;&KR55j!K&>P-x|yFIdN9x- zgH3fAUUcL>Xc!`RPTC?leVIF0_T8_3#&5RYEM9(-(KTzzjN#YW5-Pa$Ylo#jr)jF@ z3=3IK!0g4qbyOqn_jN5NXY-NSLC>x(3B#fA-~yx{<3lT?M54c`vN(*M>`ab4%1Ii@ zRm%(iwl2SDWv?h6Z{muNB~fH9`Dh|MS<>&3>vxyDrN5gtz&%?Qgnm%s3-hFn@d!en z3NSg^eJOyss$Rsgwe1s4IzIBD-FUZ`%iqk#bM`upglKQpttq9X{DqL^mRYF{`QgrM z9D`L=MSqH}hLY#;`UvD%4W8AZK4~HkT<-H^5ws(*zSbCyR>69pXy-GH z@L#jajvWXi@<-}%@AB+$T_+SJzr1;oJdP>4KchkU)F)YE4{tYW5nFn#rte2YP1QTw z?MZ>tfkOF4VRaMn3@H>$7Ub1q55v7_m`qA0*1?@yYS?)l?ZbbLcinq4PZ6e$xuYN9 zi37}97?)v3SWL_^VKEgX5P)&hFax)DSG5;9aRK^;)6<^=K(b$e-f^L5g_~EgA~E3U z6>`)l6H1NO3=fd!J~|2o3uOx6H2;}Sq=q90-RrzBP!%D&GZdRs`6vRy3>fjTu3z6L z|KfgwimJdT;Pva*3rkCJD(J&V(Byi0da&^EJB`cu4mb2Y*7FA zGx^iVkY}~%i(7~1+GHe@Uu$xWI~w{9$rJ~iOKDRTkB)4Ni5DwS;Wxp0plr29tF05B z+*yJlnZk4XE)&^K}rNuO0!5x>1-_}8$JNoWprS=AU)rm^4CKZR`&ajaPc*Rnno zGxrnq)Bn|`(|CPZhVsu(pXhBf=|f`0dH%v~x4_V}xQUrv+&;t)%S^jN{~L`g&NGL8 zLE&hNb=x(u;RJn#xPk_U)!}KYAyl@PK+W}dtN5S(EatJl+zIt6{q)c^?Wzgnz_zeh zgTX`p(8{Xd+#7OC?oA-auFggaboe@f_5x7-4qBV7x%S=liK;P+7stm5u=WrU621l+ z6qE&c9;+2L+u;p`IoWUN zxw?Zj65R%uV}d~v$VEvHyp9iW1Z=n-Lo3bEoF2!cm@jw??_#rd(=gukFBRsDi5~AF zcYhl{eagQ_#V1~%Q-nrU^*NarxieBBzqfaPZ)Lk^Evx*L`ev|?kLF3f*SiL^710=i zF9AO{(7qQ-s$6c2Mz1D9iDhluS}TmFmPtSACHAzdTzFSgpm!>R=N`$tu62~_XpQ9olq?SPa- z6L**ZJyp=5Fh~0N^Avr%pIS8OQ0xPMk;8tM#>?iulas$Hxc*giJXRarUgQU$ODDuP zI-XQZenKBHkuAbftI5PVWpZ+jSB<%-d#(S}PM`E_bGs!MXiJid+GiwF^zU!aoQ_cFeG!GN55nf>rxUfw4~hr>Uv z?JfS}bEl2H{s{#)(3lih-r0i#%#RU2>ldS*L6&MnO4+~*_Nod|)g~(B6R+&`*MXAX-?JoZ*if~=M*k1duMezIN$U(b zs~uiR?yt-~`e{PPBd!qytIrf4DwFWH?}MAc`SZNa6ANogUX2bXme*}=0Jd^Cf#@lU zBn-9JVxH<6wMjIizr~F15wi>Be7w}zEwJo%(!^stcP&b zEn@c@@J4(L4N86^tWR_*Q*<8mt8Au5U`{B}AlJGv{YlKKIlE6uV>-YtK+Lo4QK^crgot1 z?Wtbe^YkEVYzSK4y9x3ps6!@)e`fK{6Y8lUIUste>7R(L4E1sUYCl(qT>(Z^55OlV zAc9}H%fW#VXo31q6y@pk{GbVFarRcDuqDRo0<78L-{fMwUVQ|I|!JlTpHdbkH(hpTAU z2l+MhEcLP7&e%k2>qhaRvMI#EWb;tv&l)C_q&9yCB{-LvF{wzyxh(IVvNq9ro(%6E zn^(O}d=RMIvboLZ9(hW0Hgmyvu5max%?~_esG~@gGUhioXn% zB{FCf7vx<` z$rsXt6VG`EimK0eI7C?6KT!RM%5U`Pp^#U?tnl2&%FwP|!Pd4In%)ok zqhOA(rI}#(UQhU_Yb-S*qClmFU!{Q>L@57x^FJ9%R4O5_L2JPq_mUszFiX-|xBIs1 zMm=2WrFKjz;SQI@-(t%f-+J{-Kydo)ix&6A)MthW?vM-${$j_3EjJGjk`0Tg=ZeQe zG$>t)lPMv0v(3n>GEkcMa-r)J`>Vig4=BFA z2JyS8sp$#H#@CcAZcL#Q&IUR{9fumh*8XeFy4Lu@D|p(0X0{91Yib3`(sufkx%Q9g zurBrV`Bu1lO<;)`I0St(f8kG}Hbncpnw%4nhIL<8pS!q4XwF6~*KRHShFC>v`qv7{ z8x?5fk9J8#HHhBE@>RMh*hTv-ms~>mcL@>#>(h*?>+%{%AxdfdP)U#n{{X~-EDZKHOf$P+9`ju zvbOGkV$#&7d0a+a1kv2mBYa?0`d~NT@nR%f4d&t-63N>G%r*0I30_g2dfkEx#3ppx zKi$79ee-Q0eWzoVB5&i%l`5xuQUc8wY72A70_x`?n=ui5cOrY;<;xI4)oE5#ot4~w z#{91jQ#{`kHlrPQrWbPjt?Z!gals@IaOgJ!IPBcoyFQ@jzFPBTDT%fU+j}4Lv3`#2 ztDt|AyN-*x4d-n&J+HM*d_qDsCO8sl=|<+WLVzr?T&EF76!F2)yxNa!AQS^DdIoBEiCN0yT(j}E~(%x?x&DrdC3Z2<8w6EUbSDhNJ%DoQ^bdMUk<$@{nK2TT4 zM^^qKf7IL#gikr7)Azegy$7;zp{XHeMAP?xWXNpHtM1s`0v6 ziFY3@T39#q=o4OcSn#ezwo83TZ<{=F(pVz9ZQ@7eH~S={EJf{0b&B>{*H@c2tkSaf zIM!QCw`xDk5r7?M<{nX2Fe`?{+5A1uJXw21f^Q)OD_$z^UFv1mr?KGL!K*f&H)f7` zIc+x%M4Bq+E(w<*#N%zm!iV9}6V8?0msyo&9ffOmYnNKYW(Ju1`d1J-89B>Vx1^jZ z$hpFErmeRgAdiM}5I@X6(|nXp>#a?m9#7G|m3%WRuQ&5`-AMa{qmx;2Q9&B}-maqr z(+W4*cK!Yk#q*$CD+8aqyABgOzmgD@ce2ti7_-o~8LuQDpEY1SfMcsA$;!K-=Cj{x za83mN8Y$pd#Kp%ij#15>dI^E@L@Da}{a*2HA0_ETg%zI6&p$?w#~qzu!eGg0j&ame z#*A<$Ty$bf6fF!LSFx3XF}Z4nYya2=CJX2-rTX~srS!qO19w)#-rr!l&Ba9+&92wl zpC|%k;)RF8Un(kyAmG`tbgZF3GcNXszvF=sSGG*l*Xz=(=@h`rQr+H7y zn-XCxrk<7apx@t|)|hdjSGQx4m|jgU81Ia$IY*$`)W|m?FtF=JqH+MZ4^zs^pNN9_ zY@yvctB>Uh-hk-r)NDLDR2*V<7$YMR^ax zqV)QDO4xU|fZH8jmV`^Yj2qRVJ?uAZrb&Y8fze<_Rf0#CCI^){4JZYMF zBU4lznb#v}?soa*Q+Y(@2)$4y`r;WMn%3t*1%Z#KE92%z`+RS86k_CW3I&NS(SA=NNyrGc^Pld)UteE`FbBm?O==ekYPYjFA?=L9al{A z>*-|;)6vsk2BXs-;WQQafrsY?pf>I+DBx6DPhCqN#F8W^HtHsVlK(lFNUoy&o@t^% z;hop&!AMKT%}pfYvhlXth^SY%Xs2If^H){V*}aYsDjc+G=XG+pcF(zEi{1CkL4dl1 z2FdiW*jVNt2s!v7F)^xl@7{67D!#1UImdj1ekY4 zU|k|%)AEhhcgG$a9Asa2s62!3k+!tVS1@P}^?tl+V0MD;`ddon6$J%_-tm0`3^u*m zo3JvmBQG_tj^?!=Jn#9;Y`w?ycrKxK`sdHUL=l&{y3NLjTV~O)@S~cozqy*+DKX7C z7iKhmd>9Z#&v$%{<>HWfTztjKQNjarEBvCY#Pd|PUh{I0kLi_jf%B^r66Z2Hl(orX zZ_EtFdTEbMT$kt&7k^5UC8)PpAE#0*hBN9(Rvh0T1HQKX#tet>XN5QvyYYRvb;Ot!0#gTLp}+2FtwJ-F3A4f&}Mv z3EYNdM`5&PXj4x>O&tP4O8wDNd<>rj35MjKwR%>~LRw~K?05kie?Y~-{Q!+E82%cZ zCNIE4qXn2_#XC13+~s`La}$)9Yd|#cr6)iZf$N!9KtKvS#CxKihsA>9H^SGzIt(;d zNlLuqgQg2TXTDcM`>~49E?^-7jkeKw|C7YomysrT4%%QC+JQ+IKCj1+#+`*VV|WFy zB!2i3rv!2#pX${!6(ymeo|ZA(15lZr@+8z;pmjuZ^7$@P{nmL^^?b`#c!KF^{KmD_ zHKrHtvcZe>rY;{VU588eH_4un)%rC1arp;ES3V6*{dqX>klI>_17`hLY zpZqWF9+r2A{4htK5D=+!;vF7_Gue((+DtLK$1CcsxB)=!B@YU4RUd94dmdilL z=QiUIULcTZ-#nvkUzt12a=p0G-POCi5@RIvdfi}D>V{i%Im3oK8+sMul1GrN6%J-+^rZTEv+Rm7@3@6*UK4&sx5|zd?N2YUmf;xE(cROK)rIgOYrmf~Z?| zC<>t+4;`}B=RAaM#FQ5c7gyTQke(K2_tJeYFEM{yGCxqfsz0x>obN}}`z(%61U$aQ zu50Ty1p^&`C+*?|MMbg>4rQXTSj(+cKg0%=@B2=k;oklY(S(CYsnU3xr{Qwm&C-xd~zkoXz7~&j1zmis1sGQKVF1nze6nW^8 zB$M7^<8$&1Zk|d4`_%XEv>bQLA@T$#?27#qjMwP<83IrT06?WcK_vrfT0DGwI0K%z zxHwJ-OWS=7O}49&>&0VbW6k>&iDWyLy$|Hnk&xTQ{%FSZHYdKE^c*@ zg7}Hkg*?{<(J%ge>l`t76vt;;1OmCMQBa%b!6VrR$LgFprYadvCr^}0lSd`nj}SmMrZaCxiJ5_FKQ} z>~M0rR#w-m=eJc8vSs!#SNdlj{?sp!NmKY$b}&eh(DMA`MVQPh_}{;oLt*uCzY@{? z7VN@?U^R!uGzm|zCwtU9dXMaEFlpz(g9oT{wfkxWIWb^7FSes~ns$Jbww+8nm4`U|)T%h(mKcSAF)zD-JC>es(cVUM zwWyr%_K3<2;|C(gxQ+Jw6zdeQNro;sdi4xVq%TIM^x8W7M883@o$Q zbv+}y{KUok$ycS3T?oO2f}pP@dm;7q zJmoK`Vb z;lzFm8u{LylO9vvmvF={sZjF(jD@19bh-D_?rZlfXBr!%lHcu9gp#StT#j=!GBzF$ z#lYh{W}hs2<7I@59XwZ}*i^hh#Ay=FfVI*+cFptorH$GdM765s4eu}Qriu^z1WS3* zBRI$H5~F!>IWX*3U-(p9MwmnyT`-8C$AGO&G8$o|5=Es__{<`6M3o!wA$n7Fm z#^TgVE!ywDUn=DnEHWEFN3+;-{~}Bu2fvT4q?OD<)y_;99Wa;w{7LmlRyyU`d-H(< z^@Vk@@FDo*`@`-TgGKuXm*;o}qke20z`)4Hx3H?XaL_zf&l;WuQ++8+rVPY{gy?V| zeTxOzlH7f1_=dO%JTc&O+BQzK*LcY92v>S>>b2IfpefgPpw2Mf; z(}-++z(mCzTFDEXx4)~Ro7PH9xRBxbh2fsR*hTk$Q|fwZ+N%g|QutlwuxX3_U=>yI zJ{$iUHg*f3juyKcNM!Bz?IgLh_nVVxpLzm6`oHTewdbNeFkM3x4VIlAemQKC-92h<6q})S*AZk#P&r}SUTPlmiJi!Nom_B#u$Q>{cj?9w zeREdhkCxAN+7Ub2%k9D5GV_H7kACc&KE%3SKbdrYPW#Dki8pdPd*@2e5K5h2daqFs zCyHI#S(Mwy3+#WIvb^Z>B5Aeuhv_AjaW#(HwHlP&V*x98G7Pzl^cYn11nTc}NQ2a} zBSS46gY>2Kxk_J>-;}{zZAj8wtTuTNVf4hvWcm9e`dwHzgtRm!%An+?&WfZ`nbk$Sk>|o~n34N(_r(HMi2zT*@!CyRj$B3JopGq_Ha( zH+=>+KRqFKrg6aQsthJ|D!Ph_$Ka*r^Oe@bXF*Gyd$6eD9;2j$M8C+m(L>b*&%5s? zeh*Kb>8TG(tp2HV;wKgmw>QK;HoGAfoSFZ?>&?R7?e#uCdAZkDv-xW+Di^Le-&Q|S z-oPj`v~ZtMpQGATEAd)?iV9WWm3Hnc+3%fmO(CJeisz?@ZCtZ=2aK(7zV3^ms zoDEW_Frf^6G*B{%r|HJ!xWe49vQ+ZG?$Q~iRP4o3YI-kr(6~w(b=JAp^~e3wba?z; zhKpfHqJQm^H3}mOsh%wuqzDV#b`J61+o$f{`BIlPaXD#UDVE`t?xna8Uo%yPC7vER zR15*HGYkRhH1w`UyU?t@_q8vFQ>WijKt^`(J~SN;3>5aKz$e7BoOBJ$MmU5J>0uvn zM}v0s=!vGGln<`$Djp{}*)N9wIj;aoW%8I@`!Jnp-DA z|NB1BlI&`QQ5SsABB4+j9wYddxA?#JQ13%Qzk_mfcn9KDh3*H2+# zBKD(AL9KQ>q)Y!D@a@~?_?SW-pHNrO&!j8jp8x{WV;2reKl=N6^htbghO>VQxwU2H zx@01}?7ff6&BOC4HuimIbtnbl9uclRTrSk>Q<~4LYzz$&*WuFluZH8AKGLwCzjkif zx{M)4bm!3k?d?@EczEx~#y=mGk>pTe`ghq@(V5sZxwiL9tgxfx>ow;OcgC(!76!%s4+YGnUs9R`FY|;dptBHQnVi9nE zSg85$LO1kObEVtXY~_o_24+uy5HP_zk}jVF{u|V5gu-+~=G3(_*(r3EF8GQ;tkEk7 zn9$yU*!TCfK-0_o%SXgnQ-u_7IJs(8!Ho>QtNGvd1GIs@UHEmUi`*%!5c`uE9Vu&a6j`vE8l@QS%Z2#YaECgZAX<(@VaG9<=baJjUPdJ2~;~Z_aE!jtUH%#Df^9 zCz9#!BerJ(b)RDVXY#OUmvmCMLEmu`%ZW-QMG0`GqXIEdlz{sQbu05w-G}B2rE!We zoan-d*P&>bl;4t++VhX3X@w5TW)TirnhBgsd#Lv=ef`Dxi6HFCW5Bb)440IakB=Ax znq~-DfnFL64ZrE&9oPlNNcf0vG@e+as!1W>Y1^9b92^;8(5Dv^B!$?w1*(E=*T?y| zrjC#_XUnpv_!cVH#3!96tWZErt<1W2Z{PlcgR>qU5zK?iK`N+5o8BfPzef%@9fJWXQ6 z5N~{+>smpT?P3qH=lKy5^y$mw6cp%ahMge~wYABhpFLW9-yMn3EJ!oXgOlN~TgCfQ zg-$ToSh_wE5PrIfYww(voA3n7&v)COH2<4n49IkWfuF}L`L)qix4w49J5kg|EYMw7Wux#qTC(>sGhjnOytz#c3Ww`_u)y;YEdp}#4}dQQ7xNV$)wWm7 zcz^Ww$K<+y+w4UO+#Y@VisLxvGv4pl z>$zS}@JT5teG3Z(iReYC5c4F6O?XV(*}xPmHZnI2LKA?tYGL3QHww9c-?kd}IjC8h zntnmdPM>m}jg8sp-By(0ZQbir=*NUaM^gbZgh=&^v z#wbO-faUD{pJi&NH}_}c+ger$-JpW=Rf>n}mGg>(Pj5h5M~T+}YV?+#HzQBw-(6X{ zy+$xRm-81fk4(prm4rd$V$b0y!X@?*@{2_ouCc%YxEUFFvK`pLd+VOp1B z=m&#GaOo|VZt`sE9H$Sv*omb}jJ!1b*U$pBlZoeSi5yR~kQ3M!u{aikN0<|vg)92JsbQXW%)2P;4TJ;?Zu8Es1 zvCq5C60D(8XUcSH!(L&(Bv_W5A|uxNXBSn*&#Vl0d4ek<;Lm<0p358fU+PCnB1@d> zL-pk3wenKEMc0c+>+~sRD{-2uMP*4(^B6=4-nr|ZE%wv4`kD0u^RvoKG=;DU9YM%C z1=;b2!wpS(_d7blM!4DE#I(fAeJ$jD2EFv}l^Zn^htEs1a3XOr6 zCfgk*hiT8>lE$U+j)_gk=lj^C+0RafNP zKohfdKH8i4XOiG0J7!Zwlbnsbd>1k@A!ywHy!5!;B-9Hd7K7Hc*`LJ|I2bMg@!d-& zo?f6x4V7hx%x;+Ku1!4}sU72OL^nw@$~`;|-NUcQu)!wd3uIS#nG&B|WCYpIy|^35 z^R?@K&hObT;@o}THf6Q5VXbkKi7DLQ&(E{r;WZeoj4Iq+VH2l3?>uDBU3H6TdiP*w zO>AN+E~AnCTk9yZzVg-Dr5&oLM+-hr)8wsxU-_R)HxtvzOs7oq0^6iTjpictXOVeC z)+d$MN9^pmSJ2ESUw1OU5J^VX!c~pKDv&M?iox9@K&3GM$5M$bm&)8<{;50QCxEv3 zQ*yz#;%gaGul$#iYDpgw&~GRzzGOW`rc60pD^*@S{#K9^EeQ=c_4Oq!WOJDwcb=)0 zf?E}08IfHGH3Yi~#0A4q2&X)sNFN>(69@+F=h;dzf=@uMh+z02Okr@C>pPa){o5wE z4N?`XSEug*mY^Ls{vy?74bMVU8YD?#|G$44{X?fHcb3t%l^8b?rgl9l1-yqKkjP-?;JD+Kc;2M0&r53&B-R9K~2D{KFh zU}Is5sZxL|LXyRp1`2h^G|-B>s?&}iL#3-_Q#1uq@g9L?{RT`zgVBD#VIf2g6n4nk z26d9>s187H4DK6mow&#_lr%Jiuwerc*OZGw0hax<%;id!cF8l?Gut;P^V|8#m`eE{>s5ht@}1{6a_5&AjsJkqp`oNvHi|((L9oA}Q9zb4 z0icf}B`5a*++V|lY3b3zP!$!wX{2b;*Ji`ZP&kG{Jpl^4p=GQDa#6uos)GWAx8q_h zkH^U=)_SbOb+1TEb5V_{kVdHyCAIoVXHt_3-CKH$+#rc3B9z$Gm`J>y`T8am6?Kmm ztG|8w*4V`4NsT^PYJ>PvJ@f7NDzr5>+Yerov2o>CL&Ug-b_(kpfCGa(_3saxE>J^M zUW8T>7SGE-@6bxP)5=A0`7jdb7c&w#O}sJ!_72Yb!p3Mw0A_JAL$KJk+K)^f zf^~+X!{b6j8H0a*R=9bXf38FcRdnTE(9mx8Mr%@hZ z0r?9lZg!Ji&!T$0;^-U6l-B{BTP##jw5B%25#~mgz5<}sN8oJ~b>z8I03H0VRE3l^uMtQjBX6q-4&R9#{- zf5FFHB7MO?9d-(wI)b;n4vU<)}~yg9H~RloNMgJB96&SkLWZeZ$oB|JyJB*Gm>N zggYtnAvS`w;42|j;Q9KXsMJ%fSO3@T`7dR{;>r^^!I zS498?kUuM&dOS2AzhD&M9MNKAlJ@WZn0yrFH%Zl>@)j#KS2B=YG{Vmu_`{jB)$`ww zi2I?e&xCN~tB7{4AeH^jmQrQuAo-|rDTyR0Bf-I)q%si#ra4<~YY zew~lHn|NiY+Xb7{Y_0Hih``WL829CJ==NN0G-m8k9eiVL^b?mn4gnk$M#l%(A$m9c-6GN+cF0`-CgmLasSMCO*rnqg+-aMa(<8^rE z;M$({Tu#f5OwG&TkFiq_v_6(kO5Dd9E!Pbtr&(hI`b@3QH{6tEo5~vMJ5w0T_wg+G%G@ z_-Ia3z);4|?c+D(A77$PzXsB*4>oTf8N zI{^A~*iY&MPLi$O=Ohxzv7J=37T$^pcyvRfiIkOWmFUlwl>hTo5unorRn6hKLaN#KwTkueDzEp=Lfzta4_}}`9f*1*4Ob5mMWQ;>r zBrBag$2ZOk7pfu8phgthPyxdWUqC#>NZ_^W)KhN5LZ+;w7kc>qDB(yLL*EQ$jAQ>+ zxy>G{bB+R56rn+pZ=t|X<@?Q0N?o05h`^@ju>fq9s7jFAKH#GX12ha;c^J_mZ=)sx z@DzY0t{cO?f66^XB*Ggl_IA&D6}SW*M|8filb} zFt|`aSxFNl(~R#4++yO}w>ThaL8G81{-bw5c}naphK%sTPdpZQpaLxF7Ob@;6g&;tI&ix7I0A@C z&GI|=yS1h)SuYoUBBwx#9St>h&qgm3+~b3uxS1My$_sJr4LmqbNr zzkU0LFrb33m!K-IeZi@=02K=ggcT~CkD&u_<>gC?r%#_Uf(8qW z7$YnjItCA|3#S+uLVy0D7>mA+1Dq}-q>{J#)tvYUYO{YMEv0Z0Pw%U`#5l0(AjNjYicC@_goO!Q)lrM=sI6 zLIlQyS)QRd2gGAs>Xpjq?_*_L{rwKen_fEJ1?c&7w1sBGT{ysdCw2C&bFI}cTeQM{ zE1EuVba*Og=>pTz+w9DS?gq&givr6eSx(>ljuPX;rX#e5 zBbD07C`wEf7;rv&R#E|0B;hRJpF}Xl#gB>Q8}3KbeKVUsw^+CtMsUr0_xf!f!yA{4 z@JjHx$!`i=wxJitjfw01-dehre;|-Vx}uBqa$%*fy{I=VMYqz#Duw19Yn)Ec2MoS3 zGZgU(M0t|)JZ!1jw3%F=KB!zmEipMp=7djeE?bSGbSPqQ!(8Ljiyetf@o>CuqnF!j zcxaNeb(-d-q<3}qX&OLr8l7gpgAH-pDlB#uyJP!-_RXZ1SRg^>TH{W=gdN!5%FI&ad1#CM>}GVTTPL?uTQs&%Q=EhayvJ9 zGnp(BWC*!teX{o&Q_?wu%OhjV7#i3ay5H~IU%W3p7KI}op34dxJMC^Xh<2QfhCUHc zUqeV++9c-LCvq;8ZErZn-t}BL6CRu~Rto_4!N;9RWp1=!e>aU{F-uG#o~B=IHt{oy zaV;jA=q-oPT(+f$wX=oLxF@!cYj`mDU^Kim?$i`xP`yAtInwiZ@VooU! zc6NEiAc)%G$80`a@1UMNof?TPQm;ipWkD5u@NN^`gAUGgiW~edt>RxWFT53t>VHbW z{|0XRThIT0_*QG>yDOC&J%ktzvQ^1{P`$9kAPjrfF_OI#^QHUZI=e5-E`5ZHjZ7vg z39o38@R8_I@=;r5eZDUVj-{Pv9(F~Hk&!k0tK{`p9g8e1RdnG)6Wgcq*ss|{*@;|k zgqvfTP0;JrtAq9>GN+2-(^ZO{&!Bicp|Vtc_mO$mDZGcL8;+Bbb^mR5=n|m_F==A~ zh6KwreJ3X;XJa+ngBWl*te0v!)Q>DsfK-1TZ;C?Nd-ZZHb{@wW0EFCOiXFg(s&O4y z(I?$^6^DmDcnk8Mr=hPk$ba8_{Z`CPQuF{GRjc@0~UrKV3}@Zxj=>xgKDAGokg9 z17%AIp7?B%p!GwN3*mhG?|Edk4H#xMES?Fp5{y2cGBe__rMDT>CW;i1eb&h++$wfk zQQGZq)7^go`hD1v|0OmDF}~M^lh5WGZDSA>kL;2Fz5*gUV?G)TZz6qIXebIwNx=NZ zCMT29(g>g!TGDsl1nIanaDSLjZ(#7A=wkJ$rH9J$@ zfuhCB?WTWf`uMRl_~qr?Ra7DcM_Pr*wT10P;nYI{Yh5(2K|;6Vp#okd=w6Oh$QUc&ERkO67Bc3HlgRXCGUJx66hOhS<+U$K5+~u@aPTwc@zcqWaR6mnr)w+9SP7u`` zG zX!iFf{5?>120SF!l$FVJJa+97O1jWyoDkA6s@Z4vtkC=+v_f8hgr4Q#xTS+9@P-%; zT_prPTaQ#9gVu0^JOKz~A3zhqKrpURR=aD<%yZ;!sJiO2^+68?kIkl}@7H{U0$$Xq z`mf0G;LCnYz4KD%Re(0-q~3G)qc8hhbTFrl)CgJ&1I1%01r(S3{kFh9cd#iIzxrnA zU6WY46m$9N1{fXuOdy*adJ`|fYfHd_{QUIjII2=VM-Q@BkyZ-&UOy0W+=JNYV4hRc|ftRR*t4*tMqp66u71F|aAqv~tE{#u*0g!DtK5uh!$iUi6 zC1mq%Fo`eL43njii*8F%_$s#E=M8IHVc<%s_2@I*yVEYU*c>+W#!}ux2neAH5#M5S z-)f83Z)G@9DPW)P%RUzT&EsU<@KxokkzWl#_}{*>a6Ma7QP`F-25z)^wB4TD-&BvD zA78F|RZ>l_q0C~t=#(;L@$OnLbO=Xd6%l;}v_F0B+p|mhbbxuWNBovH;-g^ZR&4$_ zFRd1X&wC8ah1QywuFRP&vhjRJ{IV*)ky1gFbv@_H`4d0OdZvGf6_2=UTYn3ljw|ll z%Iy_fRq3Rw&~^Ug7Mm>b`K?Re)@0Qg%X#mDQi1+umw}4n+iG{-tLUWKHF+n1i58iF z3m2PKqY%G%7v3FS>UuvOmpj)FIOUkH>J6YkF}GCWx77)|TpY|7Zdlg+x()!D9} zvmy3_z+mTm>4kTUYU2KF?~UWF*oHaBqE*KF2&W!B=P7;GHaocctFw#QKED;2A`a)iETiGc1&vMI(iWjd@At3s-h*4W#I|`iBW(~; z#>q(#>}S@CiM?}lo(3Pxz{~``3#v#A#BKqdQ5rlFX(4)!*b2Y_wV14Oz;`xHr2Dhr zEFeQ}d0jWGDrA)$QXn5iAE*vQSOeSwF33fdlVl#ihDA5vdE)~-8bl<~qL@#j>2;YK ztDGB?BHcGSvc0zlXc`kNUE2kX|$T3JXxYbt*261si7i}4pw!Vd+n zpg9_?%HkM*&fj|#aC%YrOxW@@OmnhkP@QVjrVicV{Uw=!w0E+)3N}`K+cEWTm z@e&~<;v1;!ialW>G%ox(Sicsk@C7~gMBxE(P9w*lysYOQjZ!4B0dw2egTj82JBawI zO;_N{1g?{mC-|Gw$Q@%MI6m#yym+0oK&j=?b=f@R4Z|@NOW%>+)^E;twS_;x6~AjS z+dT_;V+=iAZRTu^p{|?iy2SR0%Mya4p#_&t*2V0zuw9YjoLG%qbEn_2lv1i7*_-BE z{fz}=1^~U_WVt9%_3~y89A`PtAL27Ia%Hj!dYt| z{-C-wswD}MGC*>%=E9fCeMmn!oXOlm5-((r01HqsjleN5Ln9E@LBJjoGct%EmR4F$ zEo_({1^A&U(z(=X^nVjuHI3;fHNOp5bw*)IjNbYE2LQS{jjpxt21#|!XHho6?bndt19KV5n@`_FjLrk+cMhj z-iL0FB(!?w-+pVb{HmQL{W;G#eKmm47K%RAPSI z`C);D$j8*xpof!YlexoF?)2g$;_=5kwyx_?`fSr#X-R0D%}$zc#hEgyZsXs@Fr4m5 zSji}P*D#Z)k`K#XamtFQ#{hoU*RFX|C2ZDy1vYZP5p$+=$6|GqdS!ig=JgL-*$|it9ko7_?Xhb%v%5YxD2!Pe>#VM>?ksaz_s763QS3C(_<~cDlY`?vLL}F? z8oh#VI4Vkb@d(7zWZ>cTz%$Kd}%(%>#u})O154enoojP?2 zc>=Au(Wzolr_bxK#98uF5oLl`@!&tS_gj8(@p60QX(YD0vG@03DzslVTs?iSqoTTs zT{o9HH#RmpC3c2M4jxebiMw>+nwh-3{0xw=ng;s%_jO$tYdRrNr4!ndl72OJwthKh zY-y=zjf(}0{Y`G!qy14VMB*|1^IjcXuYJORQ!cKjF0a4eS-$}G(XB~da9$Mfd4wE2 zPVpHy_WadXMsX$`rg>Z#648aLGi^!|{aY(-N(JIj$Z}!sXXdX?rN&#pFbwkrj;aRy7v8y@XE>@107AzH+KcP(CTUkr49prAOpPxC4wbkW}TAy6# z~5TYu?F?<#s~ZzaG*`{CsIUT^vzsHghc zJ*)ILB`gQBrZRO)^Qy$u&t4qW(Xn}Gd6$5mtzYx)tp9ApWJ7k6D_d8qdseE$O%fPX z71?t4mRZyCLifrNQE`RGQu%_buBBUwijKPz$LM=q(fn*NY+jR5jmw$Rj^s?mEc4Kc zmpTQSdpZpR6K6N5Q#M}R6^@*-4lrMEcH57W+os4#;Vt|*4= z&=R^%!#e)3y0w`b@P%L1u{n$oWKZt6W!7Pfiv)UMr&Zq#kd1 z@2f9i|8%mP!e|R)>P;!WU2{KZHP}UURvc}1o9DyMdpUfJhYsys=HC7g>u3gQyxcFv zIR5L)tC)oa`7xEvHtt*Yt<1Lq@;`s*7c@NDK5VTs!&KgNYd*{%wlKf=hEq{Wgnorz zWY6uVvmL6&Nili;-fk4B?*d1bAs7MgVn)ZAzOM9DRVB;WnW5#W8OQoe<>|}#HSUXx z-75=3!tA?o>zxi2Tg_5pv!$Q0xY@JbzLPz@Mm6yQPU8b;UF=h=fYbEl?D=@NTv{+H z8zfRp5RShea+YHH96sapBp)Z2!)rTs)(xPm*bE^ZA&n zz2HcK?CEA>(u#Nd3FVD@=WiBwORCC;I+;Q#)cDPOcA<#(y3#^x7o7!+&BZ~@r3z!xiG#ocIhJ$Ct7l;Q#t828K794tbYjZbBKzeaod zJnQ}!VP>kmdv~AYHSFbn?TQRkv7>)4v~*27`vX0(WL5Or5U*kr5mU0GZgA*3Sx!rm zNU0LtF4M_Ka&;We|3=@~N*ZBrraMs_Xrn7q;gDBBT)tg%dES0X0Tl6Fp3fzOH z3v9GM+#W<-ePg`u6-SPHLsr0{kV~iU3;&DWA==r8`(@-;Bu<9DP<9uet-=ct)>7i0 zm%4Z2j`q@}-^^2`J10yW6YkX-#AAL(X>LB|SV$+<*=ja`3ph_nL$-HvG>`fNC^b9d#&|>*jZQDZ;OWRq-GCW=}`*Vx+UACRA z&UY*y^3fo|^crFx&|LribQdveC_B;s(FOf91ig4en_N65bcNc~+?>4azNTis0P_(~ z_~Hl*LHPpLE5dn2i7E+Ssn>YnO?Wv$!7i{Gg{nS_4aGm*@rCH($!czzmZ`Yjn()2W zuc5~Kvd+HQQv{~xXhg3Yl!52QyiVoXvB~-f{q_EduP{uzB;D%s&7ia~Jv{#Q0L+MS zPN8VViXca$?Dyo<&*|B{UFiL->xtU-Q}WJKfihIRwz_qEb@}XAcjPioEf!4Gzg3=) zn*S|xMV%63ReAlM7|pqTWqk(z@%m*Og?Q0C98%m%(^g^=vI0(QxZTSp5_PMNvEBvF z&Svr1>s9#4gJc?u-Wg+-_D&%nO!gKDk(_EK3rXC6%X0{5w?ce&e&*0 zhuAN+qLYojG*k!_Rut^DLbihWEjvxCkLFu>70#cCe;9o?J0n^~61#?R+&LkXuPINK znlM9bo}^wTW)$vP;Cx6KC$=WZ;-YA1dR``kf5^(J1;Z(H+wjL~s1ip-O|2;a2Zbp2 zIy+StUzgiigtqZIUlUenHr6`!82iLc``Wf2p^G!Z@@Vhl%=rkkV#=h`(z`@jW`6Of zhej0BcbL{0`#LC^q&IeZnpQJ5VX|~}?}!Tdv!qk-hAI5ieiSd9-f8;4T$s?h?5a_3 zu9vkuZ6=e(eulRBd|LkYqZ+)tpwqm++{Q37Gr{>)niWo?nOp--X1ZN|NC<{)=DKIX zn_xHkrIFJ0fVyIp@q{nqxm;q|2KG4qp~@B%gS{C;gbf6l!8&bnXCSnP<2z}DUo_f; zdLC;8YgMOOx^~Ze$?QPS8n|W36b~ zU%<)bFqQ_BCG)fGC34;~MPKGvl1o_;3V;CR9Tgkh$4CQ?#Wa4mP@0>>LEdny1)%>M& ztSP|TsT=LLB_c*ti^s?N?stO&`ZzG&;s9GSv=-sF zRRF3%tx_lDxZfQx){O_Kc7zgz&<;-n+qb~pUQ6$A-q~&K=^+Gc7y=b;$4mgcQNS!D zM6K(#O1}2Hn^~epAvI*|T%zW^r$lcHT*+4NQ2N-jj84chrCk;%ol?>1xk|sXE3zamZosK=^gsZlvnR1;~v2bf;XV}!Vq@*MW54-?_0?;W0 z7A$?3V}@ulZil+gg>j~L_=8VbtK5~^8%^xRNKgpC4?w7d=^g9t1c>AD??*wiY2FBo zcLN8Ew`%%P+9Z(*khot~z*p%7IN)Y<3t29b;rA(kNMS6P+Tnh>0Fc|t)R z&Lv{Fc>K5;Gzj0}DuS#EfRjf7#{)sch=;Tp9}V==`kQ9_JO~<`|(jab?X)>0|PgAPcl3c_rN}^#ZMUtz8mu`>6g9yyyr{8Ami-p9RI=jm#oCe-L9~J_W#w-Wg++sCsqT=rpdcwnoK2 zG|~llji_pud#bAX;3@;IsR-EsZic0nPdBcCdj;zef~(tdFnip8w75=LcjrXAi^94q7d~mXMSJ}fp!s!Ldc$Xsi`IM$JY7E zb`HXjqE;YYe+YmCN`Ml5;Y5!@BW_)?AL6lNpao3=c&grOiopqhK~+JNx~^oP_^t-y z6B26zk!^%vPgE~;;tdA20r@UyxWUyeNxHDVH@N>5Zk_~K56!qhD?I42UpA7aiP?ow zg6jM5LUQI>wtankkmC-XEDw{PkQi5eO6h8Phkk3~bt(yW(IItB z1#ur2fI&Cl@qH;KW_kA!tbJpti977|Yk%b8N;+BA!3}1^_wU~$rVUUM`ThE33|Ezu z>zr$cC0G*>K^E8zw0_J(uLVTd{fzbQTq9)6Qe|rjyxozklDRLS9)k6fRq=Y4X&wS7 zBa4Y1gq%k6nVbad)f=!HN@URhhNq@$5*sfI@-HVPCAaa+-5<*(ryz)o_;D=1c3BDH z$wJEGD~E|n4#)EaK@|vRa1`p`5w`1sDMlhe|IZeOELH&PpB^wQ*MQSYk$>d{6H(X) z2Ems1JV|-bby=bLHUDw&MchzQk_Af!T>2r9e_tejwm|&?ga=9ivls0Ehj;{b1e7Nr z=!>tBkS_3mfS|7WQ~4j>i+pAPGGRK0Hz(ukkQD;ZX?V>^AcKQ#*e@`!8oYGAaQ3bx z-(e5_G&2K62)KQaSz;IpR6=6nkrKyw`b%Y2dTtjTmmWH#J#VU~Zjm6zXqLkH9_DWPf2sE$;M%$G8! zAouB)r^iNAej_q{Z~%KU8yEhEvm=7)Y3r1o{?MJ9FlGtRSY(?=0g?IiP`#D|56%gO z40yPhGG-c3i1!rq{kSN&uy*Lp9UxB-QYt~O2dPSW@S6nfeue&Ym~;*RtLn%5nIMRa z(yr?N4}uJvJU0N!yh>xfFZwwk6ocCkk(e#%?|y;Gu}AFMD&Ugz+qcs@m>?Yuu_J#r zX|uwLt?L1d1Fy{Pm5!K2pCA&v2ob$plTG#xyF&z72p5LXx5)ht9u$~BSv#(go{=F9 zx_kHKH-m*oMX>P_+~Oe!gC^?4BNIdet}}+cm3y*1O48Eieg3y3pBDy*VWdUF9Z20_h+tX$c zu7ju~t}@dy^Xftj%i?P|(ROEqCf}WY=VS2gu1SCIDBO-q@7$A;aD1SkZ15mqpo}<{J_@2_Se=T4C>FnwifRzA)-sbZ@;Kh zj=2Myql}akE{xeEKp~b=V20Thqm-atbapP58@g9~x5&1~RZ7Zx>_eQ!1q$FAD4=pl z)nv?vIRxY7z(J1~D+^84O8r1hB2vStX*h6^@dAuM-64uo7-9F)$UXqPWup)kCw1$V zzkWh)>I{C}vWm8LKePQW;#pRv>6yQ$NCwJ!u$9(9?S7WPE1HYoNF2xmfM!io;Sk;1 z7}eK-a}KGqoM>v3BLMJV~VeK;yv32QGT3O$8N4Awfi<`OXdfS8jt&I63)NFFRy0${hV zg#|}jMg+)r0x-@Y>d!V;Yqaj&J9iNO&KEFywbjbW$@L!zfx`wdMC84QoEQ>^cq_p9 zbts@w?h~vRdQ=9{R_E(AKym^H$$uT*+zQR(7cQ`f0*$AYk|QG2#jX9>n2hlF@!dF` zL0!Qs^VH(5g@pp+5E$_Nf420@T{_wqQL!`5O(pIs2zrSrfy6eoUC{knL-a6WR#q>v zIS;cfW^Kx^Y_HGPL60;WK0zz?zH6q&rHU-D>>eyYh~T1k>)pZ+wQ}Ts9r$YlksZC$ zjzY2Y@&N+g#vsw&GjeA z!#S$;s~+DM^%!445Y=yf0? zQ%mRXJ5%x8E@zq{mN{K;o#Yn<@z~z)-}!0>**zKA`Hi{t0WIzfu2ZkKryksB2TKKn zF%n$ku=z0dNNW*ukhKe8yYFnhW3E#NbAO*vHb0utF+-Pq`Sv;PUW@DX@aXqK3yb|R zerZuNje|zcR9Z5oNBoZa(ipaL>@m$X7O(J>JxRKKs2)W7aovx&d;(JgxIjMrd#S%y%;!i^L^ezKj)%*_STkcs*-Mc%#DX$iBt%S^Lb4u7rx)cer+^(n274KNjNAu0`x%^14I{uU(Z1D_F1p zYCDmfT~=1Xg)NEvsi-uM>pIpAK4xal!fTyI^gWF1!>yj~=>ARTm-)V&`{K*H<=bZw z?Jlq92E8Dd%~`(8immRHX^@tF*7jdiyF{DXc&QdSO zN>|fVS@RVbI?m|Ht0eVU$1xJz`1bzfjJn0kU_EkI_eFfq!qSI&-pkHw?iy2AyL%+| zi``v4RCsCxY*+BlvhY%oUlVGU3=0l$o~C5zT3HfznpGm1?7!vVP~FPHd64IFePDnY z&>P?KxcTwf)d2@YRv|iHnqPHB+}pxcOfJqn-hRcMsSKw!gNiRwWDvKZ`1SMqsQc#{ zJAbaIQ0kVhr(V+C{lOof1L9IbHcLOrPSkw?ALQEiGiIDFXG|5R=9M&5@k??#i0Dx@ zZ@=iV$QLEj6_x&F&fpXG51p(*2m0G8X6W`|)QaDa*UDUIiVvZ8AILzekW1)!$>U}) z;&rAwPxhYTvoU8v^V?&|Tsm7cA45WW=8WU=oJ%x$S2BFDL_HaADlL<%ZZFo?)B3TmB7VPixBNa1ulD8S^}3!) zquXKGM(^8d9=N}gsJJYAQ+6A9Z8b*C3Z(ksyIYY+l?`<^LtB|-OM+fuV90B-z^pw} zoyg&s0rlW#(HG`*gEJL^C2q)w3Wc=OqGVg!%Qa%%zkeN4m%?JW_fvwmke8O1t1IlP zptRc^pwf|amW}H2it_C%=CT(P6GD#r_Vheuk{C#G5HnJQ7%TfJN{LiI7Z--o@y+jh z0t?hCW8)g8j-Eg{vUgvD=-f|%3kLRHiV1!3ItGP0Tggr01}B`o$uxM0*MtXuu>Fa9 zn$9fduGdgGez~W!-t5iv2hp;R%b4T!zmUbt`SF$8NRGJqjBW8JrMK-Y&h*xfpBtua zds0qX^J!_(t8Vd!x5;UjuGnwi*h)_7TIq=|$IL4Ma+tq*R7A>2(CV=xd9c8HvKO?0 z3D2B)u@&p}y|$g={^sjz;!X`_gGSAR@XA+YrZkpl@a%s5+Pxi#^T3V2{dvKqAFU*N zE2*|BhSqVKB9U7)?>WT{;N?G`HqBUHmmu>qz6uuu3;}`aUgrd|q#8M@tsBVdOy>2K z&%bUu`;hj<@8%h{i*tC7v9?0kN3xH)O7rR74qw(SKmMu9cGoy*X0yP66_?N5ugN-U7n(o=hDzg$XowioP@%1WAkFRwYD~W;t2Q|w1(LNuI ze7U^I_4+1cQG3%_kSR3vDmCB5nPKQWc2~@}Y5fOUg6Ox=?dJtX4ek=->u;0RBic$N z4E#&dOV*DKjlUvYE?qU!4E-c1SKK7zx*|vER%=Lw1Wg<5BWYj#fEWq0ctN@dv9X)E z<0==S&6>j;4%v}yA7>nKZ{X`Tk=kpT3eY=remTY1@A7{$OiF8e{$tVu_dy%_7XVN2 zLBocm?4}vO-^O|~{s*Wd?BX22@Zq5fG0QA4AL(d%9-T zh%odCKK)gw=kO%2>ggqvI+gs@BqNX4HU$&{X@7x?!S${}c~^OY)#m}ALJ;y3{a+p& zdkYkgZ9i}rp=(B$i=*ht<~2t2f^^iK2`8UN!7E3 zzxaNTObDFqd!e-Oamd=2ImeeNYZ{z-Qo1aD9xJuJs2%0L)D4zk`F3F)b>%W~^0f~f z1z5)lQZi*(D+NUai-Q1pfcRiuFNj_(_tz|q&CP3|=|gIFgRPY*=y^6kC;SJE19f|Xod*KH;s zYD> z$Ve&e6i^(la;s=wUS1@xNqlqc)bF1;xX@Q2$wmu<`@4f15LkScJJ@4ql;LNgH8Y~B z1a+`Js8}|jgywntlLyo)^#LyJ*V{TqVTbmqH&`-x7tH>;B}zOc@d)s4SBv;=Plp>; zMA<$|{lR}w!DtO%T5a3@e7l?f0m;vv-b7c48`-Sqbu=B~dd0+)%j3JmZEaq0aGHDj zu1g~66UREHsjBfbl(pT7!k+UId{ULV(I14&Avh>~u>5iZlq6l!F(J#Ms{xbC!CSx0 zK6lh%-Bsh(9%pM>`9LHl?8Q46>(5v@4`&w=?KlPYoQrW=G~!FYBgIMRd!bMJ<$OkL-#6+9>`wseyeAy zM!t9fZGd|y#H+_M?Jzo8GF&dd zu$wvq*XC!JJG%y!N|$@kO6U!vQ&z4mpY*@qp4)Nl#*LIoYF%U?x_?eMYSyZh1UNJW z+3D`fSo?qCDt%va{3(^=kUkmuA|xpcpmnY@Bsi7O_=QDB`vC||qa?A*2h%*gKv-QE zNev^fp{3+`@C6Tk0#LWF=LaL^j@wK}kezxc<0F^|wEdY64?1KvH%@9D2r_DJ+@hV3 zJ<`!Tt6Pwc=tTPNJy_?R*PV8Qn!&3x(1rvjH@IIZge}TU^=#^wz=ZnE1^PtTr$$1f z5`6NUy|-yRbq4S&#lxFg^FFFtIv%%s)zsTbe&GW@?zGilmz|JO4;l*=0Z|XZ6kHc4 zhVeh@lzzcOb;|0f+rkR%_Ajgh94?)u(=#lSmO`zSdyhf37_cA4m>GWAk3I4YT@r(~ z_XoPR9Otz$TkXiR5GYFXe92_zaCvUGblcxuXXE7j3U@v!HTCmC!7lEnfV;?o3iJX6 z2tSY4hA_-i5V`$&>x+CpNj3zL{vn8J6Tj%xVKHT;5;x)dp}(%@2*33**>i)Rvpf3q zQNH>OEVBM>cSP>W&QVgH$g`7<5^QWDp(|oAWE3PYPK%Niq!Zo{XCoxc-~V0DZ<(ws z+}p~c-ZAXwO|Q(8BuTWw2SShS?b|OROc^?+>zDb970;EV44$#W%$QkXbnHG8uQG@pyCL=kJ5u27^*84w2Baa zg9y&&EB3{a&tdvUPBQ@eye2=+A&=kql@wwHR8V(^*vtT<(QO{B+I!y!p6NdDLKHiB zN&!Kj`K0ab&)-WhxF|Xq*|?^NV;-+r6#q~btCMgU;f81gG84~ zuB~$RVtaQZySL@ur14z(-n9K)9Fa1Ar0?xtG#k*bU|Y+(LE@cbPABc*L8?%~fBMrO3!I_%*s;d&GEJv~Q1S_4Ymks&*xcOwlc@)C zcpsoFnc$0HC`LeY_!vt)MYd`R)ae%h(*t3DA4P})*Ud|)AxJwxq{BcgJ(Fc{JB=vw zk#roGm_;N8Qn3T8*c6wO(*K|9EcM zjiQiJrn(fd;QOzea?06pICF5`3*FP1o6Lwvr3)PwA(wOXS!-V36^)qxF>CE;Z&LEN z=G1=mx8{`H71L^Kwb)i{S-a2`n z9rkfA*W|BPlg`g@YSVfgL?xhZ%PyGB%4#)U0QBbpuy;H(K`2k)S){LDM@C|x{(Xi; z^$GxBT17TTA-=p0vJIyk8*8sGFoEiH#{A&CXguMa>^SHsFa5An|)+ciw{}pazlw zk082ii0npk3=neXkjqR2uQ=jscn${(RSA>j{+Zdr^zv?c2iN#8fuXRjnu-b{{6gq7 z7!DEu8B7JmWUZOY04rG*Wt~1qw;rST3DZ}M^?=znaSXi-H37i10NEpJJE$KRxksWT zz0qeOqzi(^Wx-&Vp*q-hyu|WQQ9y?Adkvhi8e0XH2*D$t|7H!K0Z*pD4Fih6*wiK?cFt;J;Q^qxhd!CYvJ)UC04f%S zBSTmy4hjMm0I~;#fo%~5S^sNj!weuWex&CO=pLdds}OJ%=!6w@7$uX&3>G&4egj}9 ze?AjL0xCk-e`-HI_&Qc|9jWrgoIeYSiGeK&t^*`pNf$@)k6W^R_nn!I`|fHND3Bc+ zbUz!16|w^x7f^jQMGHnCfWZN$`Ot!O4UhY$d6sYQ4>D?E&ETqru%~B?1fE|~q~W9i z14b$9z(IY*B1SM%6i!&WY9`QB-lfsHuzo?r#*B@}lyj_fyFKE_T#ATKfDIWgSI`9} ziVp*bjtDb(z~+JssYC>U;=3z%!Lg(Vk{2LwD4R@yeYEe=hS_7417$8X)aM{vvl_XD zfUGal>OBKpVH)-_O%Oc^K%fIHFpL4l_UVT%1M>#62CT~na>Wu=o`Otv5=<)cOt`3(3Jt?UU_io zl~&f&aRA)gxe2_69KdC~O5Q@I3CHUT#9bjCu13ymzq_@uZwN6qWA$Xe`%Bbf49gGU zatv=p=~5#nm?}of0s;ay*Ey80Abto$mI~~YpP4;ELH#k0mI{(7XTx+LEeF*K=%w!8 zzmLq2>9xr9Jy!>;>P%O5Nyd41xMNQ2iadk9TR9#gHOMPmF}GMDqc9m(N63R#vvNct zotaD0T~1L^`9VEjVE^?D4bAQQ_mLorsFk&8Z)PDQgI|M}-g3lpV~s2DCk=kWKejYk zR6JbdAGuu{QLO;=$}KfZLN0QS^Y zR2ihOA|J)yfP!0G>$OZOH0B>6^&Kp`2Ufe5TJIm%7K_+;Y5q@9XB`#Q_kVpFrBS-2 z5v5Z)q(cN1rAt7%yG5kC8>9pYY3c6n5QcK3yM~zOjGy27KKwCjabeAZxo7U2yWe}i zwnm&7K2qg6f8U8l#SaVie9+_sBFJ{^oO&Mz+x@N{pL+po7`X6(YSeD9VyfH@^#Rxy zSTR-{{U5i=IjVsjHsWdymIP8C{a-N6#YK#3I2R*7f`5jl*U$>rTCr&>^FOPm9c(1H=v`}e&ykRlsa@jrG_C8O{bm}gmx3pT8o3D>2p<+Kw^Ev+ zH|RgO^a|VGW}Mh+*ywv=vFs?p;m0txXKR&vuSzeczY-m9r*Ln4;2d=WAyR8iVO8{_ z%7=?#=jLy1^R(oR-IkTE{!_&hzoiVd*m-VQb{7^o10_ToVXY}P0ipVq6J_P=9ZK^MC>@g5m-mw`Udxv5w7h497&L>Em6ns zQrH&lWjK><0&)Ar2Fm>4GcuwZ?BaVX*QM>s`O}OLK6}d_mdX-Bs4`PbMZ!2RPOqFJ zxrOX;Sd)bCpx&kom@!NM@z`98Ntgf7o}=%C1O)7+9N55l>oiR0IpvydVvL@+*e{ z^ZBFA-XW*ZuZ!~B{p3JlXm6JU3IhUxZ43jx7;NAh1c%Vj2cXtngk=d47l;)?J=Ib{ zIw+6g`H@ezc)TT6#9cTX{5sr$OS__(SLsh3{Kek^f~Z0}Db#@oBH3O~etaoi!rD5rbuE zaQYBM4&G$)^g6tnT7JoSzXMym$MiR=?p->soxqM;%f<`zyPgH1Yh&SZ|T^y3umm{_l|lU4L^bx~(_~sF9dACB$E*wq#}9 zn7Qv*_Z3ep2sN5Xl$(6gp=1t*z>>}_nnkg4H7OkyV-NYXNU?86-mhvrxGRy6(g$II zf~+@94#N~+mSjwpr%Or?Xe8h>_MqOX2Mdu1Rk#}=@kp{uY@Bz&diDE;$gyiP)qlS_ z8SDztI=Blmzy2j*1vwhqXBg;;ayP;#Ccp_pe!;d#D?AsWMV3g0w#>CB$KKj8!jOy{ z@mff|^SSz3+E2pxI=B}y@`itU@-&$@ru|0Foy(1du3X8Yd#V-c8b{a?*?Y7xUO@@OC>fqmU#CPW7qYki zRR|UhJ;pcMw6MJU>2QwYuQ`gg7m}J0=5uj6xY~Zf8Z+da*0=POvHSu=6r$weSAtGyZQWKj)-8 zBZBq}VE@wsG-#`iw|P=>J2SirN)LdvCf-9=H1p{t2)BaGxjk6&;oAr+82Dyv|U`WyO^$j^(i~B1ACqOsB)R+fE~1^GgLD&I8d7@oM;=2#FNkE2ac0ay zr%G8=;xUDpiMBu&5VSt1vR&(plUPPTto9o~76l9%jU)@_ZI={@?9JR{6 zE@lD98QkK!4;p&h}2mFxBq!$N> z#;D*$M;rmBfPYbJb*l}W=I65wk>3)2s`nk}wpLiu+AMl*#|>E-mh};4j#_T)JDkE7 ziVHvKj%uDU`P<6Md9$|R-eph*wKP{0db(nYDNqg|4pUZ@bJ z2>Mt@e6Hs4smbwX89j;|T~|Du(j7B-l~ul)1KaIcc+WU*VwB}{RBZAjVH%#G>znoO zCWEk})StMnt?vUo`?R1_h3rUjPtK$U&K#f*UecoUT@kX{S#-M~&8hA(O_iG0+mL9* z7pM4cH2Yxwe4-KSUqS`wkj9%qxnyDC^$i*^Q1R1w&J98O+dj z*~gfgJ1RncoV#UjVEA|7i^$)P^g=|CGH#c*9y$J?ompe{@2K9Fl7fzI{ypN~&sWtr zOi`k>U42zlOG8HVjVq7)jvJ>5wV`pfl`u?xJ6cgd>C-ND{r1MXoE-kma_aJm>&=Ti z*J^G?*P7@H50;D6b&JVkvfJ!YugJcf)Hr^ryHD9Sy)vuB%5!nf2aGF80`5}Hrk@Kl ze8Nu0OVk&NK4!zT^^uV5^DoHC!z-w!@`wwimx2o0`x{5k88bB@>^)Wy8J74pxax@! z&bNO|bX#z6X4uYCNpT|^q6i`~USN$ttBpil&}HO8kdi64n23c6gBiMQJ~Uj4TWu_I zy3TPfta9G)zi8)H)#q-1Iuj+X`JH9GGq+A)jdh(%f(J;CA<^n||1JwI0mP&H!kX1b z0^g6a+jJukB96q}wmQOM`pi=l-|MMUEd2w8_e}tUcWj9q7=yg6bbrBzO#bqs_JtW}~R25t7-uXFgTR39x3t>3SGaKgQ+KU=$aCk)K-Dh#r zh-p4ApQE(Q%5EPa=Q2CRq|;oav$VCJG&i!f7^j*L$G95}``vo+>QhMm;S_Cr4VHha8u)FCqeHq)}K3hnxe^)EeX zf~GoVJQLq37$e$YZOl^6R#|Ee^A)}96%ti@EV*w zFgAPeppx@~8LlXMr}K|uSu^%}9~% zFSzpo!tYOm0G}(;|MMdu9(KsUBlx=(ozMN>SAYD!;ptr*UnQFu2>uNNyj3hHw72rf0koR0_)=qDhuHKXa}G&~fX5<*n8 zhe9FnSg1z!)}`}#pT6`$etY)Z);g+a;PQ+F=KW8iG2*37CQN}DlueS45ImHE;z(q|GJJd+{>fs89Cne@DdupSZuCe?h`0o&i9UQp}?t|Rq zIl#cJY1fW@%DHx)pt~1mj)Fu&SHH;?v2Z8K6BgCa8wyJ6wr!?n_$hD^PWipX+99)F zjouW$fN1vdBePrtSpZN6fSvG-%H^B#)>eHLRDa;6hJb2WF)*J&R0#swC{p|V-3_8U zrV39DoL8VsA=Li?Qxq!AMr1?aMFi?$E!p1^(8FHjMoL5k0i<^z?}01}A`joTx^a2921$v`iLKR;B(`Q4c`jP*&0Yll&13()Um`?vReF*TQ4q%3a8YR#M zyz^K4c7E*oQyvw-a%c=Dya>qvc(e_<$aELSO7>9YrKM320af6oZ2ZRZAC%wN^S^8c zhEQPMsPnb6OM&Ag9}SPi6ITYOEjD<{EeL@ z&UP*fHho`FijE+p<(dvhLsC3LJd)uFN&W}zBP4t?hkc`h`aN|)dgnd*!GHUFBhOw| zjiW6Ekv>-?*;{@8^MMf2%UsJ3u{6NkLdSaZLkh4=|_9d%8It39Q- z&}4+-)U`xLUW|u!?A?nx>(TZMLpmX5Y7g~(Y?t6v?Ti+}^m~bDy0X!)@3PeZ&zs;g zk!kbC?ofwlx=VG+*mOQkUt>@(0nLhd8P82>_RhF!T>^mf&v0f;v|H)O`29SIug(u+ z2|0(N$J!75aGPO86lk28#yGx%fRN(LwS|IlKfZ8{8iA^}9V zF=L~I3P}`xd-|_~6KpAfS03ySxL>6L9279!8-Xt2eVWWvP}~6Q0ERQ)-v9+2g%SCc z(2mxtR|sc4;sy|5!a(@j!TSy9xQOOr|9m_k@CDKVXE?$f4m`B$ECFg(HmUhD7gi|eBkQ_&>305C&9Qlc*$f+-(^KL2ftFZ2l_a5VKlB zL+tjM!2R}Iir`NSo%k?UJ59{uNC z5<8jjL!+RrY%?y=_&{h~Ru{FpX!LT3NZTXcZ2d37t9R6Pq}1)bKm0;mMtMw!W0H4# z)3zjfYo=(|W@4bn)6KD!J`C(fk+=*{v0$i-evf=n(OTaS|4$U~L7<1QsQWXpq995q z{2Bg!to=YpLv!$YW!2F>!WASE2~b`Br`X4nx-dLILFCO~Fwfyk5mIn6f_jXR5tR*L z4D`qlAnR}-cY$oe8kjktAyEMjGibGP^$-Jfw1CqK$Xj%roMT(RULzJlvq$w3Fasdk zNe~|yDL`KJ#)#PT0ma+6LZd|i`+)V{0GcU)vp*Qr6eBWMAdZKIgc#@m#oC#TmV#pE zop2GTIYKl!-CQoUDQAMo4HBX=2~@x2jXHchdsR#j@s}m5hau9;eGM1Y@!dh7&us&F z)7w9tN1r&dbQ)2H1ZUbwgdQI&i%9t9c<|7wkBC0(I>8|u#25P5DzGNmh)h0&D+6PNM$LQZ%#A*Zg6$ zTXsK+dq&}*bd@`tfkwQ^U&|8cs=}J%>CBn8+Y*b5&kuP;yjB}(hon4PTR6>p1#o}t z|CRBZuWR*>#0-k5sY7G3iYGYR+U<8yd*k&F)2{jRlc@jD2^ghOE>ZHPVLz~y zUO4m%|CxWXEFiDs7fu?X`t^S1RC{mxQVVeHmtn)0;4*gqir~}z$qPKBcJqoZccBNz zZJxtzbZ+to+ePS$4nmi2*pik-9w&?YKBSEPRJp$O=%)JQ1j{1Iwp*FjpmW$OIp?g@ ziL6MEu1%J5n|CJ5Jm~9Jg$~4^@L*Z^cnmSJK@6#YvTq0+RAC*!4~h(|WON8lpaX9% z__#<$DoFU(x+?&F5m5w|kdOcYyk%shXCTkf+zZA)zyO~!;SOJ4iw2X4MDb>!}!b))b|2@_UXn`P6jo z%&^CbX3*m%>$llzk8WG(s^_X}BFFcl705-VgT8C%vk_mrApH+3_c*mJ1~e=6cwxAd znC&gCzP}s zO+&byyqPbCaM0079M^5<*5xOH`%OFl$4DzpUl>f}6;Q06T&+IFKxPP0K#7py_MLaR z-4KJQ!wJ7Mjb+KSr*%Ehb|NbvTPQ_|)n`Lllq!MUE7PSLpTTp^ zTZy82aVk-1Fh21LE(O(;bn;u#BfxLpOk-EHqUy@9&j;az#1} z2yI-z}}T)@e~ZrGm@%7A_$ z&fX-1seXN|>^nLY&h^8W6l=&v`&gaWxuHq zpn>#Lcs||k&Q5n^Xhw(=V}3&07TuCczlZw=lh+>vKu4imA1wJqH69c(c5ffmBZ@?T z$$+@1^l-URQ@=a^;w+#I0N}yA6eJAA5z7`NN8(6xky$~N4g%H)N`L;(@z7+gR%6tK z;m}DN=rVV!lzSjZ-rsQ|^m5n(TJ(Rz+MP7M?1vPqN#FefmNd&Ot1J zPhf(@xzRstE&}z^2Mkfoe5S*5(c$zG6luOV-v(3@xl|2JMrNe>uQ zUe!)2k1wCIrPLr7Y$lb*$!k9)S^S>_ap@<0+k4S^?aNiTICq0_KpWcRKrPRO17AwL zs3uJDSflU_CQzaFcx*sr8J=ykel-ndIS1n|*P|^FrlvF@=ZT)=5Q6r}vj= zkd3jiMFZatA(PlL4%yCp(6K;=%lGMw{j=v$-X9{?;g;!(nx_)9Iaiw8HGhBCaKFm@ zZg~TF`-gsRtLp$HQo{ork;zXC9;n|OPtdy1G!2fKj6T|G(-#nb4sjX&?7E|pqu`6r z6is&#rF?a>B)<4*DL4||{5kcq5GL3;!HIp8e{@=W9lnuyzxSs3-hs|HBRTqPq2ufQ zrS~QWj;z^Q>4ip8rJ-^ydD=D>1IhWsc-CUDZr>vWD6MH}fO;nyLI3upD99}nap%D}(tNOA=B(sZKGMjxpAjk2 z2({5Gy%*68_2?*qo1~TLZg3SyHFXr!3Ez=@WPJ3kuP+!nHWQ*DgMo4n7#M;-kiNOs{^8Uo31#88=P*T}UH*sl;FCT$90VkXYKVlkg_eMBg%?QW^9 z<5O*zls-j65~o2FNJr&^oD)zS5#?NfT}l(pz=M3HH(CN(A`wNBcn5dgy+!*0tk=?{ zUbBCcS~ot}ukh=1U_EQR6dg2``Vncx6y&;SsXifhyeyVY6QGJy(}=MkK*J})M9nvC zbei+9YV9i{i9P%I;cE_u5V6WDifL$le1o$Y72jyUo8wci#~)L;AD?!omQ9Q+nb7@) z(Bi5h@m(GJwL~?C^tHom2=cPMNuv2}We?P_3z_UXdvP(y?k(DP;pZk6NPPUaGQO#5 zvB2@S0V2?EZ|Frtss9Wufnv8zQ^wuPOspH+)wQZ8Uc>HCOz= zj)GezpsK@SBs(DNM&?y4FDmhagQ3TgY^g z4V!%VO81rFfEJuAr>3}?;b4Uy&V_eeDiA93UGN9Ypuxl)4E%rQQKS@cTsXO3Vaci| z!lUIyi1&{~DLBPR)l1x@2waVT`UB@~@}uZ%t%g7>J-&zxJ;AnqLgBn9VYbds=GGIK zzusbV)n_$Ee<=g$v#N(&Vh6NsiDGw2Ecph_tLX;XWSsfM?EMLj4EnKVsv}*14wa7# zfVTb7(!M>!&Jn&AY`#ww#TPm<@aqaaLRU~fqnfmVi!GTaUyF7YvKaN5%X9t7GHX!h z$4q-giI+g@|6D6b`1?)eUKY2|$pRjuDt?zo^~wFNTk#tqKedy&lThV2KPuoO@DKny z)?~{K5NJmjk%VC5AlM2BiQvAQXb8b9Mki@Wtk!-uUvEcC0%)X#E&o{wj2G6|je!@z zQPluM`!GQ(s~SG%^XK~sNE_guZR53|pT{n$0k~Dkow|cBiNJGMNBN@tv|p-Huwl;j zXp@^@%sSeS9Sba1QPh#-Nxf6l<||q#OAFgr9^F)`Q>x-IcM}Pi#u3DdaV3u{G3Tp;h24mRgoBSqoPfuU2TP{zS?|0UedN0`i zrCFhQmYu}mWvaZ7kB_Vd%d|k8ev!{eiuytB#UzEp5mEL}?LA#5yo1vH77xcX?{8~N7L9rws$b&g6TH9B~ zcSQ52vivzcN$c-n4ypS9m`CcT-V;6SKWC;W;{6{=u`>I-zlj-Z)RkPc|Do+qSVlh= zh+sUP^uwp1Gk`o^q`5?ToveE)O6*uIyPvBfh8 zzg{&Mf2{h|<88ikx}rhOpZacp#TJiOrue@bZ%T|uDkf78@P5dC zN31?-_Q=_p?PhbNyUkiO1o4|~*=ru@RMieTko$Wp#bXqqseBUVgf%=UWk&Xh! zk=u9xdicYf>?j5u)*q2cnrYGA?dY|o(<-gro2X`+-=yVblM16yQZX>Ktdz&GO(_Jn zSQlcGDcBZY6}f*P(vcpUSOjOUYT|>Il3svHS0P_oOkPMhi&d+78;Qe`KTy{I-cBgBspue;G-%ZKG>6o3^Q%gk8FR z*W!G2V~bx`Hx3{Dl^Zqap>NuxGs1{#KJSA^YRQz?<{Q@D_M$`--Eyp{Bx@;b$Rojw ze`bDBH=)G^m&E$xVfdqvw|0LF6GW7H9eUDa0wn1OmfvGwCRQ}TR)Oc{ac82T0`LQc zOl^MyD21|=I7$09E}%Mq6p0LIC6equ^vdjSK;su+>&T1d#x7rrdW66=KV$x70AMoE>(2Lo7& z=-z#szM{BM6*rn6PkcBM^UmCqg#J*EvE=rd z**lgsnmnO#*gFRF(a+aU+bj60xE3EBl6lWg{J=^SqiXs-mZFkyw5|kGnHHmjvPzfe zFY5_p$#nE}nZ%n2u)}`IiOY8xc3$rBQMm`lEvPAlKWD^eeb^I#9U|;4r4a_hjH`O) zV&vC-v{}r@AW`IQ^_mLGk;=Vv*f9J(k3P(`7VS=|12RCqFYTgR2y?~=erOimySDlA z7Y!G$U;uYoo4MT1w&`$&Yn0o%GC!}#e0_HyuI(n%(fus{?MZ#5dsF)4b*{A%8$0g6 z9Qo;b7TL$WQd*XR0&!M*l#EZdn^%5cXuRC!rcT;7%3N?VjU03yP?_4r(=M&r=5iUD zsUGk(v+Qnvi-*PQ7jBhzP-uU-&BI--YSBPfL#&+#XqV!^mbV6KPNgA45701PSWFua zEWUjq_j9LAvan-AsUPb{;}EI&fIG8g&8r`eTOL*4Os?g>c?r@8NAjwpktlnHxd3 z>ljDem9##yw>?Bci8!xGXC_>NVjp?8Y?`ROdzXjN@`6`U`Fw(0pm0g?$pSv*QhQwq zp1KK>I!!#A&j!|ePO@;q644A*qOK;9!6R8Uq+VXLz+6S*7Y1#&wMId)r5QU}{V08= ztz*w;NME1tI9vE;#O{6H|HIJY2IZRHYU@cDsLvlC)gJHa+*b<7{dN+gP->=&!K)CU z8l_dH(p`>~XFDWRs9i{oMMdtd9yIiu#dz*wl{=(^n)zHilrxjilmJQlBDSYb*Fh7Q5$Ne^2F$G95pb02MGa18-qEw}6y0Vyx-!F& z`N>;H{^#F0P2GPZGYQ~vCh-dVy@?1EL2NOiu><~aZA@{MdEB`V;Cji09UG6o#|5PYKE0 zj)#28PKzz}bWxkT71H3L65QbxWI1^i@oAlcTTHmg_IP1hD>Fqf(%`Qpy_S4S8RPIMrH6hAA8`ApUJmRl?o2xcQOwsSZMhxlILW7JgUSGc- ze1UOQmd{?Z>AR#NV5wi|_X8`tqe_=a=W_X*qlCWgt9M!Lao3+?S(kMq+2v6zF+5JI z`!nKD{4IUSz2FW4*;JMV=lv|&gQfQO1$ov5Dxr>o-z6_Ux@iUfwj9V#%3YdJ;B~aY zChw8at9+CjHOV0Eh$VN*jAw5jjcHIv?NNImR2^Pfp__x1{Z{Ge-n^&i-kXB1{XP{De3ty9IJt)W|b|+R3xG39_f)y-)KTXSBq}BWkqb zWi;^(59OQ$&qr}_wY50ur01Txs|t|J7Ap9%+{7|{gvrczn-W5Ws2M9=y){gtvlpCZA`^);;3-UMp$z? z)6b}S?uJJ9hQ*zvpXmF!z)6vrBv)*A)V_upDHDkkxiS3X3$Je}J)bqgr5e>sX;P|0 zg{gb5!B)P1kGp$=Jf9i%cN*U3s#Q9VTYPHGN;x1>L} zQ#HId5f|_Hay{u#F7ZZc!TWLRrQW=ol>rsMT?o>1DTBxu^#`nMd&kXc?U0^_JDF6O zMZqiaynjUqN0y}ao8(XTsmLee%^I>>6-T~2{V)|C17A@5v*n|et&+dl2pncG>X`!D zv^-s1xe(d4Sqdd{z1)LDgUMnY@$$Z3>%?_snNl}xLa`EG9Uj3vuwf|_{Y%n!%#TBq z1*R;PNy3Q}`R=>bx6-iaKUFhLLM;Y&#W^w7-r3H0F|m>kGBq0@lWKzsbiLEzKIE@y&#Ar^&GPGWyGM3x zalhs8W`Y5XO^{M)9!{<2a_)~$OKz%wqoLv$@afN2DiIR&}ZM^7IU;1l?8|JofLK#Oc7fZTj$pE8OY9i|0*`=#Pc|mCJ zU1SXuvA>PPH#XIbLZ6*U?DsQyN$-EDmpXFucq%Fmbc|!hn{#g78YEEEKST=+&rl$; zbu}5|WgyHsHKjI74Et&hi;dskB{kt@+xgJe7Ib-Oo&TqMf5@P@RFSjudRTR5_3Dr8 ze>=Ma^E2r`5C~mRP!M43gdZH(+Afcau7Q&xnPU#d1pvaB2=3uQGY%26HCC)9SK$Nj zAjg=hQYcluFsyp&&0+pyvlMgP%o*!I@DVBEbRw?c2Wk=YEbY@Jnz4)zv+b;(or2>K xeFg@GAW1q&H#b4D&){XjLJMq)1h~>uzf_1BTFrV0@Eju{DZW&bEtfV7{C`~df#?7L literal 107967 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 diff --git a/images/editor-menu.png b/images/editor-menu.png index 36dc6c73a47145f0efca70e0767c7f20d72566f6..189b9eb603825e92dda06e095e04dbce6e0969f4 100644 GIT binary patch literal 72753 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Ġ>vJ* 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%0Aw8a?^$7{@Zf7^H8|z3Mi^=Lo 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

T(`~v~i+n3FrD-RX6d1;_jJ*G79Gs%Q+8Y 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 nJY%-fP%2h13I6{8x1GV3 diff --git a/package-lock.json b/package-lock.json index 043428a..eef288b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,22 +9,23 @@ "version": "0.3.27", "license": "Apache-2.0 WITH LLVM-exception", "dependencies": { + "@bytecodealliance/jco": "1.17.0", "wit-bindgen-wasm": "file:wit-bindgen-wasm/pkg" }, "devDependencies": { "@eslint/css": "0.14.1", "@eslint/js": "10.0.1", - "@eslint/markdown": "7.5.1", - "@types/node": "24.10.13", + "@types/node": "25.3.3", "@types/vscode": "1.99.0", "@typescript-eslint/parser": "8.56.1", + "@vitest/coverage-v8": "^4.0.18", "@vitest/ui": "4.0.18", "@vscode/vsce": "3.7.1", "esbuild": "0.27.3", "esbuild-node-externals": "1.20.1", "eslint": "10.0.2", "eslint-plugin-prettier": "5.5.5", - "globals": "17.3.0", + "globals": "17.4.0", "npm-run-all": "4.1.5", "ovsx": "0.10.9", "prettier": "3.8.1", @@ -240,6 +241,16 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-validator-identifier": { "version": "7.28.5", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", @@ -250,11 +261,231 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/parser": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-1.0.2.tgz", + "integrity": "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@bytecodealliance/componentize-js": { + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@bytecodealliance/componentize-js/-/componentize-js-0.19.3.tgz", + "integrity": "sha512-ju7Y4WeF0B9uMkSPHJgmT6ouEfSwbe9M1uR/YOnYZjBpxJjH9qzxIkJg/kf8NycVDyFJ2/lscmJ1E1uPiDQVRQ==", + "workspaces": [ + "." + ], + "dependencies": { + "@bytecodealliance/jco": "^1.15.1", + "@bytecodealliance/wizer": "^10.0.0", + "es-module-lexer": "^1.6.0", + "oxc-parser": "^0.76.0" + }, + "bin": { + "componentize-js": "src/cli.js" + } + }, + "node_modules/@bytecodealliance/jco": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/@bytecodealliance/jco/-/jco-1.17.0.tgz", + "integrity": "sha512-+8cLL6p++K+KKJiG+xqRDyKcjoWvAB1cwH+diIvuUf8O0AEN+QfzW7GdZJ0zzvfpCfGYX+uO7ylmPFvn+pWxCA==", + "license": "(Apache-2.0 WITH LLVM-exception)", + "dependencies": { + "@bytecodealliance/componentize-js": "^0.19.3", + "@bytecodealliance/preview2-shim": "^0.17.3", + "binaryen": "^123.0.0", + "commander": "^14", + "mkdirp": "^3", + "ora": "^8", + "terser": "^5" + }, + "bin": { + "jco": "src/jco.js" + } + }, + "node_modules/@bytecodealliance/jco/node_modules/commander": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", + "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/@bytecodealliance/jco/node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "license": "MIT", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@bytecodealliance/preview2-shim": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@bytecodealliance/preview2-shim/-/preview2-shim-0.17.8.tgz", + "integrity": "sha512-wS5kg8u0KCML1UeHQPJ1IuOI24x/XLentCzsqPER1+gDNC5Cz2hG4G2blLOZap+3CEGhIhnJ9mmZYj6a2W0Lww==", + "license": "(Apache-2.0 WITH LLVM-exception)" + }, + "node_modules/@bytecodealliance/wizer": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@bytecodealliance/wizer/-/wizer-10.0.0.tgz", + "integrity": "sha512-ziWmovyu1jQl9TsKlfC2bwuUZwxVPFHlX4fOqTzxhgS76jITIo45nzODEwPgU+jjmOr8F3YX2V2wAChC5NKujg==", + "license": "Apache-2.0", + "bin": { + "wizer": "wizer.js" + }, + "engines": { + "node": ">=16" + }, + "optionalDependencies": { + "@bytecodealliance/wizer-darwin-arm64": "10.0.0", + "@bytecodealliance/wizer-darwin-x64": "10.0.0", + "@bytecodealliance/wizer-linux-arm64": "10.0.0", + "@bytecodealliance/wizer-linux-s390x": "10.0.0", + "@bytecodealliance/wizer-linux-x64": "10.0.0", + "@bytecodealliance/wizer-win32-x64": "10.0.0" + } + }, + "node_modules/@bytecodealliance/wizer-darwin-arm64": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@bytecodealliance/wizer-darwin-arm64/-/wizer-darwin-arm64-10.0.0.tgz", + "integrity": "sha512-dhZTWel+xccGTKSJtI9A7oM4yyP20FWflsT+AoqkOqkCY7kCNrj4tmMtZ6GXZFRDkrPY5+EnOh62sfShEibAMA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "bin": { + "wizer-darwin-arm64": "wizer" + } + }, + "node_modules/@bytecodealliance/wizer-darwin-x64": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@bytecodealliance/wizer-darwin-x64/-/wizer-darwin-x64-10.0.0.tgz", + "integrity": "sha512-r/LUIZw6Q3Hf4htd46mD+EBxfwjBkxVIrTM1r+B2pTCddoBYQnKVdVsI4UFyy7NoBxzEg8F8BwmTNoSLmFRjpw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "bin": { + "wizer-darwin-x64": "wizer" + } + }, + "node_modules/@bytecodealliance/wizer-linux-arm64": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@bytecodealliance/wizer-linux-arm64/-/wizer-linux-arm64-10.0.0.tgz", + "integrity": "sha512-pGSfFWXzeTqHm6z1PtVaEn+7Fm3QGC8YnHrzBV4sQDVS3N1NwmuHZAc8kslmlFPNdu61ycEvdOsSgCny8JPQvg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "bin": { + "wizer-linux-arm64": "wizer" + } + }, + "node_modules/@bytecodealliance/wizer-linux-s390x": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@bytecodealliance/wizer-linux-s390x/-/wizer-linux-s390x-10.0.0.tgz", + "integrity": "sha512-O8vHxRTAdb1lUnVXMIMTcp/9q4pq1D4iIKigJCipg2JN15taV9uFAWh0fO88wylXwuSlO7dOE1AwQl54fMKXQg==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "bin": { + "wizer-linux-s390x": "wizer" + } + }, + "node_modules/@bytecodealliance/wizer-linux-x64": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@bytecodealliance/wizer-linux-x64/-/wizer-linux-x64-10.0.0.tgz", + "integrity": "sha512-fJtM1sy43FBMnp+xpapFX6U1YdTBKA/1T4CYfG/qeE8jn0SXk2EuiYoY/EnC2uyNy9hjTrvfdYO5n4MXW0EIdQ==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "bin": { + "wizer-linux-x64": "wizer" + } + }, + "node_modules/@bytecodealliance/wizer-win32-x64": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@bytecodealliance/wizer-win32-x64/-/wizer-win32-x64-10.0.0.tgz", + "integrity": "sha512-55BPLfGT7iT7gH5M69NpTM16QknJZ7OxJ0z73VOEoeGA9CT8QPKMRzFKsPIvLs+W8G28fdudFA94nElrdkp3Kg==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "bin": { + "wizer-win32-x64": "wizer" + } + }, "node_modules/@emnapi/core": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.8.1.tgz", "integrity": "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==", - "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -266,7 +497,6 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz", "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==", - "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -277,7 +507,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", - "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -872,30 +1101,6 @@ } } }, - "node_modules/@eslint/markdown": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/@eslint/markdown/-/markdown-7.5.1.tgz", - "integrity": "sha512-R8uZemG9dKTbru/DQRPblbJyXpObwKzo8rv1KYGGuPUPtjM4LXBYM9q5CIZAComzZupws3tWbDwam5AFpPLyJQ==", - "dev": true, - "license": "MIT", - "workspaces": [ - "examples/*" - ], - "dependencies": { - "@eslint/core": "^0.17.0", - "@eslint/plugin-kit": "^0.4.1", - "github-slugger": "^2.0.0", - "mdast-util-from-markdown": "^2.0.2", - "mdast-util-frontmatter": "^2.0.1", - "mdast-util-gfm": "^3.1.0", - "micromark-extension-frontmatter": "^2.0.0", - "micromark-extension-gfm": "^3.0.0", - "micromark-util-normalize-identifier": "^2.0.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, "node_modules/@eslint/object-schema": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.2.tgz", @@ -982,18 +1187,55 @@ "node": ">=18" } }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.5", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "dev": true, "license": "MIT" }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, "node_modules/@napi-rs/wasm-runtime": { "version": "0.2.12", "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", - "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -1308,112 +1550,361 @@ "node": ">= 8" } }, - "node_modules/@pkgr/core": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", - "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/pkgr" - } - }, - "node_modules/@polka/url": { - "version": "1.0.0-next.29", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", - "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", - "dev": true, - "license": "MIT" - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz", - "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz", - "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==", + "node_modules/@oxc-parser/binding-android-arm64": { + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-android-arm64/-/binding-android-arm64-0.76.0.tgz", + "integrity": "sha512-1XJW/16CDmF5bHE7LAyPPmEEVnxSadDgdJz+xiLqBrmC4lfAeuAfRw3HlOygcPGr+AJsbD4Z5sFJMkwjbSZlQg==", "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ "android" - ] + ], + "engines": { + "node": ">=20.0.0" + } }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz", - "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==", + "node_modules/@oxc-parser/binding-darwin-arm64": { + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-arm64/-/binding-darwin-arm64-0.76.0.tgz", + "integrity": "sha512-yoQwSom8xsB+JdGsPUU0xxmxLKiF2kdlrK7I56WtGKZilixuBf/TmOwNYJYLRWkBoW5l2/pDZOhBm2luwmLiLw==", "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ "darwin" - ] + ], + "engines": { + "node": ">=20.0.0" + } }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz", - "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==", + "node_modules/@oxc-parser/binding-darwin-x64": { + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-x64/-/binding-darwin-x64-0.76.0.tgz", + "integrity": "sha512-uRIopPLvr3pf2Xj7f5LKyCuqzIU6zOS+zEIR8UDYhcgJyZHnvBkfrYnfcztyIcrGdQehrFUi3uplmI09E7RdiQ==", "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ "darwin" - ] + ], + "engines": { + "node": ">=20.0.0" + } }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz", - "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==", + "node_modules/@oxc-parser/binding-freebsd-x64": { + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-freebsd-x64/-/binding-freebsd-x64-0.76.0.tgz", + "integrity": "sha512-a0EOFvnOd2FqmDSvH6uWLROSlU6KV/JDKbsYDA/zRLyKcG6HCsmFnPsp8iV7/xr9WMbNgyJi6R5IMpePQlUq7Q==", "cpu": [ - "arm64" + "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ "freebsd" - ] + ], + "engines": { + "node": ">=20.0.0" + } }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz", - "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==", + "node_modules/@oxc-parser/binding-linux-arm-gnueabihf": { + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.76.0.tgz", + "integrity": "sha512-ikRYDHL3fOdZwfJKmcdqjlLgkeNZ3Ez0qM8wAev5zlHZ+lY/Ig7qG5SCqPlvuTu+nNQ6zrFFaKvvt69EBKXU/g==", "cpu": [ - "x64" + "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.59.0", + "linux" + ], + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@oxc-parser/binding-linux-arm-musleabihf": { + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.76.0.tgz", + "integrity": "sha512-dtRv5J5MRCLR7x39K8ufIIW4svIc7gYFUaI0YFXmmeOBhK/K2t/CkguPnDroKtsmXIPHDRtmJ1JJYzNcgJl6Wg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@oxc-parser/binding-linux-arm64-gnu": { + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.76.0.tgz", + "integrity": "sha512-IE4iiiggFH2snagQxHrY5bv6dDpRMMat+vdlMN/ibonA65eOmRLp8VLTXnDiNrcla/itJ1L9qGABHNKU+SnE8g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@oxc-parser/binding-linux-arm64-musl": { + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.76.0.tgz", + "integrity": "sha512-wi9zQPMDHrBuRuT7Iurfidc9qlZh7cKa5vfYzOWNBCaqJdgxmNOFzvYen02wVUxSWGKhpiPHxrPX0jdRyJ8Npg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@oxc-parser/binding-linux-riscv64-gnu": { + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.76.0.tgz", + "integrity": "sha512-0tqqu1pqPee2lLGY8vtYlX1L415fFn89e0a3yp4q5N9f03j1rRs0R31qesTm3bt/UK8HYjECZ+56FCVPs2MEMQ==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@oxc-parser/binding-linux-s390x-gnu": { + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.76.0.tgz", + "integrity": "sha512-y36Hh1a5TA+oIGtlc8lT7N9vdHXBlhBetQJW0p457KbiVQ7jF7AZkaPWhESkjHWAsTVKD2OjCa9ZqfaqhSI0FQ==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@oxc-parser/binding-linux-x64-gnu": { + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.76.0.tgz", + "integrity": "sha512-7/acaG9htovp3gp/J0kHgbItQTuHctl+rbqPPqZ9DRBYTz8iV8kv3QN8t8Or8i/hOmOjfZp9McDoSU1duoR4/A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@oxc-parser/binding-linux-x64-musl": { + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-musl/-/binding-linux-x64-musl-0.76.0.tgz", + "integrity": "sha512-AxFt0reY6Q2rfudABmMTFGR8tFFr58NlH2rRBQgcj+F+iEwgJ+jMwAPhXd2y1I2zaI8GspuahedUYQinqxWqjA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@oxc-parser/binding-wasm32-wasi": { + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-wasm32-wasi/-/binding-wasm32-wasi-0.76.0.tgz", + "integrity": "sha512-wHdkHdhf6AWBoO8vs5cpoR6zEFY1rB+fXWtq6j/xb9j/lu1evlujRVMkh8IM/M/pOUIrNkna3nzST/mRImiveQ==", + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^0.2.11" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@oxc-parser/binding-win32-arm64-msvc": { + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.76.0.tgz", + "integrity": "sha512-G7ZlEWcb2hNwCK3qalzqJoyB6HaTigQ/GEa7CU8sAJ/WwMdG/NnPqiC9IqpEAEy1ARSo4XMALfKbKNuqbSs5mg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@oxc-parser/binding-win32-x64-msvc": { + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.76.0.tgz", + "integrity": "sha512-0jLzzmnu8/mqNhKBnNS2lFUbPEzRdj5ReiZwHGHpjma0+ullmmwP2AqSEqx3ssHDK9CpcEMdKOK2LsbCfhHKIA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.76.0.tgz", + "integrity": "sha512-CH3THIrSViKal8yV/Wh3FK0pFhp40nzW1MUDCik9fNuid2D/7JJXKJnfFOAvMxInGXDlvmgT6ACAzrl47TqzkQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@pkgr/core": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", + "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/pkgr" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.29", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz", + "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz", + "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz", + "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz", + "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz", + "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz", + "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.59.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz", "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==", "cpu": [ @@ -1960,7 +2451,6 @@ "version": "0.10.1", "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", - "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -1978,16 +2468,6 @@ "assertion-error": "^2.0.1" } }, - "node_modules/@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/ms": "*" - } - }, "node_modules/@types/deep-eql": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", @@ -2016,31 +2496,14 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/mdast": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", - "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/ms": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", - "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/node": { - "version": "24.10.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.13.tgz", - "integrity": "sha512-oH72nZRfDv9lADUBSo104Aq7gPHpQZc4BTx38r9xf9pg5LfP6EzSyH2n7qFmmxRQXh7YlUXODcYsg6PuTDSxGg==", + "version": "25.3.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.3.tgz", + "integrity": "sha512-DpzbrH7wIcBaJibpKo9nnSQL0MTRdnWttGyE5haGwK86xgMOkFLp7vEyfQPGLOJh5wNYiJ3V9PmUMDhV9u8kkQ==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~7.16.0" + "undici-types": "~7.18.0" } }, "node_modules/@types/normalize-package-data": { @@ -2057,13 +2520,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/vscode": { "version": "1.99.0", "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.99.0.tgz", @@ -2316,7 +2772,38 @@ "node": ">=20.0.0" } }, - "node_modules/@vitest/expect": { + "node_modules/@vitest/coverage-v8": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-4.0.18.tgz", + "integrity": "sha512-7i+N2i0+ME+2JFZhfuz7Tg/FqKtilHjGyGvoHYQ6iLV0zahbsJ9sljC9OcFcPDbhYKCet+sG8SsVqlyGvPflZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@bcoe/v8-coverage": "^1.0.2", + "@vitest/utils": "4.0.18", + "ast-v8-to-istanbul": "^0.3.10", + "istanbul-lib-coverage": "^3.2.2", + "istanbul-lib-report": "^3.0.1", + "istanbul-reports": "^3.2.0", + "magicast": "^0.5.1", + "obug": "^2.1.1", + "std-env": "^3.10.0", + "tinyrainbow": "^3.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@vitest/browser": "4.0.18", + "vitest": "4.0.18" + }, + "peerDependenciesMeta": { + "@vitest/browser": { + "optional": true + } + } + }, + "node_modules/@vitest/expect": { "version": "4.0.18", "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.0.18.tgz", "integrity": "sha512-8sCWUyckXXYvx4opfzVY03EOiYVxyNrHS5QxX3DAIi5dpJAAkyJezHCP77VMX4HKA2LDT/Jpfo8i2r5BE3GnQQ==", @@ -2676,7 +3163,6 @@ "version": "8.16.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", - "dev": true, "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -2742,7 +3228,6 @@ "version": "6.2.2", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -2823,6 +3308,25 @@ "node": ">=12" } }, + "node_modules/ast-v8-to-istanbul": { + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-0.3.12.tgz", + "integrity": "sha512-BRRC8VRZY2R4Z4lFIL35MwNXmwVqBityvOIwETtsCSwvjl0IdgFsy9NhdaA6j74nUdtJJlIypeRhpDam19Wq3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.31", + "estree-walker": "^3.0.3", + "js-tokens": "^10.0.0" + } + }, + "node_modules/ast-v8-to-istanbul/node_modules/js-tokens": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-10.0.0.tgz", + "integrity": "sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==", + "dev": true, + "license": "MIT" + }, "node_modules/astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", @@ -3005,6 +3509,23 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/binaryen": { + "version": "123.0.0", + "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-123.0.0.tgz", + "integrity": "sha512-/hls/a309aZCc0itqP6uhoR+5DsKSlJVfB8Opd2BY9Ndghs84IScTunlyidyF4r2Xe3lQttnfBNIDjaNpj6mTw==", + "license": "Apache-2.0", + "bin": { + "wasm-as": "bin/wasm-as", + "wasm-ctor-eval": "bin/wasm-ctor-eval", + "wasm-dis": "bin/wasm-dis", + "wasm-merge": "bin/wasm-merge", + "wasm-metadce": "bin/wasm-metadce", + "wasm-opt": "bin/wasm-opt", + "wasm-reduce": "bin/wasm-reduce", + "wasm-shell": "bin/wasm-shell", + "wasm2js": "bin/wasm2js" + } + }, "node_modules/binaryextensions": { "version": "6.11.0", "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-6.11.0.tgz", @@ -3124,6 +3645,12 @@ "dev": true, "license": "BSD-3-Clause" }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, "node_modules/bundle-name": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", @@ -3190,17 +3717,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ccount": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/chai": { "version": "6.2.2", "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", @@ -3228,17 +3744,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/cheerio": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.2.0.tgz", @@ -3298,6 +3803,33 @@ "dev": true, "license": "MIT" }, + "node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "license": "MIT", + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/cockatiel": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/cockatiel/-/cockatiel-3.2.1.tgz", @@ -3475,20 +4007,6 @@ } } }, - "node_modules/decode-named-character-reference": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz", - "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "character-entities": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/decompress-response": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", @@ -3613,16 +4131,6 @@ "node": ">=0.4.0" } }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/detect-libc": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", @@ -3634,20 +4142,6 @@ "node": ">=8" } }, - "node_modules/devlop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", - "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", - "dev": true, - "license": "MIT", - "dependencies": { - "dequal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/diff": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", @@ -3920,7 +4414,6 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", - "dev": true, "license": "MIT" }, "node_modules/es-object-atoms": { @@ -4391,20 +4884,6 @@ "reusify": "^1.0.4" } }, - "node_modules/fault": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", - "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "format": "^0.2.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -4557,15 +5036,6 @@ "node": ">= 6" } }, - "node_modules/format": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", - "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", @@ -4688,6 +5158,18 @@ "node": ">= 0.4" } }, + "node_modules/get-east-asian-width": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.5.0.tgz", + "integrity": "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/get-intrinsic": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", @@ -4753,13 +5235,6 @@ "license": "MIT", "optional": true }, - "node_modules/github-slugger": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", - "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", - "dev": true, - "license": "ISC" - }, "node_modules/glob": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz", @@ -4799,9 +5274,9 @@ } }, "node_modules/globals": { - "version": "17.3.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-17.3.0.tgz", - "integrity": "sha512-yMqGUQVVCkD4tqjOJf3TnrvaaHDMYp4VlUSObbkIiuCPe/ofdMBFIAcBbCSRFWOnos6qRiTVStDwqPLUclaxIw==", + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.4.0.tgz", + "integrity": "sha512-hjrNztw/VajQwOLsMNT1cbJiH2muO3OROCHnbehc8eY5JyD2gqz4AcMHPqgaOR59DjgUjYAYLeH699g/eWi2jw==", "dev": true, "license": "MIT", "engines": { @@ -4999,6 +5474,13 @@ "node": ">=10" } }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "license": "MIT" + }, "node_modules/htmlparser2": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz", @@ -5429,6 +5911,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-it-type": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/is-it-type/-/is-it-type-5.1.3.tgz", @@ -5594,6 +6088,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-weakmap": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", @@ -5670,6 +6176,45 @@ "dev": true, "license": "ISC" }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/istextorbinary": { "version": "9.5.0", "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-9.5.0.tgz", @@ -5983,101 +6528,38 @@ "dev": true, "license": "MIT" }, - "node_modules/longest-streak": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", - "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/lru-cache": { + "node_modules/log-symbols": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "license": "ISC", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz", + "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==", + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "chalk": "^5.3.0", + "is-unicode-supported": "^1.3.0" }, "engines": { - "node": ">=10" - } - }, - "node_modules/magic-string": { - "version": "0.30.21", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", - "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5" - } - }, - "node_modules/markdown-it": { - "version": "14.1.1", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.1.tgz", - "integrity": "sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1", - "entities": "^4.4.0", - "linkify-it": "^5.0.0", - "mdurl": "^2.0.0", - "punycode.js": "^2.3.1", - "uc.micro": "^2.1.0" + "node": ">=18" }, - "bin": { - "markdown-it": "bin/markdown-it.mjs" - } - }, - "node_modules/markdown-table": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", - "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", - "dev": true, - "license": "MIT", "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "dev": true, + "node_modules/log-symbols/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", "license": "MIT", "engines": { - "node": ">= 0.4" - } - }, - "node_modules/mdast-util-find-and-replace": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", - "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "escape-string-regexp": "^5.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" + "node": "^12.17.0 || ^14.13 || >=16.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true, + "node_modules/log-symbols/node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", "license": "MIT", "engines": { "node": ">=12" @@ -6086,862 +6568,118 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mdast-util-from-markdown": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz", - "integrity": "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==", + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark": "^4.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "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" + "yallist": "^4.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=10" } }, - "node_modules/mdast-util-frontmatter": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz", - "integrity": "sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "escape-string-regexp": "^5.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "micromark-extension-frontmatter": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-frontmatter/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mdast-util-gfm": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", - "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-gfm-autolink-literal": "^2.0.0", - "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.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-autolink-literal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", - "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "ccount": "^2.0.0", - "devlop": "^1.0.0", - "mdast-util-find-and-replace": "^3.0.0", - "micromark-util-character": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-footnote": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", - "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.1.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-strikethrough": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", - "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", - "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "markdown-table": "^3.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-task-list-item": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", - "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-phrasing": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", - "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-markdown": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", - "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "longest-streak": "^3.0.0", - "mdast-util-phrasing": "^4.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-decode-string": "^2.0.0", - "unist-util-visit": "^5.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", - "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdn-data": { - "version": "2.23.0", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.23.0.tgz", - "integrity": "sha512-786vq1+4079JSeu2XdcDjrhi/Ry7BWtjDl9WtGPWLiIHb2T66GvIVflZTBoSNZ5JqTtJGYEVMuFA/lbQlMOyDQ==", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/mdurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", - "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", - "dev": true, - "license": "MIT" - }, - "node_modules/memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", - "dev": true, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromark": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", - "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "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.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-core-commonmark": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", - "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.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.0.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.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-frontmatter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz", - "integrity": "sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==", - "dev": true, - "license": "MIT", - "dependencies": { - "fault": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", - "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "micromark-extension-gfm-autolink-literal": "^2.0.0", - "micromark-extension-gfm-footnote": "^2.0.0", - "micromark-extension-gfm-strikethrough": "^2.0.0", - "micromark-extension-gfm-table": "^2.0.0", - "micromark-extension-gfm-tagfilter": "^2.0.0", - "micromark-extension-gfm-task-list-item": "^2.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-autolink-literal": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", - "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", - "dev": true, - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-footnote": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", - "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", - "dev": true, - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-strikethrough": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", - "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", - "dev": true, - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-table": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", - "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", - "dev": true, - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-tagfilter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", - "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-task-list-item": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", - "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", - "dev": true, - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-factory-destination": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", - "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-label": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", - "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-title": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", - "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-whitespace": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", - "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-chunked": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", - "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-classify-character": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", - "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-combine-extensions": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", - "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-chunked": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-numeric-character-reference": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", - "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-string": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", - "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-encode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", - "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-html-tag-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", - "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-normalize-identifier": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", - "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], "license": "MIT", "dependencies": { - "micromark-util-symbol": "^2.0.0" + "@jridgewell/sourcemap-codec": "^1.5.5" } }, - "node_modules/micromark-util-resolve-all": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", - "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "node_modules/magicast": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.2.tgz", + "integrity": "sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], "license": "MIT", "dependencies": { - "micromark-util-types": "^2.0.0" + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "source-map-js": "^1.2.1" } }, - "node_modules/micromark-util-sanitize-uri": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", - "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], "license": "MIT", "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-symbol": "^2.0.0" + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/micromark-util-subtokenize": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", - "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "node_modules/markdown-it": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.1.tgz", + "integrity": "sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], "license": "MIT", "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" } }, - "node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">= 0.4" + } }, - "node_modules/micromark-util-types": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", - "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "node_modules/mdn-data": { + "version": "2.23.0", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.23.0.tgz", + "integrity": "sha512-786vq1+4079JSeu2XdcDjrhi/Ry7BWtjDl9WtGPWLiIHb2T66GvIVflZTBoSNZ5JqTtJGYEVMuFA/lbQlMOyDQ==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], "license": "MIT" }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", @@ -6992,6 +6730,18 @@ "node": ">= 0.6" } }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/mimic-response": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", @@ -7508,6 +7258,21 @@ "wrappy": "1" } }, + "node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/open": { "version": "10.2.0", "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", @@ -7545,6 +7310,64 @@ "node": ">= 0.8.0" } }, + "node_modules/ora": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-8.2.0.tgz", + "integrity": "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==", + "license": "MIT", + "dependencies": { + "chalk": "^5.3.0", + "cli-cursor": "^5.0.0", + "cli-spinners": "^2.9.2", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^2.0.0", + "log-symbols": "^6.0.0", + "stdin-discarder": "^0.2.2", + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "license": "MIT" + }, + "node_modules/ora/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ovsx": { "version": "0.10.9", "resolved": "https://registry.npmjs.org/ovsx/-/ovsx-0.10.9.tgz", @@ -7596,6 +7419,38 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/oxc-parser": { + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/oxc-parser/-/oxc-parser-0.76.0.tgz", + "integrity": "sha512-l98B2e9evuhES7zN99rb1QGhbzx25829TJFaKi2j0ib3/K/G5z1FdGYz6HZkrU3U8jdH7v2FC8mX1j2l9JrOUg==", + "license": "MIT", + "dependencies": { + "@oxc-project/types": "^0.76.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/Boshen" + }, + "optionalDependencies": { + "@oxc-parser/binding-android-arm64": "0.76.0", + "@oxc-parser/binding-darwin-arm64": "0.76.0", + "@oxc-parser/binding-darwin-x64": "0.76.0", + "@oxc-parser/binding-freebsd-x64": "0.76.0", + "@oxc-parser/binding-linux-arm-gnueabihf": "0.76.0", + "@oxc-parser/binding-linux-arm-musleabihf": "0.76.0", + "@oxc-parser/binding-linux-arm64-gnu": "0.76.0", + "@oxc-parser/binding-linux-arm64-musl": "0.76.0", + "@oxc-parser/binding-linux-riscv64-gnu": "0.76.0", + "@oxc-parser/binding-linux-s390x-gnu": "0.76.0", + "@oxc-parser/binding-linux-x64-gnu": "0.76.0", + "@oxc-parser/binding-linux-x64-musl": "0.76.0", + "@oxc-parser/binding-wasm32-wasi": "0.76.0", + "@oxc-parser/binding-win32-arm64-msvc": "0.76.0", + "@oxc-parser/binding-win32-x64-msvc": "0.76.0" + } + }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -8204,6 +8059,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "license": "MIT", + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/reusify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", @@ -8721,7 +8592,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, "license": "ISC", "engines": { "node": ">=14" @@ -8835,6 +8705,15 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -8845,6 +8724,16 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "node_modules/spdx-correct": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", @@ -8895,6 +8784,18 @@ "dev": true, "license": "MIT" }, + "node_modules/stdin-discarder": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz", + "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/stop-iteration-iterator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", @@ -9040,7 +8941,6 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" @@ -9270,6 +9170,30 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/terser": { + "version": "5.46.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.0.tgz", + "integrity": "sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==", + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.15.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -9418,7 +9342,7 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, + "devOptional": true, "license": "0BSD" }, "node_modules/tunnel": { @@ -9643,9 +9567,9 @@ } }, "node_modules/undici-types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", - "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", "dev": true, "license": "MIT" }, @@ -9662,65 +9586,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/unist-util-is": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", - "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz", - "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit-parents": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", - "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/universalify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", @@ -10439,17 +10304,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/zwitch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "wit-bindgen-wasm/pkg": { "name": "wit-bindgen-wasm", "version": "0.1.0", diff --git a/package.json b/package.json index 4c10777..a9bdee2 100644 --- a/package.json +++ b/package.json @@ -23,8 +23,9 @@ "scripts": { "clean": "rimraf out dist types && rimraf --glob \"*.vsix\"", "clean-wasm": "rimraf wit-bindgen-wasm/pkg wit-bindgen-wasm/target", + "clean-samples": "rimraf samples/target samples/tmp/*", "clean-deps": "rimraf node_modules package-lock.json", - "clean-all": "npm run clean && npm run clean-wasm", + "clean-all": "npm run clean && npm run clean-wasm && npm run clean-samples", "clean-full": "npm run clean-all && npm run clean-deps", "setup-wasm": "./scripts/setup-wasm.sh", "install-extension": "npm run package && code --install-extension wit-idl.vsix", @@ -33,6 +34,7 @@ "test-unit": "vitest run", "test-unit-watch": "vitest", "test-unit-ui": "vitest --ui", + "test-unit-coverage": "vitest run --coverage", "test-build-resources": "vitest run tests/build-resources.test.ts", "test-navigator-polyfill": "vitest run tests/navigator-polyfill.test.ts", "gen-types": "tsc --project tsconfig.json --emitDeclarationOnly", @@ -42,14 +44,16 @@ "build-extension-prod": "node esbuild.mts -- --production", "build-extension": "node esbuild.mts", "build-extension-watch": "node esbuild.mts --watch", + "build-samples": "cd samples && ./build.sh", "build": "run-s build-wasm build-extension", + "build-with-samples": "run-s build build-samples", "vscode:prepublish": "run-s build-wasm-prod build-extension-prod", "package": "npx -y @vscode/vsce package -o wit-idl.vsix", "fmt": "prettier . --write", "fmt-check": "prettier --check .", "lint": "eslint src --ext ts ./*.m?s", "lint-fix": "eslint src --ext ts ./*.m?s --fix", - "test": "run-s lint fmt-check build package test-grammar test-unit", + "test": "run-s lint fmt-check build package gen-types test-grammar test-unit", "test-wasm": "cd wit-bindgen-wasm && cargo test", "check-wasm": "cd wit-bindgen-wasm && cargo check", "verify-wasm": "node -e \"console.log('Verifying WASM build...'); const fs = require('fs'); const path = 'wit-bindgen-wasm/pkg/wit_bindgen_wasm_bg.wasm'; if (fs.existsSync(path)) { console.log('✅ WASM file exists:', path); const size = Math.round(fs.statSync(path).size / 1024); console.log('📏 Size:', size, 'KB'); try { const fd = fs.openSync(path, 'r'); const header = Buffer.alloc(8); fs.readSync(fd, header, 0, 8, 0); fs.closeSync(fd); const magicOk = header[0] === 0x00 && header[1] === 0x61 && header[2] === 0x73 && header[3] === 0x6D; if (!magicOk) { console.warn('⚠️ Not a WebAssembly binary (bad magic).'); process.exit(1); } const version = header.readUInt32LE(4); if (version === 1) { console.log('🧩 Type: Core WebAssembly module (vanilla wasm)'); } else if (version === 0x0A) { console.log('🧩 Type: WebAssembly component'); } else { console.log('🧩 Type: Unknown/other (version ' + version + ')'); } } catch (e) { console.error('❌ Error reading header:', e.message); process.exit(1); } } else { console.error('❌ WASM file not found:', path); process.exit(1); }\"", @@ -65,22 +69,23 @@ "update-major": "run-s update-npm-major update-cargo-major" }, "dependencies": { + "@bytecodealliance/jco": "1.17.0", "wit-bindgen-wasm": "file:wit-bindgen-wasm/pkg" }, "devDependencies": { "@eslint/css": "0.14.1", "@eslint/js": "10.0.1", - "@eslint/markdown": "7.5.1", - "@types/node": "24.10.13", + "@types/node": "25.3.3", "@types/vscode": "1.99.0", "@typescript-eslint/parser": "8.56.1", + "@vitest/coverage-v8": "4.0.18", "@vitest/ui": "4.0.18", "@vscode/vsce": "3.7.1", "esbuild": "0.27.3", "esbuild-node-externals": "1.20.1", "eslint": "10.0.2", "eslint-plugin-prettier": "5.5.5", - "globals": "17.3.0", + "globals": "17.4.0", "npm-run-all": "4.1.5", "ovsx": "0.10.9", "prettier": "3.8.1", @@ -147,45 +152,50 @@ "category": "WIT" }, { - "command": "wit-idl.generateBindings", - "title": "Generate Language Bindings", - "category": "WIT" - }, - { - "command": "wit-idl.generateBindingsRust", + "command": "wit-idl.generateGuestBindingsRust", "title": "Generate Rust Bindings", "category": "WIT" }, { - "command": "wit-idl.generateBindingsC", + "command": "wit-idl.generateGuestBindingsC", "title": "Generate C Bindings", "category": "WIT" }, { - "command": "wit-idl.generateBindingsCpp", + "command": "wit-idl.generateGuestBindingsCpp", "title": "Generate C++ Bindings", "category": "WIT" }, { - "command": "wit-idl.generateBindingsCSharp", + "command": "wit-idl.generateGuestBindingsCSharp", "title": "Generate C# Bindings", "category": "WIT" }, { - "command": "wit-idl.generateBindingsGo", + "command": "wit-idl.generateGuestBindingsGo", "title": "Generate Go Bindings", "category": "WIT" }, { - "command": "wit-idl.generateBindingsMoonBit", + "command": "wit-idl.generateGuestBindingsMoonBit", "title": "Generate MoonBit Bindings", "category": "WIT" }, { - "command": "wit-idl.generateBindingsMarkdown", + "command": "wit-idl.generateGuestBindingsJavaScript", + "title": "Generate JavaScript Bindings", + "category": "WIT" + }, + { + "command": "wit-idl.generateDocMarkdown", "title": "Generate Markdown Documentation", "category": "WIT" }, + { + "command": "wit-idl.generateHostBindingsJavaScript", + "title": "Generate JavaScript Bindings", + "category": "WIT" + }, { "command": "wit-idl.extractWit", "title": "Extract WIT", @@ -205,7 +215,15 @@ "submenus": [ { "id": "wit-idl.generateBindings.submenu", - "label": "Generate Bindings" + "label": "Generate Guest Bindings" + }, + { + "id": "wit-idl.generateDocs.submenu", + "label": "Generate Documentation" + }, + { + "id": "wit-idl.generateHostBindings.submenu", + "label": "Generate Host Bindings" } ], "menus": { @@ -234,6 +252,16 @@ "submenu": "wit-idl.generateBindings.submenu", "when": "resourceExtname == .wit || witIdl.isWasmComponent", "group": "4_witIdl@14" + }, + { + "submenu": "wit-idl.generateHostBindings.submenu", + "when": "resourceExtname == .wit || witIdl.isWasmComponent", + "group": "4_witIdl@15" + }, + { + "submenu": "wit-idl.generateDocs.submenu", + "when": "resourceExtname == .wit || witIdl.isWasmComponent", + "group": "4_witIdl@16" } ], "explorer/context": [ @@ -261,29 +289,49 @@ "submenu": "wit-idl.generateBindings.submenu", "when": "resourceExtname == .wit || witIdl.isWasmComponent", "group": "4_witIdl@14" + }, + { + "submenu": "wit-idl.generateHostBindings.submenu", + "when": "resourceExtname == .wit || witIdl.isWasmComponent", + "group": "4_witIdl@15" + }, + { + "submenu": "wit-idl.generateDocs.submenu", + "when": "resourceExtname == .wit || witIdl.isWasmComponent", + "group": "4_witIdl@16" } ], "wit-idl.generateBindings.submenu": [ { - "command": "wit-idl.generateBindingsRust" + "command": "wit-idl.generateGuestBindingsRust" }, { - "command": "wit-idl.generateBindingsC" + "command": "wit-idl.generateGuestBindingsC" }, { - "command": "wit-idl.generateBindingsCpp" + "command": "wit-idl.generateGuestBindingsCpp" }, { - "command": "wit-idl.generateBindingsCSharp" + "command": "wit-idl.generateGuestBindingsCSharp" }, { - "command": "wit-idl.generateBindingsGo" + "command": "wit-idl.generateGuestBindingsGo" }, { - "command": "wit-idl.generateBindingsMoonBit" + "command": "wit-idl.generateGuestBindingsMoonBit" }, { - "command": "wit-idl.generateBindingsMarkdown" + "command": "wit-idl.generateGuestBindingsJavaScript" + } + ], + "wit-idl.generateDocs.submenu": [ + { + "command": "wit-idl.generateDocMarkdown" + } + ], + "wit-idl.generateHostBindings.submenu": [ + { + "command": "wit-idl.generateHostBindingsJavaScript" } ], "commandPalette": [ @@ -298,31 +346,39 @@ "command": "wit-idl.showVersion" }, { - "command": "wit-idl.generateBindingsRust", + "command": "wit-idl.generateGuestBindingsRust", + "when": "editorLangId == wit || witIdl.isWasmComponent" + }, + { + "command": "wit-idl.generateGuestBindingsC", + "when": "editorLangId == wit || witIdl.isWasmComponent" + }, + { + "command": "wit-idl.generateGuestBindingsCpp", "when": "editorLangId == wit || witIdl.isWasmComponent" }, { - "command": "wit-idl.generateBindingsC", + "command": "wit-idl.generateGuestBindingsCSharp", "when": "editorLangId == wit || witIdl.isWasmComponent" }, { - "command": "wit-idl.generateBindingsCpp", + "command": "wit-idl.generateGuestBindingsGo", "when": "editorLangId == wit || witIdl.isWasmComponent" }, { - "command": "wit-idl.generateBindingsCSharp", + "command": "wit-idl.generateGuestBindingsMoonBit", "when": "editorLangId == wit || witIdl.isWasmComponent" }, { - "command": "wit-idl.generateBindingsGo", + "command": "wit-idl.generateGuestBindingsJavaScript", "when": "editorLangId == wit || witIdl.isWasmComponent" }, { - "command": "wit-idl.generateBindingsMoonBit", + "command": "wit-idl.generateDocMarkdown", "when": "editorLangId == wit || witIdl.isWasmComponent" }, { - "command": "wit-idl.generateBindingsMarkdown", + "command": "wit-idl.generateHostBindingsJavaScript", "when": "editorLangId == wit || witIdl.isWasmComponent" }, { diff --git a/samples/.gitignore b/samples/.gitignore new file mode 100644 index 0000000..7930e61 --- /dev/null +++ b/samples/.gitignore @@ -0,0 +1,2 @@ +/target/ +/tmp/ \ No newline at end of file diff --git a/samples/Cargo.lock b/samples/Cargo.lock new file mode 100644 index 0000000..eb9deb5 --- /dev/null +++ b/samples/Cargo.lock @@ -0,0 +1,819 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "adder" +version = "0.1.0" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "adler2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" + +[[package]] +name = "anyhow" +version = "1.0.102" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" + +[[package]] +name = "auditable-serde" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c7bf8143dfc3c0258df908843e169b5cc5fcf76c7718bd66135ef4a9cd558c5" +dependencies = [ + "semver", + "serde", + "serde_json", + "topological-sort", +] + +[[package]] +name = "bitflags" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "counter" +version = "0.1.0" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "crc32fast" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "flate2" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + +[[package]] +name = "form_urlencoded" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" + +[[package]] +name = "futures-executor" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" + +[[package]] +name = "futures-macro" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-sink" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" + +[[package]] +name = "futures-task" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" + +[[package]] +name = "futures-util" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "slab", +] + +[[package]] +name = "greeter" +version = "0.1.0" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "hashbrown" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +dependencies = [ + "foldhash", +] + +[[package]] +name = "hashbrown" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "icu_collections" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" +dependencies = [ + "displaydoc", + "potential_utf", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" +dependencies = [ + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" + +[[package]] +name = "icu_properties" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" +dependencies = [ + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" + +[[package]] +name = "icu_provider" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" +dependencies = [ + "displaydoc", + "icu_locale_core", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "id-arena" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" + +[[package]] +name = "idna" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "indexmap" +version = "2.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" +dependencies = [ + "equivalent", + "hashbrown 0.16.1", + "serde", + "serde_core", +] + +[[package]] +name = "itoa" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" + +[[package]] +name = "leb128fmt" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" + +[[package]] +name = "litemap" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" + +[[package]] +name = "log" +version = "0.4.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" + +[[package]] +name = "memchr" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" + +[[package]] +name = "miniz_oxide" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +dependencies = [ + "adler2", + "simd-adler32", +] + +[[package]] +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "pin-project-lite" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" + +[[package]] +name = "potential_utf" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" +dependencies = [ + "zerovec", +] + +[[package]] +name = "prettyplease" +version = "0.2.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" +dependencies = [ + "proc-macro2", + "syn", +] + +[[package]] +name = "proc-macro2" +version = "1.0.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "semver" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" +dependencies = [ + "serde", + "serde_core", +] + +[[package]] +name = "serde" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.149" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "simd-adler32" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" + +[[package]] +name = "slab" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" + +[[package]] +name = "smallvec" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" + +[[package]] +name = "spdx" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3e17e880bafaeb362a7b751ec46bdc5b61445a188f80e0606e68167cd540fa3" +dependencies = [ + "smallvec", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + +[[package]] +name = "syn" +version = "2.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tinystr" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "topological-sort" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea68304e134ecd095ac6c3574494fc62b909f416c4fca77e440530221e549d3d" + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + +[[package]] +name = "url" +version = "2.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "wasm-encoder" +version = "0.227.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80bb72f02e7fbf07183443b27b0f3d4144abf8c114189f2e088ed95b696a7822" +dependencies = [ + "leb128fmt", + "wasmparser", +] + +[[package]] +name = "wasm-metadata" +version = "0.227.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce1ef0faabbbba6674e97a56bee857ccddf942785a336c8b47b42373c922a91d" +dependencies = [ + "anyhow", + "auditable-serde", + "flate2", + "indexmap", + "serde", + "serde_derive", + "serde_json", + "spdx", + "url", + "wasm-encoder", + "wasmparser", +] + +[[package]] +name = "wasmparser" +version = "0.227.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f51cad774fb3c9461ab9bccc9c62dfb7388397b5deda31bf40e8108ccd678b2" +dependencies = [ + "bitflags", + "hashbrown 0.15.5", + "indexmap", + "semver", +] + +[[package]] +name = "wit-bindgen" +version = "0.41.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10fb6648689b3929d56bbc7eb1acf70c9a42a29eb5358c67c10f54dbd5d695de" +dependencies = [ + "wit-bindgen-rt", + "wit-bindgen-rust-macro", +] + +[[package]] +name = "wit-bindgen-core" +version = "0.41.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92fa781d4f2ff6d3f27f3cc9b74a73327b31ca0dc4a3ef25a0ce2983e0e5af9b" +dependencies = [ + "anyhow", + "heck", + "wit-parser", +] + +[[package]] +name = "wit-bindgen-rt" +version = "0.41.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4db52a11d4dfb0a59f194c064055794ee6564eb1ced88c25da2cf76e50c5621" +dependencies = [ + "bitflags", + "futures", + "once_cell", +] + +[[package]] +name = "wit-bindgen-rust" +version = "0.41.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d0809dc5ba19e2e98661bf32fc0addc5a3ca5bf3a6a7083aa6ba484085ff3ce" +dependencies = [ + "anyhow", + "heck", + "indexmap", + "prettyplease", + "syn", + "wasm-metadata", + "wit-bindgen-core", + "wit-component", +] + +[[package]] +name = "wit-bindgen-rust-macro" +version = "0.41.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad19eec017904e04c60719592a803ee5da76cb51c81e3f6fbf9457f59db49799" +dependencies = [ + "anyhow", + "prettyplease", + "proc-macro2", + "quote", + "syn", + "wit-bindgen-core", + "wit-bindgen-rust", +] + +[[package]] +name = "wit-component" +version = "0.227.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "635c3adc595422cbf2341a17fb73a319669cc8d33deed3a48368a841df86b676" +dependencies = [ + "anyhow", + "bitflags", + "indexmap", + "log", + "serde", + "serde_derive", + "serde_json", + "wasm-encoder", + "wasm-metadata", + "wasmparser", + "wit-parser", +] + +[[package]] +name = "wit-parser" +version = "0.227.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddf445ed5157046e4baf56f9138c124a0824d4d1657e7204d71886ad8ce2fc11" +dependencies = [ + "anyhow", + "id-arena", + "indexmap", + "log", + "semver", + "serde", + "serde_derive", + "serde_json", + "unicode-xid", + "wasmparser", +] + +[[package]] +name = "writeable" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" + +[[package]] +name = "yoke" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" +dependencies = [ + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zerofrom" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zerotrie" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zmij" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" diff --git a/samples/Cargo.toml b/samples/Cargo.toml new file mode 100644 index 0000000..8f5299e --- /dev/null +++ b/samples/Cargo.toml @@ -0,0 +1,7 @@ +[workspace] +members = [ + "adder", + "greeter", + "counter", +] +resolver = "2" diff --git a/samples/README.md b/samples/README.md new file mode 100644 index 0000000..f903af0 --- /dev/null +++ b/samples/README.md @@ -0,0 +1,121 @@ +# WIT Component Samples + +Sample [WebAssembly Interface Types (WIT)](https://component-model.bytecodealliance.org/design/wit.html) projects that compile to WebAssembly components. These can be used to test the **vscode-wit** extension features such as WIT validation, binding generation, and WIT extraction from `.wasm` components. + +## Samples + +| Sample | Description | WIT Features | +|--------|-------------|--------------| +| [adder](adder/) | Adds two numbers | functions, `u32` type | +| [greeter](greeter/) | Greets a person by name, with multi-language support | strings, enums, multiple interfaces | +| [counter](counter/) | Stateful counter | resources, constructors, methods | + +## Prerequisites + +```bash +# Rust toolchain with the WASI P2 target +rustup target add wasm32-wasip2 + +# (Optional) wasm-tools for inspecting built components +cargo install wasm-tools +``` + +## Building + +Build all samples at once: + +```bash +# Debug build +./build.sh + +# Release build (smaller binaries) +./build.sh --release +``` + +Or build individually: + +```bash +cd adder +cargo build --target wasm32-wasip2 +``` + +Built `.wasm` component files are output to `target/wasm32-wasip2/{debug,release}/`. + +## Inspecting Components + +After building, you can extract the WIT interface from any component: + +```bash +wasm-tools component wit target/wasm32-wasip2/release/adder.wasm +``` + +Or use the **vscode-wit** extension: open a `.wasm` file and run the **Extract WIT** command. + +## Sample Details + +### adder + +A minimal component based on the [official Component Model tutorial](https://component-model.bytecodealliance.org/language-support/building-a-simple-component/rust.html). Exports an `add` interface with a single function. + +```wit +package docs:adder@0.1.0; + +interface add { + add: func(x: u32, y: u32) -> u32; +} + +world adder { + export add; +} +``` + +### greeter + +Demonstrates string handling and enums. Exports two interfaces: a simple `greet` and a `multi-greet` that supports multiple languages. + +```wit +package docs:greeter@0.1.0; + +interface greet { + greet: func(name: string) -> string; +} + +interface multi-greet { + enum language { english, spanish, french, german, japanese } + greet-in: func(name: string, lang: language) -> string; +} + +world greeter { + export greet; + export multi-greet; +} +``` + +### counter + +Demonstrates WIT resources — object-like types with constructors and methods. + +```wit +package docs:counter@0.1.0; + +interface types { + resource counter { + constructor(initial: s32); + increment-by: func(amount: s32) -> s32; + decrement-by: func(amount: s32) -> s32; + get-value: func() -> s32; + reset: func() -> s32; + } +} + +world counter { + export types; +} +``` + +## References + +- [Component Model Book](https://component-model.bytecodealliance.org/) +- [WIT specification](https://component-model.bytecodealliance.org/design/wit.html) +- [wit-bindgen](https://github.com/bytecodealliance/wit-bindgen) +- [wasm-tools](https://github.com/bytecodealliance/wasm-tools) diff --git a/samples/adder/Cargo.toml b/samples/adder/Cargo.toml new file mode 100644 index 0000000..b1194e8 --- /dev/null +++ b/samples/adder/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "adder" +version = "0.1.0" +edition = "2021" + +[lib] +crate-type = ["cdylib"] + +[dependencies] +wit-bindgen = "0.41" diff --git a/samples/adder/src/lib.rs b/samples/adder/src/lib.rs new file mode 100644 index 0000000..e641219 --- /dev/null +++ b/samples/adder/src/lib.rs @@ -0,0 +1,19 @@ +mod bindings { + //! Generated code for implementing the `adder` world in `wit/world.wit`. + wit_bindgen::generate!({ + path: "wit/world.wit", + }); + + use super::AdderComponent; + export!(AdderComponent); +} + +/// Component that implements the `docs:adder/add` interface. +struct AdderComponent; + +impl bindings::exports::docs::adder::add::Guest for AdderComponent { + /// Add two unsigned 32-bit integers. + fn add(x: u32, y: u32) -> u32 { + x + y + } +} diff --git a/samples/adder/wit/world.wit b/samples/adder/wit/world.wit new file mode 100644 index 0000000..d36bd9d --- /dev/null +++ b/samples/adder/wit/world.wit @@ -0,0 +1,10 @@ +package docs:adder@0.1.0; + +interface add { + /// Add two unsigned 32-bit integers. + add: func(x: u32, y: u32) -> u32; +} + +world adder { + export add; +} diff --git a/samples/build.sh b/samples/build.sh new file mode 100755 index 0000000..5c54089 --- /dev/null +++ b/samples/build.sh @@ -0,0 +1,54 @@ +#!/bin/bash +set -euo pipefail + +# Build all sample WebAssembly components +# Usage: ./build.sh [--release] +# +# Prerequisites: +# rustup target add wasm32-wasip2 +# cargo install wasm-tools (optional, for inspection) + +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +cd "$SCRIPT_DIR" + +PROFILE="debug" +CARGO_FLAGS="" +if [[ "${1:-}" == "--release" ]]; then + PROFILE="release" + CARGO_FLAGS="--release" +fi + +echo "=== Building sample WebAssembly components ($PROFILE) ===" +echo "" + +# Build all workspace members +cargo build --target wasm32-wasip2 $CARGO_FLAGS + +echo "" +echo "=== Built components ===" + +COMPONENTS=(adder greeter counter) +for name in "${COMPONENTS[@]}"; do + WASM="target/wasm32-wasip2/$PROFILE/$name.wasm" + if [[ -f "$WASM" ]]; then + SIZE=$(du -h "$WASM" | cut -f1) + echo " ✅ $name ($SIZE) -> $WASM" + + # If wasm-tools is available, show the WIT interface + if command -v wasm-tools &>/dev/null; then + echo " WIT interface:" + wasm-tools component wit "$WASM" 2>/dev/null | sed 's/^/ /' || true + echo "" + fi + else + echo " ❌ $name - build output not found at $WASM" + fi +done + +echo "" +echo "=== Done ===" +echo "" +echo "Component .wasm files are in: $SCRIPT_DIR/target/wasm32-wasip2/$PROFILE/" +echo "" +echo "To inspect a component: wasm-tools component wit " +echo "To validate a component: wasm-tools validate " diff --git a/samples/counter/Cargo.toml b/samples/counter/Cargo.toml new file mode 100644 index 0000000..16bc730 --- /dev/null +++ b/samples/counter/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "counter" +version = "0.1.0" +edition = "2021" + +[lib] +crate-type = ["cdylib"] + +[dependencies] +wit-bindgen = "0.41" diff --git a/samples/counter/src/lib.rs b/samples/counter/src/lib.rs new file mode 100644 index 0000000..360b55f --- /dev/null +++ b/samples/counter/src/lib.rs @@ -0,0 +1,60 @@ +use std::cell::Cell; + +mod bindings { + //! Generated code for implementing the `counter` world in `wit/world.wit`. + wit_bindgen::generate!({ + path: "wit/world.wit", + }); + + use super::CounterResource; + export!(CounterResource); +} + +use bindings::exports::docs::counter::types::{Guest, GuestCounter}; + +/// Top-level component export. +struct CounterResource; + +impl Guest for CounterResource { + type Counter = Counter; +} + +/// A counter resource that tracks a running total. +pub struct Counter { + value: Cell, +} + +impl GuestCounter for Counter { + /// Create a new counter with an initial value. + fn new(initial: i32) -> Self { + Counter { + value: Cell::new(initial), + } + } + + /// Increment the counter by a given amount and return the new value. + fn increment_by(&self, amount: i32) -> i32 { + let new_val = self.value.get() + amount; + self.value.set(new_val); + new_val + } + + /// Decrement the counter by a given amount and return the new value. + fn decrement_by(&self, amount: i32) -> i32 { + let new_val = self.value.get() - amount; + self.value.set(new_val); + new_val + } + + /// Get the current value of the counter. + fn get_value(&self) -> i32 { + self.value.get() + } + + /// Reset the counter to zero and return the old value. + fn reset(&self) -> i32 { + let old = self.value.get(); + self.value.set(0); + old + } +} diff --git a/samples/counter/wit/world.wit b/samples/counter/wit/world.wit new file mode 100644 index 0000000..c20bc3d --- /dev/null +++ b/samples/counter/wit/world.wit @@ -0,0 +1,25 @@ +package docs:counter@0.1.0; + +interface types { + /// A counter resource that tracks a running total. + resource counter { + /// Create a new counter with an initial value. + constructor(initial: s32); + + /// Increment the counter by a given amount and return the new value. + increment-by: func(amount: s32) -> s32; + + /// Decrement the counter by a given amount and return the new value. + decrement-by: func(amount: s32) -> s32; + + /// Get the current value of the counter. + get-value: func() -> s32; + + /// Reset the counter to zero and return the old value. + reset: func() -> s32; + } +} + +world counter { + export types; +} diff --git a/samples/greeter/Cargo.toml b/samples/greeter/Cargo.toml new file mode 100644 index 0000000..91fef75 --- /dev/null +++ b/samples/greeter/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "greeter" +version = "0.1.0" +edition = "2021" + +[lib] +crate-type = ["cdylib"] + +[dependencies] +wit-bindgen = "0.41" diff --git a/samples/greeter/src/lib.rs b/samples/greeter/src/lib.rs new file mode 100644 index 0000000..981b742 --- /dev/null +++ b/samples/greeter/src/lib.rs @@ -0,0 +1,34 @@ +mod bindings { + //! Generated code for implementing the `greeter` world in `wit/world.wit`. + wit_bindgen::generate!({ + path: "wit/world.wit", + }); + + use super::GreeterComponent; + export!(GreeterComponent); +} + +use bindings::exports::docs::greeter::multi_greet::Language; + +/// Component that implements the `docs:greeter` interfaces. +struct GreeterComponent; + +impl bindings::exports::docs::greeter::greet::Guest for GreeterComponent { + /// Greet someone by name in English. + fn greet(name: String) -> String { + format!("Hello, {name}!") + } +} + +impl bindings::exports::docs::greeter::multi_greet::Guest for GreeterComponent { + /// Greet someone in a specific language. + fn greet_in(name: String, lang: Language) -> String { + match lang { + Language::English => format!("Hello, {name}!"), + Language::Spanish => format!("¡Hola, {name}!"), + Language::French => format!("Bonjour, {name}!"), + Language::German => format!("Hallo, {name}!"), + Language::Japanese => format!("こんにちは、{name}!"), + } + } +} diff --git a/samples/greeter/wit/world.wit b/samples/greeter/wit/world.wit new file mode 100644 index 0000000..6dfa917 --- /dev/null +++ b/samples/greeter/wit/world.wit @@ -0,0 +1,25 @@ +package docs:greeter@0.1.0; + +interface greet { + /// Greet someone by name. + greet: func(name: string) -> string; +} + +interface multi-greet { + /// Supported greeting languages. + enum language { + english, + spanish, + french, + german, + japanese, + } + + /// Greet someone in a specific language. + greet-in: func(name: string, lang: language) -> string; +} + +world greeter { + export greet; + export multi-greet; +} diff --git a/src/bindingsSource.ts b/src/bindingsSource.ts new file mode 100644 index 0000000..d04cc3b --- /dev/null +++ b/src/bindingsSource.ts @@ -0,0 +1,37 @@ +import * as fs from "node:fs"; + +/** + * Minimal URI shape used for deciding whether WIT generation can use a file path. + */ +export interface UriLike { + scheme: string; + fsPath: string; +} + +/** + * Returns true when a URI points to an existing, file-backed `.wit` document. + * + * Path-based generation is preferred for real `.wit` files because it allows + * `deps/` resolution. Virtual WIT views (for example `wit-extract:`) and + * unsaved editors must use in-memory content generation. + */ +export function canUseWitPathGeneration(uri: UriLike): boolean { + if (uri.scheme === "wit-extract") { + return false; + } + + const fsPath: string = uri.fsPath; + if (!fsPath || !fsPath.toLowerCase().endsWith(".wit")) { + return false; + } + + return fs.existsSync(fsPath); +} + +/** + * Returns true when a URI represents the virtual extracted-WIT editor for a + * backing `.wasm` component file. + */ +export function isExtractedWitFromWasm(uri: UriLike): boolean { + return uri.scheme === "wit-extract" && uri.fsPath.toLowerCase().endsWith(".wasm"); +} diff --git a/src/extension.ts b/src/extension.ts index c618dcf..2e97b15 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -10,6 +10,14 @@ import { generateBindingsFromWasm, extractCoreWasmFromComponent, } from "./wasmUtils.js"; +import { + generateJsBindingsFromPath, + generateJsBindings, + transpileJsHostFromPath, + type JsBindingsMode, +} from "./jsBindings.js"; +import { determineHostJsGenerationStrategy } from "./hostBindingsRouting.js"; +import { canUseWitPathGeneration } from "./bindingsSource.js"; class WitExtractContentProvider implements vscode.TextDocumentContentProvider, vscode.Disposable { private readonly _onDidChangeEmitter = new vscode.EventEmitter(); @@ -191,6 +199,11 @@ const staticCompletions = new vscode.CompletionList( true ); +/** + * Activate the WIT extension. + * Registers all commands, providers, and event listeners. + * @param context - The extension context for managing subscriptions + */ export function activate(context: vscode.ExtensionContext) { const validator = new WitSyntaxValidator(); const witExtractProvider = new WitExtractContentProvider(); @@ -474,203 +487,525 @@ export function activate(context: vscode.ExtensionContext) { } ); - const createGenerateBindingsCommand = (language: string, languageLabel: string) => { - return vscode.commands.registerCommand( - `wit-idl.generateBindings${languageLabel}`, - async (resource?: vscode.Uri) => { - try { - const active = vscode.window.activeTextEditor; - const targetUri: vscode.Uri | undefined = resource ?? active?.document.uri; - if (!targetUri) { - vscode.window.showErrorMessage("No file selected. Open a .wit or .wasm component file."); - return; - } + const getGuestGenerationLabel = (languageLabel: string, isDocumentationGeneration: boolean): string => { + if (isDocumentationGeneration) { + return `${languageLabel} documentation`; + } + return `${languageLabel} guest bindings`; + }; - let witContent: string; - let diagDoc: vscode.TextDocument | undefined; - - const isWitDoc = - active && - active.document.uri.toString() === targetUri.toString() && - active.document.languageId === "wit"; - if (isWitDoc) { - witContent = active!.document.getText(); - diagDoc = active!.document; - if (!witContent.trim()) { - vscode.window.showWarningMessage("The .wit file is empty."); - return; - } - } else if (targetUri.fsPath.toLowerCase().endsWith(".wasm")) { - const comp = await isWasmComponentFile(targetUri.fsPath); - if (!comp) { - vscode.window.showWarningMessage("The selected .wasm is not a WebAssembly component."); - return; - } - const bytes = await vscode.workspace.fs.readFile(targetUri); - const extracted = await extractWitFromComponent(bytes); - if (!extracted.trim()) { - vscode.window.showWarningMessage("No WIT could be extracted from this component."); - return; - } - witContent = extracted; - const os = await import("os"); - const tmpDir = os.tmpdir(); - const base = path.basename(targetUri.fsPath, ".wasm"); - const tmpPath = path.join(tmpDir, `wit-idl-${base}-${Date.now()}.wit`); - fs.writeFileSync(tmpPath, witContent, "utf8"); - diagDoc = await vscode.workspace.openTextDocument(tmpPath); - } else { - vscode.window.showErrorMessage("Unsupported file type. Select a .wit or .wasm component file."); - return; - } + const resolveSafeGeneratedOutputPath = (outputRoot: string, generatedName: string): string | undefined => { + if (path.isAbsolute(generatedName)) { + return undefined; + } - const worldMatch = witContent.match(/world\s+([a-zA-Z][a-zA-Z0-9-_]*)/g); - const selectedWorld = undefined; + const normalized = path.posix.normalize(generatedName.replace(/\\/g, "/")); + if (normalized === "." || normalized.startsWith("../") || normalized.includes("/../")) { + return undefined; + } - const workspaceFolders = vscode.workspace.workspaceFolders; - const defaultUri = workspaceFolders ? workspaceFolders[0].uri : undefined; + const pathSegments = normalized.split("/").filter((segment) => segment.length > 0); + if (pathSegments.length === 0) { + return undefined; + } - const outputUri = await vscode.window.showOpenDialog({ - canSelectFiles: false, - canSelectFolders: true, - canSelectMany: false, - defaultUri, - openLabel: "Select Output Directory", - title: `Select directory for ${languageLabel} bindings`, - }); + const outputPath = path.join(outputRoot, ...pathSegments); + const relative = path.relative(outputRoot, outputPath); + if (relative.startsWith("..") || path.isAbsolute(relative)) { + return undefined; + } - if (!outputUri || outputUri.length === 0) { + return outputPath; + }; + + const createGenerateBindingsCommand = (language: string, commandId: string) => { + const languageLabels: Record = { + rust: "Rust", + c: "C", + cpp: "C++", + csharp: "C#", + go: "Go", + moonbit: "MoonBit", + markdown: "Markdown", + }; + const languageLabel = languageLabels[language] ?? language; + const isDocumentationGeneration = language === "markdown"; + const generationLabel = getGuestGenerationLabel(languageLabel, isDocumentationGeneration); + return vscode.commands.registerCommand(commandId, async (resource?: vscode.Uri) => { + try { + const active = vscode.window.activeTextEditor; + const targetUri: vscode.Uri | undefined = resource ?? active?.document.uri; + if (!targetUri) { + vscode.window.showErrorMessage("No file selected. Open a .wit or .wasm component file."); + return; + } + + let witContent: string; + let diagDoc: vscode.TextDocument | undefined; + + const isWitDoc = + active && + active.document.uri.toString() === targetUri.toString() && + active.document.languageId === "wit"; + if (isWitDoc) { + witContent = active!.document.getText(); + diagDoc = active!.document; + if (!witContent.trim()) { + vscode.window.showWarningMessage("The .wit file is empty."); return; } - - const outputPath = outputUri[0].fsPath; - - const bindingFiles = await generateBindingsFromWasm(witContent, language, selectedWorld); - - const fileEntries = Object.entries(bindingFiles); - const errorFile = fileEntries.find(([filename]) => filename === "error.txt"); - - if (errorFile) { - const errorMessage = errorFile[1]; - const docPath = diagDoc?.uri.fsPath ?? targetUri.fsPath; - const parsedError = validator.parseWitBindgenError(errorMessage, docPath); - - if (parsedError && diagDoc) { - const diagnostic = validator.createDiagnosticFromError(parsedError, diagDoc); - validator.getDiagnosticCollection().set(diagDoc.uri, [diagnostic]); - } else { - const cleanMessage = errorMessage.replace(/^\/\/\s*/, "").replace(/\n\/\/\s*/g, "\n"); - const diagnostic = new vscode.Diagnostic( - new vscode.Range(0, 0, 0, 1), - `Failed to generate ${languageLabel} bindings: ${cleanMessage}`, - vscode.DiagnosticSeverity.Error - ); - diagnostic.source = "wit-bindgen"; - diagnostic.code = "binding-generation-error"; - const uriForDiag = diagDoc?.uri ?? targetUri; - validator.getDiagnosticCollection().set(uriForDiag, [diagnostic]); - } + } else if (targetUri.fsPath.toLowerCase().endsWith(".wasm")) { + const comp = await isWasmComponentFile(targetUri.fsPath); + if (!comp) { + vscode.window.showWarningMessage("The selected .wasm is not a WebAssembly component."); return; } - - if (fileEntries.length === 0) { - const errorMessage = - "No files were generated. This may be due to invalid WIT syntax or unsupported features."; - const docPath = diagDoc?.uri.fsPath ?? targetUri.fsPath; - const parsedError = validator.parseWitBindgenError(errorMessage, docPath); - - if (parsedError && diagDoc) { - const diagnostic = validator.createDiagnosticFromError(parsedError, diagDoc); - validator.getDiagnosticCollection().set(diagDoc.uri, [diagnostic]); - } else { - const diagnostic = new vscode.Diagnostic( - new vscode.Range(0, 0, 0, 1), - `Failed to generate ${languageLabel} bindings: ${errorMessage}`, - vscode.DiagnosticSeverity.Error - ); - diagnostic.source = "wit-bindgen"; - diagnostic.code = "binding-generation-error"; - const uriForDiag = diagDoc?.uri ?? targetUri; - validator.getDiagnosticCollection().set(uriForDiag, [diagnostic]); - } + const bytes = await vscode.workspace.fs.readFile(targetUri); + const extracted = await extractWitFromComponent(bytes); + if (!extracted.trim()) { + vscode.window.showWarningMessage("No WIT could be extracted from this component."); return; } + witContent = extracted; + const os = await import("os"); + const tmpDir = os.tmpdir(); + const base = path.basename(targetUri.fsPath, ".wasm"); + const tmpPath = path.join(tmpDir, `wit-idl-${base}-${Date.now()}.wit`); + fs.writeFileSync(tmpPath, witContent, "utf8"); + diagDoc = await vscode.workspace.openTextDocument(tmpPath); + } else { + vscode.window.showErrorMessage("Unsupported file type. Select a .wit or .wasm component file."); + return; + } - if (diagDoc) { - const existingDiagnostics = validator.getDiagnosticCollection().get(diagDoc.uri) || []; - const filteredDiagnostics = existingDiagnostics.filter((d) => d.source !== "wit-bindgen"); - validator.getDiagnosticCollection().set(diagDoc.uri, filteredDiagnostics); - } + const workspaceFolders = vscode.workspace.workspaceFolders; + const defaultUri = workspaceFolders ? workspaceFolders[0].uri : undefined; - const writtenFiles: string[] = []; - for (const [filename, fileContent] of fileEntries) { - const sanitizedFilename = path.basename(filename); - const filePath = path.join(outputPath, sanitizedFilename); + const outputUri = await vscode.window.showOpenDialog({ + canSelectFiles: false, + canSelectFolders: true, + canSelectMany: false, + defaultUri, + openLabel: "Select Output Directory", + title: `Select directory for ${generationLabel}`, + }); - const dir = path.dirname(filePath); - if (!fs.existsSync(dir)) { - fs.mkdirSync(dir, { recursive: true }); - } + if (!outputUri || outputUri.length === 0) { + return; + } - const binaryData = Buffer.from(fileContent, "latin1"); - fs.writeFileSync(filePath, binaryData); - writtenFiles.push(sanitizedFilename); - } + const outputPath = outputUri[0].fsPath; - const fileCount = writtenFiles.length; - vscode.window.showInformationMessage( - `${languageLabel} bindings generated successfully! ${fileCount} file${fileCount > 1 ? "s" : ""} written to ${outputPath}` - ); + const bindingFiles = await generateBindingsFromWasm(witContent, language); - const mainFiles = ["src/lib.rs", "main.c", "Program.cs", "main.go", "main.mbt"]; - const mainFile = mainFiles.find((f) => writtenFiles.includes(f)) || writtenFiles[0]; + const fileEntries = Object.entries(bindingFiles); + const errorFile = fileEntries.find(([filename]) => filename === "error.txt"); - if (mainFile) { - const mainFilePath = path.join(outputPath, mainFile); - const doc = await vscode.workspace.openTextDocument(mainFilePath); - await vscode.window.showTextDocument(doc); - } - } catch (error) { - console.error("Failed to generate bindings:", error); - const errorMessage = error instanceof Error ? error.message : String(error); - const uriForDiag = (vscode.window.activeTextEditor?.document ?? undefined)?.uri; - const docPath = uriForDiag?.fsPath ?? ""; + if (errorFile) { + const errorMessage = errorFile[1]; + const docPath = diagDoc?.uri.fsPath ?? targetUri.fsPath; const parsedError = validator.parseWitBindgenError(errorMessage, docPath); - if (parsedError && vscode.window.activeTextEditor) { - const diagnostic = validator.createDiagnosticFromError( - parsedError, - vscode.window.activeTextEditor.document + if (parsedError && diagDoc) { + const diagnostic = validator.createDiagnosticFromError(parsedError, diagDoc); + validator.getDiagnosticCollection().set(diagDoc.uri, [diagnostic]); + } else { + const cleanMessage = errorMessage.replace(/^\/\/\s*/, "").replace(/\n\/\/\s*/g, "\n"); + const diagnostic = new vscode.Diagnostic( + new vscode.Range(0, 0, 0, 1), + `Failed to generate ${generationLabel}: ${cleanMessage}`, + vscode.DiagnosticSeverity.Error ); - validator - .getDiagnosticCollection() - .set(vscode.window.activeTextEditor.document.uri, [diagnostic]); + diagnostic.source = "wit-bindgen"; + diagnostic.code = "binding-generation-error"; + const uriForDiag = diagDoc?.uri ?? targetUri; + validator.getDiagnosticCollection().set(uriForDiag, [diagnostic]); + } + return; + } + + if (fileEntries.length === 0) { + const errorMessage = + "No files were generated. This may be due to invalid WIT syntax or unsupported features."; + const docPath = diagDoc?.uri.fsPath ?? targetUri.fsPath; + const parsedError = validator.parseWitBindgenError(errorMessage, docPath); + + if (parsedError && diagDoc) { + const diagnostic = validator.createDiagnosticFromError(parsedError, diagDoc); + validator.getDiagnosticCollection().set(diagDoc.uri, [diagnostic]); } else { const diagnostic = new vscode.Diagnostic( new vscode.Range(0, 0, 0, 1), - `Failed to generate bindings: ${errorMessage}`, + `Failed to generate ${generationLabel}: ${errorMessage}`, vscode.DiagnosticSeverity.Error ); diagnostic.source = "wit-bindgen"; diagnostic.code = "binding-generation-error"; - const uriForSet = uriForDiag ?? resource ?? vscode.window.activeTextEditor?.document.uri; - if (uriForSet) { - validator.getDiagnosticCollection().set(uriForSet, [diagnostic]); - } + const uriForDiag = diagDoc?.uri ?? targetUri; + validator.getDiagnosticCollection().set(uriForDiag, [diagnostic]); + } + return; + } + + if (diagDoc) { + const existingDiagnostics = validator.getDiagnosticCollection().get(diagDoc.uri) || []; + const filteredDiagnostics = existingDiagnostics.filter((d) => d.source !== "wit-bindgen"); + validator.getDiagnosticCollection().set(diagDoc.uri, filteredDiagnostics); + } + + const writtenFiles: string[] = []; + const skippedFiles: string[] = []; + for (const [filename, fileContent] of fileEntries) { + const filePath = resolveSafeGeneratedOutputPath(outputPath, filename); + if (!filePath) { + skippedFiles.push(filename); + continue; + } + + const dir = path.dirname(filePath); + if (!fs.existsSync(dir)) { + fs.mkdirSync(dir, { recursive: true }); + } + + const binaryData = Buffer.from(fileContent, "latin1"); + fs.writeFileSync(filePath, binaryData); + const relativeFilePath = path.relative(outputPath, filePath).replace(/\\/g, "/"); + writtenFiles.push(relativeFilePath); + } + + if (writtenFiles.length === 0) { + const skippedDetails = skippedFiles.length > 0 ? ` Skipped: ${skippedFiles.join(", ")}` : ""; + vscode.window.showErrorMessage(`No files could be written to disk.${skippedDetails}`); + return; + } + + const fileCount = writtenFiles.length; + vscode.window.showInformationMessage( + `${generationLabel} generated successfully! ${fileCount} file${fileCount > 1 ? "s" : ""} written to ${outputPath}` + ); + + const mainFiles = ["src/lib.rs", "main.c", "Program.cs", "main.go", "main.mbt"]; + const mainFile = mainFiles.find((f) => writtenFiles.includes(f)) || writtenFiles[0]; + + if (mainFile) { + const mainFilePath = path.join(outputPath, mainFile); + const doc = await vscode.workspace.openTextDocument(mainFilePath); + await vscode.window.showTextDocument(doc); + } + } catch (error) { + console.error("Failed to generate guest bindings:", error); + const errorMessage = error instanceof Error ? error.message : String(error); + const uriForDiag = (vscode.window.activeTextEditor?.document ?? undefined)?.uri; + const docPath = uriForDiag?.fsPath ?? ""; + const parsedError = validator.parseWitBindgenError(errorMessage, docPath); + + if (parsedError && vscode.window.activeTextEditor) { + const diagnostic = validator.createDiagnosticFromError( + parsedError, + vscode.window.activeTextEditor.document + ); + validator.getDiagnosticCollection().set(vscode.window.activeTextEditor.document.uri, [diagnostic]); + } else { + const diagnostic = new vscode.Diagnostic( + new vscode.Range(0, 0, 0, 1), + `Failed to generate ${generationLabel}: ${errorMessage}`, + vscode.DiagnosticSeverity.Error + ); + diagnostic.source = "wit-bindgen"; + diagnostic.code = "binding-generation-error"; + const uriForSet = uriForDiag ?? resource ?? vscode.window.activeTextEditor?.document.uri; + if (uriForSet) { + validator.getDiagnosticCollection().set(uriForSet, [diagnostic]); } } } - ); + }); }; - // Create individual language binding commands - const generateRustBindingsCommand = createGenerateBindingsCommand("rust", "Rust"); - const generateCBindingsCommand = createGenerateBindingsCommand("c", "C"); - const generateCppBindingsCommand = createGenerateBindingsCommand("cpp", "Cpp"); - const generateCSharpBindingsCommand = createGenerateBindingsCommand("csharp", "CSharp"); - const generateGoBindingsCommand = createGenerateBindingsCommand("go", "Go"); - const generateMoonBitBindingsCommand = createGenerateBindingsCommand("moonbit", "MoonBit"); - const generateMarkdownBindingsCommand = createGenerateBindingsCommand("markdown", "Markdown"); + // Create individual language guest binding commands + const generateGuestRustCommand = createGenerateBindingsCommand("rust", "wit-idl.generateGuestBindingsRust"); + const generateGuestCCommand = createGenerateBindingsCommand("c", "wit-idl.generateGuestBindingsC"); + const generateGuestCppCommand = createGenerateBindingsCommand("cpp", "wit-idl.generateGuestBindingsCpp"); + const generateGuestCSharpCommand = createGenerateBindingsCommand("csharp", "wit-idl.generateGuestBindingsCSharp"); + const generateGuestGoCommand = createGenerateBindingsCommand("go", "wit-idl.generateGuestBindingsGo"); + const generateGuestMoonBitCommand = createGenerateBindingsCommand( + "moonbit", + "wit-idl.generateGuestBindingsMoonBit" + ); + + // Documentation generation commands + const generateDocMarkdownCommand = createGenerateBindingsCommand("markdown", "wit-idl.generateDocMarkdown"); + + const deprecatedGenerateBindingsAliases: Array<{ alias: string; target: string }> = [ + { alias: "wit-idl.generateBindingsRust", target: "wit-idl.generateGuestBindingsRust" }, + { alias: "wit-idl.generateBindingsC", target: "wit-idl.generateGuestBindingsC" }, + { alias: "wit-idl.generateBindingsCpp", target: "wit-idl.generateGuestBindingsCpp" }, + { alias: "wit-idl.generateBindingsCSharp", target: "wit-idl.generateGuestBindingsCSharp" }, + { alias: "wit-idl.generateBindingsGo", target: "wit-idl.generateGuestBindingsGo" }, + { alias: "wit-idl.generateBindingsMoonBit", target: "wit-idl.generateGuestBindingsMoonBit" }, + { alias: "wit-idl.generateBindingsMarkdown", target: "wit-idl.generateDocMarkdown" }, + ]; + + const deprecatedAliasCommands = deprecatedGenerateBindingsAliases.map(({ alias, target }) => + vscode.commands.registerCommand(alias, async (resource?: vscode.Uri) => { + await vscode.commands.executeCommand(target, resource); + }) + ); + + const generateBindingsAliasCommand = vscode.commands.registerCommand( + "wit-idl.generateBindings", + async (resource?: vscode.Uri) => { + const picks: Array<{ label: string; commandId: string }> = [ + { label: "Rust", commandId: "wit-idl.generateGuestBindingsRust" }, + { label: "C", commandId: "wit-idl.generateGuestBindingsC" }, + { label: "C++", commandId: "wit-idl.generateGuestBindingsCpp" }, + { label: "C#", commandId: "wit-idl.generateGuestBindingsCSharp" }, + { label: "Go", commandId: "wit-idl.generateGuestBindingsGo" }, + { label: "MoonBit", commandId: "wit-idl.generateGuestBindingsMoonBit" }, + { label: "JavaScript", commandId: "wit-idl.generateGuestBindingsJavaScript" }, + { label: "Markdown", commandId: "wit-idl.generateDocMarkdown" }, + ]; + + const choice = await vscode.window.showQuickPick( + picks.map((pick) => ({ label: pick.label, commandId: pick.commandId })), + { + title: "Generate Bindings (Deprecated Alias)", + placeHolder: "Select a generator", + } + ); + + if (!choice) { + return; + } + + await vscode.commands.executeCommand(choice.commandId, resource); + } + ); + + /** + * Factory for JavaScript binding commands (guest or host). + * Uses jco's typesComponent under the hood. + */ + const createJsBindingsCommand = (commandId: string, mode: JsBindingsMode): vscode.Disposable => { + return vscode.commands.registerCommand(commandId, async (resource?: vscode.Uri) => { + try { + const active = vscode.window.activeTextEditor; + const targetUri: vscode.Uri | undefined = resource ?? active?.document.uri; + if (!targetUri) { + vscode.window.showErrorMessage("No file selected. Open a .wit or .wasm component file."); + return; + } + + let witContent: string | undefined; + let witFilePath: string | undefined; + + const isWitDoc = + active && + active.document.uri.toString() === targetUri.toString() && + active.document.languageId === "wit"; + + if (isWitDoc) { + witContent = active!.document.getText(); + witFilePath = canUseWitPathGeneration(targetUri) ? targetUri.fsPath : undefined; + if (!witContent.trim()) { + vscode.window.showWarningMessage("The .wit file is empty."); + return; + } + } else if (targetUri.fsPath.toLowerCase().endsWith(".wasm")) { + const comp = await isWasmComponentFile(targetUri.fsPath); + if (!comp) { + vscode.window.showWarningMessage("The selected .wasm is not a WebAssembly component."); + return; + } + const bytes = await vscode.workspace.fs.readFile(targetUri); + const extracted = await extractWitFromComponent(bytes); + if (!extracted.trim()) { + vscode.window.showWarningMessage("No WIT could be extracted from this component."); + return; + } + witContent = extracted; + } else { + vscode.window.showErrorMessage("Unsupported file type. Select a .wit or .wasm component file."); + return; + } + + const workspaceFolders = vscode.workspace.workspaceFolders; + const defaultUri = workspaceFolders ? workspaceFolders[0].uri : undefined; + + const outputUri = await vscode.window.showOpenDialog({ + canSelectFiles: false, + canSelectFolders: true, + canSelectMany: false, + defaultUri, + openLabel: "Select Output Directory", + title: `Select directory for JavaScript ${mode} bindings`, + }); + + if (!outputUri || outputUri.length === 0) { + return; + } + + const outputPath = outputUri[0].fsPath; + + // Use the file path directly when we have a .wit file on disk, + // so that deps/ directories are resolved correctly. + // For .wasm components, pass the extracted WIT content instead. + const result = witFilePath + ? await generateJsBindingsFromPath(witFilePath, mode) + : await generateJsBindings({ witContent: witContent! }, mode); + + const fileEntries = Object.entries(result.files); + if (fileEntries.length === 0) { + vscode.window.showWarningMessage( + "No files were generated. This may be due to invalid WIT syntax or unsupported features." + ); + return; + } + + const writtenFiles: string[] = []; + for (const [filename, fileContent] of fileEntries) { + const filePath = path.join(outputPath, filename); + const dir = path.dirname(filePath); + if (!fs.existsSync(dir)) { + fs.mkdirSync(dir, { recursive: true }); + } + fs.writeFileSync(filePath, fileContent); + writtenFiles.push(filename); + } + + const fileCount = writtenFiles.length; + vscode.window.showInformationMessage( + `JavaScript ${mode} bindings generated successfully! ${fileCount} file${fileCount > 1 ? "s" : ""} written to ${outputPath}` + ); + + const mainFile = writtenFiles.find((f) => f.endsWith(".d.ts")) || writtenFiles[0]; + if (mainFile) { + const mainFilePath = path.join(outputPath, mainFile); + const doc = await vscode.workspace.openTextDocument(mainFilePath); + await vscode.window.showTextDocument(doc); + } + } catch (error) { + console.error(`Failed to generate JavaScript ${mode} bindings:`, error); + vscode.window.showErrorMessage( + `Failed to generate JavaScript ${mode} bindings: ${error instanceof Error ? error.message : String(error)}` + ); + } + }); + }; + + // Host bindings commands — uses jco transpile for .wasm, types for .wit + const generateHostJavaScriptCommand = vscode.commands.registerCommand( + "wit-idl.generateHostBindingsJavaScript", + async (resource?: vscode.Uri) => { + try { + const active = vscode.window.activeTextEditor; + const targetUri: vscode.Uri | undefined = resource ?? active?.document.uri; + if (!targetUri) { + vscode.window.showErrorMessage("No file selected. Open a .wit or .wasm component file."); + return; + } + + const workspaceFolders = vscode.workspace.workspaceFolders; + const defaultUri = workspaceFolders ? workspaceFolders[0].uri : undefined; + + const outputUri = await vscode.window.showOpenDialog({ + canSelectFiles: false, + canSelectFolders: true, + canSelectMany: false, + defaultUri, + openLabel: "Select Output Directory", + title: "Select directory for JavaScript host bindings", + }); + + if (!outputUri || outputUri.length === 0) { + return; + } + + const outputPath = outputUri[0].fsPath; + let resultFiles: Record; + + const isWitDoc = + active && + active.document.uri.toString() === targetUri.toString() && + active.document.languageId === "wit"; + + if (isWitDoc) { + const witContent = active!.document.getText(); + if (!witContent.trim()) { + vscode.window.showWarningMessage("The .wit file is empty."); + return; + } + } + + const strategy = determineHostJsGenerationStrategy({ targetUri, isWitDoc: Boolean(isWitDoc) }); + + if (strategy === "transpile-wasm-path") { + const comp = await isWasmComponentFile(targetUri.fsPath); + if (!comp) { + const message = isWitDoc + ? "The source .wasm for this extracted WIT view is not a WebAssembly component." + : "The selected .wasm is not a WebAssembly component."; + vscode.window.showWarningMessage(message); + return; + } + const result = await transpileJsHostFromPath(targetUri.fsPath); + resultFiles = result.files; + } else if (strategy === "types-wit-path") { + const result = await generateJsBindingsFromPath(targetUri.fsPath, "host"); + resultFiles = result.files; + } else if (strategy === "types-wit-content") { + const witContent = active!.document.getText(); + const result = await generateJsBindings({ witContent }, "host"); + resultFiles = result.files; + } else { + vscode.window.showErrorMessage("Unsupported file type. Select a .wit or .wasm component file."); + return; + } + + const fileEntries = Object.entries(resultFiles); + if (fileEntries.length === 0) { + vscode.window.showWarningMessage( + "No files were generated. This may be due to invalid WIT syntax or unsupported features." + ); + return; + } + + const writtenFiles: string[] = []; + for (const [filename, fileContent] of fileEntries) { + const filePath = path.join(outputPath, filename); + const dir = path.dirname(filePath); + if (!fs.existsSync(dir)) { + fs.mkdirSync(dir, { recursive: true }); + } + fs.writeFileSync(filePath, fileContent); + writtenFiles.push(filename); + } + + const fileCount = writtenFiles.length; + vscode.window.showInformationMessage( + `JavaScript host bindings generated successfully! ${fileCount} file${fileCount > 1 ? "s" : ""} written to ${outputPath}` + ); + + // Open the main JS or .d.ts file + const mainFile = + writtenFiles.find((f) => f.endsWith(".js") || f.endsWith(".mjs")) || + writtenFiles.find((f) => f.endsWith(".d.ts")) || + writtenFiles[0]; + if (mainFile) { + const mainFilePath = path.join(outputPath, mainFile); + const doc = await vscode.workspace.openTextDocument(mainFilePath); + await vscode.window.showTextDocument(doc); + } + } catch (error) { + console.error("Failed to generate JavaScript host bindings:", error); + vscode.window.showErrorMessage( + `Failed to generate JavaScript host bindings: ${error instanceof Error ? error.message : String(error)}` + ); + } + } + ); + + const generateGuestJavaScriptCommand = createJsBindingsCommand("wit-idl.generateGuestBindingsJavaScript", "guest"); const onSaveListener = vscode.workspace.onDidSaveTextDocument(async (document) => { if (document.languageId === "wit") { @@ -716,13 +1051,17 @@ export function activate(context: vscode.ExtensionContext) { formatDocumentCommand, extractWitCommand, extractCoreWasmCommand, - generateRustBindingsCommand, - generateCBindingsCommand, - generateCppBindingsCommand, - generateCSharpBindingsCommand, - generateGoBindingsCommand, - generateMoonBitBindingsCommand, - generateMarkdownBindingsCommand, + generateGuestRustCommand, + generateGuestCCommand, + generateGuestCppCommand, + generateGuestCSharpCommand, + generateGuestGoCommand, + generateGuestMoonBitCommand, + generateDocMarkdownCommand, + generateGuestJavaScriptCommand, + generateHostJavaScriptCommand, + generateBindingsAliasCommand, + ...deprecatedAliasCommands, wasmToWitProvider, onSaveListener, onOpenListener, @@ -735,4 +1074,8 @@ export function activate(context: vscode.ExtensionContext) { ); } +/** + * Deactivate the WIT extension. + * Resources are cleaned up via context.subscriptions disposal. + */ export function deactivate() {} diff --git a/src/formatter.ts b/src/formatter.ts index 7e264dd..0d7429e 100644 --- a/src/formatter.ts +++ b/src/formatter.ts @@ -41,8 +41,7 @@ export class WitFormatter implements vscode.DocumentFormattingEditProvider { let aliasGenericDepth = 0; let inFuncParams = false; for (let i = 0; i < lines.length; i++) { - const raw = lines[i]; - const trimmed = raw.trim(); + const trimmed = lines[i].trim(); if (trimmed === "") { out.push(""); continue; diff --git a/src/hostBindingsRouting.ts b/src/hostBindingsRouting.ts new file mode 100644 index 0000000..2536c44 --- /dev/null +++ b/src/hostBindingsRouting.ts @@ -0,0 +1,30 @@ +import type { UriLike } from "./bindingsSource.js"; +import { canUseWitPathGeneration, isExtractedWitFromWasm } from "./bindingsSource.js"; + +export type HostJsGenerationStrategy = "transpile-wasm-path" | "types-wit-path" | "types-wit-content" | "unsupported"; + +export interface HostJsRoutingInput { + targetUri: UriLike; + isWitDoc: boolean; +} + +/** + * Determines which generation strategy should be used for host-side JavaScript output. + */ +export function determineHostJsGenerationStrategy(input: HostJsRoutingInput): HostJsGenerationStrategy { + const { targetUri, isWitDoc } = input; + + if (isWitDoc) { + if (isExtractedWitFromWasm(targetUri)) { + return "transpile-wasm-path"; + } + + return canUseWitPathGeneration(targetUri) ? "types-wit-path" : "types-wit-content"; + } + + if (targetUri.fsPath.toLowerCase().endsWith(".wasm")) { + return "transpile-wasm-path"; + } + + return "unsupported"; +} diff --git a/src/jsBindings.ts b/src/jsBindings.ts new file mode 100644 index 0000000..2ef7d2d --- /dev/null +++ b/src/jsBindings.ts @@ -0,0 +1,251 @@ +import * as fs from "node:fs"; +import * as os from "node:os"; +import * as path from "node:path"; + +/** + * Binding mode: "guest" generates guest-side types, "host" generates host-side types. + */ +export type JsBindingsMode = "guest" | "host"; + +/** + * Options for generating JavaScript bindings from WIT + */ +export interface JsBindingsOptions { + /** WIT content as a string */ + witContent: string; + /** Optional world name to target */ + worldName?: string; +} + +/** + * Result of JavaScript binding generation + */ +export interface JsBindingsResult { + /** Map of relative file paths to file contents (as Uint8Array) */ + files: Record; +} + +/** + * Result of JavaScript host transpilation from a .wasm component + */ +export interface JsTranspileResult { + /** Map of relative file paths to file contents (as Uint8Array) */ + files: Record; + /** Import specifiers the generated JS needs at runtime */ + imports: string[]; + /** Exported items: [name, kind] tuples */ + exports: [string, "function" | "instance"][]; +} + +/** + * Dynamically import jco's typesComponent function. + * + * The function is re-exported from `@bytecodealliance/jco` as `types`. + * We use a dynamic import to avoid loading the module eagerly at startup. + */ +async function getTypesComponent(): Promise< + (witPath: string, opts: { worldName?: string; guest?: boolean }) => Promise> +> { + const jco = (await import("@bytecodealliance/jco")) as { + types: (witPath: string, opts: { worldName?: string; guest?: boolean }) => Promise>; + }; + return jco.types; +} + +/** + * Dynamically import jco's transpileComponent function. + * + * The function is re-exported from `@bytecodealliance/jco` as `transpile`. + * It takes raw WebAssembly component bytes and produces the full JavaScript + * host runtime (JS modules, TypeScript declarations, and embedded core .wasm files). + */ +async function getTranspileComponent(): Promise< + ( + component: Uint8Array, + opts?: { + name?: string; + instantiation?: "async" | "sync"; + map?: Record; + validLiftingOptimization?: boolean; + tracing?: boolean; + nodejsCompat?: boolean; + tlaCompat?: boolean; + base64Cutoff?: boolean; + js?: boolean; + minify?: boolean; + optimize?: boolean; + namespacedExports?: boolean; + multiMemory?: boolean; + } + ) => Promise<{ + files: Record; + imports: string[]; + exports: [string, "function" | "instance"][]; + }> +> { + const jco = (await import("@bytecodealliance/jco")) as { + transpile: ( + component: Uint8Array, + opts?: Record + ) => Promise<{ + files: Record; + imports: string[]; + exports: [string, "function" | "instance"][]; + }>; + }; + return jco.transpile; +} + +/** + * Generate JavaScript/TypeScript bindings from WIT content. + * + * Uses `@bytecodealliance/jco` `typesComponent` to produce TypeScript + * declaration files (.d.ts). In "guest" mode, generates guest module types; + * in "host" mode, generates host-side types describing the component's + * imports and exports from the host perspective. + * + * @param options - Options for generation + * @param mode - "guest" or "host" (defaults to "guest") + * @returns Map of filename to file content + */ +export async function generateJsBindings( + options: JsBindingsOptions, + mode: JsBindingsMode = "guest" +): Promise { + const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), `wit-idl-js-${mode}-`)); + const witFilePath = path.join(tmpDir, "input.wit"); + + try { + fs.writeFileSync(witFilePath, options.witContent, "utf8"); + + const typesComponent = await getTypesComponent(); + const files = await typesComponent(witFilePath, { + worldName: options.worldName, + ...(mode === "guest" ? { guest: true } : {}), + }); + + return { files }; + } finally { + try { + fs.rmSync(tmpDir, { recursive: true, force: true }); + } catch { + // Ignore cleanup errors + } + } +} + +/** + * Generate JavaScript/TypeScript bindings from a WIT file path. + * + * Passes the path directly to jco without copying to a temp directory, + * which allows resolution of dependencies in `deps/` directories. + * + * @param witPath - Absolute path to the WIT file or directory + * @param mode - "guest" or "host" (defaults to "guest") + * @param worldName - Optional world name to target + * @returns Map of filename to file content + */ +export async function generateJsBindingsFromPath( + witPath: string, + mode: JsBindingsMode = "guest", + worldName?: string +): Promise { + const typesComponent = await getTypesComponent(); + const files = await typesComponent(witPath, { + worldName, + ...(mode === "guest" ? { guest: true } : {}), + }); + + return { files }; +} + +// ── Convenience aliases (preserve backward-compatible named exports) ── + +/** @deprecated Use `generateJsBindings(options, "guest")` instead */ +export const generateJsGuestBindings = (options: JsBindingsOptions): Promise => + generateJsBindings(options, "guest"); + +/** @deprecated Use `generateJsBindingsFromPath(path, "guest")` instead */ +export const generateJsGuestBindingsFromPath = (witPath: string, worldName?: string): Promise => + generateJsBindingsFromPath(witPath, "guest", worldName); + +/** @deprecated Use `generateJsBindings(options, "host")` instead */ +export const generateJsHostBindings = (options: JsBindingsOptions): Promise => + generateJsBindings(options, "host"); + +/** @deprecated Use `generateJsBindingsFromPath(path, "host")` instead */ +export const generateJsHostBindingsFromPath = (witPath: string, worldName?: string): Promise => + generateJsBindingsFromPath(witPath, "host", worldName); + +// ── Full host transpilation (from .wasm component) ── + +/** + * Options for transpiling a WebAssembly component into a JavaScript host module. + */ +export interface JsTranspileOptions { + /** Name for the generated module (derived from filename if omitted) */ + name?: string; + /** Whether to generate an instantiation API ("async" | "sync") instead of a direct module */ + instantiation?: "async" | "sync"; + /** Enable Node.js compatibility mode (e.g. for fs/path shims) */ + nodejsCompat?: boolean; + /** Enable tracing of component calls */ + tracing?: boolean; + /** Generate .mjs instead of .js for broader ESM compat */ + tlaCompat?: boolean; +} + +/** + * Transpile a WebAssembly component into a full JavaScript host module. + * + * Uses `@bytecodealliance/jco` `transpileComponent` to produce: + * - JavaScript ES module(s) that instantiate the component + * - TypeScript declaration files (.d.ts) for type-safe usage + * - Embedded core WebAssembly module(s) referenced by the JS + * + * This is the host-side counterpart to guest binding generation. + * The output can be used directly from Node.js or bundled for the browser. + * + * @param componentBytes - Raw bytes of a WebAssembly component (.wasm) + * @param options - Transpilation options + * @returns Generated files, import specifiers, and export descriptors + */ +export async function transpileJsHost( + componentBytes: Uint8Array, + options?: JsTranspileOptions +): Promise { + const transpileComponent = await getTranspileComponent(); + + const name = options?.name ?? "component"; + const result = await transpileComponent(componentBytes, { + name, + instantiation: options?.instantiation, + nodejsCompat: options?.nodejsCompat, + tracing: options?.tracing, + tlaCompat: options?.tlaCompat, + }); + + return { + files: result.files, + imports: result.imports, + exports: result.exports, + }; +} + +/** + * Transpile a WebAssembly component file into a full JavaScript host module. + * + * Reads the file from disk and delegates to {@link transpileJsHost}. + * + * @param wasmPath - Absolute path to the .wasm component file + * @param options - Transpilation options (name defaults to the file's base name) + * @returns Generated files, import specifiers, and export descriptors + */ +export async function transpileJsHostFromPath( + wasmPath: string, + options?: JsTranspileOptions +): Promise { + const componentBytes = fs.readFileSync(wasmPath); + const name = options?.name ?? path.basename(wasmPath, ".wasm"); + return transpileJsHost(new Uint8Array(componentBytes), { ...options, name }); +} diff --git a/tests/bindingsSource.test.ts b/tests/bindingsSource.test.ts new file mode 100644 index 0000000..0ac5ee1 --- /dev/null +++ b/tests/bindingsSource.test.ts @@ -0,0 +1,78 @@ +import { describe, expect, it } from "vitest"; +import * as fs from "node:fs"; +import * as os from "node:os"; +import * as path from "node:path"; +import { canUseWitPathGeneration, isExtractedWitFromWasm, type UriLike } from "../src/bindingsSource.js"; + +describe("canUseWitPathGeneration", () => { + it("returns true for existing file-backed .wit paths", () => { + const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "wit-idl-source-test-")); + const witPath = path.join(tempDir, "world.wit"); + fs.writeFileSync(witPath, "package example:test; world w {}", "utf8"); + + try { + const uri: UriLike = { scheme: "file", fsPath: witPath }; + expect(canUseWitPathGeneration(uri)).toBe(true); + } finally { + fs.rmSync(tempDir, { recursive: true, force: true }); + } + }); + + it("returns false for virtual extracted WIT views", () => { + const uri: UriLike = { scheme: "wit-extract", fsPath: "/tmp/component.wasm" }; + expect(canUseWitPathGeneration(uri)).toBe(false); + }); + + it("returns false for wit-extract even with a valid .wit fsPath", () => { + const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "wit-idl-source-test-")); + const witPath = path.join(tempDir, "world.wit"); + fs.writeFileSync(witPath, "package example:test; world w {}", "utf8"); + + try { + const uri: UriLike = { scheme: "wit-extract", fsPath: witPath }; + expect(canUseWitPathGeneration(uri)).toBe(false); + } finally { + fs.rmSync(tempDir, { recursive: true, force: true }); + } + }); + + it("returns true for existing .wit paths from non-file remote schemes", () => { + const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "wit-idl-source-test-")); + const witPath = path.join(tempDir, "world.wit"); + fs.writeFileSync(witPath, "package example:test; world w {}", "utf8"); + + try { + const uri: UriLike = { scheme: "vscode-remote", fsPath: witPath }; + expect(canUseWitPathGeneration(uri)).toBe(true); + } finally { + fs.rmSync(tempDir, { recursive: true, force: true }); + } + }); + + it("returns false for non-.wit file paths", () => { + const uri: UriLike = { scheme: "file", fsPath: "/tmp/component.wasm" }; + expect(canUseWitPathGeneration(uri)).toBe(false); + }); + + it("returns false for missing .wit paths", () => { + const uri: UriLike = { scheme: "file", fsPath: path.join(os.tmpdir(), "missing-world.wit") }; + expect(canUseWitPathGeneration(uri)).toBe(false); + }); +}); + +describe("isExtractedWitFromWasm", () => { + it("returns true for virtual wit-extract URIs backed by .wasm", () => { + const uri: UriLike = { scheme: "wit-extract", fsPath: "/tmp/component.wasm" }; + expect(isExtractedWitFromWasm(uri)).toBe(true); + }); + + it("returns false for file-backed .wit URIs", () => { + const uri: UriLike = { scheme: "file", fsPath: "/tmp/world.wit" }; + expect(isExtractedWitFromWasm(uri)).toBe(false); + }); + + it("returns false for wit-extract URIs not ending in .wasm", () => { + const uri: UriLike = { scheme: "wit-extract", fsPath: "/tmp/world.wit" }; + expect(isExtractedWitFromWasm(uri)).toBe(false); + }); +}); diff --git a/tests/formatter-edge.test.ts b/tests/formatter-edge.test.ts new file mode 100644 index 0000000..3f028b0 --- /dev/null +++ b/tests/formatter-edge.test.ts @@ -0,0 +1,174 @@ +import { describe, it, expect, vi } from "vitest"; +import { WitFormatter } from "../src/formatter.js"; + +vi.mock("vscode", () => ({})); + +describe("WitFormatter — edge cases", () => { + const formatter = new WitFormatter(); + const defaultOptions = { insertSpaces: true, tabSize: 4 }; + + describe("empty and whitespace input", () => { + it("should handle empty string", () => { + expect(formatter.formatWitContent("", defaultOptions)).toBe(""); + }); + + it("should preserve blank lines", () => { + const input = "\n\n\n"; + const result = formatter.formatWitContent(input, defaultOptions); + expect(result).toBe("\n\n\n"); + }); + + it("should handle single blank line", () => { + const input = "\n"; + expect(formatter.formatWitContent(input, defaultOptions)).toBe("\n"); + }); + }); + + describe("tab indentation", () => { + it("should use tabs when insertSpaces is false", () => { + const input = "package foo:bar;\n\ninterface test {\nmy-func: func();\n}"; + const result = formatter.formatWitContent(input, { insertSpaces: false, tabSize: 4 }); + expect(result).toContain("\tmy-func: func();"); + }); + + it("should respect tabSize setting", () => { + const input = "package foo:bar;\n\ninterface test {\nmy-func: func();\n}"; + const result2 = formatter.formatWitContent(input, { insertSpaces: true, tabSize: 2 }); + expect(result2).toContain(" my-func: func();"); + + const result4 = formatter.formatWitContent(input, { insertSpaces: true, tabSize: 4 }); + expect(result4).toContain(" my-func: func();"); + }); + }); + + describe("nested structures", () => { + it("should handle deeply nested braces", () => { + const input = + "package foo:bar;\n\nworld my-world {\nexport run: func();\nimport log: func(msg: string);\n}"; + const result = formatter.formatWitContent(input, defaultOptions); + expect(result).toContain(" export run: func();"); + expect(result).toContain(" import log: func(msg: string);"); + }); + + it("should format resource with methods", () => { + const input = + "package foo:bar;\n\ninterface api {\nresource my-res {\nconstructor(name: string);\nget-name: func() -> string;\n}\n}"; + const result = formatter.formatWitContent(input, defaultOptions); + // Resource body should be indented within interface + const lines = result.split("\n"); + const constructorLine = lines.find((l: string) => l.includes("constructor")); + expect(constructorLine).toBeDefined(); + expect(constructorLine!.startsWith(" ")).toBe(true); // 8 spaces (2 levels) + }); + }); + + describe("comment handling", () => { + it("should preserve single-line comments at correct indentation", () => { + const input = "package foo:bar;\n\ninterface test {\n// A comment\nmy-func: func();\n}"; + const result = formatter.formatWitContent(input, defaultOptions); + const lines = result.split("\n"); + const commentLine = lines.find((l: string) => l.includes("// A comment")); + expect(commentLine).toBeDefined(); + expect(commentLine!.startsWith(" ")).toBe(true); + }); + + it("should handle doc comments (///)", () => { + const input = "package foo:bar;\n\ninterface test {\n/// Doc comment\nmy-func: func();\n}"; + const result = formatter.formatWitContent(input, defaultOptions); + expect(result).toContain("/// Doc comment"); + }); + }); + + describe("type alias formatting", () => { + it("should format simple type aliases", () => { + const input = "type my-type = u32 ;"; + const result = formatter.formatWitContent(input, defaultOptions); + expect(result).toBe("type my-type = u32;"); + }); + + it("should format type alias with complex type", () => { + const input = "type my-type = list ;"; + const result = formatter.formatWitContent(input, defaultOptions); + expect(result).toBe("type my-type = list;"); + }); + }); + + describe("use statement formatting", () => { + it("should format use statements", () => { + const input = "use my-interface.{type1, type2} ;"; + const result = formatter.formatWitContent(input, defaultOptions); + expect(result).toContain("use my-interface"); + expect(result.endsWith(";")).toBe(true); + }); + + it("should format use with as clause", () => { + const input = "use my-interface.{type1} as alias-name ;"; + const result = formatter.formatWitContent(input, defaultOptions); + expect(result).toContain(" as "); + }); + }); + + describe("function formatting edge cases", () => { + it("should format function with no parameters", () => { + const input = "my-func:func();"; + const result = formatter.formatWitContent(input, defaultOptions); + expect(result).toBe("my-func: func();"); + }); + + it("should format function with return type", () => { + const input = "my-func:func()->string;"; + const result = formatter.formatWitContent(input, defaultOptions); + expect(result).toBe("my-func: func() -> string;"); + }); + + it("should format function with multiple parameters", () => { + const input = "my-func:func(a:u32,b:string)->bool;"; + const result = formatter.formatWitContent(input, defaultOptions); + expect(result).toBe("my-func: func(a: u32, b: string) -> bool;"); + }); + }); + + describe("enum and flags formatting", () => { + it("should format enum with cases", () => { + const input = "package foo:bar;\n\nenum my-enum {\ncase-a,\ncase-b,\n}"; + const result = formatter.formatWitContent(input, defaultOptions); + expect(result).toContain("enum my-enum {"); + expect(result).toContain(" case-a,"); + }); + + it("should format flags with members", () => { + const input = "package foo:bar;\n\nflags my-flags {\nflag-a,\nflag-b,\n}"; + const result = formatter.formatWitContent(input, defaultOptions); + expect(result).toContain("flags my-flags {"); + expect(result).toContain(" flag-a,"); + }); + }); + + describe("provideDocumentFormattingEdits", () => { + it("should return empty array when content is unchanged", () => { + const mockDocument = { + getText: () => "package foo:bar;", + positionAt: (offset: number) => ({ line: 0, character: offset }), + } as unknown as import("vscode").TextDocument; + + const result = formatter.provideDocumentFormattingEdits(mockDocument, defaultOptions); + expect(result).toEqual([]); + }); + }); + + describe("multiline function parameters", () => { + it("should indent continuation lines of func parameters", () => { + const input = "package foo:bar;\n\ninterface test {\nmy-func: func(\na: u32,\nb: string,\n) -> bool;\n}"; + const result = formatter.formatWitContent(input, defaultOptions); + const lines = result.split("\n"); + const paramLine = lines.find((l: string) => l.includes("a: u32")); + expect(paramLine).toBeDefined(); + // Should be indented more than the func line + const funcLine = lines.find((l: string) => l.includes("my-func")); + expect(funcLine).toBeDefined(); + const funcIndent = funcLine!.length - funcLine!.trimStart().length; + const paramIndent = paramLine!.length - paramLine!.trimStart().length; + expect(paramIndent).toBeGreaterThan(funcIndent); + }); + }); +}); diff --git a/tests/hostBindingsRouting.test.ts b/tests/hostBindingsRouting.test.ts new file mode 100644 index 0000000..adaacbb --- /dev/null +++ b/tests/hostBindingsRouting.test.ts @@ -0,0 +1,45 @@ +import { describe, expect, it } from "vitest"; +import * as fs from "node:fs"; +import * as os from "node:os"; +import * as path from "node:path"; +import { determineHostJsGenerationStrategy, type HostJsGenerationStrategy } from "../src/hostBindingsRouting.js"; +import type { UriLike } from "../src/bindingsSource.js"; + +function strategyFor(targetUri: UriLike, isWitDoc: boolean): HostJsGenerationStrategy { + return determineHostJsGenerationStrategy({ targetUri, isWitDoc }); +} + +describe("determineHostJsGenerationStrategy", () => { + it("uses transpile path for extracted WIT views backed by wasm", () => { + const uri: UriLike = { scheme: "wit-extract", fsPath: "/tmp/component.wasm" }; + expect(strategyFor(uri, true)).toBe("transpile-wasm-path"); + }); + + it("uses transpile path for non-WIT wasm targets", () => { + const uri: UriLike = { scheme: "file", fsPath: "/tmp/component.wasm" }; + expect(strategyFor(uri, false)).toBe("transpile-wasm-path"); + }); + + it("uses path-based type generation for file-backed wit docs", () => { + const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "wit-idl-routing-test-")); + const witPath = path.join(tempDir, "world.wit"); + fs.writeFileSync(witPath, "package example:test; world w {}", "utf8"); + + try { + const uri: UriLike = { scheme: "file", fsPath: witPath }; + expect(strategyFor(uri, true)).toBe("types-wit-path"); + } finally { + fs.rmSync(tempDir, { recursive: true, force: true }); + } + }); + + it("uses content-based type generation for virtual wit docs", () => { + const uri: UriLike = { scheme: "untitled", fsPath: "/tmp/world.wit" }; + expect(strategyFor(uri, true)).toBe("types-wit-content"); + }); + + it("returns unsupported for non-wit, non-wasm targets", () => { + const uri: UriLike = { scheme: "file", fsPath: "/tmp/notes.txt" }; + expect(strategyFor(uri, false)).toBe("unsupported"); + }); +}); diff --git a/tests/js-bindings.test.ts b/tests/js-bindings.test.ts new file mode 100644 index 0000000..c2417ee --- /dev/null +++ b/tests/js-bindings.test.ts @@ -0,0 +1,470 @@ +import { describe, it, expect } from "vitest"; +import { readFileSync } from "node:fs"; +import { join } from "node:path"; +import { + generateJsBindings, + generateJsBindingsFromPath, + generateJsGuestBindings, + generateJsGuestBindingsFromPath, + generateJsHostBindings, + generateJsHostBindingsFromPath, + transpileJsHost, + transpileJsHostFromPath, +} from "../src/jsBindings.js"; +import * as fs from "node:fs"; +import * as os from "node:os"; +import * as path from "node:path"; + +/** + * Build a minimal WebAssembly component from inline WIT source + * using jco's componentEmbed + componentNew. + */ +async function buildComponentFromWit(witSource: string): Promise { + const jco = (await import("@bytecodealliance/jco")) as { + componentEmbed: (opts: { witSource: string; dummy: boolean }) => Promise; + componentNew: (binary: Uint8Array, adapters: unknown[]) => Promise; + }; + const embedded = await jco.componentEmbed({ witSource, dummy: true }); + return jco.componentNew(embedded, []); +} + +const TEST_WIT = `package example:test; + +world test-world { + export greet: func(name: string) -> string; +} +`; + +const COMPLEX_WIT = `package example:complex; + +interface logger { + enum level { + debug, + info, + warn, + error, + } + + record entry { + level: level, + message: string, + } + + log: func(entry: entry); +} + +world app { + import logger; + export run: func() -> result<_, string>; +} +`; + +describe("JavaScript Guest Bindings Generation", () => { + it("should generate .d.ts files from WIT content", async () => { + const result = await generateJsBindings({ witContent: TEST_WIT }, "guest"); + + expect(result.files).toBeDefined(); + const filenames = Object.keys(result.files); + expect(filenames.length).toBeGreaterThan(0); + + const hasDtsFile = filenames.some((f) => f.endsWith(".d.ts")); + expect(hasDtsFile).toBe(true); + + console.log(`✅ JS guest bindings: Generated ${filenames.length} file(s): ${filenames.join(", ")}`); + }); + + it("should generate files containing TypeScript type declarations", async () => { + const result = await generateJsBindings({ witContent: TEST_WIT }, "guest"); + const filenames = Object.keys(result.files); + + const dtsFile = filenames.find((f) => f.endsWith(".d.ts")); + expect(dtsFile).toBeDefined(); + + if (dtsFile) { + const content = new TextDecoder().decode(result.files[dtsFile]); + expect(content.length).toBeGreaterThan(0); + expect(content).toMatch(/export|import|interface|type|declare/); + + console.log(`✅ JS guest bindings: ${dtsFile} contains TypeScript declarations (${content.length} bytes)`); + } + }); + + it("should handle complex WIT definitions with interfaces and records", async () => { + const result = await generateJsBindings({ witContent: COMPLEX_WIT }, "guest"); + + expect(result.files).toBeDefined(); + const filenames = Object.keys(result.files); + expect(filenames.length).toBeGreaterThan(0); + + const hasDtsFile = filenames.some((f) => f.endsWith(".d.ts")); + expect(hasDtsFile).toBe(true); + + console.log(`✅ JS guest bindings: Complex WIT generated ${filenames.length} file(s): ${filenames.join(", ")}`); + }); + + it("should generate files from a WIT file path", async () => { + const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "wit-idl-test-")); + const witFile = path.join(tmpDir, "test.wit"); + fs.writeFileSync(witFile, TEST_WIT, "utf8"); + + try { + const result = await generateJsBindingsFromPath(witFile, "guest"); + + expect(result.files).toBeDefined(); + const filenames = Object.keys(result.files); + expect(filenames.length).toBeGreaterThan(0); + + const hasDtsFile = filenames.some((f) => f.endsWith(".d.ts")); + expect(hasDtsFile).toBe(true); + + console.log(`✅ JS guest bindings from path: Generated ${filenames.length} file(s)`); + } finally { + fs.rmSync(tmpDir, { recursive: true, force: true }); + } + }); + + it("should produce different output than wit-bindgen languages", async () => { + const result = await generateJsBindings({ witContent: TEST_WIT }, "guest"); + const filenames = Object.keys(result.files); + + const hasRust = filenames.some((f) => f.endsWith(".rs")); + const hasC = filenames.some((f) => f.endsWith(".h") || f.endsWith(".c")); + const hasGo = filenames.some((f) => f.endsWith(".go")); + + expect(hasRust).toBe(false); + expect(hasC).toBe(false); + expect(hasGo).toBe(false); + + const hasDts = filenames.some((f) => f.endsWith(".d.ts")); + expect(hasDts).toBe(true); + }); + + it("should reject empty WIT content", async () => { + await expect(generateJsBindings({ witContent: "" }, "guest")).rejects.toThrow(); + }); + + it("convenience alias works the same as core function", async () => { + const aliasResult = await generateJsGuestBindings({ witContent: TEST_WIT }); + const coreResult = await generateJsBindings({ witContent: TEST_WIT }, "guest"); + + expect(Object.keys(aliasResult.files).sort()).toEqual(Object.keys(coreResult.files).sort()); + }); + + it("path alias works the same as core path function", async () => { + const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "wit-idl-test-guest-alias-")); + const witFile = path.join(tmpDir, "test.wit"); + fs.writeFileSync(witFile, TEST_WIT, "utf8"); + + try { + const aliasResult = await generateJsGuestBindingsFromPath(witFile); + const coreResult = await generateJsBindingsFromPath(witFile, "guest"); + expect(Object.keys(aliasResult.files).sort()).toEqual(Object.keys(coreResult.files).sort()); + } finally { + fs.rmSync(tmpDir, { recursive: true, force: true }); + } + }); +}); + +describe("JavaScript Host Bindings Generation", () => { + it("should generate .d.ts files from WIT content", async () => { + const result = await generateJsBindings({ witContent: TEST_WIT }, "host"); + + expect(result.files).toBeDefined(); + const filenames = Object.keys(result.files); + expect(filenames.length).toBeGreaterThan(0); + + const hasDtsFile = filenames.some((f) => f.endsWith(".d.ts")); + expect(hasDtsFile).toBe(true); + + console.log(`✅ JS host bindings: Generated ${filenames.length} file(s): ${filenames.join(", ")}`); + }); + + it("should generate host-side type declarations", async () => { + const result = await generateJsBindings({ witContent: TEST_WIT }, "host"); + const filenames = Object.keys(result.files); + + const dtsFile = filenames.find((f) => f.endsWith(".d.ts")); + expect(dtsFile).toBeDefined(); + + if (dtsFile) { + const content = new TextDecoder().decode(result.files[dtsFile]); + expect(content.length).toBeGreaterThan(0); + expect(content).toMatch(/export|import|interface|type|declare/); + + console.log(`✅ JS host bindings: ${dtsFile} contains TypeScript declarations (${content.length} bytes)`); + } + }); + + it("should produce different output than guest bindings", async () => { + const guestResult = await generateJsBindings({ witContent: TEST_WIT }, "guest"); + const hostResult = await generateJsBindings({ witContent: TEST_WIT }, "host"); + + const guestFiles = Object.keys(guestResult.files); + const hostFiles = Object.keys(hostResult.files); + + expect(guestFiles.length).toBeGreaterThan(0); + expect(hostFiles.length).toBeGreaterThan(0); + + const guestDts = guestFiles.find((f) => f.endsWith(".d.ts")); + const hostDts = hostFiles.find((f) => f.endsWith(".d.ts")); + if (guestDts && hostDts) { + const guestContent = new TextDecoder().decode(guestResult.files[guestDts]); + const hostContent = new TextDecoder().decode(hostResult.files[hostDts]); + expect(guestContent).not.toBe(hostContent); + } + + console.log(`✅ JS host vs guest: guest=${guestFiles.length} files, host=${hostFiles.length} files`); + }); + + it("should handle complex WIT definitions", async () => { + const result = await generateJsBindings({ witContent: COMPLEX_WIT }, "host"); + + expect(result.files).toBeDefined(); + const filenames = Object.keys(result.files); + expect(filenames.length).toBeGreaterThan(0); + + console.log(`✅ JS host bindings: Complex WIT generated ${filenames.length} file(s): ${filenames.join(", ")}`); + }); + + it("should generate files from a WIT file path", async () => { + const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "wit-idl-test-host-")); + const witFile = path.join(tmpDir, "test.wit"); + fs.writeFileSync(witFile, TEST_WIT, "utf8"); + + try { + const result = await generateJsBindingsFromPath(witFile, "host"); + + expect(result.files).toBeDefined(); + const filenames = Object.keys(result.files); + expect(filenames.length).toBeGreaterThan(0); + + const hasDtsFile = filenames.some((f) => f.endsWith(".d.ts")); + expect(hasDtsFile).toBe(true); + + console.log(`✅ JS host bindings from path: Generated ${filenames.length} file(s)`); + } finally { + fs.rmSync(tmpDir, { recursive: true, force: true }); + } + }); + + it("should reject empty WIT content", async () => { + await expect(generateJsBindings({ witContent: "" }, "host")).rejects.toThrow(); + }); + + it("convenience alias works the same as core function", async () => { + const aliasResult = await generateJsHostBindings({ witContent: TEST_WIT }); + const coreResult = await generateJsBindings({ witContent: TEST_WIT }, "host"); + + expect(Object.keys(aliasResult.files).sort()).toEqual(Object.keys(coreResult.files).sort()); + }); + + it("path alias works the same as core path function", async () => { + const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "wit-idl-test-host-alias-")); + const witFile = path.join(tmpDir, "test.wit"); + fs.writeFileSync(witFile, TEST_WIT, "utf8"); + + try { + const aliasResult = await generateJsHostBindingsFromPath(witFile); + const coreResult = await generateJsBindingsFromPath(witFile, "host"); + expect(Object.keys(aliasResult.files).sort()).toEqual(Object.keys(coreResult.files).sort()); + } finally { + fs.rmSync(tmpDir, { recursive: true, force: true }); + } + }); +}); + +describe("JavaScript bindings command contributions", () => { + const pkg = JSON.parse(readFileSync(join(__dirname, "..", "package.json"), "utf8")) as { + contributes: { + commands: { command: string; title: string }[]; + menus: Record; + submenus: { id: string; label: string }[]; + }; + }; + + it("includes Generate JavaScript Bindings command for guests", () => { + const cmd = pkg.contributes.commands.find((c) => c.command === "wit-idl.generateGuestBindingsJavaScript"); + expect(cmd).toBeTruthy(); + expect(cmd?.title).toBe("Generate JavaScript Bindings"); + }); + + it("includes Generate JavaScript Bindings command for hosts", () => { + const cmd = pkg.contributes.commands.find((c) => c.command === "wit-idl.generateHostBindingsJavaScript"); + expect(cmd).toBeTruthy(); + expect(cmd?.title).toBe("Generate JavaScript Bindings"); + }); + + it("all guest binding commands use generateGuestBindings prefix", () => { + const guestCommands = pkg.contributes.commands.filter((c) => + c.command.startsWith("wit-idl.generateGuestBindings") + ); + expect(guestCommands.length).toBeGreaterThanOrEqual(7); + for (const cmd of guestCommands) { + expect(cmd.title).toMatch(/^Generate .+ Bindings$/); + } + }); + + it("guest JS command is in the generate guest bindings submenu", () => { + const submenu = pkg.contributes.menus["wit-idl.generateBindings.submenu"] || []; + expect(submenu.some((m) => m.command === "wit-idl.generateGuestBindingsJavaScript")).toBe(true); + }); + + it("host JS command is in the generate host bindings submenu", () => { + const submenu = pkg.contributes.menus["wit-idl.generateHostBindings.submenu"] || []; + expect(submenu.some((m) => m.command === "wit-idl.generateHostBindingsJavaScript")).toBe(true); + }); + + it("guest bindings submenu label includes 'Guest'", () => { + const submenu = pkg.contributes.submenus.find((s) => s.id === "wit-idl.generateBindings.submenu"); + expect(submenu).toBeTruthy(); + expect(submenu?.label).toContain("Guest"); + }); + + it("host bindings submenu label includes 'Host'", () => { + const submenu = pkg.contributes.submenus.find((s) => s.id === "wit-idl.generateHostBindings.submenu"); + expect(submenu).toBeTruthy(); + expect(submenu?.label).toContain("Host"); + }); + + it("documentation submenu exists with markdown command", () => { + const submenu = pkg.contributes.submenus.find((s) => s.id === "wit-idl.generateDocs.submenu"); + expect(submenu).toBeTruthy(); + expect(submenu?.label).toContain("Documentation"); + const docsMenu = pkg.contributes.menus["wit-idl.generateDocs.submenu"] || []; + expect(docsMenu.some((m) => m.command === "wit-idl.generateDocMarkdown")).toBe(true); + }); + + it("guest JS is in the command palette with correct when clause", () => { + const palette = pkg.contributes.menus.commandPalette || []; + const entry = palette.find((m) => m.command === "wit-idl.generateGuestBindingsJavaScript"); + expect(entry).toBeTruthy(); + expect(entry?.when).toMatch(/editorLangId == wit|witIdl\.isWasmComponent/); + }); + + it("host JS is in the command palette with correct when clause", () => { + const palette = pkg.contributes.menus.commandPalette || []; + const entry = palette.find((m) => m.command === "wit-idl.generateHostBindingsJavaScript"); + expect(entry).toBeTruthy(); + expect(entry?.when).toMatch(/editorLangId == wit|witIdl\.isWasmComponent/); + }); +}); + +describe("JavaScript Host Transpilation (from .wasm component)", () => { + it("should transpile a simple component into JS + .d.ts files", async () => { + const component = await buildComponentFromWit(TEST_WIT); + const result = await transpileJsHost(component, { name: "test-world" }); + + expect(result.files).toBeDefined(); + const filenames = Object.keys(result.files); + expect(filenames.length).toBeGreaterThan(0); + + const hasJs = filenames.some((f) => f.endsWith(".js") || f.endsWith(".mjs")); + const hasDts = filenames.some((f) => f.endsWith(".d.ts")); + expect(hasJs).toBe(true); + expect(hasDts).toBe(true); + + console.log(`✅ Host transpile: Generated ${filenames.length} file(s): ${filenames.join(", ")}`); + }); + + it("should produce a runnable JS module with imports/exports metadata", async () => { + const component = await buildComponentFromWit(TEST_WIT); + const result = await transpileJsHost(component, { name: "test-world" }); + + // The test WIT exports greet + expect(result.exports.length).toBeGreaterThan(0); + expect(result.exports).toContainEqual(["greet", "function"]); + + // No imports in this simple world + expect(result.imports).toEqual([]); + + // The JS file should contain executable module code (not just types) + const jsFile = Object.keys(result.files).find((f) => f.endsWith(".js") || f.endsWith(".mjs")); + expect(jsFile).toBeDefined(); + if (jsFile) { + const jsContent = new TextDecoder().decode(result.files[jsFile]); + expect(jsContent.length).toBeGreaterThan(100); + } + }); + + it("should handle complex WIT with imports and interfaces", async () => { + const component = await buildComponentFromWit(COMPLEX_WIT); + const result = await transpileJsHost(component, { name: "app" }); + + const filenames = Object.keys(result.files); + expect(filenames.length).toBeGreaterThan(0); + + // The complex WIT imports logger + expect(result.imports.length).toBeGreaterThan(0); + + // Exports run + expect(result.exports).toContainEqual(["run", "function"]); + + console.log( + `✅ Host transpile complex: ${filenames.length} file(s), ` + + `${result.imports.length} import(s), ${result.exports.length} export(s)` + ); + }); + + it("should produce substantially more content than type-only generation", async () => { + const component = await buildComponentFromWit(TEST_WIT); + const transpileResult = await transpileJsHost(component, { name: "test-world" }); + const typesResult = await generateJsBindings({ witContent: TEST_WIT }, "host"); + + // Full transpilation produces JS runtime code, which is much larger + const transpileSize = Object.values(transpileResult.files).reduce((sum, f) => sum + f.length, 0); + const typesSize = Object.values(typesResult.files).reduce((sum, f) => sum + f.length, 0); + + expect(transpileSize).toBeGreaterThan(typesSize); + + console.log(`✅ Transpile size: ${transpileSize} bytes vs types-only: ${typesSize} bytes`); + }); + + it("should transpile from a .wasm file path", async () => { + const component = await buildComponentFromWit(TEST_WIT); + const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "wit-idl-transpile-")); + const wasmFile = path.join(tmpDir, "test-world.wasm"); + fs.writeFileSync(wasmFile, component); + + try { + const result = await transpileJsHostFromPath(wasmFile); + + expect(result.files).toBeDefined(); + const filenames = Object.keys(result.files); + expect(filenames.length).toBeGreaterThan(0); + + const hasJs = filenames.some((f) => f.endsWith(".js") || f.endsWith(".mjs")); + expect(hasJs).toBe(true); + + // Name should be derived from filename + const mainJs = filenames.find((f) => f.endsWith(".js") || f.endsWith(".mjs")); + expect(mainJs).toContain("test-world"); + + console.log(`✅ Host transpile from path: Generated ${filenames.length} file(s)`); + } finally { + fs.rmSync(tmpDir, { recursive: true, force: true }); + } + }); + + it("should use custom name when provided", async () => { + const component = await buildComponentFromWit(TEST_WIT); + const result = await transpileJsHost(component, { name: "my-custom-name" }); + + const filenames = Object.keys(result.files); + const mainJs = filenames.find((f) => f.endsWith(".js") || f.endsWith(".mjs")); + expect(mainJs).toContain("my-custom-name"); + }); + + it("should default name to 'component' when no name given", async () => { + const component = await buildComponentFromWit(TEST_WIT); + const result = await transpileJsHost(component); + + const filenames = Object.keys(result.files); + const mainJs = filenames.find((f) => f.endsWith(".js") || f.endsWith(".mjs")); + expect(mainJs).toContain("component"); + }); + + it("should reject invalid wasm bytes", async () => { + const badBytes = new Uint8Array([0, 1, 2, 3]); + await expect(transpileJsHost(badBytes)).rejects.toThrow(); + }); +}); diff --git a/tests/test-wit-validator.js b/tests/test-wit-validator.js deleted file mode 100644 index e69de29..0000000 diff --git a/tests/validator-methods.test.ts b/tests/validator-methods.test.ts new file mode 100644 index 0000000..49831cb --- /dev/null +++ b/tests/validator-methods.test.ts @@ -0,0 +1,318 @@ +import { describe, it, expect, vi, beforeEach, afterEach } from "vitest"; + +// Mock VS Code API +vi.mock("vscode", () => { + class MockPosition { + constructor( + public line: number, + public character: number + ) {} + } + class MockRange { + constructor( + public start: MockPosition, + public end: MockPosition + ) {} + } + class MockLocation { + constructor( + public uri: unknown, + public range: unknown + ) {} + } + class MockDiagnostic { + source: string | undefined; + code: string | undefined; + relatedInformation: unknown[] | undefined; + constructor( + public range: unknown, + public message: string, + public severity: number + ) {} + } + class MockDiagnosticRelatedInformation { + constructor( + public location: unknown, + public message: string + ) {} + } + return { + languages: { + createDiagnosticCollection: vi.fn(() => ({ + delete: vi.fn(), + clear: vi.fn(), + set: vi.fn(), + dispose: vi.fn(), + get: vi.fn(() => []), + })), + }, + DiagnosticCollection: vi.fn(), + DiagnosticSeverity: { Error: 0, Warning: 1, Information: 2, Hint: 3 }, + Diagnostic: MockDiagnostic, + Range: MockRange, + Position: MockPosition, + Location: MockLocation, + DiagnosticRelatedInformation: MockDiagnosticRelatedInformation, + extensions: { + getExtension: vi.fn(() => ({ + extensionPath: "/mock/extension/path", + })), + }, + }; +}); + +// Mock the WASM utilities +vi.mock("../src/wasmUtils.js", () => ({ + validateWitSyntaxDetailedFromWasm: vi.fn(), +})); + +import { WitSyntaxValidator } from "../src/validator.js"; + +describe("WitSyntaxValidator — parseWitBindgenError", () => { + let validator: WitSyntaxValidator; + + beforeEach(() => { + validator = new WitSyntaxValidator(); + }); + + afterEach(() => { + validator.dispose(); + }); + + describe("parseWitBindgenError", () => { + it("should parse error with location information", () => { + const errorMessage = `// failed to parse WIT +// +// Caused by: +// expected '{', found keyword \`interface\` +// --> /test/file.wit:3:1 +// | +// 3 | interface test { +// | ^`; + + const result = validator.parseWitBindgenError(errorMessage, "/test/file.wit"); + expect(result).not.toBeNull(); + expect(result!.mainError).toBe("WIT binding generation error"); + expect(result!.row).toBe(3); + expect(result!.column).toBe(1); + }); + + it("should parse undefined type errors", () => { + const errorMessage = "// undefined type `MyType` in generated bindings"; + + const result = validator.parseWitBindgenError(errorMessage, "/test/file.wit"); + expect(result).not.toBeNull(); + expect(result!.mainError).toBe("Undefined type in bindings"); + expect(result!.detailedError).toContain("MyType"); + }); + + it("should parse failed to resolve errors", () => { + const errorMessage = "failed to resolve interface 'my-interface'"; + + const result = validator.parseWitBindgenError(errorMessage, "/test/file.wit"); + expect(result).not.toBeNull(); + expect(result!.mainError).toBe("Binding resolution error"); + expect(result!.detailedError).toContain("failed to resolve"); + }); + + it("should parse expected/found syntax errors", () => { + const errorMessage = "expected '{' found '}'"; + + const result = validator.parseWitBindgenError(errorMessage, "/test/file.wit"); + expect(result).not.toBeNull(); + expect(result!.mainError).toBe("Binding syntax error"); + }); + + it("should parse unsupported feature errors", () => { + const errorMessage = "unsupported feature: async functions"; + + const result = validator.parseWitBindgenError(errorMessage, "/test/file.wit"); + expect(result).not.toBeNull(); + expect(result!.mainError).toBe("Unsupported feature"); + }); + + it("should handle generic errors as fallback", () => { + const errorMessage = "something went wrong with binding generation"; + + const result = validator.parseWitBindgenError(errorMessage, "/test/file.wit"); + expect(result).not.toBeNull(); + expect(result!.mainError).toBe("Binding generation failed"); + expect(result!.detailedError).toBe("something went wrong with binding generation"); + expect(result!.filePath).toBe("/test/file.wit"); + expect(result!.row).toBe(1); + expect(result!.column).toBe(1); + }); + + it("should strip comment markers from error messages", () => { + const errorMessage = "// Error in binding\n// generation process"; + + const result = validator.parseWitBindgenError(errorMessage, "/test/file.wit"); + expect(result).not.toBeNull(); + expect(result!.detailedError).not.toContain("//"); + }); + + it("should handle empty error message", () => { + const result = validator.parseWitBindgenError("", "/test/file.wit"); + expect(result).not.toBeNull(); + expect(result!.mainError).toBe("Binding generation failed"); + }); + }); + + describe("createDiagnosticFromError", () => { + it("should create a diagnostic with correct range", () => { + const errorInfo = { + mainError: "Test error", + detailedError: "Detailed test error", + filePath: "/test/file.wit", + row: 5, + column: 10, + }; + + const mockDocument = { + lineAt: vi.fn(() => ({ text: "some wit content here" })), + lineCount: 100, + uri: { fsPath: "/test/file.wit" }, + } as unknown as import("vscode").TextDocument; + + const diagnostic = validator.createDiagnosticFromError(errorInfo, mockDocument); + + expect(diagnostic).toBeDefined(); + expect(diagnostic.message).toBe("Detailed test error"); + expect(diagnostic.source).toBe("wit-syntax"); + expect(diagnostic.code).toBe("wit-parse-error"); + }); + + it("should use mainError as message when detailedError is absent", () => { + const errorInfo = { + mainError: "Main error only", + filePath: "/test/file.wit", + row: 1, + column: 1, + }; + + const mockDocument = { + lineAt: vi.fn(() => ({ text: "content" })), + lineCount: 10, + uri: { fsPath: "/test/file.wit" }, + } as unknown as import("vscode").TextDocument; + + const diagnostic = validator.createDiagnosticFromError(errorInfo, mockDocument); + expect(diagnostic.message).toBe("Main error only"); + }); + + it("should add related information when both mainError and detailedError exist", () => { + const errorInfo = { + mainError: "Context info", + detailedError: "The detailed message", + filePath: "/test/file.wit", + row: 2, + column: 3, + }; + + const mockDocument = { + lineAt: vi.fn(() => ({ text: "a line of wit" })), + lineCount: 50, + uri: { fsPath: "/test/file.wit" }, + } as unknown as import("vscode").TextDocument; + + const diagnostic = validator.createDiagnosticFromError(errorInfo, mockDocument); + expect(diagnostic.relatedInformation).toBeDefined(); + expect(diagnostic.relatedInformation).toHaveLength(1); + }); + + it("should clamp row and column to valid range", () => { + const errorInfo = { + mainError: "Error", + detailedError: "Details", + filePath: "/test/file.wit", + row: 0, // below 1 + column: 0, // below 1 + }; + + const mockDocument = { + lineAt: vi.fn(() => ({ text: "content" })), + lineCount: 5, + uri: { fsPath: "/test/file.wit" }, + } as unknown as import("vscode").TextDocument; + + const diagnostic = validator.createDiagnosticFromError(errorInfo, mockDocument); + // Should not throw even with row/column 0 + expect(diagnostic).toBeDefined(); + }); + + it("should handle row exceeding document line count", () => { + const errorInfo = { + mainError: "Error", + detailedError: "Details", + filePath: "/test/file.wit", + row: 999, + column: 1, + }; + + const mockDocument = { + lineAt: vi.fn(() => ({ text: "last line" })), + lineCount: 5, + uri: { fsPath: "/test/file.wit" }, + } as unknown as import("vscode").TextDocument; + + const diagnostic = validator.createDiagnosticFromError(errorInfo, mockDocument); + expect(diagnostic).toBeDefined(); + // lineAt should be called with clamped value + expect(mockDocument.lineAt).toHaveBeenCalledWith(4); // min(998, 4) + }); + }); + + describe("validate — parseWitParserError paths", () => { + it("should parse wit-parser error with location info", async () => { + const { validateWitSyntaxDetailedFromWasm } = await import("../src/wasmUtils.js"); + vi.mocked(validateWitSyntaxDetailedFromWasm).mockResolvedValueOnce({ + valid: false, + error: "expected '}'\n --> /test/file.wit:10:5\n |\n10 | bad syntax", + errorType: "parsing", + }); + + const result = await validator.validate("/test/file.wit", "bad content"); + expect(result).not.toBeNull(); + expect(result!.row).toBe(10); + expect(result!.column).toBe(5); + }); + + it("should handle validation result with no error message", async () => { + const { validateWitSyntaxDetailedFromWasm } = await import("../src/wasmUtils.js"); + vi.mocked(validateWitSyntaxDetailedFromWasm).mockResolvedValueOnce({ + valid: false, + error: undefined, + errorType: undefined, + }); + + const result = await validator.validate("/test/file.wit", "bad content"); + expect(result).not.toBeNull(); + expect(result!.mainError).toBe("WIT syntax validation failed"); + }); + + it("should handle thrown error without stack", async () => { + const { validateWitSyntaxDetailedFromWasm } = await import("../src/wasmUtils.js"); + vi.mocked(validateWitSyntaxDetailedFromWasm).mockRejectedValueOnce("string error"); + + const result = await validator.validate("/test/file.wit", "bad content"); + expect(result).not.toBeNull(); + expect(result!.mainError).toBe("WIT validation error"); + expect(result!.detailedError).toBe("string error"); + }); + }); + + describe("workspaceCheck flag", () => { + it("should prevent clearing diagnostics during workspace check", () => { + const collection = validator.getDiagnosticCollection(); + const mockUri = {} as import("vscode").Uri; + + validator.workspaceCheck = true; + validator.clearDiagnostics(mockUri); + expect(collection.delete).not.toHaveBeenCalled(); + + validator.workspaceCheck = false; + validator.clearDiagnostics(mockUri); + expect(collection.delete).toHaveBeenCalledWith(mockUri); + }); + }); +}); diff --git a/tests/wasmDetection-fs.test.ts b/tests/wasmDetection-fs.test.ts new file mode 100644 index 0000000..b8d70fc --- /dev/null +++ b/tests/wasmDetection-fs.test.ts @@ -0,0 +1,125 @@ +import { describe, it, expect, afterEach } from "vitest"; +import * as fs from "node:fs"; +import * as os from "node:os"; +import * as path from "node:path"; +import { readWasmHeader, isWasmComponentFile, isWasmComponentVersion } from "../src/wasmDetection.js"; + +/** + * Build an 8-byte WASM header buffer with the given version u32 (LE). + */ +function buildWasmHeader(version: number): Buffer { + const buf = Buffer.alloc(8); + // magic: \0asm + buf[0] = 0x00; + buf[1] = 0x61; + buf[2] = 0x73; + buf[3] = 0x6d; + buf.writeUInt32LE(version, 4); + return buf; +} + +describe("wasmDetection — file-based tests", () => { + const tmpFiles: string[] = []; + + function writeTmpWasm(content: Buffer): string { + const tmpDir = os.tmpdir(); + const filePath = path.join(tmpDir, `test-${Date.now()}-${Math.random().toString(36).slice(2)}.wasm`); + fs.writeFileSync(filePath, content); + tmpFiles.push(filePath); + return filePath; + } + + afterEach(() => { + for (const f of tmpFiles) { + try { + fs.unlinkSync(f); + } catch { + // ignore + } + } + tmpFiles.length = 0; + }); + + describe("readWasmHeader", () => { + it("should read a valid core module header (version 1)", async () => { + const filePath = writeTmpWasm(buildWasmHeader(1)); + const result = await readWasmHeader(filePath); + expect(result.magicOk).toBe(true); + expect(result.version).toBe(1); + }); + + it("should read a valid component header (version 65549)", async () => { + const filePath = writeTmpWasm(buildWasmHeader(65549)); + const result = await readWasmHeader(filePath); + expect(result.magicOk).toBe(true); + expect(result.version).toBe(65549); + }); + + it("should return magicOk=false for non-WASM file", async () => { + const filePath = writeTmpWasm(Buffer.from("not a wasm file!")); + const result = await readWasmHeader(filePath); + expect(result.magicOk).toBe(false); + }); + + it("should return magicOk=false for file shorter than 8 bytes", async () => { + const filePath = writeTmpWasm(Buffer.from([0x00, 0x61, 0x73])); + const result = await readWasmHeader(filePath); + expect(result.magicOk).toBe(false); + expect(result.version).toBe(0); + }); + + it("should return magicOk=false for non-existent file", async () => { + const result = await readWasmHeader("/nonexistent/path/to/file.wasm"); + expect(result.magicOk).toBe(false); + expect(result.version).toBe(0); + }); + + it("should handle empty file", async () => { + const filePath = writeTmpWasm(Buffer.alloc(0)); + const result = await readWasmHeader(filePath); + expect(result.magicOk).toBe(false); + expect(result.version).toBe(0); + }); + }); + + describe("isWasmComponentFile", () => { + it("should return true for a component WASM file", async () => { + const filePath = writeTmpWasm(buildWasmHeader(65549)); + expect(await isWasmComponentFile(filePath)).toBe(true); + }); + + it("should return false for a core WASM module", async () => { + const filePath = writeTmpWasm(buildWasmHeader(1)); + expect(await isWasmComponentFile(filePath)).toBe(false); + }); + + it("should return false for a non-WASM file", async () => { + const filePath = writeTmpWasm(Buffer.from("hello world")); + expect(await isWasmComponentFile(filePath)).toBe(false); + }); + + it("should return false for non-existent file", async () => { + expect(await isWasmComponentFile("/does/not/exist.wasm")).toBe(false); + }); + }); + + describe("isWasmComponentVersion — additional edge cases", () => { + it("should return false for version 0", () => { + expect(isWasmComponentVersion(0)).toBe(false); + }); + + it("should return true for a version with layer=1, version=13 (0x0001000d = 65549)", () => { + expect(isWasmComponentVersion(0x0001_000d)).toBe(true); + }); + + it("should return false for large version with layer=0", () => { + // layer=0, version=0xFFFF + expect(isWasmComponentVersion(0x0000_ffff)).toBe(false); + }); + + it("should return true for hypothetical future component versions (layer=1)", () => { + // layer=1, version=0x0100 + expect(isWasmComponentVersion(0x0001_0100)).toBe(true); + }); + }); +}); diff --git a/tests/wasmUtils.test.ts b/tests/wasmUtils.test.ts new file mode 100644 index 0000000..a666371 --- /dev/null +++ b/tests/wasmUtils.test.ts @@ -0,0 +1,168 @@ +import { describe, it, expect, vi, beforeEach } from "vitest"; + +// Mock vscode before importing wasmUtils +vi.mock("vscode", () => ({ + extensions: { + getExtension: vi.fn(() => ({ + extensionUri: { fsPath: "/mock/extension" }, + })), + }, + workspace: { + fs: { + stat: vi.fn(), + readFile: vi.fn(), + }, + }, + Uri: { + joinPath: vi.fn((_base: unknown, ...segments: string[]) => ({ + fsPath: `/mock/extension/${segments.join("/")}`, + })), + }, +})); + +// Mock the wit-bindgen-wasm module +vi.mock("wit-bindgen-wasm", () => { + class MockWitBindgen { + version(): string { + return "0.42.0-mock"; + } + validateWitSyntax(content: string): boolean { + return content.includes("package"); + } + validateWitSyntaxDetailed(content: string): string { + if (content.includes("package")) { + return JSON.stringify({ valid: true }); + } + return JSON.stringify({ valid: false, error: "expected package", errorType: "parsing" }); + } + extractInterfaces(): string { + return "my-interface, another-interface"; + } + generateBindings(): string { + return JSON.stringify({ "lib.rs": "// generated" }); + } + free(): void {} + } + return { + default: vi.fn(), + WitBindgen: MockWitBindgen, + }; +}); + +import { + isWitFileExtensionFromWasm, + validateWitSyntaxFromWasm, + getWitBindgenVersionFromWasm, + createWitBindgenInstance, + extractInterfacesFromWasm, + generateBindingsFromWasm, + validateWitSyntaxDetailedFromWasm, + initializeWasm, +} from "../src/wasmUtils.js"; + +describe("wasmUtils", () => { + beforeEach(() => { + vi.clearAllMocks(); + }); + + describe("isWitFileExtensionFromWasm", () => { + it("should return true for .wit files", async () => { + expect(await isWitFileExtensionFromWasm("test.wit")).toBe(true); + }); + + it("should return true for .WIT files (case-insensitive)", async () => { + expect(await isWitFileExtensionFromWasm("test.WIT")).toBe(true); + }); + + it("should return false for non-.wit files", async () => { + expect(await isWitFileExtensionFromWasm("test.rs")).toBe(false); + }); + + it("should return false for files ending with .wits", async () => { + expect(await isWitFileExtensionFromWasm("test.wits")).toBe(false); + }); + + it("should return false for empty string", async () => { + expect(await isWitFileExtensionFromWasm("")).toBe(false); + }); + + it("should return true for paths with directories", async () => { + expect(await isWitFileExtensionFromWasm("/path/to/file.wit")).toBe(true); + }); + }); + + describe("initializeWasm", () => { + it("should initialize the WASM module", async () => { + await expect(initializeWasm()).resolves.toBeUndefined(); + }); + + it("should not re-initialize if already initialized", async () => { + await initializeWasm(); + await initializeWasm(); + // Should not throw on double init + }); + }); + + describe("getWitBindgenVersionFromWasm", () => { + it("should return a version string", async () => { + const version = await getWitBindgenVersionFromWasm(); + expect(typeof version).toBe("string"); + expect(version).toBe("0.42.0-mock"); + }); + }); + + describe("createWitBindgenInstance", () => { + it("should return a WitBindgen instance", async () => { + const instance = await createWitBindgenInstance(); + expect(instance).toBeDefined(); + expect(typeof instance.version).toBe("function"); + }); + }); + + describe("validateWitSyntaxFromWasm", () => { + it("should return true for valid WIT content", async () => { + const result = await validateWitSyntaxFromWasm("package foo:bar;"); + expect(result).toBe(true); + }); + + it("should return false for invalid WIT content", async () => { + const result = await validateWitSyntaxFromWasm("not valid wit"); + expect(result).toBe(false); + }); + }); + + describe("validateWitSyntaxDetailedFromWasm", () => { + it("should return valid result for valid content", async () => { + const result = await validateWitSyntaxDetailedFromWasm("package foo:bar;"); + expect(result.valid).toBe(true); + }); + + it("should return error details for invalid content", async () => { + const result = await validateWitSyntaxDetailedFromWasm("not valid wit"); + expect(result.valid).toBe(false); + expect(result.error).toBeDefined(); + expect(result.errorType).toBe("parsing"); + }); + }); + + describe("extractInterfacesFromWasm", () => { + it("should return comma-separated interface names", async () => { + const result = await extractInterfacesFromWasm("package foo:bar; interface my-interface {}"); + expect(result).toBe("my-interface, another-interface"); + }); + }); + + describe("generateBindingsFromWasm", () => { + it("should return a map of generated files", async () => { + const result = await generateBindingsFromWasm("package foo:bar; world w {}", "rust"); + expect(result).toBeDefined(); + expect(typeof result).toBe("object"); + expect(result["lib.rs"]).toBe("// generated"); + }); + + it("should accept optional world name", async () => { + const result = await generateBindingsFromWasm("package foo:bar; world w {}", "rust", "w"); + expect(result).toBeDefined(); + }); + }); +}); diff --git a/vitest.config.ts b/vitest.config.ts index f59171d..08eec59 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -7,6 +7,13 @@ export default defineConfig({ environment: "node", include: ["src/**/*.{test,spec}.{js,ts}", "tests/**/*.{test,spec}.{js,ts}"], exclude: ["node_modules", "dist", "out", "*.vsix"], + coverage: { + provider: "v8", + reporter: ["text", "lcov", "json-summary"], + reportsDirectory: "./coverage", + include: ["src/**/*.ts"], + exclude: ["src/**/*.test.ts", "src/**/*.spec.ts"], + }, }, resolve: { alias: { diff --git a/wit-bindgen-wasm/Cargo.lock b/wit-bindgen-wasm/Cargo.lock index fa650dc..6bff5f5 100644 --- a/wit-bindgen-wasm/Cargo.lock +++ b/wit-bindgen-wasm/Cargo.lock @@ -91,9 +91,9 @@ checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" [[package]] name = "js-sys" -version = "0.3.90" +version = "0.3.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14dc6f6450b3f6d4ed5b16327f38fed626d375a886159ca555bd7822c0c3a5a6" +checksum = "b49715b7073f385ba4bc528e5747d02e66cb39c6146efb66b781f131f0fb399c" dependencies = [ "once_cell", "wasm-bindgen", @@ -295,9 +295,9 @@ checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] name = "wasm-bindgen" -version = "0.2.113" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60722a937f594b7fde9adb894d7c092fc1bb6612897c46368d18e7a20208eff2" +checksum = "6532f9a5c1ece3798cb1c2cfdba640b9b3ba884f5db45973a6f442510a87d38e" dependencies = [ "cfg-if", "once_cell", @@ -308,9 +308,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.113" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fac8c6395094b6b91c4af293f4c79371c163f9a6f56184d2c9a85f5a95f3950" +checksum = "18a2d50fcf105fb33bb15f00e7a77b772945a2ee45dcf454961fd843e74c18e6" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -318,9 +318,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.113" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab3fabce6159dc20728033842636887e4877688ae94382766e00b180abac9d60" +checksum = "03ce4caeaac547cdf713d280eda22a730824dd11e6b8c3ca9e42247b25c631e3" dependencies = [ "bumpalo", "proc-macro2", @@ -331,9 +331,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.113" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de0e091bdb824da87dc01d967388880d017a0a9bc4f3bdc0d86ee9f9336e3bb5" +checksum = "75a326b8c223ee17883a4251907455a2431acc2791c98c26279376490c378c16" dependencies = [ "unicode-ident", ] @@ -375,9 +375,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.90" +version = "0.3.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "705eceb4ce901230f8625bd1d665128056ccbe4b7408faa625eec1ba80f59a97" +checksum = "854ba17bb104abfb26ba36da9729addc7ce7f06f5c0f90f3c391f8461cca21f9" dependencies = [ "js-sys", "wasm-bindgen", diff --git a/wit-bindgen-wasm/Cargo.toml b/wit-bindgen-wasm/Cargo.toml index 007d1e0..60c5f2c 100644 --- a/wit-bindgen-wasm/Cargo.toml +++ b/wit-bindgen-wasm/Cargo.toml @@ -13,7 +13,7 @@ default = ["console_error_panic_hook"] console_error_panic_hook = ["dep:console_error_panic_hook"] [dependencies] -wasm-bindgen = "0.2.113" +wasm-bindgen = "0.2.114" console_error_panic_hook = { version = "0.1.7", optional = true } serde_json = "1.0" wasmparser = { version = "0.245", features = ["component-model"] } @@ -30,7 +30,7 @@ wit-component = "0.245" anyhow = "1.0.102" [dependencies.web-sys] -version = "0.3.90" +version = "0.3.91" features = [ "console", ]