From 86291aae0134a476cbec9958c5d861cf870d79e8 Mon Sep 17 00:00:00 2001 From: Salma Date: Mon, 27 Apr 2026 07:41:08 -0700 Subject: [PATCH 1/6] pls --- _projects/Makefile | 117 +++++++++++ _projects/Multi.md | 40 ++++ _projects/README.md | 156 ++++++++++++++ .../multiplayer/images/blackandwhite.jpg | Bin 0 -> 81060 bytes .../levels/GameLevelMultiplayer.js | 190 ++++++++++++++++++ 5 files changed, 503 insertions(+) create mode 100644 _projects/Makefile create mode 100644 _projects/Multi.md create mode 100644 _projects/README.md create mode 100644 _projects/multiplayer/images/blackandwhite.jpg create mode 100644 _projects/multiplayer/levels/GameLevelMultiplayer.js diff --git a/_projects/Makefile b/_projects/Makefile new file mode 100644 index 000000000..6f0f33531 --- /dev/null +++ b/_projects/Makefile @@ -0,0 +1,117 @@ +# CS Pathway Game Project Makefile +# Generic targets: build, assets, clean, watch, docs, docs-clean +# Called from main Makefile via: make -C _projects/cs-pathway-game + +########################################### +# CS Pathway Game Project Configuration +########################################### + +# Project paths (relative to workspace root) +DATE_OF_CREATION = 2026-04-02 +PROJECT_SRC = $(CURDIR) +PROJECT_NAME = $(notdir $(PROJECT_SRC)) +NOTEBOOK_FILENAME = $(DATE_OF_CREATION)-$(PROJECT_NAME).ipynb + +# Workspace root (main Makefile directory - two levels up from here) +WORKSPACE_ROOT = ../.. + +# Distribution destinations (relative to workspace root, in .gitignore) +JS_DEST = $(WORKSPACE_ROOT)/assets/js/projects/$(PROJECT_NAME) +IMAGES_DEST = $(WORKSPACE_ROOT)/images/projects/$(PROJECT_NAME) +NOTEBOOK_DEST = $(WORKSPACE_ROOT)/_notebooks/projects/$(PROJECT_NAME) +DOCS_DEST = $(WORKSPACE_ROOT)/_posts/projects/$(PROJECT_NAME) + +########################################### +# Build Targets +########################################### + +# Main build target - copy notebook and call assets +build: + @mkdir -p $(NOTEBOOK_DEST) + @cp notebook.src.ipynb $(NOTEBOOK_DEST)/$(NOTEBOOK_FILENAME) 2>/dev/null || true + @$(MAKE) assets + @$(MAKE) docs + @echo "✅ $(PROJECT_NAME) built successfully" + @echo " Source: _projects/$(PROJECT_NAME)/" + @echo " Notebook: _notebooks/projects/$(PROJECT_NAME)/$(NOTEBOOK_FILENAME)" + @echo " JavaScript: assets/js/projects/$(PROJECT_NAME)/" + @echo " Images: images/projects/$(PROJECT_NAME)/" + @echo " Docs: _posts/projects/$(PROJECT_NAME)/" + +# Copy only JS and image assets (not notebook) - for watch triggers +assets: + @mkdir -p $(JS_DEST)/levels + @cp levels/*.js $(JS_DEST)/levels/ 2>/dev/null || true + @mkdir -p $(JS_DEST)/model + @cp model/*.js $(JS_DEST)/model/ 2>/dev/null || true + @mkdir -p $(IMAGES_DEST) + @cp -r images/* $(IMAGES_DEST)/ 2>/dev/null || true + +# Clean distributed files (keeps source intact) +clean: + @echo "🧹 Cleaning $(PROJECT_NAME) distribution..." + @rm -rf $(NOTEBOOK_DEST) + @rm -rf $(JS_DEST) + @rm -rf $(IMAGES_DEST) + @echo "✓ Distribution cleaned (source files preserved in _projects/$(PROJECT_NAME))" + +########################################### +# Watch Target (for dev mode) +########################################### + +# Watch project files and auto-copy on change +watch: + @echo "👀 Watching $(PROJECT_NAME) project (auto-copy on save)..." + @if command -v fswatch >/dev/null 2>&1; then \ + fswatch -l 0.3 -r $(PROJECT_SRC) 2>/dev/null | while read changed_file; do \ + if echo "$$changed_file" | grep -q "notebook.src.ipynb"; then \ + echo " 🔄 Notebook changed - copying and converting..."; \ + mkdir -p $(NOTEBOOK_DEST); \ + cp $(PROJECT_SRC)/notebook.src.ipynb $(NOTEBOOK_DEST)/$(NOTEBOOK_FILENAME) 2>/dev/null || true; \ + cd $(WORKSPACE_ROOT) && make convert-single NOTEBOOK_FILE="$(NOTEBOOK_DEST)/$(NOTEBOOK_FILENAME)" 2>&1; \ + elif echo "$$changed_file" | grep -q "/levels/"; then \ + filename=$$(basename "$$changed_file"); \ + echo " 🔄 Level changed: $$filename"; \ + mkdir -p $(JS_DEST)/levels; \ + cp "$$changed_file" $(JS_DEST)/levels/ 2>/dev/null || true; \ + elif echo "$$changed_file" | grep -q "/model/"; then \ + filename=$$(basename "$$changed_file"); \ + echo " 🔄 Model changed: $$filename"; \ + mkdir -p $(JS_DEST)/model; \ + cp "$$changed_file" $(JS_DEST)/model/ 2>/dev/null || true; \ + elif echo "$$changed_file" | grep -q "/images/"; then \ + echo " 🔄 Images changed - copying all images..."; \ + $(MAKE) assets 2>&1 | grep -v "cp:" | head -1; \ + else \ + echo " 🔄 File changed: $$changed_file (copying all assets)"; \ + $(MAKE) assets 2>&1 | grep -v "cp:"; \ + fi; \ + done; \ + else \ + echo "⚠️ fswatch not installed (brew install fswatch for auto-watch)"; \ + echo " Falling back to manual: run 'make -C _projects/$(PROJECT_NAME) build' after edits"; \ + while true; do sleep 3600; done; \ + fi + +########################################### +# Documentation Targets (serve mode only) +########################################### + +# Publish documentation with date prefixes to _posts/ +docs: + @echo "📚 Publishing $(PROJECT_NAME) documentation..." + @mkdir -p $(DOCS_DEST) + @cp Multi.md $(DOCS_DEST)/$(DATE_OF_CREATION)-multiplayer.md 2>/dev/null || true + @for doc in docs/*.md; do \ + if [ -f "$$doc" ]; then \ + filename=$$(basename "$$doc"); \ + cp "$$doc" "$(DOCS_DEST)/$(DATE_OF_CREATION)-$(PROJECT_NAME)-$$filename" 2>/dev/null || true; \ + fi; \ + done + @echo "✓ Documentation published to _posts/projects/$(PROJECT_NAME)/" + +# Clean documentation distribution +docs-clean: + @rm -rf $(DOCS_DEST) + +.PHONY: build assets clean watch docs docs-clean diff --git a/_projects/Multi.md b/_projects/Multi.md new file mode 100644 index 000000000..12ee1bb27 --- /dev/null +++ b/_projects/Multi.md @@ -0,0 +1,40 @@ +--- +layout: opencs +title: Multiplayer +permalink: /gamify/multiplayer +socket_io: true +--- + + +
+
+ +
+ + + + + diff --git a/_projects/README.md b/_projects/README.md new file mode 100644 index 000000000..cd78f8652 --- /dev/null +++ b/_projects/README.md @@ -0,0 +1,156 @@ +--- +layout: post +title: Adventure Game - Overview +description: README starting documentation for the adventure game +category: Gamify +breadcrumb: true +permalink: /gamify/overview +--- + +## Directory Structure + +Project-friendly project organization for the introductory gamify experience. + +```text +_projects/gamify/ +├── notebook.src.ipynb +├── levels/ +│ ├── GameLevelWater.js +│ ├── GameLevelDesert.js +│ ├── GameLevelEnd.js +│ └── GameLevelOverworld.js +├── model/ +├── images/ +└── docs/ + └── README.md +``` + +Runtime/distributed outputs are generated into GitHub Pages folders by Makefile: + +- _notebooks/projects/gamify/ +- _posts/projects/gamify/ +- assets/js/projects/gamify/ +- images/projects/gamify/ + +## Development Workflow + +Primary SDLC workflow: + +```bash +make dev +``` + +This is the main build-and-test loop for development. It starts Jekyll and the registered project watchers so edits are copied, converted, and regenerated automatically. + +Before using live regeneration with make dev, install fswatch: + +```bash +# macOS +brew install fswatch + +# Ubuntu/Debian +sudo apt install fswatch +``` + +Without fswatch, the project watcher falls back to manual rebuild instructions instead of auto-regeneration. + +Validate this project after make dev when you want to force a full re-copy of distributed files. + +Use this when: + +- You renamed files or folders. +- You want to confirm files were copied to expected runtime directories. +- You want to isolate one project's distribution behavior while debugging. + +```bash +make -C _projects/gamify build +make -C _projects/gamify docs # docs are not in make dev +``` + +Validate all registered projects when you need a repo-wide distribution refresh or consistency check. + +Use this when: + +- Multiple projects were renamed or restructured. +- You want to verify all registered project outputs in one run. +- You want a quick pre-commit sanity check for project distribution. + +```bash +make build-registered-projects +make build-registered-docs # docs are not in make dev +``` + +## CI/CD Targets and Action Logs + +GitHub Actions uses the same registered targets: + +```yaml +- name: Build registered projects + run: | + make build-registered-projects + make build-registered-docs +``` + +Expected Actions log lines for project-level visibility: + +- 📦 Building project: gamify +- 📚 Building docs for: gamify + +If docs verification is enabled in workflow, expect summary lines similar to: + +- Registered project docs found: +- Sample generated docs: + +These logs are the quickest way to confirm _projects registration and distribution are running in CI. + +## Edit/Save Workflow + +1. Edit files in _projects/gamify/ +2. Save file and let auto-distribution run. +3. Jekyll regenerates affected pages. +4. Refresh browser and validate changes. + +## Path Guidance + +Use runtime absolute paths in code. + +```javascript +// Image path from gameEnv +const sprite = gameEnv.path + '/images/projects/gamify/knight.png'; + +// Shared game engine import +import GameControl from '/assets/js/GameEnginev1.1/essentials/GameControl.js'; +``` + +## Registration Model + +Project integration into Makefile is registration-based. + +1. Add project name to _projects/.makeprojects. +2. Use the project Makefile template targets: build, clean, watch, docs, docs-clean. +3. For new projects, typically only DATE_OF_CREATION and project files change. + +No Makefile fragments or project-specific root targets are required. + +## Version Control Strategy + +Track source files in _projects. Treat distributed files as generated artifacts. + +```gitignore +# Track source +!_projects/gamify/** + +# Ignore generated distribution +_notebooks/projects/gamify/ +assets/js/projects/gamify/ +images/projects/gamify/ +_posts/projects/gamify/ +``` + +## Notes + +This README is the baseline introduction to the build system concepts. Real-world, deeper references belong in the cs-pathway-game docs. + +For an example of lightweight team documentation, see the sample GameLevelWater write-up: + +- [Sample Level Documentation](/gamify/gamelevelwater) diff --git a/_projects/multiplayer/images/blackandwhite.jpg b/_projects/multiplayer/images/blackandwhite.jpg new file mode 100644 index 0000000000000000000000000000000000000000..87b9c6bb9ddace2b7821af12473f8f750149640f GIT binary patch literal 81060 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
  • 1c_WFIJGkf{s_w@&x2V@@U&{y1t0KuZYyUuV8A!VS|{-%^h~nE|g=YzC(aH5s4fK zthT`r>8y~P!^#0^j2BKo>dWldg%n^d1x!`cb)lVZcezQPQ5lk(z zN==0wK2BNuUOO=gqXZUgDk*~s>Fl9=$6-PgND)d+cwZN}?(pQ-;WqOD&IfKy2m!+{ zx?af`Gvr8QK%9UoX`qG_X>=JM{LMNO5ube#)r8P>owqs*Lz;>=hHi<51*E&9H>U3G zzhQrYfnpZXde0Xk31-yyB99~Iq%{tT(dEDhC-=VjOW*Md%Pu+xxMRAImcl=z?#mJ+ z3`iI?LK&@PKXZ_W{{|?a!QbEJ*}(%_oI;1qjC&2ag#@g5DUffAb0px43uQM1Op@U0 z^XmONbPy*&L{WD8DRL>l+j6v7>I;C8Hv;l0YJ%%K=Z>(8nD^x3ZSxFKvLZd*Hu5*_s!NG_vI(I}Q!B)&p; zc-Lkl-X`0=@z7J{;{q&WI$|@zHtxswBcAeZYBPXu!L?RrysbfU`bhvCJC!Ep=TGn* zYa^+op-YHOz#fX8!8eBDA1~RDqTPVr6?jk*Zy+yl?4YuWX}LaW;x6?D3r&>qL%ArZ z5T3}Ge##@fi^9K4-XT`FaDke7XqodKc>Sa<0BWM#cUMrKvRFmiV$jU#yOB~#o&FPx zND-h`4b5w`vBWmCxwcgLEFHdg72TUzy4rXpgN}jzU4O(fwy5RueGgw(OpqZoKev=b z`;0_AxSwt>k{b>MP$WBPdL-UowIAVpiOLY5Ffa&U)}4!cn@l{!CNvP!ae%SO_^zug zu>e@2X8<9y#NQvsnJoE)9iZ->>Re}y^Eh};bVR4p<;-QELZ#^!n~(K=PVU%aFZ^k& z59RC@r-eT&Mfc{l3s323Jc;C4#>v7_7XSxhn=G^G; zzS51V_iAg{Z1yZc$@UxzWASn3WO4N9+mP6H?*wyab|WyCI6s%$Hc9f;kTUwun}CNB z?)Qq_J(4RBd%5YtJmvS}z7YwMQJ~4D&72xPycKu8l6U}j6BROQRrcQ&eUQz7s0wb9 zO6tW4%gqQHpi7ze_A>dG9%f@%frcvc&1!ZhxgW1JN&$MIwQu`n@~n}{`cw;2>TBqC zE`*+MAB&R~k@SF)SfWz*h5eO%QFiy>1q`z4Aq7l%rQf~mES1D5WZamk8N3DFrAJCE zJLG&1hVVGOcci~dJ{N&m7p(Ijqj*2XEzcrM7w5l8QT&10A@#$KCv2#O@IA`{bgmzp z2Zk25%+DUj8vY^`0)y}b?ttVWwH3{S8T5xppnKlDIil@a`*C1~IR?awzBd}vZC|v4 zk_38_p1;;L;nvTeW3aQ6U6kT9^tO~)0!T3^1(;+y>Otqog_yWe30MZuZP3a@^=_|$ zFGz+CB*I3PowCdAL5VMf0uYVnW4$DfqyE(g>iq01FO-Exo^@+!iPZ*C1McRv{q*5b zq_)Z&{fBxWzay}L9}F%{{8?wOM3I{%qnxGy?HH8=YaD{W&p%Tt=%A6k_K zt@>Spybba)F$|&o+&5l}NVF}O2m+26XU&3=*nDt5CUNS?nPMxeqagbU>}=yccoG`} zA>~u7QuGMeuAFb=+XMi@qAnSm(5z62yjlRfnPUFe!vhC?(++u{q100Ex^9Pk8S}u2 z1Cue`%J(+)0NW)Sf+!m<5;i1`kVnl$$@zPAy=f4oX(Vpwu`4Zoa# zj4;i>@0(%#oyqH_{RE{HwABK!bMuA7>#tK%pK&hqNq4kraWx&xX(+sbd~0;3MUSSU zV70B>D2g9<$NJ{A$epN^iK98;Ac~uhn089>#kYSP%AU$&@r#8WX#f8jNRGufe&dLo z3-B$qT&hYgu?WeuIY5aY*A*~i^;6hTpgC{8ZA0r z=~Xk%M7hg6g`T0$jx8BT;kVcMW5{2OWh%dWU?BST3}0KgWlsxc+b#QE5)zkO#rnjo(i` zU@|DdR$Xi98FqG<0JpAh?VM)7TUf9zFa5ZA2JEi##bZ^-+v3c!O$GQ|75hG^W62L= z@_I(O`S;#fQ8nG+HJp48u;2Q?zvuEEzR(xmyHFD2$$bJ6|1rqp_d}A~<8{KTy?gqu z@d8+mnI5O|vg97t>cIad6~yW5U^vlCQF1Wik&zr5n!_~$oqi=h72omWnQBxD4aIOh z|B7$Mk#jnw>4lw&?&FefItjX}ekPt@0rzaqc&uosS?UT4pI3qCUSSKzP@=_!p{WQP z03B}%U9kR{OSdyitk68M9~3^v7d^*1vkl@|{;{GI zNC}x~{WaT(^B{;cy+vN_XNq8xm6mH+)wO`-1#}lr-aYt2PWqO@DtgXBU&z06^H+ps z00g$Mp6zNsB>TQTf5F0SORKBljN$F=pvl^hXkm0lf_bk+xRVWQ7RoZpJu%A%3vMiH z@0CI04>+PKn=1=q!;IQOIhyZd>+rcHHdtGiEzfelgec5^xndg}2DOTdT4L)zkD9%S z{UWl&ONStLi#fY&8TYAVa-;_OdU|15yx1vl#@pv0oOc*)QyC{T_U^ND#)q)dE#Reqffv4Y;K3v_q>`}MKG@u%u2EV?JzAly6m-M6!>4RK@;}JMyGBs6(VAeXQ@J&dtFHEdVAT z*I&Bx-=erRl>007q2WX6NKL`bWh;JHBq&;dMHqE4iszk?+zab1Pg9(Is}9%0r4L)Z zM2XO8s)~ZqvTicW%l5NE9yd*j(mTkymu`eg7m!7kk0FDds~W}g8}MT4Kp^;9{_kCaK+WQ4+)O-0SFbB&bfdBg*j|6xxYsJ(j=dB@+zO>ENvSiz--H16 z3Klm#`;ktL%HnA5A{UI_A$JPvZT4|9z``3^8Q zCE7n)3IlzCF}x0uF$2ZWoO>P}X?<03DQlaC8ZbCW?tHuOBSFljsS0^D23WsiD)`?I zF7JFg_3{&Zb>`37ix=Y&z*Zak9Mw~j__6qBw%?Wq0UM$PaA8wQuB5e1CoOSFOgpgA zkZLA|B(wH-1Q9%cly1LKbLz`k2r z5e7jn-wjZR{m{p_O?;Plx|Ite6gBTtBp2$fBx75F7d#P}() z=_F(_eCIucP|`q7dBH6}Uu!Q$a~1>Y*tUtA*MX%(?Bz;lVQ#_q0`x|5VG;v58g<*{ z&X4`1+OZWjtQ1fw*VsFio!5ZC_g6cBjoztte99ac&dp~3roOc)yjkr=uhYV#b4;(g zzvKHekZp)4GN`FAxoXGjc7!a;>MT9jNj_-Uh=B zvb;L(>v12k4!p&z3>U5^8TlN#$0G%PueC(m%AM*f+!_*w&DIABC z%9&MBhW5!$|IBc~48*aa40CigM5gci9$9J@Rl1kc%! zMnk3{P?mFPQfYv32}|DA22eT72B3W&z@jzAJ}kzq0WD`M)jML*Pq^ne7!>kn*ijB$ zof8f3v8)V3oKlnZnTq#hBQhTce^TyEea3;Se_><(|H1^Yk1K!)0$wu3Sz*|J0(zpb zgq?c?kYmTIW68Fr)=5^_Sp{2JVY*Wy9+$Qy_qb|QJ_ulZCh$B02ZrlI_13@=mv|D} z8&`cnP8{-_n+UFXVEV~SVRbn)98g&p?4_gKsyK@$g!Fim+ApDVEtpq1J8oK3-bAv_ z$PN7>H{$gH`(q_+SG~n^+$mQMDt``RLQCIuM9!9Bl1;#SJNelo9ZLhFFN6y`qH56O*9U$|I+VMFB!O=}-q z-hOmW3y{v>DrL>rN0h%9`_MVc8d{2M&nH6i`!V?(b`kDLdhv!KgkGl!Y#}DaRJS?O z2?~#LVbB>~@Aq9Tmh{9XNKUs#UE)$V4Gc%O z=FS2Qb+kFU#G6LDivEc~*Cm42(D?=%>h@k0LpbE0S+K!ybMH(3Q7S|cM%ML^o1bgU z1}XJt6#lET2KM7fFJ{Ayk(1$WGkts5GXO3zY2jwP-JmXlpfYnhQSTEaR=i29)Aq|p znP6Bc09s9F?A9%8L1Gma1T*7dr*42H042w{a?a4|B`IKemoNg);{%-aT&6o^h2lI(-htpVHTc?9kKjIYxb$#-%A{%E5#y=9N5Ok zel$w=ZFH{odqtAgPVjzR-^0Oe^O~VHO-ujPC$>A9B;FR!B0T3%xwppwm!H+E25 zT!Wjv=iThimGKOadrfxy2!9-)1dS7AJXhiFZ?Q_0_}rhk@Nom!>}d-+NfQ-Vu-lFYe;l+KyK|L#x`qKL!6S1^2EpoE#s;>R5~0 zTGkQb^Fw8q)O+tJ9#mPKqscKwH{j7xTVIgp4nOcU3@j*oXRQnTdy-&tpDUrzy1T*h zmeC-EyK>mm9Onqoy&G8RonXX;pIdehQ$B22`YBR1E%zSWQTvs%8_D`&BzrqHsmE{) ztxveP{qot}7JY-S&>@g(3#00|VjElj1ZH?B1q%8Z*)tf>2KUxr-jIseBTD>rT`m{H zelMH~D|+&6(N|tzTi=h1{Y$&e!7S|zux-@NeXzjt^B)pyhD_c<$+4S*LXw#rVERzF z(c=AaaF-KiXiwg-a#f$j>zJKRTD{oL_OtEb+M%L|Cr$9sg09FhkWX7Y_gv2ubbGb^BZ!r>fCP>pDem!k>2KZUd2OtpD4k_^x!xPEk^1}j)oBAD!eD~EC4L(|^Xo@6hU$e-t1)1t2FTUCu#?OBN z_E3{kM2@R zNYa=oSBaq$7M@xM0DS255_@D%@kDFst_Gk8y2Knzl4_>jealKByZ>zmGdz)6ZeLMs zTApt|2^iz0;O6IsTe6=3egS>S;n}fYb=1f@zs_kjO2%z_H-0QgR7ts-Vc+r`(YRL@ zM&_?Z+c0?hfldG!bls~+wo7Bbd>3attVUZKZ_vUknllqX24C<$)ZK9zNdIh;k(mSXGldmIfbbhl;fMj^;1atu=q-aYve^n}T^9 zKylzLU_tqQ?kG#?1f+MRaOYYH&T>7Vu(C_j=VJ+u^~F*4c636IVGZ6uiv8t|WEn8C z+1Co+br2D{!9+>vWvYaxcKU|UoeVC2MfDSKDjZckg$Hoi7LQ8ZH~~2VGbpal@r%df zH?>H zC>P?KSg8?1kKO5g7HoMW85JAYW4s5}zY^h%wY@H+7k=*8K1@y9()lx7Sa<&n5_t#C z1MQM2Z|ltyP+9pTM&swN%BhYPO{>AIc(SLu^{vr=GPU~_r1m3(U%CChb;f>D@J8nCOJQNvANq2j_zL;11&Wg^6%8ckY z-SxO+=6IO~!51UbAhzQ~lyG~uEKyY+3}fWp{Cxl8?eH@0#~6CmZHqFVN$*AH4%{sX zRmX>N+j7eomp7yP0gC~{fzuKdKtlmzr4-ujS=3zWVR$}RhvFvSoK=bD5QZ?b?SC7E z(aq$09*h~x_%R+9X;U4%y_91lKTF(*D%;r6;u$Q zgb?G|*6B_k9s-J5=2fQ3189IVdoO1Fc*ZT_Q3Na!OXP`7w!O05p#!Fj>W{)qiR=Zm z1bi2s#awe|UrtAwi}Ifme06|Rlee@>zwIN(Ch>zox))%MPoVoUY0(^uIo>AC1DFSMoLuLKYX9R=7>z+M$c)5_nKo{N3?Jf|?~0 z&NwO(*yeqaLR_J!S@H5lKkTAp2aNXKh}-jiS!3ha)7ZXv!<-N4hZ?>O=tV#a`WN^! zY*^8!PW{t;FX^F}6HwRr{9VEk9!hpfOdgKomwVS1 zndkdEsg{6X2*7UOE#GqzmgNRfBB$(O05c!V(c$VU~74an^>lz2I7FwgNenR(gcr$9IL`TIO63OEzDi%$M4JnTW#a-#kN zLiyPBAgj}OJ3d#vt4vGSS{kxmz1Ezlyh>sSxTAO|6tS2zu&wneC+GtC8jU4w6}7}< zkOGNYr>UBh>u_y|m$*rwts#4e&VpnIUp@Re4kP|<|AzU}{KI~%7SMX0#mFt%mAX`b zQz!%7V^dirg)NAv@PPvit5|o9n9H}LS>*r2v4FUMiTU&+8(yfcM8nAAw+*F+Anm7I z%?cNOspiT;zqZ3DqEuOdQu&7AL3sI1yMx+6e9q8(o5gUPKhA}S@)&7P=Q*mP`eH++ zPDCM5g^~v9KUpiduFm}N;lJ$q6_ixJG>;Vp6m-Moms3;EA7o1K`)+fEuoEwtbr-gp zg~6mz%%LQ_bOI>>jMZoI^9yWQXqaPf-JDIx;T5Crk`gc1 zYoMVE73hF7;J6tW2w7WlC!lS_$ZsRs-fA-^uDR_P#sqLp($v9UHWA-Afn8Z(#vpm; zvLE|y9SnVkw&fCh+fB!BjkrxEHZ8XqY5uqHz9={WQ6+fcygPq)HMY;fZ(8+7Tt6NL(4ana9@sCfwqgYUY4K$Y zLny^XN2W&C2+0vIGy_j_F&!JQOaFwObr>JP1=zIBp|NGsiWx8|G1RjAAnwM`#JqfC z{OhcRxvy}OCpKUR5rh)gOS02GHJF3C`AIG_M+11MD?5C4Nqg*fJY2@dh8Ou-jV?E2p*YoXnSeWtm7RiRDmfD$BQA>}TumP43uoQsX@YgwX>e55G}$G4ea!S*{^_2aFa= zv&ZSh{+IdIg@12OYj5ohQlvaw=nz7q%*z_WNS=C@CFXA@JWNGshJz8p%i=~OmN;x| zlgyj14L9kAoy2X8v9uMqu38735~>$|{Uzjza|mOoqIoQ1(zz`gaKkQ9gOQ$#=L@#U%l_HymcQX#K|?kBT7DJCHD>ej;!BI@M^*`HerSXr6b+s!e%p z5)*)dbkW;`?e+8@#JZ!TXd;YAb|VGXtg!7onPpGOdqn7S8nRPPK+zO~oOy4^qhFhN zcPVyt;cKG0HT2Hg2Z_c>TB%+vG47nlK6yt@H<1cyb71H&N2vb_H~}qEmHnPQ2Rr8t z`Cld+BE^BeJ$I+DyN5MY4dB~PfZZ$EnKyjd7b1~T&))7>)C&_8TbCl`mnb>O$w)5y z*DTgJ&*HpWu0)&0FdA)@{>E=p_9?fQUB&F!Y_@;2tMbFS5>f8`GScsdJ_9lRn}9P8 zU$*PcX?@Hpx=P$g{w*~jr**G6F^xYLf`l>1j5y?xhFmxE{S=HfC55#6vs2CIl6)h_ zY5x!|06gnHyTsdX-@lEoye)Gvr&dfVzaRT#(el<^j&KJjDJII?aZF3h=cc)fY??Np zhT{w9rwy!lNFX=^j`JM&7f_su7EL;LKm*{IN5Kq@GEoIAWc`99?1#b56$lBi6p&ZN zxCab~SGXM_shTCL7T?@2^M@g(nICMc@*B!QNUZV}w7oJ1j8r_5pB6rkmw}#}n_(c`%=Asy zForGr30AM1EzXlAL7(*?fQ(#Mn%@&U0a2cS z_5!wvL-G9wQox~#6VPDbOp$E+pInzbzTm`fP|G`NR$5wmLCqPq{no<+qAF33tlO<> z$;VbORX?3QDhKrq9^FGyHBK%)EGQ^OmY`Upz6~B&TRWU}LQfRu*uRd7_pz-|&{V%a z7R*eyRK zy@bR273InTSr~%1+i*Uv_i=ULg|cTA8v7l)DE(sDoY?f^_lO_L zqvbN1!GQCFIO_79%QP>ut<4hsB-TDrQNyymZe%J6D(hofzt&QjAjH?N-7!qC?HO|C zId5;5aK_ZQzsagI1+DT%t?1fMp)>y3#5WjJzQPWA&hp%JxNt&)PDwr?|Hc>geAal+AMpN~*oT+ilW1%6&O6|86PH2hP{*m>pjca&FuZ4=8 zkJRnA*+pS`0^LFwqy?<7dg5a>er`>^j}TafTUf4L1xVnp6HuPB&-^Zm^>28kNokoj z&y`~{D?clkFSx{SugC5hE~ir+B-)x8RP7DU^3*v>zt*N+F#((u2w1|nYB_oZ93~y$ z#7Cqv#D}6vV^Jhgifdu2;^VbPG}PgCFCUIa^ily{g(jU*Qk}HeIUUV-QJMFe!a|lMwBk$xY!qDL26ZcDHxG9|sW@>yXi}&S^gQ?SvT@sV zPPy2pN9y=ROrg%X)Q~F!iu@whY~)Izvc=1o+5jPY3$ym6XV47^! zj;X^__@LaM2Jue`vYyKC(aotGqz%n&k6Xm{Sv#>!!AXPMVit#7g8e+7-P%r z(6E6jvNH-CaV$Y=!_E53(r=kquRUSJ5w-a(keGpV|6G5EB?zvyUq<|IdJSMQ>NGDl8x-uvr7QV^_cO5=0^|nVazk zcM193xe+gqwje$sPt+5)D&Q^*xPgaz|Lr}{zrB08{Ix)yZMLi+ZK|e+6}zzq;Nu>< zfQOF#+%bKaoHhKqI#60I7DKn*q*t1YkRDd+RlOLre%D&uZwSR{t9#Z=vL$v~H~ej- zN&VN)E%CkMJH@KJut@<-1A^w^LJ*Iht8p7;gFv74nj2D5j%!wbjg;AqjneU^`0it| zYVSH^Rj7W4T|JjWKGRns)QU;$36tHuw5Aww&Ucxghg9lQqY(<~iHYG(wRhx^QiLm@ zYK7AogT5d!M@<>{e>c`r_ujr52e!gTt(L!$tA+=*<*Sb0_|R4hk3a-NABfx-J-Z;c zO_a!FS&h&;0TqJVa66BDz8|Ht@Wf~OPMbGat3c;lU7F}j*(n>|iBBp7BNVR2$aIRm z0s7_MyXB`}rcSrSsoYd%nUGh>i|=O|eDuk%dn>P`9vsJ5_r{4aM@iT?9(SYkLzicW zngJ^W8gI|(Www>OitZV}rNF>ON(;&3SoeF%2?KHKKlQ}Q4CFt&?up^yfQLwnk;~`7 zB_pNt(Xq;bQC{4uP-+hjC-k6nkZyza&yT};)%XWZ``?_{VkO(;damK26omndo=Y|f zB(d_%gI7esSJSG$2*9U89KsYOy#Gl?N}I=D*m?t&u%v)RDRFN(GwZ0JoA%rvi-=Jz z^?ZW%aUH6gv~kHCtU73uo=DmOtUXl>2;Vn@QlcMRbqJ%sZtRyFm!ssS&Ri1NtkpWLtnmXul@#kYRBB zGZ1Up12jSFi~2)}e2=Vz)u2+~R&*@!u0@AuRTPvA6e&XNXu{LIft-n*)DnrKZE7e9 z*=uCU7-4eD$$44YZ-b4uX|`3S8?NaqR{W9Tg~etRScJ6)>E3uVLSH=*dWNiNfSadT zN7}!=6>)eG;pZHP0>be0`;H_7_>R_q%}V&{;bwrBFHSqB*Uw5I5If{4>3ZSNf2ont zbdG)!h~mX8xcPX9ei^F4Z+)l0CVyBZUboJb2$NL$3ah&OIP8A zHPVvgY&TF9Y-7EWkdAJ>ICY0fo{PqeX`53C3!aR2uy1*Ps8YFnlO_|e%mxV=#s2Iv zUBIbS7_$iTmDKh80Q~88RnS_aI7E+$cT?r0Z1{w^bHsx20Ef0pU~SQa6tsD*jUczU`xp=(jl+{g?_K>-p zO@)XX@?bdb)a-_DJy42kks8DcLrAXp$9(6ONoS+{qk=x;&B3IV#Cgp6$c;LHK)97A zs(;;iP{G9sn@Az5Dq$FKuD4gGo^V~F_by0z#<9g|OerPJ;9R>`9Tb}X%bqObd34|< z=w0Rj2&HxZfGxY9{<4{t9cnAeZ1} z8BLR^=xU63Y@!$X%er40=FWedmalm!4WwtcWUe^|cr4Z;Outlj85 znpnc#E!P9ihk_CI!}F~V)_@Rc`v{`t6Ld2en)*ZBK=%Yx-Uc{rOZyZVW@mz&zJb-T z60bx#UBi3T^gs)I;mRiF>I3jEOoFVXu;j}x$sbNXWY#KY3JM#KbZWTc78F!x^&#ca z*E=bRfSbt?DgcH6=VnPfzg_J%zc3lLHwB z@EZXNF_rfny>NG)1!CU3!1rMYGeY8mX?oS@)b+9x3t#YPSEE0YWg*@mE^TK zSbys%nOlfWnnW2F3JXB2Ch6N3#bC%qv%)SpCCS@oWI1NO(MAlMMg-^m@%uPxZ@%`+ zuSh?KL2Ja#E3YRH1_}H**v9O^s*-WMHyT65`#byqAr-&~nH22GE>ZThB)*nT2>0-g4(&?L4vmssSgE6+A+BD?H1X(5SIR)k5^ zKpr?Hyb3rwZvN49d}*n9pBV+z((TIwldDgif8i)69tAOH=I0-+g5iYFXQYPY%vw7 z%k7?0A!(E~q!gpZKa*#k&wSC4Qe3pmg-+@3l$%8jv~Q#Diy8@H^N`#Bt3krzW<=0; z>gyHx)GZuH5b2H$wwJH#Vno#f8>1IE)D{N^uZEf3QM-Fz@20Hsb1;2-oh@dU+lpJC zBUUsH+)-K*HI8{MAS_-YMy?9Pj&(Gy0$$Ug#@v0)JB6=-L)0iBNaP<5Q9Dw7SJ-)6 zNTUB27>Zrf1OpnDhw(+S__t^Rm%x4aBT6yt*%!Jm4y1vlVp6^Z=X%lDd0`xHbGs~5 zC)D=3P>1T-Mt84V%=1{4TQcvMx>I5=Og)t}82AQD+pRZPTQhX{ z>|7M?_6SjM*c{@3=`A6kX?h*kN!{A;*>)&llOLUwc@z_mDa6r+*==;_jiVFLugTt_ zbzht?;5nkLd0de-@}MU0zg+QM)3vgS}^e;!oCZessl8BJ3r6=bn zK4>hn6c1x&wFK`sUOT_}FjtkOnapd(B2wO;S2i}1aNkNai%&pHxBKi?na zt>dEly0>9qh8Y@EM4C}hMg^ohW<*LQM3E9vk?!tRLZp$7QM$XkLt^L-=|)Kb!FQwI z`~JoKyr0kW{3H9E@tirc_uBjHwbpfAYhRYZ?EQ}t-HhBUTT)JIq#P~Nqz;p2ljn5Q z_8>%_K>)Mk51XpjNNAT|6`4m_of+BxIfwT=x1N2jP(QuI;4@p0L3}@rv&~-f2IB1k z-M!kt>DeZa|7d`>yR+7jolo5(FwIPgTUhRK*a`BD8H-b1o-v?WF;1WABZ9=@S5B-Q z@c{SL)6A~Qwfj59b18E7nFgPot&}Mxxm`1oT3-M+ex^C({xMtcLGv1bL|CaOZ1@hk zw|FcTi;R+|{l@W!R<%_eX&g;=5o?TLqV!Cx+WJYKPCy>yi!*kji+3d~q{Goq7Zz49 za>q;+>f@WAv!F(zF8g#MH&qoB!#{k;zA_4UOH_QFooBwf(@tth#mhzXBYea7EhLKC zMcze;b83R~H==Bj!pRlSaj2tHryr75J}3}RnJh$KE3@)78+)E}$Vd5Xl9VluUX#U) zl^55CRpcR=o3UzoN&hy-&k*{Nd_}|LDUd)H%6*wQC{s~AkG>~xrzum^lFe!byer@aaMbulC1itpHEE?0oq^MUnKhRL21QOzT+76$NG)HB6pfyx$u8Gn75 zwHjU*C$Ho(Tptkqjl;KqZtT>v&tsCm=&`WwofqP9pvP{;%v87v{E}sJ345Vg?rv67 z8ad4N(U#A8;p5XGp=7+aD?u!nh&}uYhOFXIdXHsd3lSClJR#g}syVx?z86+Rqj!&A z)*QoY3SZm}l)JwU!xmvI_Z7n)AJraDeRt@`*oH`dp0DkSpybF4>nohHV8NAP4Jbn_ z`hGZN|HNZC^<3*C@9Q-Gx!0$Q1Kw##AAaN9u?^(6&D2xti6Ui+sfRnrbQz=XrjPAt zg-bfKOTSh(P;O_Jd>y*^TJSaIjRiH1r|fp?M+NKE8LiPK{_?Lqi>-;8F0=E z=RX~vqOzO+jT4A7RX#H?C)m_CI-&go6Zd?U=WoSXN!bZO9u8=C1PeT zL!$0VR%HI_{TXskZ>DQ)OW1(n5e|8VjvVgT+zYra{`>B%wFD6c#T-gFcN|E?xV{4M zmuZgCryKZqDng>wc2aC3xh&S3CEsf|`{G0W3`Zy)ywCa$;|&EH^d=Af;`YryEl(O# z`-EFz5+@Z(Hx*qs@_xh)rKAOjQ@>pH^}Q67Bir8ODI&>!w4U}+PVWO_pNPWd3o%~8 z@o~GlgJ<0QS&4o=^E?R(Tg>Ejp0p+vvtig~21bJoYAv5LxGDQ~Nl~brs=fJ5cA+$i zvKO~wmqmn%1W1M2r6UMF#!n+SDS4bGL+E?+qAYqg%uv?CRa(sgxs`bF0mU3zNqn~c zGTtkZf{Wv6)@=~MLnZ6~L+{X6YB01aF59bj3fF=mU#RX9V=WW428fGpi2YQkJQ(;D&YHox0g;*-jPIMe3M3 zS=%X736KTWkIJ3Hf~~>LWpssShHfK|1YBfq#5_tbGS^L(F`ayFVY5>l+w>-3(||M* z#f#?|cr0ACL&7!QiwJV~v6yI?3NtWM8Rad0Qr2tXUXmyf^g}v_eLbskqxE(zX*|+k^)tl>zn4dQJ-vd}qBf5zDKT{4$yK zzi|rja_5V?oMo^kfa>rY=MC=E^U5crEKk%~s?=vGEhxA@bKyO|}S2mBoQE-f$18>-g!<3s0NKg$6ndb!_p|$&BT$ z=L>6~H{N&~XzHmi4Gap3^-_~Ce1LjuvH2MCg@1rgMt8H65N?y7t6}ZI`&<~YrmH>c zJF$2nU_vO>u%`QRT<@TR3G50fer5mKN?6pJ<%5dB2q79IGynh=6Ml@UmC|tUEPjC(k_l43u7iN80Iw%u&w~ET!zZLHi=R!KgoJ$9*fMIZKOPWm(YrOb? z=ZIjl(*+JPBR@*T&S%{IJL-atRsH%n`h4{eF^%K>Fh5ytv9Ayw4SXSTb)og$j>*k) zq!?j5Er9U`M;o=m**tm>f$3iap(K?rGE$aZjn((6FR$Mqv)7jGUqG)|9jU7|ijYJs z#<#!rH}}Ad2H(E^S{EvK&8@(U8liwJcA8LnWTk**Kk+`F-#VpG1YdMPkTtBf6WhR| zu>??J)dT+7mf$MXz{R5p##VjI{qft_?ccJ3j;w6X6_%xB=6O@^AS2;CU9y zt7QHpIj@RLd&~I4g5KtR?4t8ycuO#tC>$?s3-Z546D0*tMwErwXm7tD_W7Kh3^lPgLJ|)yaqA&x%*TmxW=QLN;A5(iNfv+*Et!4g= zGgLgbc=@<7;j@y(zN74^MR&uI$bdMn)F(s$AH)bwP~ zQmEdqHaZ6vQGLbjSkDX`JQ7TE75r>)6TL<3J0uqPQ(mIV2oA8g@K`WDWTWKS#;oS; zTWEL02-*+bwL;B$*#XEs$?P_gvfonJ%9d)EOBSxtQ4NI0GnXbH9b%(j$@Sp;#<4_2 zSdv%=pg_u(ZN#<uYZOM&n=z#aTT_E*3M-3xjk;srSRBjED`cpcogLxH+zd1y>;^JTbpi&uB&aN^99Rl)5y16ur~Q1TUq&yY#TnhU4;w#q%Hl2?7#&kE@P4P@KR{`_%9{xK~WzM;Z=BlSkL9X z83tJ)`r}n28ukbJybK()(gf7IJ$l^O&aLdH(77wpHXCr+0q?%yK>`fr{l`b4-tkJ; zDX%9#k09o&0GRFM^aDDn$wNdU_y+1-|Di#+sKa-7T>culz^4Zd8 z{!Ff&GGODLh%$?o6ml( z^mtwBEza}iYQt$jDB<7{k|~_%sF(b|O$t>J23$Ojs5hUAJcA5}JdHb_=uu&x$zrwI z#O&tX>>kil4qIx_{4jxYlA3K`mV7j#tuyB%mf;lBv|jjc{5TCplw|T3tj)>KKO{}_ zLAY^Y3|NV6Kyop7A^v&OyvguvP)QgJiRcKhQo9OQO?44B2_xcT++4h?m)>~seH!H( zzgzY>!jSR-xnLtaPMyq9@T1b5v5tZJqy=JLo-?bEB*3xt28d!_h6=_;)GKFvT+dBP z;s$c&J0)&4K+aGSGKM4}e}&-`^YT)(KvU_ei4F8@gop#PxIV5SD5w8MA~w!th+=-l z)(fg{DY}4WImE+DI1EhO3VWy;9sGcE_#4__nwHDpg%eSiI*;FYf%#jLyz_l>bCWM! zCbohr@q8Pj4c@Z1o27HX29J>ztH9ANYgqT~FoFTRiHJTN+o~FvM!7>t{Xjsmj438~ zJNOMLmf%X(32(i{DTQMo%tFk|qv4PUo)fS0bt^RaaM_*m+LEN4!4Jex>4DArkB*ny z97iEOiADHKN)xi03@>7Km=z!z1Z8S8IGwe5>jFX*1D7QUA!-|ly>1J=uz4=zRbzq? z3RBP(mt7*f?%_+bpS}P0WbosvmNaXxbs~_47bsEx?KQm81>&+lZ;D}X5$x{=Xj@DE z_{kXcpK-O56pB+Xj+S{epiIRyb~u9xV+5Qh4?7aaCurwJ-)Ib`Lm5ryD+70z(8cP< zUUF;>u#W9E7r#4>hS$HOaLL-qC2l?ns&PhM(ILQrMG*0e5@2mH`!Gdek3tEO;GYKlegqW?Y{4)&1`B+skAL_9$t%Dx061;qMV)@pA}2DnjZ%R*^u z<|qU-t64_Gbf|fW)VaihY%rNdnol5>p*1@rv>~@;;#BqPU?RW+1ALC6%#F3g)ii@k zKNYnbJn1x$DPQtz9^+VM|7gy$F+@`ZiS~OCT!r9z;X=JxUAb~5w10g>BS8dO;N=Y1 z=dP=7S`jpX1-2|MRnjzJ4v@tF$gvKUn$mKxbXW>`IveZ{3oUvW71?G1(fok-#YdX6 zlRjpFlo?7e8S2a3$DwDjz>cszfBt}=POpgFCyaZRj5frO@@6v5H1aA5!U)NH?TAsW z)UEa6{gL#K^$ySZh{&viiK9QoaWQc+YX_A?fC=9*LyaXYrcH&=dlrgx%2y(UAaCr$ z;;c}q_;Gsb2Osm3i*GN)Ue=}z40!Yc7jcZWF25}>R>G(tqG}in{5ivGqxJbyIsj!n zE?pP&8^^5P5}cm2GyVGV=cMIy_19+;RkUSdrIfo5u#6D7hB@33JiZlh?MMHJ|AZ^M~A)%Y;dZo!rDB{truazYcUR&w~13y}N$BSu#>`1AN+l!Q> zDqod~7z+RniqL;F!l$ZB?RQE)o=o=ZG^(>)<#@{x8m(7Sni5EDixue!-Ao{`lh(Q; zW6%4UBemK=C{YHfn>!a|^q`K_ai7NxIR$g)HR1U77ak~z(HN!>5 z6<@vRXJAM?fpr<`_^0q~hyDzWCmi%5DD09t$PCvF8^LkQc9;=k+Q%r1ewn?L9@adZ z{8P!ihw<2c%BjSi2=2S|@;6TZQ{_fE2L?J)dNX#)9~*)TCmDRptr7VpeN#7p<1tqB z=`iN>oi+fuu&K+Dvb?lk-*%{@BvUyoHPwBRmC047uGZdhbbso_d|Q~Uozl(rV!MiR zDvaQv*(lZg5X4xI1ELe4ZD>S@uXSFF9ezaeyxLp+Zft)c4+@TZl5u6(-=+F+t2GHk zes1pWOqNr*ASp5RJodqeT4ceWjjjA&8EJK4_=~QAlESLNn@s&37mS}pQGpgTw zty{li2I%v38HqgP7u^i8ZujrKhu!7Qj8G8fFkNzNF+3(HaUbwpo|`#scQu#d8?NOK zW>iusk{%kABgSzcVZlSe)d<+0FFM~!{*43gKj8qDa=kNu>_ky&3Q6`>i0_n1ZngS7 zgzv1%UT;zBLx9>TSr%Rro5Uu9`nyr~H4$-PkWXK$XCBIT!boSTy|w)1DiIHdYWauT zKc^>G**^aKLH{dDe=~%@+Q**K(+3hXEH7VG`g$HczS$*s*yP!!P55UV!fK-VtHNV z+MS4NLRdVxZX?*X^tjk^@_~iNqG|Yyk%TG%uAaJ3^D%9(w)ML!SzW@cDqZqP@LrMQ z&*P{h8l@wA@kI)HUCAlR(-2fD10Rb@=vM|x+@27jln1;NmiYLu9KLXO5&p)}Vi}#X za3SD1exMt^RZ^D@Z}3(Z{KDNK^L*eWo(T{BB1X6QcDXOoPJX&PUveF3oUKXvj4ag; zUgGW7!pX!86!%XodN#t0`Zh z+pHiMdZb|kWShtyxvflhJ*t1o#xIK4R5M~lGdFoLvJsPz;QNE+xesBYu=~_Zmh7Kp zo7tdU@zq#qWMHTa$rYINbZ984wDdeLCV2NhZ12C!kyK#*bViM%dF4Z;XHyvkVft&V zCaZS?g``mO%=WR=x+REF7#vmCJ#mT$Op;i!?VX61=}aKSV3luMYcQsAd1UCp5qAw= zdSEmsOw_3nlFypU*e!lx=>KZa0{RX!iu0sekU~U#K*nIKU}%EU;_JJC5+Q6LBw-WL znVcMbi8NSYyORP+gdHETDH#~3>h=t7SM2aWA-PXEf~l~|YWti1$w?tiygx&P=t}LE zQ`5M|_IFR@Ouv4^gxvVZGdaQmW}sKU|b@TWyoA9>Sf^6On8 zxU}S}cO1|6j_ur zY0|8yNXP7RtC5k!;8g>OhPQ&Ty5yn8h5n{fzu*u*QhcMY-%llzygTV>^(sYM$rawLGKf)$#4(WY8(1&@EOUkOc#&wQ-6Pa4s{pA#s|= z(6>9V5agl7ZrxVLy%dnUS7g^h4ILZUf5YbhKd?YB>BQP#OYLY0KLZ^4>uRnJy?k=s z;6?q%J-)@WXlG0zUF6RdB#fNmWY%qQJH+TlYB+OHMYYBs8J{EJ1V*nGPUz{FZ5Dj$ zI*{Cx4_RAoUiy_rt@kba=#av$G6mb;u@~@>jMdhOq_o0N7zF)U2k_Vekpk zOw7&q6l*&=+^N^nHrPOHdrd@{q$)Wm1B{SfJz)m%iyM zA2Zimk%e$l13N-Qoo2<<{ZN_8J>F!gND7miY)%Hkdl zA-Xs~P{dX9i9^ba5Pk_5ntx0Yh49wRUyZbn3?HLFQ5fDW81nFm(tquo(wxJI7VFgF z(-ND`XwWYY)=Eu2A>BYkmxfFXk$#lm>ux@x@OHYRKaLfY7q?)Ql*V|=&U1^_<8TSC z65LKib~Mz3%(qW_eJGUhFB6$QTU;;Ppmh^T@y{?t%jecf105w=#NRlN$ldb!{)8dN=ne;LY`T>{U;*mkyn+LJaI41z?BD$mSa z>`oIAAj+d(SxW3L_fHh=bP+!RhnKs``!i~i&pe@QA;3YGLkNc;SfZct6)-x)^RAz* z(iR2FTs0NDqA|x}5Cs_*|?WJOdCe6lFrEOjw>$=>DbrdVV>ul~i4V{m7uh5^zuJw0T*o?q|9r z*JfNsA!d?R#*e(nMgL+ipyA9p?RT#^OO6r+oEx_Z)^O-T@|!{MowHsT;#)1|kDIM5Ll{V%9IIx;04iG`LWp zgL-O{j3I*dLHqMZ(PTIzFO(jdZQcAN_MSmRd)MpB3k%2g19vO3)y3;=z4?tlgDh7L z+KEUW-uQ4yNFp(n=kn})9>!+XfEWSB1MRj|i{e>a(=vfn+ zF7uk{RrG~aR1q*Mn%C3`%oum=lbcYL6um%ZRb8Msz+|N-!!e}ctoNgX9Y9h3y%<92 z*xwO761fcjDwp#c=K&&rZ~VYF0nb_}S|?s~l`lC%ht-xhh^B~?)@hY3C!ombQSEah zqv8cq!|rx9n!pXrrz?_5BtOF14>do}E_=%^gh>X>Xnng0fA$3SjxvhUJNDkRI0xjI zTfBaM5v{#ayg@Du5ld2Y#NuwXSU2~2_7?VxWeR=Ur>;83^CUTReZ7LxzxYoiLOtvV zK_ei&_jq}QCy|Ngn)XQQz2024F$;-caS$=?SXkTtjUx__Wns8@hjR3v zQU^~TgOzmc&r13Qf2_pr-G%Lb3=?hK4IDo3B3a=nD<2>rS+*NFK|_<7IpDXc?8xCO zwoL2sUdQ072fM>Vq>7QgZWPL^z~_hf|MWJQ5M&zHnT??O0@jzCpG+x-WKP;o@d$W> z?F32WzT0Arc~!W|1!aQu1#&#^3fs|k)7wObh#F8Ac`6z_9epzNbd7A>Cdz=BY86St zj#gMM7V8-o9uqV|MR2wC`+uqnK~-DB!tYw1HbPSJbuy5ZKlaEre&cBD6YBGn3G{mO z>YJD+;Kuik%?cCpk{M!B8k<)w4}K8<+D~&wx3F{y$x&v{(uW*<@^}XKRX#Y(T13ZX z75v7wV=QiWi}ixGE_6PhOe9KiFX#eC;O%6^Z}-Yw4Y610%q4MW8nk#~CNjm-K1hW86x{8>Noo0Tf z<-S4dbs5;9L4Dt=D#g}0H+Qn)Ga4ndovgF9E2qc!^{t-$Cdgaga)CjDTSB5?;;LD7 zN=!>stMHQ)vVm$?n5TviohsyWm>4NmcF4U4kGHU@H^;_WBtGIbU7vn|mz4dcp}Jl( z@8uGKpj2jsP%OqWpEOpl#4Te$Ne_tv`8vIFUW9WhbLdc&dn}kV<9{Yii&Y%RJqzOs8Oci#&llu!!B0`xhs5HZ9A9pCKc zPy0&^-exlDwL89+^aN!8Y6#|Ey~=XUtxoOs8=Y~f+s1L!Q2OQ+1ZL7iqZMQI&{eAd z1DNS<$9+|l@PGai4QQ54k!B>)y-5w$rO(qD=fY3tU4t5-Cd_O1+NHKj&fF9zX_jV= zUGx4l;T%U_w`|ilb}cZWi%kbJA2zJM&`!2%^Jt=0_=<*W8|V*7Y!aLv66W7xcRL<3 z>jeU@Z$@_#q&ERo_1~v@-0xkjm$QGoUpDgKzR(UTx$N$*`jJ%Kvq;pD(+eGD=)+fn)LF zp8iC@qfvmHS!z0T%_yk_Ck5|mZPjvXiAcV!`PAFLR*arWK=uPvp41ZP3d;CvB&cZA&0P)t3Z zfJ`-qad*I}7zhdGtBEb8900D0@5_pDd9yx6c{-gyPtP1392~tsG{nyOyl@XJq!<4J zXaGEM!w!#d3m8(L6!d^fg=glc+RLM-z~-cZ&6WQjzhF$unJRoZroqd%Y%5z&#HcWI z;uEQ{(Gsaa#2k(zx~Fr}yzW3G6J=#Lxl^mKu5|D1q#eljsm&S<2@0oiq9f*{Ezs9( zlk``Z7AH*g4=;E%O#1dkQQ)2)i>?VXUE0s}@kok@oH$Ra9;&^GM837LY9-cK7UTk3 z(H15G^wnzvKVM0VWIs~1>umBCt<)wjeIAu32kfTnr)yS8t(5}hWzn#iyN$-$Rgc7n z%Qo)3aaANYhlqgZsub3^!Sg4SM7X)OQg7Lwy}w?WlmF8G@;>f z`zu{DW(x1_7Zo$JB?mJF7j%1p@+~p@91$>A0=G^TwKmAU0VF%iv!R*lR?{alj`GQr zHk@^W*>x(pb{*gR$XX!2TKIciy4X{8y_1i?dye?}`B0w+BRa)Xb zzJ4pdqWr6Y@h8(0$TfbsG#(;BO-46TJ?dr8ppvW4M!iM^y$v5rETD(k3r)FO$x}+w zT0XweI1{JDk8>~;c^)%#U|W2R*Sfb?kcr#_vl%p5!+WSAsx(=uMwmujrpz@kL=!Yw zPRqI2`b1m}qf&NO0av(FZsjdnpqX%-1rSvE%wrlt5?``Pa1xb|(P2;G6}v?8lpYGU z1ysyWH9gZ4memV|@-ZYJg`gDVBNofL1KSpern(qkcy00%i#d=o{oWl`YSp3;Clz%jjEqCO4ks z+gw9H5Bw`e+wv*=O3iXTAfeh`L{@-;2UU?}-%Ycr){O(H%89-iB&P@JAUrXjEwHX{ z-W%KV2Tuzl$vD6@+LGKNK-&M6hMKQskehg^aL=XXk0zOCh}`F+w;tePM2YRD;N zo>D2!TRW#=GT!PT%DX*{Z@n26j#+7%o%fEc4DVF?Ce-2$fH_V&er1<8<0m*QTXs#) zmszgyP}6$9{kzZhoK?tJ7d4rIk{bL`;U>P(xuz=-qPLH@@bn$K{!9KC7cL(>7%N}N z_zMv&qJG*6qafhA*Pk{qutV>K^OqIyX;E=MRC00o$PDd-p&+o%Es)Pr7v z0*Lu&i{h|W^-mk|A01+}9>684w<5~_a0^|ae(4oYnRe+fjioyXg75pEe zCTZKp~s zXoeC=`a{}0-_i>tXU54G$k!l6*ZvCQp;DN*R7-BnM34mi{=PF zpYh55VwUMulQTsgb++zAdtLZk1>B_j0oontdMDyb;JI<<{np=f{!%cv8M?|G=ZD6$ zh7rskvTD7rtg9+zwU&%=-|@iQQ<^bGW{Y3u8gYx$Elb;lW^81Up(KmAX#%iYO*flha_ z5&>Vx8;WNyp0*Bc7Tz*n?-38`^+Dtqvo1JUKar>A2q$wU2P$hpiC;=Mi}fwZMjirZ zS^zLuM5U)DF9&x4V**$b=(V;764LwP%H}}Uyal)siAA#~ilq{TM~~5z|HLQ`@UiR4 zV7SQbhAt%Q$&h=Dd(4Ub{_PrMX~O(LA04r#MKY6gE9geY_))E|=v)gHY>x+RpP-WC zT8V9C@}5ws?Yuo6$&Unc%deFpp15tcwe1{>+rSXzo+GkgVNU`nC+6*k#i1m6VZ~RD zBPPQuDCqSyr>wRW=1`XZTm?;L**|z(bM@waQSjo?#>X=UtimB-^#h=GX>!HRUx3?V z?AF$0GhGOy(pr|5ovf+oyB|{;5c1cni1`0~uYW%QRn(Pt%8mF1tbyHavYdT})T{2g z_;HDSIijoo%?~CzWea`8mwtaW+1VrAEwUtOgy4FO>C>rVGhN)aVX?3L%S!Zr58)<5 zr7k)$?|FR}wX=98ndVSYw8KX%lK^vXnX7FDmK7-cUnlw;*NiGznr`b##I|NJAGm-b z8zcFZx2A&eAc01wVWu755sj%i4d;d&c|#5qPGqYjlbL#a&3J4-(eQ03nJko0kr}mG zO37$jI#)95kgY8zcefxr>PlfeXP><%EZ*Q$J}^Z2@i?w7N zQ#{)ob3lHu>Q2Yb@F$jtaGbl*a$JJA`3+tGZYtxk(w+dblRX9AE@_xJaF1amX$+Cy zCPG_yrVPnQ4O$YI3%mk(ueL0-J-xV*<$H6BzKUvK3s-BK#pk!7^s0$owWH6m#s;h` z?Nm6ZEeW`#cptRqE#7!N*|HyQ1^&BCVp zqM|~2CvOLjOz-K4F=g1r{J^B-NEBX7E4WIqoNA}jeZyPSDl&Pju9kCX4jUd{rZBhS zllL%wn$xFecphW=TZ;QcBy!MY!UE5qv5poi{jbOv{erFnVQw>aj|iJZCHG)LDg z5Q0tR75Y0;JeVib}r-6VxnH|$M&-%qx zX{*fa_^&Y~n5!Xn%m3ZU^nRtM{i^HvU>I+V?nr58)qCRiwY-*5m2om{AMWp=;CDgL zytYOk%h=r~e_#@N2m&W`EUtxhHq_(HCtIL=M@8CNN@iN&JBqr;H>VFVOh4tG}P9>EQgzUtmD_$6_(X8?dZDzsEwC)c$&=W*g5!k$iARbx|K4^k-9b z?E#(lg@J3$oCG#b5%9E8`C2Gehh~=1=mBTHT0^uJ7zd^OJD+{BNnOpJg{STyjNt0S@lrZa4 z9ZSNy>QzUO{Jn8y^#e$fwQA$D8=h&u9w95AcU-Pd z4Lb+a+vLXw)JeT>r->l?8QU@Tl1(1t>mq4d*zcH&=DyG zn;?mVV$I+oEBNCTS9?b+P4CGzm>&rT(<>mqVE^)5vOGyb)?K?{h+({MD{ub;MChz^ zCKRPFQC2;GycLBEw_gwp@2gio4@GT)x7`=+v16Ku4|C)6uy(R^#*v{*^8e#|y~$!t z$iGUcjw0DkSVcbGF0?#h({f**@O->5j?P|27~I6WJOrz(`LXJ&-Q-nYnsrAfvdqXZ zDc&fR#h2dA;vFd^_k=>``0Z3jJL+m0GN^-+?Z|W5G+yiZCpp&=?Hj!FwrDiXuq9o; zanhPk+ROOhX{bMC*66QgOO2N(p8g4F_Bij!bcy`we|J;+6eXHJzm1SzdTJrUS@2r; zURB?L8QSF{*#Ltyub^Iuirf5Yw7UD7hEtI-?|F`%2ZTH*{%>RK(fj9Ca=T8CFj>7U zzmjc}aM8>S4j_~W_wDt#Xn`AB>5x85mkw z%3*Do9MvXvZ23fWZ2C_<8p1q|!&}DzXcleI( z_VwY*CT}YaI?-KSbobe<=S9hp{DFJC--<=h8-kcMOqhbW?-IS6N|kl6E>wL$&i`27 z80_J!|Hl{Gcm4{a`=JYA4qnL}Sr|j!OZ%&^#PNji8V45f8;4t<5nn3tH%<=djQ?h5 zpB7!hoo?c{uPT7wE0@96{jZL?=rJ$cR*FYv@2`_FAInt*ADE*R{u&+0%HgP!6mI$euy=&wI#gSy(XnF1@aUOz-q~l>{B);FFRBJDILdO zDW=%I#8ii52mw50am{);z8M83PzVIL1Q*pvzr5ka-IklZc z=`PEmElYQLOmvtuOF3h`7QVAtZJBGfDw}-o`{AN_tnKB66bA|`+Mj!m3|}J>-gVQN+S zQl+zX1lK#Dc%-@HF=@N3Zj1Eb<`-@+SLtWqD|SGs!!hD4jG+>CxJ%^OnCjUwiL?LUXG#DS4d;O`+ z!q&0#YK$`Vs#B_aqolOi6Nhq72q4y9Xp=)PpC=u(^)v0rj8X7NKBeUGeJnJs zb|{MEF;J%N$VnS$KwHazT)VkptH_G+ynioE#pV8Qe{|9Xrx`O>UFyFhZ}$JqMgFHE zA^S__oq?ewufF;~pg?t#xmS=>Um0q|z`~**>N%u@a!A&S3$JqgTG%!m?0ADnK?qV( zis#`)p$lp>*?dVi<8fFd0|Ny=tsby5^%whyzK~Fldy$yFup2x}Nd`uZh>3kRC3c6E zyxNE$78h0|0t*o#V9Syb8lud3)$$`p4R>+E^Pz&1BO;MG!B_h^0dJlOzvTymdCSHV zt#L*sB7D}*>7@(|&#t_(q(zOU;@dkkU(d_@tW)fl9nJ(7SF)0#FaR|Mvo+v>aMPK! z1G4E0IjvMMC%_v3_|D&t%iqJ}bpGmzvmDc%v8c~Z0RDKL5&;wsC^$q=_nPa%(C{ay z)(Eoj)-vgXjvL?;LTN?uH`!f4&|MDPih=|vpadA#yHH4iL88-O;*noeIP18`V3S@; zO4BixtRVma7~YsUPC(aP{aPw`O|N(GywBHx!tOz{@}u}oTD}MxQx*k_jFgOCYsC>L z6CNH~e?(B&1Tu;F6Ss~nf9s?9@Jk|$r0rQ}I{6wUffQp79=-=)U$g6<2{Uob8lbO* zCyVpaVkrJYHyZZh%fVFx$4hktcPIhYp_sY$>DQ9!IwN8(;5=*pcyMrC?q|5`B=)Jn zMe4|#Tcn$gnu++!9jsrscgSCOE6EJjn+_}S&cFAISXj%R?Ly55cE&vcwt&&ACQTzvR>}nMNg`W zJtnzIc^stw;?mhS{HSj5&N};8Qu_=e6sHXcIgwFWprWWTkjmp8I8X+%l2dm#&}IW8 zBhwFme*W-cO*bswrw~IgC-%y7t)MfOt7mwUuE|>ja>_nU*W@wAG;X#!LrHp+*I8mJ zl4&%4XnQw3(OLL8&{H9^?uDRm*3eJlBbS)2oF`Ab%<)*(jBqccO3DVBNlQ$dQt9g* zY%gySXFGEEDBmnISMhzKuS|SPk2ZG1Z;W1>5pvl!g3-(Md)2GgU&WHr&wj)sh4kyL zsa3#U8j)CH@pZTkG1F0P>z&65rt=swixtZpeX+9>?ERu0)i)ZWpf2HusnnSMiN}^> zSuuVz`2#kX^y#;j)%*&=!DMAT#fnFm=G&>gqt|kZ-@|^H-qX9Mu1`exTyaxGqrYf< zTpuf^q^?5a;0<5?*lyggiaPEx-8vOeuZV!(E-&Al)|*$NPn(%7wvF>geUnmTf3MFS zJ86&{I#Amal=|&`Ph&C#;Q$x9{-#OZ@u1V7pc4J3qUsg-jmIE)^}K5*K_HjsJ+y4& zWk8|+m_@smL&kOM_#<99wMM^Q=1ZxN;Ct6VF|W9det;TssB|~poP8M#!pf~*Pqp<< z_Fa&7;xneRn;myb<;(3&j6R$Q%?G^BO3`yMZ}gz2=Vd^=yL7H^f3)fPd3_1Dd;9z> zxJ2v)=AlXAY+Gr2#HpmJb;K1}qcxLkaX}-a>$;DXq&r`Q+3|H-=%ArjFqoyFg0HOf zyJn$5%p}^+dbB=rp=$V-BDpXnTN>Q5D=&>=yxWsBNN?s=@9zYbjMO6S9NLN6jP@`e zCuqd$!X`dFZL~F>X&>rX7Aslw#hXVHa84y^7YK)xa7`@191~~ji$F13N(O%R=DLW( zVTK1s&uc^5Rj(u-Jq@9SG_ss8UVBxi3Ukey5q#(j4Gsq=~O^_GICd@0sOwoMIfIdTmwmKfu_n(Dx zWx2I&?}_=l8RTl}HDslx`NNWQjSZ{woQ3;*F+T+Y-(g0sy+ zb~V#*k|A=PaYYJiMigS1^i>3DjekjX$O)*!mApCmz+mC&8d%H4q)0Kes8r_WL;(8w zSpDq!kx_R~6mHuk{m{`BP|utBs+4HS{a3Oq`eYTGn1LQlPHHws$Xquk3!^`5S9<); zi^GF1BD(>T`$JialqI`Ll>Y{`_&>&J!98ZefX<;r{N0$F{f?3#F4v9XCMa$*nq z^@{j$EUo>qIGdQ#_otPDB==mSHhz4^^xd;(-g^J1Ddb$qWWrXj9sC|*x?a9{x7GeG zn={^Ia&C6)y|A>@ES*I+=oRmag3K5Xt2k%3o)NQ~xc{*t$QJ4AOpGwpvYVFbf0ZMr zt*mC3wAS>$D5P6OID3mN@py0>lu@;M)47u%zC8o7-v69J!@mv{PDCk0-sLw~u{MQ8 z@e9#f&;$?W;y>yLP^_2+osRn-4QSsje)im(QEDAI$Ba@>2}y9rNC4{Y=91g=4xcoL zwdGINg6gYXkWZ)fHN$ikf)hqH0ylm>o6uwz8_RXJBWPpy_~!Qtiukrfbb1z%H$_Au zJU{z7Yi-mFACKonz$&d=RcXt&2_gcOy-qi!yF2oqpOTK|cDth4M5tXRBgg zz?*fxMoV#YOUV8`J{gur+B3TVRIeaYeLyB(F0;oCbd-RslDE%3RY36z&U3@W1HZe+ zx}?%)bU1tg#EQ)Jv; zptXiEm=aujYdRV&+QHwgKg{^{n*L>KyvUgbcMsz%6C&! zyGV=LJeK3oE0B2t8hn*(E#zA$SH&7TEqn)+ny1OU;Ad!U$=cv4h%uJA53pji{62$H zi<6tEB3wLMZRx0OrZ?n(Hc7y^Yk|GD73y(Tnb_ow&HbBvIvpN5(+)jH-rWZ|vf4H~ zs*SSh+RxCkJ8ccWSm@VAoCySYQ$LwxdU!QC&IwQOy`zo{`#dNt9l0EytPnvFUsJkO zWs?)G%|e&Vv?_-GY|syseIb_c-^7(P!jVV}a8gps04rMZ2MUO(dPVT~g~-u`bj^B4 zk`iUzOVeXC2iW~QIerO=W%!J7=NmcC&0tm##Phr{$QJmHo+qe;R-=^jY129Z!Z=>D z4>Ix%dG9pUK;@}c09Prmg2@{n#L99~1~10SHIA~ltSHQ-+a|t0zsZ}9{i%Q8pgxI3 z3keshgu-(Ky+Y@T(L5N#-CwJk9RY-W6~G+)jW zdkl{f2)y;!KnkGx+&q>X49@ZZV^$Ii5{~Xy#_)WG8r;RG_A!NED|=Oj5(oAj`$po8 z-5CHwdZ29=jWdW8>o4jRJ_ODhE3Q8(q8PS;ysX!$G(S>70xKaD7Mi!dnc%_m7I!Q` z!)f*I2mESbc5`P?haV%Jf*?FU&Zsp8#jFN#RQ*9c zwmY08=1(Z^5E0S-g8=Pavsp`&*7}CNiMou_f|1|-hC!Ir^7u@DIFrceb7-N6EQ?Ky zR~a$v9pb~x+idSY!^@48hV6i-izjB z2nvL%1b#OF#7vL@^xuEv{`ILd3mS+=6WrlIZYPe%Dg1j*xV_gil{sCb5cn$u4F9|< z_?=t-t*H(uXT`ikZH)4s(G8Ji$eHuDFtpQ=9s3$j7Z5~SqYIDa&gz(qaMlf#5F|$b z{7DA64~unNzwxo1hMGYwP?mG-yPb6q%f?N-Trefttbto&VM#=Fm+z2U{9t#J0Zmp>T_<@`VX z6lU5*k3KDuLb~vAG)_FSY=ts&d~RERD%KKa3fp1y%DJF_;du4UyPRCjT>3H-L3IZl zX3oD`8;&bw0rO%V9By<(t)9ny?WsrJyqGtVciTxmPe6a;sBFi2ajfXfqry|Ux^C)) z4R||l-Fe=oJ0|DG^h{?3y($u?a?^D33wHx;FLwZm%|b7f7&Tfzz2ICdhvh;Kl2DV% zQsLlu_eA-o4^P^G>=wNNlp)GFeMrQP$zg~w;(r;xKuPp>Ox;X*yzG7$+Wv z6iN^0T^sTQfKmqC@z9|~I3bO13NPZ_gPZ);(bU!xo5U7CSNsO|x4yPH7xqTHAN7=^ z_8XbAXKw*d))y>*Z0D?fpEVLS*w@f+E=(a2NtThpA5gw}fuANWW_C|rm-th)^FCOm zVB}PJ2frL%o4{f`5@UTmU8CRJU$}*8}N4Y2Fo^Dw{rL zj_;VTaF13z?ngdFo~*U~VnMO2dV+_1n1_c?2I=w*x>u*%<0cuk7)-x2$j^pRqLszDi+ykLNunBGZ;@S-#p0VoD%I{R5Y?#cPd0}y4w6?DWp5i`FYcstSYQG~oFNIWh? z_OS|CbaPxfiFHs8h3*hf%V8ho=hk%k0nS#uA~NB0d)jVlt$q;!+3yZm$ND=Y=_z%G zt@JK?2?nASiG>Y@sFt>a5Hng>3JrR_N-_D*3nJ_Pk23wQ)bXrSRZ{k@L@U0_pNhd| zP0)`)q4R?K73-*DO9O;!&FZwW_0RDMT!zpQG_MF*8`9XXh0L}cWw9C5i1y(Q3gVt{ zq1Q@&DTryI`2Q$->$oVpes7c>Lc;D|npXa>$oPExJvoN@>Rr8B)80NtOmX{MMWk2oR9EY!9$7x?Gr9CYd zDbpSBYX(CARY?&lb;$tok9AO`D3bYux@NF^TsaBvlkQwV_#;lRXS=$jK)JL+@e+mY3Gu{xbMv3%RXHrI!& zCwFvfBSS+6``|!te*MVhugNn7I^@lN)H9%(o7qW5zpKMtmS|qud|m)gBkuq?S1rAa zxn6G*B|yqBpn+Ocy$i&NY!Aobuls7-R zMT%Qd@dd7R+9)kROk_(0ANQ(G`GYnh1?aL4|J|M7vk`Y@KjHbT+1D=KPx2w=iT>FC4f9zQ zNj*g9TZKIQ`|H~*+J!$eF*uEln4^gFjazo9jRcgPO6l)E9kF^_XPwMUvD+iR>lx|1 z#1~6-=a$7hzGF_3FTF_QXDp_eT+__~w>G##tksp9k~Z+P%ug$n*`xy?j$tZS*{E^8 zWi`%^D@Y^G_Ovjlmymy`85_Y%n^8~7D$t|t44v3bcjX7*HTxR9Lz|TyEF!DiX*oyc z*hBRbN%D=)Ss(VgPUP<=F3iDyjv0N%QjPa|QPW9SAO$Flv@r$yjhm4m#|&6zsVzER z@?fSY%p9m-z0b^AqaQk#5@YiubQo<8zl6x1{5^hh@TVGcSMPlU(p1E2Qm)233QBF- z9>!SlN$O~J$*-&WzD0X}dv%5LL@il~klVSN^7?}}A|)mP#PgYXur)f&BPP~chy{|J$U9rfAq?T!+zuHQUhDty%CTyOR= z0^>&k`wu0B8bG4CU9^0`!1s>l?xz7pIrOn*Q;IIfm(y5grpBcAFVnf694|akOPYgw zsU(nH*puZb{D#qY9!p!_qBQNF6-eWic&{SW5{stm(nBZrQlKe8-}risYgL(gUq}9Ng-zDytB6p1x7DgO(gr|QhXSaAzHBb z${_9sXX#h2!I}=>m-Q~+kMyp*>j)-V}Z_rlf}BKr9gYwYB)^YcifSEpaI zqagRBTJ|f6`ace6;h_B3*nZa-=~a?_+5Lb+S6k^&Ko+N41i?fZTmky+h;X+{w&kMn zCqE2hbBZ+7IWrY2OSge`#a3Kd#ghAN!-u_=ujFJL;eC|j%n$GRYdaXvQ!>=y_lzEz zdy!H!$H~Xza~Dd8zS92yk>DDPItI0oIJdF}Je;I$i}5P0;v}Of%BMmbK{|2WB5&gl zv=dhrgMYNjAnva4#)us>Z(0F*Dn$qFyM?0)fa(o>Ls+}#HYuPi%jHeWRsFc&)z`4# za8p}KgY9T>-Ygm<6>q2+gUCq9yW_~D_cz4c5hbw!Zo6pkzv#5DPDt7idoa@pYGh|N z@WyDwj^_t`A^#G^U)KY^>beCCKrQl)m|A}L2EU!pvh3J(x+^ZhKSRHc_U8Gbo!Eh_ z66;Mx0n^^dvrqzWp;vYSWd^<%i3;tz7p`PLuKd#@R|d1Czn_UeJ<=2{-ugOWVh;RBqv25O>r@wySDN z@F+_fMppH3)}Vj1LB}R%pZ@Ig%fec(kH|DOSE^Fg?FZbU-0XP6RtuNmj3%9rK=~1y zrEE@0Q6qlyj&W5J=6wpE->52v4ru?TF54mP4`0UF;9@n!X3I+Syf|^f*BC6TF4-G= z=J_u7?)cgnoz2p`hiXnt*4(Xl{`{H7A|~e8I_Jkz^kj%piL%6-dRMVj1U2>ihb(@` z9BtNhiW&FagKD<^_ES-?T=&Q()_jMtXo9an#5ZxKC&)hkwsO5uSCfXF?$q4!_mw_6 zf)LdAt}-+KpcR7R$g-2yz`!3g0I3#qs1`Rj_uf2J)~>>+|MY@IXfQ@MqVDS###PDD zWCBA0CuUX}efDrK-Kqv~`!4tIcDnNah6#F9i=Nr605|8YjOiMEX6M6-^8PTPY&ze5 z=>ujH!k$)qYTu!!xT~CbpHEVs=$hhT#*Zjp^pfS5f?LCq*>g2`Wc-(3PkY@*bG^-U z1>=c6+||$lvf@GlOtL7RaCG=368ncGJY>-1sE=1;Mvlh+^HA(a^n=*%rkvgO^moFw zV9QY#(~=^s4-5L-DJf5hOj6ILLgZE|CF%1Cs}8zFc&~T zVia8;-Cd!0luZkgSJDPjevLjas_u(Ec(NTXuMsuN0Xh7K`9lbsYG#l^5W;u!t+FIn zmIiCE3-e;2u#kTmu?IdbIfI8rEG?~SNc-z1yshxhIBkXmPrhwWFzf?}=lRY7Cw;`HA5Q*{X z_k7+?`(+_I81c5Q4pR*1VgXuhd6Ns-`?M3GaHl2Wig+{g(+$Jm>1=N-sH6}wvW3|gGGZ_})eFe;yPuXbXWrlS149KDp{L!YPl^MDBS0f;WK>FF zNxWqVy8OerkDjFkYr!X@%&0ZgBCy-VKYELqdRr%`=C0M#F@-ZeG;P{8>&`DYz|l&C6zHkE+5}VnHcv!ikCKw`R3u$`KYPCmg^Pj&%|N*?9cd-+)+l9 z@C{Dcj*|_c=`P6qj2Fe++vIw;dVd(A%q?yc2sBD&P@;&QIvfl+(FStAJ-mwtR$IkR zNL#Z)yUqd91iF8%OrA_hRwart?}T(eR3;L}42vGa z6|z8mEwuc0(Bdw%s4I*6N@XQ0yD~|_!l#{5LLnm=eN_miEH(R(nwsSsvtF`Z7<()2 zF8sZU$x#_frTgdmQ=*qep2SJ!suyv9K87^$IPf|>MiuPxtHp)Q0@yPI4;?eKf1{-H zQZa3&98v}*1*&c>=T`)VG6j{YTaykKF{Vat)G@ZexBto!ltf z9lEn+n2mZE#m}LtT86`~O%Y+jd<0XO!)>E}f2U@4nAbFxvIS-RuLhRLgeZ6RB;hP6 zE{y1jsZ&c@XXylyM8-b=1L_moEVVyq@2ixDrIb}B0E(LRr>7~DaGnf89Qz<9|sr%>_hb@=B(4^#<3{tYmLDn01%=l|CXIJ>e6MawoPa6tPrpk{YUP4A4vuiVe<{sFOU#u?BqFCIKSnjc*V@*vikiobU_{I9=w7~vOH>&M;>O_VSqtKL-GS(>4{ z(<>WM{gVd(kPd8^?W;vKw7owLUW}lQ69I@Q=h~Uj>Y7AlCmGq?4daYY8>VT(1Yl>9 z)#V6@dnLZt^V)lqzqB5EDXS<2Ubjyh6Bd5#Z+q=kMznkqo|GXnp*irR^SH_Wjs zD*2@|YV*T)?eeD0MVE^am?bzK|KAS}2t;7EwS+&1R?oxtsvx{r;W@rtsUkW&7;bCC z{@icWYm8mnIzJbR=eT3zK>dGeJbsXbvubMSUr_&^koR3Vm2ILuG}EB9^fQi8up}Bx z4Gjb1##u|U&|7UdRn3;d7nE3T^dH~{W`{lLR^lGYFdukb${>X|d#@RS;9oR^>vVmJ z>eVX1bZp+hsxYU+e2~(N#=L^PLb#1IzaYZpa&IaoJQbe#jt>naQ*B8}jKL3Ie=hJH zP%Yvq{p_ggiv=5bJdr@(1vB#h^q#W$9wwT2H-vY?%zCi!qS$=|<_j)T%EHPQs@A9c zC8+l>B3w2brk<>PrKZ;>&#}(H0TORFRUO!_1d8~wH+u$amYt#liy^zofXLtlm)5cD zM@JnG0oV_JIsW@|5$(4Ij;W1)5j|>&aZsFmo|PXK`s`R);~kumcP}?4l)RM3`v(zU zD|sU^(h0L1n9$oauk$hvhr1Cufd>&8JiE6{wk`T`y&IHC9!!0?$|@EWtjB^Z>Bi`n z9W!O||3H5Ix$v^S5@$TKzM^if#5l9Wc(FQuefm*kR|pwVpBB0Rlsp1inl#+#h+|gf z>`D&YQpH}e(*VHwdHiXFwL~+vy+kvwCWDR=d{reBh$w3&cF&aMGd(x$)(@VGDXWe_ z>!XlqGIhZq$W=TTEAVF$(?;$MJvs~p^mm@H{jmUujEeH&IEQy4_G0ZZ?qI3X#vim5 zKh>yUo9;4O2~*$ABx~{qp4NWie>t%b)Ey=3VSpn#V+H2_xPf z)Ehf+Q|+tYuDMm{DW)esX9|``UdCu~>6WSQjSm-J#_WAcAYa+EtTlV+(X$=4{q+D8 zL%Mdxb|!3v0cQAr{|MyIURJD;T*8b8cpr^(*c16x8k76_kxmPe$;yt`FRDa$>}?R%W4bro$K=)n^Zx1bGPHFN zbt#g&dmXftGm{j*wL`M9Gd|{7%fuEoBY74urALIB`E2jJQjx6beeLFWBkl8lt$5@2 zV6HG7cWzz-HkUQoYkYHdts@}?F7*>mK1~MbrDD#1OD8Gd)~ki5F{2j zN3ILKhiSi2oesC$bmkT<$IqzX7R@aS~M|4`wY(75H=GA=NOI+gqG*0KOKF?du0{7bp0b;uWzeFl& zK|~{OWl$>v4`#32Z`iXv`ekA%E2~-!K~bM|FD%LzdvwbbQN@MdD)W3=@u#-Vq#=C( z_tMnu$*xv9*;~OnF8Px=qUG$izvFGmim)npOqFmVZv3du?*y6VR?c&GQDe%Id9}zd zBS=SY4Cthtg=Dm)>JG?#)bws;=jF6BmK)ObmDg_B^zVnv!CTuHUAvQz5mbJr9^>By z(f=K4O(|A5npx*6{K_veebK^kCvLtswc|!F2cf>FI3xUcSNm9aTl=9|+!upJQo(Zx z-Fb3Y_Pb0ynvL8e5+Jkw-+cNsHM#C;X|rfyzM9>&Sf$&mYG4lyr)l_rnZ~9;Xp=Vl z2dx{Yur7|MkMZwkjMs-_15xx*sQE%%@otP*4!+6EuX$g;jg1*O!s8wg(Cuu&bli(o zc*90sXtsu-MNn)hndTw+-XPW0<=0p&wBY2XLi~=6UA{Qe+L+T+8tHr-c4z^1FpY|V zQr3iVlc6DL{ktND%@I+ALLd0`5X4T;~O*%bUSjiXJ z@7uDl@mH_l& z37*aoh^u4WA7?J_{CKaKG5U!1htGUd0%YxT@B3@1?~?AQEx_QNRcJt;zpfnk2kyp<}PqOnDMY+X+>n3lE{;aC2C2WXlD zOQCg&rs4Q-AD_07QQ|rh3AYMmQf8(UXG~h2o#gIi`sH((X#2_As#gTmvi8mE^{z@q z_C1)%xjseYHow-BpSZ9=-pXC*=KM(AS0Qh|D)k22vn#4$8=HNe3B1}v?+HA;Uy4`| zF4;e5Wu!IllW|$)gI~Jk5;v96B@X#1L{;!(w9Rn*;u4z2>Wxs^`F;g~31VGuhW9yO z{yXee)M0m#dSqB^EAKogr=>5V_~k31nHk-8s#U1K`&(Yx_nCK{D>vkU5hx<}w8TNh zAEUS8N+#_p@Xlq)z7o}VZ)yG)zGxor9hhUz!iVp%_pC)rWu(lvoH;)g*IG>35jt|N zU9breS*te_+U2u|M!gu+(ee$nrQ}yarX!O0gB~oYs?@3v=oqG}DsVfyncc}+2>Fhl zkZf&XIJRhVX~tW|kWn}Mbbq`w4xvrL@Uc`kQAmJT*ANG@@W<#f=^D zt!Uc!@+`4FJwhJVaTobUwbew8E2CYB(&(MB1cn5VCM8`-cezk_wFGXXA)8tA+`qR` z=;Su9JGhPLL5RaOdy@LX+6O24jT(AY6(l%kF)@yhY=ezL$`mS1iW*zY^z;bnVQWPn z`-x+2jc2JP6!(^c;WdS#0Ls0++34F7;p`0=uQv>5VH9m+DgMk4!<=HdtV;0F)}#zE z@@)0Hkj5l0kDH;ZaTH_-@zqk8*^AcE8N$ISMN+T3GKTed<{fvEoB=pp=;QV!?C1!Y^(w+3hk zvU=3*Mi}*1wmF~x{#Wq_p1HcdEHz_VV?hAs1(Id%6-paT(*)9Ii$7?Iu7Rk0K+kkP zP`yLlRU(LSj|Xoy}pIKdPSaE@xVP~E8`N;-X4u-A5?4t}0e zmYs5Mv^f=fqZau?&<4a_Su@|u`FNNfZpH|;{LOBvwK$4P%&n%5#^~icf(cw0;yE#) zxa^cEL!qC_?q4bk{$qSj$rhH-yDaX5=mNjF3N-98Q2hh=9Pq{%LC&gsJ&>!|n}nkE z_k4@J#H*E0(tX@|qy4!pzRW%)$>tjb9MbPvBg24Ht_g)ZdzgeeJ}OyoBw#V%BW8t? zedAO!jW)0ql=bYv{xsVYxS|-{ zFS?-d>jbm(;!=%TtfV5j=C@xV7>cz`Z4z|t6T7byIhxGPZ9lVM#;GJp*MEsp@xc%= zdomSy9hR40;JWkoDBo;(Na8M`Qf|f8%wC&7AFhzqs}z-OpuCPXe?xEQ1?iu3RZlAq zi6233setF|XCt2I7Z|rCZKPgAQfpxMY=tOWtT^xl1-;h83>WJHMx8{DjWfgV&q1F= zSW-JdH47ftbXz9#{sLrWml1zd2RekeW&p3Dy7%qSoo9dn?A!DQZ7@m7qP2mU?Pg5Y zTr-eVQ)wYOsr(KwvJtPBdb3-+=*9LK2+cV50$YoaDQA5hOr~0>v@uob$#fYujB zA8D`G5#`Tn&00oYlnF-NN$rL&jspM3k&tM9zJKZlz6*1$ALh(9_sVL9NRAU%Tb59)Q zX`9jwix659wpjjRY-KHPWaQ%C0LAo$2$p07X^f1Q1{h}WwjyYFNH*|t9HK>+L>Fk3L+6b}ks zX8pz$i~y|Z2Usg!xWr?ou?chYVJNpX`m?7|((G@F7(>FBszW`!qa6rgIx#PFI3!f0 zw-zV^$v3fJI^3)pUe=k3tA_p*ds~DQ1Of&WzYz@Wo#G?P(pO>W(}Gy-;N5uJ_%(Jf z#S{*RUYY@-3O^}CMcIpHqjZOD16*3eJ`L%g{nC3vQ^1Ip$0a3<-8%9fWdzwnfrKIPQGz}2=cE?HohBdQ67Mv@C zJG`H|*G6R&Ug8Vq=p({?z(1LDUnE5L2N0qE>zv>#*E`q|Ufb(3M1_lmL8v%zMIp{8 z3Rv$j5bg5p-a%;BomEFLoE42Io3)7LH;1^OSu*qFl)mf`T=|l-I;q57Czb5t=U3}w zr&DC*P|2lXMqe;^`4nG0ev*>eaNxfGLv&I^I{0$*_-+lYrMHx;LvY^QD@zwyg%bt9 z8KWDl2~Owg3#W!aeo#Su0A5EwIxJ>*`zruq-js)u7Cx^Zg`RrUA7QJraALWDYF+%s zddl+`Q*(oXkRqgPr>u!m(F^>M7CRx{QxRz<9k9>%+k^>Ur7!Na2elB zz>S+FcHRHmKBWSh?s|}GeKqec?cXR_FV-LkhG5#z-_fJD#n~GM9<1ME@!h2a-aY7@ zKF_|Jz7U_;P?VHpHdV!Z#@hNKVOnc+>$POus>w=-U8@Ei7TjJ``30gxSzl(N3+GNE z-*=L^)k9d{p4d-iiLCm&SVsZ(`4{1(0x4^D8xlPjGx?zhVF`*$DG@7BD>uzLGT zDY?7xi>cw?aOeG->4^GO`1sUsL0FFuz8l%GvRV>$(&S@LoZl$E+x!)3=g@h$)jeCQ zZ-Zj8A)Wt`S>m&3xekKd(Z32xiiKZ z#GV>funI}>9g1;c>XWyGPyQ zaq2dmQK#$jx)XPtR7{ z-ia(YdG(GQM$kz(&w*tmCj- zTIz^x+qAcPOxiN*lDm-=8%-!It_u1YtY&wo`MnhA%tMWprS_9JS!@mNw4fvg(0) z-7f@kBK~EB;?YCimb4oZi*PR`m8(4OZ-k-fXJAE(uQSBJuC<;BrjP8jsxChcppHWn z2R3QPn+j9e119T#Eds&+xh~|k+s()zq28~-QBhi#AF~~c$FMHg-O;ux`SE87%I<`> z`4e7te7aT>zW@gG__SxSPcE~)k3qGKT>Rj%{+aSkoHS@CNulTME}YQ`WpCGEFQ`nUPJIuEj-<)fGq5G-q-R>-= zY&D@fOa1*Ep)KEv=c*bIXTa^eith}rs{fiD$P(D^t>+P^eTJ7xoK=}$j%zgS2}7}P zE>!!pPYUY&WFFHPq#3bW>HwKwNuf(zii545W~D0;X8a58V%0xrK(St|drR#s=@)X4 z=f9#1o@_hgC+{|SP?;B>c~x~YarbOV^4O>~8ioQ|e1*E=5Ygup!DE}wM^EEY#(q3P-YzY=xu@!X z;huG1qy0g9Gh~xL2X{oEcJ(ATX0RYU6a+_qf3)sgk|t#$r)pNxl5hbPX!bV=v3J)k zB*cU0cTj|H<;|1<49_xD>R7{8hZdyj{^=Ji{P~0*Fz+evXFYe{nKbka6&3I+;eX9& z8C-1HY5+s-n{;m9^>Tp;a=$qaY7i!(N+`K_uAdUfD)MoBs4}sqj1sHl7u~mzl*rFx z3yovUjF+Fe>jUh;7afFIe)sc~cQ<+miSU{$?Exqv!I!>9jaRY`iq^22P%xF5sA7h3 z8I3yNot+VsDyC|0cq%jyW6ih4rYQ*|R3>Kq66mg$%0O~2$#!KYcRitox8}Emo<_); zJD4J5UTc@xRAku&#r_Zuo#1RSCmaEk6YdFuOQrAN9`8CvHjwOq8yG)L87dN&Jw>?( z>n@JVeZmxb=jG`1L{6!M%xYQ+g>T?A`(0+x+B1o|B=9T)dCH@i-iX=AoykGTp* z6Mmx_zh~v42J{>sA7WlOijk6JX}-|$t%wgZvG0=q#GN8o)kV-qQ(s1Y*}JK*f=k$S zT{dIj^Upx!7^xXnjkWmhYc_GH*1-$|@$CevDE*7ukcCEbsh(4(b%g6rz-i*xgsmAH zm^1Su+TT_Kq`2)dtYA71>}oVW+X$M1=~IuS6<9S$egX3Th#Inh57Moh1Pj0!*|I0) zXGnnz3kF0^I5Tg*_m~$0L^HR_+c&(#nL(fWM#CW2Az?UHb1M8T5eJHh0Q9C93a*qG zy8jwpV8`?(+6LZqHwo8d35*z<1suyQnEAft5cP~PAqAtH81S8raS^$B(?PEUzC?3Q zyVOVnkw8!DXRfaXjMjZz=~o6*0?#U8`otbSW1z!hTIU???Dx8|0tV+aLyXfgNA!v+J@RmF`G64AHb5*ouC zzN?p)yt?4y7p!JMdzjwhx8p~J#sGVHWBU~TM)T0!;tajs0`K7jpi2|s3g`8rbSTwR z&jN2avJ?}dbZJ(NTalQLL3A~%}S?1#yn)Ph5n{fFGC-&h& zq6F^RXxD+`=^ z@5#LHXp%m;OQ2qI@mK{e?PyatrOMr0vl%`OF70QLWpMH_Ed-nUbjruG5{?1n znv>N}6u=gjphF%mY`8U;16%GIm(oSVdyHH4aJL%Q`F*gCH=4Tt*{1hB-uQl-FP-E< zmHz`~+*>#V1IbLyx)WF0DLyuY2bxNZqfFmUFVjz&F-yQS<#(8BsOvk3&cT2Eqg@qM zb0iWCWH!MjxTh*+UJnDpX=ovmxPm!Gt%|t(nbF3?>=?jQekBlR4E9=z@3>=WxK(ha<03(ZAKB?ITJy2HptC;SCm^Sgm=$ptp>G~`9Jkr08e_=vv9C#nR-n|nN zTDk4eQUW0I%mDH=+qj+-WsuZHJnaKUWzPSDjr1SQZjKWJ4qTdoZ1=p0sFox4wcW7T8_+Ws|q%D8;_0$gvwhl#G*PQP?&OMPTq!uE6VYM_RBMKRHT*kMd;~mfo zpg>)B{?R5NAhZ2SY%K`*ov*y;UU+9}xku%I`N-`4o%W~#8Az$j(O3@K-3 z;GJe#gh~YcP%I4a4}uqhuITuGk5%>}FyXLH=Wq(b=Su;H)<)Z$+c#PgH*Hix;bo@W z3nN?cF`^slnW%)^q1k0T@Gr!P<|jgiG#HGd3sLC!l}S|27Db~(cW)dJ9PJ;YWY=p z0u^ki>4H>yGEu$jqCikIGk;mR}$knSE9k)l6nUv9IF%SS)dmS{K$iW)Am=9YRM zqe~IH=Ri?h2(xl7Zc;>_Tkm$#suZTevAdlfxXUD>L?tsWSMBkfjOK7g_ounGCJ;U5 zJM1urLOrn+a_PAx(iuLPcHOo!w@k9_zUMcx+a<)111e8jjwIK7#uglR8yVK zj~)@{#Ui`O)LCLXC@i0DHDhbpo8=j<()zaY&S3ae zFTZX%kEQ$${DbneW?!Vc(&Axd)@X1D-51*dX3wli({hXjcw@A!PnnmEQW9VSR8&BQ zl-S02)NYuoBDEkFGt7>-5;JhL57ksfTcj`i_3n|!UMn=RT6`T5w^XppIUbgm%k-1Q zi}X%NhI(`Kd5|z)SLXOQkAw88nzTKHh{wdokGK0lX&vcBZXeYEi*UbEbshTu{((-y z!6=DwFUDW5wa$>s= zx8kAhxSG6-Flc=4dpUklc?NU(R%pz%rI3lm8-kWVIE+iOl9{<+tvg&)099LOOn*#03v{gVvkF zsO`{DD`s902Q9sh^pnkGVP^7h(()~=FwMMeZyiNa^2)O= zvWld5s&6*-UTH&T^NZHBp~f$svn;qD_;A)}FzMiOKe8(M`2jyMV4De;aq*N2&obqu zeL!!CGj(4&ivErAXm6e^-tL@LGFHIqFZm*O`Lk)eT5rp1X<>8QX6wchYE5J1=TE4HO=MaL>>GLG*BS{r z&})@P@Ire5k(8g+E(eJY*8iqd{j>A=PnK_ zCkLOd5y3HSTItl~31%RPNNTHbYNwkcka11*nbY-n@**(g!ce|6&KVoXUht}q4)#cb~{Xr{7?`RI5_<9t6p=_+@ey0aImNj5^E_Ibn zll%RPt!SDaZyFS7T2&;!Ht}+ulP<$IEDZyY1|PYPAG>uQX3Qgy&1~+tjj@|I+X$!3 zL)kTPpbUnJ`&l~CzG`gasK*Es{6Wlfsw}8Bm4sswIAtMYPEQ^0!OTtlvj`{TJY@_x zb&(P5hAQPu2mJDt)vYp~UT?0EWOORCcIvN?L6|%0NJG%SL117Z#t4@lL-n;UnYqsp zGd6q5?|?u2C2E)dZMMknJUo+6HDCU-Ri*4`$@+X&j_(Ei`pn#3BDX*J0`Gg=1HKy1 zl2T`o5hj#RZpS8NgKGsWl2zWc)Gyzb9pjR14JA>`tUOB-B;*daecy47l<+t%^?$op zS8h38%$x0Wof1jzr$<}XII#~o_P1;D_3E_LDhTu=UpW~J-Ti|`J}%n)1o%u$026zr z@0mww7s^yd#wVoprGL;YZr^?|f@Edk>T^z$7JKoPW1jWHM7#$&*61f;i7LbELkPP| zfJ5We8o|qLf@R>{g4i#8JFBYyoad00ooAP7>%D~=ZWpgPCb_<_a(8rQoB=N!mm_5az1xTMAc=JW|@EV^Ea$<-^huZP*6AfdPEHC z-qpis)1OjUtYPx^6-Xqxj*t|>xTH(ggci{^ClEq!=B}1hcm@-sl$gkv_HM_{@O`|d ztNNT*xCcWzc|b|`jvpb3J&rx|v=^foqow!9njrShntN9%cS|j0%&Zix<@rL>MEs>U z9#699#$Wb01-wQJbZmv9tJ~kPC+Li(Vb@h+5v1>!PID^}VP|{(!C|J;Gd6lG^EgG+ zu$0p>C56gnd}j2uA~6rOKoqS!h!F7wl{RpOCITjiR22Ww;Qi0^O>#eF=+ND|z7+t+ z`uEYZQLCv2=v%0Sr3p>t@p6-UA*(XvOoVGySYe$xi5R-^t5W%61OdO0Uq2Urd=@i6 zq?h?K>nS!YB$P=Tp}8l4&lb$%UESV*%Tfkn)#(V}nRmqhDalJ&4g^?tE0oXkzFidW zV&FXcC+$;r9Y{IRt;4q6X%h#Y{=9oq0q z+HIJw!s$Q6-@^i$WYJ5GhoPpYng1#$lRHEYWz=hk{zkk6K@%Brjr*PSAG9W4ekvSh zqB!{;cc`8*<#!3QpCP6YLZA)L0IjU22+)&#%g63nfouU>bT}-y6{<==7&zxENiE=_ zY~#Dowa%*hTHlE1Caf&qml=|$d8K#u7mod`kY91-4_bg5k=;L?OM3pK9J~gWOAG>1 z3}{k+=`NuKu4vU@$8;6@B?<`kZWd8MYo1qrnJvfeTWfLe5zlj*A-(^XO!;(pU0q}N z({vTK+CQSu9__vAD%%hm_{Vwb9EZtqC3K0kRd@Uw?gv4=hq{cQt!I0tkfht!L) z=tUI0qh0Z{kNO3T)eUe4^==uk{6v@Et{4L>8@&7&!9T3o=R6nrmk9|b=n;Owb;LH| z7I3WudR~83o>>F0!^t8+dEpHR{Y+p_2QAY~hBynl86iII6nKQa+og^>DbQrr+Po!O zme?x&()|=w&1P)NJ}I3I-KVP`XU@MOsXqJjOTt(M&>UYn9yk)Y&0dig8*7~GIp|xq zHbGssgZb&hsx&-Bvn}Ypg~hr5n21=ZzBeRLYciOC={qDNfOZ^3s|L2q|G0HaP;--Y zG?TW)Z7e6<={i`6t4hp4+=bd(Fy+DV9&gHOdE<)-WqB@r24x9t8STu>{uO~xBZwIY ztA0M@;k0tHYNYv2#f%GUl))9!n(Fh*UIxvioGw*>-@Lx}Da_d(K!`7d6g9w~3u(x*N2hUvGpW-^D+}}eD zqxrUMI3pBJWGb4?w?V_65%+OD|slG-#dj&HKu1ywGQ%IfWH~(d{30pW{=< zX#w1kA(4oll2TQyNl6HY9Ug0KWRQy!>ibocK-Bat2Rvo#+uc!@l*0iN5sd~SNdf8* zO9Y9vx?1CF_oPA@TRn^r3J+<1_@0SV99uD9S=>M#bj}zy7zv+%T^R-T!2`{tEJyFg zI$Qywzq;&qlDdbn^<%Hm0Vp1)du{wApd5>4YJJ&e>XVl;&>wKoyH4%5UaQGXx_Tz`vt<&oiaP zuMsr>)NI~G+-4NBPM?B}Aqg26l^hLOo7%z*FG4+D<{S~NwgcAG{OxMr$DQB1f?@<# z8I>e6=wf=QT}Mll&o&@Pz<;QBMt()3awg-s7$FO$j?`b%TiPYy_|)nhB|owxukS13Q(T|xwiI?#zbD+r|ifl&@g9v z#9~}t;_bCT({a4T>+nP2A?jpRu;&gki3Lgd@n->Iv;IND;fLwV(l>ayuun*O*H28J zu3Jk}^sHWX_P>r#p%#b}m=z%@|6J0V#%dtoPiFd>0{#$E{6FvR;oWZB2MH?i)jvXb zNX{mm2uUIkkJ5t*$T0S4!xM0-hDJQy>4DpNJk?Gm=m9xEA8)L!RC*~`<@zVV1bYNcKZ3;(PUeje;(WA=1M4`Js11Be_-2j>xM{O z(Lt*oEA9dcIc@(GayAOiRqHohKVt}l0mJP6L!%a7|Kar%jd5TpwhD*6>RAsJ|72PQ z3y|qgqkt;oQrTpwk8JkU@WPb-je1zJp7U_g_Yu@3ioyvn*slElK0`4)(rReNF(YGc-d)?v7cpH4fmO@9;s4yPmuMb7>FlgaSj63uOx*_=ntq zoc!D;H4b>+{-KkdMW^PZPwemF-M*eTUV#?uA;zHh!ZfddkwjUCub%{<->6>iPU0O6O}aIL`ISanwo#0I2XDa9)ak z#uEscU|wVRY5ep75;6bN0RWn-&ezO!lmE{*dt{_`IdR*R&KS*0VR|0a8A;UcVbrWu zps@?z9+&-{lD75_4Q>`YGg6jxwFwK=<5Bs|`QO5%wjvwpLw5V%1R*Wd{_JLMgdgdH z27?|~1`+?>6SjYC+_N<<__WBT%Vj&-eEK6T8=G^iNM7iC4a>~&y{-q4)SpdG^c-Z6 zd`XojuW03i?QjXqTnlR+Oo84a_2y1nC7Q2L&7`$%+1-13-&kM#WD`CZFGdf;q&CE| z8XJ)j*ynm8T+aZZvr0XFzUtcKv&0rX(^k848sXHZzMrL}X+6fXhft*!uw-Ck?=v=_ z$FPHc;&Z>4rSMj@z)TXo+6@)|R*u2_=F9a;lr_1iN;U&O&XJC0hisDA5&4Ezn=XTu zu{#YxPa~C%J2qC>?MM^9Gs9v|!U6l(MkQn_qR-}TPx)L|TnB4pfb_V2uu=*Rb@WBK zv@SkRFFh32vrRkWOHobE9;4tKfEG9;zAV@7A^@f634Mc;Uw3a%s<+eum%CHFd~&?% zJ%mkT)YfE$h)bWsLay!HBG)1|x}EaXh%oUK4(uop-rbQhzAMKsbtz4tw$tmTT`j%< zcgS*aAL#A}66pji?J>98qZg$N^|Vo0na-RsEvHz?dy#X=dRckCl}RHnE;bc5SmBOt z9r~W;bi?fg5J+=Jz z6CEl4l1|}LVDv=YT5Woj@CU8-niTK$M`unf?G&%6Yf{quN{g;ei(g1j-UjY zhA0#0l-oPF|LUGl`iS1OuypbvsVt2c`uTgMVs~$0da+i!p}$nicI+w!`A%m9Jc;#w zIv$><#1Zu#tf!sOef^5eLmC=Ib250&ei|WWyihdw>fC%T(>IDUDy}Y1AUxXD7*$eb zQBmX0&*8J2GqJq|yj$XOEh|eMafu7cE%Fl|nQgPS)Bh0W=ZDfY7Wo!N@@d*}54hq% zX-&o@;3(6K9a7xt?vms^@-N}UcH~u4%n#1q{TbB{ zy5*P6)wOF3_e4)BZL!Baj+32AgjnQx6UxR>nD>}e5JeSPm}@bU37~?Z&^vYW0q$Vq z1x(3%@ovp1tTS6rmaT77;3ltVw2iEo@}MU+jxf`n>C{|pntlZqJuI5ubykPdK;z6} z_ar|x>AN!T49me=o9FU;)RT$ikG@aI6j!5Nzw2>fA~WBF&8_su(3~PRtl^Gk9fTgR zBR&+4j_uhWG_%3;BxO0)+}9NoCF|Cf&m_+_9>t%%y6?}_#0y&+53n$e2OtZ>iG&pq zW?rr}@dw>{$X|XCkNooq_dz`+Dvo<49ym@~sqcZJ-F~N;OOSQzWgk_^1ofAso6aO! z?TC*+;G;5c)oU}h^hl4Sk(%(wHpfoURAb9Zqw(wg+iCKUQUXW{mm;XjbY_QuFR%`q z?FK&sbsToFy5%I#h=PZ`5MBb`qs05ZY%o7g$kST}Z99rTx|bk-(4v`|kRq)muE(G= z)$wTo?nu)dLQe5#I)Y5BGXx(uAc04wTf%hRzM%i@F;vs9zo!@Mc}8b8NfW6 zOoh2#rv(#Cf8{lMXHt+1sRS;`ust&N2FTc zN9?|*`8q@{XxV`_Y<9Bq|ys*ItzDn14I=uW=!z684a7l z(+H{zJ;nV}XYVGY+eNSC%kS%3!rxC(U#;#haNqO7?sXB;%Y=yY%56^nJ}*_K8h%pf z+PKjTcT}qn(DM+>8-k8(ey(I`&bN5+obB0f$#vr&A&O=czCR&M54P(6{pQg7^v^ek z!FZer}j}HW9cgp@3 zYhN7}RoCuK49w6dh{OP+fDS20H>1)LD$*d`ok}w(N;fDuO1HG6C^3R`cPbqs4Z`y+ z^m*R%p7{Pa*LD7J_G~X^X0LUxz1Mx;zaY^=iKkD=ycmo8(u@Jh_f6b?;p~Z;-MvXI z%7*D|&`NK9U;6wobaU_tNru%B!}Y3xCONUx@)xx!3|Vn}tyjYjO%~8?3+7+9FWtJr zeD%uu*BrU>QLSgC34UsCEK{J-!)}#{=5df8Nw23R1)jAHQ$%2|epuKIXolmDMEusF zBd`|i_{KVeSpvIZHk-ZR`Y#nTWsnDdXv-}8feu#4n^S5Bk@ofa9W1QXA$9VzC~Mg# zj~_f_38kcql8j7)@oBdwH^#igqvyMZ7ya3}$D@+Wv;Xb;LEl4fN?rsdjIzqlfr8;L z95gvAAnvkooQb~sB@N(U_bvhN#TxA$%+r*Wq2JEPz_8P$9!Jdxu_xG>NXL_wqPi0( zKzV-dgmB6U)%C*ieM?M)kNW)xlEXg4rkZ#(65#EKw%iSbeh%uTIY@D-`Hdxv!3ip8 zUF~L?0$4&_hY`OW(6c1t@OvROa)Eum|F;?Rh}ubhP{-GX-&|0F>&LZz%SUKPx|0p$ zu7LoW*9ogA1%c_h^taClN4###RSq2fjJ}ez{xG)u+oOk#FKS2PP1D8BRaIc@R$M2i zQkKqHMQ-w{w!pWzPThETUyy5T7aw;NjVIFFN2y%$6mLxfcUJQ>HmDfvE6u-o=ZpGN z#yxGl91n(sfqhyk$XeKM?^5fZ0jVhY`0&7Ez;XvQ5u~L+m_;vUn(U4#xz+G|X7XOp zsp8CYvThGCVz5Q_(o9XJEMeXm{KganmG>ZYszW3@dwuE2p&!fL5NdShrWsVuWFtYkat$MLH;i$cYd=I- zF>P&T>nTgx;?M<|e9E$=tuG1uS=Mt2tA!t?zX1)u6d6yCFM+Wepqi5@a>h6|wvh0o zlCS&i#5q3xMKu(Oq!mqrneM0o{*p6P{Hdz
  • Ta*RZKZof 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 literal 0 HcmV?d00001 diff --git a/_projects/multiplayer/levels/GameLevelMultiplayer.js b/_projects/multiplayer/levels/GameLevelMultiplayer.js new file mode 100644 index 000000000..16bfc0051 --- /dev/null +++ b/_projects/multiplayer/levels/GameLevelMultiplayer.js @@ -0,0 +1,190 @@ +// Adventure Game Custom Level +// Exported from GameBuilder on 2026-03-05T17:15:10.295Z +// How to use this file: +// 1) Save as assets/js/adventureGame/GameLevelTimmy.js in your repo. +// 2) Reference it in your runner or level selector. Examples: +// import GameLevelPlanets from '/assets/js/GameEnginev1/GameLevelPlanets.js'; +// import GameLevelTimmy from '/assets/js/adventureGame/GameLevelTimmy.js'; +// export const gameLevelClasses = [GameLevelPlanets, GameLevelTimmy]; +// // or pass it directly to your GameControl as the only level. +// 3) Ensure images exist and paths resolve via 'path' provided by the engine. +// 4) You can add more objects to this.classes inside the constructor. + +import GameEnvBackground from '/assets/js/GameEnginev1/essentials/GameEnvBackground.js'; +import Player from '/assets/js/GameEnginev1/essentials/Player.js'; +import GameObject from '/assets/js/GameEnginev1.1/essentials/GameObject.js'; + +class RemotePlayerVisualizer extends GameObject { + constructor(data = null, gameEnv = null) { + super(gameEnv); + this.remotePlayersRef = data?.remotePlayers || {}; + this.SCALE_FACTOR = 3.5; + this.frameWidth = 569 / 13; // sprite sheet width / columns + this.frameHeight = 36; // sprite sheet height (1 row) + this.spriteImage = null; + } + + update() { + // Load the sprite image once on first call + if (!this.spriteImage) { + const img = new Image(); + img.src = "/images/gamebuilder/sprites/kirby.png"; + this.spriteImage = img; + } + this.draw(); + } + + draw() { + // Don't draw until the image is loaded + if (!this.spriteImage?.complete) return; + + const canvas = this.gameEnv?.canvas; + if (!canvas) return; + const ctx = canvas.getContext("2d"); + + const drawWidth = this.frameWidth * this.SCALE_FACTOR; + const drawHeight = this.frameHeight * this.SCALE_FACTOR; + + for (const sid in this.remotePlayersRef) { + const p = this.remotePlayersRef[sid]; + console.log("drawing remote player at:", p.x, p.y); + ctx.drawImage( + this.spriteImage, + 0, 0, + this.frameWidth, + this.frameHeight, + p.x, p.y, + drawWidth, + drawHeight + ); + } + } + + resize() {} + destroy() { this.spriteImage = null; } +} + +class NetworkSynchronizer extends GameObject { + constructor(data = null, gameEnv = null) { + super(gameEnv); + this.socket = data?.socket; + this.playerInstance = null; + this.lastEmit = 0; + this.emitDelay = 50; + } + + update() { + if (!this.playerInstance) { + this.playerInstance = this.gameEnv?.gameObjects?.find( + obj => obj instanceof Player + ); + } + + if (!this.playerInstance || !this.socket) return; + + const now = Date.now(); + if (now - this.lastEmit < this.emitDelay) return; + + this.socket.emit("move", { + x: this.playerInstance.position?.x ?? this.playerInstance.x, + y: this.playerInstance.position?.y ?? this.playerInstance.y + }); + } + + draw() {} + resize() {} + destroy() {} +} +class GameLevelMultiplayer { + constructor(gameEnv) { + const path = gameEnv.path; + const width = gameEnv.innerWidth; + const height = gameEnv.innerHeight; + + const socket = io("ws://localhost:8590", { transports: ["websocket"] }); + + let myId = null; + const remotePlayers = {}; + + socket.on("connect", () => { + console.log("connected:", socket.id); + myId = socket.id; + }); + + const bgData = { + name: "custom_bg", + src: path + "/_projects/multiplayer/images/blackandwhite.jpg", + pixels: { height: 720, width: 1280 } + }; + + const playerData = { + id: "playerData", + src: path + "/images/gamebuilder/sprites/kirby.png", + SCALE_FACTOR: 3.5, + STEP_FACTOR: 1000, + ANIMATION_RATE: 50, + INIT_POSITION: { x: 700, y: 300 }, + pixels: { height: 36, width: 569 }, + orientation: { rows: 1, columns: 13 }, + down: { row: 0, start: 0, columns: 3 }, + downRight: { row: 0, start: 0, columns: 3, rotate: Math.PI / 16 }, + downLeft: { row: 0, start: 0, columns: 3, rotate: -Math.PI / 16 }, + left: { row: 0, start: 0, columns: 3 }, + right: { row: 0, start: 0, columns: 3 }, + up: { row: 0, start: 0, columns: 3 }, + upLeft: { row: 0, start: 0, columns: 3, rotate: Math.PI / 16 }, + upRight: { row: 0, start: 0, columns: 3, rotate: -Math.PI / 16 }, + hitbox: { widthPercentage: 0, heightPercentage: 0 }, + keypress: { up: 38, left: 37, down: 40, right: 39 } + }; + + socket.on("player_update", (data) => { + if (!data?.players) return; + + const players = data.players; + + for (const sid in players) { + if (sid === myId) continue; + + if (!remotePlayers[sid]) { + remotePlayers[sid] = { + x: players[sid].x, + y: players[sid].y, + color: this.getRandomColor(), + }; + } else { + remotePlayers[sid].x = players[sid].x; + remotePlayers[sid].y = players[sid].y; + } + } + + for (const sid in remotePlayers) { + if (!players[sid]) { + delete remotePlayers[sid]; + } + } + }); + socket.on("player_left", (sid) => { + delete remotePlayers[sid]; + }); + socket.on("disconnect", () => { + console.log("disconnected from server"); + }); + + this.classes = [ + { class: GameEnvBackground, data: bgData }, + { class: Player, data: playerData }, + { class: NetworkSynchronizer, data: { socket: socket } }, + { class: RemotePlayerVisualizer, data: { remotePlayers: remotePlayers } } + ]; + } + getRandomColor() { + const colors = [ + '#FF6B6B', '#4ECDC4', '#45B7D1', '#FFA07A', + '#98D8C8', '#F7DC6F', '#BB8FCE', '#85C1E2' + ]; + return colors[Math.floor(Math.random() * colors.length)]; +} +} + +export default GameLevelMultiplayer; \ No newline at end of file From 9cf249e7adef37680b5241d0c367e679edd60a5e Mon Sep 17 00:00:00 2001 From: Salma Date: Mon, 27 Apr 2026 07:58:22 -0700 Subject: [PATCH 2/6] importing lessons (sprinitng snails) --- _projects/2026-04-12-TransBlog.ipynb | 169 +++++++++++++++++++++++++++ _projects/2026-04-22-multiblog.md | 113 ++++++++++++++++++ 2 files changed, 282 insertions(+) create mode 100644 _projects/2026-04-12-TransBlog.ipynb create mode 100644 _projects/2026-04-22-multiblog.md diff --git a/_projects/2026-04-12-TransBlog.ipynb b/_projects/2026-04-12-TransBlog.ipynb new file mode 100644 index 000000000..b56e4d4ee --- /dev/null +++ b/_projects/2026-04-12-TransBlog.ipynb @@ -0,0 +1,169 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "fc5fb345", + "metadata": {}, + "source": [ + "---\n", + "layout: post\n", + "codemirror: true\n", + "title: Sprint 5 Transition Teaching Lesson\n", + "permalink: /sprintingsnails/transitions\n", + "author: Sophie Haas\n", + "---" + ] + }, + { + "cell_type": "markdown", + "id": "ad84857b", + "metadata": {}, + "source": [ + "Have you ever wanted to know how to add a transition screen to your game? Maybe when the game ends, you want to keep the player connected to the experience by flashing a massive:\n", + "\n", + "

    \n", + "G A M E   O V E R\n", + "

    \n", + "\n", + "...or build anticipation for the next challenge with a bold:\n", + "\n", + "

    \n", + "L E V E L   1\n", + "

    \n", + "\n", + "Static games can feel \"stiff.\" Transition screens act as the theater curtain for your code—they hide the background logic, signal a change in state, and provide crucial feedback to the player.\n", + "\n", + "In this blog, we’re going to demonstrate how to use:\n", + "\n", + "Dynamic DOM Injection: Building UI elements on the fly.\n", + "\n", + "CSS Keyframe Animations: Adding movement and \"pulse\" to your screens.\n", + "\n", + "Logic Triggers: Timing your transitions to match game events." + ] + }, + { + "cell_type": "markdown", + "id": "e41d1cde", + "metadata": {}, + "source": [ + "
    \n", + "\n", + "# Understanding UI Transitions & Overlays\n", + "\n", + "A transition screen is a **UI Overlay** that sits on a higher \"layer\" than your game world. In game development, we call this the **HUD (Heads-Up Display)** or **UI Layer**.\n", + "\n", + "---\n", + "\n", + "### The Primary Jobs of a Transition Screen\n", + "* **State Signaling:** Letting the player know exactly what happened—whether they won, lost, or paused.\n", + "* **Input Blocking:** Creating a \"logical wall\" that prevents the player from moving or interacting with the game world while the screen is visible.\n", + "* **Scene Management:** Providing the \"Escape Hatch\"—buttons to restart the level or move to the next stage.\n", + "\n", + "---\n", + "\n", + "# How it Works in Your Code\n", + "Your implementation uses a **\"CSS-in-JS\"** approach. Since we are working in a Notebook environment, we can't easily jump between different HTML files, so we manipulate the **DOM** (the webpage structure) directly.\n", + "\n", + "### The \"Ghost\" Element\n", + "In your constructor, you create the `lossOverlay`. Crucially, you set `display: none`. This makes it a **ghost element**—it exists in the code’s memory and the page’s structure, but the player cannot see or touch it yet.\n", + "\n", + "> **Code Insight:**\n", + "> ```javascript\n", + "> lossOverlay.style.cssText = \"display:none; position:fixed; width:100%; height:100%; z-index:20000;\";\n", + "> ```\n", + "\n", + "---\n", + "\n", + "# The Trigger (The \"Watcher\")\n", + "To make the screen appear, you need a **\"Watcher.\"** In your code, this is the `setInterval` timer that constantly evaluates the state of the game.\n", + "\n", + "| Step | Component | Logic |\n", + "| :--- | :--- | :--- |\n", + "| **1** | **The Condition** | The Watcher checks: `window.timeLeft <= 0` |\n", + "| **2** | **The Action** | The Watcher flips the CSS from `display: none` to `display: flex`. |\n", + "| **3** | **The Result** | The screen \"appears\" instantly, covering the game. |\n", + "\n", + "---\n", + "\n", + "# Key Concepts in the \"Kirby Maze\"\n", + "The implementation uses three advanced techniques to make the transition feel professional:\n", + "\"Image\"\n", + "\"Image\"\n", + "### 1. Z-Indexing\n", + "By setting `z-index: 20000`, we ensure the Game Over screen stays above Kirby, the walls, and the background. It is mathematically the \"top-most\" item on the page.\n", + "\n", + "### 2. Input Gating\n", + "We use a `window.isPaused` variable as a \"gatekeeper.\" Even if the player mashes the **WASD** keys during the Game Over screen, the code checks this variable and refuses to move the character.\n", + "\n", + "### 3. Visual Polish\n", + "We injected a `