From ea8fadaca587746ffbb8124fb3ac76f08ade3374 Mon Sep 17 00:00:00 2001 From: Christoffer Hallas Date: Thu, 8 Oct 2026 23:19:15 -0400 Subject: [PATCH 1/7] feat(www): sharpen homepage positioning, metadata, and install page Homepage - Value-led definition and lead, plus a four-item highlights section (glyph leaders, errors as values, one LLVM pipeline, standard library). - Hero sample and three programs are shown beside their real `xo run` output. `npm run test:samples` fails if a snippet drifts from its file under examples/ and, when xo is built, if the output changes. - Install is the primary CTA; Book joins the nav and "Echo 2026" is labeled "Spec" (paths unchanged). Metadata - Per-page canonical, og:*, and twitter:* tags from applyStaticPage, a favicon link, and a 1200x630 social card (public/og.png, source in scripts/og-image.html). URLs use the trailing-slash form Cloudflare Pages actually serves; the sitemap now matches. - verify-static-dist checks og.png and each page head. Install page - Drop the dead `xo doctor` line (xo only has `xo cache doctor`) and add the Windows caveat from the README. Docs - Add a std/store reference page (every example checked with `xo check`; behavior verified by running it) and an examples/misc/result_match.echo program for the "errors are values" claim. - Correct the roadmap row that still called `xo get` unimplemented. - Update www/SITE.md to match the new copy and verification. Co-Authored-By: Claude Sonnet 5.5 --- docs/roadmap.md | 2 +- examples/misc/result_match.echo | 26 ++++ www/SITE.md | 53 +++++--- www/index.html | 30 ++++- www/package.json | 3 +- www/public/og.png | Bin 0 -> 65222 bytes www/samples/hero.echo | 2 +- www/scripts/og-image.html | 196 +++++++++++++++++++++++++++++ www/scripts/verify-docs-pages.mjs | 3 +- www/scripts/verify-prose.mjs | 9 ++ www/scripts/verify-samples.mjs | 96 ++++++++++++++ www/scripts/verify-static-dist.mjs | 16 +++ www/src/app.tsx | 99 ++++++++++++++- www/src/docs/install-content.ts | 24 +++- www/src/docs/site.ts | 174 +++++++++++++++++++++++-- www/src/docs/static-html.ts | 2 +- www/src/docs/std-reference.ts | 128 +++++++++++++++++++ www/vite.config.ts | 34 ++++- 18 files changed, 855 insertions(+), 42 deletions(-) create mode 100644 examples/misc/result_match.echo create mode 100644 www/public/og.png create mode 100644 www/scripts/og-image.html create mode 100644 www/scripts/verify-samples.mjs diff --git a/docs/roadmap.md b/docs/roadmap.md index 59111d84..eaca1796 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -273,7 +273,7 @@ are the public API shape. | Import / export syntax | Locked | `syntax.md` | | Closed compilation graph | Locked (ADR) | [ADR 0006](adr/0006-closed-compilation-graph.md) | | `%` / `@` merge across files | Locked | `syntax.md` | -| Module identity / optional package | **Locked** (ADR 0014) | [`modules.md`](modules.md) · store + `xo get` to implement | +| Module identity / optional package | **Locked** (ADR 0014) | [`modules.md`](modules.md) · `xo get` / `xo home` implemented (package cache) | | Reserved `std` | Specified in samples | `stdlib.md` | Multi-file **syntax** is locked; **resolver policy details** fill in with diff --git a/examples/misc/result_match.echo b/examples/misc/result_match.echo new file mode 100644 index 00000000..1820eede --- /dev/null +++ b/examples/misc/result_match.echo @@ -0,0 +1,26 @@ +/ std/io +/ std/str + +$ half = (n) { + ? n % 2 != 0 { + ! "odd" + } + ^ n / 2 +} + +| half(10) { + $ v { + io.print(str.from_int(v)) + } + ! e { + io.print(e) + } +} +| half(7) { + $ v { + io.print(str.from_int(v)) + } + ! e { + io.print(e) + } +} diff --git a/www/SITE.md b/www/SITE.md index 27233135..ddf5a3e0 100644 --- a/www/SITE.md +++ b/www/SITE.md @@ -118,14 +118,17 @@ xo build emits a native executable from that same pipeline. ## Positioning -**H1 (definition):** Echo is a compiled language. +**H1 (definition):** Echo is a small compiled language with glyph-led statements. -**Lead:** Statement leaders mark control and binding. The rest of each line is -an ordinary expression. `xo` checks a program and emits a native binary from -the same LLVM pipeline. +**Lead:** A glyph opens each statement and names its role. `xo` checks a +program, runs it, and builds a native binary through one LLVM pipeline. -**Status:** Echo 2026 is the public edition. A Rust toolchain ships as -prerelease tags on GitHub. The repository is MIT licensed. +**Status:** Echo 2026 is the public edition. The Rust toolchain ships as alpha +prerelease tags on GitHub, so forms and std APIs can still change. The +repository is MIT licensed. + +**Meta description:** `homePage.description` in `src/docs/site.ts`. It feeds +``, `og:description`, and `twitter:description` for `/`. Keep product claims factual. Do not invent APIs, partner logos, or unearned maturity. @@ -151,19 +154,21 @@ while there is no live invite. Public project mail is `oss@christofferhallas.com 1. **Leaders** — `$` `~` `?` `*` `^` (and the rest of the glyph set) mark statement roles 2. **Errors as values** — `!` / match; optionals follow the same idea -3. **Small loop, native output** — `xo check` / `run` / `build`; I/O from `std` +3. **One LLVM pipeline** — `xo check` / `run` / `run --jit` / `build`; I/O and + more from `std` ## Primary nav -The logo is the only Home control. Book stays at `/book` and in the footer. +The logo is the only Home control. Book is in the nav and the footer. Security lives at `/security` and in the footer About group. Catalog, footer, and nav destinations are real HTML files at those paths. | Item | Path | Notes | | ----------------- | ----------- | --------------------------------------------- | | Documents | `/docs` | Language reference hub | +| Book | `/book` | Why each construct exists, how to read code | | Packages | `/docs/std` | Standard library | -| Echo 2026 | `/e26` | Edition + Spec TOC + suite | +| Spec | `/e26` | Echo 2026 edition + Spec TOC + suite | | Try | `/try` | In-browser check + playground run (wasm host) | | **Install** (CTA) | `/install` | Solid button; get `xo` | | Security | `/security` | Vulnerability mailbox + `SECURITY.md` | @@ -179,11 +184,22 @@ add a second rail or nested train. The home page is a language-docs front door. Copy and links live in `src/docs/site.ts` (`homePage`, `primaryNav`, `docsHubCatalog`, `footerLinkGroups`). -1. Language definition (`Echo is a compiled language`) plus the lead -2. Status line: Echo 2026, Rust, prerelease tags, MIT -3. Representative sample that shows statement leaders and binds -4. First-class links: Documents (`/docs`), Packages (`/docs/std`), Spec (`/e26`) -5. Footer (compiled language, `xo`, LLVM, Echo 2026, prerelease, MIT) +1. Language definition plus the lead, the status line, and the CTAs + (Install xo, Try Echo, Documents) +2. Hero sample (`sum.echo`) with its `xo run` output +3. Four highlights (`homePage.highlights`): glyph leaders, errors as values, + one LLVM pipeline, standard library +4. "Programs and their output" (`homePage.examples`): files from `examples/` + shown with real output +5. First-class links: Documents (`/docs`), Packages (`/docs/std`), Spec (`/e26`) +6. Footer (small compiled language, `xo`, LLVM, Echo 2026, alpha prerelease, MIT) + +Every snippet on the homepage is a real file. `npm run test:samples` asserts +that `homePage.sample` equals `samples/hero.echo`, that each example equals its +`source` file under the repository root (leading `;` comment lines are not +shown), and, when `target/debug/xo` or `XO_BIN` exists, that `xo run` prints the +output shown. Add a new homepage example by adding the file under `examples/` +first. Each of those links, plus Install, First program, Book, Try, Privacy, Terms, and Security, is a real page (`path/index.html`) with that page title and @@ -268,3 +284,12 @@ list the GitHub Pages host. Richer download tabs, `/e26` URL rename to `/echo-2026`. Discord footer link when a real invite exists. + +## Social card and metadata + +Every built page gets `canonical`, `og:*`, and `twitter:*` tags from +`applyStaticPage` in `vite.config.ts`, using `publicCatalogUrl(path)`. The +shared image is `public/og.png` (1200x630). Its source is +`scripts/og-image.html`; the regeneration command is in that file's header +comment. Re-render it when the homepage definition or hero sample changes. +`npm run build` fails if `dist/og.png` or a page's head tags are missing. diff --git a/www/index.html b/www/index.html index 90b87058..771affd1 100644 --- a/www/index.html +++ b/www/index.html @@ -4,7 +4,35 @@ Echo Programming Language - + + + + + + + + + + + + + + + + +
diff --git a/www/package.json b/www/package.json index 9ebfb262..7d8ffdba 100644 --- a/www/package.json +++ b/www/package.json @@ -10,11 +10,12 @@ "format": "oxfmt --check .", "lint": "oxlint . --ignore-pattern public/echo-wasm", "preview": "vite preview", - "test": "npm run test:docs && npm run test:prose && npm run test:std-ref && npm run test:try && npm run test:sitemap && npm run test:spa-redirects", + "test": "npm run test:docs && npm run test:prose && npm run test:std-ref && npm run test:try && npm run test:samples && npm run test:sitemap && npm run test:spa-redirects", "test:docs": "node scripts/verify-docs-pages.mjs", "test:std-ref": "node scripts/verify-std-reference.mjs", "test:prose": "node scripts/verify-prose.mjs", "test:try": "node scripts/verify-try.mjs", + "test:samples": "node scripts/verify-samples.mjs", "test:sitemap": "node scripts/verify-sitemap.mjs", "test:spa-redirects": "node scripts/verify-spa-redirects.mjs", "sync:tree-sitter": "node scripts/sync-tree-sitter.mjs", diff --git a/www/public/og.png b/www/public/og.png new file mode 100644 index 0000000000000000000000000000000000000000..9dbf69078ee9f4ecead87efd66d1a3768a647730 GIT binary patch literal 65222 zcmeFYWmMEr_b)z#2q-b6Gz>$RNT-N&cZVP;2-4ChLrZtpAT_k~0E!^p(j_f9(hc{k z&+}XBzPM}s|L^XbdtS_%`OcXWd+)RNXMgsY2n{uPJX}g#5D0{)s34;S0%2BzK z=)jY&kiADB5FtoW=7rAtti8ntCi5y!u>Np31;2edGgFP`<|VXw0JL`Jzpp@}dX`2o zABvCiD&kj7{PN|2VBX06w8u)u=jL^YGj}uJ%=~6-I3X_s1PqSqhCm9w%ZPFkMRY4} zN8Hy;BrY*+N6jSsdnKxZC3ieUvs!_1QLBF+^!5 z%Edp11uVFt;m?J=Q`J;0q9?%GlDSIS!c2O>_UtJ$T{mU%UY#V|-|7)@=OiP=UsHy2 znKe20m5NK70+RRZ;ohmA2O5;Tx0#S_yqalr1y+&~;f<+eE~%k@YT*VASsQM$GuMPn z$_BGpy{S;mXPozB&K(s`2TccLpjry#Mn|{~Chyq5YG&|DQc4?V7nzpWWRx;-(z${FuQ22MY2?cz-1G@+{}7!p%O_`g3FM{sTg2! zGH3;3$VOhASI8w;)Ypn;msn@R)Q;krH+fXE!;4qZ&=?LnGTxe?6y=~mOsiCbVUtoL zbVS1E;W=_6AD9q9@{s=Z7XEN~WD$%haf8 zm+27k@=Mha-K^HH1k_<7?k7%DPtNsEoCC2p^OjT9euj_UvM4%aR|l$aW+MCy;46Op zw(=H|iRvV2pI5y>@m$y|;;zS)@3B(&RSny_jx08NE~4~-ZtRt~Ov}2y8J5gxHqk}m zsK|{>n(t4&Q!BjATnX)kb78GBX{s--ku0}7naS|_lq61bbjuIp+({1IC2}nW-N+KT z!|4aMihWs82J<;ctFnyG8j+R}8|$W=90?KLsa5RVwL|F)W=pz5#aKnAic2`Q#r+vL z!z3gD2G&bByE2NNQ$?<~?DN|8&vHL{lk-hzQZq+(KsJ-qoeW8dJ>l8zO{1&&BohyM zRyZwY+fCc)2-!F#LbP5q&2#!TGx6bHt9P>39NoB1=lR`#r_f{UII0VrGJ3rwYw<{F zPRnX}GpnaAK-(}N!t$F&!$FeT2Xl5Ak@48$Kd-dmnVe`^zL}G9WYgs%>+a&z4EkJuVY(~Qg_DkCCBI5}5{Se4%^V%qmM7BC!Zzkl zD##Xk#`Bk68{Ud^ekyc2}YI>&Qet0t1!*9Fj2ycy+vj|b9 zFn`M7xKf;QYiwxtI;m>dizvA3D!FinBb*u;ROy~&S{ zxFzHwt&22L%s1ykEth6_MS-1mBL~h7* zN%+B)MXWS#%ak+C3zC8YD~xBcB%^^X8ptkB8JMRL9`H0Tunro2XPkTG6}L#t-?>aN9y^N z_ud+}Po*L2riJ6_ey2;=jB^gSaxDiWDsjfA&cH9BNB+5;Q)O{pdWwWK4JU9eou|O8 zR$JMu>)G``tcy85GU<6Q&Dx3}F0J04Ap|O`>)AI=2m8ew^wQdh>y{E-8Cny1M#R8_ zVq#QB5((khn-ccz>CuvuUZ$P2>z6%wg{R)mpL;nv*F8fc_(jS zAju-ro?W{o(@qdSLb~f^XiVYz2(pmyqrb|)BDRN}Vb2;e(1OtEjYK;7A5J}TP$N;Q zm&UOOkXlLuVs}kXJkRt4Ivt2O@};FmtU^2olk+ClK#UQ2_UT zwZClT3*G*iaQ1pni;K+VJQ`R2-RxBVUTd1Qg4Kp*fV%>FhKh?tc2RYVcI}nK6gc;( zmvi6Q znr12JZ`Mc{YL9WH(+oZWtGPThMf_32uA8hr=C-U=GpM8AM^aF^`4}ds=iJExxuw(J{l-XnT^T-dTNUz9eHQv z&0={uPE@B9W6-`281B4nBuNVBdQUn)u*ASMt)Az3#()skhl)^%;K4J9R`cZ3L$Gf- z!$)JhI_jB?5Yv~emONmJ%^60X9_h8}b`BdZbKdg-nT7+Ac@{6~vxaY(bk-fi>FV9x z$~s$`L-x3zO20^I&`--ik>sO%fWvel8=x-Biz1AdtG zXvDVvGh1e@V+NxBvv@27Vv;}_plXM&J6KHr?Q%W!o+Js=b1*N?A%5p{U@%S`H8)~g z%Z5JjlRkEjm((^Y(QDR|ov5@XU@}XcmqT{LPs!_X7Rd*R1i!TU*p0XTmfe>+!cukk zNd@bHAp$H}-g?ez>&ohX^hu^a_nU*Cgrx_1MkMEMup&0#eN5Rx#jG9u?L|!^>vX3V zr_YrFLfC8wxg%$D8|Y__OmcWDMeTAaM6NW^xHTXN$oQvY9vUQI<=l;V^8Pj;4<8 zo^*bcv1L9b0oVc6B|!kLQ?Hz4$nq-SCpbFxHPjg~ieqmt{==Q*#iSgR?X|*IJFNJ# zjEckr{Y{`U;$5`yARhaJsV{TNQh%ny`@PrhDv@VQ&CW;tpRkz1>h|9qS3(;tKZwD9 z_KP`J!UE*Xs(x_imVNHLld@kr?HWWv_p1`y*_Ihu{Bs595_qcLU>6-T=!M57j>|$i zXIptsv9kEMI%O)ysfj!n)JZCzL|COW)|O;Li|Pa^nFq3V7ZBgM!F=;(lg(kiSB(eT5ZYj7{p+B%_mRe9Yzbr}EJry{&}OS@~yD8i3{*FoOGfwWH<;kVD{ zI}T@K8xpJYoDsl5l)K>S7dK7IkRGcgZJKtOkki*%mZW*v6h*A>MhWCfd)p>^ezuD; z^kpvqyt%JBlke7Mb_5pb8|)2V_Di;W1*o|Lx_7E`zRFU>yCp-aA_SCWBP3iltBn`T zfnRr4gQ!)K!S&VIrjG26{5}p&ceA#U#Bs16n2PXIQ#f+#>~K<=@z8)wp1L9|E~|PQ z9WL8N54Gd>F1l~HHE&G2>s8i$xel_z4SF7V-#+2!KvaAp-1M^cePS~})EAqaRhaWN zi!i^1e%42ml@wtCnb)ix5b1!08(ec7WD!DEO&!$Pa}fz_T2E4{cns03s~+)g2}1_3 zeANIL3XRoCU*4#A1okxzCplYJxwP7+5O(XlBJEsCA#DWL?CH;3+vbZ{WSc~6WQsMy zs`Uyxn_-qX;F@z;%V7#|2Mo&PJqtH~UoGxl+Rfn#p5(Ax9IgTJM>7+|Jr`R|dxvL*=&-kC7s+S14%novyA z-s(QKG#y=$-sHT10^Zn&u;yeFU3$EOJQoB5q0^Y!!p3kVO9r7KuQYQC!yS0xf&(35 z;FunF*-(~RK}fA2O#_g62o`8$eIewGh!BSpty8ifV#Ax%O)17Nz^W*FwzYOx4t}j@ zQ?9~Zp2d{+o{UASg&O;OFWeBlwjxwtzJKuzwsSc{q%j`DLPcmRc><|Pr>OBOz>5w_ zhO%=%?5+syb+{-}4tjS~`7T9Pp-kc>t8onEtg#zmVM9HvDYDH9G3|%lzP6mg;<6dh zJvwHyNv2)uT|m7_^P1XZPT65{XRB{M>I0yyw|;XG z$Fh;3Hw$9z;WbpheR_3W(|&2=xR33b<-s0yswXcWO=kxFHDf1rx8X)&TYFj?9^cEo zM7^ad>>J22ho!X}8- zs(8m7nUM+>6*b2N)eo4s&}JKDagD>$>I85$Qd!9!TkpoaOMTLzQypgQtoxV%x1M;VIdz1J1C`Ym{vc3!_J;M~K6yjyy+}19MDG%e zOjP^rm9Ahg$i31JKwP)>GDn<0G1WVj{->!@EBeWE5&r$H)%wRuH3O-i>D`g9XOX>K4x&^iuUmT*sCq<#ysEC z_u6`!ByB&^AMX>Po z`fsT4qGSx0x^ca2vtJH0DovS1JzXL2r7L4c?b&H?Uh`ho-*lYM#p`lPiR763 z+7Rq3MjAy5VCLVX=vvfPi}NCR{kb#=s&i zoMaQ$1~YVnET7?2ZGPxYO$#?Al0m#?@CERLqJ>(*`1;nn$mvi3(N4`JZDk9w49+pY z+#n1#LpaB+M{A6>{{U@8s&aqTc#Bde8!3V*&pmE+?uB;@BrOn9K9O9ZZWA^p$gWp~b@&LYm zI4eA95XT}JHy)`|9jM>%kgR4Z)$$hF3L`Y5d1mpJZI7tHfZeL~N$1i|x8<;lyyq*H zqdN2&sl`0YX!&vIhOd#$J!5Xd%?!(O{($F*Wv67F<#a4lwtAHCwI8_Ly(Tt)e0gI! z*5znelr%2a``JKr8z~>)@Tr@#J;QxPW2f9lIbhEh)jNHoX5}CDM84fUb411 zr#)rLQCy#89x- z$=*gE8`3@-LlqhJMoL3J=$A=Cy=c*`h0NI~_%}Y-o;!e6VZM(Q<_KJSG)12G2bf-8 z>i7Z(o;c^TCGBN%3Y~|r_jG_{V)dp*z*Fm?w{t4mmshIHsIpD%wW55vC4rpJj{SiA znTTpSxYFdU>kDx^KCjG;y_2jrT$A1&^u}1}l7+qCc6|<2o zO>(GPa0x@6W0k~vEnVpfZp{tbj(dsZ9t|`oFz_f|8!Sz+Yz`JH*x}FSM$T&MQBV1) zVY?|ooTP9+5}N!sVZQKWUhd-xQi@1sF0ZMc=$JVVB8j zQTisbLK~Y<8m9BixsOMe*E#*&S;1VD%UKmGm+atScB?4|=Lelk;?7yFcU!96QyB$X z`3jQOdX8T&KizYaH7&n5Z0+oje(&qBf{MgJJt?zNBeBV4>ywduGD)lV=*FKaJ)V}$VjMIHMy?;StOj;4v2QVPf!AC?k?#U%f37-!|KMao{0 znFp7GerLr=KxHX8MeD3F{Ij>Z4bIbREpUh5Q9I8nb#WKs8T|>zf-Saet#kkC>(0mu zYhU#~@^$^?qOiwPq&%H1KjR|rsZ+wUh!OEa3r6sdIhpB zvc*plryN0aX~bCj{Y$v1WujKXc(a!&vEgNsDaPw6m)Tb2mx1Ywv~*L?%0yRoo_!ca zO0q$`0q-=djo&I0-8Y(8uQFYLo2Mp=Qo6{S+~s&!Mh17jR2+3gObxE%PrKAfIET|9 zZbXGxPz!(i?IEK`kA@}9h-~bufgH{O40f=Gs(#G&0)y+SKCusot(XwlY-VM9byqyw zMw)Q)T*7+$JH%0ga%>!Zibbj6>5Jl3p>c%6k}0gEZW;*U*P9xG)}C$Dtz;kT2`tV? z5fb^4A{GrKon?Ghx0RL^QGUCx_UC7>IpRA#xt8_alxkN|L;-l8!t1A#_fHHjb*Y(; zzLy}oYNuipx)3xqon$?TM+Hp+eOoZ>Y2Dfe_o?>y-V`c;D{awvx6A%uOJ*?1tcFv0 zP>;>rJkq$}$m81*JLy(rhe}%Qi?l>l&r*#B?xa+8UWfGR{x{=u7E?(I)i6T6ZCzir z@UL0D%GkSJ>2tIzM4dUr$weQ-NzW3GZX*yngf{8Km-ylO>SyPyrbbT#JQbzYWcab?+$|iRt>0NwhdfFZ`zHS5xt5>nw%>caDu$b5K zfFyGy$&%p~7h=t0JR_M-*P1Ea-{jR4xkd8BSt5n26l99Zp}~kGBdOaij1(W|fGrCKXh^-uoydLz&)Q5J1cE686_hM(E>=%yl8m z$+}BKuX26sV*MirUc4#?b2tfn^axhzQ#3*!q~H-kL8jI>jPW!V-gLnTFU`VxJuzek z=TiHRhK=zNNVnlF(h(bLYq|ExJUVHn2=oaOVu;pYYnq`O65vX?ZO%>+g-x91mX}YD zU*B|djK7m4)elKPl}V`b)(Khsmn@yFsyXI1M(u6T1K;C#)qp)qicOai?^1JvBV`AT zY=B)z*^~Fzch>8Iuf-$$-F0p}z8Pvg+k#9ru<)dpeP&B4Ft7xm1#zd*^^tCoL4yci z*FbC8<xiTtVTUo;EJ@{{hN!hvO$A$D(ayOuCjW*4&i~|fSFU@r|)-()k>V2!tqvB zY?pUodf>fmwEZfhCk;~yaV(F&k915Y{Klo9cJnDJy!p5<-4^V-lt31& za5(o6HITJznF{uFS=q-(-}pLDXXD5lH;49sx}h2aVz1o1hqJDeQmm@(KwF|MTr{R!rEx zM<7w$|JMzW#Q#ws&*=Zk2o~OLi4KaB43~kR2R=ZT27!W9u*YaXR(3{vU4$>+Jp3y_ zsUM*;1fU?+Sqg}f3faF-kFmh?pr8z4F_o?`KWuC?Ksg}H4Wwc+;N-Xhd_;R6;y#rvZy9#~@ zvNb6JP`Yu3oKp)S8H64a1iG-*I%NHXAqoN+v;S~S7vq%qtNK3#@SBS$MqyCUl@{$! z>#1tOzf1mVo}9qQ6Eg>_C^cb}`#2=z-y-j5_wic;w_ZhSqk|Nl->EGWEmm38rv2w9 z%X!^sR?bCh8iiIjnIxJjAiQ zQi?;e{CbKH%A>>^Jvn8K4_F--m0F&OW45EXux|g4D5Q226o+ymW9|0NS=a^H1tpmU za{x1VlgFE16W?A6<^Rcirks4OJc09{HPCYvyf8w0LQ6pfCLMsMJ)ugYpkg-LCId@c zsREMfD;xu8U_xal#04=86)8=RpQV$fodt6#FUegFeisZI+e1xS9Os&$p+CDuY!nc* z{+Af6b*lf#^5v;3;wRF%c1uBEnPd>@D6{IlU<< zhQf&L(<<+rC(0{!YN}NXr``?(NKY;1QoaRNQ$5R#C`Qt*9wi76|aDw|LqnEg>H zDPAP;ZA46>T<|QXDi{wPbYso@BXqVlZT!RX%9wi?=OUlmkFgUl$V2jWi;!>!7M{C$ zJYc!ny^1M8q~66(4@Zr!IGf?5>d6v=Knl8)vcV@3%-kPxK8~U}aPYmvSQsJzPTdpA z9oxodj1jyHi(JGTVsG0&`7Se|OK1PNka3iek^ab!zmAORS|V6O9YiyMKzTS^F}M9{ zoU3b0BY5Lz<(!|du7vq9KsS6?S3W5bBhC|xu1J;amx2Go1;97(@GPZC$K9I33uDx( zJtl~wWE9V%#)qQ* z0xk2W$ERF_pZ+QtgUkjPL&a;@BA$0VNhbnlf&~-SQlO_^xVaXMry_doIaDo{L0zGN6QIfq5X8BkbC zmiKAKV*zF#$Y)s!ZxvReDA@uI-`5c7XMQz+Ig3%6Ug>5N0hZ2U<6g@F&y@`qhGO3fQn<2(6aK1X5-g$3P>G5Ot^pdkKlA_N!2FVDNW z#;IfR(Lr!+Ln5!S@hGoPDjFQUHd4RLk1v1uUi2P1F9%{`VLiZl@BkC@>LKRnNtUN) zLxYIx%*<$D^S)dCo7utc*$8;(>f~cd-=62KYRV01;W7zc67lft)~*#6AQV(!{S%UJ!ud)W%HR4P@NiRgfX22GE3D+NkcbI}#Pmt-?U*q&{?$ z7$N87*vzN0r^0Q%9u8A*@Yq5Np0Qf4NUu}83W#0p$a`9bi!*M@!7`*;z{2_up`XIULc7H3!E&eA)a<#D6@p^ z&DJh9yYQ;#EXWX#pw8|Y z=;2ZJuoRvXXh6k~rOv&Yj#i@%AVsX;6?= ziDUtXn0?;&aZ2fgzTA0*_@J-m!7SX_&jN|jKo`@$)r`BjO}oh_0-5sh7fWm3f6My# z;HdP;w}}DY&UFfzBFWn@OsogxPx5^x`wQjqH=qY|b%A3Eq|l+!ouM@rb>a#VcBfZ% z?7Nv}Q&jmUw})*y<%5`@QSc7k#VmOy8i+nyxi?5R@XdIB(CFZx`*jN5=B5q%kJ%>g z`B^veWdD{o`=RC2&Se)Z+1dLk(GJ4u;Y&z=uRqme(CE_xq4m39c^Nk!AGm=ChCSvJ zo>Ho$Wq}>KG(uRb92$s!`>phB@r?y67zCmScjw7zNrr7h-G5fZY(F9$eC{=MlF#^~ z?1}BKI55G1*@(sKA;rMctNoMv&9VzfG=`9~!O*tHpB{pHHB+C`E^-v-O!*`ZeBb|>cvc0FmU%QzCR+J&OYh&sbs`S-i0hjWX??Q|Uz7Uaby z0_-WAzYkZwM|kt#X`3=4bd+Cr7a+nRMgl3tC}B95OvJy!h` z{nl+}^tr?vUDR?TxvJmIh2eVcbN0`~U<$>x8QhHlB0THHsn&Or%-m*LuH7>>azVVQ53fMX<_sYS-x)&7U%eQ6V=Y)gvKD4)&yJ_*X z-hFtUi#+)L)s$AA#OTky%! zwf5vuce-0eA~|YL!iVkYZ!bp^YX7khVIxaFSi+B6-;jL+U_LQ`D%*{F&t^U@s@YB7 z%lL#-c^sMqo<=h9n6>L^Zh78yZg@~NoS^0t71Kri&vu1SIx2ORA+Cu(+)$5-re%bj z=M{C>HIXw**_kxdMQx7)yHf|FMX5WVH5wh~1>FCDR3DMiEb>;hPhY>ML{n<{ zoQjNse>Yot|A`PJl}09nU8H$RkN3f>?YOA*;KQO3$skK9MeF(cQ02=lb@O)PQWMQb zeA=fhq_lUon@vj}zIAL?EZqK@owx9x6W-_(dAqWi+wsy~!`2~DH9O+M|1RL>hD$<1 zGYV@GcgrnbAYf$qJ)MN_ac?>mzf=)1eC_6jreXKj<;4Z8eYty6`IU%b}t8**`8fM4(#T-&VW?(2Ebs}7!J`wHgUlj!2*%kp#k-}7*@ zjq&cIi6r@vrEKK;Oy(AmEjbAW5d6V6T&cT=BQe z6UM)i%cu1#fO>(IQFr6p2_p;)CwKp=y-Vli_VSAY2eVYS;ut6up3>OZaE|!iW`=&Z zuq2(|_5#t6$kt?PJ;zI{iUEbtj?1VuLL&4aCvCpSiFGhob4M;TK0?*Xw&rQFT(C}v zR!GKVxmN3&^yl$o87dLN>kUON`Z*>ICrDX!_!e*tZuBdCamBg?rjdHdri_!sd&TAQ zBpx*m(zk9_g_8;OWl5D9El*XEw||n|vwUOC$L7SZUeaXvt`Dbw?_Btz)NJYDpy1@{ zeHJ=z?0mghzil#xW*cTQE*@}6Mt}Qz^LFc`&9Uzzt*(-7{g=F|xyk+{Ha&V5!Jj*- zxF9Ljh*qa~je^?v$*j%ip9{S($T*CwHb3>Pv8ZVaO6%z8j7SDong~;XDQ3NXJ)P8^ zulDplSU9^m*%v!6xm&H=r{dxqjF_`yZS@~$>7U#M{Bloa8*Tj?LcERPLh`EAi(h%` zL?48=89KX?=hNph6xsRd>vc z7DD`8KFihFB+CXMzSIs%FEidlAGAD2XX?-$Rn2Fveig8Ft-kC>pfSlV43bi^(^O1z z+CEsb2!43d=Dj<-&9{{t{b%noYR|K8`Hgh3c4N%L=eGl?Ra-nIK0ej9=iIVUB+Qfm z=CRv~+4tO^t#X9DW>LGpSjpuprWuooq4sg{iSUYyY(_mtU;E1d*lqFX5NKgtU46g$ zBKhv9>^zJI)%IMGIEv&QP!gBJ&qSS~`Vd%hWe zmy}=pzLqrm!Z;-bccP{ra>>W8R5u6UZ>v6O$r=qyxuS{v5QKRh(r?4ayd!{dj@`7Z zD{z7ZC%}FG2iIiSO@8n-am8b*XBx6nPw40Z&+mfChB63MXEsNpgkGtc5amLX@B#^> zM~Fdrtv`|EzjK$569%e~so+Rd5qw=J_5BPpW!a%=35 zb%N5GF2j$1#ev15ba4t&-JNT5*)2(A)!^r45?c}>vwvFk=-Yh z6Hw~{ZR2nAMh(zzEv-!haLTkc;JIdIaGRB=bKCP;;$>zvy(=(CYR57MdNZK@5Kd#- zL0YZVeWcAC!(?RG>QkCnIL=&wfuSpFt;?=U&!$o2%0!xrg^5KpWVkh&+V$ZIG9?x< zLHsbR@EAz?-rm$td~BM59Z%B&;US{goS*f=%OFj<$PnK_5hMQ&?Rjon0xTS$WWvDu3~xt$C~2X)y#um(UPZ$)x zEn_}W@~#8HecE|x>bG&5kNey4k`Iw!^kAI_u*>7tM3Q%2Zn}r1I|e!wZpuWc+=~VJ z_*3zCVQShifTyCD9lw&v4{Cj#zWRVxBCyeQz`~7>*v(Db{z=Nfa41e>t&vd@=jz=_ z^7Lm37PrmnI~qzGn>TwqN%LE4`UT0qmh;EuF@ak48uhpxp2abiZftg&_vO^)pfzdz;$`rTTFW4|)2?z9zjwafrJ~Wd;-nFEFx4X-tDC@z&*3eZ=QH_Z0CMq1|pbvN9OB^mSlqL7P)b`{W5D4YB$s7)2{Q0M&K4N zWrkphZo7u0?U}H3Kk1vWjf^^jm5ni?R$xx`o!l7q_Bi zJ*5X@zYY^^`z0m3_oRk)bR!yub6RIUztp$R)hjhQTqtFfdFgg0yYQYg)1X!sp~c<* zwxZD+#)JkMRooGWK%NldGO=UAJ}@KS{Fs|fdC!uCMwhuWQVoA;%V z!>Siv=tLa>_h$7r!B=Y|IgPB`)?9T(_SBV&U3j0Exca-cS?W2yKMw0zOF#qtF439Q zU+d%mNinD3#E@WPGhyLToL(N2pY{Zv-8_iK(T#om_HD)L#B#?=1>BpfQ|0brLH0nS zbW91zTUlncLkT^YHU%gsN%{M=EE?z+N@F3>_M-S9z$qt4_!49ZdxYBA0oe@!t)w2W zw9~Z-yX5WdwUFY6SIKA=2Mc8ZM(N@2T{tU9`4v847^37pr^68#Ab8}-6b8T(!)>?k zOY(QoR#JJ)vK{d3}oHn7q) zg9^3aGvN1m_?Te;@AGVKMXDI169$8s-C~tv@8}$#UJKiFl33@?m4E6#cFuC*eYLuc zs0Bv0YTuE&!X9CGLP?bGZg_u5}7ZaMaO@x{#L zd;(=Kkg9_*<;8z2eY8R>J8X&#R))RsfLrkFvq!;203#Ama<9q@buU zZc~A3=`xDH-bCtGExQu6dhFZT*_Ess|K)O~OF}XTh<&d8N|u|7c8VX?S=Ia=FO?Wu znEr!luYRJq-(MY?4HP_r)RdxLi>yik6&3nK8hUqbdibfU|3iFjiQ&KrW|tfgr*_Nw z=r;@XK9HpQani_WeG}S{+FMukC|Dy{EwdJ>*(doWeqz}80Bq31+sO_bF#rd>ruSm0?fYb0xZZC zElZmNze|%A_e-Fh0krg_N=%rGi;KkdW1U5~Z8z=)*4eJAPKKcO$HcXEGMm@0 z79v7!1LO^G$l2wd^71M+uxTc|SKr=AR@RAiTm6~dc8%}aUT?caw!3G4^fc!!e&%g! zV@AfCiIm5rEX?v9Hw+M?$!z-O3dN+akGDq3w(Mfatp6?g8CNzoHl4Vic;Jc_APLIn za{^V5G+#!)(be&Kst`>nv<;x)y(A>}@HBUBscxO9qAq~+7n)qT|MHl|~8Rfdx}iX*{*Gxa&8 z%8HBos^;$EDe40JI|#2_H&9;{AK$yd*)Z_t&r*_1@J}BUw!MGex{HC)%U;TZ^#bb( zMxeU4q6PqB6-K`OalSw);lDcc7kolVS!vv6Vs0Mn%UHq5rO#yy_sN>~I^Z&G&&XY> zR2_KeRT=X{FnnS%|0*k+8lW}K{tVaaab+YVd6Q7PUCJlH702LqPivf>x-{u{V)$w= z@cjLwA}B81`pAjpzo8QlQO;AFo0)hSH{jIH*PRDNg6&GYk9WMShx$gZz8iZT&`5Y5 zT|{W3eRu&C5pkOnaGomxj0dnS^$IzA;|1*Y6UImdQ5up6MJ>fR!ECWA*kqoc-D4V% zyZ##wv2UL`6;nOM0F*-!5?#a#J}~=8c=8gP&HZ+BpMcIzcC$E^?z#WfP51nDa86E6 zd3h9ITZxH`{$6fF#b=?Dy0!s2ajIbUF>EaG3xtAKycTz_Bpr?s0fb;<@09^)}VC-%(-f13=10 z|G;X6&Z!#)+{mUmcyV~z9mx*u?0n7=ZzMJ*EPOy)_jsaO;t{}~~ zOdf^r+zV?YJwdBoE)sxE{qR|Pw0Z~Bi_qTp0!K|twna3Lp8hA7v-In^rR(@OcdwFl zQz#X)yFu(AM+z5J*~5Q>xnro^di37rj(Irw#fIBnQK`h8iYgHK7O*70{Ujz@P!1Gx z>hn4Qll_^LLqLHAl+o6wpQrlXtHpH%?g`2gLs1dxof*I5ql?`BW7ne;KvlAHn+~ju z3{dQB?@C=K3ZdOK)lyezNE+I<3qAU~2TYtM!WB(Uk(dAFTtMfNK8E1$eZb$Q{AYiMXS0zQVf1WSLOzO^%*xkCKnl zen$YMaG?FB1xB&5l-$i|ut^Y;CC;UCOq*DBweCTLvSR$}A&UDg2tWTcs8wlhOHd$B z07fe^NRT@8mQ{L@{%?n%18E_Q7N*wtyXby3^TO4BYXLwVK+Bs4=FeJS4n2|m_gQLd zB}Mb!I}lCC-!eAPq~sZZK=ikbYW_EvgWO5b0sHvd{_k|NmI9`x=es&$K3J?Uc+ICd zIm`?t_CDNMoXk8QR8hThcUA{FSpUUfpg0lJ`Kzs~v*&kos|s?}KHt@frFE5b-X!g% zISB0=)w(98#^y%4P&VwmC>DJGlOM2A_WV#_^Yp}#F(kf=u|*h6RFsJwzppB;N6gym zYX`^Mv^f&6AP`0#^VXLSjrdEIfzI9kE<{*KS8?}1yNK%$1;`@2K6CfAvtZTv^VSUy zrNW>;dm+1Hyu6+bf~5T^I=n_bfpvdf!;$ z*0ygV7A+*1Vt1ik1TZXtzo-Dz>)06>`CKwpT-2aUQwc@xe>!#i=g_Tc`F*=T>TP;A zBsWtzU90=*#Ln4@wd#G=Gq=8&Hu;(5qq{$2r5dE0Bb^TxN2r(jZzza}%Zeto_ z&F}mw>&tZaChNI0UuyiRnm?zV_>iKy>n1tZa{TM0c|atBbRc=I@omU2c);CN+xag= zqg=&fYe%c35s51K)5v`zA%N}$9DEBV8UtWAHpe$exX-9)Y>t0`e*${(h&he0CGN4U zoxw$_^YhAuCf|*#?228o@ryV+ZhF=xWmG&$+#en&>2vh4T`jjmt5PMxs>Anakg3KX zYgvLP`l%xB#YMo5$UDSx56@n6i^n+wo_}Mdxt+snRS?KMH2lB-@Cl%5Y+7oOh`s0O z7E3|liJdnTBiuQQ0=ju}>rRbxbFa1IXHMVo}UG8GmS zI4yaFy&T?&RP0Sc(33WMz*h z00VZJt`y`f9*wmvRU;|~eSjVusI)s8ivN45%2wXqvfKvGa&1*DyUq3HXLov{JmnKR zJ&f(!l|p_>_=MpzuLS-Y*~Au)H+tJ*?v{X;9;2tR)2U)s{P4YJWZW(epEFx1#J=o{ z{r5Si%HcXPM2p)!P6hgDiCF~Tj6AG=7!@1KLfPVZoa6rLRqpWKiBEkwDf_R_SFM046h*#Zq5U5&0M#8yk~bL( zeEe1wJ%5CpKFNzT1^T&)(mkiT0$P{oypc1_^qDEijLMQ zN+dip@3@>eMTGzgi%@ zGHaH$r`mOdTHF03C%NIE|IKn=_%-iUAGYBHyoe5{&3C&dh=lQ%O{Lz;hi!LCDa z_lMx*_97iWiA#5((1*!hjN|a|a90pzSnYT_8#TR*JXSmV_B_T!l2Zw0^ z_I05zK@RIRSv0MB4v<+5jlfR=H2Wp05>p#dyNx+6E{A(^E_U7Y6|kgFzcvBS=8i>~ z4EV2JD3Y#A?v8ACI}t+5_QqUir@P#1zm=e<3PXP5R_gce?sP@+&$XLI6#B><1*Jlz zKu=c}u3DW>^3nJQpkLjD5K1_26|Gb3obLJ|CIuCRK#6fSJWW2jAIiHR;krsK=0Dy3 zIzB!S%9t0S2^wYkkMTgw%o216T2h7h1(idtWy^KBQzy6|;$_(knyNXBD3Nd}Knc*~ zl&*IR<1GM3c;hT0y7?KE+wM2tzV$A16K`mcL{!>+VE1RWQ#2oWCCzhxUUt!zfc>3j z*UhH;-G9`xPa)@G=o1C~yU zl5kH5FeV~mugX{vDPH6J zGTcsh1_cE&xJ?tTQv408 zk9ls2XLj4+G^t7F^0}3m5AIw1_VMGt@ED~6k&064@2$iC#ob$mMfryBpIC&5g@AyR zAV`Z0Al)q>QZkhE(9%7qh=NFWcS*OjfOHN+!_YN!3_ZZ!e1H4j-8Z|(9{X~A;h`|V z@H}^2=lMCWCv?7{ks|4#N^jZE{pis@lb>`e@o6-dSd^lFcV zJ+KU`8>m_*-3BABt~UxX#YZ#9z=%H|w|l=_coGjr&ozfdbY4b~uMqjaVeU;4PeWi( z&HX>YTR1zK5dGFT^?^e1>Pdi9Z=JPRucGSHxqAm!>S3{?PRG#*o$8(6{3}5^uJ|}6 z&sa4J7o~jFot!YC^TvQIxjt#&bgtQoxow>(@pRM&e11qP$?tiY{;@VE=6K3==YM|z zOzZ^P)&mw{9@%W?0H812#(9m;$!TXw({PMoy#6M%85uXyWL&>||NdRr3-b+V24Ut@r$>_&eStMiJQ`pu)mM}pBHi9UaJ>h z*}K*A)SLhQO$CNCHU#WtCbY!uL9e;E=5roU4~~uU{!ev9u6GZgM#SSW1x33`v3jYH zcd>5i&8rMh087it6618@-(4E0wwjU=6x4As0t`%!GBr3+gEu2hCYViDu+7cK$EsBY zp_+42V5DX$OfOS&n1@MYP3N5E*WsSZi7_>2S*woKSI6W z-OOLHGKfMHo2{uSIDvMP&!6>8f!gBrLm-vu@Y;bH3vLj9Qk^M8K;UdN$rFp|4mb{c z-%U-g-bC+t{aG-j#aBTjcD9C$lCnpon1K*qe!=+LYQMq4uid%%MSp)eM@R1P-_*kJ z_2sRD#UEG4G@^~(=Z`4K5~f6Ayo+=(C={yjEjqkQdHyiLwOQ21;c?P4sx?J{x8|M) zRa8vM$)`sb9XTo~HsDAxF;QE$vNe{IGj~xs9A?bqx;=AzxG@GUGq|(nOdYy44x{;t zhzw72=!OIYvxF{hl~oae??Ya`j6FLPWRSg|0603Q`-)FEp^aV>K==y(#mE4`oCF{N zG;oGFCGbb)z-Ef@U)6hyN8G8*ya4$4wWXKt8CUz)w1|!;1biQc^-*+VU}9)3{>oB1eT|dj-0AP1*^R;y|(r0oa9a&aKT+k1#ExpS~xIf zIiO`HwAo@KkCXM2YLDQ@ zGiqJMVR;elK~%ztxnD>NZ~X}7(5?!{W%%8}rk#G0`^Yze&!)hm;{Up?c#syMVbBc4 z^SLzRRZjhE`@o-ww{PDb8ERIm1Pc{=Xa`7vWEd$TV+Q`iL)cQ55b`}eV;z7j8NqWH(P zukq4ZAn^>kQubtS)K^e^c8?+QcW1tPE79;Wh2=3az903P8yOjs}8-vW4-jp%TI9|<>L>t1$2Oopo^MIk&50Qw;Ds_XsU<;?ELOJMbDUqu-rx4_}Bw&Co)0xw18f7ij93=yS98(PeaW34*{IgA8l`+=Vp4`kH8Hz+6Ug__LQP+7N3!;|wnv57 z*2gVmG&G`S*d_R_A9?<`c@G-lYS{z7k*VZ`f-kOGz-p5}oGWP8{CEUGD{XZNmI2)| z-6*7aKk?z9hC!v-1psn#gK_ix0%OLkhM!L$u9pyXWZ~ym&!2~nUhX0DU(S%_Y;v`1 z@YzK?$zbvdN~libN;@+kARyR6`gBIy2nH~&xgT_L5l2u3;TjV&4$uaW6`nt!D0=zctm;0W*ONwFo+^VoYm5D%t~P(O}^IYXu9pEhA@X-<8MTDOG`_KQmjI&+{g`v zpr%CXyA>zI-DdL8UW{1ai=n;dWY;<3<-zHSLT$q7PBP$=;ceXCopXbl< z<&-dn*KR~S$?tFKl-+s1FwoAUH)9o}3oS>>yx)C#rTRdR2i$?t$~qzN`_Ve1HO1Tx z&xo2MnBXT&zjFxc?iA2PBPk0p0A22z?JRukfNKM6VQQdVpP+W-9vb^5LuS&1IhaPEt`t5u}G zGhA5x(?bZF&+9(=-9dOBNbQwN&-?#=Vy$Y!@bDpj~gBHP^K<8=lUnxt7q1oIh)xxaMu0h%61 z6`E1&s-30GycMPq`n(_76E1FX)`T{2{vTO$5 zLT;i+Nim%rYSW^UDLR~^b&PwszSOs2WMsX0ytkOuGX``1GS?SD$!nuiEpX~N@Dyy3 zm|Tr=-HG=A9-tA0L#yq3#)@aveE|Mg3f$l<#i)vsSI6fk7GvAq#rjRlAu_F*`D3=g zN9$4+a@bq~cG3ww@`X^YPs(Uv{Bn03a#BFBZ*t6T7MLwwYn}F&oe=Bou{u1TEG%*O zIRjqEyS+~t85xps?_WG4*4e}yoI9;<3!8FX6$zi$xo-WdITPDR^gJTZWeX(^kg_du zKUj^aC_4qtq6+8E@lHcz+Z4v~4iTGd$S|ABMb8TdB;a+kzhw%@@Ji7_xo1>M+ zIYkW`6~WwIYk#|l+W|QFin+nli3;L041iZ~MR5`wYnzNlpqH@h>}<0BXYAVPZz2|e z&DjWpsb@K~&1bYbw&%=0FO-|tnz|&0d?&kSpXar0i_HFIH(er9cm6}v=hAwjaidB5 z;Q90Crv`CvOxvRf@7h>%7}RJ^cy}&$M`t&SUXZvv4|+RVFbi>Cf7?8xw!-mYs6mH` z(yH<&-YMA&DIN-(2UJ2ICztGHWMnp-pjZ5EC$Q!X=3&5jGX0{AVz<%^H-l}1^}17K zAiOQzXI9@A7h}kI0NiT;JaK-g|JBr*ws!!CTMiwekR&%?`!(wkO9zhn8~QQ^(b&LX zoys|6RJcS`dDdURu*S(%`C&`0;Zn_1hbO_?+<`B8a)uy7bb~|GNkD~J02R^ewbSJp zJ)H?=5DxG-T=Rfk^>0oL3+!c824iJb%guYL%$6UUdS{Fj=sS=8V%~K04j=b!DQi2p z<7t;cqOd7y;Xjls-f;8uz+NVS&r?8@J;BIX)YccP?dz z2!7AfZq0Ji{RS|)&-QTG#Ff&#l<$+Ilja7&wO<7Au$8ltcN&f?k9B`nENlpLD#;=}Dz2`Ms7CjOEK^cb12)~v;xvT*3)dZMJ@Ab@K}36(tG2LXkM&kE&!x z7aKGYj6N>@P#ao=Z#tW9IA6uSv3ArW|A2r%xb^qMIn`qa>=Jo1GoaZLM;{X}uiYfi zF$wx_?8yJP*|H(QJ{-fTBQs&)`ukXBZQ=Q#xci3>C)0NnI1lVle^yXEvIi@@srIzO zO$?SjDFedh%7UgTwKdBmZ;PQd>1D-#R!B~|J3?A=&LQpkRc^_v2~2`jwoiqPUN*J- zP%6m=9`?iV`!DmUb<1Ey>-q?0ie5fj^^_F&I)?ugFrGWdS?Zk<)E(Zv24w-2pJEsD!;ps_E5@n4m87J ze18PLZUwF#iM3vpT8E29B&SXLxN0j5=f8TWB8&A#TA7Zp#<1MWji7fE#HL+krB$Q_ zYVl2|Q?CDoXrXDb}?xrdVRCQc$<}=~HLMKI_Cu09WbnvmdW`d2J`^ z<;!dmV+o`+4Gk$=t&&M$vCS%(Bfej&Z|*x=&wjti0ju?oBOBbK9d;W}H8#@OhqZs+ z6$k%VAL&?|)c&)6xQ#kz;76x@D{zLN@b{YGE5%3}YKDp3;i4F6_+ zxI9zG$*Gmn`OAHy!baQlClJtTDO+uY3JPycz5^?C<~3 zB6LG+^`eV)TUC58Cl*GY7;adS3F5h*VhoFRqb~Zl28#ts88?U_;QJ=e)lUKa29L#K zwA!a#m9xj29|u*|xXQnMyB&W21P>pxIriI>J3SdNZ>!Gs**lopTiyu6qa0EA2_Y{B zv;bz9p4{ShcYR~ypw0y!|7~M+FGfuwvpb48YbEx@Pco9XSJ+d+pb>eBhnsWuBa=iJ z=?aNsy3*3pA*NfR-j^*jUy4TGzX;6duUu&R`S^N3+Mqqesa1u*xNpBU zPW_&y{3v~~PDxJ-L_!m^l-SAo;S?x@!##>-0V7RZ=~)|+d?#7RB~@!y{2JoA0=mLX zF*0>xQ2fIDf=^n7^FrkG^kA&Gy>AlVMJ;*$+cyxrOki=TO|9${^*IT^#l@vS^~P!C ziiZsjI_=%gK7-hhwvF&`iqc}4pETr57tc1`+1XU0TVbA|6D_uea# zrrk9+ttMtY5T>7vCCYobrq5HHNVR#=!KCoLcWQ+U049>)a~2?;uqIS|URu}T*H(U3cX7sXxlt$T`ar5O&Md5{tX3s!JwAwab@cFE z{ydE3^?t~XEK#kN5_?SXY}^~~`3F9yzPJx)no^4!ekd!ayeg25;bjP7H>k7e>Q?Ga zaiSX>Yh$fePHw2TK}k$KOT@H>=CW7kk zWV3!Qv%YY-2@*y$&}x^9_QD>mVo|q~4<%Nw^RCSL?1od5&uo;jR8IVydX3QC3?u2l zw@>-XfPi`5-Qi%Tyy4THLr;}uWy#g?a+l4(1N;~*-ua1qNsl-QiX}U=!J7jv zCbx0g0fdqFZ$DM>`~)BJB3P>*hdF$Lz6rvW_Q;fD&)~FMfO{*J3>2&6-_4-^ch2~O zXxcKWmA`P(uX`FR0zXZ5qY9PropPbc=5b!yNlzOq;o@#-pCmYCB93^Jc~KZWQ@?yhb9fu!Se|y47<^16rHSf|!+M{f9aN9s2wQ+k zhykOl6I|1iT|`8MTjtMEG$K|>n>%wo^$~3n7f=(?DPSQq?TJk1q%a?176oQ&Z`{F@ z>(=~$P$7}q@k}}F(Uuj{P)oJltU$icizb{Y@n88W zC%gVD*(4@8w8pL4vb7D6!NUxIkfuhlW|o9sS(0E?d07R7n>&kH)aPQsD{vGif1>;u z`!|5yFXpUvB_)`=gsf*T>z2eQi`czD7%NX?N3J^%v{|d92s7n1^ZpPcn#VH`J#^*N zpUI`Zy?l}7VuaJt`Hmd|EZ zv zm(Y_cn+h1vHL^j8o$IAzygHV{{tmd1#*^tV~GGQ@lP6$VmPl~%J;nu6w+&CsEk)H z>cwDTF&sK`URC&^28MeMv$ZxE7CU;foFb|UB=@pjnum8?xB>F{6ocZ!j=4JPgK~~I zu}mf{8%Ulu0#43O?CLq<<#CRrgZ^JfaS{c6_CnsNMf{qi<~dk(T+NYX&}VzA71;)G zvD(}dQlcW|BoW1-d>0!iflN8QOi+lwzxo9#Bt-;yS0C&tAVnye_41UaYKVH_J?5mLTXNsrbEs^b7@LOD1kX4CSn#~G$6c$FD!szp&myI&NQoSJ5Z`OAENB(bqZeif}~n z9WGb%{7qDL$LjJ=~Q{QV@ls%fQwVnU- z=wg3-_3baFRjx5+zKEZencilE?}(R;NZlhOJOH)QF4Ce6 z_;@){-W!;>1IW=_PEM;CL)2j+ukng*Gc%jYRVbf2H* z^c)Xjhf>vcyC=}uu3FqCc|sRmIN+>l_O$N$`%)W%f}^@zNl%npYkZ zu+n&iA3Brpd$ZDOi#I)jL%)W{yC{>HjDoAm8k&M-CycRy&3eBK!nJt&p&r(JAX|+f zQNp41?O6)yewqI-KXJSy=Zr;z&1ZR%NICrjTciDfi|^Tba)1kZIC+*_Sa@V(xY89w zLUgJvXX>?$S+!@K04C3CJzZ;Z%5v#6t$VQ26|oH^N{h;MV%{70g?7l-ZRp=k^X-o0 zKrd`!mN%+hcZ7CCy(%nvjvhv-NCYRn@&hR)y*ErDRJ2!e8MudQEF$?QkkrVW7(P8$ z<>32}VOIx-Ode^wnR?H?eV(SIr|n;BxcQG$gDLozfZ5atzp3(hFtp5Mg2l;sbzo=LOrNQn!RquSh!FLm-2NZJcYC}g4@yw54%OfQD2ccWZCFH2 zzjc^$kuqUGRdZiFe8Mv4V!d;gySDZWkP`226&C7Mc(pEXgd-CGCo{&LU}}13N8#jt zxxdwWC!e%04i*?i7}|_B5|bO~WQ`n4{T?buLH3B+AmeihXk0U^dJZ`3ryupeP+;(0c5B6D2 zb3WP>thU+B9aG=!m!zOY&<-j#=#xV$VFK2jV&Qv;p8!Tm&OMN$la^d2S7Qo;n3MSBt-H|q0_z3LlSF;R1q0=qbDikyS<9c& z2LvX_zk{5`FQUFJ++H|%b<~8L^ha8B z-?|;j`y~rYtyybu(E8YKXr46yKl+v36-dV#m8>aty}TmMsANswi8nWqa_BVe>@uTM z^aLuN3f8BXMmJ5mZAMoTK7RbT5q|7*w9x0{sHNNF+~i$Nm-E1ei$~*_>lu#RkJkt6 z8JLQFAmm`3pc0e$FvEQbVRZsDiOulj95$2TV++zmS zy;ZcOdeGa|%B;&~!IB>}Qe;D^Hf|;l#34-%J=zo1fQ2?v&RC`Q-(@JQw9vXL@0{|d ztK7F{nT5bmjO8)DD}O^EC4sMi>-FO|%sKgX?GT&ot4y*d!89{EzfA~k(q`C+{pw>t zOwLhh5`B*+e~M64TpGvvpS;=1u}BiOni!HNI<2ypcp1_lW}b68ty@*3cfBg?`gdOZ zP$8n`DO5&s_;nAH^By(1CR1Q|?tZmJd8;=`^I1SX(57rOQ{|g0ksronh%*ZdgT4ke z*T~Tyg`xMgAv-x#o*@sf&*P3_a``*3JA|To8F=_v!0KeVdq{E#g0luqKE#y>$L>PP zF-vbxog?dsD(eqP;r$PgPl)1zpH17CW=*gMUMVHWZS+A3%P)FV$*@!AvT55_qV^ia_p*-brKX0>E*Eyq45UZ6D8K6r-P~{;) z((@-7tHNdUrMD+Xtf1QN0IA)mm%TLWsh(VcO-8qk9b$?+UQodWM~p$aB%B7 zejuRDij+^1CIpDGlV6_duB z_J-5?2+ft&X7i0}Ublh0B{->e@Q)HFG)+oO2M~x`ldkGOnW|06v7eiu*Fl%PxPk^4 z`K?9W40j`A{oju)U(t{g+ITgWv9+jtK7U3E-dxXv_0ts~r4dE3>YQQYjGe-6)1#jjerR;x@+xNxf}D{yM80yt?5cI#XP_)} z-W)ud%;Fx(N)x$t%NMQ2I4JO(f-3CSuTiJ1*@htZ?U&k4;;26!MKYBvOFI zKQ?)+N4j{5d%|wj-AQ0Er4(_R+oL}p){UxwZB19D*-|~YDb|_tPQLzl_rsGWJAxH- z^X}Yj5Y$X*>QIWRAVOwKx7Jc?(9>VtqvZBQ`+eP8>k6!UkbL5eeP8kJvWlHj=_ya> zs1fQ-^(=caF%co3HA)fkL&o$av`N6J7X$Jjf;tJto@1`)!LO)4R#4Bw(Q>uodCcMN z9^qvU0YP}rHnx2Pht{~O7YL*0{P`M%Zy`AaR21w2jUePuXLa7r$4Px3B%G5XL@7+E z#>+3d{nYLdF43c@3yC~Gty<=jDrtnsShYrT#)-POJO!c5{VkAAlEgc#R`DUqeGQNZ z*PU^xfffs)6zl32{MH4Yz<)Si$pREW-b9ByXljv9rc(H!Hr4F#cb5pGLXN1L*es=1 ze=s#a#9Ks-MXqE>KVB~15M3D_-ItJ?d{a+>J4dC_?dVO8MRe15{m2^Ut($tApzl#v z@aDp%6sOBznVx*Z_X3!|=fjKy@5eHz=09Rdbac&AV34jOnRZ&;;DgwYJg<194P?lL|l0qpdp1k6Skk* zEd?x2XlN*??tl3G&@mr~)_blKupo{0y9K>hG2?bjBjf;5inS`cm?HurBK8loP2~~v zdQaGOAXz(`To(LGDNeORL*Y}&pR3e$>mOqOFUVN<->zm365C+^5c&wbdq;~{yXYSm_>E(*&7Fs-ldv~ zk2_OU=@Jv+y|D?d&wx&LS3r#T{BRv+`8+_?px&d}1!+sc>ts3R1t3ob)XC|FYgc!; zjx%pjqGG;qRL}~|Lrk*@+^1ltgOfO0J{gyWr^0pOz5D}>AzF5DAWh`d%tOjd9xenE z1?FoZRvH=d*4AQ;NGJ!N)_sImTM&Q08*Ci+LUI1r@sn&${@L3vr;zx0uiXbIqs$wKn+ao2g6J!sHR-Q3t|5E-@^jk^DAvgW({ zV-nid(@oAAtf6rnW;z-(*Z*vR_$KEhvI4%rN;WC>+qq@vE$TKl4uou zU_lr!G?2&e>?Q@revVq^$3`m37`YTaMW*3<_{Y!Qh!~zpj6^(6l(4+>ts=YBwBr&a zsNa|NZud>gw7ut|y+=S~g>p~LsTNzUhEV91W11*5SaVMVZc21Md+jO~+a;Kd2NEuK zK!HXyV=-b`=6LR-2KU9jX+rF=*^(SSAjCVyrUD@O7GSCGq>Pzd*fuUumU@C}L^{g=Q49hEq$$o#mcviE7CA@3;-MRau-japE2U z9sN4+Lk3hdSU( z$?>kg^z+-S^Vd#Fry+WcaHi+4%TzDomuLv?ow;vpX8<+YKB%jk zn3(v_$eKe0*fJ%ee%`)==lB?$xMoTvb#CHVtbl@-Sa>zP6+>D)?3C6)O@%jTG>!EH;98g6dspx9>sD*W0IljVAY~t1{{~UO#(tafx_NLgRGy2MH<`~|rlFSlHrNq&&rh>r~iKP;98iZ4#dvk>avyQ@0kRM6hYx!0DtNwVsr=x`X};@)*B0IArnGhkq~7Jat;%j7n*O+s(i~4iC;;|G?`J zZqWlWx!yn*kJWED6!OAOZ}24pg+|A$v~zXkeYSe3i0~w3Da%!!h$N%#A1`EvM;5yk zSqV~6-4e6m+BrUdfqS?marKPf@MwO~9Gz0dUod7fLq$b}Y|_f<-%6n2x3_H_^}f6z z&htAug~$0xVK6-!hv-g7QoR_SrFtQ45N;k`NHP-kPM{u?R=2<5gd+YY(r5Vpn8{j3 z2abWWb@+XifTMJa# zA=A7mk75DlyCBN9u)gqim0`jlARvI>b$$py!d~8@@XP(>#f||$Z*y?;1IKKwCqwfP z$jO=1KTof^s+sjMuBUmodG4e z8EPo}hQixMC-X~Kt`TL#Pn!td(hSGv$%(;7YsS!wI%dQ}A~-3VjtU-#t3Y`R4bpVG zKs(6|#*wTzNznTqqB|?UTK3-dNP+5Bk++QZ*}lzDiv}plQ#Jf9zQ4^R z3CAFv9zXQ(@D9Bn$)f*3K+N~AIp@s1HB^nn#ABz}Y_L3k{&oLGS_uFLd-Y0|{-$MM z<~mMavh^n5Y5_?#vlaM20NlR@I*6#%RX%NF+x|QHDgRGG+iA{Ku5&kR@r~+eil`6h zx|kzcVSm6&QB`R%ve1N%fZ0pB9r+_o)BjW$Y6L!TF#4u zz>%u5o^swiVW!x16iFYunaqf*%sN)U`95>-FT7!@(jqQ=E}BKV>SqjJwbe<`hNcT_ zEIvZc$EhU~EtQoOxN?LZNs9R6y_zg8DQo{2jh(G?*A~Dwk5wB+Xkzmk;Fn?^%qE~O z3gB8_tart?eo2wbk<5`9mZW#Ttj!=}UfbBL3GC4-vj5bH%=e5z(EoV+`PT~2HPr&? z{}~Cq6e$;a&+wdNQqHJl@bB$2Thn|cN{251KNEqc-IBy}+8Ha)fRt*KxVvL3O4*{1PM|$jPDP%jslN=DqP+ z>DEzHbw~Rd;`b@a3#Ur5Kzl6gM-^|7!at;}oExht_51!EF<4~lYXo7id6$r$j zH;7)DH3<{NQfgo+=rIDhq?=54ZsM`zn=G?o5~WyjJ6!Jr>?c|`Pv5o6!QOs_NkLNg zzTM6P2L1|0V4hu^KY$zQo12GoASmV(M%H)f-FZD;_~YhQ+)uMlivgO?4j51>hBiq- zjjO$Jt#9@uKqm;Ra5rO1-Na}$Wxe^Zu%R1j-11Hh@E&T9PHN!-J5oYNs1?h_OE#fI zu+Ey~(y4*&I$*dPwYz!LJ`D!E52_tY@e;n`peqWQm&Seoa zSaG#-&1Lfp9#BImvx|#oK`)o|fRd73KtU(*dx~e+HF)l5=i4pyI$f+ zz^o7cw@)G>U3lNXQ3CtVPU1#dU^%h854DijbjC3bV4bzh!3yua&?#~=)ZR@rQfOVX zF)Bb?Q#HSfl=AGmHO(W&i_Xdd!z$fL-K#7vm5mjm`&5E;&SPmz0|sLUxthPF47JE) zp?cA+jDqqvBz-fH4{mvTU#2kF$K+d}7N^n16^(uxK&ygtt};L<+|Q1x~1ZdBhd zOc;#Z_0Rl(m=@Bj@VSMP%5(eMT}G9pJPSx?s=AkfRBD>ThKn8~2saCmpHt53@KbCTz#W+> ze`szg#|uQja<5Y7!SPGfqAXRwb;t3vn{G<1-csy0d3{ST-Fq#XMtzDykN+~oPT zGo1Sqb3}@df2UQEEXIlK;ZWf(nE$98C$#M5aj=BUBPzOJ`FkpC#CAlL1I4puwQUIg zM+AFD9Y)`6%wZE4LLSHc&H~M7klOUR+-FBVsQW(ytQIiHL03Evnk(pY>KqTHtBka? z3OS!T!(+sgmBz;#*4hN1H!kS?unojju%0n7zuIcz?@Qo)-&A>T#I=}NG9$20#}%`V zh`M@2^vwe^x-X6evpF1N0=gZ64HV2U#BlEfq07!V!wGYtRg#d>BJ7>zWlPq2NIif& zx6;L#J%Z|GQ@((Gx69I08p7bV!6^ET@IlDK`jAN9@6CYoOzfbz)7k@cM+UW6VLR1D znL`a-HPG!EWD3n0=gGP z__r-Q%IF9rPU%>E39!mY`NjQJ$AO3`5f*{?aQA3zD) z>92zB+k*lr)jKmtx6hfP28~`xISkvDpqn!Qr$DRFrEZI3z&+Z{Hl+wS!a=)bi0=F^ zckB`xY+|I$x}lbgac4S{UXkVv_E0D7&Pr(LtCi92ifGcH z?nq9Zmcc<<07kCPWZ>eS5zBP#2#MOCJ@&3Huk5;RUHAIU?Qin^27lO2XbphrKU%17 zM(bJMJUk5187=U;yJ9z)nI?;3#F~k6=+>r7i;b6vqW~6euDUtM%*bdqA5Kz{{)=XP zP;L=~&nhj|jhQa*6R4{8jHSYpMp&ai33R3A)H{-~Y1cbtjS}6;40EQe#+Q*ztl|KH zutBn*_wl^8?+P_-RFv+&_)SEYb0aNXMG%cM@ zP-~4=n9o7_TMhfu=?PStU)?Q4p~}2hfg5&0Mgek8pXLS;RfReamHxaD+$XlkR4Vq6 z+i?wFs3w)9H#|$8MFkN*^lm=guOgRi29bNavg`I&d6Uu?PHkWU6`?VR0< z6T@5Se>zpFq-OCP6}dk8`}tPzSA89mn-b@`;iFXsO@}~0DGzssIh~wnhlhdKb)_}b z=gLsN&R$rc+TKNBvWZH_Wm(~cByDx9ao}^_A$44pN z-$pg>{6_c4{4Xuwbr>##8dFdmP;Bc2|6x+qyB?4H{#3`B`RGy8>MdsI2(MY>Uq>T| z^$HX98z-qx&jAM}&E?&FTXIH?%L#$FBS%KBO39AkbH?w074*ce zV3=-j=Lftl)^6)M{?z&J-@l0fN+9BflC9Y1M;_GF4Y>l_QdwY?O9CDf6>e9vvaF?> zL+t5dP0eR^TkvUgI;-n!Q6VP%-W98puYj|FaZ3NqOsUH5WrxY-)LYyu90qmn$0$6N zwT*=+or7qFbn)8K)d8ki)#1Ds==KQBY^9{i;qz8mDBmBO<9T<*QPZB^dsI71f}+&vpU~1FzSv zSE==0{ZEo^d166lSbq9p3B}0o*m#HY)2u_GMtF+%shq^m`Nj{NaEGMDBQpZ+TmGm5Qr3YP0{I0pftM&jUY!rItmmXe$}ZNA z+(NJMmvtd@2i?gVn$;pzz{vIE7rDP6obF@iWJ*$t>1;ZW%hdV?EW&Hzhdj<+v5SNeIs6uYq&Dei#ZvdSp z1bNxIEwgM_|ANOpfJf!r(Tt96@N~%-ky4?aekSYyi)bfO4>8F72!}81%u--f1&zjO zM}h_iJu*rA5_XYIFJ0tLfC%5AlDsF&8Y-G1!2V)r{f&~R+6mz^s{Oam_}0;_Iyu2K znTU@d+obU;QM5@=lQ+=_1Hq;?_Mkf#g%`2xfhS96ANqeU5_*b_~1 z58W6<4*SBV&%K#ar4p;bwmZ{}?$Q5PwKb!)S)y4-@~x&0I;vbP#}c{syQPtyPGQqp z7Pe-ZWp49X2ib3*6`Bf~qZRrrN!BD_sCsdIb6E<8y1E)C^xy(^k4l=5>{_a!Nv3-e zJ%F+~izMg@HnU}X=kt`5RAzXz!oJm{mwN(AbKQ! zM*lbfX3FNBN3HZp?_YbnjLan$cZAjw%LZ4v>p+ndQG0tks2bIC{DxSy>~@J07+nLz ze*;=Ogj#f&LB#7M7S{QqCYcEwsAn5iMeq_hxfY^CUa^ur{1N+A=?^%HVnI_o;6?lQE`JxzzTV@Fw#ei77;o} zlsMbiV|R$1+vuCVWW4zby#RI(X`cPhELDU_HzGeO%7J)t@Fv7y z69@bu$G<621XRBuovIXm$IBzsIaZTZEhax7YNIhV{(&&N++3w(ArRLM(o4V21%YJJ z6VAAvJpj)LDTbDVQylB$;kyB*r>!yUY6>bUsHvQhfKp^Sl({mQ4%;6eT+IjC@_(W` zrFvJ9j6DsE*;Hw0@LsxMh>MO&mW%drE0b(E=^4f+0r6(j?UT?$d`mMmdT?F^9TI*g&@QCXPfe{ZV7T{!NFMGdJTux7YnsM~pW?0FM48z#)7jbCBPEzX zBk66y;>CnF?lMp*Uxw1Dm+%EVBJS<1OadC2D(iT^1&be7y3Yj5XX=&lC&X!+YC|kw z>TIM3JMUfW?f>gC5So_y{oU7O)Fq!4byuguO2s16nb&UChys{UQo>kVraOCeM~vZS z>JkAIkv#idM<6nPrlcc3`B3-WOxGPZYtW7Jt1w5&1feqrz!C=etnQw{G|QVm@S23hLW!=LJ33Z7XpM2?gcrXHm^8~(Gs?`JTR1a#L|_@(dXcMJdW zxb0@$_mLJad0=8Gz=!=)S3_|0&Y%vC^gN~sccRTnO8R(Kcbwc7m^V`N7MM|`A(H>-A%|Wmboc%TLBS~kV_D6@_sqqCClSn+-1NpUesG%JZmBLl$v^ehvx68Kh^D(fsU=oup*H& zc0xkOW_@&0(tnQy!!ddF$5ee`KWYOjML|R@T7TSR5uxyelkq9hdytQzLreB2R((Z- zC>rhhMBUXpb@fOA5a7Xk$4;-kPttiSEkK;|5j3;o2 z97EcUXF6^(MGL6?Kv?h5VJ=dKKB@JYgiWi6`%xlR@2hxx#g}(*v~%A^OOZ9`qaHPmRT#m9^75- zzMCDA@CKN=i43biHv@$43(J>UMfXJQcN%@^ET?tOF%t*1L*knVbJ-CXnB~DM0`g|EJ<)uds4it&~t5;pD3+UulC1 zPf@no0{rC@@>AKvu@05QY&hQZvY!N%Wp_m!3*3K{ja|PsoPmjhgF`?dKBcJkh?$Pg z@L)7aiU<@UY#(T8L@$65g1k&9Jgb9T(g+ycQ&kBxQ#uKNP$$1}|Gv&S^x~Bf=G%1# zQj5U??^WuZ8PD)1pBzcn+$AQrUtV>|SJzMPhR{4$XlmO=CC|r?{kI^9egFFTU5j$= zI@&iSTZXSpj9cn?>R@U-FehHm~*MXuY%S zrLpt-<89Fb0PTTp!2TW-Jh@D6RvSl2p1d}y&di3R(|%yPi@Kj8;9X?hM&bKCSfPrX z(v*$8e0-&3of4y93~yE~L_B!x+-2qFT~4bmNw z(h4Fm>F)0CoJ`Jz>%Y!_ZA$Re& zc^=r?+jnM2-e4#|JU`FRdMds1l%oU$DC#$WWOaYMRkuL_jd*|kY2?H2mW@`wXwAAc zfU$C!hmy{>>`3{*L@@gT9vK&UyKe;ot(`99BqdAq)$K6z`Bq)2&~J9P z@H6lUN-cX7hMK@+n~Hs|a>9fu>A^#7IjAk+1$`Y7-eyox!~Jls2@QvPa40xx z98MTf?x;n|a}dGt%IZsvMoIl9T83eolTT@^c~v9)sj?V_JaVyi6|wKS=~LC zL4{ZF4GK!sJ5I?wGbOuwj#2cyU(EVg9yD}~hTq~}{QS&Ez9Rs9!sBEiDir!ey|8m| zatzTyB`TW{@NHe-ty1Z0ho#M^5T9)2%$Ml!FeD+TNwit>-P&n9c zVB?~R@$tcBE+n(sqV~)qT+f$SMP3Cl5N(K3(?_J-;(pW~cz$CMB>BaVe5-gp)i{vxr5zaZ z)(6tD#ARu}kg2EHi%Zvrv8Bi5573kNW}e;A$gOZ`c%9_iM<4NpoP~O*3zp#~UFr$B zmH~>5cq(~H&*Osjc6ZOMaD5Up{L`j-g!?t+kd&ZfWbWQRw%GQEBs4*)Fe)0@kPCR`hSFP7(BS_ltY61KIwf#Fy$MY|r|a zYPLv8{20xORns^3We>mh!8lSPAKc~q_9o?QC2j{4ejH2E14YH2+?akw^=A=d3zgg^ zY3*^`udNgOQl!SK7?;1y=TYBRB7A6@p=+LntKnRUXrxu$o4_VFNjq<7b?Nq(Cw7->W{e=aNoJk zvcLGGEH9-%8du|VZ@YP{jZ_8EnBM+7$)xO7$Z&@7%FARcnaSBy0@2&UVO2+<1Va9 z>5q3s^c%}rY1;~P(X?*VK6i6NIMuozSwM)l_Zl{2y%4iM^9V!_vI)BB{Q6I`6dM=w zQfND+{XLnDWh#|6?2>F#ufuzYJDmtk^C#uz;{FR{6}v>4J5t#38;v@$gNGlC1FKw4 z_fHOBMtuP`AkL+6$K2#?EPU| z7W`X8Zn4T?V>r_yO5wfkjjK1NcbDT=`LaO>g~!?w-jyp?MuvvEg_R0lvd~LPwwt6P zRS__x6W3yPn*WKe7Pnp0S{p21faZ!{weBCiywJyc^qicGhNj(v739ND@h~yY`i(urjfXkI#Uu7o-(e8oQse$tE)IzX@f|%g zGYzPaal47r<#LyUl;a2qs6}KbW2Ue^+tLM`kl_;3AsOd|cP*XQ`J`8NP4LBZizU9M z5OYgHC)>Gi=4)0>jsFM-XAW9#2e5RD2`oVd%4J`t9sJD>*a#jxMpf3hL;BrWPi?x- z01OxBO^yIc#Yb^HK&2nfPJaSsY|-E+879B0Te63!$1=7(HLWb zl7ui}ulbAU3K*009B?v_;8OI4Kv9DA)vM3f|Fn%<4xZVdn4DV^0;XMp2vuusmG6!_ z{>hf`6aPy*?QO5a?}U9g`#F#=uvjTXj)0H3{@{LVY&fGXm=JQ&hu2NC{L>+hw-&t7`wjRO&V z3x`4HyJcj%zN5hr(K}_sE(S!Uq7g znUo8$ZO1Vm-nYA>51jIL8p~p0nqySrt8MnYa}mOnU5Rno$k4}sQfggRoDUDn2dsG~ zY7RI>tcWed2Yiyvw~`JH`ODfWn?1ddX&OoSwflP&iU9QO7AnK-o=IJ)kDh zQ<6bW9o!zitNJ7otp3OIaRcuKvB_OSie^1%#oy6A{ zPY2=tZfFRM<5hh^NYuK)X`4}{c|W>PZ^(sP@0C@5i4c-Q(wH%dCllbY>~sH^1!x}a z(@7`@$1tqaZa7`XxUUZ9)E(H7!EF>@OeQzFZ)dg{=)CC69!V;c+cdTc$7;o(LagAv z%ymChT++BV8QCgKY+hi6=Z^uYP0}2@Y>i*)>>f`}eu#d>$Wqt0JawvO7W3U%E|B*~ zOV^!G`z3XC6aM6_l0Lum!Qhvk}P#cR&?iFK3t>i~S zCrXG-Fz`L@{uhnAF`CCk_6aI1#woHNY5Y1oLLPiX()0y_^R8{d`+Tl}5u_HI zWbX5opR1fu=7`M;A}*1vZ=N()=~THYXKF~S2mp}oi3W4J;SMb%8*l#qNnl}OxQ>~Q zT?~^#s4nN5I6l!_w}Z6SfWQbD#K)mTDE=p)^t2D~%D zK$0*(f$C&y2!nU9!Puj@r=2tWPq%=uFG4xUVj}w4{rS{~H*CC*JhH^3%z?;yMZHk% zHj_&6+wYW6S=1o(<}o1ly00i#DEU6Wbo}ks9gOZvBUQ(zoNBBd-5S5h>7PK(zCFIg zV(E2yhjwDUr3R-&N7sGjLba*U^3@vG5PKAJfh^IliW;CD!;E1Ru{paFVZ9_7y|}(S znyI}5+v3!M#I6&(1QAiuo>VWA7Z^?We?5FZ!)}^i?P-UYxCTdpkC zQXfFC%hq`xlC^KdAI!d!1~u}%zQ{|Fal~QkNaMzyX1=BqMfYd9=)rF?dk#orf?O}r zm&fj?D)WslHy>FpuK5~ABkKw?CoGKO@N)C3f3*ag2lov+nKNa2+IOp^{k$RMOT;+w zMC0MvcQ?{vLKG+d-ne-tb|frXxAP3=m*Z19`ZGd;zXpoRLMrA%%u0t>2A} z`6E@L!^ew5R3py<$;`YMQ(xa9>3nxOqN?&xGZ-q~Bg!wm(E4${I!^r~6)lwfoJW(C zM5Qf`pHovMJHmRLNxcM`e0>6SJMjZ*QcCO|-6kYwF-uCZ%?I2rUu9{WfTBWnxpU(? zum=^2BDR*va7dO`e#$$CaDp!7V6Gg5>v4kqkm4C;NO+ud36LUiB`uMk8$dDeOAk7m zkpml@@0`#4iy)(`A7?qe_-?lY2FzoK!_XA9ga-sE--k{`JH$T2z+-mhsRwrg_AQ}b zfW+<5kmhE#t+R0ash(?F9_z@p`14CSa=>bw!C#CC;&j%TDK1|{ypMKLi!Xsnlhi#9 zb@km`m%ZSH?|WjZ77^tnU1Eso*B@@R7%9A&>p|exKts<8RZoDWh^<{u5A+DYl0i=bh2J_ULrW?Ozn6#^fp`YZ7O;a3r zOc!tbeVw0SU%%eRIWozeEWTDhNYQotR0CVIzCoOgFlhIkx9dz=d-A2QmWbs}jd48u zI9ZJ{aV%h-Lw=iuw)+3m-NC^T{5Hh6!8X;!!4iQU+?VmyzL_SsZxJji^x?h2@EHO0 z-g}Ciw|)HR%(#*Avg6$h%#Y$2vinvulM9VIByNrHw8b-=2Uf1-etE9}u1Nkv_t|u! z$B_vJI*^kL^b1^|o_BI8Dk`E`Y6d~=+O^RnE9(RT?W-3(?_c)%ddqs;*=dnw*GcSQ zNa5f0lJYeS1F6MG^4{sWHO22{mhQ(fM0jLm+h3)!gcjm|36z)pKJTytydgDT=0t`e zkmu;$)JM;e^$fXYZSJj|ibVghDE{AS9U#Wno`Y<|?4mD#Bf)b~?R?Vy z^XE@)p0HflP}Te3LXFAmKPa+W+tYLA?E^Twd-TdrWLXQr8^7za&D4<9}}T*!w^ z1k5t4oa3-(kqh$KF7SX8f9$-ux%E*}b$!AEZs)47OwM!G-k!5VF0AVSBOHcpU%yO( zcj6z&X0rOXEAs~%6JYeaM@Dv!?7u=b!+_etcY<5va@yaqF#}MFy}jKvyM-1AN<5H_ zhrU;bmF}Rw$0vn2NbLzN_x$2kh-T?J>;Td}zk$suxA8nXa8J2iXZqv3r8VA&eCwJK zrTF-8Yc6}>PImvi>~fo*5Bpm^^k{+U2*3=V%{=4cu5w3vW+Vc$0;);osbObUX1%e# z8rnW~e2?eNXSU&gP@Ip*#;Xs0_7WGJo?iNN3k*F7`<2l$C%mN>a(|jjY&JU*Vt?mVYd=3{3j#S3nt}!YewPX{xL3T` z3$`*MP>-I?EEO$CYnFod<$e@0)U>ESZz5;DsrYj~P#_1aMkz^LHaFh{j$i7%cLc-> z_?vV~nAPqA9#h@(x!jj8V`iS^f{qMQ;S;rDsXdeK>|4by;Ue=d`6~BU(=Sk;ixU`P zme5E99)PE&25BZjzH+)MWA1t=65bP zYB-P*NNbh5xScmoyQx*U?m@M8FW%r?_FxpqZ+*l|UB=&zRcY=PlPhn!%b&lLXJ}`b zr%lsl7wigs=ks)G#Xmd@e$@Hp#y!?xlT_n`=P)OsW@w8qTO32kZs)sg?!~Zqu!vtE zkpgO&(q?k*h*KQ67S4YZMhYHxSIgqB`bJzbuDsWmiHy@xM`OE;Vafk$0pOJP5qqyf!jB9!Da3dScu^{_|mop}9#lS3Q3<8Kf{vjoK`@ z55?{RzBYhNK$zL8`SMH3E~pX%`OnzE;J3`d0p49+*IgiUT&acgwEfzQh#@jMEJG9& zk^dMyq9wC58$Z-wT?Weui%3Dz>hH{=SFfgEsrA*v0MHX4DbJ?&s4q{H4S@J)k&_$s z8@5pY@Bvr*vY*Cofe|zsJuzzNxA2|dspWXys?(CeLR(Z<4MQ2r2#|6?Aco`Oq5I}< zwNjMAe63+%RmR7U zN2zvn>C)sK0ho|+t%h0AXu11$2>1Pm&e!wftn((N7a^O*;342&vFR9+PEYpX5d;63 z-rvFUsytXFl1ew8!d_?t5VrijFkr}eN-ZaUV?_NNR+gk!&HDD*>p$$f&g<++@z6fr z1--JH}AH=KIgLUJ4wN@ft*6f|zXKK%P!G9O33;kl(~< zyVI0+G&r(oc!nc`gurF8)dS-Rd?F&zUS>!^_EG(qcX*_#@@+`!SH{u?{tYM76wz!y zWsjinkbZ{ftsXpb?v@)9mJ|At(7`wkdttf#9 zIX;K|a;IbKVRKa4)4KIB?rgSb$V4>mTc&lyBF~xzHj*o2vX}FF^zwn9NzDbebXZ6% zP@^{&FyVZW>MFJj`*rEW^iAc)sZZdcFGF-zpN9xM3d8fKIeqLlYIv`rw&&>2Gzkgk zA<0i=_HE0#ujLMm%EaNxehq3k*1P>BRjr*}PFy?=BS-j+`JYA%b36u5Q3Bt&At}0e zO&Tj;U0XNn2g;1_-76JQl|J{pcort4TJE`ojlldacR zh!`f$%UhsOc0V@;l5HPT=<>&1$obvZ_eeX+HmVtl)H-S8{*$;MCMgtMVKb=vhbc!8(-WvU3|2fvVw%SPw_Cn1M6jj4ATn;+}yVmU=PERWV4!QzqAVr+o|Un$w_ zNL^7hDkduE_MqM5q1O`jQpGoOuM|N+J-JhWZg`;cR^%OKB#yYGz=emDxfEahR^Qm% zZt5@qteBTE)L5Mb!5KpF%lj2f6D4|+)6-Qe41CWS#8Qb`Q3_@OnHD$Q&?uTC&rS{| z`45^pMDDKz1@F_%!6>dJ{-Sc419JYQ9cXT--!PNvBn%k@*2YpK?H*~`(y-Uy^;p6TTJ7@) zh-1xn*uh*WTMcqA)*Cv$c%*HrCfx1QvyhK_j|Jp6_9rN08HK9VXtnKWJA@n=N-T@k z{tt1HpPW8zb?O8zxc5Z$#}tk8*{$RxqiZY=UXkE*zk|XCDw4~S$l0#iU&L zOg=_0n~hjL@%@psv~=IS@-M-i^2`NOz}kMDu5}<*gF1=$S zrR$qM`N=!C3JY~Mk3T6l4J9N3CPxnL@jEV4c0uwq@M&&znR$gjr&z1Vem=N7M1wtueQJMk30dw}veD-||K|6k z&OrNmDl#11vidQ*!rtV~Np~XUm7Sp7;>!=u_s^wayuVp2+qUpdtRp<$@ z<;6UyS&NJNdh%#DjE~s+~rC+07Q+iH}n%7yM^8}|E~>2 zi(x7n+K&Gg6fF|8!G@WfzW|FYL$z}FkL3w;41zH98Zb_2hRLc$e3vfvs8VPv{=uy| z+sp*G0kNGb^b|RxdXIo*&|seDv+*&v74m9w59oR}QSdI})WTU&qEy-T;2eWxBjBlA9LuSQz)~w+?(goap=6 z{W2zK=_lyEH!g_YizFNeTlI(J;5?Vu&!o3g_ccITi*f<=jo7 ziR&CZ98}sI?_V>rP#6Mt5FuL^d}!M0#$p?i7G$3^NS94uuCn844!I3gI{>2$D5QZi zTKyuVp_pY>%OxrmZ`F6*0s}dc^`Br%U z=p4MB&03DWwdlhNv1+5|a6X?`heAJDFu=nC8EGMtmS#;hNa3DP$R} z!D7NOL^&@TdGJAvo~N2*Oq$Hk)Y<68N{)%)WEIUydu*-C(Xi!la2lA&vk>Y1duDVK za|*P~|IL2yCQdM>9S7x6uvuL7EZJfWKn7&Kw2bo^Gpes}6$K2+NDHT?QZ& z)Q`gHRe=|{m@Gb5B+^BNAz0C8^Me@jbRYZH6*aqmT3hW~emp3)T^+AC9_M$@pK$4-nVg$> z>egNe!djjte+--Z`)BV$Zk-2lboMROha6He`_?W~F*3UM{^n{;@C&z&_;e9R3PGVQ-+%{^2&VyG2vgmzG5+d!|py&gKtK$tMBqW6R_$KBtLVHdEX;1E> zAmMuYKvJ?KpmJOysWH~Else>Aj;#CfDwjBpqkVbxEbTT$m(s5htn-dE30PlXo}moE zyO<;PF0HT;1(3r(GVzG{x{^C9rA`~88pAtYnVG)3P*iwH&5p^)g*^^ipyNlNU$-4gFT1)eZn9(| zN?K*a1yf}vR-ki)_EC{awU%P`z_l;nkkBgh!juj(dXg#`F-tdIelXcJliutW=H(;W z3s`q3W{6#B+xCrk{7bgV>1+zpgr7*jK!{7h_Z-$)zNbF2B^&(3rj`6U6EyUi=ARPuJyi`Ef@5x|iEDQYuFuxgp(D8`(U`*F z)jeDUw3v8)k1+4|?4ir!9#St;_GOpMUk+z{`5Zym_d)5eU0d9WBbvqOXt=F1RdVtl zv-Wy@%HM{t)~4P+A$%bpD~@!_J@TvH`=)`-#t=Ka&W&A>pf~ z%WP}ou+G!E*!D1gq+kvdoR%8l1;^bV&D0HxjD--Kd1^hO%z~RcPr~7tG$|?_!%iKg z3R+2DmeO>3t;?w+m@B}E*i!Qrk|KTPPg$v)7DtQT6mbGCTt85;N=^QkJC#YB4J5;q z?BCsmFlEyw%Yb!SvXuwi{S%WuZg<4-|M@9+wga^ke>y_@!~CP4oy4W%;n)(ksXWWW zS(@<26e}LKnf&w!2t}6NrDX{dL?m2azqJ1T4L77AE{j4@Vc`zVDwT@MAg+5XWz9B6 zfI$CjHvDOhT-MuHrb0Z8GTNIaqnT%B5hr5G zjAR0C1yADnewKA{X+1o8=RH11>k41ohlKoFwxLR&XP@Lw%}L*S+DrRMya zOFj;(-G2R-`QIKs1N(V=gl@IF9hl)js?jWQ6e7_UH_J6}*C<_cogEZ+KQ|oqnf28= zojnl80hWmQU`pStDcezr4%lyi)br#9Cnskb6sRkjkLUR6aWg!CpOfm~8Ea3X2VF$z zvS$xscg>$#fn(}W{5#t*tv~5inb-iWOpUlpK9{pTQ3yDTcsN03^)d!VaL;$kqGUvW zPX&`H^;gKe_h0T7o0;~Fqw%9JCXzlIEprea>TYOlYXu~P#ZWQ2`9qAYdEbh5g+h{A zqMc}&lhuTl2AP>*RO;(;1(+Z4c~~IQf9G8tQeli9PnIMFlm`SKt`ypjhx#UC1$!i_ z1zjvw07DurwV~Chdx2ZWE6Q^9;)u!^><}3uZ0)P|dcO+yb}wGIfFVq&oxz899rwJY zV0rwFF?c*cM!e3aQL74iFgns&hu7X-?#K8(xc{;^u2|g<&C*C!7-CHYfY?i>y=u1; zbanbbId;SgA>}YAN%jmpY*ZvSVMcM=;sLw>w! z+Yb1=Bc45D)^7@4PoC7CH?~jIm^~okO+`t0@#4j$TgmidHmzIwq7W_ij(b6W$uB%d zFckSpUpifC;8Rp)ra^_yIB3E_v;R9$G57@c-YV-pnF|mrCW~rQa2`X$PJluxgOaa7 z9M*p~6KK#{8!EN@8FuM8R+f&Yqew!L(MaC59{jc*RYY_d#OD=Ux1eI8n>UX(y9mH& z@W#n5j>X|t^D4yG$}F@r$C96ehjj8P`-|j!U@>IH%LLV3X$&CwBMvgPMu}_JupD6otwXg^?^nKa)racBOKKk2xx5 zlNyDP-z{x3H}$9Ny72#E%qqTdTC3@U)^wJE7?6=BHQ%{+PC;*v<(2xYT_}V>L3;0( zOafr}8S8y}p1KG<2H7fkV%?r#oC1KC$?dVe+?hA%-L4lOuV=6o>N(g!=aIm1m7}fw z{pfG+R{q2OvKKk4;Uj8|6R+1x;sWR-{8K`enrL|SzARxy2ufY=&sS$0oWwbQSwV?K zIl+wld;#EQVH*eBQDFi;s*8HZy0%#KBh9ql@AZh>B4btKS=7-e)EYcj_<|lqkBwN^ z4Q6n;gH_5(i%&E={Zjz(fB0EzcBZ=w;Aa!XT~#3~kBW}AnkaPN_fYJu;+$Gsv^oBr z2tF9#W56q$^(1=AWkJpjv<5y0lpeUOu80;C6|MDTpR6q4af36kTMZ}xffPfUiLUB> z$$j~%C#a}oGw%R}$I(JianjkAy`ae{o5qk2ogn`*riAZ}$$x)Qt~tQ?g`6vt(APlJ z5x&$4ll5f8!1>Ujm)WA}r{sc+y;R;(9JFF-b9pGVN!~qwOBm7JzA7ThZ+D=XEHGgl z;Sv=YIoo2m5Dob1x+`2Wt2{P8z?L5S(w#o}(VLb1F`SrEaCu{2#|7P-H1}6gSsByU ziE8K!bKo^AH1}ENv}oTz3AU+-R64E~Kw-x`$RxaF8-s2u?bXH|x?+kZ_>0riO80eZ zpxw>6H|zO*d1$~3N~XiT$4_|o?(JK*wjqyLuxSIuZH1Bs^zv0EJ8Ax=yBXTqa^Mw$ zO9tdr|AdJ~u!%yyI%?fYMkYYm@3z%Q+LeXpJ)|#kal#(UkG|+1VZ}%xEM^5=@kTLg zbkrS~Ue%EFo;8lGbp6bi80O8%cmeG)^KDVj?{mQ(3$VJ0Ou?8SuHq37%C-e<-F3*=?zr*yMHcUm zUB7B7NOO10^j8}PlXw&mA%Qj!+&j6t`tqOm!S1CgQZl=i{QckCkh0J(-)!(o(0!{cOc4!=W^X#*c^=&@!(RZwAMp+P;J=cY9e8OB;En%xH?p z|7{_j8X6kzBqGaDDIZPGpO8(c+y>1hUb{y!q8$FA)!!jvlTs|1UC#m2ggd-D&)L7= zpeCgoyL(FrEv$f#xBvNH8gmu#32&C~=MA!+vxyXc|4zeL zpKlHDGQTv!$obsuqWC>X%eIT$#5%~i9cv5pFo1mr5F5ehLd3+YD9mbB=K%8lf$?}dFpC}I!!Zz3 zT*u-I9vCWg3BkO8Ax?=8E}OKMA|fs32t-;s76!Hd-+z9Kf(ZkI`6~lv9VCrl%5fQU z9I-k1>g)9O&$d1epFmk$U5bf&TtKLeVzMURLdWh46al6{G5u6Xh(c1fKHji-I*w1X zbhI2btDmh^{u&-l4JSM7Pb|ic{VxzPj^k80ZH%7+{llo~>jP`@qea{K_PA`JN=~@l zuo?*X1m5%W^;b53qFneR-N(mPef_L4!8m?j;A9duPJ!=FQMN{H)7p6!QLlusT0Erf ze5R(D&UC8md*;t>apDE|`Gw?XR;fnFka0Vj&obBtk*iMIO^50;b3Ej$g-(2 z)@r%C!#oLH;6_SB6hZA|J2gEAvA+zCmfDD_43*Q4*f@T>edv};;B_Opb!&NQN~hQ+ z@#2+j54jRsKO_I1R7tvVENqW-jLtcEv5czr*`-HtdVbcfVmSSJmzcQRq zFP-uoqJb~snw)u=>Zg~=nfEFwYERL0+6QFl=5P76k)c24CZshnafom3uSWH++0AZ7 zZS@>%U%BIb?Yc|BTqKy(ZoGV=X7>bn;GYsob$XJaY-heL;5 z;Bxwkz0HD0!Q!|#j8n0`z8)|CXO$^kYS+d|wNe~&{*kU5y@H^3H@0!0d1*Q-?xGq` zu5N&tzptt?k_6k)j3KM9bK!G9ocj>3*CXERxG>?*6MOc~W;#Nk#+~d)KEhGgeLoYP z5o(iE4bRicPGTfHd9N#I*J^(nFmX11ZmDjkESp?D)cI<(@J_a5*qPp8(;Jt7H^OzQ zd;4US+>UGNrLXtw7B0QadPZTBsFCYkeS#yyiu2jaEV%V9qzij)C>d>U&t>blVLC1k zOU^T%n#v7-w<~K+-NrkF%9@}jZpV0CA(%AkQY%kQBF!9Nz6}+&{b88GFMh6cmN!Ny z))HY37HtT^0jQ1HFG90FY*t8djWwiKo~Sa65euLE+6m*>Mez^8D7JRpL)m)T-1P~( zTbXsi6OSd;chyXXJ_-mn*I_WV!ukUOviSi zP7I(%ag}@5f7mpC^`B$9;y}V#>$FkB%qHocjv*F|GA-9ynx^vJA1Z(IrvJ(K-*@}+ zJ}>OWj1xR)zR*e909oRh{b2@k%+H^Q++j!e?cGe~ad?XwPK&qh+@Wa|2~UqMHgQ_o zR(@3l=o?PUA^zPh{rZjWV&TenLO0eXcN+#KAjxer8|llW<3;*5;`+y1o>30%iPFitVadmgp)$#Dmx$$UZbrbFpo}|Zi7VtCD5FE7bp7g&!^Zcu zABVmW3oQNm;6qt%keDfZmRQG2&Uf8vJgeT@KgPdeAirqd)UwujW&f$mNhYnhw|ITF z0o1anmA)=v?#>%SEHI%&BmHS=72yG(himE)Dj#KB-2du2VUs|CN5bPU`q_?%jk#>q zGOMw0tVO?wytk*vCBxyr9wgGM=C1&4g1H0^T8ofto1>^`L69^_D2Ou z2!vTn%kf=0)9Xlg@zHP*e+ zGHuHR@s^0EvS6jTPQ<8|A^7g(`SWe-a_h6_+Q!W82lY&R2zv(`8~ik*=8f~^U!?f( zPP!p1(eN?EUp`l&Ftl&0@DMouQLB;cG~bGKU@r9a^~FS}5(yn@}oBn_XV6a6?uU8cLX3oh`htg~v(yP|Z%QN48Sl zL;J(ko&2;8B|IgLY>xs%{afkFVfk7+Eq&(EYhjPWDR`E9V4_T871|(3j3PvpsIk#C z2|BFr25Gr-5j-^`GgR8%K_0Cz_4Hys3NtM-90{n9iL`g>I2`L`>iuICww0#cxUSLB zs#Wy*`|t-{xE2%8LhNO&ku3F)LBPUWr9bnL=K%3K_snUhI3W$Woind}?278zO{kF^ zO>zj84@;9KX$M*+TF93)IVs8g(0RV2$D>EX=EQ02b47{y^6-?$h-2wSiXpXc!B@f4 zT9TAHo+|~EDo^wl)bHi2k=k#SlETcQd` zO>NQaj}_G1`fE1QWV)i^zBVY=-tx`p?43|uFD@B>76*>walzR7T1@Z7u-TOu{oyj* zT-|D=qPNg+X))| zqj}$a=||*hALKJ%@^edv)8waXxBLAs0o|<9FHADpUr}q8S*%Y_12!SEnV^xJuRu}< z;zN({96x4qadG*RbFI#HxfRyXh3FVDF$Lkj*gg1RE?1jpG&4uvOuQ>BkX!#5@Ln%e zTNJW%aI{d6TP^o0>LIYt5vps(N~G`a{*J?X}a- zkCJHP_RlFwS#mlZxf(O-OTjek^cIh=Y%dI0+;DZ;_P#Tm6~VgXHdy1|DQR@LZ>eEg zny*nUb9b`m)dyJBq#Iv43V9yW&%i#i5oP@11rnAxaQtWC__xN;l^N+Xefw6P)B^qC>sDYJCc@0n6h)T1 ziUyJqVVVq8nFf!{B4b30dLc*8IbdBv*F7jH?#uCl>y-vk|VH!kTnrQgxHIIHWAKuz7@h z;@u9mm$KUI&N(Y_uqnX^5j%O;+1|dsKv9!9Qt&aJxEr4R!4dFffAW&hF3Acr@6YIm zHi)*Hx~(r&X6H}8>mfZx9B@*iT5epk7TMU5?>>?GV{!dag6GsbV)Q%|vn_WZj&>IA zU~cZW=aguB+r2VV+4_4fnGXH_y$hwYTHg&4(K{tdvt66()hFq$dzKAZB_}u}jtgTK z#H1K^w`OWC31n*Jw!g0>R2L%&ZQT-Uy~(P`$j{IJaPb{;3H6!h(GJP&tBO(oKDjt= zUIoPGa*oz<#6+dy)Dm5CUAG}Uy;5eXLzQ&M+wEP`9Tl>023?vbtwqKiA2Xw7ipxR~ zB!or*na@IavwQ06wbiJRu7AHHDGM6>>kWq#C8$7(NLEuV;?JKxE%q5t#yanO z%xq|AC|T>|n5?6D<;-fheY^BQNcsXI3ZpkzeV7L}uo&|p`yCIYo@iItCyThUS}gu# zIJ4CKZoAgpgT{0uibXZ_61I_;$0hO%_2--%%s%pX6;vERzO*#OVjw3Fq{U@>coj+2 zqsLeq8$Ct_#q}Cl25*A2oOkAL_O~XD!_pmtnPTL+mxPRrOs)od2vJa{{$}gY4v*vN zc+uIi7ydr{P9+iXcqyVswdie$TVq}+ zg(HE{e6rX-`vOgkY`3ems>M1PXoGM~6 z>oq;^O~Qe4oG~f#ZBFaqx9E)`5qEB-9TjI+i@GjRdz^AE(>jyWorke_KOVN`+f2QW zCnt|y+d-?{zrk!gjv7D3)I=79%poKCEWq#f;{ln=+?fXGSZL!d))3h%M>>&9ag-kD z#jb4KfYFaxeP)X>l{Re^(vBNrOc+18Er%-*e`0G@a)ziapfvqy#Xh;tca@dVhAbp< zUmMGdrrdoeVEbKIZhw__*>h3Z$kowU(1Dr;v~}{velU0z)A(c6!9~Sx)=z6ZPH8Ey z%4yfHWjG`{@G4KDcASrcbdF^m8IkYh>$P{Hy?{i!g2?UEEF9FC@@3?ZMu zthVXuy;?HSz_?Dk{K!GIHj$_xRs%7n8;&#HHTl_)8eRS|z`%DvatxgZAy0W-4R&vP zsOD)8=x$o{RDA5;e?yQS`^;HmpxPiY2X-SJ3G}quu-imiwr`}iD4$NH6W_dfvrggY zcs>Jmnr-`@*b(0Tce9Pd9f^~S+Kz-u-Yi&AJca)AG_qGgc{-Je3o2~Yit*kb_bAw< zRst_7)*P!CnO?xy2t+L^_Pa7_ms>UMBk=B#acq&6GoM7{Z!ff^8cQM&!p0PcYHjzN zE|iB#)m4wBc$WI~4+1)@9>?3YMk)_g71VC&CRl9CGiW}u8*O@5!&L~XO?zA|bu)ta z&;@64EY)p=_TWAF{-VHgxv)&y6>3=$JTHzck8chN?*dP7YFy{C@(^t&+LDb;yyXt= zyF5HR(0FrXeIno&u~gxgSM9ddSEiAzu>I9#la9*pVwX#PrPC$jj?%N2gqYzmH+bOU_O$Hg)qjJ9i{i8tnRNBCU!BFZV>%)l+O_VBp!I{`ltVU7d+ z+LBXO@ElC~dRrN`vFA60B@K6#%_l0)^m1LK4gHm>1lrqWG)CxT(A%&RsaQ8mb83Mb zP~k$`DSL=mhv63fi^24xp8J-1CS*sNOIe7@0>%b2F5)*g7y5K zETMoAirP5{+rg}F@CQ0hC(c$tV}lj0eP{7e$}_F!PUH7Zd7eF!ieh*FIXR`V!823F zwS(4D1IQNC)fzQVGt8vsD69`v>gN7VnT_MxF`f~{#_rFRY&^m~tFe)nBnpy@$OpoM zM$K1fW8`;Ke zPEHMKTKkTlWjPTiPk+_bQ~BRWb2zJ+_7Sd)e7Jl;@07dmir(q@S|~yKZqch5!ZzFRCjrg%x@}Z?+Aasni7T|k zpS`v!oYqoGkg-ztPqAt5#gtNTtphG84MK-ER(lvg z379kbl^96huO#5$dN{~5CtSj9d^{jc+AmY}E0^aTFmi&i!Bewm)A7)Lr+t-XTqRaX z8{e(aluMTS8MS@$XB_kbV@t$+R@N-BL==SY?sle|t8BFTK0TSqpVO5+VbJD|pig(A zu>xLV5j+F>vvkzaZF9??Ib!}u9p^dvKd#5zi$1Q;0U$D`soII(wR&J@u&zZoUm(g4 zeWG(X@<@MsR;Eifyz834$>W4L#_*jgrQ}`H(-Mv5%>l_&K(T?sGjJ+uBHb4I#}$&QBv!fTWLRTMP`m@nM~c=`M2q_ z?Q`kI`b0!T6bY*r1+zvJwS7AB;-~5AhDuT)LxAN)Y*SQ$ywtn}!~&lF$% zYBthS%@54=JgFvKbuOh$nrXLBg)b;_*}dI~^TP^@U@#|K9@?H?t4s(u(ZHluUm{_v zI@7iDh~4k|VW!-IjOn)=~>?Bkr>o2aZY7j0k)Hg4CB zWjSG*!z`3Z9iA#rwifXT7Zz4duF43*O092{X1h|%d_$xsN=PtM1)b270jxs!%4s54MRgjSnWt#?O(Plm5n^zNZcrm5P2^sCLEQz<9n7s5MK z0{(z1Q0~5`;QaIPm)_JJpApV{WLnvdCp&B)-kl<_slpf(UD`f3Xf#@NnT{`@eZol(IhfIysZfiDo`+*UpFp)rQY-Q=`$ihtEmx>6KdY;FGj^EiamGjZE8!`L0 zz#BhdhjG^-A9b{yr(OPXMJ{#YBg#X+S-@kyBO;c~QtCuzX(%~6-sE_R?!y&NCAy+0 zsSkyig{FP3QEkh;Io;p2cN#p<-5KuE&MTuwlJ&dsg?R~88%cnicj*?3!kV>;V2G8U z`S7{WZM-gZiaX6J7%$DbLuN+gMpMj)Y)a(lh_Sx6J9i3n6CKS4o%S|U!ISI$2p+k3 z*SpFmsV(N^9n@vJ?KyWhMVvXK;j*Ff=_hM>OBG^QCX-9rpUq-5`_ni1PQquH|85IJ zv~u~(%*@aQp8W0@NLQ?!x8w52IX=Y-`Y1K4$xJ%kaH3B4Z>ZPq8%1qa2=Ulhv(ml*9#USM0E7f6;7nLdwjlb zetV+Zh?B)wClq7|DM&yApUl0XgOgQa?^e#K>FMoyC*6&S>JsaXc&K}4uEH`6Yq=9h zG2W9WeM?);AUtMk=O8OleS5CWZhNst788$|x1veN?ra82^ajQM)7@7`MZtaTjv}BS z@=6Kp%e zD6FMt&N+LZy`TN;{btC;u69Zad9*F}>J!4RML<<5wR2oR-6I=|jk9c_;8YoG4k z^L5%qsnbg+9Oy!#o!T?*t{zmMf>6X%q1aDN<~l&&xKDvIRcLI%Q8V_=0&D#x3g~6JetE_JNwGyky6n)@XHg)?^!m&T+4W61i@f z$kV4_?!GpI@}ARC-5_h|#+cv~q0J5jAH&WVYe0Ibw&Bl$6$g_j`SMSnCb-*;dxN)d ze7TqVmUNqJg5RH!M)!<g4vZChN zF_d;T@T^qWkF=z?c%mxE>r0s12pUmJLr5d6$91x^Z%RA&;sRJs454hY471bEr5o!G;D1fsjezvirSp>$}*8Oc9To%qKFgaPQ3#Ajqkx=(u~m zZdxp_4L7S)&=_9LQ#Wczj5s!5Lyfo$n<@4HsFx1t{byu?$SW=9Q|^vZT<- z$r;d$@CITfqm@>wnIC#Gllgpln4^2Tm<@nnn|{q3Hr<%n88F5sD7wau-xW$6pWLDx zOKzH5s)w+EQb=0mlcNAJWoKlQkN{=4ZSBZCG&Y7a%vHK({BxeZZK z%)NAxV)t|!i%hP?dV?>d2xVZ_G|DCJKARDP3U6llmzP`6Mh*qQ z`C7Kvd)wSO|MgAua~T=hX#HhLX5097obG31^_sX|_XYbIc1iTQu5GWOH(GCYKdOnt zPj32E5b5HkvbwTzzM=i2ilo0T{Yj3u>J8N)AxTZ93PB5w0lrvj4c~J3=*&FV&(Fn1 ztPFvgpn)5>yqmj{NumKoh)+Q-^V8KfVug+#1G-&ARHA<#QBbh5yLqz(C7=+mBd+|~ zG_Ex7GevTE_u0xZKNOFWrTmWWfs`>lr1QD>v|Nm0EDTS4bR_6pK(2_M1GC6a-2oD9G{ngSi!i_`C_O=cWc(?%~G%A z*vddGx?y_G+)R_7rd0j4@cwvuYe(NWr*T!$P?WPzEypMyLz0X*XhF)S5rb)r3w}iH zMvEp^+(9$ny`zl?)Htxb!GZe@umB9AJ7xgHxe9_A5aSijxpMu6!=%P~_$aub&H1*q zUYdef^F9otChvUf0bbyB)oE{v$LpC%;K`>r01~pEQ215rAL1sQh-Sal`4j^5@y58( z)Y?kQONOx6GrCKQPU!+0NzbJ0stJtn&eaOFVXaPuKCSa=&)xMoMKX3V(<2j#+kl=M zaQSNr48*_-^)>q3bC9JR2s8aLJkJ=C0_Tob4(tu_m=|MuaOaNa?t?>Wux?s>Q34{_ z{)Gnf3Ng5Dbyr6R=c!d5)XCXhC!#%Dmd0SA&P~@SF8IEo`<6tK=d6q#TJM`(x>+sP zpf-EK8V9e7+A(%`NXSTwMG;YmUN9I0PGlQ$uI;L<{I>=g=V-~`P_Zx7p_~!&G9F-^ zMU;Lnh~$dnIJB4c(iwh8y@>Qi3{t=%m~$@!6+6SZ?KRhkUU9Y@N|8zWRbNX8*K!U` za=??PWdls|$*3Dmjds%w7ofscCVB#})Gjj_Jb%C@Z>Oqq(q2!|imyJ1qo}lJ%s%__TZ93qlLm7P`!(U@VMr+ScHnQDncN0@nOH@&% zgfuu{Mm%U~ehUE%B<_p%1tvIn^}v!Kox7ULApQC6X0Vw}*c9W!0OA7ryLD4(L@(_ic(u+si!dh)fm}UtYT3WAQ7Cm#sG= zyFqsCYtU-^vs*{qi^enM2-tJ7CB$AyhBLdEHw0VayF82=`(T{%Tf?Y zP)ur8i)^0A*q|Lo-J7)fcne9o6Ad1q5itdFtAYz?-rb`q{DB#C0Pi2+(H5Q5)Mo#5 z8-TUU5qck;j0mt228{@5%1U~YfZ#C?CYWukTG#8QVusVSY-YbEdfJ;-8CpEW`s&id$ zcib6!y=t-6o5JYwIXgH-pm+wMU>MDd?2B8QD!ZCkK)W9WwTLZp>pw+*v`_7cd-Jtx z0334PR=mPB>+-^%v6*#7eqm8zf{jr>KrwKbsYm~gCLSx%Az_W3>T?-b6mH>$*7y!| zHolVr{gYrUGK&U}F&NI7%CDArpi2fzPft%Mopd@eimFf*q|m`V+1x*L3<%L$jaN`_ z#vhxrpUlpf_%0U$&&|mRw8rI6LG{f}RM1;!SAhWSrabXhTzdNW;8bxV;@?td#olazB#76`TRB~9 zgx&Ps=XUHvFAI2<0xziCW(o(Wb0Pex1&}lAK&Fgcg9Tl49Dq+e6|m-c(oDbH{;Maa z!Oe!#gzx4fR&QRP#zq$1_))bIrkt0r{x@cYI-pTO(pbQ;x~iCk&(tN_OB{FR6YP=8!`2U)oe;}#BzjWOfc@XKZTzc zx`Pu`He+$36L>&{67p;Ww$k0~zMh7tzY=tqJKk1x3EF1W$!(1Y55+m!F`L$->Zb*= z&rJ>03un8FDPwGRG(Ay3aR{pmP(`*U%g@5BW3i(?3}e`XZmtvpA)Kxh*d~2z7)D}N zY);O1kQHG=TJe7VOE0t|!FXQ?O8q|%k_Hd{8w;qQlR%sLN0iRffuCL8oQjJMc)_V)x@$HVN0h(XtSgK%4L{eoDpAT_|^TDaUlY%30z^LtVv z9qlVFDj3}tz%}Q|^t)l@o_6Hx@%HM(^0{by6w1Bcw~CxQt-!QQ@!ma0f5yzCt4v{E z1TN}L8MMg<{qviil4xy_ahaJyy@|Wx18=t|b`QygVSfCA=7ULRql=GW`((qN| zRaDqB3q_JTr?c_nnG=1%(tO3h>l+hfWz#FM0xrmd4r7F;*FithN2<;Iqia{6Mi)GGH}ojae?$S0$n4@iYPLtIr4+X=M?>k5;h#^j|ct6L1_8PFzAWCHZc z?o`ewgCZ8;m`oH5_wwlpE)lxvh%HfQT=hP%iEhh69*zFEoidnb89x%O{xh+BVG42h zX%_Zs;a)rBpyEC$DJS{s&V&i=Uh>2VfNS4`loDf%a#N>57F*BDpk@2n`r_Gyz4&AL zSUdH(^MxIA8j4X+4eyvz*w1S@Z0$KVAWUoYY;xVdiL=vUS{Bk9ve;(6n&3FeXlo1R zxeDwx15#tp?db+*0=*Z+ol%jRE9LjEL|2Y_=yb6H-?yOcd&;qxMZXosF8i^^v2iTR ze5y7;^*x*XW~7aDQSBe#Gz|SP7T4D|zANH-IeYbywt1?Gq5e>|nw^zAPC$0-C8Sl+ z`5xH&@qxCsW|^FgFOlC@xTg1bmcK%Ej{SYlHmduDJ3^N=8M6=aLb^9ggs_75;Z~Y) zb7t8&1hYnDwD_xseQ~Ty*Ev?f(dBcu`%@TWc?lH#h2h>-DA2am%oDh!$J?{1TS12n znWXu9%oS$qbnphZKL?y%oFJz(1+}lu{^VJ0&SWv(ry?Rj;)LX#pCZYHc5&>d{TX}` z`jN!j3;z(RG-A#DQ* zKQbC(;?3k?hpc(Sl)i2fs)N@HU#n(NG~AlmS;i5ia6=tRq??v&m`&f>+JlclvW$AV zapV;AwmO_ue(2BH*szBZG2t9j;`e+q>KKpKT_S4Q>wJOE+0###Zld~$55Eg0wE;-eKRz4KDF?SL9{1HI^H%p+$ zsDn@8;f>S}a-mIbLh|L7JzK1ISC*F2sxjI3Da`3V%YI!$9jtD6th+&tyKOcr~nk5$KSgoA-1UBb9!z zTfV*RbC@5b+a7cUoNckHMfhSvM=_zf~bkAhbar1F;B5~*5LI2a`r5X^(9ZYSD zIcacpYmYGm!Ay@@xrE_9yOQ3h;e8i4o`|=JRnB?a1}!=XOVWn;;lsv@-|Ik8QI|v0 zRc%PH=OXmRTVz$J5aI;P<*1R`Ow7?YU(_ChcfL>85490EsyB-XEH%pS;ekL7@Azjw zSe%@>8W`5>9lTe}MR*5)pOSNzqma|Ke8ZYw=>PS5i+N80SbwwtZ2rWs!JD3cSplGg zc%;1xxl-H3@qIuwj13+d840e~SJbR#_W52b*?hQ??@?8car5V z4xXf#-^_mwrf244>TQ6&K!bndKNUX@2H#J^SBf)aU2>iSaaoOcHUctMtt^#3+4?JA z)y$?!x2_DJ0={0gGEu5tFa5I}FwxmC;mG6TG%>%I$v88$)~MrUbrdS(&)tpja+LZ6 zia6hwoSNF@@&^TQj=7W=4_VYTI0$97z4bAu{8iI_|5+%gz=wo|v1#!b|7^!TKiWte z6Lnb}AiJzuY|OMQP+EoUOrm~lXNIL*E=2eV6lmX{McGXF~K z1dy%?HYZZ}QL%58bp12VxN?Fj7=MMl=it)obnmAojo96U zzCK-hmL$ocSxNHXAc^P_xyXyi>#fxIP)mIJ9y!K}RQ__Gs}*~SdqY5UYWF(u=Gg(D zaOS<3S>Ywa1E*#-4cb&n=fN27c0o9<9rV^)92huE0~LT?uG_KXkJyCNo2y#$Hn z(182bBk0*+a8N>y6NhnVVbDb&qlM`uxOeDwt^DEeMxso6vS-WnQ9L})e{MrULa*i2 z^1S+CEoiTQRqlGnRP5|lS0rT&pBxHE_ifMn$dBU$oV&wzW`!j;rX5tC4-EnK%jxSO zHu98j>&{C6wzxRUQao!}x#A#+@Av6VAV~G7tFITd*Q$kez}?-=CUyc1JhuEOQFdF) zyFj=RsDbE#nc`+W)GBwt4SLlC;12NSbgAZK=cK2n#f5Lr@Uus8M?$;TH|b+K+S;V@ zrRsmjPiamqrqZV(22(l=>d!B|>YiK>o0<;A;e)EI4p)XDPk<59rZ1lW(USW0&D3?{wN4$9KdjxD&o$k~Ln@L3M1Df3v9#qgi4)A* zCGGdx?>);l^`DD-?gD}+6{}xmo7YcXf2_!%i^n$oh8i085>-Pf=RwGPmvtnuAIYctC#8%`6WL$cG%A#ph z9n((2lYBB#b~IM<>5!Zxu$P1*s#Y-%evoYklzLycd@tEw5a3i z+8?@?NWqt@yS@D9yIS;3oO^7Vb!z@{avzhDCUcm9B1Bn+XKK_iGaSK64nrQ1LQJYl zxhQzIZ$Tg%VOJsnEyie|VmxSEpd5R**5=O8& zHrs5A?kp2E9I5|iH~ox83(U^m5qIK$Dy@D31c=_+EFB;fE%#9|$h!3^vRu_&{clcf z=FCIN$>%Ois*webA0a9@Sh(@gIH+y^(>2z!J)FDL3k@RlR5?A3Z{;BAb1MN*ATpS#rs6-CDvf4X@K#8ukR!jbLXH!GK+Sb-L z-?7ft3n^i^mF;Yn4tjpha!~KFMj!C^y>V=U=HoZfF67ef{GY-5Z2c?Cy{gmAFfBQT z<}GREJnd_Ky`4BkkaNoEw>%o7B(5k<5Fp$7r5`u(Wr&pTz~ZN${VBqL4p)P3g?nMxR#iSRuZabY@{ z^`9z zf(e#uvPK%agKzOcIG;cnp^6kD)ResOHdxbNZH5`oc}3oJ_X%S@^4VGP0X)JWg5L`Wmay=&AW>lMwx z#q}~1wV4H-cahgJ8Gt|tx-dNg-RS<{O}HY(!P8QQYPgrnS$BYZjp$^-H{9Lzx3(dR zraM$fMUuGc0rTs`Wl4t2iR`f%C6d9Vtt|#{^Q6wqU7&Vpmu?ym2#0p*Vy&oYrn_YE zsORIj9w=Ft1lrm3$7c6JqFoB_BE25x>{oOyg4LKS6QqKS^QR!3l_GqBeBMLnh3o2A z6rx&-^~hh+Ho27DVbZs?EDa%ARCUzZGzuf=IBgd|3@oH<%#K2kg^1>5Ede zhDx}}gKM_Mk>kd^P$W6PYMv<}hkv%cln&Lc$l=TP0R4nYr1$T0l02H$CpOhzJIzD| z#P=^pf6?vggh_p9I!04pny)kI?YOwZwq~m9^=Wm-N2Q;C*c!?AU;LHW#qCp8oQG@& zpfMl0s!LhxreM5q2PeJSJTeeyTRNY~onKLWFmpe5jijV)7-9 z`J<@tEX<+@PY70;9h}4-d5C5DAZd71u-NuNYM6+U5h8=-U`(FEmdv1U4LPj7^9)82ZO zhe*)}2`{pJ5#VL}hZtIxHWogYROKM9w546e4Amg5*+1BE-q+Mt#XkDwU85N6i07ho z@oo>;d#qJOcd(*GNF29bp>6>a#Viz%-&ZfIXgB5-4Ulk|;6u&qH-S4=$Hm z_Ydj5guIgN>L*y`nw#}lE=8n?cxWd*2kEcl$>m^O{$>pgh*3hVe%Ch6_HzDFTbc@; z06yXgzycU63=OI7-nAVU9e+ca`B5!l;##lDkgLwh2}Gdppi$P9R$ZMfoKW(Er*`W= zMp+U>9d+J$8lr@0{{LLQ8pjGqspSpWp`tV8NNAE9lw}MPoGDfpFpT|YN6cwsq*@f# zCe-M0rV-39^eH^F5k{|8UrL!QTT_Ri#_43X1xYmek*n5+q4u+@WgL$kasB<>j2M~2 zU~zm&|CNzo_Sz<~xoVUxHYE4nSy|?($M+v4HbPA^4=Nf2_TP(5e+v5?9uh$iKpNjR zpa+4>*X|`o|9s*caW5p|Duw!5`%0$zL+g+5gn*l0wDskyli5Uw3H=e8DD5=S@+>sh=R7DP=TC*X`O+=OZ*joo^P?$W`@Z{U zg+(%rAkA;Scs0M)+*e$_2=l+zc(UaptILekBE~_HkHtSE*y8QY;sut0PmbJN50TaSUqQu?h6U^!;?$xFsPeTWnbLS zvH6Tlha0VkMWC%L5ee>4ZEaQG+REB;mfN`0*mFd=fec(W?k~9YvwzxFYct`ibBHnv zp~^Bmv?@>zM;AQJk(K24)qj44wfzK11vBn8tr~;=OU)}8Y!JG?Ww5>~|7E9a8qKp0 zOZyZ+P4VzPX^EZu>egDqpu)Ayz|k?pdNd@MXOuXMmvv>@>)G*jJ<=@cnOk~n2oZsvT|g8O+DQ9@~Ox)`yh#O+JZDu{YzU)5}ZU_ z%)UTut=j3n$QLga4yWEZzI34sKab#h3hEJtF}*MMy#+^!Cu5WY>52xk+fyz=6(c}L zP12`JcOj-X9nAAatMLACI-||&cwAx|boR#Wr8)N(0p&Q5%`ewpg$e;*2MhV%JTAF# z%>%f@vymfT!~9ZtmKb$r5}YF)f!{hHZrsei7S5OSW}I>yo#cNreUMd|v?h;9lOD55 z#;PUp6NltBhB3V}2XI^a-q!2iTlb1$ae_Ne$Vow+3Gz5NY>TP*Dgp;ZO}g9p+`J*o zCIE61GIEQ)Aq;PBm6$T&T;sZs1CJDJ^j$O03iaqxx-S_6-%2TUIQea`AeD3qmYg}+ zS;HBS0c{$Rgg8=6()xgHs!3L+`1SL$REqb3Hy{bD6h#VFMZ^8p!>wdj+q-}F?L~62 zJj>m|AcbqOo35?H6sy&J8RQ+Jl~=}6Ao zO?@>UGWeC0lf7{8HpbvN54sAUv1p9PYfT7M|M@<%_FV0jiQ$n|i$@K=B@6jgaNDvQ z0VC#qcjm#ENIJ=Jf}i~P2U41Tos}n4Gv!M8?}eqMQ0SjjX1N;?-2Qv3D^cR@x3*zt zix?Kt4N>#qW$VA!Q(kFaj)~;l{0oou^3v@a&un;2U-4$il2-)y%qRrD$0QPPM*1WQ z(T%VOGEqYVrh0aWyiZKO{%1iRE0$!ZU%@Pp@Hv)uN9*v&Nl?8~BJ(U@iZ?IOX9vT@^fu9OtGa*u;!{OF8(tFqtK;?2c+I6r{29;^>& z?e{e0SZicHDd5)so9M8{i-7+pVIk&tz+t_M9by;%^U<3Rw|F%3n)#z}{@#sP`JT6# zJ)Z(({rnCM2_Kj7vN5dVw*DI1QQ^4GnAMKb;U0H{~(gUr_`jM*kj*@*qPV z;#Vmyj0e)no6H7HX6VlA;b*}dds5&#kZw=sX(`h%VfQU1FlCQSJRu%3(N z6$6^LobpCQeD)nfivRhQ#0tw!GAcCnI|$Q?n08%tZ_3G z{-6>*fCGIyl`KG(zh?xALM2rYTPxPoDr1gM;{|WCljb$`K&=?WAnL#*Axu0s{NHuu zGAVIgIm<&@VYx4771N(*2h(FtsaWG+ps!XCk_%NNGNe@cds|w4q&(Ch@+!M|21VMK zv)r3c+A~Pvc7>>U8S`nsqQ|75yUBVjp=a5+Q8mc|WqI2yh0>TkqkAN|MjnGp9$4&e}tIm*HGOg z#;nT(8~im27W7O7^AD7UP2V6m`v>AmdxPmS=G(iCy4Ae^_9S}Szeg5xo9uZ}d!Hb8 zT4Dd}X%JvMEsN7BHbk)72$M5I?1(Tw`X5jT|AhvtK%?cXjG*8TIGB_U3nF|M%zv)% R{)Jhgg3L?l^5-V+{|lw_Rnh + + + + + Echo social card + + + +
+ +

