From 209ba66993f979f30c4deb66f550403f73ff393e Mon Sep 17 00:00:00 2001 From: Minsu Kim Date: Sun, 10 Nov 2024 07:27:51 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=80=20feat:=20add=20swagger=20ui/redoc?= =?UTF-8?q?=20documentation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintrc | 20 +++++++ .github/workflows/deploy.yml | 45 +++++++++++++++ .gitignore | 24 ++++++++ .prettierignore | 7 +++ .prettierrc | 12 ++++ bun.lockb | Bin 0 -> 165389 bytes index.html | 29 ++++++++++ package.json | 41 ++++++++++++++ public/404.html | 31 ++++++++++ public/swagger-config.yaml | 14 +++++ src/index.css | 28 +++++++++ src/main.tsx | 31 ++++++++++ src/routes/index.ts | 2 + src/routes/redocly.tsx | 107 +++++++++++++++++++++++++++++++++++ src/routes/swagger.tsx | 16 ++++++ src/vite-env.d.ts | 1 + tsconfig.json | 22 +++++++ tsconfig.node.json | 9 +++ vite.config.ts | 50 ++++++++++++++++ 19 files changed, 489 insertions(+) create mode 100644 .eslintrc create mode 100644 .github/workflows/deploy.yml create mode 100644 .gitignore create mode 100644 .prettierignore create mode 100644 .prettierrc create mode 100644 bun.lockb create mode 100644 index.html create mode 100644 package.json create mode 100644 public/404.html create mode 100644 public/swagger-config.yaml create mode 100644 src/index.css create mode 100644 src/main.tsx create mode 100644 src/routes/index.ts create mode 100644 src/routes/redocly.tsx create mode 100644 src/routes/swagger.tsx create mode 100644 src/vite-env.d.ts create mode 100644 tsconfig.json create mode 100644 tsconfig.node.json create mode 100644 vite.config.ts diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 0000000..4fe2355 --- /dev/null +++ b/.eslintrc @@ -0,0 +1,20 @@ +{ + "root": true, + "env": { "browser": true, "es2020": true }, + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:react-hooks/recommended", + "plugin:prettier/recommended" + ], + "ignorePatterns": ["dist", ".eslintrc"], + "parser": "@typescript-eslint/parser", + "plugins": ["react-refresh", "prettier"], + "rules": { + "react-refresh/only-export-components": [ + "warn", + { "allowConstantExport": true } + ], + "prettier/prettier": "error" + } +} diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..da74ef7 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,45 @@ +name: Deploy to GitHub Pages + +on: + push: + branches: ['web'] + + workflow_dispatch: + +permissions: + contents: read + pages: write + id-token: write + +concurrency: + group: 'pages' + cancel-in-progress: false + +jobs: + deploy: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup bun + uses: oven-sh/setup-bun@v1 + + - name: Setup Pages + uses: actions/configure-pages@v4 + + - name: Install Required Libraries + run: bun install + + - name: Build + run: bun run build + + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + path: 'dist' + + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..56e9834 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,7 @@ +# dependencies +/node_modules + +# production +/dist + +*.js \ No newline at end of file diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..f616b44 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,12 @@ +{ + "printWidth": 120, + "tabWidth": 2, + "useTabs": false, + "semi": false, + "singleQuote": true, + "trailingComma": "all", + "bracketSpacing": true, + "arrowParens": "avoid", + "proseWrap": "never", + "endOfLine": "auto" +} diff --git a/bun.lockb b/bun.lockb new file mode 100644 index 0000000000000000000000000000000000000000..a6bf4a70488467f4424c2e0011daf91764227ca2 GIT binary patch literal 165389 zcmeFZ2{@Hq7e9RH5DFP9WlAWLp}|mwWTs?Jrp)t@Lq#g2(mbg|36+YHLZv~2MwMs~ zi8K$le0YY+Fn?{l6M_?+PTTEP(KTQ?%#h|{Ehei_zd;%y6=<6Ns9~K<%F9Yq! z7X-w(zCe7EfO`hhXu|-b{rw_+!GCz9&td?YZ)CK;S_p$y4Jp8QF9Bk|;=H2+Aw1d_ z2moSON(DB|e5q^nVKw?fEl&y~Diy{C&fMV}rrY zI|vf1o``QLsBtb;}Ohww*nvYx&jdM8bhHcAjS{t0A^qiEq)|3o)DSE4<$^eDDP;7e-l;zkmB70#JFRlgK-+tqGBWBd?Wq*CFPj?o zj*0eGP-ey#!ibE(4Qd3GQLkeR6<27WnqP1YBAB+fpG6oeB`Xi{t!Ug*lFzs?5ASf-?HO2#D+RKIq}R zsRTrxHzO_r_k&iraC{Zjn7oHj#`O`y@P!WehGO2L{TI{x{C#2rF%B3jl&f&zcq|N# z>Ca;T!+)WFL<}Q3GAsLEenWMG>$QYck^| z`=CF=CpH)sI(;%Tt`C!#^SPPAYQSN@FQ>{!0dXE=0Ez*w1jPPCQ8*6}_d#<&F~F&S zsILTwb|fj}0z_Vy7Smq?AkM!^K-4b<#P)qu`vyR?8wZGbQQk2@m~ z`&|!+dG~=$&BvPoyK#7IOmGvx9fElNVA=5rDAddH6;|m)+q?fh@^f1m)BN}ZaU>o2l!25tWFB~cCn8ECyCFo8KdS4aYsb<1I=S5vz_>xO7SL8JO>kIJY-#{LHuY}&y>ka1nkd8w70K6 z1MW9ey}lVU51Rn7J={M!&>wQF4(-^#V1`=%QjRxg+L48N9LE4}M$7^l&bwF!F8Mxa z7lZnX7R>cH)RH;>g(-c1+;l)fU|k{NT7{iA#y7}2EELKNtH0){T0oe0pd7@H`y}K6 z&LMdJjDQL5O`}6SY-NdLUwc21>36*iQ=hC4vM%nmfQD%Gf`DI8Q~y&}jQSneDqMwD)4phcN$z5ui%5 zfHLwGDO3l77GWlwZIdG@-jfYAGrc50$KwK0U81J&%3|~xWm$D+EB)MiIdPf zj6wV0!z`2eN%r-B+s~ch9*p*s!4A&b7ARwU(ZS)--T^dPsDB*HE?BqV3-w^`#l*mk z+n>?DT>vhK^@lq`0_Y;op8=TxU2(97dF_UJjE@h>*q>*xX=9n(7vK~a6CE7k-|NA& zzbGgeP7O3#FvEW_n4z^n0rPP_nA(?NUsHpiyhHlKqH)VH$Da{GqruT4@io}Nd2jz^&INXFa7S4JZQTf7^%t?cA)ogqhzeum?w@#ED=B^Bux~dkDm}49Ym4y#Qqa zS1e=t4Ftq}!vN}$_kKAuZ*ksXxE<17K^gP&Dv_D5IzY_B6+m&o(}3819rSRVN&zvC zd|(gP_eq#GI8VeNPuOow8q*H=>W>d}`uXHJ=VA)8{um(UA#ik)Z@1?8;K@Bh&%10t z?%A94##n#1WTsc{(N2eZAxD;snAQ`#+A&~rOI_2*%~#U6A1z4SIYUde_0U@3+FITy z`xkkkX+FoC&Gt6t=MF#n^-E&UcLj!%S!+g`tG|berMq`kWrq!4lIp{K(KVqb+!<>u zewG{jy_p7C-*M_|= zrv%qt%|0)u`r-aGms{$&*}FDsg!GQ{ST|F2!>0D<`Pzw{-}M8l{SsD(j5Ybd_2E@{ z%*Ea?uA-dWux8o;J4DA z$ASwU-WDsD{1H~sJIigc*9hel?+4jhbDZvXjE#>R<~m#ba_-2=3UQwWWA%-O2n7eo4XHWpOGGvEHd)y&Joo*wfj|?*2P+mx6%uER=2A(W#(DkhoT8} zD$9@P6iFC(HhIZ!7txGsOwU#;Ocs=%c3F0lgok(8nG6N{HMNB@bFBm%n%rKvH6{)z z($~FO6~80zagfYU&z1LFB!7-Ey>RUQ#-aJu)q3>ZLF+aS^@x;AY`GxUedOJ0Lk;!p zr&q6^e=+N*duE-WN7`VOX!}=gn_hDp$Q&7%4ehn4vIw(OlB^Nj2BVvo~OF|N0j z1rx8itFB!&-oR&#wh)hp+ooV{EaJ%3Z|W0srKSsl!*H_ z=fpNIkGdYwj!~i~MU9TG2v9G%fA-GCy7|kcBl;fX%Q^)1JX)dd70avsjK@%ClJ)EE zlPks#4shAfDdjrb^y;m)(q&#Y3vLt{?@C|nEpTObeU);;!tej=&&>@9Lc_TqE*8mX z8$ROcgFuM`6E3$uuYSPOvVCeqdg0Kjm*=C>H-3Jqm&xTCV^%lGV`=^r*JVS;{CH%= zZR%K+YF%;Yp-%I{CLOEFPOVI-#TrsZrCxR0obL4Aal2yn^@Y&uU?HheJBE3JSdNe9 zvxCldw`O|}E4ltiVfx^eajRE-_L#H2mr<#b{b6W^F~!l`%ZU8f?oA#w3xi|tn0Mt@w)TPb5U zwLz&?_!v*EkZy#igtevQY5SvN3hI^Aj^)eSO;0tPo$fk6@AZi9^hT2)`gM`k5F46r zXqxTwl~-mrcfXYww{Zn+@-wN*Yx_&CJS=^*$)aFP?aW78wQr202M;sn?^%3$bMo+& zovBT8!Wt}u56svyPV>OsQLV9Geq7Z4cFW(+Z$**+T@_v1vV9>7W8;3hNn04M<6mRd zT%EbAQffi?=^?hT6-p}ksI^6bRWlH@+R&gPtxPiF~4 z3NRG(EyoNon0jdAt<|%%cQzNc&F5Ogy{^j7>2qq_t1+5KN* z>Y`k4O-f&B*7p$-5oCPpzije5ll}62oJQF@ zb@>RZxc8-X4Tk5IeG~By{W0WFy81(Q z-d7R7eg5TElRXD(XMZN^Lep@+V!{d$srK+InR8q0ZaK~G=&^~ zi^nU6O$nmU)pESUn}1bB-QverH}Maj@*-Zc8(eVE6izE#jN%uO_3SZwl z${(Y*JqbD^IJcovlFu(>RpB?`CCA;jE?@Gn^NHcoJ>OPdn(C~7WH-H4Ih*Wj6^~3h zl3JFGy}W$(v&g4sJ<0kY>moHeQ@JtKQc(DLjpl?Ow|+>++j6~1c$jE7*e)PC^`@V; z@=+bF@6~3nXDIT0o@sJr-KO5%rxZlmblxqo6&kj>rdW~gq0zchj5p?R zvI+a0wq1I)<&fBL^Do<`btr^v$Vg449|`gj(OcZIBj!VnVfR@d$shc}vf|xg^K<)Z zx0KCL5gj*)Yu$^Snw(+MSH``uCF>yf@UoCjKE-lCjrch)G4Gxy*4&KuFwqiJ6`)!*KrT6MIv$U(B6nwl=` zDbPBvyH_!Bg6c|tpC_Ig_9s-!HuP-$wA*diYtu5v#3jdu9s252|4da>);eBpp;b|| zxYfnQWuLWq^ehV|@hQ%-v~gRjvqLRSzC!e7@y+F1jRTJ;o;KQBWlcNxxnALpVv0qF zk;Jg$XX7_Tq(^+y{W>eeew4G6MUCwH;+x{@9zS=wef5C4FrSa?mg2TH`)fDr{PRMt zxN3Y6SbuWU#PZVVo@EuICLm4Us&Ts?|~$x5ef8f-mW5Mpqu3o;xCQ*Vyt|+YWy6zAS&$ zJbmP6a$i{MG~P_Dx}tN=vaoYcju#)f9lr6)KHCpwhbFi@b`WiQWF+x4UGDX=Y32J_` z^0o}SluS!VSY>Hoz3)?Mul_Z@aSnXfOC`l#+l))KxHLn&AXw^{^ODzd;s?!g+I33t zYMz7gs1W+lt)`A5DRt(;GtC-=_2249Z?TH-&EB?1NlsE*Ho>W}z41Zx36KSxe@NaKXl;R zyDLkhc0am(|HICrTB!v250UA2g_ot;?3~k;b8y~`1ou-Tu0E-*{`s6&kyx0}Ow*tO4@NwQ?4rSRiK=|oEGN$|^ zmDK;v4AFZG{OK(G-|!n?!%{TtplvMq#f0(@M* z=vM(QPUBw!d?Vl!d+d$@(QgI58So(u{lY0f9bTg2{R7^K_OD%HmooRSK=cN|O>+kD z@qH`yozwoC03Yw)WbfuQ{utmJ0iVo&PRG9)__+VUGU^vj<5z-7gM1P{r+gpaI|HBH zxT!Gz+N(|j-vIdR=Ix*SZs6nj1;_JG#?J^|+T;8q^MT}n`1v;^`m2DC`ycin{ge8C zoNH%MZ*y&Oc7Zknq<4-x&C$%xU}&fluz= z$i+C=5#mn-zC^YdV~H?~ z{jsw<283?_UuNO>k-QUR*M9==@%(^1cDZPq_`l8KpWU%zZjrk+}CWtz}65`(m z_(s4dc^NpFfZXzx!ZYNdC)#kN0nqe@^|=M=;kPjyss*`2Oz%d|U93fx}UTtOLFtC(F zaNd);U-3vA(KP`+jz5-h?Qyz(5`k|CeB|NTjo5{czZ9Z33N}4+;1gw4^5Hi~_&&hL z{IPp(BxVVJH^nD?XLk({{wv_)`Xgmd^QSBG_xTNDBX&rf|As_wDaFUR!|vXRHVOYO z@Nxe^KD)8A@_FEex6T0iuMd0^;G=K6IL&_&@NxW+i+x~MNdM1L@#Fl#{exX0{PA*s z?_ZqcknlZ#Px6QR54&SP_}hU`o_~P;*SO;6UkTyAko)`j_gDJ=Y$NcHA^fMnpD_Tw+!z|oh?+m_-a9c!;(sgfar`iTF6zSe-wEOO03Yvv zg#SApX(xPh1?Ku8WsHFxA^PipkN!!S-8Dq?F94tQ{>hGS)FJ#XijVg_tQ&-lYzX1& zjfLOxQ{#s;PWzt>d~$wgx9{kO_&))B%pdVf>QU!cLiAn(ANMcpH`*Zezv5yW(UVhT z-anCx7rT2H;V%F_-v5ExFQgx&{BKD3M}bfFFVtl>hlKx%;uF7|?*GzC|M~v!-{Spe zJ@N1M4?d~?r~W_7L~kGPF@Gd}PUr7a;Ohb($Bo$hr?3B3Cc5g%G@23cNtwj)-#Dyw zL_ZSvtos+M&aXZb{z2dyf`1%$tmAb4y#~Gs@G)eeLiEQ^V4fe@jhk2@ z{7B$W1OK@1up2wtApCsbK>RlXANPMUcS${T<(ESABqlQV4^&3qr2dy=7Cmd=WBy6}i0laQvlRF+1pV{x zPy8PSz6I5Pv`Os#E(W6Kug*L_lKI2;J0jIi_}RcG=O?s5#^HBn2)_mR`28uCZQR_g{z&M&;{f>K zz@I$;{@DTY`C;-~4Zyzx@COoq4)ART;QuY~=L~?a4~MsbjNg_4@?Qbpc>wWGgULUT z{;vc6K=S_x_yd_g^04>@!Vd-hK*sL^@CPz~1>xb-egNa=1^j{JzX13H>3<*a2h#sp zaQL4!fc|FyAJ2cd=l;q5`vUlQ{y{$3lkxNKgy>4Z;TO*@c>cuu2dQV59|(LrKXG#J zLfgd8HsBBB`R6(C@%anwVGQh^BZ&Xe;2iIN?D8;n6vB6;_*iE5?8C}G1bo*1vl|ET z{}RY1RR7sM`?2~Tr~mi&Cpi9``VRv><`3f`F`@n63DMn8@p*y3u5YwW_)mb3`~RQv z-QnRCZlV42f7I`SW@#t>%YaYTKdvDO7M)*xB>YkE@(afwbvfw+;ky8zJbz>UNIly7 zl@Pt{z=tK&KYrpsV0R7?em(Ff0Uzf+K0|ZLA8N$he}LN0#T>FD#D9v>-@hM0-;(T* zL5J{pX3%I35I^P)=RfYj>{=Wa<93u7b@s~pMJb{n< z5BmKR{%+vI5iC)F;{VbqOC$0B5crrs(sxqNqWWJy52PuCpVyo@|8U%pOYFkOUkcGP0X{r}CZcZ?PS;Ng@X7i||D48u5%_Qm z?e9Ov#O@iA#4l>Wy#JzKkw5Tn3ViH8iJRmBO#M=b|0TeODV&I9w1MNmju8HB;2W{@ zpB*mh5dJ85c!DYPSN=F1KX2e;{)s(KWCcwwIN!{Qt`7JH?d9ly}&mH|Cl=z zPRHNSntA>o23(SZenY?cL;S}8AK$-X8PATK`Y! z*%87w13s=F>^s(xec*RC2!9vwjj8@4ht#vnZvegq@X7xDJ058#epKM$3-2EoKdwD? zb4d6d@bYKg0QhFMG}_z&@UwtF5dU9+kMH09wEtG{@H~G2{CwcM4}i~WN2B=-fFA;U z&jIjn43Mt`$sb7nlYu{w_?v-0kol(r55M^S{ZHr5M&RTAL-q|$@1Hk;kM}QFy7=$R z;=kF+mXP(EVZ$*zx~PhE5YI!i2q37!xsF<<6jQ^fy6(=bztLX5B!1jKNI)^8UN-1`X3KB z&w=D`A@B#X{?7v+j&OfG{(No&%fB7)2h#tn0s3zN{y@fG2X3DD{LBLzFrJ+`JwK-a zAMYQ?!+QeSVMoaQ;~enu{)-$sT%7WiJ($lA`1}EJur0*@QE-m^M30_{vHFL^dI@`3gJu6XY$c6)^Y0J9{BJG z*?)dPKBxWP4g9H8|Is(QeIW7Q13o@~al!>Rf6bK<-ZYvK@X;^EPVB1XC8`u=W{|@|Vz(*QByOVk>|4NA7R9|NP$h;->zv5yW(Tf2-&R=%-Jz|&e z^Z((WwEqqXzZLkHzd!Xa=f{kH5IAIa>@hat-y8S_RQ~^jzZdxM3Nw-9pIsZo|9jx$ z{)h3CI*jjkLUh&q2loAeH}G-)rh`Kq14MR&_}>kD%pb;&!fF2>10Uxf=|A4X*b(A? zSOAkx$|R28*&zC66d&Wp{oHlxxvpa@_?-9l1^HY2PwuJDH1D`xU;u^q<9U=Vp zEPRZg-7zG5v2e=|J1&ICT%6v97j z3gO=eKHmTE{*BLH?4AJ$KbFDVKmL?o0es9K@`uBP^N1ZG{%vBIzn>>%cDSfR^wWVK zNcoq9ddvYkLil~apUVe?Ll>bBN7X_lf5%@*}=>M!ZX8!Q(GV~Yz{@FzQuLM5ag8K81^Pk;& z2;qMOKA!(@{E*M-{$U&cpX=wJasFGG_&*4IqXFcv1^6Z`d`{z^w&d^mhijL_^>1;L zdZHH&eDsfg+4YS!2>&?nas9A6@Biul4e-hP3$*#qbwKq0iNwEh!r$jFT)XVXLHNPI z$NdZa;>9Wd0OgV(Kiadhi6Af{H{sN z^CKy{`NuwNCk?*|f~a)@-<&1><2P@TuKdyh;ZI3set${EpVRrb4fy2z zi}RmTem%vfin){A%D&rQ*ljV?Wpt!slJd+`o}C3@%R3zZSqZ z1^>8j;TYmMj9nQCig=;0BH9=W7xqONF6`Gh3daMYAY#1=7C`xKI$WoQwq!M2rijNx!fn z>aC*c5z$X7g=?w$Um@Dv02ktBO8-}g{2RT52G#y2 z$Pe6o6rU9_zWs0^9-!J;5$p4)`u~P>Xv>ES^$IAxUm@xrgA4m}oYF_c`Fa{I9=OiK zh4#wfLSaQ-C|~KXWg_ZbrOJp{z6KZCzX2BtD`I_Re=QSH{}xq7#C%s#Wkl4krpk!e zejhI6J%9__YvDpc#QH}R)=^jwh=PdikFfy4ifFeHE^Kdt3k4C&Pq6^SS! z|NkOlKIN$R5piBB0%DaCRgZ}M9Z%J(Q1ysduSS(w5$E}2sK@cq0YpD~l-{op^`=w$ z29!Q4qQ4nbJu4z_CRLA!Wm5{x0kO#f|4@h@E#VL9SyMO*5be(a#5_1r^)7%Yi1=|X zg{~CN!%7fV#40zc-JNPjM1P)Cy%$xFi1pr7y$@B-idf|fe=whclwJ@Z@W-vnap+e?aWYUihN~c$MlGA}^G0QDsCNhdY2+RYleR zpF}iym$Hk9AFJUH`n^Y$?^F1I!iRt;i1@J<{^0tkr^=5hY`{j4|AyG~glb1b{!^-q zh##Bb561DFD!;%=5Jdd=68<2sg(|mVB?uyZd_$F45!cCEs{U7qcHdEYtcd4`Z&W=Z z#`m2nBjU#&RGAe~?2|DkI`}*-&LfY_|o(d^iE39cKz%05LD_RM`U%1rhCd10vs#s%HmL zHGtAb#E(H#84>*l1ESq9s{Wq{P5sYYtj}Gf4)@iua3NnAF0?m}!tsD8h*+#!e-q-ZM2?CJ z@qf=>|9k%W-}6`hGW|dD9EeNnf6rgceE#qG>wnK*I1~Q=`~3A&7@xiWPYV}~X_wVB z{e8CjB_~mtomUP|)~WcgetYlr1;fKzX6Wi@4I4Xp%2FXa^<|pD=iZlEGG@hwFxI{d zsAwoJt(+Id#b@x+b^M_y2$I;P9w+<5rk@wywB-EzQ)h2Gm42-*KPb~VLCDv5Qntb3 ztCrJ4D+`sc&rGgry1DwEM(&!H%BrjW9dBkYuv0#|*JAio4N;fd_+1ULi_eNg==wq{ z_P*5I9+om<%nIxCv!t%JI-b}o=AwO0!0+5t(U;i*-@Ig}c;|#G()ZP5KUPW=4)s-A zlr0k8;5UUgZ*>j)p5iaNc(x`&Z(Si)sHjwa&5XTI$hb9zeXd_ax4${bci};F?C3|@D&x47=+is5Y^;0f^}$%d zW9!E9rJ_yc?o(t2X;}+BZTE1L-#Gc5^#W5B0p@oX%=v)txQWnB?>R1Wp*LQgq@ti= zJcRq~?3D&xjxouzYfhzyeKpr!qZg9Se^U8LwyMMDQ<{1^xK3{F-mIW!d9JxxsqlE@ zUFNet(=Hz|3P=}d*tRNY@Km9X^4k+V)h-r~nKUTw>vfsO+T-30@weQ5|Kx1X-Cgoqb-e#8={SERLhRMb3elK)!O{>@ZEe`Z}o+3KF*kXXmyJxk8WhG6&NCR z1&C2Vy2#+eTwX<5m!(G9?R+T0T_y13u()HN^$49fnTgjHE!TW3y)e3Y>PFqA>UwsY z7rH5Im3}QA#kYNK-a*=gXAO!sS?uCF6C(6mmZeH7M_M^t+z=Z+{qxzHJm-YuzF39t zG*^+V#p?u4TzGe}GFR~a&9Rqu-5m5yEYn5g(}k4Q>xDmudkV)Gb?1N~5-;m-8tM9K z)8)^M39Ua`+Vx8 z?*_LaMk6zp7nsl7et^X;e#b!YrQc~yV$;qwHbK%~+Uc=lYKv%Ap zUnb(~%DRQBGK;Nu^3PGQ&YD!fKP2j7;I7$1i?fc}m*(JmIufrCF$ze3_#?Y8#e>eDjgFOj$|6Mai<-wXNUdj|c`-0}G4IkAfhZpDtToE*%W%&wl=^*TF3 z>B8z8C&%Jf&`lUbmI2lHPNT!)HulcNj4WNLM&fYX5d9{l{bRLpr-R z&Ux!L_0-#DSN}6FZjBG}+Opz|#pi}8?=6&j+?t=sKe=OWl@_h5Hs7W4;JuH{oy+CI zl347Du-aX6#VV-uw$9w#@3Zps<`r!y`c%C?MJ4Z5*0%FYx=Mp%N)tW_9Z;K_d(dgL z)TZ@}psUXoW{fX(&MV6FNe(j)mu9hxzY`%se{kQpxS;UpH;M39*Pf~KOBjYfsz3cQ z@!*=iNpnxdWq;b$VxoNUdga%pFD`7Dz9{uwUs3qUpYyIxv`CE~66|0e2Zl%V4l=KilF=Z*IxBYdz-P z{oyuYz(8H-)k-xJbfZMR(y?5N!BkbJLIY}vs)wFif9+_R{dyUZ#( zBT2qAqdn-S)4Zbs9j=m2Q>EU&5Iz}eI4X33^Yuo)w3hCUH)Sk#B}ftg>3i2{)}L8- z&%gBKyQe?r4g0olc!%GhCKv5xM(c-UIf++y{(Lt(xVT(ROU8ZQloz5UdAoFH&DiZa z;55lJ94F?D$(A)R8no)NtZVML z5jy!##;y$yG4S#2Te<3uUeo+*Qy$H`B6*|pK*d^FFhuf;-xU#|w>!wbHGlss`~7uy zf58`d?{iGoa;+9y|MTAE)C{ie z$1?Gsoczn~2x1hF?&jOg_-yCq^||DX<~@JM5VscBgn8wmeR^+B27MQaPP}<$)%TZk zPWfJPJMiJ1U8@K~RItQJ>UJs z-S6%jzZNcCv`0d14&PATj!tg%uGv<%xo_t@s%*@-=RfJrel=lZ?vZC%?2cx&>+#S^ z!&6k*^6rn$M{@6Clxg%bL;sti9I~>=3b>#V)RCBJ?xq7izZb_u(3?_AEDk{f{JruQ}cqt7qR_`}up&(*Ul% zZH%HhIm04%C#}wY_wHMtgU6K9#fN$4D_NEnY-)Wyz7q_QJjf8Efb_QyitmUUd>wOe z@}`$Z4%eA_-W<2@f%_%-cDHds(b?T0wW6c1&Jzi|^22Or=lLl8*=LVle#CH`KK`|Q zW!E9q_3bQnaV`^~m(B}QjHpF5vmQ5uC7xbw{P1{C zV9wFzp77Ptb1cqiek_(;?6}?NtN%nsYQ9$~=omcO)$_V!?61A)uW^2C`&uQ&PZqmlSnc{Qm(Z7gl0PFT8r&7tLP7k+{JEbPqP`na4h4dETeaarIv%_g=K9z zuX_*N^VggqfO{j!FMf|hgnoB?UQ2sdq zCZ`)ZV+y4fdGIYbc5kG?_>Gq|_`_VEpSEk&6Y<<>42FnZMPd|?t~svm&eaV%f-)Dm z-rSw3c_1nBve1c5YO_WqgvYNfZr>;&u&Ks?zx~nsRi|2aH;r+)BTPRV(>TdfG?f3L zy?070i(MsFy9r??3KxosA{P{X@jX!%pdP+abMkZP(KM|yV?{MWtx7QVzGIVUSEoZ%Gum+EOzmGEFyGadD|yqhK))0jhfTce@xchQgd&f z)#8x%xsL|BR&Effe|0h^%ERT^Fme57&&NGYlr_$nd?a|xv)id_zR$gXXd&JsNFMNe zF(P!)qSYEoS&tfOK78U`vPW~w)u2qZrG-M-l5c+=Tl{iZr{0O@x95(WaNhlp6kVcc z(%zj_BQ0JY$oRSH>M?x-ziarLGGZ6c*hJ_&${Y5o9_iYAy6@whZo1l|FB4`Z9O}E0 z`R(8>ZkvmFH4$2s(w`OtZT5|b&G7k|BGI)t(DB$2^G;hQG3l>*-@U;Qu}i+EL)&z3 zyVOm=Qt2hzt_y8Ap58im_`S-`s%s)5(q^+RcXxAsJ zqJ$U3PkrL%k;a`Bll!1d^J`-3%KNV*_nd6tF`AI->6a#oXB-mm1Y#7BZYsiUaO3;h zuJ@4{0^YZHq*a2&>pM36T&U|ni$_>-4h7Ccw^ zZtg3`Lo~0E;Z4;rp zc(>(S+w$Cr{#j#%JvydmyP22r2nGAF?&}(?cB9{x{8*r?y`}Q7dv@`n@Gq;=72o;P zOdEObvx|`ABcsJBYoDyperczx>lxQ0V3ND$bB)n(pBbAqo6iS*I-#{HlOX{v`#o&RZ&2ZRC+DJ2C2+J{Tf-m_m#K(pP3B1UE#a@lQ@HhzKpwjQ=Vg z9CP1Gbj*jQDe4KWpSZd4BJyFf_I$0TbA?miJkkFwcX}YiqQP{eDH^|_$&5Y2@9;N9lMIYHCAbU z?6MT+ZwR)}tQe-e;THUVfq%uz`nz^|gX-@1_|ni?;ax9GuC0{%JXH161JkW~85*=H zUazJdKlzC}+tX&Xjf~BCOS)d_)5T$(v)oKi&ypM-f4rQhTAhoayD1pLVa|<)>^PjbzQk6=(TOZAFZ(i)UxAm}}q2o10W879h3blE%^_ z3$vwkW98m;wC>sRpt`&(A+t1ni^-bATC_#RO^?;C+w(PyzyP^2+q^k_vdQOn-g`oe zk~O&B!?Q`J%>L2L9Ce1Fb+q6Y->}c}&aZ5bc=%=sd#p4U?JJp=ac<1UV%GO((^&21 zd~*JhII6~grYB>%?N-d{illjE`yx%Y4i48`ZTG{6@$i%JvgMnH=A@*}3~N?SR;h~; zsNQg(<)deQ*NEGWr|=9(;+@WFcbHmXsh;G{6su)bj77`VUn^|6z2MTBHM=5`C*Mr& z@ihtHrGK~LS9xACd5NZjPx1t-s{5G_)+}k8DsfS+b-p(~s}Q?5mx<8F&Db}6N|3|W zGsS%4x<#D^^`uL=%Z9lxQxV)e_?vX+xrZ;G3ckFdXW%xDuTtJQMrmIgLot8(@S`z@ z^`up`ceCyf2E-^J{Uz_=9|2p=qzhjE(llc95Va|h?_TmO>wQxYY->KL`Lk@Q&d7>n zK8KMJuR5%^ySF#Lx^8$?PSG?{mG|_GA&kfZutDNAWVI`^z324?^Q;TzvJpY+)#gf7 zUFYX+tDe7cO-aUFlbFSi=PP%|YG!ut(w_ExMEu+r@53eBGkCk6i=_3u+}syt>d#`= zh}Ev;tjYfQO;_qoo{ebCywjEJ7U%mUcjl`b597VI2fK9^KCo%DoU<;V{fSNdSZ>=< z4$BhWe!p}7-GpW5Hlzr5ZO3;-B;FaUb}ibL8b}?>U-qKJR8v3Dd1=UyOx1->x$#<= zcR#5p-EtVc_-dP2-uv_WJD)2ZKd?%;YUGE8%TK=Eoz{D2_w>R8LM(Ri3`m5|NU~dM zc_H?cWMHYm!;q3ev=ibNPGvP_iV5mo`eA>!x%NQln3Mcllh&N5e<1BPCi&5^#lwo* zwC>j3G1;(B>+L%*MB<%Ei~`b+=je7WIecyQu_p_)TUtL3=9Rj4V(Tr_ns;f({eH+z zEdNk!%vB|FELCv%tQl)2`fbm@J3g{n`CQ^o(HE;HX4KiT*fn9bTen&HsUgig|Ap$6 zybo(@hFB~Qzqwo}_j{>WmP`E=$-UNu{qmL&T?ayZh2?OdltKvtaft^rwQ;{@HZT= zPYp_%Bhtb5YRIhax3gt-Cig5JQgukVFy`VzhnWs3wcEd4n7MqlOOnFpB!<}TFWyVL zx({i7i)OKl?}CZY8&;pGTrgGk#oAMAREpZ~EV{{cz_YAsz1yHfr=pojPv}mr{9}G- zehjwaep#?l`<>5%i;wxn*7LsDy)<*$J(GlRFhufTO^gE4kEDwk$BFM=8a7;5%l3f1 zLqbK<)x5I>BU9GN_+EAS>KF0k=gJPZ^0C#e9^Vv2oo^|QfAYj>n6%631+%?3HM`rh z*u{G&5xU5g_+vZHMHn1Do3Q)%u`9iow@bZj_S@l6tTzyN3Vm(ej z_DjtxZyt4S`xcM<@3Mvpg*D5TEUD|-6I>%Z_|qbzW4y^W)fKlF8(LnrddOmTHmhA7 z$)hfE7qm-~-QLd|8h>w5d&|9z?$%XtHgD3`t=J#yKh$D#itP`dgMCj{-!`-V9@;cf z$Lrq1n_HjYT&+#-!&1tbBIwudhD8KGSbRQ zD`d0G!dip#Qe2g3exd5RRcCiS`E>c`u-#_m=i+70dX}}fIcFE@S5)@(HVK`1VLUv? z!+mLV9Pc6)yLPO07fn5|tUcOr(FO4~j~x=BH=1b5+bf(3w!4kav@)*Wb(lviRP?FZ z8%A=VRmQsyHF+}Mq(*I#K9=@W$KLSGn)@`XZ;Vc*bGP zy6(rzB}=b-IqUabDr3HV-sBy|7I&_>#XsG_YwbJ6yk=kdtIMbKvog-Vh`8PR0Su8m z;CC-X=uhm|7|CDMh;(>6O5|2UnPd~)q^EQS|G}=JbGD4FIo(6L+Y4H%Rc_vhoM|>p zWnBB=(R`bEKW>#hXdFdv;=An#hKODKOoV=}bocn;3{Qvhjh~{Q@ALSkHD$)k`a2(d zYad%Sy&Ep9EdMIn>&v3I2aK~`Z%sZnJyn5^OR-`%zoX-_{lX19_OiY=aw0|n>DzJ= zM@-LG>#_`feYt4Pp|bmTUBBk2bd9fc9&R>o(}S$n#mjvRQr>P0>`JXulz&OTR2LII zc&+j*S3}hk#vh6=gAEd|GppT}mb>rzhKg604^lD~mb&zK*GTdA#fN#)s?xH~ys|Ej zl+dhHowDi}Z$1x0^j!GRug2F}p0A{fyg7YQ>nTH(cQlJ#7goDpW5lPnF5ynm4~W%c ztnG?WblTZL-*UnE@Hz=$&2?GAEAsVSvT8cJ?stj!9JQz%x~Z^Ba&Nu-^^6LuC&}Ua9Soyq>jA=fdPG5p7#CddfGci{xHyy8U_V zLy6UG?|0d}_s-wA^84{wJ!z|FxUlX!uB>+TM@gkd>VzFj)cV0lwSC3sHsQmxo$G6N z+;P71`r*aQl`rD{9D*vIjt-Ry#8J>)r8>`(rQ?v#1<_(Vt?>;@Nso7>E?MsaQg>#N7S>47$Kc#o3 zZ>&0+>MyYET35`mBwghR%@u`9rzvERApVe9)d^+TnN8Pg%Te{-&rE zI~+pQj!2$zHTAwbx2{~IT0Uy$kB6Z__^eIrda~NhycBpN_TfXGpVlslU-w-dx+Z?| zP0f-5t@c-j!Rz-OY1^UILA$iF@a>DX!mEQzCdc_+8~Zr@!nnkHiC)KSR|~T~w|KGI zJ)ToHO~=Bxs_0gz#MMc9;YJ-sojfh3OHBn&9+EPNQ7l*Js?9JzIr>ff_KACD?_A(4 z`QzgUy{}6QUMwHo-Zfcc$RjEoRx|HlvAFrHj`bIl+S5ln zaSuN;{myV#*7@s0i~`c9+__=9d-a`f4ogor9}eU;$e1RWd!pI(&0x#rx8)>jw5M$v zHs;L!KI@NcrCI+#i;{qu23)4HB;}tKGCC5`E6?`y=vrW|)_j z-?0xhqAPW~?g+>X6HIN^P2v6FRK2xXy0PTyiSv~bYp!c>MPAl1@pV5NbGw(}F>_%X zi(NlfyPi>e=Y?e^z2SayV950&6OAWGoJig zSCQf~{o2f{51jw1yz^O!QSegQ-cd29q}Law1-sFu47nBM<@r~x)Wv5jl7|3d6p+4O zPkTof|H`jzJE~S~zA-*z6i>I&iO_NLD=j`us4%rTP;kJ-$hcN(@R~x})kC+3EnX|! zSUO*+=(hE+O&VtnSFpbK3}m%?dADov{h+Hm)`*NTlTZ6F)GR&EgJ-;)fw=5Er3qQ- zhiop}%vo{t*)x4BB_3Xxw6^J!?4pCyC$_4ZY5DU$JciE{B;FuayC1up55I00uIKXU z*LfWJTAGu!Q{5aqHCRl&RHr)^|06tVYTZULf@wslwS6I=7Ot+r-CblE|y#l z-d?Pq7GV2k*i)IqnQ=>bB(7d<;1@2eRKGM(LENsp{#a4 z`5$jMyX0!nOnK?4(*+auYIvw!-fT8lr(JALxu)OIH9B+N98(cp9(zP%&C=0)Emk^F|S+U-1%c1!KcO!wViD(5`VP@4E;_#<1>w_39EoJzeP zPoL-Ev(7O~MmcNsjOz(s*42L;u6pEC@%7y*cfF3Nu2cHf$jf3E&+bI%=hrQnqwn}R zNbk||2`Oi-^}ZOL?HW|1{yfdi#BtH!??d-2P?;qbPFt$5r|jqYEh6($%1wPsKj+MD z8SiXb+H;Qe`+x{y6p-%GtL)mj<#@+)@muBGd)?M5j>^~-@nElRzaab2_>23H^lW2(+vcHfDkt;uz8Ves9_uJJc%OE2WZdSD+8Vd=t$air<;v=xZ~wOG z?MRiPPrdE)MjBnuHpnzwpR;`DwM$1P?|7_`k(|V0H-^>jnO&_bzh1i7_5&AK6sX+HmIEyBqtYZ54E?-*eq! zu^Y>3cf9k}3x3t5=PvIXrkr4~CTgL>{0Sd+$V&ykFic#oGNWGLSmtD%zOX0@_1K%u zm9sB8)#`aWU9j2G*yCs@*js^Xm*jULtKI70=dA|fQ6&u*9_e;yzaJVH`oigHl0}vANg$i zYEYW6DyR=05X<(>^q zPfRRJ`tA+l@qZqs}FVdLgZ0;%GE+!W`}5_$^R50ahd$th?u zT7=^`b>HlVMNMX2C&()?W4l(YV9N6{-$uFBKmniU-GFY~bclCUt#CYs06w9eP>?Ki zl)1A~&lhz}B`o6zWE=rTGpUS8`G|oVqS341zS#!T2{xWY+et5~?a?0e2IqS~zW*&E z{m%v^`WHU1Te*h*ZENvw)^3s8pxSqq`F1n+IN+fpK_(+Mbx|lUt)*0%esp|>&J)g3 z(=NDHPa|-lCGH5-d@%abCxGk01DG#WgX=Q30Tk~$b{6JN<;F12M>ujiF2i5iAc*1g zDXxwS-o@08#4Xix$88pYQ4rrJdVhP*(k0;*x`ZMa=wRS@;R$qu>7oc(^h%uWNi4f4 z9_o7W51jE8sWV4ZJ4c8!r{u19@7??TCrjX4k6B(mL69nsi`y8AoLC zVA#)VXEIkfn>lJO#9-zZ0bFmO8++el?#XYUQm4rqj(9P~^@W(!ZI83q^aq~JFw5>p z9R3i}8|psw*>eB1S21jhJyO0fE(5A`xb;p!$z+Hb?Ev?s4*~}$b}9I8GjDM?6K*da zeB+*Hdq){}_c3*1B~q};rO3g`drhyDqO_w=W15~gX@jTg;$Ao8aGR`9VcdhGsFl7i zX9&R8%@>S5mmtnV8WMA<-BL0WJ0goCi8_{1iXx?iGoJ8n({2%rI#lX5?TXlbIm!IP zSIn{eK3Qcb;a29;JW~&Jnl87e;b;KY59p%3z7t4#5}o4rf9n&zeX6ko99XEj!FzU?HO z_^TOCd_mk!&phn8hUNyH(k~})LIs{(e$npxd_$_Ob%{#j(Erv5@qG(|Te9_3V;^WS z!2IDazzqPpAN1Cj4-mKPZFGodP`H%S8Qi+!8k?=}LWf&A-L+b~;(JJ4I7qR)f*7Jz zxNJmnb;UT-8|M&9y)b!123n2k0B#`A^-UFj2Tw*ixA=I`LoSQS`6=L?I}fGCrl_<~ z&gV}FR~0)vi4)MjD0iu^x{H}#>EGPHg3Q>_f{#ppnxqY84FkAAKzDPN%E_=e#6N$t zf7UEk-$G#+IkyN8*$?h+e^Oq(!j$~=S=7(2FWo-A=7X6lA3~>m{YG`)d#q#{I#Vsj z(!M;qg4@H(JpvApXw}z8t^m6UA-i{9b7x}HF#8|e*wnSrj=wD4sNSSA?Z4$uGG`1X zppIk`HG>IwOjIsT{K~ydGEm}G;Gd4y{0xEJ5HR{&g4(|*Z|(+Qa_@(XlcMuEaR(qW zy-Es)qs>_vrW||2jW2n3`m+Pe+oSy#mxm$$Mm1kwS7y%=bLyj?*@>`2K`6j|`8PN~ zMCj+%Ik`xysOrk6kn*S7-jVq0OqW}aJ2cReh$wQ)c>NaeZ||cjU4Hf)cb8jth3pd4 zq`eJNASAWj{9EdX{|tfieW`13fIh@lKu+=-D38tGJXpH8lhX?S@;6w4BUT2%>RZW@ z&JY$yKxCq}C$!_i_Z&{8dU959Dd718v%6d>g}##K4{!mu*aXorcDv2Ws{ez&gX5$D9Cw9#&;Q|y4jo0sbv`V+Pn*% zr{`wf%d~kN2g28HI<%0XRkQ%EBSr#U@m6)yzs%5>fsL-OShXIam^N$(P)ZrcX);E; z1lzqcJn_s+ajY}xOi`;}IoW-ABh+(_qtkaIg+X(aR40Xa0LV8A=srF1CMm~Ikx+Kg zpEyE5%EVl;QToi-W{^b=AveeT_~jkF9(Pspso657pL1(b`E4Esa=q%}Hz-<+?_wW$ zHTMDT%UT*ZK;j{zkV3dUaw`3D4*`N1IHX_$s`JFp)oNeX321Mh>z8jv&`Gy zA^){EN$ffdo)L;gI{d@3aGX`b{W2#5*Kaf!eJ(+M_B#C5NF4A246S!aAN-tszGNUT zkMrKwH0`5VL8$KW;rtPI3mv>CuT5S;_xEj0=Th2S94w<2!+D(6OnCnyrYj(%6q#9Q1BRnLVyGBk|?a3-c)(q62vLQ z_3J> zDans$GW8ehoa^l2>2fF!ER4od5 z=T|o30=LyQO$j_-Df-{`q$kqRWV^-_bB+1C7pYrFD?t51B1(1JS#>fwZ?+l4uHgB+ zMw!icWzGn26M$}WwOI+V=qH%+_)=HJF0Ufk0E)M@Kdeqrf0`hqCehX|NeaX6M5x0X zVSK&CP$7u?<`bWO)Gq8PEP3~?=*$B6T=;TNg98+s@wqGe#Qf{7o+auCDo)~PDQZns zB6?T8WKSgax)BKx4h~l-Hy=Fma(`cWxAwt3mm(eF!LF4|H_6vbo4k%^2;9z+!02-c ziXYa@=qg@qf&4=CpxwGxHva~{;n#@f+n*;%B%PzTmO|eQMfbmrhQRVRS&v%?5{Y?1 zCwy)3vE5V4$(2sU9|pL|KzDT=&EO+9rE95*7h9gISa9SqRyH~({JY)k0^|;e_;`a1 zSNwBp-WqFt$olF2S(GQgL0Nu_n?tD`$fqW#eqj53dFBEKsP9sv`N7xzl}S!TW2w0j zvBy{2aA*}66AME0`&Hf{9G%2g1*}BILq|3aOu|lcXCQQJx`i zJ*0xs=MrR{t3HsQ!bljVRM?8DxuhxQ#6pd_+e)l_Mm(Y`vT>KtrN+i+dm`i}q8UCi zFs0d0(N!*F3{gqrxMtTRHCP33(||7DIQs$afd#JTgx{&u>R2UGyZRyf>1IIe)hkUN zch85z`8K4F!&rGx8V@Yyg=LSDv^-It(8Y7?_qk@+-BWY{ZaUEQ2(~1s?e(G1%n(Ar zGjdTDU0DC*hW_eXcp?#w0cc&?H0yUGN~gE{WZ$2k08 z{!jjNdb#0EYW}M2x6ppr$X_j=A#nX>g3;#^w5ME(%gY$RFhk*Upc|++PCr6nuk--L zhi+`lD~gO9Y)gL*{Re?O`!6n{_o`+?(hYCTbswkmTn^NCI5m6mU4WYfbn8Fs*+L+< z{np(wIH;?_rJsHGhe#-TFDowLiO$(9EXZ!JG`I=kE!!3Ew0Qa8@CpA$N!{*IwbCr7 z8HcmFRS&?;2D*GW0mK_|ORI+hvBzoCJe2*!b!r!Nv1Q!t4!jQst^&7n$?k>X-K3}F zKVkOBPp9!ejre#q65MyN&*}sr>%R2m;Cjdbx)tVVy_<%tbKX1MS4ZBQ*cc-8ACpb} z>vakOx$MgK2Nmz$U$@Br?$1f!7oMP_EKRBo|J|D6B+}K~_>NaBXaV59tcimI)Z8j` zB~CQlLH)4J0bi>uExW{&A{@77<8Q96#~gAV0U2QKHEy3_YSpcEof!&_wq!x$Dh$%A)>yHOv|F(oRHOg7py%>C(A|Cw?ctTlR5uUFHScR2 z^}W)%gXH&dO+NEL5us7T2E%a^(JSJ5m>VLs?^dc<-o<$fiaIw@@|9uu6d?ph);KXAJkRrw4#O24ale8S4A{@66x z#xMbJ3xO^@s{`LB5c-AZU=-W69XrMnt9C051Yw{?)W&8YkpZIG!e9T2{WldUdq;{v zJx#?*yO*vk4Oxip76c1&4N44q&F*@}hWlYd`Y|OQR{4zfI`m@B*o2fsYBH7D!iaG^2cKPs*Es`?Ti#$m|N=3P?B(`9aq~hYeLP@ zRVi=1^{<}w6;72yOKU4EaV;pvufz6h>->^lOmHTeT(~)r%VU zGE|27T4WU}?T(>H6}#DH3da6-E*6m6)(QWf-yq;$+zOyuM04b)7Au6527K{VT1zZ(AgyV&-`t+R%=FV5rNeGCCl`V79@ zBj5n_mB}KsUr&i;Otg6SL*Tij9X>utLU;2hMsGV|J4B+1@W2|`yig;-~1N>3jNut0lLZ! zV!!MuH$IlkKui@ZjhqUxC4RB=Rilzb3u$T?P= z-qZO(i7(;kFz?^I@8A2MYk{tHsV`R%%r?}WQmsm++?yMSr@Bd~^C>kdbe(?12{ShzW~$soht_}NvG;%Pm3~>{00+ocbb}*Q`qG#& z?qdG0LQt<25+YI`WIZzkMgeutyGt`Eql?EALVe@;pF0w7evofE*W4D7Ce7+Dc*bKV z*sEVZL(ld5pIZ+`pGy#{TvP$_`REq{R^2(H=BV*f>-5m<$N5=PWnK119wd*?@36Wn}spJTCmZZlM3%UqE*|wD?Sde~(71d!<^{#iNY< zrpRn@jEay&xj1|c`7xSMk;h%PG{_x0!}#I~omS>pn=?g@)dOZDr-xT)&${8+f_#2U z+sk!(`8PN~A3g7{kQhXNDXbM?&KJofx>NYoutyzaHQMKrZS15`p&U=!=3QsZ7%^tL zEjr^ouKfH(ujQ~ZwXA8tXZ!Yl=WHP0U))A8`dotiCo}k$`&vlvb1?^ScXGDcMyWR7 zT*(x%8<0|estc)QHMG)XO(eVurV*|tIl=vITdto!fj>&&L;C#rmfy)Qd(kiV@r(P? zw}AtckR-b3;wu@ZVL9)FI<@`f4d^Sxzz1C&j?3XJyekWR(!d>*hVR2hXmdID`s}hP zmOdzdoQks!AhQEZLofH+i`xQ5 zpG%M|-w}+AQOzoaxDr8?<#-jhRQTqdfoZ$cZMCjj?q`{ zNkm9?e-_<0R_Bg)clB@VM%bzxs?b2lWTJS^eSWXX3!`Y= z&p!#(Qu{_RyX~uK*4>)E)x~8YB>iW;G)YnA%NW@=R;5XPAOCY9;6cx28_=E8WBR#l z^TA2-!xkdHAZ_pJ=HvUM$}N#kB9~R1e21(W>)zH@Pz4{pI@`wbC8m3&H@V$HfNJ;i zlM+`ItL4{e0`xOrC;Qsf;eR=i-2dKl=@w+%u)R8JHQx?G|y{~3Bl-dzP z3+gHL?8qn=(m#9AlQ%AwTOW0u@%8_6q5i|WfbNFTWAxyA^-sAfBab$LrDim!8*1!> zAy83Vkee0c1(i1uwixnkfAyTSukTdPgsS|G1zU#s;M)rsHNnJ<&5Qc{N zNH!xpM)B&*zxNpe&v#z>OmKiiv*h``eobR-yPf}tch?#nH88kfqCQBsC?ft4o25N4 zLX%{u6uy<0?{MSnC4yD^#P+2)E8;CS+plhiyTg9qJoV*gfCGg0S2$fTDknDDgn=q- zwY-EHPB{8AI^=H#Qkq`@;VHG_9e!U}z3yYzzOVElq!XX@y*Ju5nCT$<;jAF1HZ}l! zp6>&r&n2ksPR?NNKqcg`(L53r{oO^%o+g%+$8@Pkf$O?tp=dQ}kU}Z>9Q9V$HfHS7 z_qQQG*+=|^De*4kM{Q}NeD(sK4RAg51Korl`;jJ*SqRha{XV>{iSOMDOo&>3A{*#B z#bHTv_6hdw*?MM((ml@ zAGOD2u3V-)LL~;gzjXDLxPyp;CY#q5pCPdOvPK6E(Ca4ZZa>do<_{&fPCQPIy(};+zSWZ21VqGr>J{+bjxStk(iJfA{p_s6w3CnWgXoB*u zCja0GCE<1c_VQ%=$6JzT2<(o4(dQDR#X9WkN=%@o zd`lTL@<7%VUf6hded$mk$fGJbiO!V|H{n=Q?@zOCCTB8+SN^(Qg`(lmf1UpI`+YC! z3xGQYbcx>4`Cz)02U!_?=YGvq=z&?o(~^B%>&|jfLm+52O!5QI9ClZA`6QZq6mi4$ zRn`baZ>U|!9Yj<(nur|B%RK&;c2h}5=2;I#w9NTyJKHQ6FuR}{ zhk2vEe5}fFf5&ZaB~%vOBOyM3^!nrAY-ODCRt-OwqB^jD7zesG4C3N2pQ;2X0=AP9 zZJjbd3$2=={^hM7RiAqPa8Q*6)!SXMp16#dnY6T-^m3?Xq{iK5O)Xt#<_S>+#^uRb zK)x@}p5Or0V@xhKFOGDu>VHl=?_DafVCtUq&1Ufv&4|%=QxM0TQ)F4)c)Hthb8QHq zBt8}~3GxheTBD8F6GF!O#D6yP41wFjBp7`zK?Cf0BKB#U@|-#vuXk(+6%m ziO|NbK%G(o2k2X8{B4UZ+BSRCn;87=$pce6TsJ- z`ihm;{N*d8{x9EYp!+)BC~1@l&vHyb;)?Og1kF>jdtHv69^tb4O#^b?yj!---^ZlX zU4}r0d-*ttA(6Y_M>nR;HEVPFp=N$!k z6$q;WmW`QT$_BFPBT7JZiya${H=Y(Bzf)GmNPVWh-Z%U0Nkbb#<%~*qoo5JKzc1Gi z9H39{Ar$yeTIh)?de5`Tt@6?|zj>NX_n)_W@IMKn=xVlZC%-XHCX|i6Yn(ozHfOq> zdvjUrlKQc*PCDsalJNU81a{}Z=yM5De{x+MnyyAEiTr7OhvH6(V0xuc5dYef&NOJ9 zvoA~APJge?tV<-%ny&|6-9fL@&BDtVFnTBd2vACHfx!PAo1mY_;+i^AFAZ_UNaN zER=VVv@>zBwXWg$ejD<8^=Bn;{o$oA1_y|+UO{dBci7172^XIL%(026aPR@Cjx=L*V*d0;A6*sOKxa z>mLE+VbVI2gByZ19x1nzex7|3D&qylA!WyzPBQ|f+$qv;EpbJbHIwG=^S4f5E!rSe z=My0*5YrTy*#Pb`&?S(E?zycGW^-o#$&T51H!Co85tglW;cBDkuq&-q&~&EiX1VGl zOS<67nh>qtWX9=uEnJH-`;=?u^w2D}`m)vu&UXdqiheabW=_fx(J8c$nGKmNl(QMhao@n%?gr86HMKKNp&g zjp<5N0%e)SJ7~kKTQHf3J(50# z_S0}hinkp;F@sI40Im6tCJo$T;dC*v3l&Li(Lc48Wmc3qjeFfK?l?Fj`?HMrlyQBTm;&d`Q<0VJ%b=v{D**I+PuQ9R5x{*} z`vV6k+oQN1@?-ncNE!dzW6#;m0(%tbYI+E_zl<`O=;<s8TnV<~6k*XA8 zV=DpN1E6a=n19p!X=r#Fh5k6uCX0gav&Z}Px_qqoc0{QAw?E#hhiGGa3rZMWgjP3V4Zl8ad>w)Xx5a|Bc@54SM zZj;eX4H5cYuvk|yA4+m~AN+C*vNjFvY+m0BtdrzlUw?3Sts}2y7kix5t4d!De@j+W z0?{Ec$NRE|3eNW!j6Rp3KOb{ECAi(X&f;mcYq)h76lt4DMO4`jtKGUpKHSXgnVPnt zw92xtc1iznMC9d?x@<3hpAlhfq6DkbqaAMlvPTGZPk`=O*%T%;f~K!~P45&x6Y0c+ zmN2ZgEu=^hUaNXCH3jGPlVcAWk{m*qDginN&!GHBA{#vEYU`gX{>4h_Y~+t ztdmMYWaN{pwf$`qv#-35HOO&O%gJw8C0bG7Ii}j)c>Sg}C6@Cf!31ircVy$L z#%({r>q^qhSONLme+ii8XxUera>y+P;H%fT#}J@u)V?$ zqcu)-%~>T1x^D^U^sWRO4u5%7rF5DN1Lx~kKv!|D_q?ahV|4i&nNyHOUOEcn)bTi?j&O5Sgsu_0DU_q-H&eGsUhe04a-rP?JyTNJGD)(o)eF2 zij)c8&_F&TGv3|H91`r_fYIj?w55a7ALqVP>lMeVE=!#IqZI;MHfGF6n)z=7Wc>ld zN9ZnReYk6Od}+9QhQFUqa+Vg)Pj)}n-xip~hG(&iy{yN9-CLmhek($HNkD^+4SNKE%cxFh_BU!?4Zs_$k(EcV3_bWU*{oXv>mmOx$+IX zv;nYt2Xw_Gv}6@fs1b>BH`i&`|Ns zl&+I1TD`8bg#AOK4|1JvjYHPXgp9P)_}YxdRT6ln#hI-;lL77n&^6+$GkeM;I9m)N zb@({SzNWVH#hpa*p6F``b6uyFRi15bXm<>!)t`(UdiCpA6D5svopnZDH3&c3_f4L! zYhQ8%=ld7vcB+DY{T;vI9z=k;$M}#py7M+JQL}j5t=}#tynMunqU|mlWy&gG?HkGO zKm^OE1OLyKmX==5cMp;}2w?}FFMSQzeFVB$g$w>#(PXYlzYZRPvEKHH)u-3rkZ!Ox z;PH1d85y=tD_t{_9xFqaHGMe7_;&O-W^*S|E$2qhhZx7cuU4M~a9`GtzyT`y=G~0% zQMC|Bd>vZl*_+<+spZjeI_I@r$ynU+BNMXL^&#y7)LEu@btTgg@Fky36Xx~pM9cC`mFjpzus{{2g5r$mbAcG_{VRH-$^h7sZNR3 z=4Japui9eMe;lznj?8@jwAH^ehSCLB=9Xv+$QJ~3-7+Ar=Ucg?;P%63_3^F=v2I6g zU|0ISqPZqETKD6>CijiMl^UVDOzwW$|PdU%L7Ut`&S^|rK9V>q04tmip$hX+XR>G z-O+l-etQDJ3jh}u=mr;d>$D6`DKC3;Zl;_DPddG*?7FCH16%AI68RxZ!h-(xShcRT}iGO zJWjQBwWA#|lIeopNnWdd9TpgWQ5@a;`)Jt%REIt=gatcN=DyQ*Y@SW)5ZAHS8Wav&A8zxsl|wcgIh^95w%)=lZu#h6r>&6A#@_?r##q&_%!yA@Hg= zApNFapUtz0kbu)(>5W|b8*+L-Yy7seP@(3V+0t+i+;BNjDSo#2ACFF+x76V;X9%9T z|MuUIfG&}+1)E1Y0Y^LSmfy$M0dS4-yNW2sL1CsIW0w(%uzA9ndww}zAr#3I+H?iQ z7YbCXv4^h*Gx^2JK9{p*wR-)}^?ojqfo^2UFe8?5Q=nYgax=macDRwb);EU$0S8NH z=Jc$#PO|+_i8`GSQa$D%2PED7kKnT3VdoVw?JrvCGln$ z68Betiv@H|9U3O+Y3Ycf!)@$)xOZQd=HsKh~iJ5_dC3y%Z-fGP?)$3Z**}-E`LNWEes(*K^c!{ zpjH|m3PUCS&waTsaDgsjt}Hb5r|9=Pr^@P^BwV`9y-UQhx)Tv;`7`w{CHQ*Pg}4*) z_}x=-I2Y5ILkX*|hUtk?w0VYi=^ysa{v_l5=l*+7Iv&t{6vOD!8`NYOfoo{#n2Zzp zWLeXzWIv!gxcPWR0h#x?NuX-2*9x95EN0_9gZNa+-w<`kD(Y6oJ>@YcsIoBNzTPXK zYX-9LEvL)+XgHC9*o=7Vr3uq0aJONb9}*{2pB6G^?QDwd){I-cnPfUYht9!@XZLzo zW$@{2P$w|y@fG~4&42m+I~Rlxbmf&;`A9qZy61UZ9bg4LcH~)DC8G6fKt>Qt3zJp6 zCaJ|(IKlJeVSlvf>Jr{SQY+@E_euVWR|<~cO8esNLHM8h?>>GFbZ=w*_u}6$uj{7b z`xr^e@(^FK7fD#2c5}A>Z0y||hWZ)hJLy3NPWJC;9S5f4$dtd=@8D)z*%RdeM1~+AGq(b&3|%} zv)QOb1vla>B^?u-m*CF7uy`Z5m`?t$9t56CLZD0dqrd(2^x0-90>T&%zlFW*)~6)J zPe|+AdA!IMgY+bRmWbqnvj+y{xi@?V7g0F4WBWI{LXj{7)Qt2$MlipNkd*C~`u#lmxv1B34wNi{)N%|Okai|cjBl9NG; zA&*cJcY^rO{qGzTDbT&S`98UDtzcTRZrx^7Fn;V$ z&7XseSS@<{2v~}xVIYTX^g(#I_+ybD6@7{d;Qn@Dd2g&hA@L@X9#u?Qjl&-MP# zB?r3cz5)vuXrX#z+(ec%rs?e4b@|KA^>wn?UpZ`z*U3ba0h7Zd4?+e`1c|87-a-s%*7~EI-JY}16 z=B)Pq@3!kvz&jVM!SPlVrdo%}w#SF%oTaIi^^o+Jkdng5=%{<&{}E+gfV77G1h zXtWqtL#a-pxgM5ehqn$Zr?~G9s^-Y?!M7i(#^oP1dP_^h5pbF@>Dt|GYkc4cBZ*Se zDImYTOn;yA{dX>i66neiy#8ac&#xOtYLYM-dDQ=V9JGU_;11a~|LaOZj{<>#uEcfB zrQD;j@`~cq@3jsRwy^M@NFKsSNVI~{@k9UmhkxVSTcC^S|EE7Z?3dz-Mi2O4{Im_50s>BWj?F5sGITv(Yk9WV0b6Zw z&~Ru1zgEZQLV8j^NbdzMZ%IbUcWd82RX)VxP*W4x6T!7Uoi_r1ANI?&1o;=?d@Jb=;l}dys-Mozt`t(mRiNmK`Xd>X?B$l_syAz* zDxnpw-wN&OS|t|m$*@KI?ug7LV9PCW3nx=f_TN6vzw=RazT-pL4;B|#F$AjTy(3&GPcn&m%Oa; zJ#+9cf6)WoWx2U*(FWms+JIRJi}GpH$`jb+Zdm2!iD-@W5n8ph9QGZosfi*~N&x{a zNRoO;(Ui+0sQtK)(L*}9xWof)|GCej{IkgbbooVb*bT^CUFKSyZ%0a@`5mlhefXD? zMMt(`u8Y?LPcDd-gC5IpwFL{2(4Vk+=p>zo`>__jbGOL%d<^w38Ywh@OQ5QTvniqmfo$Gqj7t(Wi)6Ryn5O~NXN5|TGV8Q z8Byci#$Ls;q*x%YBzLnAkpo7pJ^YpqRVYF3`AbXo~u><_oR|HlX`D!lP>> z_A1qv%lt6p(2IY?&D>qIVyEsP22Rv~YsP1BH+i1WAn6)Izf|s*=m%dr3^o&=z^S8% z;?;?XKx<=w`|`c=-~e$PV~4ikA)E8^Dvz$(u_=?7THnS~xzEzWc+6devq&HMh%t2u$Lj%r-?s7;&kUW65%xyT%p)sUUa z*YiwtXv^bXWx8!l!Z4gZ{$r%HkE>$IN-NSOdox8}G~eLdx0oLx9#8!E*FXGoxqxnq zIP`~V^;{)hLn-7LTJnEqJ5sG&0I6g|V19MMks zro+q!4$M^BryWeP2_o7Kv+*M+4?od24=rot;q|nEomMPqXmKKa9Cbad)&Q3m=yDkf zpYGJDObA^OPwh)(dO5~tSMFag`^v+!{HkXa^r7*ybqpGJv^nsHpOAFJhe=IEwcz|p zpzSK^{m!9BMjGJq0o}18!$L>pmReTC?#rJbFKyQ9=CXJp5#*gtvxB>Y^`qaEt{?MfqnHc0TLz>-zj@TZ_A3ZYvojJ34nw{2h^^m8{aAZJACyKOw^0_s5s=wgmn zWF6&ok^faYvJXuPl1)|^!f#ZozFVl?L%NR_U4o;vXnN3I&8U3L?-(kv#puY7+eTxHdMS$+R;|#3Oi$}_WJY?bX^q-4p5n}{j zMOL2Pv)YL+#bevQEvIMkNB{1f2p=1%^=Ov2B)DUH+OlW46OH zN6Y*`q|Vp=ea}<$TVfH)c8Dj(w|#Y$@BG?T>AcoAYO&Z<$z3tiP#lJIN)eE+1kh#3 zHLSsjgNbSxA~wZ3x3e!o9#D#k-Doj#5S-#&vg(k@WK17$6?nZo^El@v7+NP2lW45V_v$PAZCjSzBDpm$6f|>6TMc+p_FtiOQn)%virIS4Cyx$lvCM6}mN8l#H^R2zX`2&{HRsG3@j4M zkUTu&2qkmC(|iQdrGVYV@$7PB1s>Y^rSJUrZUjxl)UdBaU4BbQrLm-deC2>{E{^y& zM=$imEBL8xO>Ak+!mNWdUj%X3F&>fE23Mb_s3*@ALp|gbXgtfG>dRwkR3KVCJ&YoU z+)~)f!i$1|^BsAhyH@iR=Hg3A!I(^Pi)yMo-^`;)YIbngL_Ne;zkb3}hve_9*NG4Yy%1#Ri zd|gG@7VDvSn>W*CG)(U(9(!xb#(?;TF6%zmB&V+yIzxtC{Ik?=q)T8s`vi2OH3Ig6f~-Iq^dngcY*iqm9*on^5!@o%E(0y;sy@O@v>Q zAn(MSukago3K_?In(0%F&LwE>^JNWJ0l11lm$_F!Y*R#-GeUM<_=FR=$jnY$TTm2j z5%g5ZI87wUwX)cOdU~o8>?dOFac4YX>>+;-J#+0N!+AlpBQ$vOvW^O#S1SSCoW^7` zb&8zoT|AFG6mqVo7UeL=3={Z*S5~#}{bKwa`E1-NGxWArKX1oqV_OSe=kl(9IkHy9hwy*p+87+w- z7FAl&uCk^qQn^!>DE5=~p|KN3=Vxtmfa8z~&@C&sx{1~I5`qfk5!S^wrmE+h4m8@N zQLRl!B0=`v?9J`)Jf<}$T#wxk%LlpKU-8NPsz4(4sW~L4*+Tv};{(W773ezdf0;bm zl<5;@+x(kE46D03SDGsHF?R3?K})XWb2+g@(;>XUIMSE-F?>YNGf#zaWK0#q%!^67 z@Xjm`SYvX4s|IvwO$V61+!1W3Ha(#{pQ@27HDbDh!bP}x7tmFk`|!}bOH-r-?bBqZ ztdXTXuINz*{{e3x&dcNG2eCOrSos979@K%Z+`JZh`V2I$^XqbYb;5pgm0Yo5Mpg9p zdI&_eYFl$5Xrn$2t}rmrq#T*4hvWDG3W7{vPES*s$6iEg(JfY3r^r+x==NR#Z+Y*{~ z*OFJbxG_@UwO?j@e?s3=-M_EPg)lE^(g3K?ALpq8Rl1wrbk$N&% z3UjHSZ-^-Xt`5-s=5D$0-rQiuq-4ngm3v?J%Bhsdh@kEC4uOX5Q~lSk+%CS0IT_&+EmVbco!Bw2#-}?H$d6XW|&Ed-6 zkV?O2p!mtckR8ceF1%cvXvZuGA4gHPi>muaT{mV3ufABV>=m_K%ywT8T&fLrV2S4@ zcm8b1cw4>5%b7{=b<+pBQO;A0NE5l~jTY`neX)VEzM2I4+v%`OSdza|%n7GhTQbpU z@&&?}eJ{*2h-{RF-uuJ^;-nmwPiU|qR zeJzU24nDI^-)`G`*#QIjj!sSGKZ`RM7Nr2!80gv(EUN~%wmuw_tONBbS6uSdx@i#$@NxBCPs)Ng-j2$(4jk4FxD$osR;8te+^0h1*ztR67o%>lWBj5?qTz)vITEl#x(~E#i-Q+pVEJ_D(LM zr3MYZ9{!O6xTZjNM}}OA7gz6bSGFH^CsL>HBTD#<$%l7%7je>`sD^nNyLFoeu8@-< zFF|GkVLMP0dB(R;Tph6$sw;f>H;7Td#Bxfr?)@iMY%?Dv zU7OYxFS!CH%WZhQh(tEO`*ZA^r|$L4w}Yf`RncTBfvb`6ck5*)FK3Ct?bjUWE|jaU zOknQANY)NuCu$?@i>Ak5Dm$LmuAveevs`D`yC$TLOJN|cfGAMBBt`YGKb)@}Q2eOB zQ@RM10{;m#D}YmDG>vg-TFe*8c7-UFbC z){RGs*YYi((R3RyfW6|AJe(+FWNfP zy1M+@#z{3|uNJYi{hFAtYIUEK{RPe24>L*)glv!U&Mtk~n_Kg(FZLlxU^zduB{gm=9W~qM7^PAYe z9%1=>OYt$2S{A>YxP154NBe@u4fI@P(`Lt4<)fPKYB%n&wOrl9rsr-ger36{mO>;~ zC6-&@b-$Lk2A{k(#HD`UF%`$pT&>+3v8bbu{RN+@$${$BmAOC9^ElQ%N#cAXW&e<* zBGFMxy@zUE{ak$9*KwZxw?!R9a-+m@Q@=~nZq__y;S|@(;@Q}4!_-Sx&w4R?-Tbr? zZ@c$xT2hfT(Y8bVPOZC~OSbSaPqk?x>vM6@%zlTjc6IL5^V7V2;(FXiEO&mFdKGW} zY+SPM(Zs@KYpQOR9<^$2?!$5O3O?HG>L3kYlPI}UuiML_KP5F2hV5RSl6vd%iTV?o zKRog9W4;Qtk9dgfs}{>Gcz%daLAPRSt`+=v*h_6`SK;{K{CE3azwW=t({6a4`P~L3 zYvk8v{1_CS6!E(GZij}AuT-tpLHoP6ZQqn?4?LRW64^l`mg`b^$%CRD{2Jf8;%Paq zQ;V&xRxht~33*}uWc-W~>zXaD)?s+EPiV`4VeKQEmMRlb>a=Q4vcvqtxA#tM7uciZ zyOdQTxmvMYn_QzMzpiMePAoODmCfU*b00b`*|_U|_fLfyH{9ZW{z0G43vC-7%in*` zu9#&F_omdE?q9IxkyTypA38R@d;6%t7nX?RMvLXD*H%kAJn}-7)RC8)jhX!Ee7)U0 zdVPrZefXhi#kqSs3~;U&zC*jf!7VYlQNu8Wf7$j!k9s>dHLZAVaf5=DJ}sHrTO_xy zSZ=8eTcUo4tX@2+L$9{i;)@?x_CDD}?r^2#vpx9|13rIs+{lBwAR>KP0HkJTCVKxvu54QLQ?H!Pi}Cd>i&_1YL>K^Huqic z_bV^-8QF7?x@LYCk=!`3-2HwdS6Y;PlXhEbf2_%Yz_#U&mWcL<3*B+G*QqIwJCyv~ zvZPyRw0c1OVy8>*nd-OaS@M9sPPZ-|uiL%#lV&}R9XKtL+fOWa<*@3jXT5)n?|bIT zwc>fXrqOF}?-;wMWc7$Xy}DFhpt9+5f8&|*MHc>k+$HX9m7tZ9gh!L37nXOit>G}d zZfYepy&J6aJN?CSyGCtrKNMjz@Tf`4>OHN>Zcp)_b$Zs_pe4ua&K%eOUY)@u>B zynfVt?A88`OO;bDeZJnZ>!x}2?;p(lXzb%1RYx3n`|{TkN3(>!BPYDKYqs%QbNb+{;(p8bzAJoo_#t1b0E>q`j&+>*^Zn>cws@rQ52@xQFkpDq6_u)pNhuOqELms=>3J5Ve)aOjNhHRWNK;w2MyRiAcZ+n&gj zmHk(|*!0eN>!rQ_+$>XWUsAQoD<+?<`PRectNFdf+N2SlYk$41x429xzto0ZK8WNF z63czx_U?>LWmo0vb#GLk)dM9}E8y8qYx`Z8{^UbSO1TZnhXbt(7i#VK%Xape_@^$4 zmdT?!RgxyfzwJ?`+|X%te8uyK31Yb;-}@+Pjd;*zeeTimvNEA*mgR1IOB(WH`TjCi z&Tf9gEXKQR-sRD{{JpMuoVN82wkr47ad4(mc-0R#TOkTp6qP(v)iCaTZh~A z`|34tV3B_gK2jH!O?kg>R%&e6o{Q6y{r5R{-Z6EnNbXRv+|NGV=k`4|>3w=v?;YK0 zxciTC@*DTF`2KcZChh*7Ps=qZNxx>YBdj?MJzjZ^|!5`BO-17P6G&F6z zO~0$XUXNZ@_g(VrV%_gZZ(j54bok7){hg~laoAd?`#awwgHo>Ub8(KTWq+4dl>*-9lIC@Pl>f@jOP({H=QerPX{Dd1PqX{4>p!#D=j&SLW~mY7mUnB= zuCw#g2NkVOM3+5j8uWTu>D;@{h~$nG%dPP(_VM}WU1UwFc1YMDZME}$$=l6RY=R zSyQdj>4B1z18KI+L~=)o<@()K{AifhyJD@%HTv&A`TOLeBHw%mc#pc-EhW#o=` z&VE;&;!E`Vr$J)uVvn)aH;fqk^HbqCXYH?sOPX7|ZS)bz9W9n?dbsM5dudI_R9xpb zvueSomrVxRsu!70Yd#r5cw9{tG57~TLAC6RvW+7UaKlU$<`BK4F#)Rh;)!pW#|5t@4B!7p5=UcwE}>-s>c# z#Jf_tA17BKm|vGeXH+g6mRKFK>cPlLSm9B#%J?7Mc- zntN%Am_DC&JXiQ{ZobXubSIDK?-!;$TH`xewfy7?*P0=fKFOULCWz!t5X*JCx@XWe zMWs}S5@R}dIeTVx?UyC|N{xB^!+M3<L$hSO`Eh`BsWPcw~#U}RMY24WlQ&JQb_!s+C;J3bqjl?J}&1~`b&%B z_Kl(%*RIzq&E;ult7c)TYcAZ0e!D&9T-O_xify|tq<;0C`}2C>l)WQ&m`pz%`Kn=` zpKmmW0!8{x63g}VC}q2%RMSgoZ^w>0s2v+IYVXebVFUL$7Mn8u+~=Pg);8#W+xn>G ziux%7tjac>R(`d6htuxnyXIaCD^YTy=GoWfBDs^ravQ!WzWL5tt8-GTe5P;8ZwR>6 zOQ!T*ZZ`Vbp`p(m_P@DxbLoB)(+_=?-8@se$cUd6j#f^ve1G=(*>`q@dKX-GxqE4m z++?xb*C7}B#kM&pyXNT9Jhr??wdyM@M!fG6;T4ZvSTdxng9SxYezSW*DBDqt=a!-Gr z(_-x5;j0EE_;rr&-@Dt_o|=}=@?FVYq1)4)X3w{6?=qmtvRp^==WDsJOiGO++Ileq zX4V+De(Tu=hi66{w7xS;BzKxv?#fN`@{jfNDi^x1`UvUvc>mH}QfqdZI%}@`?!xC= zChaR+@8;4z{oE|tJ5;Is;_aT<7UnlbY+9W%EGFP_vgMZ}_r>#l)5UV#$L#FU=6+J8 zIt3@cxMf;ueZJF6SLQ!H)$8-kvLBbsxj4DeCOd`S(_+I`FHPDr(m!{2nxNl9~=A{;oLtgQja-w?0$F1l6$+Cl%6!>ZC8_7%WD0TMxMf-zj?pR zv(S>zVyk-|?%AczsS)#ctq*KH@t0G(3v+jG-d!Z=z|LxBfi|`6%H7>$-gkJxVz-?p zdlYLbk~>Q*cV5GvAKIVzQgU(lpgn#UKE8OrcG2h)UFSXwY8Bo1@rBKuFO50=*2Bc4 zuFoU07oC4MQnsEusoG-Cg%0JePdrgc6Z2RkceYsWg{f9~qfP|9oHxhzz?xhQo(7hA z`C!Yr&QB)4toi=v)30MX`)mncmatgywpqn_Q_p*^OIy8VL%vxa4F;S{Yh3$i`}-of zbHs8#B*op|KVw0j;4|xcFFR4MW{KVt9hW};$D?pWwI5%WzLw{jQ1`3*W{an@uX@h+ z9C~qb>)`#3MoMeVd~mW!W3xOH2aDv+70azL*{i9fj%~qT;~Z-5xNPOSBkjwK@Uw#URlTO*K8|m3PPy1~# zH5Z>*&^YA!)bGuPzZK8J%ooe;P$2Gc)iLIpq5D6_YU}PUcT=SA0>0L_o;lpYk znfmoa!cyxetCP}J{20A@OOrachSc%>RDH|5!0>uvzrIK;SK{Zk&+$Utc1^!K)K}O{ z@)G3BB`U(*B7hr4Ne<5vFXjL z=jw>`T`ZP+V)x*#Wz|w`{rD69t$&r0_fy7}%>8P7`TIR$!sq9&yEL+{{X)x+b1Em; zg)H@WWLISPt?Az{I#&ql_$@6V_rO}WL~@si<-VU4A-P|0!=9MVc^P6=c2|5kwvfN+<}My<8}8a(bM3n66;CyPxJ*&z(QQd^ zgZsTwj-T}LdlY@Y*_LKs%TEx=T_%>B+{w0b-NW{=-|cS>KAP92!0N@%R<5(D^~$?f zYTnp+uMb{nGu6rdbFW3Y^ZB)Xv201*kh)VxS1dI*`Bc5z8%MNwvqdC#xmfPD?aGTw ztZJAv`zZP1p5|Ap;p*4}lJFVT+kDPruX5T}(d^98Zy^mY8j)7Y_Kj zGC}Had}i_k`{$1jS>Fn7pVq@U>c{;axt0#Mw~Fm1d-|%$-3>Q8`>nWi-+9NBVD(!kIwWpc zcW;qZ)xFQR+4b7BYuWJQHS!!=`$3&rbn(-5rd4xGzi!yrJ(uP~l(=8ARxEe$TBlFH zBac5B(|6LGzGeIxwP{;q>+5ab9$M`#d}YP8pfYQtTDDa5mzD6Xu&dgDHk(J~Zg|@@ zHAGd@`sMiKRr{vUzM%iEKT||J9{*r%F(FW?unVI>_5bic(m7HVsZs>t{V;T9ia_`O z;VS!trGX5DYAhrP28MR!aQudWgt`wC>3K;8**gVGT{{{EPGmP;cqXqs$3sBwC$Rqm7afn0y z8vi?e4%tAf2~D6aGW9W?`o|`YN6sDD{HRS)iJ^yRQ0ThQUP^G4M+H-h`D1Q!hA7ta7(E|VDEkNa2 z&QFZZ$ID7IcBZf}Svd0&y0HK83Hc8cr1WNP&nYZ(+x;Iz@&7a{D?`S9#Q(E-OygAe z1&MgPN_ifomTR>Nxmw$Uo&S@7pe%n}*-$DXwGv5b|Not1k}O8~Ul_prsUkux3ugV! z|0~vF{=2e?Z1pviYm0N?#S9B$AM?K}EB@nnDKEPN*2u&E4SlIUH5e^1FOJ69n*TqQ zZL)KiMioi#RUF4*K*lwoKh25%{5j6{at-Y<8b9EF-k6y5dpIcLJ^&V$z|~9L{K0>2 z38MtEfN1-O(I7?(7%gD5fYAa*3m7e6w1Ck9Mhh4%V6=eI0!9lMEnu{O(E>&b7%gD5 zfYAa*3m7e6w1Ck9Mhh4%V6=eI0!9lMEnu{O(E>&b7%gD5fYAa*3m7e6w1Ck9Mhh4% zV6=eI0!9lMEnu{O(E>&b7%gD5fYAa*3m7e6w1Ck9Mhh4%V6=eI0!9lMEnu{O(E>&b z7%gD5fYAa*3m7e6w1Ck9Mhh4%V6=eI0!9lMEnu{O(E|SuT3{Rhf!IU*2T}{v*Qf*S z6p z;$TZU+Y;w7vp?NEoh6F%ec4|e9-#YNbVnEX>(BGi`RT7%h(r?4hv5^Sk~e(V06vVq z4d%#)4dmtJ!+jGzEP;Q{4EN>uI0o}!_#TO*G9NaC52NHraZP_i`7nI5NaDzc4dcV` zom7c4A2ys1!*}Z>Hvsw@!H40Sq!Rl6HT{j`!|-h*$psc7ktFhAWGDL0F#V0Fpyrk1qgi*X@ zfCdO7o#>nP_+L^MXvl}r_vk4MpS_cW;DYp|Z^=`b4bYk{@JHW)r_1udC4h9IZ@5!f z1%Tq9`04xW6jl+SI4F$1olar4Kx2fFPV@P&O1N%HMEub=%jvQ*a0Mt2(D%kEtO`K9 z74S>n3a79)d|gV|Om{e6xqh^>lP9W74wZ+Vf(T|8D)&^*DbJ}KQ(jRyrE*E-kjfpE zGb&ePcPckjPN-Z^IUpO8P03!AkCbl;2oD3of&4%Lpde5PC=8Gt<^z;YN*ASrzE4iy z5~uHe(>J>5d)oBvYx+(#xeWULGkvR>l1kq|UI(lPHUJxeO#mf-3$PW~25bj*06T$Q zz;0j<1122Z2MtZ-5LFf!|0#1w;Xl5&Q&r3Ooaz122G=0Qrp90Qrfxz&qd` za38n>tOqs#8-Y#0W?(B&6`=fG1*8CufD_;h)CODtSD+5y2GF;=>jL$F`hW+3&nQV6 z0A4^tpb^j*AYarJpt4EzgUTM2H7dvDfeJubq?7!U4NxAa08|8Qfl2`RsVYEKpgK?k zs0joEMS)^~CGZjU`2xHIdI0{wGvGP!0tf{ZzyshR@Q8r;@8UNNxCz_>E(7O)^S~LP zJFo=Loy6}c;4rR_;P)tS0_crmjO3;7fB zA5#GG57U6@0Qm*-161#+o>RTf1LOtr0o11S1NsB;zyN^SfI&b4Fc=sDkRK<%JscPT zgab+-0O$a80(^kBKs%s4AO-9I2fz_<0-S+zz;&ec25=KN2b>2k0Na4=zz$$1unVXL z%miiwbAkE50$?GK3`_wg0ZG6FU^LJgXbZFh+5;Vcj(|7N3Gf9R04ZPx*aJbZyBr{& z-x}xw_yJvkZa{mW1JDuh208)ufCFF!lmNaWZQp?2Ku=&Laf83!=W)RBONwPV)!wE~I)767$_1%UzpwU0Xfytp>w z@98=pK)>bywVBj*76&YWVn9itH_!{{2~d7gIih@_GDT&J${3Y5s(VxiI|5WUsgAY; zS^&*~W&q`N8GzCzP8X%80niAj2Y3PQfEz$<3e{(-$5fxo0o8$OKvkd$Pyr|p*Z`G* zNwYPWXrwpE5$jnO z_w@l!Kqs#ut{Ve18fc2&CO{j2Y(@D*`9VIe70@2&0CWb(=H%P_0G;i0zf||b00j^N z1OtHp*)sr;0YQKq2nDE~sDMa72}A%IKn;)%RMzO8u4e%=ff+zDFbWtBP#qr%!~vvl zEYKH-0fqpBfdpUx&>!dr!~+8X(qj-n;S@FuNCZX#BY4pLWMCpN8W;nN1I7a5feAno zFbS9rOarC>Q+dq6FX_Jkm=DYY_#xQug}A16G7pd&$OV`JCct;lo&ryR^S}|{Ft8X{ z1FQy?0ZV};fKF!SU!tu9RshR^RX_@04io_j1BZZvzyV-Cun*V^>;ZNIyMUd*4q!X5 z4cH270X74hfQ`TgU_G!7SPL8jjshoubHFL!Byb#{urt7EfWqllcYPMukAR231At`Q z0d4~qfU7_%a0R#sTm~)yH-T%w4d6O(i~pstG~h09kN>^T|56z7KIZRrbjtUUzzE-cRjoLXMD$^$k4^|#6bWq^Nx(m*MI+LyG-pp^;M|PN9}P(APRKq12hAg0*wJ`iyH!70NJ1V6(RVgJ_hw` zJOHvY^)+08inyjek2_Egs0&b^f}W)|ox~_@zEmOMvF5nm->nDW5A*^kZGrd=0F<~6!S4e6lI~<9x+Yst znkl{E0Hu@YVYrR}lt3gv@sjNceE}^%gXXv@*0LfYgj0dIxbAXw^41k^;2P6XY{77H{bQpo(;lLzZ z>-eVPek?Es7!By+S%7Co;hy*jB#(ZHPxs6eTu%Td0pyF5@H-Kh3?u`jJJIujM!Y)T zF&)=p{YZz|z$}1tAU;YT@eq~*OMv;nT!8eShu_7(B48n~0H}s=^0)MyE-sy|QV_Nl zSOcsElJ?>s{3ZV4ehbv^?&Rtp?S{!c*Yx=bM`3c$3eOfo_LR1&Ty(H)r&DGoJssWb zoa|g&Du7}EO5)C?7fQyQucf0nx;uhm4T|rhT~FVXIr<9}XFF#HyV|UmR2-B7Q(Y3{ zr9o{$sSROZkZZW_9&YzZ=)cxt`4>>!>|9*!9MZoCHZS1C3t6-CC^zrxDkcsPAC_~nGgSTx?=~G zsR?B^Q35p@ZCsRG;{Hins9@aWi9|t6phT%OT2LiDWM@viXk#|m)Wi)%#~HS!5ggT$ zCo_|~%KdA=2FL;?4YHI94YW`A_T5(F+l(||nJv+x#0NlXvw62xE-bP0i>V0;8{^5G zKNcpfAfNK(C!QDQk3bpEYhaq%Ct+Gcr<$-Eufj~8*Zcm`@Z^BCok4N1b8<#ZS>w@_ zgPf&R$;D~#Wcg_GD_8PHnVMK5gi1!vJdv_Ul_CgjQG1(86%Sk)0}W7m?OfqebF&d# zf@V~UUz?Uxif39okP*g!LOECS@*?&5@C`k93bG+k79m$+6(X;TIk4NSgyEP1+~V^jfg?xb*>0sPG_9 ztDAAP@n%m+@%NKjCYqX*Lr6h9>xp0T2h-cHD=;K^vnzOb<)eNd1ZatK6` zBNy^`SDMpgzDYPAkE4quj8D({_;S;Wl{2l&mw9 zr|d2NDdo+`1`dqkK$J(wjK`76!5C0T>z+mLPi^>SKx0tg_{gGad9YTc zQfg)$kBNR2@PJwj@?t30*|ZCwQ00!3sYBpkB@>?CTUjUJ)pz2dtV64*R75L4DOq)x z?9zOv4xpe}ARFNOi!!AwNd7~4@MqiZu_z%d=Ri3L-KZR_Rjj&v%5sl2D3sgK`Z}MU z2e&#NRlF?AwM?w+JO_nr@Kb5BE~;Xa>)@eg#u-{WxL}R+7eij=MNl{2TlM!f0fn?iF6>2c2~bj0j+>OP0_TE)d?U&g zP#`d&Y{fL&efcYH2ZhQT(o+VC5v7~S>>JHK&x5~a8i106)_SGALAH?>^S$_@Qa_bN zS4bmMgU1;KhqP{Ie_&y$69y`!Nl}%|z5P*QC#JOn zmAB%cP%eB~zPIF-+LI?yJn($ru>plzzydZsu4;yCD8nesqRu?e#+W{%x_ozg!&AVM ztu*E-{)Q)K4YG}gX`QpL$~jMS&V|46Awk8sexjmHwbg5%^g}<9@|81qUT~9#+*5`AOTn2^wb^hNI=k?a6nSerrCg^q>6tY`V zxujwqRx7G7iX*k#VHzo`DC4hQM5^JS9pI8Lp6Hv>Tn*J}plJ zUEc*fHkCNt@;sj68aaJUAzn976p_K$O&6-QT2kx4^LytgJ)|{kt%wYjs})*J(V5Rm zl)Q5(1hWLB5dN~MbA0JlMFt{%tdXp1G-G#GG}@S%Vo> zIB9ifnRL}QyXwqq4RIx_au#)Kb>fxNtkQ^w)j6b;zHd)E7h4}(e%bAA-`k+@Jz`t% zP|f<0+RC)4&l!yCbvc(aC38HvIiCn`S)&@?BOW0u61HXIP(il{S-4ypq)<=(8U3vG zx#uyUP;Z_5L3jueB&UC#?tZA*m;0db9yVAJ86=I4k`#HQC{lWJM-8K}@-`3guwFpN zlkH>{n~s9Q*Q}L1rFp#Nf`FcB%LJY%DfVy5wDMHj`uT>(jpRHMt0kZ)A{1K5NB<6E ze`-$D01rGBm5?Z@R!v2IaF?1TmTvYBW)!A@Mjp{uu0|`>@?qz~lPZzcWKr8X{Apb zK|FkKgFJ;=9xEAssNLO9FRiGRq23cT&}srvtOCQs+DHP!liS||h4K_7v9ChQ>YQ#S zxVQ-t$o^<`vj9@6n>|KfjL*3Uv=;QYc+;WFn^PyWpcz1Jrtz&E*UB7BZSrF9n(Y0=5=IJ!!5+q0bq37tJsX6JrVmF7dxo|8qPvqq(qNp3b6Fz4&={oH&NW>K6a zK`O00vM*L%*7uk+sQ=|x#KUE3c}S!Du{H||8?olAIVfZ{*g#H=9R3Qlil{I)dLGT8 zkl#UFkb;L=bjJpZE5{ElTAERiBu7bho*a1q!?}V7-Pi=L=`nNK%nODMbe_BwC>EgX zsgx?4ovZyqP@ppPRHJ0tP%^gN(4CdKR=isR6n>r}b1qnzczSSdS*{6)R$vHbVe8R2 zCf|FSDM9oum|Dm>tBaJPB)Fm13A6Q;OR708Is4C(=+EFm_Ry$Jtx_scO(h+aH(Ho4 zX^1&u)So(7mOx77edUo_&9rIWE{o&aih^iCx*s~D417{23Lc*GUpDeoA>QxF;|)2L!1vD(>SO#V@= z?w(`PSgl`&Iz;7d){GOS`$TNhjWJ-i9A=LZ&)>`*$3Y^Mw`2J_Ol$Te;y`ZnEl~`R z+v7m724z(Yn>RCL}&dF%e;Bv4#IA>DHAYoTZn7TiIgGzY~J6pf;) z&zKLAivpz^C}f@HXVfE#yiXb^P@+H~-8SB+Yh`xRt(ZU=&Qp9pCdOU=nQMYTnF)#| zc%Jn(i7_2>CP<*H28DDRe{y8oI@9j15h!~=A?w(Bw5(Xr({;H(IR^^aV8NC3Co?=*Jgi3?q>6~vDwLXb4n+H)AIArkw8`6O_Du*Y)Ex-sY`i!&COwnsvRNZ%HcgRI`u^_MlKtXzqxe zjhFu{vJ@1wz+}+~xjICS-w#WR%{HABoWyuoNvsPVD!tDm4$bm=-0>tR=($jC2dHI% zat%fy#jobwaqzJXD3qs=k^mm^2fn>u{Qj0C`veO0#o!Y^^U^%t?^}Pu!X*?GZpldE z(Twwnx&54cPUl^D7!>NQgJ%LLB&~*hiyvRQ7ssrwZtX*%k+R8!m|?+>?Ak}WfI_-~ zr(bhU>jHDqt`Ez1pGL0K#Rug#D3*|Rx=`Co-8R3j&h`CWB$%I&X|#Rt+xK3piw^C^ z(QFalk5|j1H8de%Ua6^1gDJIiYvQm$)?A=WAZhzraHHLk`Kr%tyJ!QA4r%m`8eFI) zH&;{7rbW+wlUlWA6gFQKhLI~+C53zR>{9G=K3WTf55smGNe**D$kV`3nKB$aXYUVo zXk*>uDtO2S$ORgOW8GJ~Dl|h^Jy&xLH)nV8?vwBmBE>A}Fj z(^cQA5f5g9$s?iHDGgT2LMGn~-BH-@2DN6S8z^JjaJ|k0gW9F3?(FOd3KRDB9CAKUqP)vNd{=x0rd*`fj+U?Hzuo#{?NwOXPFp4F3sE6Y1 zd9G%evPG8(Jk>!d4ob;y-yFS9xXJ~J2Po86p8Jo(j*CwNy9pF;P{_YIG@99KYhH8Y z0;&~@M-B?bQ@BKvr*qfzJt|Q8gHjxn1Cm$Gt2{OJ5-1ZuDF%vSd;R6L^F}-pC<}O= z8$*MeIZnO4U!ZITg)~^WVqn-Sv&t6)O12|CrrR;_lmO591r}uwReRcA;JL%cQ=?cl zXOl7a7YLO1pip|0y%+wzGI4uDfs)^sOHY9HkNoB~#Xkv@vY=3U9#7T2ThQRsPJv<% z3Td5~J0-MN(Ymn$r4cV}a=jO}VdG{d3Y5;gwEYh!F1IYvoEuTH^n~&}$37+4#4q-p zEbzqh@t76$thvo3`IJDJz)N#&b85?iNt^l!l+1fHX?6vjUi|g&=jwuHm+z`Irsm}1 zdH>cA6e{s)i8r+C+nq3D6t)j#GAI_H$Ok@+QFmqYmee-Z#@<#?sI9lo)3t27vO|y4 zK0CG*RI(Zr@)REJqT;0Ct`5=vYC}(C&VlDAq*1S?!$9S(o9j1{ z2GplOYnJUyBbyV#&PlCW5h)+-TfLd|+(GJFQr`vAvYG4T+bpx5oR6P1qtc$Xlb3y9 z@vxSuI4D$h9dBRpaFHNWJ-<1ZqGKmMo!f(kZ$O{x!XC^K|ItKJJi+TbAhp2Ch%Ir zZgeJr8Yz9|edPF6`O+{@XbcF77kDUt?9I&rY$k4e1`0Hz@|HvY4Lq&EQv^K4$6UYX zd+P8K@KF9Br8%#Xb_Gvm@N_QS;=Ikfh3DGzU))@^RbMRPMtl!yhLL@huLK(qccu=VRl<(VW zow|4{8W}mDL50>i?6`pji+CR2YiTu$*|hG*c$nQP_u`~&JU(brqmY!!pinIVPmo+5 zg++PEHQUpbhqZV?GZXqYV$CES9JFE{{+V7vs=OSuM0fwQntbT zvENucOj-_J8PYUioGpemxb#n}bH|zs(oD;9JrvPC2dX9D$$2+}os#R1dM0*U__dcZ zo|lFal0!QOY1w))HY~`wrOiPa;>n>kgGF<0F>-DfEFw7Hdwa_&^FZ$<^O;4Nf6Lj& zXPX}8mCHbyCCXd-)#qbgrk0|)0P@$c!ER6rgR-iE-@`R-9% zPe_}3_Wg~>-M)fuv)FtUzVeK*y8$?HlS_a!JjOhud`e7#fgwaf}S^5Rl-vk?F?jT(&c2Z0G!d zKAc7St!p@}UHt`IN?FdCsW~sU>1(;`NeOeeK^nH1J7er>2}%{jb8@3is|H~$X^o#z zoF(p{R0E|-dFwhh@xHeNiVT!upp0ng*?Q53#Gf36io6CCvfI*$7W;=t;;H_?SyB_2 zb@eg<&syNwQW}oOym7M|<{oTkHZ-8cwkn`d&%xUAQJZRsE%xi;sUvX$g?hJTC$@?V zoIg3n)T9RTh5lNCLitl@Qd6Iz!>+;~=qSB-ipLSNYMsoEZWbsx$MX|B)F-cecxk7q z|Agh%*`T(hq?Q{yKkCpgS6km1TR93%Vb=wPtkbagDn;qFo%@5r`^0Qh%JMW@4Om^s znX(0~9JK-ic6Caqx1a6JgWYJ8X6D?+-aJ;Qqz+~=+?ZApyywu%q&_#9ZmeA>3rbN) zYqk0J-P=9xQrY24h#e@DPtU{pkH}xwb)JsmD)9sbTe%Wy$B&!-E`Gypfzk^U8&JCT zTfFO~?Vdx~A!#eYL;3Uk$;_FZ><_j951&8TdS#YBA@WGJW2|@S_H|}= zE_mA1WEZ4RNvC;b7nHlY>VTdeC0C&&LK^E0X1k|^&Cvdht(2XZ!ha?;2qf_Cl|6Ui7bDzwHr%mc5N0-(K_UiKcrjs@en2Za)9Q{C3_xfGIF+c&gCs9Y3`Dm z{kgiZw@=j@F9x-uojt6)Wjl7pkebFa+05$FUPH8+*^Gl>8YEPb&3rHI4{^wLzL#rC zvU{%pbK%63^}Pbh180=loV{2!a{+vMvc4s!YteJEo2$gfi}Tl+R^ecsa8PJ8m1z~u zu?|L|c#{P>KKE|r`TT+RbJ!Y%fb5oiIiR}zH~t{!niVpT>kan2_QtN={L-UzwZze7 zC@56tR0AhBy|%0d`~j5%{WU9RTj%7jQAg4KWNiWU)e=XS&4W1qcBG8uuQ^Z6X^g>p z@}r=XgVxVi$(PK%FmH=Mc?b%{qndu!d|+amX`rC&(!|SKP^g#o=Fots*{P>4fT=;K|9st$g!|H3*xAVR-1ois5_NJ?@c>1nJ%yRyUR3{8**-h8 z8f+cI{!jmlKa?*!RNUYhq*}A#$}eT7fOJ8m$-gnZq>pQS{1Z zq?B=T0|qJW)Kr8>bps1Nlz%Y$P{u9|RjI<^S7{U_70ZS6U~CBtWl9FB6;WD>T=z(* zHbTknxjmv3Go}PIURoKQr5YH{rAo?XTe*0UDDFb7ibgr2MAF;h@*t=l5v7VG(_~6+ zs8$=LscR2eAxOMB&Mq!4u))TDQQm0&Qa=ZG5CX--G8GEayodoFQ8p8&=oU7k zexQDSenB3r{FRhDuz}d36oINhl~RSRvZ`oxpj;Xui^BUmdJLW6IZ{W=2Yp~TL;9r0 zNh+n^FkY4x^19r9SGz#Hx^NFc3U?u;^AzeBh@Efjz{FpHi)Q8Z+c2Bj$4SUsCn1gc z9FRsV%(OHi8lzGNX>{gCZI6b>q}Q?ZRj=$GCyR0CZ;;POmx6M{$EqjivMR(UA)}T; zKIoIhA3s47_)ErTs4Qo2X<$yT28Pwo;vT`S^OUHrH0h>457Px?@Vbza;U3Arkc&j6 zKOX^ijiWa7m?QI}5Xv(#%?w#ZEyoflc-Sxe2;bmvGow$I6rjvMeQqEkqm2asFru@bFjU zAt*lm1x1_+@QQDdIaJiZpDE?&graZCHRMRV_!=ZViOM7g@ns5;(u^F75+fC*G=h9| zT!1_huTn~b<=Vhd;Yu3n#BPvNLA2qFsf2lJ>PkhZB1tL!Z4NbEQ)?F?lg41rnw$l& zZiq~)(&v@fK@-rD{YsIs7&4MQLgcg&Rf!TMrKr{Dl_+pr6W;JbaZ;({&{4zaKpLY6 z(uQ)p1|6XIvGf=@E-80Rgn^8tgC~d)Kj_EtR@9dlA{{9sM7PYtvTh)pL6`z|43Wpe zaRf&zl`KuLF*1bJHsXttqQ|Q+5Eu6l9}{$akyMV9sza_z?=G(Xrk>9Cy?Ogm4#9cHRkdBYXfGyz$pKT_HlISp5Qmg_$zxSP(Hb@l5FsO*>CqLd zK;}mb6=ym&2;B4o!_wPf`is9XP6C&3!#stdxcKAyh><(U4_r9C&p?dA7!8cVjnL|I zqcVOd#;^5@#$|f4MHmP|v~VNEd&4+mfb>!YgwfCugHr4>(j$q}OQA_u5&caJ7HLkx0WHiB53>BmKaj{77GquKbydEXnM2M&iO+sR2c!_(L9vkH2Jjz!K;c zAPbNy?bXqEyHjs>DdU5X#j~I{NXzM@1C2u>gu6QB^ zLdCZ*6n0b@NF9G{7FhW!ctqmU?>(}rsEeB)xKs5-?b9zsnD_y=aDyU5BTev%!jxFa z$><<>*PzEXnbQ`X!s>yj0m7M6GR(zb z9v&2$I}Jv6ogcL6iH+N%j(E5W*!2$@ZvHGjaOsZagIx{xzp~K`BC-i(xn!u6WtVn{ z%PyFeT0@<#Os0jXOd)8B46o&Ly;ET~0!tu16(ALYFiDFoPfQ);b%X*dE76hm99_(= zC)dP}WsX6Ru17$Yh)D{!g#x8pR6TWjVo*PIml$fxWsy{OGluA|!n$V>k?xXhX<+V& zRv2WFK`6TsGR!i`f`Txcf&C-27Jw-}OggZ4-vV)ZC|eZJlQP;08W2aZunQIkv$agE zmc>c2=BJ9}ju-rc0d2+yAv9yaA9)jwMc}2ZH#A#GXC^X^;5b&Z43%9-sAdHbE{Dbj+x4#xwTh8O=t(SciZCrth6i<>{^lOpCX zg_P*$qfB)r*&mp!9_kvfWMOZ9`@hkIe5ni89&+c&u&n}q7VQ4Z%lrV@9-TfPLX111K+sqW^ zxeV3cOdT#tUdAriAJv}p{u}tyugN3-!61!Zcmf+c770a~W*6YG^kjCn+kqj0>lCxi z!8DrYrz;x{-6afX zcuAXji8zxNZ2T3?({c@jo}{q1uE4{7nYxDhB@r|?AE80{Gb}yx_HS@z4q}CZHDg}f znX&v%b#}A{x>}L6Y!HgJ1^a~9Huzv{BnrTGaqeVZZYm{+4dy7_w8>mby~SV!b{k;< z9=?YyJuw0|eMEUdYUs}gdP1i!6SkzR?S!>LUqlu1+ zQmOIA0rvkhw=LDgMPMy7oI4;)PizJ_p@o4b1W&Ff7C}=86mA%=q3P9(X$F7B04mXj zTTJeNUNCbPVB$M3!O@X{v~gdGyw%s5Wq1y9GTb8_hHDkS%a;tGV&B`t6cUbN13vF=kievvg9KIwCy`MIkyCT_{y#h-+;fv+lvHAz&2( zgJkL$yn>P?Aj3m=fkYml2@*Y}3(4>pr-!qXP6h5>5Y63#CF29x$cRuxXvGE*Jf0nro=ObVAP`0h>{1B1Yw7*R7i_1M2JZj!qhjM zuh>b+$z;!qaydh|IM4ruOxN1k2z0Iem(rY_vXSQO^e?69Y$}qa3;LImg!~f85(59F zwDjU25|$qJFJ*Bhnw2(@G*ReZ$>WQ37KwcLU&-X_P8OMb_+QD?)zU0Nb%ei?nz??Y zdyRixp3^zAD2O=zO1BL4j1&KtT4ktXoTPtU!!kHwQ5rLZ|I2jhcr&C_2>h4Q_|_$J zmWqS_PGSc2(%Z0qDNENxW>zml_+QG*prB6RAD5Nvn|5R|S5o+<{ts147p7AK>4hlK z-5&~~t{rv1*)Mnu&!J@Q<%2nM5Jq=2^F~u6Trse{V(|MhU{j?)LD?(&a1*3gd)xxlBp zM11_4QwV{%)C#s3uf`orM=vJRXh@GPc#uysCzZbuM#cJhMUim)q5$Y-cnf7lwK*B0 zbigi#mqU?CcFaDwb(e_y&k6)>Py`JgG%8D<83S+nH5C

I}^mBxJ;%ujp?1Kz&}(V6IXib)8%kg-Qe6~_WD7bNLw~B zZ>T7VlO!@UB#G{rWmx`-AJ^bzIktNCr)k$cPpQ^j|51recML3nypv#Ut)ZC|!MT7{ zxMA~@hUO15zZh?Li=^&57KlrC`A0EDa^JE58-FEm(a{KaQ3)T%&|_ucA&3xeP^S&g z#-@7!u%=(5MjLLl(mgnF(q0Vm=5WKb+^2u)TxbP|74J@AA3Rcs=9ZsRijvWLYKD?6 zdJ1wxcdX>Iimb8#67j@>8iU3;C#&IE9@jbnzN|V2| zJrIp_gaR)p8`=sdJcRg!8yJfk9~hcWA21{&{TVWp?s?WVG2|fFh6I{P=Pp>uWTwTk znNq5jMTY1rnZiS4taJ|S4k1fJd3G8I-a<7fDdU5XmN5Y3j+cnJ(#YtD0KIRtr9T5X z>DNptLz&Ng)&y+a#UJ&|L^%#d(H)dFJc$bZh=tRXF;mX7Dh3k1s!Cyc%DM0mCxYid z<{R##XD+*tfKpAR7zx*{G>FT4AVv;)m-nf{^dT|yOU|D@?4jRV@ZU-S6MqFZ!+V#+ zs>7L(TAcR$4NE_(KiKw0^^sot*7rt__%YH&#KnxkN)8t2aGnLLrCOOr-@qx;laQDx zgb6j|Ni(Dp&W2ASu9)*rpJ~TyY5EtD=;S2~9I)qKT4bZV9L*D`%8n4GK}7dVlV{A(C`aw2{A zF%yQjuW55VE2J2A=vOV9^;QVMZg-p$#-;+09pud*MUL$Zayfq*gdS}&JO^PJ?m4Xt zC?#HXB{$9z!GDmJUO2(mN@=~#fqe`*5)LDXGXBAHw zW+I6uvRrFtqG53b)2eKOPa2`=8<>flK0}O|xsb?cJ=BP3jWQEi6t7e+3s7Vtr^_bE zL=O$l^aQ7zLIw?U)J-?%pH(~FBC$E78R0ogC1O^IoW_h1snwH%nbMJw4@Hd6vy9;= zx%BmpKP&%PBtYBj1S9xwSAA^nZ~Or=ne zo{8``vN;7&{e(Io$j^rOH*sXHhC&3HDSsn9T}i4=s1<_r%#{CBdNw7T^IQK>85dli zpgEVZ0_ATs7ul9Ab?_B7L-60o75jNXV{z!8N#*tgaZL&2@Qog|U4|x{_-zA>iG6(= zvoGu$V62JKQDu0Egsq)sx4HtCoc(<-(}F$@CbvUMp8-3eK25j+^&GnVw`T;F-e2`tj@Q;vn7ny*P~9A0Q4971ea{ zf?vuM1V(+0mM%*;emsmUPQMms@}CPKTc%544Y{bS{J9vG!Rd0iiuo@ErJD|7(y#w* zqC|NDF`~PFD@e$1$PsS-tr)JzaXFQK{dYoido(yP?C$Rb@f85+%1|NxP8h3U>7v-( z-wD#y;B;BKfWH&RFEFP|6D>H?7y1l!;&e5Qvk+fNgqy$9NmofYIe%42(pl3J1~LCu z8>J`aEQ`FMSAJga*XLnOYT7flW**VazQHhjZD64h5E^zeTmn>v~jwK*}Mmu`b<>r zWs)eKz(1@G)ZK?^yh5Y#ifc@$idHQ(G(|)wtFvXiOeAi@wN!!g%hgz7_lk}Tkwww# zBGG}`Xq=RQ_iu5qITkQzhf0(zCX!c16NomFzwWEhDCkfZ93ISGqQ$w~^rjJeH4Lwr zMd9d9Y}SZ~R^xxntzq{(drwQMz?lOG%XHzR$=pe z9RE^3n~ukc;&cuJR%9b+fkhQX+nniC87(HgrA&~%LihhQcW%pV+%OpKqx1#jy2+%I zn|Asp8OM<$W!yMpNi)sc_rnkHv|17CyXrB+>SeU7{5UV>9#sx~{S?-YMstbe-MHCvKOZQwf3|96X3*uWDxf8(1KAC5i)X8L`Xs2I z_)~r{9~+n1`Er+wvb&f>Dl6WOqWUQb6w4&BTw-P}SbgT2w0g^AxGIDcj*J@j*9x2m z)TJ^}G4HQH*dGIj-5RAEtJnLjunDPME--X46`b{~a7Y`qC0-+HkYZP}-DmZ4U{Z78NjmduV?c3?!X~9y@ zdM!wpu2NxMm=~L1t0jV?hE)kkiQIF$O+=YQl+`nttDfNOb+$&DR5+cD3iJMi`SS}8 z6sL$HkFZ1-k<70Vt-WIwlIus(;LFFN;)op_B`Ar`TDsF@0qtVC7a|!w9rmBO@M8L< z*@@AuZF&B^(>uu)pD;@KDM0_5P8#Jw7zq6fBCE=RPGA=)4NLi;g~NpGAzz13aGUt6 zH;@ce0GA+e`5lyIe@gBWq}EBrT~%%-Rq*`oE})D75VMxd?2#X|-zEaAw?D%BnBpe1 z-dJrJ;};7s#=?AgGGE$(b+Opnq!KQW_De}H_EDRRX=qJO3#c%Dnp&@%fl=CkW>c?f zOJcye_R`kevu5$}vaYKE^_15~HLGgqD`swjFEGX9|b-JW>+(J-u~tCuw7!GaG}oz;y$`*gdWNS!4PkvXLh97J}@_JH(jOGJfNvz zaVHxiZ|d+tY?z^2-)ipk#3R(DG;GTRn z2I#@meA8^?fX(A99-KK1|B&pQ%{CzyEgZheKp7HMLS)^qF#s8@pFk40SMUA z*UpZDj7yLa|zCA}zay6gukuYWpQSoxeVjjD!mtqA$-wev!g*1slM zj9=E{Exo>Q14Jd*3HHct^CSEE^4%2oU2Nlw8LCkna{)DeI=pb<9cOyHM&<;oG));P ze_&SLY(jB3wd4KZGY=4~)n|OX-jYVO*s%C>5ljk(8%Yjh(!2b!>QLH(2d$9B2gjY= zLL2!zu)bj)lD%QmwSd!HdW{K2jH#VqOj;)BlJh)uaxk=r<51m71&&`2x)(mdIlg=_ z)B4$7@c6U=62=7d?$|V)lv*A*7(4Op#4hhwR#W*RsB_K+Xcq%I)Wb=sdK z^3k~|F$qMLiDRuV59fywb<>IcHbc0z;l9b~{QP=J55j652&!Q%{jjcGG zmBF-@3~_8B{gJgn&rmS+QB^M(|F-V46hsimV6pt-(!CLTC-_Ec>joRKtm*n7s(QaP zr@LHH{I&D}3dz~81plFdD(+1C|C2ha_Pk;Xb=S;|+ literal 0 HcmV?d00001 diff --git a/index.html b/index.html new file mode 100644 index 0000000..5fe8645 --- /dev/null +++ b/index.html @@ -0,0 +1,29 @@ + + + + + + + + Musixmatch OpenAPI - OAS 3.0 + + +