A small compiled language with glyph-led statements.

+
xo.run
+
+
sum.echo
+
/ std/io
+
+$ xs = [1, 2, 3]
+~ sum = 0
+* x : xs {
+    ~ sum = sum + x
+}
+io.print("sum={sum}")
+
xo run outputsum=6
+
+ + diff --git a/www/scripts/verify-docs-pages.mjs b/www/scripts/verify-docs-pages.mjs index 1c3bcd97..6be65773 100644 --- a/www/scripts/verify-docs-pages.mjs +++ b/www/scripts/verify-docs-pages.mjs @@ -108,8 +108,9 @@ try { const navByLabel = new Map(primaryNav.map((item) => [item.label, item.to])); const expectedNav = [ ["Documents", "/docs"], + ["Book", "/book"], ["Packages", "/docs/std"], - ["Echo 2026", "/e26"], + ["Spec", "/e26"], ["Try", "/try"], ]; for (const [label, to] of expectedNav) { diff --git a/www/scripts/verify-prose.mjs b/www/scripts/verify-prose.mjs index 7e2221df..8baad1be 100644 --- a/www/scripts/verify-prose.mjs +++ b/www/scripts/verify-prose.mjs @@ -151,7 +151,16 @@ try { } prose.push({ where: "home definition", text: homePage.definition }); + prose.push({ where: "home description", text: homePage.description }); prose.push({ where: "home lead", text: homePage.lead }); + prose.push({ where: "home examples title", text: homePage.examplesTitle }); + prose.push({ where: "home examples lead", text: homePage.examplesLead }); + for (const item of homePage.highlights) { + prose.push({ where: `home highlight ${item.title}`, text: item.text }); + } + for (const example of homePage.examples) { + prose.push({ where: `home example ${example.caption}`, text: example.note }); + } prose.push({ where: "home status", text: homePage.status }); prose.push({ where: "footer blurb", text: footerBlurb }); prose.push({ where: "try lead", text: tryPage.lead }); diff --git a/www/scripts/verify-samples.mjs b/www/scripts/verify-samples.mjs new file mode 100644 index 00000000..86d3b7f9 --- /dev/null +++ b/www/scripts/verify-samples.mjs @@ -0,0 +1,96 @@ +/** + * Homepage snippets must be real files. Each `homePage.examples[].code` equals + * its `source` file under the repository root, and `homePage.sample` equals + * `samples/hero.echo`. Leading `;` comment lines in the files are not shown on + * the page. When an `xo` binary exists (XO_BIN, or ../target/debug/xo), each + * snippet also runs and its stdout must equal the output shown beside it. + */ +import { spawnSync } from "node:child_process"; +import { existsSync, readFileSync } from "node:fs"; +import { fileURLToPath } from "node:url"; +import path from "node:path"; +import { createServer } from "vite"; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), ".."); +const repoRoot = path.resolve(root, ".."); + +function shown(text) { + const lines = text.replace(/\r\n/g, "\n").split("\n"); + while (lines.length && (lines[0].startsWith(";") || lines[0].trim() === "")) { + lines.shift(); + } + return lines.join("\n").trimEnd(); +} + +const server = await createServer({ + root, + logLevel: "error", + server: { middlewareMode: true }, + appType: "custom", +}); + +try { + const { homePage } = await server.ssrLoadModule("/src/docs/site.ts"); + const failures = []; + + const xoBin = + process.env.XO_BIN ?? + [path.join(repoRoot, "target/debug/xo"), path.join(repoRoot, "target/release/xo")].find( + existsSync, + ); + + const cases = [ + { + label: "hero", + file: path.join(root, "samples/hero.echo"), + code: homePage.sample, + output: homePage.sampleOutput, + }, + ...homePage.examples.map((example) => ({ + label: example.source, + file: path.join(repoRoot, example.source), + code: example.code, + output: example.output, + })), + ]; + + let executed = 0; + for (const item of cases) { + if (!existsSync(item.file)) { + failures.push(`${item.label}: source file is missing`); + continue; + } + if (shown(readFileSync(item.file, "utf8")) !== item.code.trimEnd()) { + failures.push( + `${item.label}: homepage code differs from ${path.relative(repoRoot, item.file)}`, + ); + } + if (xoBin) { + const run = spawnSync(xoBin, ["run", item.file], { encoding: "utf8", cwd: repoRoot }); + executed += 1; + if (run.status !== 0) { + failures.push(`${item.label}: xo run exited ${run.status}: ${run.stderr.slice(0, 200)}`); + } else if (run.stdout.trimEnd() !== item.output) { + failures.push( + `${item.label}: output ${JSON.stringify(run.stdout.trimEnd())} differs from page ${JSON.stringify(item.output)}`, + ); + } + } + } + + if (failures.length) { + console.error(JSON.stringify({ ok: false, failures }, null, 2)); + process.exitCode = 1; + } else { + console.log( + JSON.stringify({ + ok: true, + snippets: cases.length, + executed, + note: xoBin ? undefined : "xo binary not found; output was not re-run", + }), + ); + } +} finally { + await server.close(); +} diff --git a/www/scripts/verify-static-dist.mjs b/www/scripts/verify-static-dist.mjs index de1dfbe5..ba59d4e2 100644 --- a/www/scripts/verify-static-dist.mjs +++ b/www/scripts/verify-static-dist.mjs @@ -33,6 +33,9 @@ try { if (!existsSync(path.join(dist, "index.html"))) { fail("dist/index.html is missing; run this script after vite build"); } + if (!existsSync(path.join(dist, "og.png"))) { + fail("dist/og.png is missing; the social card is referenced from every page head"); + } for (const route of publicChromePaths()) { const page = pages.get(route); @@ -54,6 +57,19 @@ try { if (!html.includes(page.body)) { fail(`${route}: ${path.relative(root, file)} is missing the page body`); } + const url = site.publicCatalogUrl(route); + for (const needle of [ + ``, + `property="og:url"\n content="${url}"`, + ]) { + const flat = needle.replace(/\s+/g, " "); + if (!html.replace(/\s+/g, " ").includes(flat)) { + fail(`${route}: head is missing ${flat}`); + } + } + if (!/${site.homePage.definition}`)) { fail(`${route}: ${path.relative(root, file)} still has the homepage snapshot`); } diff --git a/www/src/app.tsx b/www/src/app.tsx index 6d0b7e91..0217c9a4 100644 --- a/www/src/app.tsx +++ b/www/src/app.tsx @@ -3,13 +3,25 @@ import { CtaLink } from "./components/cta-link"; import { EchoCode } from "./components/echo-code"; import { homePage } from "./docs/site"; +/** Keep the hyphenated word on one line so the heading never breaks mid-word. */ +function splitHyphenated(text: string, word: string): [string, string, string] { + const index = text.indexOf(word); + if (index < 0) { + return [text, "", ""]; + } + return [text.slice(0, index), word, text.slice(index + word.length)]; +} + export function HomePage() { + const definitionParts = splitHyphenated(homePage.definition, "glyph-led"); return (

- {homePage.definition} + {definitionParts[0]} + {definitionParts[1]} + {definitionParts[2]}

{homePage.lead} @@ -18,12 +30,12 @@ export function HomePage() { {homePage.status}

- Documents + Install xo Try Echo - - Install xo + + Documents
@@ -45,13 +57,90 @@ export function HomePage() { language="echo" variant="inline-block" /> +
+

+ xo run output +

+
+                {homePage.sampleOutput}
+              
+
+
+ {homePage.highlights.map((item) => ( +
+

+ + {item.title} + +

+

{item.text}

+
+ ))} +
+ +
+

+ {homePage.examplesTitle} +

+

+ {homePage.examplesLead} +

+
+ {homePage.examples.map((example) => ( +
+

{example.note}

+
+
+
+ {example.caption} +
+ + source + +
+ +
+

+ xo run output +

+
+                    {example.output}
+                  
+
+
+
+ ))} +
+
+