+ + + + + diff --git a/package.json b/package.json new file mode 100644 index 0000000..e445797 --- /dev/null +++ b/package.json @@ -0,0 +1,41 @@ +{ + "name": "musixmatch-oas", + "private": true, + "version": "1.0.1", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc && vite build", + "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", + "preview": "vite preview" + }, + "dependencies": { + "@tanstack/react-query": "^5.18.1", + "core-js": "^3.35.1", + "gh-pages": "^6.1.1", + "mobx": "^6.12.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-router-dom": "^6.22.0", + "redoc": "^2.1.3", + "styled-components": "^6.1.8", + "swagger-ui-dist": "^5.11.3", + "yaml": "^2.3.4" + }, + "devDependencies": { + "@types/react": "^18.2.55", + "@types/react-dom": "^18.2.19", + "@types/swagger-ui-dist": "^3.30.4", + "@vitejs/plugin-react": "^4.2.1", + "eslint": "^8.56.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-prettier": "^5.1.3", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.4.5", + "prettier": "^3.2.5", + "typescript": "^5.3.3", + "vite": "^5.1.0", + "vite-plugin-html": "^3.2.2", + "vite-tsconfig-paths": "^4.3.1" + } +} diff --git a/public/404.html b/public/404.html new file mode 100644 index 0000000..e09ae86 --- /dev/null +++ b/public/404.html @@ -0,0 +1,31 @@ + + + + + + + + Musixmatch OpenAPI - OAS 3.0 + + + + + diff --git a/public/swagger-config.yaml b/public/swagger-config.yaml new file mode 100644 index 0000000..0bed274 --- /dev/null +++ b/public/swagger-config.yaml @@ -0,0 +1,14 @@ +configUrl: '/musixmatch-oas/swagger-config.yaml' + +docExpansion: none +tagsSorter: alpha +operationsSorter: alpha +displayOperationId: false +persistAuthorization: true +displayRequestDuration: true + +urls: + - url: 'https://raw.githubusercontent.com/lunaiz-corp/musixmatch-oas/main/openapi.yaml' + name: Version 1.1.0 + +validatorUrl: '' diff --git a/src/index.css b/src/index.css new file mode 100644 index 0000000..5667567 --- /dev/null +++ b/src/index.css @@ -0,0 +1,28 @@ +html { + box-sizing: border-box; + overflow: -moz-scrollbars-vertical; + overflow-y: scroll; +} + +*, +*:before, +*:after { + box-sizing: inherit; +} + +body { + margin: 0; + background: #fafafa; +} + +body * { + font-family: 'Pretendard Variable', sans-serif !important; +} + +code, +code *, +.redoc-wrap .redoc-json *, +.redoc-wrap .property-name, +.swagger-ui .opblock-summary-path * { + font-family: 'Elice Digital Coding', 'monospace' !important; +} diff --git a/src/main.tsx b/src/main.tsx new file mode 100644 index 0000000..ce931df --- /dev/null +++ b/src/main.tsx @@ -0,0 +1,31 @@ +import React from 'react' +import ReactDOM from 'react-dom/client' +import { createBrowserRouter, RouterProvider } from 'react-router-dom' +import { QueryClient, QueryClientProvider } from '@tanstack/react-query' + +import './index.css' +import { Swagger, Redocly } from './routes' + +const queryClient = new QueryClient() + +const router = createBrowserRouter( + [ + { + path: '/', + element: , + }, + { + path: '/redoc', + element: , + }, + ], + { basename: '/musixmatch-oas' }, +) + +ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( + + + + + , +) diff --git a/src/routes/index.ts b/src/routes/index.ts new file mode 100644 index 0000000..fff2757 --- /dev/null +++ b/src/routes/index.ts @@ -0,0 +1,2 @@ +export { default as Swagger } from './swagger' +export { default as Redocly } from './redocly' diff --git a/src/routes/redocly.tsx b/src/routes/redocly.tsx new file mode 100644 index 0000000..35b3cca --- /dev/null +++ b/src/routes/redocly.tsx @@ -0,0 +1,107 @@ +import { useEffect, useRef } from 'react' +import { useSearchParams } from 'react-router-dom' +import { useQuery } from '@tanstack/react-query' + +import YAML from 'yaml' +import { RedocStandalone, styled } from 'redoc' + +type Spec = { name: string; url: string } + +export default function Redocly() { + const [searchParams, setSearchParams] = useSearchParams() + const specDropDown = useRef(null) + + const { error, data } = useQuery({ + queryKey: ['spec'], + queryFn: () => fetch('/musixmatch-oas/swagger-config.yaml').then(async res => YAML.parse(await res.text())), + }) + + useEffect(() => { + if (searchParams.has('urls.primaryName') && data?.urls) { + specDropDown.current!.value = data.urls.find((url: Spec) => { + return url.name === searchParams.get('urls.primaryName') + }).url + } + }) + + const OnDropDownChange = (e: React.ChangeEvent) => { + setSearchParams({ + 'urls.primaryName': data.urls.find((url: Spec) => { + return url.url === e.target.value + }).name, + }) + } + + return ( + <> + + + Redoc logo + + {data && ( + + Select a definition + + {data.urls.map((url: Spec, i: number) => ( + + ))} + + + )} + + + + + + ) +} + +const TopBar = styled.nav({ + width: '100%', + padding: '10px 0', + backgroundColor: '#ffffff', +}) + +const NavSection = styled.section({ + display: 'flex', + justifyContent: 'space-between', + + margin: '0 auto', + padding: '0 30px', + + width: '100%', +}) + +const NavDropDown = styled.label({ + display: 'inline-flex', + alignItems: 'center', + color: '#3b4151', +}) + +const NavDropDownLabel = styled.span({ + fontSize: 16, + fontWeight: 700, + textAlign: 'right', + padding: '0 10px 0 0', +}) + +const NavDropDownSelect = styled.select({ + flex: 2, + outline: 'none', + appearance: 'none', + boxShadow: 'none', + + borderRadius: 4, + padding: '5px 40px 5px 10px', + + background: + '#f7f7f7 url(\'data:image/svg+xml;charset=utf-8,\') right 10px center no-repeat', + backgroundSize: 20, +}) diff --git a/src/routes/swagger.tsx b/src/routes/swagger.tsx new file mode 100644 index 0000000..3e44592 --- /dev/null +++ b/src/routes/swagger.tsx @@ -0,0 +1,16 @@ +import { SwaggerUIBundle, SwaggerUIStandalonePreset } from 'swagger-ui-dist' +import 'swagger-ui-dist/swagger-ui.css' + +export default function Swagger() { + SwaggerUIBundle({ + url: '', + dom_id: '#swagger-ui', + deepLinking: true, + presets: [SwaggerUIBundle.presets.apis, SwaggerUIStandalonePreset], + plugins: [SwaggerUIBundle.plugins.DownloadUrl], + layout: 'StandaloneLayout', + configUrl: '/musixmatch-oas/swagger-config.yaml', + }) + + return
+} diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..d3301b4 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "target": "ESNext", + "useDefineForClassFields": true, + "lib": ["DOM", "DOM.Iterable", "ESNext"], + "allowJs": false, + "skipLibCheck": true, + "esModuleInterop": false, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "ESNext", + "moduleResolution": "Node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx" + }, + "include": ["src"], + "exclude": ["node_modules", "dist", "build", "public"], + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 0000000..9d31e2a --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "composite": true, + "module": "ESNext", + "moduleResolution": "Node", + "allowSyntheticDefaultImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..3dfabba --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,50 @@ +import { defineConfig } from 'vite' + +import react from '@vitejs/plugin-react' +import tsconfigPaths from 'vite-tsconfig-paths' +import { createHtmlPlugin } from 'vite-plugin-html' + +// https://vitejs.dev/config/ +export default defineConfig({ + base: '/musixmatch-oas', + plugins: [ + react(), + tsconfigPaths(), + createHtmlPlugin({ + minify: { + minifyJS: true, + minifyCSS: true, + removeComments: true, + useShortDoctype: true, + keepClosingSlash: true, + collapseWhitespace: true, + noNewlinesBeforeTagClose: true, + removeRedundantAttributes: true, + removeScriptTypeAttributes: true, + removeStyleLinkTypeAttributes: true, + }, + pages: [ + { + filename: 'index.html', + template: 'index.html', + }, + { + filename: '404.html', + template: 'public/404.html', + }, + ], + }), + ], + + build: { + rollupOptions: { + output: { + manualChunks(id) { + if (id.indexOf('node_modules') != -1) { + return id.toString().split('node_modules/')[1].split('/')[0].toString() + } + }, + }, + }, + }, +})