From 9c8f7b3e609317d957d695f98d5bd701a789193e Mon Sep 17 00:00:00 2001 From: Admin Date: Sun, 20 Sep 2026 08:36:27 +0000 Subject: [PATCH] Mirror airship-phaser files --- README.md | 42 + index.html | 234 +++ nginx.conf | 15 + package.json | 19 + scripts/materialize-controller-assets.mjs | 19 + src/assets/airships.svg | 51 + src/assets/cannonball.png | Bin 0 -> 21558 bytes src/assets/controller/cannon-action.js | 1 + src/assets/controller/cannon-roundel-0.js | 1 + src/assets/controller/cannon-roundel-1.js | 1 + src/assets/controller/cannon-roundel-2.js | 1 + src/assets/controller/cannon-roundel-3.js | 1 + src/assets/controller/cannon-roundel.js | 1 + src/assets/controller/enemy-health-hires-0.js | 1 + src/assets/controller/enemy-health-hires-1.js | 1 + src/assets/controller/enemy-health-hires-2.js | 1 + src/assets/controller/enemy-health-v2-0.js | 1 + src/assets/controller/enemy-health-v2-1.js | 1 + src/assets/controller/enemy-health-v2-2.js | 1 + src/assets/controller/enemy-health-v2-3.js | 1 + src/assets/controller/enemy-health-v2-4.js | 1 + src/assets/controller/enemy-health.js | 10 + src/assets/controller/helm-action.js | 1 + src/assets/controller/helm-frame.js | 1 + src/assets/controller/helm-knob.js | 1 + src/assets/controller/helm-sheet-0.js | 1 + src/assets/controller/left-status.js | 1 + src/assets/controller/player-health-0.js | 1 + .../controller/player-health-frame-00.js | 1 + .../controller/player-health-frame-01.js | 1 + .../controller/player-health-frame-02.js | 1 + .../controller/player-health-frame-03.js | 1 + .../controller/player-health-frame-v2-00.js | 1 + .../controller/player-health-frame-v2-02.js | 1 + .../controller/player-health-frame-v2-03.js | 1 + .../controller/player-health-fresh-sheet.png | Bin 0 -> 732314 bytes .../controller/player-health-hires-0.js | 1 + .../controller/player-health-hires65-00.js | 1 + .../controller/player-health-hires65-01.js | 1 + .../controller/player-health-hires65-02.js | 1 + .../controller/player-health-hires65-03.js | 1 + .../controller/player-health-hq-frame.js | 1 + src/assets/controller/player-health-v2-1.js | 1 + src/assets/controller/player-health-v2-2.js | 1 + src/assets/controller/player-health-v2-3.js | 1 + src/assets/controller/player-health-v2-4.js | 1 + src/assets/controller/player-health-v4-0.js | 1 + src/assets/controller/player-health-v4-1.js | 1 + src/assets/controller/player-health-v4-2.js | 1 + src/assets/controller/player-health-v4-3.js | 1 + src/assets/controller/player-health.js | 6 + src/assets/controller/radar-panel.js | 1 + src/assets/controller/right-controls.js | 1 + src/assets/controller/top-hud-0.js | 1 + src/assets/controller/top-hud-1.js | 1 + src/assets/controller/top-hud-2.js | 1 + src/assets/controller/top-hud-v2-0.js | 1 + src/assets/controller/top-hud-v2-1.js | 1 + src/assets/controller/top-hud-v3-0.js | 1 + src/assets/controller/top-hud-v4-0.js | 1 + src/assets/controller/top-hud-v4-1.js | 1 + src/assets/controller/top-hud-v5-0.js | 1 + src/assets/controller/top-hud-v5-1.js | 1 + src/assets/controller/top-hud-v5-2.js | 1 + src/assets/controller/top-hud-v5-3.js | 1 + src/assets/controller/top-hud.js | 6 + src/assets/explosions.svg | 56 + src/assets/player-airship-4frame.png | Bin 0 -> 217443 bytes src/assets/steampunk-hud-compact/p0.js | 1 + src/assets/steampunk-hud-compact/p1.js | 1 + src/assets/steampunk-hud-compact/p2.js | 1 + src/assets/steampunk-hud-compact/p2a.js | 1 + src/assets/steampunk-hud-compact/p2b.js | 1 + src/assets/steampunk-hud-compact/p3.js | 1 + src/assets/steampunk-hud-compact/p4.js | 1 + src/assets/steampunk-hud-compact/p5.js | 1 + src/assets/steampunk-hud-compact/p6.js | 1 + src/assets/steampunk-hud-mobile-v2.js | 12 + src/assets/steampunk-hud-mobile.js | 1 + src/assets/steampunk-hud-mobile/chunk-00.js | 1 + src/assets/steampunk-hud-mobile/chunk-01.js | 1 + src/assets/steampunk-hud-mobile/chunk-02.js | 1 + src/assets/steampunk-hud-mobile/chunk-02a.js | 1 + src/assets/steampunk-hud-mobile/chunk-s0.js | 1 + src/assets/steampunk-hud/chunk-00.js | 1 + src/assets/steampunk-hud/chunk-01.js | 1 + src/diagnostics.js | 89 ++ src/environment-physics.js | 119 ++ src/game-entry.js | 2 + src/game-logic.js | 40 + src/game-v2.js | 409 +++++ src/game-v3.js | 453 ++++++ src/game-v4.js | 1350 +++++++++++++++++ src/main.js | 216 +++ src/mobile-hud.js | 761 ++++++++++ src/pirate-ai.js | 159 ++ src/progression/modules.js | 125 ++ src/progression/ship-loadout.js | 153 ++ src/style.css | 15 + src/world/seeded-random.js | 22 + 100 files changed, 4455 insertions(+) create mode 100644 README.md create mode 100644 index.html create mode 100644 nginx.conf create mode 100644 package.json create mode 100644 scripts/materialize-controller-assets.mjs create mode 100644 src/assets/airships.svg create mode 100644 src/assets/cannonball.png create mode 100644 src/assets/controller/cannon-action.js create mode 100644 src/assets/controller/cannon-roundel-0.js create mode 100644 src/assets/controller/cannon-roundel-1.js create mode 100644 src/assets/controller/cannon-roundel-2.js create mode 100644 src/assets/controller/cannon-roundel-3.js create mode 100644 src/assets/controller/cannon-roundel.js create mode 100644 src/assets/controller/enemy-health-hires-0.js create mode 100644 src/assets/controller/enemy-health-hires-1.js create mode 100644 src/assets/controller/enemy-health-hires-2.js create mode 100644 src/assets/controller/enemy-health-v2-0.js create mode 100644 src/assets/controller/enemy-health-v2-1.js create mode 100644 src/assets/controller/enemy-health-v2-2.js create mode 100644 src/assets/controller/enemy-health-v2-3.js create mode 100644 src/assets/controller/enemy-health-v2-4.js create mode 100644 src/assets/controller/enemy-health.js create mode 100644 src/assets/controller/helm-action.js create mode 100644 src/assets/controller/helm-frame.js create mode 100644 src/assets/controller/helm-knob.js create mode 100644 src/assets/controller/helm-sheet-0.js create mode 100644 src/assets/controller/left-status.js create mode 100644 src/assets/controller/player-health-0.js create mode 100644 src/assets/controller/player-health-frame-00.js create mode 100644 src/assets/controller/player-health-frame-01.js create mode 100644 src/assets/controller/player-health-frame-02.js create mode 100644 src/assets/controller/player-health-frame-03.js create mode 100644 src/assets/controller/player-health-frame-v2-00.js create mode 100644 src/assets/controller/player-health-frame-v2-02.js create mode 100644 src/assets/controller/player-health-frame-v2-03.js create mode 100644 src/assets/controller/player-health-fresh-sheet.png create mode 100644 src/assets/controller/player-health-hires-0.js create mode 100644 src/assets/controller/player-health-hires65-00.js create mode 100644 src/assets/controller/player-health-hires65-01.js create mode 100644 src/assets/controller/player-health-hires65-02.js create mode 100644 src/assets/controller/player-health-hires65-03.js create mode 100644 src/assets/controller/player-health-hq-frame.js create mode 100644 src/assets/controller/player-health-v2-1.js create mode 100644 src/assets/controller/player-health-v2-2.js create mode 100644 src/assets/controller/player-health-v2-3.js create mode 100644 src/assets/controller/player-health-v2-4.js create mode 100644 src/assets/controller/player-health-v4-0.js create mode 100644 src/assets/controller/player-health-v4-1.js create mode 100644 src/assets/controller/player-health-v4-2.js create mode 100644 src/assets/controller/player-health-v4-3.js create mode 100644 src/assets/controller/player-health.js create mode 100644 src/assets/controller/radar-panel.js create mode 100644 src/assets/controller/right-controls.js create mode 100644 src/assets/controller/top-hud-0.js create mode 100644 src/assets/controller/top-hud-1.js create mode 100644 src/assets/controller/top-hud-2.js create mode 100644 src/assets/controller/top-hud-v2-0.js create mode 100644 src/assets/controller/top-hud-v2-1.js create mode 100644 src/assets/controller/top-hud-v3-0.js create mode 100644 src/assets/controller/top-hud-v4-0.js create mode 100644 src/assets/controller/top-hud-v4-1.js create mode 100644 src/assets/controller/top-hud-v5-0.js create mode 100644 src/assets/controller/top-hud-v5-1.js create mode 100644 src/assets/controller/top-hud-v5-2.js create mode 100644 src/assets/controller/top-hud-v5-3.js create mode 100644 src/assets/controller/top-hud.js create mode 100644 src/assets/explosions.svg create mode 100644 src/assets/player-airship-4frame.png create mode 100644 src/assets/steampunk-hud-compact/p0.js create mode 100644 src/assets/steampunk-hud-compact/p1.js create mode 100644 src/assets/steampunk-hud-compact/p2.js create mode 100644 src/assets/steampunk-hud-compact/p2a.js create mode 100644 src/assets/steampunk-hud-compact/p2b.js create mode 100644 src/assets/steampunk-hud-compact/p3.js create mode 100644 src/assets/steampunk-hud-compact/p4.js create mode 100644 src/assets/steampunk-hud-compact/p5.js create mode 100644 src/assets/steampunk-hud-compact/p6.js create mode 100644 src/assets/steampunk-hud-mobile-v2.js create mode 100644 src/assets/steampunk-hud-mobile.js create mode 100644 src/assets/steampunk-hud-mobile/chunk-00.js create mode 100644 src/assets/steampunk-hud-mobile/chunk-01.js create mode 100644 src/assets/steampunk-hud-mobile/chunk-02.js create mode 100644 src/assets/steampunk-hud-mobile/chunk-02a.js create mode 100644 src/assets/steampunk-hud-mobile/chunk-s0.js create mode 100644 src/assets/steampunk-hud/chunk-00.js create mode 100644 src/assets/steampunk-hud/chunk-01.js create mode 100644 src/diagnostics.js create mode 100644 src/environment-physics.js create mode 100644 src/game-entry.js create mode 100644 src/game-logic.js create mode 100644 src/game-v2.js create mode 100644 src/game-v3.js create mode 100644 src/game-v4.js create mode 100644 src/main.js create mode 100644 src/mobile-hud.js create mode 100644 src/pirate-ai.js create mode 100644 src/progression/modules.js create mode 100644 src/progression/ship-loadout.js create mode 100644 src/style.css create mode 100644 src/world/seeded-random.js diff --git a/README.md b/README.md new file mode 100644 index 0000000..eabe825 --- /dev/null +++ b/README.md @@ -0,0 +1,42 @@ +# airship-phaser + +Top-down Phaser.js airship combat prototype. + +## Development + +```bash +npm install +npm test +npm run dev +``` + +Production builds run the regression suite before Vite: + +```bash +npm run build +``` + +## Runtime diagnostics + +The browser keeps the latest 300 structured events in memory. + +In Chrome DevTools: + +```js +airshipDebug.getLogs() +airshipDebug.snapshot() +airshipDebug.clearLogs() +``` + +Useful events include: + +- `scene:init`, `scene:create`, `scene:heartbeat`, `scene:shutdown` +- `combat:broadside-fired` +- `combat:player-hit-queued` +- `combat:player-hit-processed` +- `combat:pirate-hit` +- `game:finish` +- `hud:image-error`, `hud:helm-frame-error`, `hud:helm-knob-error` +- `runtime:error`, `runtime:unhandled-rejection` + +If gameplay appears frozen, inspect `airshipDebug.snapshot()` first, then the tail of `airshipDebug.getLogs()`. diff --git a/index.html b/index.html new file mode 100644 index 0000000..8002bca --- /dev/null +++ b/index.html @@ -0,0 +1,234 @@ + + + + + + + Arrowstack Airship + + + +
+
+
+ +
+
+
+
+ + + +
+ + + + + diff --git a/nginx.conf b/nginx.conf new file mode 100644 index 0000000..da8c937 --- /dev/null +++ b/nginx.conf @@ -0,0 +1,15 @@ +server { + listen 80; + server_name _; + root /usr/share/nginx/html; + index index.html; + + location / { + try_files $uri $uri/ /index.html; + } + + location = /health { + add_header Content-Type text/plain; + return 200 'ok'; + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..2ede4d0 --- /dev/null +++ b/package.json @@ -0,0 +1,19 @@ +{ + "name": "airship-phaser", + "version": "0.1.0", + "private": true, + "type": "module", + "scripts": { + "dev": "vite --host 0.0.0.0", + "test": "node --test tests/*.test.mjs", + "test:watch": "node --test --watch tests/*.test.mjs", + "build": "npm test && node scripts/materialize-controller-assets.mjs && vite build", + "preview": "vite preview --host 0.0.0.0" + }, + "dependencies": { + "phaser": "^3.90.0" + }, + "devDependencies": { + "vite": "^7.0.0" + } +} diff --git a/scripts/materialize-controller-assets.mjs b/scripts/materialize-controller-assets.mjs new file mode 100644 index 0000000..6c2fa7d --- /dev/null +++ b/scripts/materialize-controller-assets.mjs @@ -0,0 +1,19 @@ +import { mkdir, writeFile } from 'node:fs/promises'; +import topHudData from '../src/assets/controller/top-hud.js'; +import helmData from '../src/assets/controller/helm-action.js'; +import cannonBase64 from '../src/assets/controller/cannon-roundel.js'; + +const outDir = new URL('../public/assets/controller/', import.meta.url); +await mkdir(outDir, { recursive: true }); + +const writeDataUrl = async (name, dataUrl) => { + const match = /^data:[^;]+;base64,(.+)$/.exec(dataUrl); + if (!match) throw new Error(`Invalid data URL for ${name}`); + await writeFile(new URL(name, outDir), Buffer.from(match[1], 'base64')); +}; + +await writeDataUrl('top-hud.webp', topHudData); +await writeDataUrl('helm-sheet.webp', helmData); +await writeFile(new URL('cannon-roundel.jpg', outDir), Buffer.from(cannonBase64, 'base64')); + +console.log('Materialized controller assets'); diff --git a/src/assets/airships.svg b/src/assets/airships.svg new file mode 100644 index 0000000..f6196ce --- /dev/null +++ b/src/assets/airships.svg @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/cannonball.png b/src/assets/cannonball.png new file mode 100644 index 0000000000000000000000000000000000000000..f6a4d4f49441a12a72b29f7432e496ca0910caec GIT binary patch literal 21558 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 q-E;TcJ$KLDbNAdmch8sk`Tqh()o + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/player-airship-4frame.png b/src/assets/player-airship-4frame.png new file mode 100644 index 0000000000000000000000000000000000000000..6a2c4925320f4b28fd082a95b6f0b431128eb7f9 GIT binary patch literal 217443 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�NOW7~kFnX_cEWUA|F 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¥CK~I@wRw%1#G17>uj1Ax?+Vd!$IwI&xyYZij;w57SOO zLBQ4rdn}z?%#)sW3}q2;c+$ipg^E4s-V=hw1&fmssi4=HhxRx(`29KOZpE*@^i>wC zQh)XA_qerJoOjT>PJH$GA%w@QS+mCfr43R-2zmbbxKEw>p0EDq$7j6d1E;>y9QWd< z>My?iBV2X!c5X0}_yZnJuZ$fDNu!O_v3X4jgU2C5tmVye$-sIBB^-M6K|KBm2O+(s zv@qxw9Q)|~v2!!@`W{tpIRO*%*1e{zDgtwq#!;0ORbfd~^o@&@M3TlZCu`%2rs^nH5et2kir+`;96o?| zvB6$Qa8lx>z+2)*Xv(-CM5rnD3nUtqCd|$EIBL}*Mw<=#J}{W~9CpYOj(z5%aFs`j z*gX!h64^S3^B%0l1WU*gDr1=qfj!F~#RZ$j`RzHs-AN|t# zKR)*h3){?}$_X!|3x*ITKl<)>{C4d%=N^65&%WeZ+Usw<>(gAmuHfSC1oDuh84Rk} zrkM&{s2et=$IC!SKxo0lq9zG}W(tcZm$TxiM^cJ}u7k-|&ap=talv6@g(Sf_v{G2-08v+v`?@Ghqm&|1o;;P&jU)uN40r;i?GvgB6+8in zP>Mt+2%X_kl(X|3eZV3bDo}YC8BTcWQx0I!Sfg&B77XXnDkgmlO!Ly=$}YkO(!7aG z6G~$kOdiJ1dk1mRrFV1fx6kC|Z}{7E&8g3`H~iwefAi-5@#>$35QhKUHpx&YJcbaC z`M|s0a`Ej~{CNMbp7SxMs)0W9ly7qBy@qS$a@+xjFjp0^#Ze@YR#PFu@M6LC9LSWQ zC_O<*maRUF{SRJ&7)t4ez)*XHBM;u6xw!!30WssqxMrf=8u|SSN1gBlV}-F^40OcyGaU!I!b7SAwW3!Vwas6TFYfj@BBg zvWRVi1O%}*-dPYb1(D#rz!L~ES{hvdBcXI9!dS8(5H1izKqL~SQ_6nHvWX!w1^vp= z?F*JoHhKIb4j=@F^^oNWNvh(#Dg#O`n=YM(feQ$Z=cS8u-|L*z!ua|?U4}jL&PkQ6G?!W1`t@AEA-B!~(^w;0{ zY0kUda^Lt7uxtgrZWkFOK}baK@q-Jox-qCYCFcpK;26zdzo5icfF*Z=h5zfD13tdu@MB<3Fk$0XT;$bZi zXrT!%w(Eu9DJ#QZP{vIyiCi8^lWTF-@bp6 z^S=EvHvj&5@#a%cR4;fe?%%)gp|}6+CqMX62tl8A+G*lXx%^K%?KBZWXnpv!_x|Rd zTYhu+*Uve_=Ap07Jmn)?exKngzk=+bqnPh>z<9J$u}CG6q&nvKI~fODtpp?O1nV4G z3RhopJ+kbPwcA)9xNC34ukPDRIy!_10WWPlNL9c&uvmhOcB$aw4q)rl$WEuA+p8jw zBQwzh{m8CL{ z6-OMvZ+?9QH3xvYgO^#JF*K&2_EO5*oRrx6wG%rKZ-%@3znbJ5isx#i4n z@Zwj$K!5l%$D4IGU-H8Dz2}r4g%Gko<@qn%1E;N7LkOYu(f7aWI}hGas(a|&&uFwG&LrG3WD#R`74$mI?U=r zCUC(sWpmEIWr}QUGSVMd*|eEGiU) zU=e8+8#tZEc?DY1nchiR%u+dz4d8HyMjD$*gU3_`DKuG@A!QTn}!C_r3X!XQ}CP|S=g6$3vV@tTg9>5vDp5fZFzRSu3NA>AvzRs@y!!M8d>SsT8 z&cb{Be;feLJMTQXX3ZLZ`IVQye#gDnJ?G13e8OrM^mpI)DK1)T*|g+H{P-k;Zb6>q zh-lsgDbZ5mtgm~Sp4KOrZ==+IaX{6D?xRadccv301t<(L=FB z#CcMcqm{;cOOoXeB^3HVS(Q+ic?bciN>GT%)z$p45TVZd_O)nC$BU%CLA=oHv6_Kw z0D^%vELxV+NIfIXG`c17j8sJiTZRya3n3BKA%!LiYduwANJd6kzxWuwc%|VNU;HZj zuNqdL`pTQkHNQS*@>}2f`X>SIx#u47=RyA`xDdj~jW=EQzK1`2C_L+>FVsIc^}}3u z>n?uZ8ABiXD5mCSaiK)j%2iK5$c5(+KMQXiILpNN2qL6-V0>J%WZ4*HB_sdTXftI; zFm)HW5^+M;X;#Bt9;qY&MWP_l8iByrhoHImMV44&8FYKts*K+gZ;`f&{%Zx^_2O2Z zrJx%$@|@|uii4Y}P%RDClF>wZg)?!Rh%Y`=Wr1@pB1?XOC-ju1L3k0f-hEV(N0dm! zM!6)4`0AYN7zV5oHq9wIE<*r)??@Y(;bG8;LLg{o8A?UfsT8V4!XhH<%PJ0pIGnAR z?M@>Oc?3V)u$*6>^>g;zdk1g*@X2bV*laKQ*)L82p7N(4LRVaIg<7*_jlcb_8()6? zWxqP+l`lWWjI~pJ(WgJfRrhzfRUJUS`cP)}?nPJ|w;B-$^E0tRZ7on{mx!K(ahtJ)Whj+Nm`q$G(z2~VThM2N@*4~mLT zuZJ~pd-tXrLxn_2D7$!XkT|@vG!sE;dngeg$x+fH8_--d9LuAECY1^qJg%+?E~^3F zJCqXWI=Vc|bCM**dxw;Dagm5U@gYQ1C`oHn(nmB(iYOzmRKoU-z$Fce(o=aDpU4?* zC8R12i9?MvYFNC-nF4Pe!6`~(VzZzZ2NE%b%J& zX8*)oclEU|03Neu&6+={PWHU>&Xa4vZ{PmFBd)*tvPb{(tDfPSa#o-Ho{w_H18`gG zAk=;bQgr*IjWjM`QbeJo2JakIF(5cca1x0?Cz3%G&_c3&MMBofnc3Bg7kQfD8jA^8 z3{H!qw@1n(B49p5#3f0QGS+~rOk#?PL9d`P5&g53jq$xgA)UnyIw;+$`ve4`aOkv+ zvkA?i33O`_NtRNS9+f48kfCTGoR7_&WuL0kA(MI30hAVReRPKfhp}eg5*nOGONmU< z*c(_=MnP(VR|oB57?Dbd6P5Q5Y1T|-aL$k<3Z+Hd;)EnkG-;OO9TbC-RHb<9 zu|-T%Q*HoZfH56>)s2NMwxa6yW6W?PL#HWsJ?JS_g2)5??q14%NeF^Q)IBA-y zieeM*2qD73_^3j4-ci;a*;-5bSIjA`Iy{vFDmIx&Mw0TsNDO9r;LR=Vl32ftCr@_LSEKtLE5f7>OoWKi7Ao9rGd7O`8!iPRA&{~0X5k3qFc{7a=p9~T0 za0V$PLaKdbLe4p?sp22t!@mBE;2eAR?m`^)7|vch#+8>`%ien~XV57ZxZm`TQNI7^ z*Ua?nNHE6d_5pFjzrTkoZ`jPu@<4_UIh5I%DPm8Xj0d8vVNn-tvq`FvQXqA#(zcbQ zr~*0@B$)&}*11}gAR;}sAi9!KrEiSEL$q{CP%0%&qO~+pnxZJFsw!?(LSU?|Kkp>I zX+k1Yjt?$^LtbE~c4KWHpGkD$S-){F*W5f!qmd(qhuOJ%nyTny-2m@Qv@w_6Xd@Gr z;Q9ntk|>EJP?jbAK>;!jY$C*gS8It>8s|Nt?vM{Pf9ygOqk@RYl~h<4Nun%?fk;XS z%F0lhs&1U~HE`ewgt}%n(pg$JK*db?vNH$!AIy)oPjbaI8yMVlHG4L0l>`@dPVG$o z+ymgQyEa>C%MfO+5o>?-O>TK`o_qBY8mkUqX76rPqOe}n&q(4!c<7weItm$#+4ui# zY#`NvR0af!%GhYH6(KHs3+<`(0%dH4wI*IETH>WgD{5VgU|<|(f#$292Q^3Utc~Z7 zE72AN8kuVb-96w8ovB$8t(cmvxb;Cp(rO~uP3X@M1Q=T(f+5j@vgje}g|xC2*4bJZ zEb71FcUQ|m@D^_!LPb|tNOz@a z7VGKv{h9Tjhd^pgcTmFQIJbsF_`yY+aO-bo+uiF#S@y#{_uSF`4|4#HJn~2ZkR@rO zIh0D>F2elmG}~=Px_p1SJx`JjMd+gzKp-GV6I^ih-CwJJLqMy@hxz(TtdkUD1Qzg8 zML0b;ME&8!G{AW2rKyeqDBi_F1+P#_)9noCbb9zYNzjK74_2Z*D5i-8L~wN_Yn+k> zg+=Er?z{CtuD)?Q?>X(Y+*rYg)tQf zsH~09rmh7iA&}@O@X`@yj6yVB_nM0+iU=YK4v`@?3f2dnHJ&U@(Gp~>(J-cphr4&t zgX}z7C4>+=<)w;4oL3T^DtxDhYbbWLmtdNU!ITIP!In56F& ze(@wSYv8I9k!EqoQ!%U}hy~TGh?lIZ2ZIoUjRJ9U&s5}3T|JU`1TKU+CDGSIlgAoc zUw)FxScHs2l&b_nX)0scyLSfbJkAG-asb|wWjRu5Oj%$D^LRUmYGhL(gT|BwEetna zb{|u73Ew;KgIs&X<=k=Yb@b=vnBP4|(DBllo1dpNk?XhC)Yi;}R>yeY1p-ML59F-T zz=tS=WdZIF9-YL(D<499KlXKkORTq1^=%?bAmfySmV#EM>e(k&C0lDq)0kZld_>!V zi@cN6kuRR>O!I&pV{6r-*-&WbiCLTRzFipd|D#_CiS;Xal0&YT~x$>YCFa6{(WsjhxboNSj3y^}b8btH`WUlN>&Hj4^1fX*8Pn1))^{ zAskZYzz9v$0T2)yM;Y)EXxoMtXu1C?tta81y>0 zp>g(vgvRnwL?*DoixAA8yae2R_uT!4IHV#PtLXe=6I_rN0-ub{LgiHNQXZ+$(; z*L1K{Xss6vAP8>}zAiy>kS3m(i>B)#I=&;;#d9?{Pt5_Km5xZW5LoA;I4?xB6%nvb zV6BhmW17&&^Lhz&5FAP>yb1&?-WHLTb#a3qo0#OMKlnX58{%7M{WCv1=VErPyPNy( zzk|8?d87iBCd_nuI1xZPl#aF4^@F9(T8OZ`6r_pVcNQRG!f5aj!I4s;>Wkkw7vJ9y z>LEB_okZyjt?TbVh~KAF$Gc-;XpmAx6e$F}bGYEKHU??wB+x6m0S0=t^SaiV#I(!4Z5d_;C_x zBvLo9oj$2dX*Dyl$x*JqaRU2@zpdS9wH`Bv^te38`mjG(mWemeD};pKt-L3Q}sJJii=E8HYXW9PCdE65Z zraL>&xo7=~16D6a2t#MOLqnuAM2hWK80)FLMI|cQT#3&T2=O~X>;jK>L3~8677HpxEjks9HltA~es|($Ypo?sQ?%B27j2gNHt$x8JZU4m zXVIj_%BYs+FYtjFfe;anAV`S?oHytsMc2b$9Kr=jn#2nUj|)+( zW!Z|QJp55h*!;j0=bUjpWhp3UW)W3MGap7c1;S%I*diiVa$$L`TRqb>jrV~R2(9a# z?~m?6;?G4rfGlKtJhX3#dS{lk!ysBgLvUyjbs!R=1+^^ED$-$MVKT1&7%dah5K)Sx z)kGu;8wSxw_-Ew+2ojxWR7kOv!;64RBiy50yMVjQ`Oce4o zbG)x8<~lS-+RSg7;<8IObH^Q5vvt>iZQBaodi-12vZ=@Ix6X6ytUmC)(- zNK%b11EqWD83kvt){)dy(86f#j714ekRE44Ek+X&3JeSQM?HfJx$mV;w5r35Yvjz9kRKk0kmoh1p7>p*1< zm5-uE5kzcolpqpGWvhKHezHbCin54SEgwZp<0Gy55R@3}u~jcVw|Ya~C(;YC5?s~Y zAX0={QxN|>@9SbM2mO9Yr`siO4v}XXQyB(j!DybwubmX=yp1h9VQw3#RNT3);MZ5K zXY;lj*tFg9|}X2EmsU zm7^^CR89ayb&V0d(b+0J|& zO62jb0ui@vUqz8D^%AEO4JNw5JOWkQW~*|5H!&7ErtbBT!PXS8zhOR~ZBWoe0u2E)gL(D(A>-bZYebJ%(FD@y$}2MzcY=XCqoU(h<$QzkiV5TznVz z-nW~Ly98SP^}6geV%k3!WVz$oU59&G0W(tDhUsY?MtSvs`N zDJswG^en?eZSo{W02jSJ))`t!d?>+7f)X^xCph<;SM$T~UB!V1F6YV5dOUysghN<% z;KP_(e>eU44XDM7So?>y+n6^4%oPT5KQD>1yyO{ z7gB0;p5dG!goqRb6X7Ni;viF>Yc@bUn)7uvlH`I%i#meSxfmynjE;>|AyP?_ z<&2Cr&^o#|lt`fA%+AeAy-*^TbDS!YME0m}B;1 z(enM-`TL)v<#xhI%1u|S2bgHOC zpxZH&Wr<8Q&MT~o^r8^rq0h9k2or_K#h^!{k+Zue_{=AN%i2wWM?UIEUjDX6@~}r8 z#c*>GJ8rs|#>gDIxAwUHnhjie?Jh3;-X@-Sc+N8(JIa#rcFY2)48C>(Ng~&a0AnrI z$M130NEwt4N2CZsh(b|Q8G`lopys3ILqJesAGIYU3<@8AruuA_v@BZLSl@eQ2sw5%Ny66lXoQ zic!82Pf>Zg-7Z6|Ec)Z4@Cs`UgZ==mlF0ps076mp`m`n&vvbo zaQwghEk{56P!=s6X4|d5Lnm|W+_Ib7ZrRO^H+A{q_qKD`>fOBXxJeFOy__TwRD%+0 z9L@=hv6#x@y{~EOr~wj6V{AaFm?g2`K8fH(yfb}`=tKl{VdDm8D~iD%89zd(wNVRa zMg4mLWxpWFvnZEzk)9|`MQ|}QAaYei3S8Ph4*{@*1Q8HbH$r+z4XyYPMLjO&V@K{? zM94-&uG7?)0>R>tSQ9H9oe!j~VXWC(S0cLFE)zF=wV;p=0qf%SjEX*ZBP6@_Orx^J zR5tQ3LWtNiU=zkh+Yq7xJvfC@mO0bnLvQ^No7QjVLtl9>kAB+Y!0e&B?LKC=-odSx z{f>6p;nBxEjDw!LA1{32{;a=c1K&C80lt0yUY`1x4#z!qg2`oLF+0FHT8$7 zK`qQxB63K1o>LY@%q-W@;^KY45o0PrpO%(H1 zvUB$~#+o5!qzi#gGzL$wmQI9J&h3TKZdW zV&^?~bL%A+vv^W*%rjT=k{9mJOI~&;*Z%4*E;w%|Xa8i1CqH_?^PUh`JlR5JDYA43 zQKwycLFo*}TWpXdc)D{XMG(XU3rlb|9{M%4AtKI=h{ABZSkQtvmK-+3sueBPtsCG& z+$Q4;;rGG#)>I@SqbLS-PC*Q%amJyfMC-az8yPQ+h0UX;`;I^U_&@1OVO-=DgO7t4 z0)lq2l*E@1?=%Z+iPu5)*@leEhbef@R zPks#JituR}1~gNJ(kb%=RD~m?f`Wv0Bga}xe_(015*k?+lSf?@Qwb+Vxc;&&eCne= z=eQTWnA6Vw7g}ux(|0ht>uw%g*X5cEf5{78d?*h)e1eA^^Kky=nVY%pmM#}wyn`>F zyOoz8w}_(-ngFc`E^c@T8CB`hK`43>h?yb7lLz7a zx>`glP(sGDQNW+=~w6i2WNJbNGI| z>cx`luN~*7mrQZ`_crs&V|zU8s7ZoUcrWPo3Y<-_PEa`$agLx+8s=vQY@742M1e3d zII2bkBvC_#jKhu(E-r*fWUwT%%fYKh*tx!_7iMryK&WbJH9;hiCXgxypCws_wJ|3_ z>4ZdkyoItH5PDq_l?WFth|T)__y6GlAOYtr_;?7rTAeQ!xGy2Feu2}9QNKzlsv`12 zkqV27(8>m!hek7{s3fhCHX0~BIPXxphRN%)MbbhD5Q)~uPrNN7Cq(OR0wh^ub7>iqLE8V zQ(>oS&mhY?Tz1A9E;#Qu+`GQZ z&e@Vq0j&m1e*HlnbLcQHc-fIWnwWN6pRYkUFgrEKR9{&AnSMi~bypcyf_sRI#&HVUtU*w`+ z+{%Ny2W;#F`UbxC)2$q}y20ZfxtQaQJA|hlJHa6bXZ+y2HfR0pUjFu(C6734IeFe> zZf_qiBvoM$K9FcZKRA*^5~N_ZV{sws5f+>7YnbN~Q2xBTd}=o%hHjp)?7F3sK+Yqd+o*KyVgh4BnC~I9%eO z?`-U2@U{LaZ8a!NpxYTBn>oQrjH~F(>|tnZ1k)>N>_5)0e|{&QIPF4CJ?)=(#y|cI z{hiZ%_ut;luP?fZbvsL@<{)J7g`dxG&=SQHj~eE0UT`SKJb4A9BY}&5+u+QLAK<0a zC5Id_hL@U7zoOA-Qj|TswQ&e{j%FiA>A=9mPJ-Y=O#_8!O?CdE_gRRVAn`zSGHB^( zw;xIvj30fdkwc=M$=3y8(nmL(_hflq>t>?hCj=2SX|<-r8Ak|K)d6pRS{Hy20&h&T zqPeKZ3_6WLEJE%R;w`+a&Ii&|Q(9Zo+XCl2Rq1P}OwsT3(TPF>RUK{;k?km~lSew9Gb;E_I_0{)J#c)MkbnIEM5nK7W9ncEwB3~FL=Qdc>Oz{L2pj+ zg%jV$&wqA1cg?|^kO-wYa7CLfvyS_w60Y6W=a*OC&WoQg&cD3jD4y{6l%j7r>*5`> z8@qU#gmx>#J4XXS$6LHiP$?K!p+do2r$lfSD0f@XsrV}1>_%L^Fn&Qhbf|1(peLOg9I^d)JHXc%&@C1 zgf5_Je81I7xcBaDbmj_%S_#v0w$^<_i(ehFg4Q~|iwmCO5K)*UNzhthee5xC*4MWT zAxTmo3kw6lngx#M|L{xIs&h#d;m07r3Vd+rG>czjYvU&CE#6vOsM*aBV_-y`m{}T! zwH~E&c5K~=Eqi2{rq+-~jZ6I4nR{wQQZYj}jR zDi~h5lxu#sjWfP=HD5jZR93CZ*mTKv`Q%4`!}tC$O%D(%W4x8JbaBF6JG!i!as2Y8 z4XiqE6K{C+aQ@P#@%A|f)fwm#QNGC=U)hFN?NG?XHho-~PqP=~9ngwcJZ)0k8zwTi;v0C}Fr zp(D}AR3nrC=OTK{pQi<0V2K9(0p0~v2$-_O12zPt(j*$H%95p7Ek+Hs(?^nJS*?$d z1gY!vJJ3?l?>kzcB051t-6^9)zyQqzI-PkoZkj=74ScW|>v5j?oru)CQ1N1j zO@*E$OIZ+KHJfcJQ$$)IM5M}C7p(K_-8)s*Nxx#vnl<4+8~~J(xDe}n7bX^^6b?sK zl+mUkV})U5UF6AYQP)G$YF(x3Ve7U5N?5Q}-4Iwmd>=1?h42$81fup*3+r%I0U|Km z9;TfqG_)p36HJJ)xd?~W4OBBF9UbLUAO9VXed-f={RiJfZ_7=5`gLF7$5-!Wsxd^e zYK;9yCPS~cSG@KWhj8}A>)BCF(hMEC^K+bW-8OE#{~A7X+LL(6i^dSran7%&ST;Jt zs#R^0WC%+U(O+*UO$h=?kgjTFMS|UQ1k`eUQ~-G z3KF?5f2a-=sf9zqqopQI(>Psvk1-W0O-Ry|LWn3>Oayb#SBWaR-4c-!3o~G=0g7d(u#?GItC(p)7u@s#de)zjB+w5KyL@qPGX%b<(zm)3Fc6G9)2wA^N5H@@Mo#O zq>NtUMzhKEj(M!}G3GbKi^o_Sg}!M@Z@$2o3gP4bL!IgnQ$a(Z=$A+#=ydxCpQEIt z-PWYCrhw{P4P0zsqo$U;smr#i3gJE8K-ulnNF-H&${G?Cd*><>Ip9_+uxH0SUqAgf zeCqUfv+Ago-1oCza>`rJJ{O?#tFpjb;B3CcsWhKG_(itnwgZE@Q zil^7F-$AF-q1A50rN&wa$-W#Bl}eJ%lFjV+hu%xtvu zBCsY}AVbaHMom<7%G7%iq0YBS5>UF$o*9^{;%8P_k9YAR2UTku7KVXnK@9;G)L-5? znyn^9&tm#} zV-eO18l#J7E#Dt8vJ5%0g!X|4a?4c0yFYX-BqKcY32hEtmhszL`b_o4-&4kOk{RsG;j9O00!iG9C_6#M}mBqdjF|+lg_= zF~Tyq7zUGS$h2ap6}i!77B4>R0$gn4)?5!v1c7ySUjS5+ridh`KieV8;*Q#xor?!z z-oSZ5e^4+oF~WDge;dwZyyfIaiOs)1Q@ryvU*WeKBuk(6R8~FWalthgiT3b>m|S@v zx-r7=#DUnMQ7WAf+GF^MmE1m~IPKJP*|}q$$3Cph;j414x^2MJOb>jt9hu6bL_)u` zI0A{N*t)$((rO@--Uo|n6<^S3RrL=+fLalRLjz5n(Cbzh0iGlVY%1|bL!6*8Hi`^` zr>IJdtwl&as=%F#eFgPyBH)v z!R*vtS`CRYt`=Y!%BqZ?i#6m~i!XilG9LBBhjZi;k7n&9zv845zr~fEMXY}6vsiw> zk-ksnMphrhl7o(-H8zAAnjjfp4nq?RPaeR~>Vx^#kM8H}GjC7LMBu;Fen8&Nl0}@uh`ccw9lR;MRad041)VmSRYZrR#Vc<0|HCdlqeAeOL(tAJsoVV}tl;0owJ%O38GXnE_*J3ReB5^@cp}4ymTI`PYu{~(_gv#!#`oGC=skUn(oC%+oY}2 z1YI*|@9rj_m8e1vlPw@}CET7~nmxVz_@=#l``dRgZ{aLnbw-Zis>2gI>O}Pho-}x_ zM7pV?DGXE5qKVVuR7#oVP)x^53324TDq0XB+d5N)RTMH=qR1rynyQ6DV0vvVj{JJz zq-uZD$|KRn99g*}t^2`oU5qv)VcgPkXrd^T&zJ*XwZ%#YHxr~IZ3J-=<9ZHWYd?=M zL{T$!1jrQFBBXd~Sqsg!3E0*IwZfl@+N+G;}FdmbLm)qETv*6Cmpwf z5551L)sKAS!+5!N+u1kB2`8LDSMLC1vM93T=geWzQ-sf9_nsSnjm`@W5Ck)Ngug7jaC?LJ1NKpl6wOOO(6 zrpd9kr7)F84iDK1C=s%?Pm-w+EKvs40w<+lz2rGG{zobRrHz%cHDa~K;&>jpLY^c^ zj*K#m(nQT>D=Z^@3Fy|k!zOV$IS>lZg+Qib&nSv1w0SA3z^F9xHdTfq#B}E|{nATP zAGL5uM8L$*6oKmy#RAU@(kTm)$VxIDCH5U^^0VJO$?Gm&1PAZpJ74-SckO|~!lm>r zILdlSD9%0YB=h;temHsSTi!rhp_c_mFXzNlPetZS#6g}U*Fl)?V%>z~=RaT1{3YF- za;!&V%Cd1!NJD8fX(4QlAWpz>CBA2(jv)e zae$RhNUTMAF2)MNut`T}38T|>gCiYOqVb&!ZTT#ZK0eI$y%pa2&U0yu4s-b@f5|x$yoXqiBfSgtV-THHCm8$fu zNOb`DjDu@Kl1R70tXhSi(_)~s^j6lSC|%ce(aH2=HeLH!lk!xeFiM5F_9;-!bNxg* z64G@Da@nUqW>0f%G@H#d6|cpnX#KBL%xNq_C!k`CG3j*BLLdZ=0jpDPK-vqY)K@9e zHHwPjR9mCdvn)=MR(^tm$rTwJ8731bLhWI#Lu4W%1^Gfdxtzz&{Y~zI|gliA{C%>J&YEL z{P<6YdFbI$j$75kv2z6LwuekqYXp9fviJaqKzF}giPcGpInFsul@n@lnonRzuV=dY zON%t~R5!?UxP`#dUUFzQLaYPQ7ym^YGVQ9fQsR0(+M3qa6-V>}N^7i0nF@*0xUM(N ziLg>Y)QFOF1@H_Cfa$8iaa@AHMF>j}1gU)?PIrPy61VoYI`yBnSo+qQRK=d&+c=&; zD@zzAB#9-P2?(6lQdt|URw)3)O-CEkh(+6?9vP)@vKfYks|2QooAXc#l!|br%VfPl z6h%C~ZWmKg%z3Xmk+DtN`N=QuCoC4|8eDA04vn&8!7Tf|@BH%_?|$8DFFa-CQH_C8 zK-ieH6XpHvKeRjLOnW}Db+P?jTz%&h!&S+GC2h>_lI++UF*Z4cbOre!?M`E35spJ9 zS75A?Y88?=eK`t~Qn6@>8$~Nh)V5v<7=uJpY?ma7X=w(g<7d*p9&5#PozM!NnBKFA zR`(!UDTvdo0gda(Bk6=%ng2@xFr~Ftw4!gtG~7ogsb3Y7{-hF+4uO|xX#rYdK%+s6 zR1J;AaYZTu5~(se$a?s08t!9E`ocqLS_F(18amBWNGB;0=><$wW3u@iN(su9CQ4}> z>*62@>k+r!xt|$bC0_on^LgaHUHs{9V>o?%$c}zLiiH_w#su4!6`pQX1f|kJXqcCmg*zLvN>L&rrhX*c8G^k(_a>6AfH} z=Sj+SgKCXxtrbWkQX~J#kKxDI04 zw$gG4NiACA(I~wgT7$sULI+9I#LtKpDK70QpPB-tXyoZNfFSjNE2{~m%S5G4A?uMO zDQCg+vseu}2?-l@ZoFeB^Otth-aW=2zk3xoZKx6q&Ol^xra3;&TV8wd9q)hZKV7qA z-U8w0BooyNBSXVPjf8BzMC`iMghUj37?nkS^!r`3^>%XXTuY-V*fW}>n>79Rzbs$Lp9<)|z1z@195a7EWag+*)o2|SQ&9rmG9uf97 zlbBE?6iP+BAk~6+nO1@z>6xNJg_JJ%-t?{aoIb{Akxnw5lmrJDn|9|>7^MXp1}g=z zjuFzuNP%iih-{KJJu0@iK^8gPun6!1k8IY#Z~5n?NY4rZc%GXI-da}b>7qh767uaF z+B=MEn^crbqnV~RYNM%#=_Km@2X@omUtr<$2D#_v-Te99GPZw!n$Fn9#1!v-)1~8A zeBjO39((kXamURve0a*bXh!$%!p~*#3ne1q;FbCr5*dDd{Vsa@dpLfHhl*YHA8ruE zA)b(gVThC#tqjHPJY(ZAwHSogy7sN}a2f$@%yefbFc^f@NYdzMo1{z^V>u#_wyiOc z6{dwuPLaXd7?A1xVUqM~i0SvP(zp`bLcS&1m$=T~-}e9g6@X1CPR67=MbdTZq=^r9V1kF&T$WD(mKi%rqs4y)!q!g)NR;LpI ztrS9Qj4KK2nrzm`$+$#KMcioR4`@MP1rM(uW!|D5ii0^G`0GZtA56&f3=j!KS9{i+ zdDhwD@Zph#z}Ws>yG>*JW)U6S!~UJS$QAN9($Z|!)8xTSfjtd}zukL~8MAumD8)=Q z1@&4)yFXPN#M{h2xkO;3(~i?U8t2sZ&Tu)`ME5nTBW> zg921*)NVzZV(7>euPbq|u1g})1VY_5CkblF~3(m99FJHb`ShG(<`ugh#%RBkQCi;50T=ViT1f zjMLDi7JFfOvfyR&92!lKt{{#L<+5g~TupiUD#B{ZgO48O#4`rKi@EhLn>d_6uB(ei zy&?MsX4wAz!5Le2Z=BoEru5KVw{!4`N9@q%jcnYs2kEArs!{1w!Yj42r{?g;hAOic zcGBGe)w)Bqp{dtWYiJxc({wMPa9l~VsR;^sTp6@#p=pt$ou2EZlQCnlMj(_X;|bi1 zU}UnMP7G`ceo|@DI3{YO)J#{V@uz;uUf0SXq)QStQ#G|nUzSlE;kZG|ItJRNch$4H z4Wx(Fmbh6#x=*u(w8D_mb17vbcwPo4@Y4ydlz6!ux-|h3Kp-VqFP-*y4tUz&`zhbR zs8+;onkaR|78XZQTJ$R2^0-SPH(+8aqLg!JS`U@P)aw--&!t|gQg0}>?9!}y-U3u@ zAAkPyI-1fU-`-2ysMwC4F5A;PkoXR7%6Q&g)qR_&@7`mE5AH`~1UjnFtWKiCCMt^X z+DqKJzQ)c2RTj=^qpRdHT(v}v3N9jLR_FwkSh7V+SZfli*3_=$MYrl{^uN}48=W%X zMH(7GXWqll6w(w$n@<0f7KGX%u^_a-l`f8uWO5mBeT;Q+WPn5xHzQ07%tkAaO=B@i z5yvfVJs&ytbpGFVtpI<+t>rP3xzYjo0@1ZY6I2tUKrM3an6s3}dgo)FbF z(t_0y7KhDGj&SnxkAV!__~%Vb;-K6dN*Ow4&cV%P!`QI35r*vtwmodyy_(pw@o~H$ zOOQ?Jo5m<`CAqE+?%P!7P&s1pl1>Vq<=~W0xl*CpD3ch0vL1=HB>nWaix!?mAu+& zEK*^xLXD5K0Ca*N-J1ey{&4{yr4%ZTNa{6O=X@H-ivTBcE{&88x( z*U9-=ZoKm_*WYxI+(1mbjsi>9dPL5UUiOOjswWR0x|PBFNwb ztvqNMq#j_K?n<>$#BrS@Qm7~dl^ogE{U1KQR$Aiv;QCmt5RQj&e2hp701c?HiD}k} z8V#gUNDYmtNu1^+ZL&ci(->1@AOUKz<-o3k6aq~tGflWkGr*E*>yJ$f8{0x>ik2nL z&1Z;X2>dLGF+>UyEvZ#2M3KX9f4hrEH&j@9TsvZNKO4795c^q-n?)rV79Dej7>YCb z?PdSEZ-3{TpBUfsh`so=uX3_ed#MfYCEHP;TB}ounnWgrvZx^7t|!JR^ma1PBiT6; zbN{v~Q_YCDCCrl2$IbZU1D9rK@p4%lH}z8zw&2~#z- zvgAB~)Jc#L7FnG@PfoVFrKeNzqI62q+9z7w!p3TI1TZ3>0}$FtQ&TZXMATI2M4*LT zHlzio(J@9vgtZjv;yONYlu(}>BGW9>5d`=`68IM1O~+cbhM_za(_ZXotpN0q3CZ*t zkm*sg5NM;Y!a*2FgvapVI&FDDY@Bp06h-)spkcFo_t$&awXede6OW=kV%a@h$8T># z`gvmEIgoJ{O36cu+@nMo`OtzzqNTyN4xDx3oBxz=d(ke|p6sg!y z$Z6W>GyhDliRR7e>hJ)mV*;tjIw|PP047P#Y^5TEN{B*(76LCDP;WGdr^YCn3Vne= zYA8=7BwCOpmPkRlT&2Cu$M@37UpnemN4z7(=+@{zEeMl1CJF1{c}z_u&DzI%y&C-hJ%eIf|1hARL#;Fc#hO7BL#TGw*nE-(~;yg)cbS zdQF^j<_faq%^01Ad{vrNlGqT30-4P+((u`|eUk33Jh@!LqdV*DJ{%E61``Xcc4#Js zTo$U;2!)T9E*g+xTEu9l3E{1Ejyhs}mq4~4Nm`b9i@*m0Uy|7LdH13!W^9<+^m@t^aVv*Ay$U0 zsf&GkpWxuW{Uo~|oAaTMy`i#fW|({O-do*W4;-et&tZm}5CsAghr}|%76p69HIeLQ zY%*a^e~#17n8${7TR8S8H+|@&PtJER&5(KwuIHnoR*=v1?#9@srW-A+F)hA(#wGQ% zH)5g)!UTjP2qOp_%kpkXcP7SkC>|f)OVTkwp{Fz5^Tg@(af4|Ko^Hhy%a*|MX@O18 z$^vvmB-SBFmsdtxVOrrHQfs7+ur|ezHf)I0f~@B=H9A6%Q|F>pc}kH>wdQc|lc`TW zF{zTj5rdU3ZN&_2Ik1z{V#hSWZQ2)av_ZJ3s7z~>67MoDi2)A>(9~)T;z$vzc7F4R z9h`a5DXbh<1j=&wk+AM2!~HH6E=$S{=< zbeBugVt%)nE*PaTi8_*e*|LbBbx5J)(B3mZtpUOX7eQVMtdaNz7PfoL>=L-$f;)EX zqEhanZD0VAfKqjgTf&(R8cfxns91sPk<0Kj7s50Dcv9kekc3U*P?M;qBCjPGB!)z5 zA|2ypJajFlI=YV+9986%ub9b0cdh5(RGtHeHPaY+YXp@LY86deu`T^?N+ViUW9f<( z45)=amJ+wM*VKu|dI4i24N6%}BUU7_Kw3k+mT=1hlbrmDiQ-(Lu-^#WQC&P zx*Qs}EFTCM9oC$9!fe{Q0(KqT%iLK3o-eUh)7cqNsV6Oderf}it&U$mJ^!Jl3KvEo zT41dieR<-@&e;znd#N0u+uJ(w2%*ge0#w7s7|+_ z#-wMDHK;^0uMn`H+i=?H1-6fc{Qkl9xC`du7BYyqiitg>mq9oJ6)Qw+Q9>ac7spG* z)=y0Uo{0v)T3-r@R$4R~3QTInab;@vigk>VhM>KKiUsBEJ9zuKUEFom%Xs_AK7&Dm zYZPPk29Z`I1`=Ewchm9f*<%xNKz)laFLwI;{~RAPr}rAaPunV5<( zTA&hma^o;d=0vDy9Mg!|eEr{$IJC7Fc;RtLd{DSXjadG<2nq-^yitXH2KXh@25Pe$jO+aX9;$XB@9g{ge!=W zlviG#tW$1+47?*sc45;)e|k6jU!xyD#Sx{PK#G{*1Cy=5B!%Y*n&}jrlF*zwX!z}? zmhiV9p3m{c3C4FGKsp*hgwd(zHEu>&lM29$^(l3>fdus&Gypw4Jpw?-wSGrJCgWRe zAVd(W7^|AN0z8=^YAAe>K`I#AxQ!Rik9qLwv-tR{yC_983z9o*NO$cO7zt63td|YQhA^g6CO` zV-dbXwpgNiXo_NaKfk>Ebbj%f78#Oa}(F9vvmmbFV9 z2~BE+NwijFCZ$1=j-Cm8_8*K8R#8r3%FPfd1-lPbX(kEt2AVYLAz@jv>6S;xBUv?& z;Z;krylQcVf$COf>s?~L*=0_iAx&l9ZQWZRzMIZW!m^^`xK6_fJuxf0A{OTw9M$JC ztGC2mx9{QcM-E{FNl!sBvm;>h)&ylz;iXoJ-mZYDa+44ct_xZpf!Sc6$~zFG)Jth) zst>`^-{aG)Bq?M}r;*ZLU{E^5Q4lv`qM?}OnI?bu(lPw_BTL91*g|DwimdCARBMFI z3OWvPV%sXt67bvdcb~K*w>4thE+x^;6T5*5pL# z7DUMioQ%uivPNOa3N1~lulue@uTyU}ulVwe! z(|2Ib1y5^;GevtLfVRB(=SV$Q1HOD=>*lF~u$MWV0E8kmPdt zmQ~Vu<|trel-1T?rGqAg+6a?AtZ@<}-4r)Dx_d8!?j*nX`dK`Gk>a{v{E^4jPcaok zY+&I)hW&?{C}66g7#eNj=K?zNE<&~T)~&D-iPH*ENO7QsbpK&2IKH56T_z{$bQA-| zc8#Hv97eDT|gq7zf>mFym!TUDVF&-*hzJ`r>VD-5T@Be_e-=l7`Wg zte{*oboYCBu0u5jzmy{)eb{wtr6I(0@Pj=v&XRyl67ogJ<{*h|x}h~`fRZC3d<|2f z;XqmO*Bc(^tP3Lk^tDs@;#E8N_O%leEI}lb&|tPzr2mx@0_Bkvh0~K%$nE5 zocV36+p#CLF$&4ygX5?qrmYyHQKu%QP8#F3rWk1y>JfUG0FfB7nH*zrg7qvt-5o?p z8EY+tl1m})@QDxJ0$OtPY&iL(E*{)D#1nhU?2twBojLri3P0--$QgY9x*K@;oQQ>4 z&DLgy>vuJgo%0Z7LD*>o10yo{aHXDW+ z14SC4p%R1d2WYL*{CAaVGORI3JDmY3T0+VcuG8J=p~F$iQ#F#rBQ^<2YgD63XCSG@ zaJXi;^~SBdP*wQmduMabsk8a)m5(uA@1-tPXe zcX@1iJVcXXux*qeT<^#f@JQj;Vx^d;_2b2Y%lP3b!U$|4$x4AxicGFRTh^tKcpNCh zudd(2^A1(H^qtS+goV%N17CiGyB;5+ZSHKGT+1i!q{2j#BP$>%zM~bS*(*iHv4JufxnN{AoC3vv%+fE0jJ&AzNVPjDEiNo*(k&Vj__l90r8sWw8o+Y8j1 zicqKC-_uVUU~okq_up2MPLz04mhl63^3kZ3X}^0+~c-G_%!-SfG1vXk4#C4bv) zsbpu8?U@7FJ`!0Vwi%M3Kqw2WSQe0_fz}Eqo2Gs(UlicVgnBKa5n75RNwwM_HUi^W znqhdPW068)lzs~B*i!LJk(z8f@;-UT5QPZ_7b_)1nxp3w`P93YabVPN|1S9U4Hfgr zPu^$myZ#~m_2Wlz{g+Q=uy%lngF^(lOe=a+;R;FMO6pVPG!gCpzyj9R=F&YSt?cS_ zg`<)Lq=QdFZSNLdbyAUs|MXfeetvv-JDO(eNX(lqJ(d$rSVW>h zIVnQAzu@4gi0)zlCP|$IDh*4TCTA(7NRp&QwbL|fb;2;FhC{PirK=;yWH}*@BXX|g zypuY~W*xR4ikQ7H$I4S@(%mLW5=m40G=+~}>LTCSLnYMM-lMtUaGqUZmYcRDBpu7i z^bewgHmqB~&9vcUOIYJ@@``SPtii;ZB$gn3j$W9>6HTnLIM$`7y+EZJ6B^J_L|8AU zst=v+xToWt(`m<30U_9gnKRn)f;>@ElW3EMY$@m|dVK8d#}hXV>kljQFE=!j%l~z! zzVUZY@S3wS-2015c*P3C#O5ckaf0W$EnrX@R^oatK`^}vQvU_>`j0+g7^NO_M<9HM z1dED8RM;fvWoaHh$h>$z*L?XbzWbTuS$F3;KKaqx&42u6RNwq$Lp*q}ZktN+xlg@> ziqbR_K|>i5Wr>?jikXCguJoQtkC;~Btksc>^)v=NwH?&MCVnPEJpxBqTmj=#4SXMF zbXs0=(oC{4%faDp-xPu6lc zy|Zz<2C&%@iU7wiBK#t4fy42~l*srYC0`JSE?&FGK%b=9NT}CiERrB2sMZ@u&u>}r zlGL}}66G43iUAEK6~2;!fLx&1l}*E3RN7$&IhSVLa`e*qyzP|>nW!YJJJc}u>{0f| ze;(Fvd)xK)@Roi2?fWm_-`+Hn?BQ+LnkJVoARIxWB}y4gwVVaorEj;b;GLDm(6aj8A;@K6}+4$Mo+WYMT4DCf0ET z-~Gn<1UaZR5*#D(1o)o8(Gi{P0$Rk^l&;uHTh%G?)adm5R7z2=R&cB(Odv{PdV31! zut`TTizgIse%UNeT;9%T({gCv1OtmZ=<0DH0Ufjfii@Xz^-xPM9@q$T^)Iv4bWENyBV6HrM=Ce zT92v4mbL(v&lyZ3BLywULyP*xd5 zQ;B0cLQdYe6S4NneR}N&ueD3MLhk#;`Mmx(!Q}Rxts=lDQ3}yY*b)Lf{!d{5HLDG( zS;zAw!cCRoL69e^O%QHd&%b}@RDSub^Vo9hU3~c6e>OKh5!-6E-Fg1`7s{iKJzg&9 z5o+tb58Erh`!^Im$`}&ka`-?4gF|0W0T+ul8ihd`gK15iw6QJkv8G<0V&!0wg}I2~ zF-4=@ z$ay$Db10LA{`q7(+lazC#w1u1qpT$7X7Oy37rbB&+qcvht9s-;%Rrk?y$;3pJagvs z(2QWw;sQ2;Y78Ak!Ey8ZiE35kwD7Nm$rV(^Z`N}UR?596{iy3?TL4NYDtNGRkjzVwWKs;H)%la6h z(8>ZX%0iMDluBoS|2Pcrj&vL!C8-rF4pXa=aBy6Qz;hYdzL^Ua!-F@zn-dpU)_&~I z_AB4or|;ORWdG4CosWF-^Ys%?UoCojq`CR`cXG$=`>7~FVl+`K7#pdR^#wic97(tn z=oFNsM2lyxQR`G-Pu*GTAJylmvlhvRTJi!LbWwQOG(ZDsE+RSWr(%@r2bl zQW2pjI#BHF;K0FVDz+AaMwFl&hd*5VD2MhQpr=Eb(@uZBeCH=VBW%xH=Yc&&eDU8m zm~Z~e-+0H%XLI|{&f}!)e!@M639?zNwj`m#%er_0xE5R^gJ+Eb^+nzq5Wa&A98y_{ zgOklOxn(Qo&8>0wFJH<@bL;%u=l{$XuiUR685P3o8+2aqvUB9Dd4r-eXU#P~x|t1I z#%bb^i1ZAoPBoCe!;FCf0)vTNgh|(BsRN25G1FRG;#!q67kG3zWhQHy(OQGP-Xab@ zm5C+?h9mauj_EEIa3pMad=w!pN3WcTY}BxENLVW)m0^5rjIGs*%LYNXF}eePf!AQUPrp`g$^y0!yt9u5Gev zb|)gKqil-?s9MmTmIh1+S|Bt-cYA=U4^bI!;+s@I)D)7fI~)AyKksLtD`WFT*PQyI z6XmGaCjamR_RIhJr2h9cf3h!qUKh81`%KO#j;8MdH`@wWv$**JrH(d?GDzz@^EhBb z8g_4#i#5@Z{yqVyw(2h)~X({p1bsfQ#k9~3x9UzX(x|- zW$oua_J@1#M7V+7Ih=^lT9lTkrl1+Y%$X$$c8E!3@Qef6IWi{0NQAT)lc2Ss(P&~F zADs)>Fg{08K!*2TG?VLZ+RHun9ORrg9?Pl6@8l2b>d>BH zVrVzHLWxYSNGw4HlD?icvSo>zEn;LqJx(AD5g2q;v9Ql_+DY^I`B$%FqUlk{YmS<0 z@%%w{9G=2KvtfV2Q6rj4MvzDcOe!F~w0PS)s@d4R^z=^;03PA3Eb^{7QZ zw3b5^%RRd^>kd?G%{cNsANdHUoqo!JtA6y;!ABmr-}%w)<80V{hk4&ym&u=9aR$f! zb{lK|^Kl9bmJk|EZEA|P4w<5q{|^O#FjSJn5SFXLwx^&XFK{UD-_J2K6Tb4rqj3mYseQ=Us5&U*7bN_x=2#d;j{eudeybs=sY~oJJxUo`?yApxo4q z*DTtWSg^2%fJ1~akXI;~;Iv){n3lCirlBIkljGRx6nH*6c2yagX!6)WL3m4TW+{%_3!R|Ks>SWQFYPd``y>S_Y96-a5iuJ=p7tB)JHxS zkc3TabqW=w-4tl|S)~D*bpIMvN0BB%`wmGW5qo#>-4CwdtuO52j$iziU;gKlX5(Qb zy#vnqFL>$pmtAz}SI#{1?3Pjq}a_Hc=DLbG%o*=SCy1VoE zTM|$v^)}lUB3vn?mjmUXWQ=hXyAK`0T1739Jh{~{KA!NH(d-*3lgS6n8SLRDFZS5H zca*=}cZjoI*v>_-J(llYe=8;l5uqY-p;lM4_xGTUL#a??RtK1xrXDtMlZ1?$L7Opr z-=#dZpVz+YcqR^1Ik-QfrhQf|$M&G49EcyGu=83GsLY9$S1G1D=} zYC4u76^4?*6%tf~?xI6acMo?Rj7WqaY{ckDvU^BVExBwuRI`hYIacUwYFbKK#0c{OQNHaLupwnJ4xlbA$cP%U*i6 zKKJ}r{q~&mU-^rF|CcMi_OtJQefb~nDeGE{Q?90Lj96)^b&WN724@W5Q9-LZMhZN@ zicIQs(F);7lvFqwmywAk)$uCI3D~it%;-qMJzFi?D>0otd5&Jz!z)h7;Jfh11N&Hi z=OHdQe-7XH-Cp)JstBnFO%tOWTrWp#z!eUeAcO0tp=DuI#dCeM0sjoZPGtWIuX!M zi+NA)iFq^IiK>=n!=fFRB-X^SWlz~~sHzB)NWAVn?-lQT@4L1>^7tm_hClyl;XQx3 z(fRRT$Jw~+CiB{h=gB{P=M297n_YbAr`zy5`pLNhTMwx>s#vFlnP!mx?=FBlO)CD8 zL7XOi2}l#arnYV8^KUtdPriF8*ZtrxT=Uz5X7?zvFl&~3@i`Z4dCx~b_wIp#fja;m ze(;{1SAO?DzWs||{zi6Wgy<=_G-69Ra(L{4VLCb_nM?|mX*5Edl80+FuF@#!f#(sp z;5!ZzV^c&2>$ph%bn7s?XGKgJhuI7BtXR}V?~H&pp?Gp#mA~a2Zoj+Eq7_?t_Xkhp zj~87_rr3^7YBb`6d`B-?FGCd8*)uYMwk|G)ur@~6Xy6G!F&i+vV+&XO_zev08D{g& z2Ky>mI`fuAgC2AG5|YHHt`sVf>^sn4^S&xxp~&Ikag1LjpDUtbog#XzN(%r9MrdqY z!^qS+BpOZra@}tBRs=PZivRpvmfa&w)6>@>-thLfZ~Xk)FMj~I?*->vwDKoE{q9?@ zzxLXTwmtY@>56Y|Hk&t&%J;ozHODL-;O$r3&E!;wwSJn=m?rc->(7~Ij@onwE1Gc} z<9NPsyZ~h-lY92?`qw>=|M|Ni=*qmUIwDRE#@u|o*%z42k`ekkmJx+?7~P%LK@#{O`Q6= zbd0qz!tn{DgI5{nzFW(bV@X|GVhh6cI8aH%@EBd4jn2+E?&_%kSf-f82|G{(R6)64GFjXZ%SA05oc4 zj8SBA?KtizwX(*RcX916F65NOE?@uDb^Q6>x~||k3r;&-zv_}pzww&az3mG^h-!;; z_>QT`>hITl_Oq*M`wrP+J`mMLor$L6;2z7Je|Z?!Gq^6OqzOhNyaHNk5+(7`_B%x3{TdXY+4SCNY>r`B-N2gd;u{vWYa^sS+taB zDe+vFTrNvi7);&r_?E-iIK)W!>n$V9Di-MN33%HZSCDn9c4~Os>r*m(BCoCZCZ}!|ivCGM)&+u)&s{hsb&va>f#3 zkur6=v`lUY8{)AN$zptXeUHw_bKHDjOr*1Yrb5 zKpe*jz@|-`#6JcB=``QlRL99`ja!TP)~BD(hc8*gzkd8zT=nyVYG<62vrap^`H8Q7 z<6B?&+JBrpFfee(n$@e__rL%B!HFlI{{4$z^O~=puzZeO*6XUAwCG49GSHT*G0@>t zDhLX;&I=ah$wyOQ6;@aR-;x&=H8eqe?|yV#BNO~=nR*(#RK5S+F+$HdmX zY`bR@hj)!qD)=m30PA*ZuK(3KX6EXA^Yf?E*u4`ODYA~HSstM_a**cOD8u6ws+B7B zLx)gfV-y@gt`so5aT6bV%L$x*TsOb^{v9-(0uzmh`TZ%3W9#-24h|=5+Z|&<#V0;+ zG+lkr-r2@LPa8#{5tVV&IrpWFHEX~85+THGLWocZao?NY^xn7r{*Sk;eC@kG{1-WUx%~bOWBTJC z`IA{(in;LzFJw;6U~PmXI$}M0_BO!Q1i+PLlSaA`s3zBaGFP3BFcwK4dv z&+NHHW-m0%U(}X{TBwLq=M?Ftp0d+ja2<;b>qH0lp-1+U!%*n#q0l*-Ig2}Z_j{Jm z94S-TH^SuhVKzOqp2Nc-{XIEOSf1hb2OIqUhxc*zSu>-zPkztKwVid{~ z=-L!hjgTa1VpK{mb5Z!F!SMQZ{Kr>cL%*l_)psA{P%VRUpsQp^gv++w<27;ZLgZk#84g3geL7Wo-GE(=xJMF2(e-?FS+HnFQwlc;{C7x zEx)?8o*bmjIq{_zJ^uZl{p!V+zW(hW7eZ9mtXbo>uK&JQU;4(^pLo)7Vs@7&iXx&- zLQhAARVS7>_V_;L3>0u;MSoUu#xVmB*YR9I(JHd4LStetwf%cAwJPm-hXpe`u>#)s z_9a~Oibd?%b_iXmuyfsBHa@f}NPcv5FvYs2&<;t{mq#KmI4~yyj6hZmhF=%Au<$$z@#}X?XI< zLu}gWM)MMOzMa)RI~9ZEt(S)h~F_xnB`NSZl3w@x>QALWp&r_{`cD zeevtxeA{s^e#N1!&64x2|J5zFOfWS* z!JOU>uK(G)=?I5d^X}i<-`!kR)ncD}=BwVg>F2+@`t(cR^sd*nUjFitM;`Hn5L;jO z#&^E#tktL177b*OabjI7ND^2!r^LdQB~CbTfV?ljI6QyRAcF;i)iI@vPhbu8(P5fH z!#K4%Gkbbiea6Y;+k2R^q?0$iWhv#MGE)b}7}+zzp3VDE%4cw{&)^JrXshL?S8e3w z7cAzBZ<o$C=5IUkVJWB2Gev;-CaTHP;A0{eK61Xn;QX3OH4{>}~h3{W+0YClL zU2NKwuy0Z@x6h%gBg6QF=81JfjE^TA+%>@~&hO&H69U}8XW62e6a~s z6OrgN>N|{C(A`dd!9$ve7rb;H$Gu=Cvu3#D9EnXVS;yFcK8I7zTwQxB^4zU$o|c*8HR{`Cu9dgS4EKzeUi#P%e|z1@=bU%Z z2Za!otFOM=S$pT5>Xom2r3S>%$kf4EGur9vkhZ_8KwcUyI(HH0y#38I%2noe2Q(Tn zPGg(_sgQAuYBY%_CkQ7eDC7#vSab}%Gy8eh#f!)WO*U;CB^)0jNkZ;^UV=imMB>>Cn1x-(+QKtNB)!S@C2Z9bK1jW7WxQ{dpvItLGGf~d+R z&znhicb?9^K?Y|I(pfCw#1Uq49H%iwK_rkQs76eC#?sfVIQ_M!v2b3FjBDsAxMZca z?Ilm-i*1{MLswsYwPURn)>^rG^=elLvGcMuUpViBpSj{)$G-Tb&Rsi|{Mg5DGQ*E; z(kQvW&@O{TdO7o&q3w+|A=JEYcf14j(Go+qOI-KLr zyJYA~-~0YKZ+_>yFB3wg{ySB~hE^@+xBJ+ESWTKc= zrytGn7rq82N9k{KFv<{5m1#3|vej|q=n&r21Z^(NUO0!rqmO3M;&xuUx{s;hz1;ug zFx6TGB?LRR9H2fq&Ol#3^)RHrqsaNEwIe;rb$3>{_u2>fz*~-G&80I*_H0K+4P>*7 zu1|n!;JG<+2#P^KA@5^VgUMaH`2Ig%z*{cv;Xl826$hpQwvTG&_BwR5XKzRTrLOMCiX1^^^clolX5fn=82$`q1ubtCZ<#~Lc;pSUMx%SFG z^Zlz{$eUl>O}Kj(Hi>Yv5}$~yfVN^5*EI31K_m^vH*aNGevI4y`VJV>hcCUY|Za?wi>+G?;H9mCdAkAt$C9_&^c;;2WnbQS; z(pk?6e5%9Jw6;!sb5_dDPC!GE5bYwNqObq`3utXj27 zty!~10`+1kTkY!b#nJOKteBO>iw(<zPZ$mz+(&(M9Jf+IkBuT5 z4f=a~Sg>L#-HYZje|CxE2bxSxjIeX#B-Qc+#)I9v4$!DYbQjxkghy9fH!nW5hjOHO zcuU0Ze)cFI{PanD?-TQJ_G}_NG?F@+q$Z0?mMpI0;pB59(lW7UD`zfH+;;POIJog4 zuKD>^_D%*s#FAMKgZ`AIR@w-+jp|UU$`JKfm^4 zLWuG^-ti9a2S50MYK^Ck6ptsaTv_?;k6ir3i1wUClq3gskMrOyyBXfwq_gM{C6>qb zR0#?Nkb+WsJ5E~;$H{;;43#JF<0&4vV?S{mQEnPMDd;F>i9eU3b!wRG5_+7$NBR^dl+j1I%3jkqc&QlNgeB3PF~o-hp#w~ z^Itrl|6KDk8j)bzq@}OZW7&YAvy{bCmP)LVUV?}nx;k8P8BHa!gf8sazK_X~m? zkZvn*=~;g6xTB}Vld*wp@&6O07#R=w+M1tm?}n<9y>r}`yy(K~uK1U4zDEdg2ym>m z=IQsqp+kr4JKuSYzV_Ew=l48$FB7AqL=7l)_-uN3D|i3OGCmYCquXV3MX+vL1wZGL z?a0&F+mBZ&V*G%L(o{xkRMiyyaha@V7%waG`8<9;OD4!s$Vs%axNeB&2CO`4CcE}l zx#8Y~pZ#&1@!CCn_Jb#|^7wYX{{5Xiusfs~f%FxJ6OVdT;WV4%q~fd@#Id+jtQ94?=Z8?($|qisTi#VRth5R5M+H^&!>_Iw3A`uo-+HU5+=ytxe`Ap zP%5?K=#ctUo$*SAk@3{8KiHdR>l0O;Jn#hTcUJKO56^LNtTx6ta&o-9Q3#Q&UcLIr zvwF!TmuPFPxI_qf)X_)(##(#NCqLGG{ok(r<#E5dVOWigKH$Fig?&^fCddZZh6Gnl zr#)W&|3rfRT^9flB?g@s@&%6_TZXygwtZ&%lq2V?T;;s^UGKU4wXc8USA-Dp?YFOS z&pKJjX*3mKhd>nrnxm5le~Nh>0dIcCGCpzHS!}!a zVSfJIdl;oeEopGvY?#;UQOY_r>Jd7z6!H?QHM2Ui)T0_zV`(%DJ9mxJXlkla9oINy zf+8ISOPfxpm+RD-#r)0%C=h=FCN*blC`{39=T!ArjJu}^)TtFOM=x#W^dj@$!6 z2)laqYDWkWes%3h~}cPu8hY#J)#WZG#P zY{M@Uar`VzE2xc3p~8q-G=d(NlzRI)JTZlzEntMf@g$yOQjxJTxW3Qw`8~Yoc@bCN zF-6z?6&(K_-uTv&IPSO^to^qqxaG+)qF6AMiO{}FT#m?ud6v%Y;O$?0A#Z!<^LY68 zH}b2WJwTKXI5gJe%%gp}O1U%_Co~9M0}Fn}qr1J6;mO@3ZjpUMP3pBt>JvV-T$-Mm zE40yBDiOv_n$;@Ry26BprGrJP!-l_HbtB_jhbd+p>cqGb6~}brI)|qP48Iyxiw#)Rf#57UU}uycF1RH zfThcq-!OmCG4<*ywN@L%le;Im=iY00)l0fryr6*ha08_cxqOB~doNm9n&lWH z6p{qb4bXlUcOR%w=1WR%HD%&eXg)kYN$fhQfbP&AVU#r6^_kM3c#X1Vsh2D=Ul z4vgQ$`#$Skgr#}9sa7d->rM0Sb;qcMSN#4*P$6fbg%D=VnlX+~3)vp@l^rMUXb?ZSodrFATc63l=xLQY5>-f1m zekMc4_h>r({AKqT`PoaD*!~1Uc(fG@RB9nkua6`1AOwvhp{t|FnJfD^Fub2THVcMt znBc(BoxJ*OCveM6m-4_PV?6lKFk5%ka9p3h9-rBRIi7dw(JWih&4wHP#D}kVl&yO; zdnX*)I$=qlX3_jEG8va@CAHQ_6VYfU8Y&G-FffBhra-tpfpAH}kZN5~YkA!> z!qVQEM}?N*YJ(GxUBqGC;I~(8WcHFQ6Qi1u17!*Uw0Gxt+v{J=pYOSsGtWGeJMX;n z=`R5b=-b!a?g}9eSZiPW{n@jw`t^^meA%`4ZB z8!H)`blAKrRy!sgcjb%EDSzM-pZU=7$DjO@*S+CQ!dfeY5dXzvB!rlrQjFdDm%set z?ptsC=%yW8m34eqXu~59?%)xf@TRvc=Px_AqDNuj!Va>1eH^NIM9n%nY~cDCGPx}I zVvfC`%Dgu2N2u<^-ue$m2c(^ zZ$FEdy=*!6Jg}Q5w@tF+P|Dyq_q-w}o-oMiCoLpUBV4)m*W7*EUZSAH#AL|HizKsp zCG%!<6EcTbrhUqnVB+9=AgVzLsFcLg0mmhJ!= z`3xST%$eWGuYb0g(a8w6l;_Zah>^;aZO;iYFmvwsx#wQ63lNuIez|>m;nuqTs?`v1 z;e{7{{_eZ)zW-}ieD>G(K6YnYxmMF>oRM)#odL-Kg*9IMtXBZqx>8!awho3X2N9>fB?Mrz3;Vm-gzglx%5px-~7a5m)?B+ zjdI378xxI?4g05f;y>=?HUG4LV=Cj^d)pK}GrK9Y6&S8psMbTI@NjckGQ|RZkfGu9 z^H{Axwll;2L&HeV($$_NZbWD+Qf7^=(TF^|G{_zPO**M9;Q6J%E=^D&)%(3%1>6rNt?d3<8eV;%4VF!m3pYev`#Dxz1CBZ;< ziKH20Bv{WStO!H~lq1v0rrzFE0H(Dl=3I8}h`4=Sq_$2u z?(wI;xc0fVU-;Zn$DZ`f)vH&#cieG@7DD_#U-an@|6}*w{>`169{bFO4I5286wZCy zEp3rx_NsaG8;9Vx!(=i(Cobsa=1uzvGd%=>PY?)<@Y5JlWAF-j{2grlKs!Mu%lM%w7Oco|(hC=I)%APWySvKX zNlhl}8^;yS1sA?@&xhss&fA$W&PxVL>zni^W~f0{r)$-{FN8~^bK!& zr?hsB6k_e)HJCo_KG^%vUAJ7dVdKX4?b)%-NZ~l^_C|E(T+X;;73zi!NGu(`VX)+I z=g$2E9X)tKknS&SN`zBFkn5j;qZA{dL#1Nr>vtKOY*4FPgcsrY4l=Yv^*a6iC0>4d zH&&FnYqMtmZ4v8t-^EK`w1ZV=9K-Tg^wU0XDfBL3&&|K3ts~FSu1EOKA8+8U`$pM5 z;WHju2D$~u%(5(*)j@mSB~cCn7fk~z42{HLPAOn)!ZHy;E}sP}F*e0B3kimCuY(u`UVg_d*MH>)-}%;M_uX_0f4yBTOyBVbWb#DHTv7K zY+YC8=7%TsnC^97`npSYto_=z&KE*#ecI&D{{2_!QhGr>=16Eo$Zu_9CUA87Ellki?osV)1e4 zYHMT1;Sk5~1joV8X0ckMNgXVnF&M|C8Ec$Ig;g`NJh*F&Wkru;&RE2zjidbhkB1p+ z#59e-6G9idX1Hg*@WuZkgcx75W{v!NXYJD)f_JQ1<(+ZH88;r@zw0HR`}AeE-g({c z^1r%npYARcg%BFmN?6#qapN;?3sh`me^-`0Pmc4q`zO^bF%txAu##ZtLp3 zarNre?wxnu`TrFEPk%wJS+hpYUbN_@yKlbkOS|_U{LB-Ntye)H++E{vbg$1juUW;` zkq7XYLdJEL^>i})r9dlbRj-Zs#Sdds(r3fYTObS^S zZ7=t%j~I?TtYbNLzQe3G!-9c+d~0c{1f102(TENCQb4_0XYUZ08CkrHM5;VmrPtpv z9s~xh65>Wkd)}oZBRFgnOP02?;Mg{5u3+DO!MBR9Fi{|X@>1=0K zo5Nm}W(dsc4XI6zvvB!bdfQ;UX?SGQA*|DebS&CNNE;xmlZK9n6t$TIVEh7m_SZRS zRVNb_Llng*rD^ZTqYPB44FX59bbdbqNn37+bvrb7Z%J6Ub06 zck^Kmj=^vP%8AQJ}YtLD_X#S6W@YQcW|2x0kYzkdn#u3T0_5n`s|C%<|`BKi@|H!!d^Zn)E zMX!3b{@fQn|Atxfm;d}}1)zNO&y^owK53fVbQ3hN#GSwxEvY^S+KZ`^|ueB5=pb6@w_ZXLD-BCPQ-C5 zXA_$P6#WSv-YdC&1KhLq01JL|fH?&?^V~&r&0Wl2{`1dh3A;zrf0XNz^(@EFbC}m{ zSvIGSw)Pwola&_TFG+)T97tk^*)s(r!*ya@3YiS5)_f}UPo_t&(IAAz39_u;c$hc= zPr&TiK6^F~(b)#B%raC{wE2=c(AzfvH-3HJ zjUA^f%Z0@bpD=7iLtgw0ZJ=>%{hY7|aX>k2R z5w|_Dfu7<<^1|?@kv{fr+rX0#ZD*(gn}-DB5&!_esRsO|8w38m+Gj$ zZJtxB)c{z&eEBnO3bcyrG9Rcv+`7v&{dxYo-}jbB-t)1~zFi3M_{A4r>|ArrHUBVf zbo%=V#|_$j#qv2B_6$X2T|q|1j2#~4*kv8~avzhC%Uv7xU~=tf;ou0F+8Gmra0N(1 zq7vMEj?j8cO*NS_r^w#jRix{n6)2TjNrfY+HR{ZsQR2d^Pd+!woliEnd6VF-EkpE{ zhUg36+{d9kFg*U(2MDFZ!HQx3n51buX7sxBcO=XxSdLlPPkSN5RJD%QDox9^hGsKj z(SmNG#87U67Zgz1J{4(h(-nZx9$1CvJJe!BSZk8CmQ~BT*!JXJG?rW`AgRR+w7b@o zf@UK22_ed9VzT&0XSuof;)|WWf!RN{Hs1c#c?-UM!!LezoOtMvqR%nKbBe%ilhI5A6lezC##W zv=Ib8%Fkg7SHQp!#x}Dy%cwuB$~m2f@71|-ge9FtE{z02_ZJM)-2{9 z6ai8Qu@hK*^L5u;e%1HC{mG3R9?6`4Tu=5n_y7$+XJ_}8p-Lk6Y!$(IuYb?RuYBt} zZxBK}_K&Lmr{W~i(Xh2P_rCYN=MCM(I*aEG%IycXQH=yDQEa+*Ba2QsioOEuBtsYk z;Q1*4q?M!YSSO9=ZABuBoKMiv$=(CwoOH@uZY#$a+R;j*b%Jyx28lE-&3c8Cj_)L& zaac6i;E}C0){hvrj|dKoz}?^3PNcR|D*0dyVPwe`1v83*xxFrPx?uibA8j3Nj7&BV zu8U9>M9bc31V$yy9?Wp-ZNrG5gmzr4Ft}C_+Z1S$W<0xKA`A|7?USg8{x(TZx5EPm zC&&hd(OQU5sh51&tO5_-`=}V%yCnd)_#bp`)1BbO7hmiwT(R<}*4mAq`}l``dEKvm zy7-i{Gi2P%voZoKSTNiF&7I2ioq6tiKJngvd(%7L`LR!YdJU~Y;~%aQTEEWh*|X=B z_uu`uc`KK7>Ic@3I#M{O2r3Q3(18(_FYmwyrs50)0m2ilJadV4TLCJdcu}WN2@Lg)=QGvABUt5(|uS$mOB4FVBqr0^QjI47NpV9FaV}O|fYd0_pIM z%l<%+f%bw=qhS$wn3acF9fHAPLVt(HqWJ>|W2x3cly&jk3`%Q!Xs)6%tE!s_;8FB0rh%}qYNFn0AJSGwq?f~fnWW1 z;nx3l7Njl#|2}K&alM^=zqtK(KfXX0v&>mESbFA1K)NUH?#(zm4k)(}Ea#J7djFR% zxcD_+6hefpeg8ka2U=%+CwO94$j;%Ik#T4=1^@c3`|w?8%LjzU;ARB_{SE_NE_pv;pe@Jz!7idWq+w#D ziggMh)ImI zc*)${-{XM(-9ur{+}Z1vuYUR2tIs~`%GbR5wI3HkBv)U3v2)2K|G46N+C^{s==A*LD*>G1`eL%;rK2x=Mq<@nAM@_J9Z{*!6D}KS+*UBi52WT=(6Xq zVZ~sEzBbELxyj5KJ_Qdt+OiDJ?4YX@AWVWI0<3^I))?y`u_Q*Kte}t=Y}u!fxo&g| z{hNY664Fa0TI}bvo0XZg!kafU%dEjR{&Kj6*NU{v1`dsSlT(*>*n@kwdFvm0Y$34e znrASwUAuOzY26^a&WOD?t0(y$);cTRB1%ey&hc8*;; zEqGb1l6ue5(!Ah1uIEZM5e2g?FaU7;ou2`afU`{5wby?cnHTs!~&}ojd}yo zo}s79BOA0ct1rva{o_nk6jn<%9PrpN6w=?Bp*z*k#4OwpfMEL&6}BNXG~ zO)^=RXi|~QIMk~lgERBg%0v9@S2t*YOP)a&_|ze=#uY+5Vy#{26-(dFdVY7NP8$o z7eG`~lyd3etQ|PGbq{lv4bYo`gCgbqJ4Pdf1?^zuG}73?6&9UD$iOEO0lT&jGdMfP zlTU;w<>5$697Q)^~Rq~I@MTkxec zozdFqR6dXxoFE63S-QNFiAqEx0__NziKMeFO`z*a)R;%}|7{6D;YcifTQBORUX|8f4S-rRrmF(+Je>e;J*371amzMiR` zM6`OKMa^b?es9UO>-LVzV##ANQpCbz@776{E}zNlPQk9x2wBXw;)X;@&@&Jx2~H~; z#uYXVTnqAS+CIgy7Zi!(m?R2_9ECNKAaTLd_@0Y!9GbNX?LmVRmv+!o8t1qvL3vU! z6-u7iZK%`)iv}e9?JhQB$mgLW=h4^EPG3hJoxoU>ki;=jtZ^I%tRm8edg9R4*~aG0 z2TA-4))i^4yKvG3P%98t0tpg{H7jZit;S+rr)L}+ zbyb?lEa1R3&v13Ob}i;<;=qsJcFQdf?A)>KqLs%SzoR7_v`=r|-2Z;_0Gxl}MV~+a z!i)Yx2r+c&KfUhRUi2f0qORj~*u+pM3JS4HtqxP#;lNPD)M%6COJ?HSJ^?yH$drX| zlmXYK6lJ3kt^_GanoW>`1670LIrMgy7^}v#x4BrOaUDM`w5`P^F@E6TW+ZWvuuyJDgH@)5d3-9?cskw|A=9vvW|x-gB1k%JMAm!;8+>C8F= zjwY&4LID)ipUuv0`e45J;)|UHOP1Vitz9)O&YJEHpW)Y;{(g1fr2y~#z(#(6@u$t>7}3{?OVvo}qy@kzc)5T|!;lFeiUqFcBZQ@p_X#{hN2!2xYUJ_`vj=;av#`jagOfNm!e%U^ zV@+Oo#v&FER2e@wLPvimZTUPBMIj$BIn~4y8sC*DW2ramD4k|HG?c~*a(I58{gdG4 zGHGg^u_&$5>#r@+DvXX&)TxySDZpq>THZr-vdN)gLm~qr6H&|wvIsK5QjcTyP91vI zQqHw&*Q(YtTL<0(@QF`totu7IpS9(9|rRAG7zs1f$gq<5QZ0BbJL^yny=feoCc0 z?QI2gqG@Z-Q)x6gFqB{&7fl+3X0;|(3S%7_k*2pJ$Nqie)T|)yc_eX^>OMqD0>q>p z;B*(@k|tmlrRDhLgY4M4n_38oOhbGM8JD)a#5I~QPM#CWQ?$fktuy-yfG>UJU!P|0 z|Hlmlz_G`kx&gRw`dqpC>Z{E&Edc*JR=ipco1Iye9h~ji$vs-s6U$^%uxDo#FX&*& zoHp(_5T@4C>7ALA2I&Z^kp?X3{UD9T$z|ERXNcaO60Yk~t%K_-GMOw|OOnLk`vT8c zvKfmfEJ7MiKXC!oa+9&43N_#R0Jb?#~AF(a(FVW4x3SoN?IAZ!b64N3WL|4rDs+jxeRp8Y-7gE5=)QjW5&!b zk|bfqvV}bFyfZjqRVSyNxRhBliv$HrXLpfoCcq-G!foyEK$#GUBy3nRMVOo%XR?;6 zL3JFrMpV;dKiN{@Tc#<@LONh#Rvy*O#8`z;L9+po24NLl8A&72BHup4tX#SB&@=IE z|J@ECT?wdX(>eSv*HN@?CjA`0M$$iXj?UzBEML%#unHwCLv_PM8TN1A%d(~I6m4=O zC`Tm;*tD3k#-tjMBnF|-N~QdTVZ+qkee@6dlxyi&u-S~$FeWQ-9S_$v;7evLT~0@L zJ6<4|HKPs3%~R}bqpg%dXqdHX1(_0 zg=VTQDRpI-oD}Sx056|GH4|)Nuu`O%4<-#aGAR=nV-?n<33n@x$#HPs1dRkj<&nge zykqFeS{%p0D|GRuOD=d$*Kpb@)_TUJeTqH$OvgZC&Fa3|c$HCWYrnArM011X-Mni&cg=R&@6DAYDnZ;4^FP0B$bF!X@+Q$z{ltTo#?N zgr44jp6(pEf*{B{NKYY6LPsHwv=&!d9GTMml(E!fL1=wCOCH;HOyCsqIKE7We#T;y zg6T9!lY+p61uG>=Y3B8K%xV{GeBuyDms&#;xE7TpxY|YOEUQjhoolYS<{xT){ys|x0qj;}HZ&8>+^)d*#8@L4ZwL-gC?={g zCm+*=pM>aE47|mp?0jT;_bG#JP2QA>@QXRN?r#!XL#|k4tYV0*AOQ?6%`nwzX`#`& z$-KEU>FDeL$DyY`Pa}z$G1!mHxHKZgiszrkiKoqD!TdG`dvo|sLbKVxb3BY|NgRui zE{@Y8`ALT;wvctuNsYbxBm6=e=17!vn(JY)t^2^BQCO>Rj76xJ=btc-q0tIcA=G0{ z7#n;9Gus^N2RSLc%wb^HGcDZy`}J>41LgmA{pJ65@zknAiv=DlrRYcQZELplSt~Ai$cGy>Bt;!>?NDh9XTp zM1ZyeUkFw%?PKTm5k@L75hWznk`XzgRLM9l^+9ziZoJ=Dw_EHHa^ky@P4 zmIp^0vaV$D(wQVllOV|9Wim9Pu$AecF*+fMVwAB&iNYjMt|ly9+{XAsohc9avy4^*S|wC!F(VTd zYW0vfOwd*n$!W2BYBT{5j>clX8cL6>WK+ zm%n5M5=%3IigMVxZ3;K4vSQH3gbf^%cF;ykq_$Y2NNl=SmsY0Gl{iLbi>%vRp{pyP zQmzAnI951#IMTryfgfb?{TyK>LWdEK=b$4+;7c-r#A-p#^N13Kur+cyk8CcBj$`5| zCYvoF9ET)Hea6}dv=US*A)$h)rpwIE0^7DVNHT>~cxKYSO<{Fw zEa;Xj>XWSBFhVtyj5Jd;X5JS(|MdB`Tr(_LdQ`nNzLU@OCI0`%_4~gbKCPd>na%q5 zPsOlkS*Mvl*hV&xOof(mBH6TgjGmbtEL-TKE9F%AD^kIau<3M23Xx{0E0acqCLy6) z(;G96k(At1{P$SVy3t5V+*>pyMWCWt>u> z1db$*Q%<*1A;u;srBEvENa~FSQIuMelElziuspf#0LBXto`cmY9RV5(+CG(a-zsmV zbTDDWvbpV)vL3s4Rf+#U?*2R4udBZEhhKZ|Q@;K7d)0fF+O|S41`dU2?T74!GI0!-Igs`vU-=UbbI^u({}m&ajrdCzdxS!JS)tD zn6s9xwfu*CrE~V)@BRL~i}RRi<#nt56~WC{j-Z`lpnuRnDdR`*d5yUW3cW{qdV1zg zO?1>vH!gP@mlp7~pb-liEf_mJ%hqj!EGs&)G|6WTnZ}bc?=TkvfrkP((_*zUpouN2EZNK~Gi>~wycvWhrO32ME(yl;y2 zYX&G3iYzoC!;nN7HWMUShLj%dPMoVnQDj+8%{N*x3v)3A&nFBlzElXWg0s+RwTYt? zlUX|L4$e3{sTPHOj>I^kG*|0)jbPPM%bBwgUagncPihB7JDigklj4j9ozs|7I9#X8 z#TzTQti$PZT{=S2jx0rA;H2c(SerNv*|2fV0{<60AN}ZMN(f<#fq%s6kW;5R?y?=j z^p?O_MLU&DjCD{rF28I!UZ=B2|K}jeWG1iAH5TdIBB)Ymlj4e1cJ7;F&B_|}SP~_c z%w!~KiggerDM^+ggrHa~lf)@;H^v!}_qcZxN};0UgYOs7NE)3kjYg9wPB6yc`61Q` z;#8Aqn|G``iPH)r9C$^B2g)2i-9i-0n8hkntiV}^v5PlTYq2Z}!KB0{8P{Cek1`(P za~2~N-3W@IKqyBddTb;0WU04u1~`y20C(CSrFZ{t0O*l5>((^tUBl7i^Dgj9R7;X} zlwlnlIWf!1)%|Q4me@`giNG0yGX|_Bi&L!D`2k8k8qn4-lldG!)nv!ELE7DzR6`PH zSmEKEM-*w|*dRne6l=PX#tI2eGBw>Ijxz?Tl5(*?p*&2xof1cREqS-wMQe@k7cdr_ zF-YT3R^c*-r+k`m%CeQc)Z1Og+m4`I&V|0t#~GI&8ph^qR+j%+gp%0IQ1LUayJjT^ z51nJC0dZH5CWdm+r{1>gKiUz)OO|r$t#2tTTIt-6>K<^@O*s(Ua>3T4)*E8?z82sy z((lpDppyk0KR!>PRO0fB`*58Wo-qimk#3O<)H#c)g+buuf46|@?P1T68CDNhm~SSu z6H6!R<{1*6B1tm3-2@>#3WYMpDRXMHh4zX#rO?{uw|!xu=N;!kiEcL{NfL05BuVMCyXZ_WiheAa z(KI^|S(eusi@*`cCMU;Z{Qf@DMTIKP=Au8Be+0tjq9sS(ZBLwX^HnQ2b8?FDah=bs ztfi;7KqLj?4tl&e#K=4TdcW%eBdnq{NNcbk3T3L%o*+QpC5A>iEWKdxD^a?N4w_qgvoGwXI9ucJyioiDtA zGouZZvTR*nfha=TB&W>{NaumGSZx+7wHLeMoh1%?cy{kOR<7uw*_5PK(n$?Y3)kf={)$+CLl8Y|7;?)1Q%Kh{8dE$vDEWk}S-0))9JJf#Q={dFYVAG}6BS4a- zg6^DSa-z;vSFNMq3^vU#Pgdu(*}0H1FN<63QN?8WC1BT~c?PN;UQnjlQD|*Qqb?>* z&|0IEPnxC}Z3%oIoB;>*E@pl0*IWnUSCaA@nLZ+Ng345>p?&K#T2v|>$a90`(F_D{2JMTs^2 zkac5xogbifapP1b7t~}rkHU94Lk5z`Zorunv#eNKV0<>lS;6?!EOC~i)7+|)X-AqG z966P5ts^M-`OQLDq_8L@89zHmqu!xdEMRR;E%`x+MPQ62%}lOCuofj13oXmwK#BSJ zn6q{8%O#RDeQjKhBd>jwRxU356ekQ>no$ibmt8!>k<)czDamYsM&dX%+hMHf+^PA{ zyYAN8vbVqMj^`F>RQsb006zNBJ_~To_18YT?b6G|OQ$;GOjol1ctksKbag)dICg59 zt(UH3c@OAD8)YZI;$fWM3WI{rxp_xpp~aG=Mb6E1$&%cEi^&gNrF^v3 zWU0neK@KD=EYv$#a*?O8;DqAr=s4|WL{KPVt-}dLCrXJI!K5(`izKrGCoJtYEE`eG zO^q>ChhlFncd(Gpo^kSZ^|x5Gg9;(gamunD#n!dG?0t0ti=Y`98j)dgA?477amSm! z{Ls(+vbf{NKlDX_ZHt1sA2kMGF`r`Y<~QB)#EPxgi06*Sj5ZZV&&6~igH(#y8Oz-G zBpbH%A+5m}nID!`gUK88jMijnmIvw}a({PEKQA4cqgM7wy%L?SV7}2NP7O}vdL6AT z+L(L;&t=&NEZQbCTlK~7!J^ZIcDn&+thM%&+#+BR&g6aY?KW3mFhtUv=g7ert32jY%R*OEZ^K;2*=3t{ zaNF(geHz&F1Jd&R(4Kql$wR7y5EIwjeA_d#rdOP8VGoQ)G!vbt<2g8WY?95}mN2Lw ziz5)Z=tXo^9(G+A!f=)9O0$gszm2R=z3WsnS zr6iLR<0xNZoTAk-IFV9cm?udRJf-kFZ!v%>2X1B&*u8c}bYn+vMS)E?a@L?~Jy>Ir zD*s-cbBk=2Mgzi0JSQ+|#z@VwV?&8k$Ln}X(#-^|$S_scoSskZtQ-usUv|U6i!QzN z`*+=SmwYW=|3_*BaQEGJJ0XPr`0xJChu`xPKliflSLKZx3iizx)@ZgmzP=uuc-k2|c}iRLeEGQG&Jt=RCTxp&Mt!+M%t;#{kykA5PtJ z(Y94g%=pY1?{!tLlpaE;*VBKT(^&0t`X8{(HW#ihFwp1N{pvjBq9ThEu3c5(;*m0O zY~4?O?o)3q1I-N;0wus2jS!NyC~@%A0vk6jVRSYRUrDt_ zI7gOgoXe9KrOX9*#^#u;)lTWAhDbY_iJ;!F?p|DE~8U;WshdxYO#EPeTrJOEz%xz}#m^2uNP_{ZhV^Tu5kj;mEN$F1~mb{Q`*d4c?(KCLhH(EQ{6DNTo2D#xIpQGm|?;{Jwy> z1x@G&2<0!ja1>dZk!Bgz+T1IiWu%# zv=iFhF0F1G;WW}JDkaCVr6C7KGrV#SX_R5Id^?q9(f+q6Ow8xM2GSH<#x+;0W^$}U zs|{8-ToQB5+A>9Dx$X9Mi2we#pX9B#z56c~*T3Zdjz|3B$A0stue;^Ob6J+ktJhWB zd#)KKNi-nkYX+TSX^vL}`K_R9UfN30aoloFmJ!e57P0;9;E0 zH7J?JI!7}SR4PTL<|Sht1*H-?$?}oKB2dW3R`~_MIgL;P-Hy3pQy=AmV&B09gzuBZ z2_Lw2khML^*7}!;U;oWdyn5Fk{@1q(Ac;hO5_5bcRUB2n)*Pak|>*JVi<5%1>cD(oTwBtMbx; zDV8m%VO5z<>PX{mp4AT+ZHbd)asFGv^E^uBGR{b{C?fESBpC!nkFcmvN+M){HiB-f ziBpHRiZpfD#U4K8@`F5eilJJEU3+KA3RTifgAo`fF@-$Zr{E!>FraI%3q}KHJxsZHWsZ7%JVSBkffTRP^4Hc(1|VGOc0a;=BKCVt5pcYVs71XIRj+0 zCDR&&L?H+$4qx%p&2pIUt)S8!dgwe z(Zs$6+!mcUzVG9C9zhsTDD}{8Y0Bju66v8;k#f1j!t4}MNRmXOGfNU%v=LY<5z=4W z$R(a9h*~f*Smx}RCZ`v`D~F^>H^1Rq`}%j_7UO{Pd=i6>Vn!;GD=+F}|0~ltDd=XB z<$Yz|a$!FuVJHWl7#SV}&j|kgHs13J2nr#l3WczD2qaREMzVtvnkFvI;{l~<+1y~EW?9UTAdW7KneM}R>V3%sx3lz z`Jr#}WJ%vIkQqg+9abocfy8ExYAsxJd_a;|vJA8l7z;_35t|I5pcM(0uB>uoG^Hs6 zj8wQZSN#hqbML=#NGI_eSTd}%kR{xF<#JA(n&52RP*3vjv{sY^&e)ORUUBpF*F7SH zIQRJDk9+^WWVoDH0KhpXFaP?}|1ndQ)E#GV6V9NKf1D9vy2^?DnFL?h@XIqe&3Lu;W!AoI|dqELO;}7?q}A^ zh(vGEH=q5RzbxJVrO*B0k22-=|2_i%whs@FJn)@wyy0K}`Lk3-L4M((v;6IM#u<+! zGabQv1P5N)$0a*@DFY_TaxJxW2w`(zm*x)N{5O@@G{rd0D+k+bTw9{2>QP^aiJ}gP z&OPHM%V+md98+(!h@uQ%O3IahC!asTOMAu{o3cFq$W9sy9r}B#)a&zDAr?~z4YAS0 zNsKlbi8e^#)9nhvz7iWZ4YK=4Mj{_0G0 z-AWcB$5dpwZ+D#+kH(^(#D46jKInb<3;+1n&bgKR?_|aw$@hQv-FM@hD}C}W|Kw-C zcmLO!Y$$Q}y_0V=Wr<^Stqjen_HxEs1=i79yu|wK4x2T$v1>Fdy^H?;YfYSDWm9^$h>~g~vHN zn_xxm_Q)bl=ofKLfska{kYy&10~bECb;}i(_A)n<(a08aE0TN-*tuC*VV*i1$BkpX|iYXCNmmU)fhQ6LEGow?Otj(LR z8$iV=RwucC)~VOyAf?Oax=FW#$WpfN*umKa!Ng3;k8!qu@fB7W$J=tZZp3-h*7%S>={FPbmV7mEaO|5;0U%tY5o?@mWm_ z%r_D`S%C!+GG_#VL=J~__xz*Z{we3&h!Dd5pMLrOe-HpkKp3-d-S_YRX0Uy!GE0Xm zVp0Xn1r-|BW2$4Aiv;ttF}<}m*KaGMyK$bTYYajgqyn31Op>AFE^)I#;7K-Y-^#0} zB5c}a$JQmx)DyC_n+I<=Nv18Gc1G06X?bH4tRM1~2gi7LcQ5b!;4ktQpZOySvcwRyMc&u497|87-slNA1pIbY6^5{o|5bo}~ z@BWee4jzB}aV3PXXHT8I;=l`!ZMb+@!Opg{ObP)J9?ckby=a4 z1YtDjjMp=Cog+(AY@8zEj7^(1(z{|kyZ6qrZa@;pg3KubPhni{w@f z1spxzd?hB!&{2d-BOpT7b(y!~Oki+_9OL4|VZ< z=Gk(huiOYx=Tdu~tg%o7iO0&uSts-5=$z&R)G zz4u;q#~pX58*jwB`R1GT&gY;1neTk_s~11L`ML6^>4l zU=oAVmMG4sluCT+i^mbmui>6Q`AwEr1hWVCGhpky`z7hHV=H_U=7H+X)hFafu$|Vf1+roI= zA%sW0Ytf#=35Z0Q<4GW1KGU{OJn>BNGk^bgpLtD8`J*-iyz8#JPJ-p2J?dMTM?F+Qx8H(DfVLJ*et+eINdD>SM=w?mPE0 zyn2uqUN}QNQ#j#aEtJX?JRvbzmM25%G>hhsm*OMg~r%$!7TQ zdF(WE^#-pV*GSi4WVpcWWD}QaOyWQ~ob>2+TXfO{UpOXbG=KlVBtP|u|HKDB@HRSQ z$JqJ3m)Ja9<&Jl5&T9lf?Fl_{RyJ1=8Gvwz>N zl`lN==vx5!tG{|{xERH&eiYcC#h+0u1`%0+uiby&pTx6!`-l3+@bf=$E93hQ^5B;qV_iw{kq>R-<&#am z^297w2BaNFoEQ?b7%HVTSWUepSvu0o#My*Xb&z3^#zKRzP$cyHT&I+zkQt2DXk$>) zqFZg=bol^U*Elm8p+rb0c1R_NokUlwjOvowf9RZj{>f*rY&PAtd+xbMfApgt_3yX? zb=O^Y$shFlmp`Z%E`)G*-g&3F@4oxYlTV_Zb8mU#u?PRCzqjOF`(aWWJs9@!T5_aeCr&oPMd{R3pp^zp2HDawhW?G zUbv9PnogWzt%tRe)Hn*hTh7-%{WXq{N6aOPnaG07V_}`=Qydy*?FAR8?b`?K!w-GqozA)6aL!fv z-!ZJ>d|&*pq5VbRV(+`}VCtN^?B$nVzG3zH<@SoJE>_i{DqRak27sa)84@pK*Yn4? z_fJ2|o8P{HWdRVy`7O}pK5UDnPzsPD_jpH9Or|qL&j5Q5ciFHiWU3w^Tu8gCNz!al z_#=pn04sR-*#$}~Hqz58x$o0|$}(>sh0cDSd}tppK6iv)``FFAaLi-haZRVup%o`A zbULI`(vCB_QA(63QUX>ET3+7U!Bl%`M{VLxM4IZ{f+$3u_iYVUXZS@AXEZhCc>7Ju zc;IVCI6Ld;Xpc^25W?azAQMzZ)=*ovM()@!#JSTaE(O-@+O;cl&T;3RcbeBCUeDL} z|Joh^80TCcY2#mBdGX0hFS+7kr}}zTsn!Qp=3aT}Q}1f(nc_2_{yt}SJ;RmTdKN{X z5~micm!%*m1Rx+yQ#y?nX=>;j9OCetV`@HP1v$)X5r3`u6uQqfK`1_r8p z<-6y2`;Wbole=Hw$TWBVUQH&5{JBS+Z#>KN~N=Qh6m_yngXHE}y8>Lj`5!=@y0 z49YUocC1-eW$awWsRa;450iCC*&NVp9o&rKgoB#_Bii-+ZKvwTpCg9>BFSC zpwjbw{4j50OtmG-ETT}x7Rv0}Kf^^^S1{dBU_3HwNYjWY(HJ4fvWTG6%cs6}iVy$7 z?M$CM$*xBqCN%R*pB?4NCr|V2<45_~_if-TA$x|v@9m9rI zKF5xY({u{_kRPt)<=QqC88KTFS)&?z`;A}yxy=uJ``ey1iQ8AMFfrGn zD?Oa`@W`qD`BXDfH6)!mwr;zIt2T#>9%@mpE+Gl>+qLinQPRa)iE=*D^TAqz-YPGh zoaW=pLzE|&UdSj^AdVb`0BoEgJeZpI`2H&m-hKO89=-o-yz|=SEW6-(?s&sCe&-{9 z$j(=0>FeFi2X4QBFMRO@dP-&dZWEU&EP`&NNfJj(=Qj{^m;L85sFrcsAU%aP87#*A z3b)uBU_eR_8^KK%*I2beaOilGnZz)WNQ?ky6gD#?NsGhnLrfL47!ItfEbOg*`mg`T zSHASQFC6;%SH3d)(03kw{;hAj<(oo?&UyG9$b0U&$DTPc_U1<(`_3;-PMj&;{hvOu zWqxvO^}`Q6>~{C}$upA;nyJjgk+3LFkZ73e_>{aZ#g)C>d`rMzJ-9$qYy46LVHbl~ zq6i`Kj0Tj4$x>9IMC6y*^Xe2^HZEuXky(rsG@~x1ZV6(GtCd*0q@V9UbCzW*S8(d! ztCX@ic5L0ih41+VPVM?C6My|ZX66&@;c?ciEb{P66TJPZK7{g+Xqw%KR6Bg-G2gIU zbD789BV#m7kuWUg^It14#ET9FfhPqxkHD9Bet~S>@U|POm}s7`0(C7Io3aS6K-VR> z)X|!5urS}nmq?RlB=JApe9!Ox=J&#CIqT^ea2H*2(f(_$x$(aUA-d<|KJc1z$vHRt zl`nkZU;p$Ee}C(Iv)%SpIP&PjkE#==jxt>BWppyb7>V=^%2UKi#!TW7WC^8Gg==qI z%9c+H_O=paH4jn?LP=%}Q52)3hw>FTL+TXX&@j*K9pn9PmN@0pZfpFa!t(`D41OUX z@*=+U-6@7wE@SNE3EHy_F1~ant1tdZbNkO}^|3pCjZ_DG|Jx_I?(+3~`_Tg|>+7M@ zjY*AaVK`^0Y@S+Z=Y-Mn@C6K{U& zTmNEFSMvjL2Y5dSwC9{tAOGcFxPNZ!m3J)d7lb82V-jwC(`E-&#Cncfwku}FT1>Yz zuN<2v3k$RwU3x}Bl19SmqvO2!x)DD2y`!|-O-xY4D24C@7J>9Ugj9=)(EQK6K$$%+ zpWvd+BfR*;C`$(folc5hD${MJ^!6DZc=Q}sUVi~QAAgZIU%P~3Cr4=)dRS(U(p!SD zdd$jUk9~(nx%!gj?A<@chNUq@<)}9k;zU!dz}yV1Utgn}B%E3RmK3pRid6z3WiI?M z7EFqhg1WPmwZV2$-g3t>I`dPUJlUmCE3+^e(_8lOWyZ>0!-W^FU~uhn(4d6n4V^i8 z`jsy@Uxr(4>hbv3B~M-T?jh&goA10+bewbcd|LefX5nxB?ce;>N4wKImu_5Mrl+rl zS|R!U-+DWwkw`j|sAiM)beq%X5*|9xA?+)W#VMW&IB~K=YkHQqzF~y#92_MhBa02r zDuj{<-$Q!AqQ~09YA94n92}EOPItL*(*ToW3#=$=>Wvn)o&wGpN=QEQz-cbId_DVi zpXOaRucR}%z^M~$+KtB<9gkSDBw%4;ijieSdWL#D|`lO0Vc7enZ+w8=Ep5t zHuf_)ry1*j>rohO^7zt4yOLbAtZAc>N|1HBxU|cA-?)RxvvZu8))-Zw6DJgz<(~W?48r#m-%`oSHQpp6Fo1fO?#< ztRi{p;Zc6_r!V31l}CAex{Fgj##)?II4Kdn$O~4SMJPq9+l69{7Y;6P>zg;zv5tDz z;Y&-g73Hz6(G1m6nQuKh$$Rct#pmyPp1=H0H}I*???$eFiL-}KabiaE-nR^J^7J$p zZSH66@eboN5zB{5)Vp1DYOul)X9|gA>9P?Xc;*b0M)JM_>mwvck>qi&d7m9Z`gF4n zCNiujNp8Mkm?yr!pRR_6v2>iJ;1bpr3|C*;!^PKMKyk?kJ{=+B7IRZ`y+!lbTTbk3 zb2M^%_ulF|-ut0ny2?3s$K7||y>LE>h5yY(u=lRt`R#8U-TTnB+c$(PtJP3Jm5+RA zGk&-gn@v%)ZT7uzhF1WmBqs6gO(V6u$KnUn{fnBtdz;W|F^nJ4+; z-`~OC|KsBvoEQ6X_ zykZfP#W_zaY;IwpL!H zVDkp74Ujq!?Q^G{nYwqKT43G2Jt=#iT>AF$iLs^k+;h)wZr^@T0p^Da0Peo~ZsD9O z{r1Ox{c}-c*E@dq*RM`bJ^hSYyJdvpnk}+Ae6i@%&l0#3jJ|Y$U60LCD_1GS9iBa# zQk04;GMGTH=cTi}?pElOdwY1m#9yu4?Wt_m?ic4*ioXLmU-^9rfntlw&Y9-dtNxqRoARy^%qCkTW?S( zRY;Y}I{}o#DF?zXcB?CNW{F)N4?i`@+L3^l_h&304oGxDv)-YvrpO2xo$YW%pT~>O zEbz#Q!}EnafRq#b-A=D*u+7{vcGYTxn9i$gGJCW zM_UkU2L+FVyXWctc*xC{kMP)6rZ7rDp_G^F0B8*|K&hNswJE4-ffr83%*;$sD+f%^ zX;zL1q9nr)0!m?#hh841?G$?tOk$Ii%^QZf_L{YP^3VQ`jw#Yp^|<*0OWM+$o^BD; zitIZb(_2+}?mUns851o*wWmO*(c=l7NJ{$YOO#Jz{yEXe_zOpFHce_2dr8tdD}a- z^B+F;1-Wh+xJ+@&8NcKex^lrduh{102fzIBefthQaKQyzpLh*;|4;zHYn1QZci+8bdg9ET z@4m5UzW9aj2cP<I(PMD7yCWhnxQQi8P6dzkeJ*m(q9RAU{Atdf9C}X|K$ZVk|nFxP@fp5(TK@FS_e06?})26RO|~+Jn}y0 z+;0gXn&->yZ_(mo_r0)t_5M9it^Loxb&>tg|K)rBV>=h9cn8SzH(0ZF38iw8!~0JW zgb-_3Rh{F~)kUPUq*5@^PU#s8c>I|OF1ltjSM8{9;Moq=^T3yQqL42%EQlgVjYUJ+ zMHK=be0iKd`iae0J&p4M0w1Doo)-3%@1AAZ>b0CaQRm?44*&G^LtK18FH2VS^Uw?P zY+kO2V%T%A&F<5dB}@B>wd9pEDVI>7H^`8_B+3+iASi?xJCC+8g&u^~SYuF1<(4Cp zfs64d=Jr2n$vT?b-r7$|M7;3A97+bXvW#wK2#nx@tu=O@>hkGl_v8QheyoF$rTwI{ z^H`0H{T%Cm_@-XDvYgpRzx%-UpZkShSt4NUt{*ZOJb3V+19|{oCW4c*F<*FKk~iOS z8L#d?j8m3h`%hnE>yFh#R&w%m#4VQ=xc|{JoEi7od1`?zn|e8UGNEr&vwVrlGa(2W zpVwTt#pmRiF=jJ`^?U>p=aSt1X)MmE-1o2ZSXk=?^s0mpzUwlM9GzgM305e&af4ZWV^r5DEd>5s1CjTeM`c~6Y+3mB2&Qi~9U+*0f10d0~XKXgk~9(!(qkN@lv z9(vj%^9t14DP0S%9&hliXXp9QySMV-gNInLGUN~cwiY z)ns(eV{oWQJMHrHt1Z^AED~T*PBPufxcK4$4jdULRuW}Jo?41Qpg}97^l_$x5CVxL zZO2@(y~uFC&p*A=#D*cQW}bDTuxwvdyzsT1RN09J)@|R$=#j&8wUr)F0Dk^W z16j3y%)RvDv+o9;Sa{?S`R`=`{@ogYPQ7lmi)?qHBX_?rOUqM4R*@OYaA}Ym-u)B& z)gS#4%Jbtwi8Ve+t=-m1s3$%upJ9Ht+nOOa$)o8sBr z>uFq!$_!G4pc8D`urQP0N+GfD z6Lk`XwqMTr4I6mjz~53U_0sM{RQe<|qnFm8Dlc8lG&M&k!imMQOh$5LK;c9h9k=qQgyny=fy8CDDxnP_LU zkW@lNH%fT#?H}U72foS7*f@T%M6?hQ^!71O?#St8WPxH1z~G*HeyBG;2Oy;=C@aO> z#DbVg1npuGsWhDk-gM_r@U8p5$@tM@gvBCp7BR4*hw-BwqS(V&$xJ(AeKp|u$4~I# zU%H%&*DD@85+O?kFdi;3NG0$+2ioCWOcq;YC=jZ|SH3^X+iooJDejf=O$S>)TDP^7iAS$DmXUL<;X;e zPV!`unU-b4)-tc|pQB?HN@rwNA|Q{L#evYcEX&;sfg)=}Y+V&_>9#&T`8O}3k+f1r zrgM5&dxBCiB%+P1lyJr}ux2ZlUUwZ&?>$PnP@-cpj7nIxsU)&fUD;nP*8rY;^2zf~ z3uLuTTXS_eyD)FNLK2iK*d%4;_AA|WH{Osv^XlC}t*<|KczA7kDj}E@5642s(x?BUrRkb zK7&hZ+;mef7hko4l{+q=(=CAn=R9s(AK}RbI_(8I-GnRFIyTPEvrrcl%R@{|ci4F( zCQ4(H4AKlXPHSE~l_A407bu%FXZz475#mIKM&PLcowgCq@DsPK<;0mW&P_w)NoEsA zViiT>2t%I?1D?PY6;?~Gf7eg)m4EyjL~|N~fMzRZc=Z4aaUdoqC)4vr1nB!Egix|l z7Ot}8-( zK$dIlKbm4pz~E4oijbIefv7%(NE6y!LqlnFr9>+!Qgm%T{d=nz9~&o*9aDA9xjD`B zEIhGi4pC5eNgWqAka{s}B=rzp0ii%hi?SWku4PTX;L1%^?)~x}v<#SNLD%G&0wyyo z?JY7NDUQv~Qz}*Hb~+^82xAs|v_d`9 zR6$5pTL;kS*(b`RjZ45%~e*&6G%kr}BikKw5%8APYWz z*~fMx;%-c0GPKbIQXs<$)gDD_E=G8M2viq27~qG80PeU0ao>Fq#i_9ZN>!hp&=EP0 zLal}%mZ?+i|?>ra_E}Y0S4tBFAJSVRRD4&owwRDe<&M)yJt7 z0-8~VHa=S9dJd@^hya;6=(PB;H*MtLD~C9FQj-xf+sY$p!4i0uzCM9bpgd4g(rh=F ztIvZqNKfFaB0id8IU~~s-}l1v)dgVFROEz}j}rpFpa@GnG};k!^}51Ys{J+Q8(sQ) ze3lNEKr~SjBIB6rSn5T|b59)OmbdQUnhj@pE!x!SMjh&nl-bFQLucAlq({GJnd>f45spq`Fo5#{Y|+On_MkFH z7Hc*R2rgb1^2M*6q>bQgBO%Tt!uQcOp<40?LW#vPxNjC@J;qxuuJZju^UT@^9T`-Tuq@0Ns=?|_LwH04q2>75grC2C z4Sf|yY7{dQUAo8T@g~pGFa~Qho43>$srE6jdOellKEjb}vB_bc`oec88OPT3B@P~4 zV0HmovmN3TzJC81Oez?tDO!o7)fNobYV=lpHpf1DkG0vlvIJq3RwE`(B4*|qoa+b{ zj6wwY+~=KdTZvD?sbd+jSKw?X#q$*?fzT`p+Z5GW9~WPF879(fS+k1y(G`Sd9;Xvp zO-Ya{NR2fnlUgVKBK>z>0Dz&PApu}a+lY#R0um8FzdZ>4>v z&gsWavUW`YzmqXOrb(v_=O)`6dj*;iSPzD3KGSms=@r?$w!+rcuwksgllxm-x2;Aq zm7E!G66ln3EttK5l5R_38l?aUEb7+$iJ8*jdr z-dZ2amaXLYsRLw#eFznB{PY;o<)tFlIlH*@&V$+SVoig!i&^QQouFJR5R}S0qP1m~_rXiY zx~yFqvZ~J#*?^;`8_d?BgJQI$h)fr!Bz-PF6c?<}yf`6fMj2rm zu|#F89e@?fs;paD;F5JkzV~v2v02NTE*-!rK|0r9@4n-lt18N&pueOEYlHOl`z*8j z5q=Lnn{KAK@_LRvc|Uu0p5)qV)?l(ajqx@MQyB~GgvTGXbP|Ct9hIt2)Ux#VSJ=KZ zWb=UJ<rkrbPv8Y`F$r^lM&B~Q|CVI1ti{{BhNNhlO9!eTInPIe<($g;~kMuIK za)=e*ZZTUotgE*9@i!0fws&61ip_m2UAKsp}TfQDKvW*8n^^e^0(ck4GAN~tI(qCc27N6-SM_E1? z5(FOS#xv5g#6wZw@d6Fm0tD?IT^ z#w&A*u;6p!j$U5bJAp0xOphC)%;E<{gbzB_c%H-ep?_e2Qdqz*dBky@und)&hnFRU zgg9$J`e-szlblyK|D#8b<|BYCsR(OnwKFFPST_*TX-;BfiK*#P7MhbZ=j*f^b-JC1 zijY|A&_bwxtpJw^0fLf2_0Py!YD4AeZz zGUX5c{MYcJBg~FXas1>QJD)wl&LfsR3o$!Z_wkN5Zsc44{1n#nnd@Y93={(&l%<?{MG!`)G7v?WPrM+;j=2_dd?{ z%@z78F*~ljg0Q!b#>{cnZC`^}b`j5i=MmPt;YwawSjuPbJIDua9^vG%aSEYi$Y7#`}URP-3^DNwc^gu|%00a0y%+KIJ>RF_M!ad0<&D>_wkfFui{_FF*GRAG~uTfBYAR zc%35O2MGudBhDg)l_wV{B zBkL-h-G7j0zQ2>lo<7S{qndiraoZc#aQN_9@O)-Vfq8vE(H!2*rVYCt2v`j<}KG5kBzYpWx|d zcD_EazGP_u-;+oSS(@TphLnPZE<`<&`|dx^hd=U8dJC`e?)8RW{pc;+{GoSaOr2BD zJlucbBOa%rp!`OBF?@@U_qFKXV8F{KtKYthJ8mwq(CSd1=~5jY;KbNGZJl@0dqNUOue(hrj$h8~eLld($Pn>q9ql-7Q;q?!M=E@ab80 zO?TOIYKEv-W~Ld@h()g2l3<*Na3+tBR)UG~aT-(ObTe4KbQu#9Q=C0JNf>w}smX(} zoJI=e1LgBz1RwzGoD-k^)aM6uros9&nknaA*h|5abRx}~W&eR!UOB+A6Q@By=)k*t zHP#Byxi-iT1g#DnpN(-PIC~~z@${QB)Hm>qA?YC3c(X~u0D9gXk#2;ry}0{-B?+{Qh>dq1-~X9#?cjxp>y7bASf zpZxwmuySe0Ew|syJ3ewN+io6b>zAM9YtOZK;)&DLuBmYNRK!%>GTXHX86cfTVhNN- zPfvxkv%sM}`#H2{KN~l$#U_n#npGvk z`>ytQ=TEyI$OjQFExG z$Ae%08omAfnDu>h+Y6|PqYTt4-2b)bc=*Lxe)EItICXG_+1Z%MrpL^DhjI~Yq9}Tb zzOu(V-*qX|W0OqGv`{65=qQd&BsAIy9rI}}*;?kZo8QQXf9I#U_=?9_^}n9sySw1~ z&rdU0D{#8eppi*HVx&V@jdI{CNxR-*=gZHqCxkSCpZ)buFm~n~dTtgYng{uOSyx{ur5e=SMsF?sAb5B$TY*?l->rlp9qVmj8GjSL%AnNGLM$Y6nA z|M}106nyx`BGXe5g<^{HVv2o(bh8ozMTJO5dB;z`k+ZWg>z8g~^GJiqQ$8cZ6~sb< z(;4UHW3ot44g_ER>OnsHr9=3hptPvQwg?)o$cu*?jMWUs&g@~$(tX_g&MUe2vSla? z%O5$*x1Kyl$9N3(hRjcNu`+-89v%@88<~5)2YMM98l>CovTF5eCeEBan57i z<}DmOd7NgJ<<$559AQCW9cXK*lza>h=}E@t4V#zt^9TRsK`vY``OkmweoDnQQ=}Upi0>1zCNBP319_9USRdgE(b6trjdITc{T&<7d z&?X4_*mT_xfBa{+GjVQ`?E_6t9_X?x9ANZRhrohBFxN=YE>D1a=Q}<{y9+(l03|FU z6Vy}5u^Gd;xdnz#NnU#KU%B{#K7R7IZs#38c_o7zPjm16qkQt~EjFzw(#af&iSYsr zo{vjFh`jk!D#hycE9vj=W8=on^etIR-*7)YwJLGfpt=jhnRQM`;v`GXTL56QJTu=x zv0P-y+GRK=xZtu&SiWW*!^@X3I5Nz{#4KT{ffKoFqToqx}WOQot|Lfei?be~uMsxlC*SjXT(}l?Tw6qE zl4UCf7~ar_8R#btmeN~Z!f;=ezxvEaIdk*?tNZI5+I5^A)n#}`yR2VZW_&E7K9|z& zrf37d@w1=7FFi^4_0#13d#r_|9XK z%w&S%l7PlSh7uC%Je&k@cuG(z2drAZjx{R>nVpYWw|)c5R<5ERWF*eRk6K8Pw~9(B z&mRB)U~JxZ-Ay!w{z2BP*+8wQ#QOEyNTp=k<(E?MeA?{uv_kR52{L3f5$warn+4&+hmc2%`&zdOKyIsZkyn=a^_j)P2cV6PEN8nCMDQ{@wFjcWsfM`JeZ(<(B6- z_t8J)!99lQnTW0>53-RGV;!-BII##U>(_4J+8eGROEbznJ@hOcX8D$_L`j!^*}~{H zN#&PgJ#z@Zt*Xd}jIgK!-R0VF!Z zH-?R?%52&&#Fh;O`l~5DJylBmy(HlC?%!}mQrsaU;g4HsU#nQCPKuTrCL$p}6D zJ%mAsK6sLPl5a#>Tes+>I$xf$r{sXmG8{QOGBh$me}6AMwE-lGo`HVWZS@EXA>&66 z5&9Bg9a1`+F!(NCA8BHF@nnZVA8vcsg45fR8?7^R)}a;}R9fb#QG-&O zkbxl>o@ecl&xIzVxv+rN2~%_M>PgM1iI_+@=35$V70t|WaMln?Nx3Ol)n8_ASA&KB z_<4Ti&p*NY-~ERSRDOxszkiiuGZ_oo;0GQcaY7=M!dgo==@Nti%U7*r^X9FrShbpF zr^B)}tMNULxE<3OZ;_<0FZuJfAH*TBIzwlgu-e1QwQC5AWmc_SN2?pLcEbiLJvGu4 zLa$AxA=3`OsE|rxLx;2hhsQIdRor@kgGeK0ry^Qe%51}9uAVU)Wt^KzNsOVMSfcranYQ3W=(BFX}ufx>bG!rwLsg_}(oe)KqMCTHECGr*IiCmp*0ndXtuNpQ8SNR%=4FZ( z&S?w~$Q&#=k-M0sGuRaNy!tW+Uwwr%HN4|}@8jr^1DrT|m`bHcVmvn+ey8FsxmNjIpm^K`1b%dcL)`ml8JJc#3OUgd?KX96*8~>a$$6I7g&7~VFJbIu* zrR)B6Q11GmF;70CBFu zzvFxWf)XLh+8Dyn!)n99SN6YdQeC@h4f|huh0`a_;8i?|R#U!iE1t@^%*e0xX`CY}?Qex=kd?92iqP zzPH0feTuQ^F~%DSvu#b9Pj&Es(&G9zi|;&J{HN$EDg{G-Q8HNb>8bb(RYHdPOYEp9 z7TShpuj1HrhMI$-$~WVBWaymh5Df+trY+z8=dbhLLdww-Eu?cO-_hwfYQ?-%$Xbih z25S|?Vu@~dj^`eEn&%#Qn$26caMd+eabV{w6v{qXYN$zz@AV0Rp;#=GUO#WoI|Pt7 z;Pq5IrYFaF`r%npZ8*K{IG0^=881Hh)awT3C2In_k&r?N@gl9Qtf5d6j8AK>ST0#v z4f)dNKF889V$ZG?O%ZZrB4ws!2z`m?D|{)j#?U`dW+YUM)qPGhG9G!k!MWLlg~oBZ zaYi?RNH6a90%X4JkmkfLdU2+u77tTY3*B#GrcAN(11zOa*atB&#|Hn9}_K|JMtpveE<&j4iEV)~iJX$QvP2}m^rO48rk zi^(#aw4fZmuW&9eRmf)<3Mq3Mq^ty&t%M(Y+XlY=wU;=3rcJrG#&kX6Ts@{xkQAk) zBm|k~(N?hMbjsf2U1r-U^=yJ7P*9L9#v^oLP7U|;6et!YRwzm(kD{<> z;m}Gk)3nrMN3C4szArq&{DkI~YeqOdy}4`-wXxb+2t@vmEf)#G0H+8;}8Dh_X+z#<}#m?^ARXTxgd~$Qa-{a%te|n zzu2JF=#peD)S^H_3vhwVEt=LtDTz=D=`w^|bm2Icmp0`AlV~gGCW>a)ad#70vJ6onu_pec9`>jYY<^qxWZ`^e00Jcm1BG;sKuRi= z5@}{A6$_Nh1&WKmrkO*Ege=K$4vaPVB@#iP0{ROHmo80t{|B$&i{ClUV+Y2OrI4eO zZ5olJuPiZ0r0`JAk^m3B)Fy4GNC`5}VM6!+*TwD3U$7X z06^p(O=sDD$qojGma=Nia@KF$%JNm~c+Zc&mx3pmoo|w!eu0Hnm&^z~Y~cFJj#-2|xFtZ?o%An+0tNLqVuONDog*Lgh%UV{$&?O&1OD%HdhwbVWZ! zmvZW~VLrA@wiAXzfiV{CKnsUb4i6uUpCy1;dj^K)oWfs~gy=9Qv za&ppg{7e@ups(tIkXRgA8%jk*D-j%+$~ZTg@oOJm%N-wD$shgRldP^3IosA~453g+ zDM_#h2?ou@S6sp6S6+!gQX5{1mXg)$*3*rebh{bC9m8myQ{~#6SM=YeO`BYf+|_)j z1kxc4k}Iyeo)zmhP%Ty|4-V66&hds@-h}iNNtzLz+Cydqt&S#E;FUal-y^dyRD$Kp z9XI{dMa&t^AOGDEUY%KBqHCxX6~4@)fK^x`keaqM?3-z^WzeI)sJLWp$cma`a@O+v zsSegz3dIuEYOI%{tilPE$M>e1VgP~8i%Eg2v<6R6;Yc)G7hK zuwWFa7FcBvRxq|;`0gIZ1;yi@%ShJ#p&~4WDD^@QHd0=;!nNF@bD+DFdEXCRkDRL&* zNe^jq?UK*TGSeTwf`i`ip zxnQd!P%^htqRung?}?oGld^+!Na=(%8HW!a<>cux;!ecI9T%gNVb9CE@QXg3Zp`{# za6+K`03igKacJkzX~x#&g3GSIh*TCiu=^BVSm4#km|DRn^aVxVr=Yx?EkS|sIXl;( zP%Uur3Xi@pWBHOE4o}Qd2o=IXsU%2K$nZe4$gaiRyV~}N! z*>1#57cHeH(9F(7lmkUiCg=?%17#1PLbS1X5>gDIQB2Rp6v~p_FYM)#i?5`2z-Oe# zA!ZH6ftDKOd;*c@Bl$`(Gcm=3-~JBLgDbCj14j-YVfx%ToG>)&O_b`xA`mX0V4Y9I zucuU~jm1eNTCFBeKk+ySh~k(#KJXLldVVLTPM$y(6h)gMHm(AhgKi`810YLN3evKE zZGlxgmhkw!-(zO1ixEEU#L!>xkka6JK9$g;Qjp*v%^YMIEBZ=oS?SSRgQ4L9;~hb{ zkZTe=VZqNk8;q5B!XXO*N@tWjMZpQQ5@-ijSVEgKgBZ(TPl;=`_AyY*I5=8gWFI7h zr2r)*naPL~MXDu!n9)5;d7+WqKV8s&+R!0Gc7c|1p*@!~uQ3xb~=aa-; zo_OSOoG~n4zLNFp*0Sg2J(LO|R!VwgjFeR;gd<6l=-;?7&Z|eroLTb=ilc`P;Z6$L zos`vUSF>%)HXi)$LxiD6H`ZLY!bf;T5)GNnvj7BwP874L*Rf^$Qbe)DL-#&L*W?xI zQaFmz;tNHkERa%=L?OzDM!QYTca%MkawTBp`XSuzllcu@o196t0;d$#NgNL42S}4p z@CCvLDZv*K=}Wq)rchLj&Bu&X;axYaXYA}W^(bRvc z*HHE?k3MpYx7@abHJi(foJuJ9d1GK8Req35^1gt~@!&VU#iQT;E=ij3#<$6jH>qDBO2YB`6dB)owF`C|DK*9I$gb#kiaIJzb9lj1|25r8#dya}P zXurIGaRQ?pD)b3dKBo@@g%loIYn1PU5H#vBgMAfz@p0o&Fh4zm@8>QHDf_X`IBOl+q#m3&(09pX|hC;y#Yl}5v2}m9R(*icDBp8F^d#}Cut*mMXBtgbVebx zU?jfCg;#zlq!VS#H&goi3Y3ZgffV2b7MnX(l)!f|F_ZA6M@Kp3WO2mo^b}bd z5nO*0jk$TICZ-5Ofzu8@Z$cpOJ+(N-{-L@6{_P-82+?s;kT~nCbwXkBLWK!K28KtF zN+PVL==sP*lEfKWJLF>HU+M&DYFSr?Evw7O_yk9u+0SS$Q0!=;RIqQX%brnaKU&9A0+gdz^sv?uD24GP!YP~+2y*tYQdE>`0XB^=D75v^ zR^z$c1Fo?gpKfzxyn`PIl(3XM4`1eEh+4@*qUZ={#u06+(6ObhEyrgxk3T%hFaGjI zRt>}Gg5`A6(XkGxWZr6t#Pd9CWc7uqA140M_54^6c`>^g3%gLQWQ%esWBKUumZGmWSPd7KE@bU4Zy0A675rmnVFbj z&iF)G%3xVi@H~9qr&^Sh0*@rrv@)2RhqDb$!Ly9-OL=Hti(=WQ92DqA38jL=Qy$t0 z5P5gY)NBjwBqKcqq)ibLZ~>n5a8_fSB*_G)XEcBF)gxp!@1pfRpJE{C34KbwL<&Jy zM1;yg20ejfAye!-m2&#zJge3&rC%MVR`8kC4yy!7Y8GRp9abBXP8%15Sn25N??nnh zF${3RVse!=5=kKle)u^6ci(;Y;v8QF);L>`Lex7cnJiMS)$pPyzu9*(oOL9Lp;YUm z)o#;H9meH#j@DX|EEn|*)*L-cdYBrY=fngwGlLTfCG$48N(l;nnQAd0@GPdN8CJFM{j*d;!HKIZ*1 z!#lK}UpiDrcURS3d#!uj_jR2Y-YH}d((I%l1-o`mFm-AMEftMgNT58S7No|L8-o;* zhKlItmUeEbhMGugjB~`&GgvEHF{u}*9$1rMgdxDN9eaGrPD9z{Hv{<~unq>mq}qJCjLAr~>lDFcd+(0zxTH9hqTv z$ahwYQy6KBLegXi;fX?tL7|nRGGM5NdPU=cFdbrG=}+dxlCiCYNS0C~^z!Bqt0d))X7znjy)q=WW2|l2fO1mNJ3HQwcp@ zfkrW0iz#bGpe*H5$Vf{QH7X=Ym#%R{B|)A$f*7n-#7Zz&4e6(bQWVnf8ag)NhF6}) zp?$}go$j-FZ4K)U&V^W)l4Jqh%#eFQ9tm<&+-@rh8l{j{VyQ)fYUl}Nj3g(uo^GNj z1(0~pVg^T#bxC_&&fQVvu_Jx75ahu0#kg4dKHMZf2u>=>IECAWrC)3bQ*(NUSK z)uC-|(P;C^pEz@72H@(euNHUQamQJ;8%U{rW1vJQg~UUcJH|#w(ONRUu!#3CRBN!@ zP02-0xfEgZLd}@v8A=G8bJR*Oa^CrL(=ut>lVpZaNwhAm>5()HR2oEqq7o$pS-`4t zm&QPe+htoK?qK@ZBvVrzM#n1%Jh@Rw9bjyZ z(h6eerGms->MB5Dh?Sy~S{l_5DFsmwkr_ij$q<1j6Hq2#p<_98O!BJNUdOsGA7yL~ z7F!h2!Ny?)h)9uVInE0PM+WJ46XvJpX}5Y*!$LD+oM+W|iIYuSTq*|u2M+ugQNTCd zbQ3q0Z$me;P;`a36CzqO2x#|YvYUO&n&zIi7u?=yM4h3f|_G*jYO zVZ9^}(9ARH6;Hh^aY8V8xJN6IWX@BLHGu*l9E0^3J3ooKGGt1HAhDcPH zneI?4YqCCQ8_==|krD)a_}ymbg5l(Ws)M0Mk#X);k-rRX!i__TA5n4M6Yj93QBQE&E{B_(=#5c6w8U_*r8Lb+d9BV zHDsi0&T-7G@q}^m&pz8D?%dMQ>T-AcYY2mRoLV9y{3<{*qPhcYgX@)d?&cHcnvtAiB}x1;6_|x=W`x zdH4)xPB-XT&r&7`0|>Pw%?*vn6NZABR*E~m#B$S+<`S(6rMFUoYE+^gg$SDyNoZ6f zs-=Khr9>Jy>IkG#BuR!0G)dngg=N)nm86$pU4Sti{_%sq$in1lxOSLt+&Rg;_fD~8 zZ55ju5~tBoK*M{C$>`>aG)<6!!V3`E6AHnqp&CKp=yo!sw3Oq3)O!MHaX_ahnO$%! zwga|4X9DrnLqsZozQKtEr3Gp3nK|9&Ew5g~#JTH;f)K40{mv|RUKwVXK}v3=V( z?L_&hxkOxY`KH?UxP!5=v9rzvFh062`o{OZ>tA)%1|NukXtY7x7@|=hCWt-PT<}6% z*5dfVITj}!XQtW=H#Cz=g-)xFK?_g09J2q3$M7yd3Q0fpL_s0u#yJ92bYVj2iKB=h z2(e>z8r6`cP7fs|!VAiAL>LAr?-?5!K+wbzFnM%_KYiz~Fglbl^}uatwT6#<;SlRr zkJ8UPnK#%xBnm@}$qA$+&T=ZH7_B@mH{=c))fi(7O_ElMN;xL834t+qEomlj`qVV2 zK9!1Qv;qg)7Atij0t_PV-M7RGFI~qQ-@2pFhxnAddy=cyuA|%Qar8iwf!YvCdw+5s zdHK0JIxA-Y|EC4u|H%lz@7c3Q20{7obuW9_eV=;&6IcAoD_Z8)t{+gQT=nIVRX!*U z3#GKwW{}?O8BUEmzV|?%ClB^fN|SaCK5|8_vxk0IBa~J4Ke~^pzQhVgNecvyYAK)^ z2Y8dA1VqZCaST*Tj13nDOzc7iM2N{PaU|*XGis3{E=Q;!VrqVwzu0plU;pxL{K@-o z;}71nfuDcVdj9h74lywj5y~R_+f_q?a*5?mk39Dn7h$a{)TKgF)`BPybXQc&krbdk zE|ho|K<4T7pxez@I(?kkRu2M=^o|5Dc|kopIcwNBW_j6V4eIOG69g5^a+`(8CJS@3 z_RMiBW(Tx5aqO^p@OU+N&Cg!?Rp9PDd-h0#I4fd6Z@TFwzY+<2=5;^y=G*@1!+&$_ z8=t4_Rp$*!(NKP{G3d+HNGb2h+siCU!xrZ`Jlp5K<2`~>jPIo&!Fh)lij*1)ld~K= zFvCI$GVo~a&mkqFjR{e8!jVFPNiDLSS`y}##5&4x1VUh}K{&y5$FtOxxPBLF1zHM1?NEUt?HFVjb9g%8s*#YZw$!MP zR6sfULk;FmG+npVr(4T#A{PJt^~YRV-mHH9O>evvSlF{?j}$-Vb>LTWsjt8OWuLtJ zw%6YH*Ps7b@Yd_s+QGq4nqb*06(NL__0gQZ$Qj!JGm+-&_e`?X7bxSAfglqOi9$$+ zQ5%^&)@6Rl(>E5cBdoX7N+s&0fO4dXqy(1`DuD;8<$yp&WFAU!Ku36_5)71LY}TU| z2^yj1bvIYzYBqtXI&E^m-1CLI5`c@Ez5}c({t`USq{zNEsF^-c8UyB(Yh>CSxxzA9D-j4!qbix2?Qq=-x3g_cz_qV^KSMF>{or$0x28h7?-;BKjPZzSF{95j zK^(;7Ho)U>)=+Dd$$UbnKsb-k5Gn8~B+e|x8jP`Yf%%1mBTpXX%)BM@pbU5^={ie4 zx9rbh^~4g}vPo){Dq1?a{T5~BTrT@W!&WT!TJBvR_u-DKfAaY2U;p|K1M;SuZn8K3 zA4Y-xZx;YU2){xCYkKcr8xK_f;qklfx#6LM%Ph9qBJC~n^u7lj*M56FlrXg4* z=^2X%W1RQkGZx#HyAJ2P?~`XZx*u9yi$Gv9gAO#6Fd$L_sfu=va0aEKLJOcgaj2<; zAz5Zgy`^3Wz#B@^QwbzeYhoRt@`OW2kKrklql@j3xxPn8MW8e`O^B3dc(96hh9t>B zX@r+W7onRGX^EDKC{PF~h_pb8VxDcBqLXF}4n!QAukzlH9OcBRm^1SUsVTVcJ)e{0 zf~S{LPT!O8>F+L}^g}2C&VnkJ7+<$em4ZP;pwXpz@Y-K|;eEgNhkx;AA%xkpXO9$T zi3fOP9S9-BviJVw)~k0va@SqIe(N)bG1;=vW|rycV=T@0iW!y$FTg60kz%ovV3ojW zkM9ebeapW;l5;wnr?pha`aYfvt1SbikWv_6b6a4Uy`>Zdcw11CYvq`sMg^%A-NYaR zfku!d8X+{5SfKNee$v5oPt)sn0a!C!rnB55&Fu=^4g?l#Mx$INH0Y<+k-tm ze#fI2iU%758`n+9v58gG%OQb|2sR9=U%25_fA^-J{e?dgLRjxTH{X2okNf#M@4Xa4 zeDl<)Q?LGDDfsZcCy%YqkM?M$ebH&3X8%)%>GiT7VxZALpy(T0M1Ffo?i~Hx(@D#G z@*f^yVzk8I_&BxY1s1JED@Qp}NC`R+#X3lHWTDeTOR%cY=mgRcYfGhEMQTm2lcI$~ zihwZCv=$Z_U0cNgN=M`!K|6socPJ^SMg^PSW5FuoNRx+_k_ho=;xHzSTWB&&nikex z3sDddYJ)PGJP2sSeYS5J;-QBVCZ`gXvXI1>0+!U;ElO{{HqeGt%dMA+eH(Ai@g=Qqxxn)+hobQaFqi1WFc~VF_9n5Ti&^ ze1DN7Fap`LY#*(#+#Td|UtC}z8)mvak2S7<`UHyHT9U5fpTD=rhrhR2xD{6BYUl6R zBF9I!5Le2?wOBp>wHr?U)*t=e8-x&3E5-khHx2MVZ2mLAYrXdu&n;*8Y`!eD+WCdg z-SXS-{hL4C-s!en$9P#n7wr|B6RDy-o7$Xu0B?HPCVu+Hb6B%u2hC&8@Tm{~fLngh zrRN}y!Xg^edjchpUJz=5b{c1M@_x4vZI&a@|7Xw29xh;^iK@g&Rj`SAoEwOUMr2t9cS?~8fS}BB5MJ%Z`gn>pW zPcKafg8(weH5b(QpMU$)L=&sI|1%%p_B*BtjtCw*laVV!q$I{^nn+aWsptZ1W32VB z`PpCazx12G|5v9^9{E<13VY7BZFFSX zhubVXVn}l+hXJ^pKnEx(k=CG);3Z1w0xz9s)JhfFi6cq7RH|iUuJAa7a10CzrspO9 z`sFA2=m%cM!Dmjgbz+cT`psJzoT%e)~TaO4+I2aU|=8yCWR0u_Uzds&!)rw+0V^4 z-|Y76*&|(~_v92!O;0 zl*_pO@&SJ8>H)5N&1F=oF`szn_nDeaIJlfpDurl@q*qUX^%kWgjF$*3fpQoNq1Kq( zl3Po)T48FgiNhgKY*;(U-47n&);pfzYoB}(m@Xgv>`{)K?y}>`Ve&jfYf0MAu&$2| zB}gzy!r)My%t-pZ9Gs_Gj_Gy_FkGmM_gQrO#<9S;mZu)~45Db*L>&xFG`%as7 zFK4pn3Ok~baQ{fo z0R1D}{1HMt`X9b@&%59Au1haDXLS3_iIzLj45SD&*;0y-5^EDcGk ziW{$I{`N1@U+55MNuFAyf-umOB8|5>r8p*zEm=lBUkQx4+rKQ>#6}W3q4kiRFFuVb4VORjS@CZ31dO5 z1KPcurnE>|*iWPqgh7n6J%UK1dJ2~n!j75wMbfGJ7~gaWNoqJU*(GqAniAxJ1`74M zke<{U)((VhAFnuFilt4vC$_9xyJzeAb@o5CTg8u}>ihq=2>Ab72j2T9({N@`co@0Y7-?yUfi>f=FOA~z7|3Tb8#)}W;z3Sv&2ID-x={PiauXU&EhZ~f`3xMbJg za5{laBs3Ql^=g$U(DZD=aHC3I3c-82{e*#PNNOC5BBNZ63QMVQL{UWG9U+n|6?6@h zHT35v@ki=YNOK^BXQ(A9|Zf@#uU)7eOFZafsqDIO+=eX+|mx z!#iHU$w$7$fkzMEvKZ?GLKFnaQVenaKgBZ-znwq&t}>?z74RgRusrrTF& zAd-@x6ybf2@($+(<%(cHNGhRlV-u_8n$;6u8yg(^k9#V6_Uw^2-+Z&-Px)fmD)S z+cSCkI8MM#A9#q@{lu?v;^BR~@5`qdlyLCS9BbB88L!uH3tff>Dol(IGCeg*b##<8 zPiY$iVWIr5RZ7@22N|GLj?z$)5`-X%1>N~Yre}|`>x!S?si*&$)29={ID*s^0_DUP znE=u=QYljj64nh$Ke2JGXw+AIHWUL7{O9NYqr3p>AJyi+^0LbnYmy!v9d(NfbMDrr zLlTf#%R;A(w1RSNh-xUQmuvL;eX4$*?oz^uQ!z&#H>f0Gd`KdXc)SOPr&0-#KyD4j zNR-gvGAgwSN(IGBdZxOWycO=I76_YTYESxbYR3e#i@U zmeDoA3oaXA;dGC~#}dXyW3&!P`zbn*G-@RzhCn&OdQ4(UEG+i$-r_yQ29_IYl``du zW3JOA&n?xOMA&5(&n%Edo0wiajte|v17&o*#`IE-){>;xBegmEr~6nPdM(?$^m(-< zK=0YJN9^2L*z9h+@kV#H9{&Gt>)@uFZjykB2S@IiO~RMgGV5l$Ud?n;N+nIu7$PcH zsl_2n(ov2QOfO@uJ<7?GLo7Fo$Y`5;yf-LWh;Ce#A)LV&k15dVq`5_Dff9mH36#yz z5>!|SFQuq5yU^iIPTCtSE2!$ulx76_;LqMSkOrH>wxB;05{}?|4W4>}~sOx%vOE ziU99@fi2`=1xFpQFgP~M-UEFmMk_340VsA8{QgnaPK;o4_?fr=j@@+Odd2KPbZ?sW zREMGQF*1{IbUGtV`#4{s97>uL805N&Sz79m^etrpQfd~CEOGRRVmVd#+%wcrj1E^g zu_y_m0s2W!x7*_Ma-U$N?&p`TPd(n_UrJJI?aY-o1P6 zvwOh4ef#v&Pd{xhyXvw-U-`EkeE-hJy$b@GsUg%A0ufRl86l3!B;6${ZWiqTrCP30js$^(q@U8)o;1~%JYTW#L7+9P&>aIQiNdg80hA(s z7T_prO>qV}OQZuTr81pIuu?)sioVu3myu)% z%RNhdB=-ByWcoR;xM=Qzi!ZqSmRoL7qobqZnrp5p+?7A#?yvk29{^4W;kXfd?X}n1 z7r*2s_m6Bmhx?Cr#e6G8hjpHF*`;jRw1GH^$?}|br;8JkfkwpQzK6N%qkqZPm%M^4 z>q`tpAiTgB$nzXyJxT|p#vp{IT&aMLX!cUlG^g9^)5~%aXUU7^Fzrr4vuk>Umu}(m=d8i^I-EP^_^B6;@Wxk+vUx+Dr;jePn55`Xqm;s1i?OZ{6^141l?c40 zUWurdN;nI6i&TaAHOn$`D+q;Pq+VhDm9ORY&)?0zeC#$V)c_#{sdXf2hSnhiwLyl4 z#|Xm`Mo6AG*&;8k;SIb0+v7rr6mYwD@3y;l@3v?A;s3u{2dh_42_Z!Kg6BVHUszwq zokyGgST|$s)^pf(;pH?2hw#obx3I)QvxCc1)~pJ-^Gjdk%OCy(SKas%430oqI&urv z8HCGelp?Be38jkmdzxpIN-@1O!2wQ4f^>7^xJ{Nn9gd)aDkylxej z?NG4r47)bgdCl|3dF?e5Y~7$Zd}@|XKcf;yNFnH_DR#yG>#ZbE3S)E9G%LhMDj>HG zCj(Lxtxg~79Oa;}J+8j`4SexEpX9;sJjTFaK$_=FEwotb^sxqphXxrR9U-ceXtL%*{^I;ml`2&7btLEAZs+_kzWO}a0 z>~bHI=A3x)Y4ODme2CAy`%`qMQyQfb*o07NOzv5?el49|inm3Fp;!|M#tU)>^-yr$ zbI(CFw(*6(|0YQeLP)e+8Bw^Ls1&nt>js8~2C)W?&UO7%=ES;fTjqoiPjk~v{L(M| zQZ9sW{}m4Z|GWq6+&SlV@80c42PYmIU$d6k4B0f2+aGgvgA3 z9bjm%N+1=r!Ew6FO-@YBU~)qs3?_G+PCZKv%`2`P;d!sSiUsPVvPx|bSn492By|!a z97=eEkhGI7sVQ;v=y7W24ii^OfTtXl2?3LPjC0iMA*bdo*Ix4{v{N{f!JBTqm-qa^ zPQLq4kFPv^jOZVZQHep71vYW0*rAogvVvTc5@QWWOO_>ABQa@;Qi@V3Cd({%Uo1@T zs8uvxlz8~T88+LZbwVVaHjg}b z->~;ytq82df2G6!KaDG__kQi3Km6TSK6B(SV-s~51OtBO_8rVkoe&F?$8ae67E|-3q?Q4 zklr#nSfbgDdF^Zen#{vu4u3f{%?rA-`guka6p*LPn>n1ukzr&jG45Ik}1kd zQnNDZ(IGgG){3R2CA_sXmzOC^O&k^@0)Zw}s=y56*tB7oFYLXCzx~+V^ne$fQ|2q5 zd^I2Z*b{tZpWqYUe}Yhf44~WZQP!HrzV&T6F;-!$R7J1Ap_+?bgp5csn4DZBw-9Ja zxl+apk24;nB$;%;L-&z*yA%o*XoV#ls415j*; zT9y}cPIsHo^7L96fs(YBrWtIkN&GH`~mf?t+3WcZ?0y>9@O_=nDSv zTU|c%^{)}<1{H)HIFqA9VY$<)VES8^Ggxn+R7Rd<4AyIu%4Pb!Hi42W0XhODQjGUt zJUccF(akk;i(Oo9xcK?cr8+V~H@z1rCH29OiJGDudRA4dSd$i9_)KGcMi>U9c}9{Z z1iDZlgQGz6o8nONMJic24w;?n@WhdM4*idhGdG_RmqRMGh^|erE2v3f9M!60)2b3e z3Yw84@j@oay#4$4|J|!gLjzv`ZWP6E{l8QZ@T?X9aPNQrd;jUvpZUy=ky6=7k<0UU zuHlMH*YktBj3gs|msb~1=H=pKP-+F?X z4iHO}5G*BywKdd=P%DNb!+E2MEYHNLG{r`-I&k2C`>VhD>$klBeeb*f?Z5FGAN#L# z2<+LjNAKRf+Z;M^=r{iR@BiM7_k8CYcH_p4>crG6gN>MVBX!OkPw3ecW1v>isH)=h zvgfv^JYT)+JwVimkSZf=1XR3WycV#oQKg$^437*Gg`O-o z9)#q%L>P~=fA0NCLntF+avIf~ zp@A}2z2H(FzVkaw&b36PRu)e@cwhYHH~r)XmzTS585pQMe74X2|6le10l0s^^&9W| zpL_o3%`<0?xz)q5GHIWezTiUPx(kezB+W7`b&6y}<2^@aB_ICA0`g09oWG_@wG4+& z_DEBYZb+n%XrU0^5(f(J9L{-yARvlD=9ZQjs8$gYf+DE|jUo`RaZQ6#%`n-@X)k3A zjBX$bpQJ1xXvD0lO9mpz+OY;Q%>aRv0YX@evq%}>e34qJ*FvX|!|%K4;TNiT3dpGu@sLLFm5v<$oQWSheNf zz4tE_LY(D%x8v)})X6Z;>vHRaSqE#oI{cxCSe&pp3C z%t4MVD+>$!d(oac$tea=khT)m^t2R?cOKXF}yH8p`jqO>Dcj!;M<6_A?@X9{0< zrJ~4s34ti^y+II=1DO}(Mvz$WUa)IJgKKt-v9%U6HeMskip0VwRBRrNS=|WPI66cW zsFlnBOP=)#bfuK!#v!C82t(p1Kq;}3&uo6^`9uh!Fr=d3ZLi@GQPleuiOVtc*Ih{#oQ^0ay1U;gPEKKrSUf6jX^#O~d4 zWw!cX;Kk?J7vKNg-~8G8Kl2aodueDortF&Hk}Xxv-LYwAsX2Et>Yw7=)g>R15lYYM zfq-6`^XSnwiwil|T{gr={^=G9V@)7EyWe;&fB(s!XY+)n+gIFmJfYne43`x{B~4ix z)(yb$$XIXlj&oX9Y>(Mi@3Ok0L~r_}`1;;Y{Nq<|`TUzd`q7W(x7>2$S>Fk`<(6C2 z%{Sj{@=oVvfBE}=_!kH6{)XMPt|p_-VP5>4Exhh!FYi{;IlrOQ=bUlD>Y60&86qK> zT5>!&-Dm4s!8`x9sfCe6zdlw%hc7l>%Vz-n|lV z-}=gz{^}p!wdWm+XZE>r2~pKK&%f@at%8O??N>PMT9w`M%E1WZ=7IINouQQiY zjRQ7}M4Z2NkXj@O8snf#Xb)o*&CWH$Y#JY?Rtj;}VqL)k>1P?acX*%_mk5HOxcE7b zv$i-$^At;hP=(Diw(u)&-o{^l=oReRq^XojJaMK^Cxvn-7>F%f8iv=s_(FH-rRO9U zZ>e$as(>(0rCgq~dq4iJogaShJHO|>pLn(#eAadVcJACM0Qcb!fAHh~^uhPMc*p8q zKCrGDTyoy1f9}Pb#Q86O>w@woyr^-g^zh@y{cVpm#i@mqG%sQoGjA!CJhd=o?Y59} zFC1js9Sa;>EJT2zEMBxw%Yp{wix7o0HCMlXaL7>1{5@#^hQ4$sxYI2tsu$XcY zAYw9sHwA`O28w~f29gY?E$Z1sICAikBuNThw>LCf2}5-a!Xt&k*kb-;vK;3NFY$&N zJn!0F%+H>oA~Lp4RGB-K5PJ~DF;La4AM(8ViXndPkAK#dM$flTekIjUJ@g1)y?utL zC3V=J%|G(@@A^qCRhPYce{t{Ly^12X`mFxke*108`)l~ZEw}vnr#}2Qzkc38ZjNR` zKX>PtyWtgAi5)NgrKfCnN!>fTwElqy_W9-1ilegz<307kGE1{vCWbYoe2&)gG?!jD z%-VZ8JhEiST!3-ljUzW69YB_*C_&MpcLr-LLa3rhkb>L_jFDt{hD0Hqq8bRQCGal9 zp>P63piogn7zM?PY(1%Q5DI7?dpKi0fYA%B@|Lff*Bp3(D4r=yffzz#*-LF=mio<=mi6zXP{mI5fS1Gueb_n#32HQ*8-X6 zC<2r#az1iv5d`QU#M&Gy3tbZ4p_E42l|ZAF7+NU|m+z|37>GIc)G;b?0LoCW#6?#^ zI>JD3?#5OAm2Y^txbQ`9Zk>KimX6-v6HlG!^T__LSW{`(d%wFk`n}&5d%gGP2_X*s zSLg&h%P2T@;N+X$@#}B-gXHwn`MD!i-A)o-a^*Rkch&P++jpIN@Pg{|wm%rQczFLD zovZ+@slH&*XT(aPT*je;&#+-z%*2>O9up*)C$pAJ7-Auav@S+InZ=k4K^f;W(Ol>+avwpcfrbtqSCyVg0hE~0{k_bVenf!1n; z1gH_pqJ$^U1tWFX_M9CY*>{MvYYo zevemjS)7{bsao7OA9?S4cSO<9x4ieS7eXB2N6dfGKgtJw-w$s8ncsZJZ@&1M!^g9J zQVsK-i&dd>#EEDrf8Ot3Hg9-v^b^O~J`0AEDV<=H!B>)kz5> zsb`Pv%isO?ANYkk@4W4MFMQ#(UpU*~AOEX$aP76%n)`q7ga7uKPkrJKA9#3QK2(l_ zW@cD;q9vc1zn60!>R-1sJIzy1JV~o-jZguI1Y-BcQj zbPqlKWMyf&!&2MPOQD|{`nJI9W*MArLZ@x1R0GzGl^70}XyqO+N`>fBgrvF0`IX4# zG^1Ky#q#0|!h5n_0$6kqAj5!umQ(SH%t1|gDp7$Iwk`+dQNn=~cmljgP*zfv5n-f| zG6ySx0t1{T1}y?&QGj5ifZRZqS%N6SdOCD@b~xC%d#Loi`(AqL_%qDTwZ*B~lwRLrtsn>;QKSnk zg@(xkQ|!F@rR>^qnlC>*L$~M2OpetO>oi&xV>Ia!m5rJD2jtW&(mV=FF*%mx-TOExFyG5@uIOUrLUMS)^7%)4+;;kNYQv^|^;0LG=H#)SXttqmB90vC z>MZM;4}9o7yH>9s{{!HyKk9d1{wN;!?%lh+_kQ97ANbJwrlzL+mTl(*&9p`^yovIv zU4HB3ujFUn{zt!i&CB0-N{?PdKicB6Xbn9oWFla>m*A|Wl?kSrnqIHOz`6-0Rz(by zB)u#{sE|l2awEudvr?6V5Q?Oqlk^jm(ik9Df~StnarpEyak+>d#ueDsNIH~mfU00U zNCa3xzn^0>g>WGU4$g3TwoSQGA_@!YUoq151S@k}C5i$-p@;&F^%V5EJmcJR8dOKd zm_I#3>R~zYq?w@Cw|JrHc!jNw`EG3|jmge%f?js-h$a}r_1G{(cc4zA-UZ` z_W~z9`;RYha(0O@3J8=!2!(YyS}MGkI0VLejI|&^d9m{ET9nP$vSAS2DAAl=Aoq$^ z?lHK+o)lG)wLx5MjT2+LxZs7adHlwo`|a-!Y`uzZ?Hrp_)?=z8G_z0+kB+#1|N7VJ zfBGkX^fm8&aMMjU`Lk^uJlpd9r+@m#-@oPapS`SBiA~o<%2mc0U4M?Rt-p|$@BZcf z8-C_DpI*D`#mJF!9rZP&@eoEeKt^;jN8d;mlfsW}MZ~uA*D+FqR#Jq;;62t@mX=#| zvYaT65UQ|gg2EbCY_dVb^kTvTk554u;-x@QM0jf@iNg>ff}%()L&hsspQ$l|lMesj<-^^W9s&dF4NR z;C+7u*xkE#%d_oIeaZ5)!mk!02* zy&wt#qWYMxtv-*g`GP?C*8;-0&R7XjCm9Sb>$4?!zANt5ge|}+M z;rTb;e6zddmRrU2*}B@1MbHO(r~EN{q29$zu+w3WdKwkqE=Av3&cn ziI}1}jX>HYvvnDLrzen>TR&x!b$@o_yj3 zp%$zfACa|cg>s-#A;?e>#swO+lWR_$?r`Y-dzo0JSvL&cc)C5va$8W}R6wVn((Ux{ z6wV-P3QDKen)$gd8@6s?_b@UY|4;|uoyQ{R^$a`KYu2o5@XUjUY4)LM z932Bv1?Vt92LU4kRYr#g#J0^Fsm9UkvVI!WD|G^;D8(_QpiHO(I^DjWYqj#v{mU1B z{=SEvdePp!d+m?%5cm=6KitC)KYaanZu{<4)oR5wmz%0mDKXfnvu^b$=WJd_td*Xc zJas;J%9U7F%N4>HjkSjVZR;NanDnunie?YLs=s6a^Q=Q+5-og;Knh&%7F z7TWC|S!N377K$gQmihg^cpI`-;?UGGr7$i=HcDY-p%06tq$WT~i5CW;JP#b4X6yN@ zdCSjT&i+Hw#mycH1h`g(#nf0b^Xz3*AZ3Wna(cals&;I@WDT>&_H*pS0!9XObA!~1 zAgq9{P;b;ltz2TDS{jW*^K#)0feuulWMN+}D|+3wD8&`-zwbW(uD|)~4|wn8jW^zS zc60!qec-)T>&n}{{jE1Bfmv#{RS-lgiFYMGFwo$l3oh7Ssg�T3tnP$s;9FDS|M> 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 z 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 Y0q_U1!4kCN_W%F@07*qoM6N<$f)WLzO#lD@ literal 0 HcmV?d00001 diff --git a/src/assets/steampunk-hud-compact/p0.js b/src/assets/steampunk-hud-compact/p0.js new file mode 100644 index 0000000..ce10574 --- /dev/null +++ b/src/assets/steampunk-hud-compact/p0.js @@ -0,0 +1 @@ +export default 'iVBORw0KGgoAAAANSUhEUgAAAMMAAAFaCAMAAACUvxmnAAAAwFBMVEUAAAATJCafYhxYKwduSRrTjjFpHALgp1Fca13GdSFtYwkOOkIiS1JUKgWpj1iiWwlTKQOSWxezhDX4zGiPKwYqFgiQVhD43Zeac0f/AAAvFQNzhXF2RxB0Rg5hlJj//ADq8d6Vo52k09rfuoWoMQA5Qzr3egHnoA5PeoGJMQWMNAGZkEhrdGcAAHGevMPdeUP///8STk5+ucOYZkz/yDsAAP8AfwA9hJMA//94h0t5xM+Ja1DOJQX/AP/NhxLQi0W9tSUYAAAAQHRSTlMA/Pr6+vwN/Pz8Cvz8YvwOmGzz/PtdmPz8AZr9YqD9Af39/fwI/QQJ/VWZCwgC/fsBBf0L/QEC/QER/W/9AW0L6qf8SQAAH4dJREFUeNrtXQd74zbSJjEgQVJiUae08tpeb8sl1+/r7f//q28KAHZJzvou1j2cxCoUBeLF9BloGQR/T4q/rZRS+zKLgzulYxnsQRkF++Dz8S4RZCX+KVgfVKhWQVCWd7Pyj7/EZZYdCUAQ53sVgoJQQ07ChB+Un/FF/J4lK+vowh5VATEAIA5Uitwe//aNPnyvEMqg3O/3u1VZxlmulEFNCEP6C6E2kdrmZXnePyCcVRxkfwcFOf41+0ETFGdBqRQtOf2lpsbJa7WOiBuWF0rLh6rKekz7VXKb9ZcQB0ULiP+9nvCLZfavQUB2VPGcSYhCKDbGbPC9idJIMSLEphW9QXsbfM3irCQajugPdz4tHfG7wSIG5eoH16VE+cfVLgywCoTabA6IAeUJMUQGZUmHrOBqg2zRUP2oSmSrVU+QldYPDw8V/p3PK0co3Sv5n17SO3f8wb22R/cPDyIrh802JA2oD4igxmkzgYqQkDeoHuYQgVb4v963LnWBxk7CGeAAVWMbyrhET8SXieSxTWl0mdbyx0IEgKqLEGiiGxW2CT9PFfMIzxK1iNbrdXQbpcNZ0JKdvVZl5E4VsAWRZQN5BIBwhMBS/ygxAA9vUY6UKfjgIgw/ehRqrRgB8AWguQo9+VHlLZ8hg9rzQ3eifIuYDuAwoDLoFoAfIDcBYzQPt0RafFyEywV/rLcqtbN8q6utBMTxEU1imr5qVAi/jB5XjMFsWI6WCWFYfmckC5GnSNmVtYSH5aNfQ8gKKBlETDYx8qPquh79QtHFMH5hoLkXJmpBoKcFgVgwiFSJdXKU6M6wlpatx84H+IVCN1dDeRJn+Y2Ey325QCMe6cHktK61HsGAT0nSxoDB0UEgtGhBIOzSkV432l48HYweTrU29FkxAq7AEfw3yIiU5NOyb1UYuVELOlurIYZQdTH4QZ8+ffq0bBuDwtA1lo4NDQ7iBIj389Kw2WxMOjKsMmFiYPhBwfbZY4hCIL+ciVWyjMLnL4RvIOdofFvQ7JiLZfIJzc7yL8nSnYc2iU1SM3n7euGkCcUW/CTWFIu0VqoFIhoTMhPqtfZ8pJAyZsNaKo8B1/pLOsIITbZXD5m+TMLk+Tnxkktu2LLBU5KQPiytOAG5umYSGi+lRsU+GlWUNc4NwhYGtUcmBDHOzWMQRtcDhVjTSYMxcVrPnz5+/PS8tDqB+DGwaLPhD09I3xdWnugUkls3lI4KFY3xARVCmRGdxglCWKvWO6geMdUiYM3CMMOHC6OLkXVZJB+/86J9XLYweI1GVX5CiP/2n0/PoWeEIsvkVUBHbaPuL1FHYUeidYNB1c1xwqB0HOw7GMKu0WyNr6Zsa9u+45iRaazSx6e/0IcL4pRlQ8gRR2t2'; \ No newline at end of file diff --git a/src/assets/steampunk-hud-compact/p1.js b/src/assets/steampunk-hud-compact/p1.js new file mode 100644 index 0000000..cb90a22 --- /dev/null +++ b/src/assets/steampunk-hud-compact/p1.js @@ -0,0 +1 @@ +export default 'OhzBoPsr2DV9HQxQBWiq1FCJBxgWHXQTDhFSXFgSZJadj59I4dlJ4+vnZDGGoWf9wmvz6J6vkO2gAoAuH2757iQGRRiQSQuUHPZRqC9PT8/MDIawIGnQb4iBXETA4csUhvDVGFA+ISRbxLYqIX14/vTpmfWfnAZhmOQDvB4DxZBBDmH4agx6GgNwuIeLjkYXhYmQkFT94Q+Juy68KQYIq6B80G/GB9ZpNuwkOeLgWIYWGPm566aRfjMMKWHIKHlQb4khTVXbwCGCxbJt8BRZ09dimOC7SkMyrYghbvz0D+p0yCmaspOXYHVBnCAlt6dw5PpGGEiWcomX9NthUBKZijQtBAOL08K6EaD4CN6ODyHHS1nwAG8lS+ixWoxYuIkLFJdW29TyLTCQUZJUdI/CpF+JYTE5i1ZOOMzSwHRi7x/DoCNtMQTBmQsNb+IfKPiOfBS36GZjHAgRhqkVe51dApNSoGGrAjkJwOs4MZGlc4W1PdYi/N5eOdPPRX89aWQpVE29L5dqKLps3SElD9A7wsegeza9ww83UlltTfJ7V5KA1Jq8efvLSulXEdBXSBu+NmW/GA9COloPu7GKlVLRCjwj2ll/B4KwgU2wrcqZ6PVEU6VlOLXKrWXVqnpJAahNzpD0DkO7XAb+m1w0aUAkLeaTUW2N1xuuN/bYTDqzJMPartrmeOh0qvKGqqriB6H+B/Rs39k3u9PpFHpoqm8lwBg5xHOo5Fp2ZHul3uVaF21e4qtKroXj5P269Vs0zHK/gqorULpAbVZ+BU9v0bEppyrnGXUT4slebMzdEttRGzkpr1w11bYhUKq0KogHDEFkI/86OX6/tdA5MabZZc3F4/Eh7IvHH+sJBbvKozCYuQkCjm1+pOMQd4DFEw214Fu5WuWrMguO2ZFaPNzlyeQv40VwryxNLEKZW62QMJBY47smx/7Vs6sUx8c4I/lZ7VfnmNoNEw2ux+DzyrmA8ysWfZy+nitny+gpz6Z4f3MDqtzT5KjbE3fbea7HRYxCBCi6hi1Iddv+hIsnZZWNE6o4+5F+LnE3i/ekWBF1/DRUJbUPY+rMff7cbSgXh4Mp2PeQc1Y30UMZHyfFl8In5ERwobEufexbqNgcyMVgUKlAt+1q0+NCNpnCV1kixSAuAuEoQWHYFU91myWahEkAmEeqKLo8db4IQF2YAlzAiu+bRl2wX/tzDXUhXDGLAje4ITbD0Ccf7BFo7BM7vXzaCpbtWuWlaFIfbB18YQNkZ/fWKgjsS4D1RnNVZbm0SdJt0SV+9YEaw2KybCvZ8uUYxBVBaMTLNrTLmDvk8QpUelNErAua3XKZFNLiST0IvUO3xDEnFaw1N29C16dKb0vuNDcK8+zS1o2RYwRohfij265SSDX98HTYcOEEUomcQaN6Pwbig8LI8IzWZrORuq++LcyngiHB0Odz7n1sNnAYfCx2B8/nhwrNRrercYkPhmeXHA6IIbViwnsqFAlkcJbcgee93hzoNDxRugnXUei1MNVG6k63quGyI8dReumMte8w40VvSL60nV2oeO8BCznaO8awRwTHY3BCtoQ61bQ/wSAbNhTTK5b06+kI8aAbSltrVfZineBcF0qSpSZgl5To2jXQoEpLBZkW2aYLpMCFUVqcY/xIjADur5BUpanbNEJHQVIun2hBk8tpmOzCc/miAwK5UJuhcLIL7+SPYP/kNX1AF7GNW5bbsPY9pxQNuyxQLFGN67/bzTq22wxXSfs5iCnXtkRftYKpLDgXEnvrvu3XoxmQi+HtjgEncNGGew0Og1LWbJckqAAp'; \ No newline at end of file diff --git a/src/assets/steampunk-hud-compact/p2.js b/src/assets/steampunk-hud-compact/p2.js new file mode 100644 index 0000000..988500d --- /dev/null +++ b/src/assets/steampunk-hud-compact/p2.js @@ -0,0 +1 @@ +export default 'dDIrW0kGzDua3Tc2EaFXrYPyjnWVshReDeA1yloQaOMMhImq8s5YOFreDDtCeQ6hq7sk1GsEKdVQCaW5RFY+gKt9a+h0XKB6bWzzc1YpWQBapMyzei3TKPSrg6VfBAS3RWu0Y0mRWqsJ4JPROMhZuFzL14ptbUP+uBW2uz1XEhCL6ewv3IOypVdoxXlg97QoyMr+Bi7/KhuPKnNougumsKJEneoWp/G0CshrSIjhkkg6WVP/F0f/j1/awXweZ/ai8SDSP1d8OSrA7IIWehC/j8yJ+6lBGxBT+XOZ/bX8+Wd7NVIG+XZdFOhUqG2rea/XIBFu8l0XQzQ6vm6IQxR3jA2+O7r22+BwmVJ9Cto6nYP4/dZY1+JU72wkQiL3JUNoYgMLejwFopGkX12PQwhQdiWigujX1/c0dOva9YiuYoy2C6HZbaIL1U7sJXwvHE/ooVgXRTG1lDjbYeliB6ofZReDpfcsVuvueCE0QSjP7sSz7qwThpgiOFI7VEPXoJv6InTKhi034S3zqRzG23lo3bj357o1eMevuepn65ywNTt8W40nhpkUIyLr40757Vnn3592FfiUAWe3m65xucUPBzW0t/glwQ9+3YtGeIovXOQxP3G7NLeuqVO68tQ+4OtavTMulsDcF67sCA46L4K90we4tB4Se2TvQHTGNgHnymnPtTLI8V0i4HTEYTgFd0oYN6oQkkRD37fdFwYbq98xhozTdkUYjncqTGWOniFJKC+K7/OHXqjSZ8XRAMYa+X0yIYjP2uaxqBF5/OM/ZPnHc2GldEGlL6oCUZHvIbgzxS6Dla4PB1PbIgfVjPflXYHgOl5xqFubr8hE5XckTiRI9YGygWTZVLQVwP2IU/xYKk07sJeJ7LteuML3wx1J04M2G7AQErtPllsQ+Z34ujjItN4Y+qEFilKYbJJw4Qrf1Z1oRIw2SW1sh+rZGLPRC9cfUeW9qLVGayp7yF82qt6o0P2mBdR9RH8YrmopTS3DAtmRFG5/nVZXs6F3I0oYJjGGxQJZsGw21+m78RFlULmfHy7RvvJOWfkZFfNhdx/mtfI1vohUAQVpo93O0B/dxvKP4sPe74NWxvZI/e7W+3DVJZXuXRObNsQvXfU+pd8G3UmwlNutjgwC/YMtCuuRyvd7pWMAraI3+EZVsaWfPtxL1Br7Xla7O0BV1zsKvashiOKOJIkwHGPobTalBgS0N7PcAyPs1mSnzWtpj+zuKJH7n1z2WHuy7fN7wkC9Z3D/igD41/cSaPiwT7uN52D/cQjkxh0VBTLeAzDSK93dk07nanRX0x1hiIPTPysGpe+pH/Sn0V8QoZ4/3hEIGO6PZDN7RxCCE6z9zma7j4E83eme7FLV/DBINs/JJrnqnnwcRd/h6bTzdOLfJeTB3f7bhZZ29zVd6fu7f9rP/xToeOdceN//UuFMM80000wzzTTTTDPNNNNMM80000wzzTTTTDPNNNNMM80000wzzTTTTDPNNNNMM80000wzzTTTTDPNNNNMM80000wzzTTTTDPNNNNMM80000wzzTTTTDPNNNNMM80000wzzTTTTDPNNNNMM80000wzzXSHFGfZvSOg+zvdP4qyDO75jmdZsKrUWlX5nc7/iBwI9vZ2t9W3oLw3ZmQlP61Aqc2B7om+/z0fzu7lBm6lAIhXzIXDIVKgldqLQGX3wI2SbuGZWSHSAGlEd2OUG0vu85juW38HMiTrz7cdphtX892r+R3DiIN3fUe97Cs+nPd8y2dV1zXdhRtUxEDordybm4Xq'; \ No newline at end of file diff --git a/src/assets/steampunk-hud-compact/p2a.js b/src/assets/steampunk-hud-compact/p2a.js new file mode 100644 index 0000000..9c822de --- /dev/null +++ b/src/assets/steampunk-hud-compact/p2a.js @@ -0,0 +1 @@ +export default 'dDIrW0kGzDua3Tc2EaFXrYPyjnWVshReDeA1yloQaOMMhImq8s5YOFreDDtCeQ6hq7sk1GsEKdVQCaW5RFY+gKt9a+h0XKB6bWzzc1YpWQBapMyzei3TKPSrg6VfBAS3RWu0Y0mRWqsJ4JPROMhZuFzL14ptbUP+uBW2uz1XEhCL6ewv3IOypVdoxXlg97QoyMr+Bi7/KhuPKnNougumsKJEneoWp/G0CshrSIjhkkg6WVP/F0f/j1/awXweZ/ai8SDSP1d8OSrA7IIWehC/j8yJ+6lBGxBT+XOZ/bX8+Wd7NVIG+XZdFOhUqG2rea/XIBFu8l0XQzQ6vm6IQxR3jA2+O7r22+BwmVJ9Cto6nYP4/dZY1+JU72wkQiL3JUNoYgMLejwFopGkX12PQwhQdiWigujX1/c0dOva9YiuYoy2C6HZbaIL1U7sJXwvHE/ooVgXRTG1lDjbYeliB6ofZReDpfcsVuvueCE0QSjP7sSz7qwThpgiOFI7VEPXoJv6InTKhi034S3zqRzG23lo3bj357o1eMevuepn65ywNTt8W40nhpkUIyLr40757Vnn3592FfiUAWe3m65xucUPBzW0t/glwQ9+3YtGeIovXOQxP3G7NLeuqVO68tQ+4OtavTMulsDcF67sCA46L4K90we4tB4Se2TvQHTGNgHnymnPtTLI8V0i4HTEYTgFd0oYN6oQkkRD37fdFwYbq98xhozTdkUYjncqTGWOniFJKC+K7/OHXqjSZ8XRAMYa+X0yIYjP2uaxqBF5/OM/ZPnHc2GldEGlL6oCUZHvIbgzxS6Dla4PB1PbIgfVjPflXYHgOl5xqFubr8hE5XckTiRI9YGygWTZVLQVwP2IU/xYKk07sJeJ7LteuML3wx1J04M2G7AQ'; \ No newline at end of file diff --git a/src/assets/steampunk-hud-compact/p2b.js b/src/assets/steampunk-hud-compact/p2b.js new file mode 100644 index 0000000..6d1db66 --- /dev/null +++ b/src/assets/steampunk-hud-compact/p2b.js @@ -0,0 +1 @@ +export default 'ErtPllsQ+Z34ujjItN4Y+qEFilKYbJJw4Qrf1Z1oRIw2SW1sh+rZGLPRC9cfUeW9qLVGayp7yF82qt6o0P2mBdR9RH8YrmopTS3DAtmRFG5/nVZXs6F3I0oYJjGGxQJZsGw21+m78RFlULmfHy7RvvJOWfkZFfNhdx/mtfI1vohUAQVpo93O0B/dxvKP4sPe74NWxvZI/e7W+3DVJZXuXRObNsQvXfU+pd8G3UmwlNutjgwC/YMtCuuRyvd7pWMAraI3+EZVsaWfPtxL1Br7Xla7O0BV1zsKvashiOKOJIkwHGPobTalBgS0N7PcAyPs1mSnzWtpj+zuKJH7n1z2WHuy7fN7wkC9Z3D/igD41/cSaPiwT7uN52D/cQjkxh0VBTLeAzDSK93dk07nanRX0x1hiIPTPysGpe+pH/Sn0V8QoZ4/3hEIGO6PZDN7RxCCE6z9zma7j4E83eme7FLV/DBINs/JJrnqnnwcRd/h6bTzdOLfJeTB3f7bhZZ29zVd6fu7f9rP/xToeOdceN//UuFMM80000wzzTTTTDPNNNNMM80000wzzTTTTDPNNNNMM80000wzzTTTTDPNNNNMM80000wzzTTTTDPNNNNMM80000wzzTTTTDPNNNNMM80000wzzTTTTDPNNNNMM80000wzzTTTTDPNNNNMM80000wzzTTTTDPNNNNMM80000wzzXSHFGfZvSOg+zvdP4qyDO75jmdZsKrUWlX5nc7/iBwI9vZ2t9W3oLw3ZmQlP61Aqc2B7om+/z0fzu7lBm6lAIhXzIXDIVKgldqLQGX3wI2SbuGZWSHSAGlEd2OUG0vu85juW38HMiTrz7cdphtX892r+R3DiIN3fUe97Cs+nPd8y2dV1zXdhRtUxEDordybm4Xq'; \ No newline at end of file diff --git a/src/assets/steampunk-hud-compact/p3.js b/src/assets/steampunk-hud-compact/p3.js new file mode 100644 index 0000000..d23dc20 --- /dev/null +++ b/src/assets/steampunk-hud-compact/p3.js @@ -0,0 +1 @@ +export default 'vSoGerJ4z/fcxhnr2t5n1d8VXeSJuUHMeI+sQEtaMgIEkNC0dV0U5rAxBv83BfKGcNQWBqKI3533RkU4C4KC5b84HDY4+SiKVIQYDL3hO7xrVbOdyt+bdmNERGKECGieCECmj3OPTBQafhMRR0TB6y2xonxHul3STM4kIzUpgcY1l/kT0f3cFSERQqliFae7oxMr3pFEfRMmCAKcr4mMZQR5hwZBlHoUxIpq9V7EabU/aYaAUysOhADfiSojrZUgwuNklwyhUAyCTNY+z9+DICELSGJqUgSWIpwzKFZhcPexJlOEh9FvGHsC+T5QhL367c1RhVqsDXtjYgIvOD7o4b3EEYAoN0kUIlbICIL3qhsqZ/GjW7w30qSYQlMUcPZjTnqMGbsZuqBoVIPlKVQYEL4CRDZMEq+DLi+Gy1lQKoieNhREhIIg6iNYdGFozwoEAOrA341vA0EsKPfkSCkOXmU3OHuXBscX2IADplGKs4ZNpFICUfR4sFwOeEEQUD9IllSKj9vbbjGeiRvVupbbrEvIEuM6x1lDZRzzsSzDp4xTgP35YmxTaVxMEoqNSTekyaovP8tkIFEoUArXHzU/hS26D4Ab5WivdFKgyK4V2Ttk4MM17Bj+oGXR+oL1O+Zy3/YUBYSk2wwVYYiBQNCXyNjynd/D3U2ql+PqYwSAUYtWG+YlDoKLvFrtVx06n+Upr/aaLSJdJ8/GWfE5+J3cdJ70ACRV6NKCZGmxGOg28U4mQShu0AeGUGw2B1NrSaooFJOc5AKh4qSsc2pC68rgJ5QGnNOa7WmkhpbIYhiCwFAQ9TriNzfog0BAMdIdxUq1qJePAwakFJs+eqgeh1eJj+X2jzRvtXHWsj17O3PEsORXXRzs7FKGDen2mnXNHkulyXV2rB35SLB+lOIXeenfN+5VkkjIx9jwO5QGTSaJ12AAgVEIhkWfF7x+KZU8gFT7ijRlwZ5UgZiQJEsiGU6lKZDKakSjmeyTvCaMND6nLhgbPPbd4leRJFYG4iK0lqg1Z4shHAGRIkW0UqmqLtY7ymClahOtCYHDsLQglCs4TBFbDYmV816c/Dn4vDXbRpKg4UC46GLg1/LQsU4IgrwEKgRJU3YJwx7j4YIG8xhwOErX03QiJmjZD+YD639uy3fWqn7+k0hSaHrK0BMb8XGLRrr8h+wdVSqMgPJ4QaFjjeEk4FiIgab/JQy/oIEFYcRlDORJ6WoUodnykB/3J/VHkASHMLQ1oW1MvyTJl5Z+tDGQsWBHzRpxQa3j4KyVWdN6IANCjfHK2hyQtIjIdU5wbSJ0EuWSluxPFelTGEr8o4bKTDkpZREFJRHawevYpqjNiEtajU6drCqyAQP9w+GJ/xdjfpURPH3gB3ZGiMIpdIlCDBR2c7oGbQhLlnzK6EyxNoVW67Vhw77oogCJm0jptpcZoTUr3GJpNoenpydM1zf0VbgdA7vVLYU24DKWDD00mTV0b8akjTZ4iaFkYr0uimKt9Hqt1Fpsb5cTKEyGhElMUxlPGdYzYeBvHLhcEim2RwziNgwSGmyRAHauME9sQA4BpWvK9CQJX7xsoqKgikxRozAVaK3XbH0X3cCJclgWpgs+An005X9W+mj9SQe2tvgGt2NAAIQh/3cfZbBGkyjpvjZQPmSIQQdTOELfo6LBxRTFrpF2zrqcwLADzSG9iVwlugnNQN2EgR4KTG2QE7kP9jhgE6tktcF6MoYQkeV4KcglfaCH2lDWve6PrslFpBJwqCo4TmNwIQVEwgZoJngNgsdQox1APvwkonTMFIkSiHNoXLRV'; \ No newline at end of file diff --git a/src/assets/steampunk-hud-compact/p4.js b/src/assets/steampunk-hud-compact/p4.js new file mode 100644 index 0000000..8614db4 --- /dev/null +++ b/src/assets/steampunk-hud-compact/p4.js @@ -0,0 +1 @@ +export default 'WpyuUs8Fz/8DY0iSgmtKA7PHkmGjmolWUUayFKXOqRBHoaNTt2FIoX5BEMby4TOpAwoSgOn4N+fdDClzIvN3GJKid3E7pdRi2FIoUE7pg/fHKsRXshYLB+pWPhRoEVC+VxbDnqwSxmsDDDRwgWrwMsCQkPYPGMEegoNOqtJMWVfSeWXno6DNUZQtfbM+IIKXF8FwfIyVWFZteqHSwrLBFG7mH/yrYo2M6BlYaCnEFn6eMq4VYiBhSgpy6xotQaRDj+kqH8SfEwaSppUtEoBgkEAD2nEGlS7Uumhm7l+RNHHpu4tBKZtFKIiPE0ETCROdhVelBI5ycFcmuY5BNxheTINhBZLASTUYupUYNKTtiX9oY2BGtDEoCZkksFxNlvM1NAvenrNR2+sQwMnSCwVZHLxSNG+tsqI0RvWqSWbdxtDoQ5KsHQaPosHAUj4Zge84cx7Mr4iUug6BDTHZVgoUTU18eAwqpQ4RmmqbfPRKYhhZTGAgdz2IKQsagUaiJnD5OOEiyK2laR+CSNK1HIhnqNNQH14shjgoqQCMf1FID2D1dLEUQgEzKEAfrFFqY1BcA8SkSHIY0clNJDXLaJNOli0xDJG+altwdFFLcceloKpJRME907cYO323fnky1i6V4upJp5Vz+zTF79+/Y4pCpqJGc1QgiuePHxpKPtTEVkrFvnNOabUAh8FwLAxJsqeDV5QmipE8DE2RA1y1SbCWeqhNGI31D+Q37ZcpBNL9MAilvhGlDuH19Vg8lto4gipNk5QLJ9A+oagir72DT10dJm09+jcoKinYTIlivtrZpb3HEKk0go5pDYuOTncwiJPr2KXUaRSNcrG8kYO1ASpyks4FmWu05WIincxxq8QahGG7tcFKmrYqGlJrwKmOYihQTFW3Fi5+2qaJ4bV2SgWuXuQzUKhORNWQTic7L8YQOj5sHYYcSE8g5PpKX5b0egoDalr/3KjxDymc4su1viCuWt+Hapdf/MK3+CwskByU87j/BrAYdkpKS8Ai15dxcgMjIApl2dDN5JxQ3NbWik92G0h18iZrGJtw2yF2WgR4aoySCMwHwUBOjmtPEvMNgl+ycV4jWnErjLgHUgeJ+SgevVhlsrz4PfUcgmutkWb7hT+HOOJl6THYUyZKWsj6P4hYIpQZ82wxfHRxEwxjb/BOkodXp8uz4v7I69pwsXuISRBZw20eh1EKMAhcx07Q5/27t00WQ1GgDZ4QJcGgCcYFw5SV7U7czW1IBP05bvsYWxMo0a9RnZOcA1rgYSYlO0sKj+FDIbXnkRK+soUNkvKtmtSImPYVrVb7/cODlOpu2z10LFu9yDj4XIXCB1wr7vJz8kF92rFkH80oxULkrRMqCbBpGDhRw1kr2wbqjPh8fUywS7fBkXo7K9vx5ObbUYhy5A7FzLrsf1exhYHPO8FwpOAFFYEnpahxPsTAeq1dRZrq6zBMRKWzK94WpB4K2UTROONeXIHuec3N+6bieLkft6INYZB/tUoRo48RWYq3UnCmUCeiCpEaA0F80qgYIVswrUZL0rZiQ6sxjSELzojgZYMUgdlw/wf0flWWWXmBsnhFUZ+idDV3BYecMByprwSh6DTPVY3WFkBYQRkrGdWR6EwcXGrLuryDLpwo3SveEMVRnm/F8RK4vol95ftwTRclPfyNapWu1xSTLB0/U/5AyyZuVys1kdSyKHGLYzS+hKKxrChJvC5jtQ1MG5U2m0PRFsJU9myOdOCiToOu1Y+zxowsQvY1AJIjxXvDbG8ymsxqp+Nj1mffp8ElI3bsRptAlDaLe0yK'; \ No newline at end of file diff --git a/src/assets/steampunk-hud-compact/p5.js b/src/assets/steampunk-hud-compact/p5.js new file mode 100644 index 0000000..1643cd9 --- /dev/null +++ b/src/assets/steampunk-hud-compact/p5.js @@ -0,0 +1 @@ +export default 'lqiCv4QPKUL34Bt1UieGqG3zEAaxARFQjk9QaaWvV6oGkiQQuFCJbOf4Hsf6NrKfQm8Oa27HLDF1C1utuBD0FWpajQZ27bKboh0B4BvmvGkhmlru5QR/TNpKZEG67VTb6Hm5IwbJhTQHqKWEpmHhi2O99nQ6moq6fpymsUtXa6XcF6/9ZVkYZyERw3ocxHI5AYFdtBglFYLPC3sY4iDTmhdsmVDMLpdMpFJxtTrW6sexDYidj6fmmKHskzZ6hl84m4NJlZjAUBin0NTlXUeSpmD4d+5iQJsE602EOUeyUWGxoY05OjE3doBIZF0/ThET7a7zGFc94gQag1PquKGzFmkaFadRDFAb33glQ6hSiYO5L9el/8PwkdlAvY6ITKG/0G2M6PfjKjRMOQ6qKLMvksLoQttmEcnjmDiNYYCiBcF6OHb72xR2fY0muyH5KzKCpUi5+rG6hRFNL8v3K4IVUMudKl6cmDuNVGqzVYN0aBQDNY82vDvUblORzQJUCYoGedBZShKIAVWhoCJbwXJwWwuo0wdylz+hfNIQX5LE8cc2WAlIOjSxQwyKzDE5NdkOxwE4ouBMKO1hoO66s9vGNsMpQfmVGJZkFk6/BMphSOhDmWEqloWyifW1fWQ1GVWwUsQxq+GNaIRhqwayVElIWeg6UhxlpNQVU9Tcguh2DFRR0dJqwys8cPj2pdBfhA+kERx0irWO+vv5lv29lbYpqLwQRnY7PoSp6ek0YWAnFXFhSaXiBSJpCSu4DYMWDMok5Fp2R8qyuTKmLEAyGqnyeaVKowv7KgsjfU3eHtDsQHCFsjQd44MV2YgvRG1UK0v6VgyWD+rlcEANwCtkwGynD9YRO05kqraeEyMAaijwZq9BBFgTgtQHumDjVdYkroeC2fYqfTGy3ekDzl56QFT/ZQyv1Af18oIeX++k2sqibGrayODqsawP1D2mxg5v020sH8WuNW0cTQWjXXho2pquXz7sZ+W+jUVcoiXzOdcrbKvU7mtqltc5jyolVml4W5Xmim/I+wxT0onIbr2n1Es2vuK5Zs2sknXdpuLhlN3bQmxQ/e2JGeWMdrk1XQ0xaKfKRunwNRhUTS6NMMRlxb197/tCGnNr02XepoeyEQk7PNF+K4nj3eJhJuimT2VdWgqMWb4O+4k2WEjQtlJ9l7w0L119oyg1GAqK3akPxL2AVuNEG5fVSeiuqeIkRUyaMMZryqGgeES5GncI0hPh6p9mSaIUKOsz4oH8nxbFc7JHRg2Mui3e17Y/jbKkMSevc1u7BZeThNIXoUgemi9FXA/HaUe8kdjucOQtqV7DW9sUwIW/4dd4pHsSKuV3izVpeXGbNnAy6figE23qs4xbkXKxcmLEyRBkL4XPrFiteeai6pF77fx6JLY59a6eLPLYthPusDcNM+W2PtbqJjZQkAhbwaAPL6gPKm9X0XnfoqtKUG9ByYZSaOqQkThX5UNMXJY1nyWtJM49AAMt9tX5eLWxksTcC6GEXNuWTxql1OdALm5NDocXU5xdGJO3i+jg7Zzd5BhZloArnNuNprbGJe0bcdShOiAoKn5O7RN4jHmDZzsUq50gudy53UzxR+32VhYA4K8vn9FCnluGu7LbVCEctPuGjWTo1wa0RMQIwYjL3k3vX8oonGp+wKmc7wGwjUN5kK2u7kle4MwOf1PgMrTFQj//V6eeXMlywqDDe5PFkw6QVez8cu26clyUFpuSnibxmzapkVqu2WzLtgPl7Lm0BpQ0PzkCXYSLXbctc2L/DFxffTUGCrhtUSW/9jsLp4DyW1QrRzDN'; \ No newline at end of file diff --git a/src/assets/steampunk-hud-compact/p6.js b/src/assets/steampunk-hud-compact/p6.js new file mode 100644 index 0000000..89931f8 --- /dev/null +++ b/src/assets/steampunk-hud-compact/p6.js @@ -0,0 +1 @@ +export default '9uYttCRgQRHoYjfW54PxJv5VDCRMhON0y+9QRHR9e/B0yvNdl/rvkaoWBnC73AYlrHInynurz2z0we5IguqmH8AeuR0lYRmcbv5BWsnfoWnLPMMRDPSb7l0lcY9+BQL05myXKEG/7bdJ3P+J83O+i2MvePFl4lPyynYeTzad2Y02i2Kx4KpVXbvodTgTQ8adXvWD8LjZqP3KXpbj84l14jRxHv9ez0d57Mb8byjQdJDV4HDNR4BkJ063tAX73Hjtz2S7ukYodpO7KXTLx/iirW/+NMZBPiHjHf4Wv9rdTWKIW34bwhYYGNS/myO74Leg06XrlvTrxz///l/aLcmvXycE+Fv5m/10ehrD3fyzOH/+jfj/thrxT4BhppnekP4f81ecpmNs8W4AAAAASUVORK5CYII='; \ No newline at end of file diff --git a/src/assets/steampunk-hud-mobile-v2.js b/src/assets/steampunk-hud-mobile-v2.js new file mode 100644 index 0000000..ce60299 --- /dev/null +++ b/src/assets/steampunk-hud-mobile-v2.js @@ -0,0 +1,12 @@ +import p0 from './steampunk-hud-compact/p0.js'; +import p1 from './steampunk-hud-compact/p1.js'; +import p2a from './steampunk-hud-compact/p2a.js'; +import p2b from './steampunk-hud-compact/p2b.js'; +import p3 from './steampunk-hud-compact/p3.js'; +import p4 from './steampunk-hud-compact/p4.js'; +import p5 from './steampunk-hud-compact/p5.js'; +import p6 from './steampunk-hud-compact/p6.js'; + +const base64 = [p0, p1, p2a, p2b, p3, p4, p5, p6].join('').replace(/\s+/g, ''); + +export default `data:image/png;base64,${base64}`; diff --git a/src/assets/steampunk-hud-mobile.js b/src/assets/steampunk-hud-mobile.js new file mode 100644 index 0000000..cfeb9e5 --- /dev/null +++ b/src/assets/steampunk-hud-mobile.js @@ -0,0 +1 @@ +export default 'data:image/png;base64,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[... omitted for brevity ...]AElFTkSuQmCC'; \ No newline at end of file diff --git a/src/assets/steampunk-hud-mobile/chunk-00.js b/src/assets/steampunk-hud-mobile/chunk-00.js new file mode 100644 index 0000000..c3b8665 --- /dev/null +++ b/src/assets/steampunk-hud-mobile/chunk-00.js @@ -0,0 +1 @@ +export default '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'; \ No newline at end of file diff --git a/src/assets/steampunk-hud-mobile/chunk-01.js b/src/assets/steampunk-hud-mobile/chunk-01.js new file mode 100644 index 0000000..3719e70 --- /dev/null +++ b/src/assets/steampunk-hud-mobile/chunk-01.js @@ -0,0 +1 @@ +export default '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'; \ No newline at end of file diff --git a/src/assets/steampunk-hud-mobile/chunk-02.js b/src/assets/steampunk-hud-mobile/chunk-02.js new file mode 100644 index 0000000..a562844 --- /dev/null +++ b/src/assets/steampunk-hud-mobile/chunk-02.js @@ -0,0 +1 @@ +export default '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'; \ No newline at end of file diff --git a/src/assets/steampunk-hud-mobile/chunk-02a.js b/src/assets/steampunk-hud-mobile/chunk-02a.js new file mode 100644 index 0000000..5e7da55 --- /dev/null +++ b/src/assets/steampunk-hud-mobile/chunk-02a.js @@ -0,0 +1 @@ +export default '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'; \ No newline at end of file diff --git a/src/assets/steampunk-hud-mobile/chunk-s0.js b/src/assets/steampunk-hud-mobile/chunk-s0.js new file mode 100644 index 0000000..8c6b2e3 --- /dev/null +++ b/src/assets/steampunk-hud-mobile/chunk-s0.js @@ -0,0 +1 @@ +export default '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'; \ No newline at end of file diff --git a/src/assets/steampunk-hud/chunk-00.js b/src/assets/steampunk-hud/chunk-00.js new file mode 100644 index 0000000..e2cdc67 --- /dev/null +++ b/src/assets/steampunk-hud/chunk-00.js @@ -0,0 +1 @@ +export default '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'; \ No newline at end of file diff --git a/src/assets/steampunk-hud/chunk-01.js b/src/assets/steampunk-hud/chunk-01.js new file mode 100644 index 0000000..81ee9a8 --- /dev/null +++ b/src/assets/steampunk-hud/chunk-01.js @@ -0,0 +1 @@ +export default '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'; \ No newline at end of file diff --git a/src/diagnostics.js b/src/diagnostics.js new file mode 100644 index 0000000..36694a0 --- /dev/null +++ b/src/diagnostics.js @@ -0,0 +1,89 @@ +const MAX_LOG_ENTRIES = 300; +const logBuffer = []; +let snapshotProvider = null; +let browserDiagnosticsInstalled = false; + +const safeError = (error) => { + if (!error) return null; + if (error instanceof Error) { + return { + name: error.name, + message: error.message, + stack: error.stack || null, + }; + } + return { message: String(error) }; +}; + +const trimLogs = () => { + if (logBuffer.length > MAX_LOG_ENTRIES) { + logBuffer.splice(0, logBuffer.length - MAX_LOG_ENTRIES); + } +}; + +export const airshipLog = (event, data = {}, level = 'info') => { + const entry = { + ts: new Date().toISOString(), + level, + event, + ...data, + }; + + logBuffer.push(entry); + trimLogs(); + + const method = level === 'error' ? 'error' : level === 'warn' ? 'warn' : 'log'; + console[method]('[airship]', event, entry); + return entry; +}; + +export const registerDebugSnapshot = (provider) => { + snapshotProvider = typeof provider === 'function' ? provider : null; +}; + +export const getAirshipLogs = () => logBuffer.map((entry) => ({ ...entry })); + +export const clearAirshipLogs = () => { + logBuffer.length = 0; +}; + +export const installBrowserDiagnostics = () => { + if (typeof window === 'undefined' || browserDiagnosticsInstalled) return; + browserDiagnosticsInstalled = true; + + window.__AIRSHIP_LOGS__ = logBuffer; + window.airshipDebug = { + getLogs: getAirshipLogs, + clearLogs: clearAirshipLogs, + snapshot: () => { + try { + return snapshotProvider?.() ?? null; + } catch (error) { + airshipLog('debug:snapshot-error', { error: safeError(error) }, 'error'); + return null; + } + }, + }; + + window.addEventListener('error', (event) => { + airshipLog('runtime:error', { + message: event.message || 'Unknown window error', + source: event.filename || null, + line: event.lineno || null, + column: event.colno || null, + error: safeError(event.error), + }, 'error'); + }); + + window.addEventListener('unhandledrejection', (event) => { + airshipLog('runtime:unhandled-rejection', { + error: safeError(event.reason), + }, 'error'); + }); + + airshipLog('diagnostics:installed', { + userAgent: navigator?.userAgent || 'unknown', + }); +}; + +installBrowserDiagnostics(); diff --git a/src/environment-physics.js b/src/environment-physics.js new file mode 100644 index 0000000..9c76321 --- /dev/null +++ b/src/environment-physics.js @@ -0,0 +1,119 @@ +export const ENVIRONMENT_ISLANDS = [ + { + id: 'west-island', + x: 430, + y: 480, + radius: 82, + turbulenceRadius: 220, + }, + { + id: 'south-east-island', + x: 1940, + y: 1840, + radius: 96, + turbulenceRadius: 250, + }, +]; + +const WIND_PATTERN_MS = 16000; +const WIND_MIN_STRENGTH = 7; +const WIND_MAX_STRENGTH = 24; + +const clamp01 = (value) => Math.max(0, Math.min(1, value)); +const smootherStep = (value) => { + const t = clamp01(value); + return t * t * t * (t * (t * 6 - 15) + 10); +}; +const hash01 = (index, salt = 0) => { + const value = Math.sin(index * 12.9898 + salt * 78.233) * 43758.5453123; + return value - Math.floor(value); +}; +const shortestAngleDelta = (from, to) => { + let delta = (to - from) % (Math.PI * 2); + if (delta > Math.PI) delta -= Math.PI * 2; + if (delta < -Math.PI) delta += Math.PI * 2; + return delta; +}; + +const windTargetForSlot = (slot) => ({ + angle: hash01(slot, 1) * Math.PI * 2, + strength: WIND_MIN_STRENGTH + + hash01(slot, 2) * (WIND_MAX_STRENGTH - WIND_MIN_STRENGTH), +}); + +export const semiRandomWindPattern = (timeMs = 0) => { + const safeTime = Math.max(0, Number(timeMs) || 0); + const slot = Math.floor(safeTime / WIND_PATTERN_MS); + const phase = (safeTime % WIND_PATTERN_MS) / WIND_PATTERN_MS; + const current = windTargetForSlot(slot); + const next = windTargetForSlot(slot + 1); + + // Hold each weather state briefly, then ease toward the next random target. + const blend = smootherStep((phase - 0.18) / 0.82); + const angle = current.angle + + shortestAngleDelta(current.angle, next.angle) * blend; + const strength = current.strength + + (next.strength - current.strength) * blend; + + // A smaller deterministic gust keeps the air alive without frame-to-frame jitter. + const gust = Math.sin(safeTime / 2300 + slot * 0.73) + * (1.1 + hash01(slot, 3) * 1.8); + + return { + angle, + strength: Math.max(4, strength + gust), + }; +}; + +export const environmentWindAt = ({ + x = 0, + y = 0, + timeMs = 0, +} = {}) => { + const time = timeMs / 1000; + const pattern = semiRandomWindPattern(timeMs); + + // Small spatial variation prevents the whole map feeling like one rigid conveyor belt. + const localAngle = pattern.angle + + Math.sin((x + y) / 880 + time / 31) * 0.055; + const localStrength = pattern.strength + + Math.sin((x - y) / 760 + time / 4.7) * 0.9; + + let windX = Math.cos(localAngle) * localStrength; + let windY = Math.sin(localAngle) * localStrength; + + for (const island of ENVIRONMENT_ISLANDS) { + const dx = x - island.x; + const dy = y - island.y; + const distance = Math.hypot(dx, dy); + if (distance <= 1 || distance >= island.turbulenceRadius) continue; + + const influence = 1 - (distance / island.turbulenceRadius); + const normalX = dx / distance; + const normalY = dy / distance; + const tangentX = -normalY; + const tangentY = normalX; + const updraft = 11 * influence * influence; + const swirl = Math.sin(time * 1.35 + distance * 0.018) * 5 * influence; + + windX += normalX * updraft + tangentX * swirl; + windY += normalY * updraft + tangentY * swirl; + } + + return { + x: windX, + y: windY, + strength: Math.hypot(windX, windY), + heading: ((Math.atan2(windY, windX) * 180 / Math.PI) + 450) % 360, + }; +}; + +export const velocityWithEnvironment = ( + velocityX, + velocityY, + wind, + exposure = 1, +) => ({ + x: velocityX + (wind?.x || 0) * exposure, + y: velocityY + (wind?.y || 0) * exposure, +}); diff --git a/src/game-entry.js b/src/game-entry.js new file mode 100644 index 0000000..35dbbc1 --- /dev/null +++ b/src/game-entry.js @@ -0,0 +1,2 @@ +import './game-v4.js'; +import './mobile-hud.js'; diff --git a/src/game-logic.js b/src/game-logic.js new file mode 100644 index 0000000..af1d58e --- /dev/null +++ b/src/game-logic.js @@ -0,0 +1,40 @@ +export const PLAYER_MAX_HULL = 100; +export const DEFAULT_PIRATE_SHOT_DAMAGE = 6; + +export const normalizePlayerDamage = ( + rawDamage, + fallback = DEFAULT_PIRATE_SHOT_DAMAGE, +) => { + const parsed = Number(rawDamage); + const value = Number.isFinite(parsed) ? parsed : fallback; + return Math.max(1, Math.min(25, value)); +}; + +export const reducePlayerProjectileHits = ({ + hull, + hits, + maxHull = PLAYER_MAX_HULL, + fallbackDamage = DEFAULT_PIRATE_SHOT_DAMAGE, +}) => { + const currentHull = Number.isFinite(hull) ? hull : maxHull; + const totalDamage = hits.reduce( + (sum, hit) => sum + normalizePlayerDamage(hit?.damage, fallbackDamage), + 0, + ); + const nextHull = Math.max(0, currentHull - totalDamage); + + return { + hull: nextHull, + totalDamage, + appliedHits: hits.length, + gameOver: nextHull <= 0, + }; +}; + +export const resolveTaggedProjectile = (first, second, owner) => { + for (const candidate of [first, second]) { + if (!candidate || typeof candidate.getData !== 'function') continue; + if (candidate.getData('projectileOwner') === owner) return candidate; + } + return null; +}; diff --git a/src/game-v2.js b/src/game-v2.js new file mode 100644 index 0000000..2d89cac --- /dev/null +++ b/src/game-v2.js @@ -0,0 +1,409 @@ +import Phaser from 'phaser'; +import './style.css'; + +const WORLD_SIZE = 2400; +const PLAYER_MAX_SPEED = 180; +const PLAYER_REVERSE_SPEED = -55; +const PLAYER_ACCELERATION = 85; +const PLAYER_BRAKE = 110; +const PLAYER_TURN_RATE = 72; +const PIRATE_SPEED = 118; +const PIRATE_TURN_RATE = 52; +const SHOT_SPEED = 520; +const SHOT_LIFETIME = 900; +const PLAYER_MAX_HULL = 100; +const PIRATE_MAX_HULL = 120; + +const clamp = (v, min, max) => Math.max(min, Math.min(max, v)); +const degToRad = (deg) => deg * Math.PI / 180; +const normalizeDegrees = (deg) => ((deg % 360) + 360) % 360; +const signedAngleDelta = (target, current) => { + let delta = normalizeDegrees(target) - normalizeDegrees(current); + if (delta > 180) delta -= 360; + if (delta < -180) delta += 360; + return delta; +}; +const bearingTo = (from, to) => normalizeDegrees(Math.atan2(to.y - from.y, to.x - from.x) * 180 / Math.PI + 90); +const headingRad = (ship) => degToRad(ship.angle - 90); + +class GameScene extends Phaser.Scene { + constructor() { + super('game'); + this.playerSpeed = 0; + this.playerHull = PLAYER_MAX_HULL; + this.pirateHull = PIRATE_MAX_HULL; + this.gameState = 'playing'; + this.lastPlayerShot = 0; + this.lastPirateShot = 0; + } + + create() { + this.physics.world.setBounds(0, 0, WORLD_SIZE, WORLD_SIZE); + this.drawWorld(); + this.createTextures(); + + this.player = this.physics.add.sprite(1200, 1550, 'player-ship'); + this.player.setDepth(6).setCollideWorldBounds(true); + this.player.body.setAllowGravity(false); + this.player.body.setSize(42, 56, true); + + this.pirate = this.physics.add.image(1200, 800, 'pirate-ship'); + this.pirate.setDepth(6).setCollideWorldBounds(true); + this.pirate.body.setAllowGravity(false); + this.pirate.body.setSize(46, 58, true); + this.pirate.angle = 180; + + this.playerShots = this.physics.add.group(); + this.pirateShots = this.physics.add.group(); + this.arcGraphics = this.add.graphics().setDepth(4); + + this.physics.add.overlap(this.playerShots, this.pirate, this.hitPirate, null, this); + this.physics.add.overlap(this.pirateShots, this.player, this.hitPlayer, null, this); + + this.cursors = this.input.keyboard.createCursorKeys(); + this.keys = this.input.keyboard.addKeys({ + firePort: Phaser.Input.Keyboard.KeyCodes.Q, + fireStarboard: Phaser.Input.Keyboard.KeyCodes.E, + stop: Phaser.Input.Keyboard.KeyCodes.SPACE, + restart: Phaser.Input.Keyboard.KeyCodes.R, + }); + + this.cameras.main.setBounds(0, 0, WORLD_SIZE, WORLD_SIZE); + this.cameras.main.startFollow(this.player, true, 0.08, 0.08); + this.cameras.main.setZoom(1.12); + + this.title = this.add.text(18, 16, 'ARROWSTACK AIRSHIP', { + fontFamily: 'monospace', + fontSize: '12px', + color: '#8cd3ff', + }).setScrollFactor(0).setDepth(30); + + this.hud = this.add.text(18, 42, '', { + fontFamily: 'monospace', + fontSize: '14px', + color: '#e8f2f7', + backgroundColor: '#071018cc', + padding: { x: 12, y: 10 }, + lineSpacing: 4, + }).setScrollFactor(0).setDepth(30); + + this.status = this.add.text(this.scale.width / 2, 22, '', { + fontFamily: 'monospace', + fontSize: '18px', + color: '#ffffff', + backgroundColor: '#071018dd', + padding: { x: 16, y: 10 }, + align: 'center', + }).setOrigin(0.5, 0).setScrollFactor(0).setDepth(31); + + this.healthGraphics = this.add.graphics().setScrollFactor(0).setDepth(30); + this.healthLabels = { + player: this.add.text(18, this.scale.height - 64, 'SPARROW', { + fontFamily: 'monospace', fontSize: '12px', color: '#d8ecff', + }).setScrollFactor(0).setDepth(31), + pirate: this.add.text(this.scale.width - 18, this.scale.height - 64, 'CUTLASS PIRATE', { + fontFamily: 'monospace', fontSize: '12px', color: '#ffd0d0', + }).setOrigin(1, 0).setScrollFactor(0).setDepth(31), + }; + + this.scale.on('resize', this.layoutHud, this); + this.layoutHud({ width: this.scale.width, height: this.scale.height }); + } + + drawWorld() { + const bg = this.add.graphics(); + bg.fillStyle(0x132335, 1); + bg.fillRect(0, 0, WORLD_SIZE, WORLD_SIZE); + bg.lineStyle(1, 0x8db3cc, 0.08); + for (let x = 0; x <= WORLD_SIZE; x += 100) bg.lineBetween(x, 0, x, WORLD_SIZE); + for (let y = 0; y <= WORLD_SIZE; y += 100) bg.lineBetween(0, y, WORLD_SIZE, y); + + const clouds = this.add.graphics(); + for (let i = 0; i < 46; i++) { + const x = Phaser.Math.Between(80, WORLD_SIZE - 80); + const y = Phaser.Math.Between(80, WORLD_SIZE - 80); + const r = Phaser.Math.Between(24, 62); + clouds.fillStyle(0xbcd2df, Phaser.Math.FloatBetween(0.025, 0.08)); + clouds.fillCircle(x, y, r); + clouds.fillCircle(x + r * 0.55, y + 8, r * 0.7); + clouds.fillCircle(x - r * 0.45, y + 5, r * 0.6); + } + + const island = this.add.graphics(); + island.fillStyle(0x5d694e, 1); + island.fillEllipse(430, 480, 230, 150); + island.fillStyle(0xa18a62, 1); + island.fillEllipse(430, 470, 190, 105); + island.fillStyle(0x283827, 1); + island.fillCircle(390, 440, 18); + island.fillCircle(455, 450, 14); + island.fillCircle(490, 425, 12); + + const island2 = this.add.graphics(); + island2.fillStyle(0x5d694e, 1); + island2.fillEllipse(1940, 1840, 260, 165); + island2.fillStyle(0xa18a62, 1); + island2.fillEllipse(1940, 1830, 210, 112); + } + + createTextures() { + const makeShip = (key, hullColor, balloonColor) => { + const g = this.make.graphics({ x: 0, y: 0, add: false }); + g.fillStyle(hullColor, 1); + g.fillTriangle(32, 2, 8, 64, 56, 64); + g.fillStyle(0x715438, 1); + g.fillRect(17, 31, 30, 20); + g.fillStyle(balloonColor, 1); + g.fillEllipse(32, 23, 42, 16); + g.lineStyle(2, 0x201914, 0.9); + g.strokeTriangle(32, 2, 8, 64, 56, 64); + g.generateTexture(key, 64, 68); + g.destroy(); + }; + + makeShip('player-ship', 0xd8a65f, 0xe8dfc7); + makeShip('pirate-ship', 0x9f3d3d, 0x5c2020); + + const playerShot = this.make.graphics({ x: 0, y: 0, add: false }); + playerShot.fillStyle(0xffd36a, 1); + playerShot.fillCircle(5, 5, 5); + playerShot.generateTexture('player-shot', 10, 10); + playerShot.destroy(); + + const pirateShot = this.make.graphics({ x: 0, y: 0, add: false }); + pirateShot.fillStyle(0xff6b62, 1); + pirateShot.fillCircle(5, 5, 5); + pirateShot.generateTexture('pirate-shot', 10, 10); + pirateShot.destroy(); + } + + update(_time, deltaMs) { + const dt = Math.min(deltaMs / 1000, 0.05); + + if (this.gameState !== 'playing') { + if (Phaser.Input.Keyboard.JustDown(this.keys.restart)) this.scene.restart(); + this.drawHud(); + return; + } + + this.updatePlayer(dt, deltaMs); + this.updatePirate(dt); + this.updateProjectiles(); + this.drawWeaponArcs(); + this.drawHud(); + this.checkGameState(); + } + + updatePlayer(dt, deltaMs) { + if (!this.player?.body) return; + + if (this.cursors.up.isDown) this.playerSpeed += PLAYER_ACCELERATION * dt; + if (this.cursors.down.isDown) this.playerSpeed -= PLAYER_BRAKE * dt; + if (this.keys.stop.isDown) this.playerSpeed *= Math.pow(0.025, dt); + + if (!this.cursors.up.isDown && !this.cursors.down.isDown && !this.keys.stop.isDown) { + this.playerSpeed *= Math.pow(0.985, deltaMs / 16.667); + } + + this.playerSpeed = clamp(this.playerSpeed, PLAYER_REVERSE_SPEED, PLAYER_MAX_SPEED); + const turnStrength = clamp(Math.abs(this.playerSpeed) / 100, 0.28, 1); + const directionSign = this.playerSpeed < 0 ? -1 : 1; + + if (this.cursors.left.isDown) this.player.angle -= PLAYER_TURN_RATE * turnStrength * directionSign * dt; + if (this.cursors.right.isDown) this.player.angle += PLAYER_TURN_RATE * turnStrength * directionSign * dt; + + const h = headingRad(this.player); + this.player.setVelocity(Math.cos(h) * this.playerSpeed, Math.sin(h) * this.playerSpeed); + + if (Phaser.Input.Keyboard.JustDown(this.keys.firePort)) this.playerBroadside(-1); + if (Phaser.Input.Keyboard.JustDown(this.keys.fireStarboard)) this.playerBroadside(1); + } + + updatePirate(dt) { + if (!this.pirate.active) return; + + const dx = this.player.x - this.pirate.x; + const dy = this.player.y - this.pirate.y; + const distance = Math.hypot(dx, dy); + const bearing = bearingTo(this.pirate, this.player); + + let desiredHeading = bearing; + if (distance < 360) { + const optionA = normalizeDegrees(bearing + 90); + const optionB = normalizeDegrees(bearing - 90); + desiredHeading = Math.abs(signedAngleDelta(optionA, this.pirate.angle)) < Math.abs(signedAngleDelta(optionB, this.pirate.angle)) ? optionA : optionB; + } + + const delta = signedAngleDelta(desiredHeading, this.pirate.angle); + this.pirate.angle += clamp(delta, -PIRATE_TURN_RATE * dt, PIRATE_TURN_RATE * dt); + + const speed = distance > 430 ? PIRATE_SPEED : distance < 210 ? 72 : 96; + const h = headingRad(this.pirate); + this.pirate.setVelocity(Math.cos(h) * speed, Math.sin(h) * speed); + + const relative = signedAngleDelta(bearing, this.pirate.angle); + const broadsideError = Math.abs(Math.abs(relative) - 90); + if (distance < 420 && broadsideError < 38 && this.time.now - this.lastPirateShot > 1650) { + const side = relative >= 0 ? 1 : -1; + this.fireBroadside(this.pirate, side, this.pirateShots, 'pirate-shot', 12, 0.9); + this.lastPirateShot = this.time.now; + } + } + + playerBroadside(side) { + if (this.time.now - this.lastPlayerShot < 850) return; + this.fireBroadside(this.player, side, this.playerShots, 'player-shot', 16, 1.0); + this.lastPlayerShot = this.time.now; + } + + fireBroadside(ship, side, group, texture, damage, velocityScale) { + const base = headingRad(ship) + side * Math.PI / 2; + const offsets = [-7, 0, 7]; + + for (const offset of offsets) { + const angle = base + degToRad(offset); + const x = ship.x + Math.cos(base) * 34; + const y = ship.y + Math.sin(base) * 34; + const shot = group.create(x, y, texture); + shot.setDepth(8); + shot.body.setAllowGravity(false); + shot.setData('bornAt', this.time.now); + shot.setData('damage', damage); + shot.setVelocity( + Math.cos(angle) * SHOT_SPEED * velocityScale + ship.body.velocity.x * 0.25, + Math.sin(angle) * SHOT_SPEED * velocityScale + ship.body.velocity.y * 0.25, + ); + } + } + + hitPirate(shot) { + if (!shot.active || this.gameState !== 'playing') return; + const damage = shot.getData('damage') || 10; + shot.destroy(); + this.pirateHull = Math.max(0, this.pirateHull - damage); + this.flashShip(this.pirate, 0xffcccc); + } + + hitPlayer(shot) { + if (!shot.active || this.gameState !== 'playing') return; + const damage = shot.getData('damage') || 10; + shot.destroy(); + this.playerHull = Math.max(0, this.playerHull - damage); + this.flashShip(this.player, 0xffcccc); + } + + flashShip(ship, tint) { + ship.setTint(tint); + this.time.delayedCall(90, () => { + if (ship.active) ship.clearTint(); + }); + } + + updateProjectiles() { + for (const group of [this.playerShots, this.pirateShots]) { + for (const shot of group.getChildren()) { + if (!shot.active) continue; + if (this.time.now - shot.getData('bornAt') > SHOT_LIFETIME) shot.destroy(); + } + } + } + + drawWeaponArcs() { + this.arcGraphics.clear(); + if (this.gameState !== 'playing') return; + + const radius = 190; + const forward = headingRad(this.player); + this.arcGraphics.lineStyle(2, 0xffc857, 0.28); + + for (const side of [-1, 1]) { + const center = forward + side * Math.PI / 2; + this.arcGraphics.beginPath(); + this.arcGraphics.arc(this.player.x, this.player.y, radius, center - Math.PI / 4, center + Math.PI / 4); + this.arcGraphics.strokePath(); + } + } + + drawHud() { + const heading = normalizeDegrees(this.player.angle); + const range = Math.hypot(this.player.x - this.pirate.x, this.player.y - this.pirate.y); + this.hud.setText([ + `speed ${Math.abs(this.playerSpeed).toFixed(0).padStart(3, ' ')} ${this.playerSpeed < 0 ? 'REV' : 'FWD'}`, + `heading ${heading.toFixed(0).padStart(3, ' ')}°`, + `pirate ${range.toFixed(0).padStart(4, ' ')}m`, + '', + '↑ / ↓ throttle / reverse', + '← / → steer', + 'Q port broadside', + 'E starboard broadside', + 'SPACE brake', + ]); + + const w = this.scale.width; + const h = this.scale.height; + const barWidth = Math.min(280, w * 0.32); + const barHeight = 16; + const y = h - 38; + + this.healthGraphics.clear(); + this.healthGraphics.fillStyle(0x071018, 0.85); + this.healthGraphics.fillRect(18, y, barWidth, barHeight); + this.healthGraphics.fillRect(w - 18 - barWidth, y, barWidth, barHeight); + + this.healthGraphics.fillStyle(0x61c98b, 1); + this.healthGraphics.fillRect(18, y, barWidth * (this.playerHull / PLAYER_MAX_HULL), barHeight); + this.healthGraphics.fillStyle(0xd65757, 1); + this.healthGraphics.fillRect(w - 18 - barWidth, y, barWidth * (this.pirateHull / PIRATE_MAX_HULL), barHeight); + + this.healthLabels.player.setText(`SPARROW ${this.playerHull}/${PLAYER_MAX_HULL}`); + this.healthLabels.pirate.setText(`CUTLASS PIRATE ${this.pirateHull}/${PIRATE_MAX_HULL}`); + } + + checkGameState() { + if (this.pirateHull <= 0) this.finishGame('won'); + else if (this.playerHull <= 0) this.finishGame('lost'); + } + + finishGame(result) { + this.gameState = result; + this.player.setVelocity(0, 0); + this.pirate.setVelocity(0, 0); + this.playerShots.clear(true, true); + this.pirateShots.clear(true, true); + + if (result === 'won') { + this.pirate.setTint(0x555555); + this.status.setText('PIRATE DISABLED\nYou win\n\nPress R to restart'); + } else { + this.player.setTint(0x555555); + this.status.setText('YOUR SHIP IS DISABLED\nYou lose\n\nPress R to restart'); + } + } + + layoutHud(gameSize) { + const width = gameSize.width; + const height = gameSize.height; + if (this.status) this.status.setPosition(width / 2, 22); + if (this.healthLabels) { + this.healthLabels.player.setPosition(18, height - 64); + this.healthLabels.pirate.setPosition(width - 18, height - 64); + } + } +} + +new Phaser.Game({ + type: Phaser.AUTO, + parent: 'game', + width: window.innerWidth, + height: window.innerHeight, + backgroundColor: '#132335', + physics: { + default: 'arcade', + arcade: { debug: false }, + }, + scale: { + mode: Phaser.Scale.RESIZE, + autoCenter: Phaser.Scale.CENTER_BOTH, + }, + scene: GameScene, +}); diff --git a/src/game-v3.js b/src/game-v3.js new file mode 100644 index 0000000..6e79558 --- /dev/null +++ b/src/game-v3.js @@ -0,0 +1,453 @@ +import Phaser from 'phaser'; +import './style.css'; +import airshipSheetUrl from './assets/airships.svg?url'; +import explosionSheetUrl from './assets/explosions.svg?url'; + +const WORLD_SIZE = 2400; +const PLAYER_MAX_SPEED = 180; +const PLAYER_REVERSE_SPEED = -55; +const PLAYER_ACCELERATION = 85; +const PLAYER_BRAKE = 110; +const PLAYER_TURN_RATE = 72; +const PIRATE_SPEED = 118; +const PIRATE_TURN_RATE = 52; +const SHOT_SPEED = 520; +const SHOT_LIFETIME = 900; +const PLAYER_MAX_HULL = 100; +const PIRATE_MAX_HULL = 120; + +const clamp = (v, min, max) => Math.max(min, Math.min(max, v)); +const degToRad = (deg) => deg * Math.PI / 180; +const normalizeDegrees = (deg) => ((deg % 360) + 360) % 360; +const signedAngleDelta = (target, current) => { + let delta = normalizeDegrees(target) - normalizeDegrees(current); + if (delta > 180) delta -= 360; + if (delta < -180) delta += 360; + return delta; +}; +const bearingTo = (from, to) => normalizeDegrees(Math.atan2(to.y - from.y, to.x - from.x) * 180 / Math.PI + 90); +const headingRad = (ship) => degToRad(ship.angle - 90); + +class GameScene extends Phaser.Scene { + constructor() { + super('game'); + this.playerSpeed = 0; + this.playerHull = PLAYER_MAX_HULL; + this.pirateHull = PIRATE_MAX_HULL; + this.gameState = 'playing'; + this.lastPlayerShot = 0; + this.lastPirateShot = 0; + } + + preload() { + this.load.spritesheet('airships', airshipSheetUrl, { + frameWidth: 64, + frameHeight: 64, + }); + this.load.spritesheet('explosions', explosionSheetUrl, { + frameWidth: 64, + frameHeight: 64, + }); + } + + create() { + this.physics.world.setBounds(0, 0, WORLD_SIZE, WORLD_SIZE); + this.drawWorld(); + this.createTextures(); + this.createAnimations(); + + this.player = this.physics.add.sprite(1200, 1550, 'airships', 0); + this.player.setDepth(6).setCollideWorldBounds(true).setDisplaySize(74, 74); + this.player.body.setAllowGravity(false); + this.player.body.setSize(42, 56, true); + this.player.play('player-idle'); + + this.pirate = this.physics.add.sprite(1200, 800, 'airships', 4); + this.pirate.setDepth(6).setCollideWorldBounds(true).setDisplaySize(78, 78); + this.pirate.body.setAllowGravity(false); + this.pirate.body.setSize(46, 58, true); + this.pirate.angle = 180; + this.pirate.play('pirate-idle'); + + this.playerShots = this.physics.add.group(); + this.pirateShots = this.physics.add.group(); + this.arcGraphics = this.add.graphics().setDepth(4); + + this.physics.add.overlap(this.playerShots, this.pirate, this.hitPirate, null, this); + this.physics.add.overlap(this.pirateShots, this.player, this.hitPlayer, null, this); + + this.cursors = this.input.keyboard.createCursorKeys(); + this.keys = this.input.keyboard.addKeys({ + firePort: Phaser.Input.Keyboard.KeyCodes.Q, + fireStarboard: Phaser.Input.Keyboard.KeyCodes.E, + stop: Phaser.Input.Keyboard.KeyCodes.SPACE, + restart: Phaser.Input.Keyboard.KeyCodes.R, + }); + + this.cameras.main.setBounds(0, 0, WORLD_SIZE, WORLD_SIZE); + this.cameras.main.startFollow(this.player, true, 0.08, 0.08); + this.cameras.main.setZoom(1.12); + + this.title = this.add.text(18, 16, 'ARROWSTACK AIRSHIP', { + fontFamily: 'monospace', + fontSize: '12px', + color: '#8cd3ff', + }).setScrollFactor(0).setDepth(30); + + this.hud = this.add.text(18, 42, '', { + fontFamily: 'monospace', + fontSize: '14px', + color: '#e8f2f7', + backgroundColor: '#071018cc', + padding: { x: 12, y: 10 }, + lineSpacing: 4, + }).setScrollFactor(0).setDepth(30); + + this.status = this.add.text(this.scale.width / 2, 22, '', { + fontFamily: 'monospace', + fontSize: '18px', + color: '#ffffff', + backgroundColor: '#071018dd', + padding: { x: 16, y: 10 }, + align: 'center', + }).setOrigin(0.5, 0).setScrollFactor(0).setDepth(31); + + this.healthGraphics = this.add.graphics().setScrollFactor(0).setDepth(30); + this.healthLabels = { + player: this.add.text(18, this.scale.height - 64, 'SPARROW', { + fontFamily: 'monospace', fontSize: '12px', color: '#d8ecff', + }).setScrollFactor(0).setDepth(31), + pirate: this.add.text(this.scale.width - 18, this.scale.height - 64, 'CUTLASS PIRATE', { + fontFamily: 'monospace', fontSize: '12px', color: '#ffd0d0', + }).setOrigin(1, 0).setScrollFactor(0).setDepth(31), + }; + + this.scale.on('resize', this.layoutHud, this); + this.layoutHud({ width: this.scale.width, height: this.scale.height }); + } + + createAnimations() { + if (!this.anims.exists('player-idle')) { + this.anims.create({ + key: 'player-idle', + frames: this.anims.generateFrameNumbers('airships', { start: 0, end: 3 }), + frameRate: 5, + repeat: -1, + }); + } + + if (!this.anims.exists('pirate-idle')) { + this.anims.create({ + key: 'pirate-idle', + frames: this.anims.generateFrameNumbers('airships', { start: 4, end: 7 }), + frameRate: 5, + repeat: -1, + }); + } + + if (!this.anims.exists('impact-explosion')) { + this.anims.create({ + key: 'impact-explosion', + frames: this.anims.generateFrameNumbers('explosions', { start: 0, end: 5 }), + frameRate: 18, + repeat: 0, + }); + } + } + + drawWorld() { + const bg = this.add.graphics(); + bg.fillStyle(0x132335, 1); + bg.fillRect(0, 0, WORLD_SIZE, WORLD_SIZE); + bg.lineStyle(1, 0x8db3cc, 0.08); + for (let x = 0; x <= WORLD_SIZE; x += 100) bg.lineBetween(x, 0, x, WORLD_SIZE); + for (let y = 0; y <= WORLD_SIZE; y += 100) bg.lineBetween(0, y, WORLD_SIZE, y); + + const clouds = this.add.graphics(); + for (let i = 0; i < 46; i++) { + const x = Phaser.Math.Between(80, WORLD_SIZE - 80); + const y = Phaser.Math.Between(80, WORLD_SIZE - 80); + const r = Phaser.Math.Between(24, 62); + clouds.fillStyle(0xbcd2df, Phaser.Math.FloatBetween(0.025, 0.08)); + clouds.fillCircle(x, y, r); + clouds.fillCircle(x + r * 0.55, y + 8, r * 0.7); + clouds.fillCircle(x - r * 0.45, y + 5, r * 0.6); + } + + const island = this.add.graphics(); + island.fillStyle(0x5d694e, 1); + island.fillEllipse(430, 480, 230, 150); + island.fillStyle(0xa18a62, 1); + island.fillEllipse(430, 470, 190, 105); + island.fillStyle(0x283827, 1); + island.fillCircle(390, 440, 18); + island.fillCircle(455, 450, 14); + island.fillCircle(490, 425, 12); + + const island2 = this.add.graphics(); + island2.fillStyle(0x5d694e, 1); + island2.fillEllipse(1940, 1840, 260, 165); + island2.fillStyle(0xa18a62, 1); + island2.fillEllipse(1940, 1830, 210, 112); + } + + createTextures() { + const playerShot = this.make.graphics({ x: 0, y: 0, add: false }); + playerShot.fillStyle(0xffd36a, 1); + playerShot.fillCircle(5, 5, 5); + playerShot.lineStyle(1, 0xfff0b0, 1); + playerShot.strokeCircle(5, 5, 4); + playerShot.generateTexture('player-shot', 10, 10); + playerShot.destroy(); + + const pirateShot = this.make.graphics({ x: 0, y: 0, add: false }); + pirateShot.fillStyle(0xff6b62, 1); + pirateShot.fillCircle(5, 5, 5); + pirateShot.lineStyle(1, 0xffb0aa, 1); + pirateShot.strokeCircle(5, 5, 4); + pirateShot.generateTexture('pirate-shot', 10, 10); + pirateShot.destroy(); + } + + update(_time, deltaMs) { + const dt = Math.min(deltaMs / 1000, 0.05); + + if (this.gameState !== 'playing') { + if (Phaser.Input.Keyboard.JustDown(this.keys.restart)) this.scene.restart(); + this.drawHud(); + return; + } + + this.updatePlayer(dt, deltaMs); + this.updatePirate(dt); + this.updateProjectiles(); + this.drawWeaponArcs(); + this.drawHud(); + this.checkGameState(); + } + + updatePlayer(dt, deltaMs) { + if (!this.player?.body) return; + + if (this.cursors.up.isDown) this.playerSpeed += PLAYER_ACCELERATION * dt; + if (this.cursors.down.isDown) this.playerSpeed -= PLAYER_BRAKE * dt; + if (this.keys.stop.isDown) this.playerSpeed *= Math.pow(0.025, dt); + + if (!this.cursors.up.isDown && !this.cursors.down.isDown && !this.keys.stop.isDown) { + this.playerSpeed *= Math.pow(0.985, deltaMs / 16.667); + } + + this.playerSpeed = clamp(this.playerSpeed, PLAYER_REVERSE_SPEED, PLAYER_MAX_SPEED); + const turnStrength = clamp(Math.abs(this.playerSpeed) / 100, 0.28, 1); + const directionSign = this.playerSpeed < 0 ? -1 : 1; + + if (this.cursors.left.isDown) this.player.angle -= PLAYER_TURN_RATE * turnStrength * directionSign * dt; + if (this.cursors.right.isDown) this.player.angle += PLAYER_TURN_RATE * turnStrength * directionSign * dt; + + const h = headingRad(this.player); + this.player.setVelocity(Math.cos(h) * this.playerSpeed, Math.sin(h) * this.playerSpeed); + + if (Phaser.Input.Keyboard.JustDown(this.keys.firePort)) this.playerBroadside(-1); + if (Phaser.Input.Keyboard.JustDown(this.keys.fireStarboard)) this.playerBroadside(1); + } + + updatePirate(dt) { + if (!this.pirate.active) return; + + const dx = this.player.x - this.pirate.x; + const dy = this.player.y - this.pirate.y; + const distance = Math.hypot(dx, dy); + const bearing = bearingTo(this.pirate, this.player); + + let desiredHeading = bearing; + if (distance < 360) { + const optionA = normalizeDegrees(bearing + 90); + const optionB = normalizeDegrees(bearing - 90); + desiredHeading = Math.abs(signedAngleDelta(optionA, this.pirate.angle)) < Math.abs(signedAngleDelta(optionB, this.pirate.angle)) ? optionA : optionB; + } + + const delta = signedAngleDelta(desiredHeading, this.pirate.angle); + this.pirate.angle += clamp(delta, -PIRATE_TURN_RATE * dt, PIRATE_TURN_RATE * dt); + + const speed = distance > 430 ? PIRATE_SPEED : distance < 210 ? 72 : 96; + const h = headingRad(this.pirate); + this.pirate.setVelocity(Math.cos(h) * speed, Math.sin(h) * speed); + + const relative = signedAngleDelta(bearing, this.pirate.angle); + const broadsideError = Math.abs(Math.abs(relative) - 90); + if (distance < 420 && broadsideError < 38 && this.time.now - this.lastPirateShot > 1650) { + const side = relative >= 0 ? 1 : -1; + this.fireBroadside(this.pirate, side, this.pirateShots, 'pirate-shot', 12, 0.9); + this.lastPirateShot = this.time.now; + } + } + + playerBroadside(side) { + if (this.time.now - this.lastPlayerShot < 850) return; + this.fireBroadside(this.player, side, this.playerShots, 'player-shot', 16, 1.0); + this.lastPlayerShot = this.time.now; + } + + fireBroadside(ship, side, group, texture, damage, velocityScale) { + const base = headingRad(ship) + side * Math.PI / 2; + const offsets = [-7, 0, 7]; + + for (const offset of offsets) { + const angle = base + degToRad(offset); + const x = ship.x + Math.cos(base) * 34; + const y = ship.y + Math.sin(base) * 34; + const shot = group.create(x, y, texture); + shot.setDepth(8); + shot.body.setAllowGravity(false); + shot.setData('bornAt', this.time.now); + shot.setData('damage', damage); + shot.setVelocity( + Math.cos(angle) * SHOT_SPEED * velocityScale + ship.body.velocity.x * 0.25, + Math.sin(angle) * SHOT_SPEED * velocityScale + ship.body.velocity.y * 0.25, + ); + } + } + + hitPirate(shot) { + if (!shot.active || this.gameState !== 'playing') return; + const damage = shot.getData('damage') || 10; + const { x, y } = shot; + shot.destroy(); + this.spawnExplosion(x, y, 0.7); + this.pirateHull = Math.max(0, this.pirateHull - damage); + this.flashShip(this.pirate, 0xffcccc); + } + + hitPlayer(shot) { + if (!shot.active || this.gameState !== 'playing') return; + const damage = shot.getData('damage') || 10; + const { x, y } = shot; + shot.destroy(); + this.spawnExplosion(x, y, 0.7); + this.playerHull = Math.max(0, this.playerHull - damage); + this.flashShip(this.player, 0xffcccc); + } + + spawnExplosion(x, y, scale = 1) { + const fx = this.add.sprite(x, y, 'explosions', 0).setDepth(20).setScale(scale); + fx.play('impact-explosion'); + fx.once(Phaser.Animations.Events.ANIMATION_COMPLETE, () => fx.destroy()); + } + + flashShip(ship, tint) { + ship.setTint(tint); + this.time.delayedCall(90, () => { + if (ship.active) ship.clearTint(); + }); + } + + updateProjectiles() { + for (const group of [this.playerShots, this.pirateShots]) { + for (const shot of group.getChildren()) { + if (!shot.active) continue; + if (this.time.now - shot.getData('bornAt') > SHOT_LIFETIME) shot.destroy(); + } + } + } + + drawWeaponArcs() { + this.arcGraphics.clear(); + if (this.gameState !== 'playing') return; + + const radius = 190; + const forward = headingRad(this.player); + this.arcGraphics.lineStyle(2, 0xffc857, 0.28); + + for (const side of [-1, 1]) { + const center = forward + side * Math.PI / 2; + this.arcGraphics.beginPath(); + this.arcGraphics.arc(this.player.x, this.player.y, radius, center - Math.PI / 4, center + Math.PI / 4); + this.arcGraphics.strokePath(); + } + } + + drawHud() { + const heading = normalizeDegrees(this.player.angle); + const range = Math.hypot(this.player.x - this.pirate.x, this.player.y - this.pirate.y); + this.hud.setText([ + `speed ${Math.abs(this.playerSpeed).toFixed(0).padStart(3, ' ')} ${this.playerSpeed < 0 ? 'REV' : 'FWD'}`, + `heading ${heading.toFixed(0).padStart(3, ' ')}°`, + `pirate ${range.toFixed(0).padStart(4, ' ')}m`, + '', + '↑ / ↓ throttle / reverse', + '← / → steer', + 'Q port broadside', + 'E starboard broadside', + 'SPACE brake', + ]); + + const w = this.scale.width; + const h = this.scale.height; + const barWidth = Math.min(280, w * 0.32); + const barHeight = 16; + const y = h - 38; + + this.healthGraphics.clear(); + this.healthGraphics.fillStyle(0x071018, 0.85); + this.healthGraphics.fillRect(18, y, barWidth, barHeight); + this.healthGraphics.fillRect(w - 18 - barWidth, y, barWidth, barHeight); + + this.healthGraphics.fillStyle(0x61c98b, 1); + this.healthGraphics.fillRect(18, y, barWidth * (this.playerHull / PLAYER_MAX_HULL), barHeight); + this.healthGraphics.fillStyle(0xd65757, 1); + this.healthGraphics.fillRect(w - 18 - barWidth, y, barWidth * (this.pirateHull / PIRATE_MAX_HULL), barHeight); + + this.healthLabels.player.setText(`SPARROW ${this.playerHull}/${PLAYER_MAX_HULL}`); + this.healthLabels.pirate.setText(`CUTLASS PIRATE ${this.pirateHull}/${PIRATE_MAX_HULL}`); + } + + checkGameState() { + if (this.pirateHull <= 0) this.finishGame('won'); + else if (this.playerHull <= 0) this.finishGame('lost'); + } + + finishGame(result) { + this.gameState = result; + this.player.setVelocity(0, 0); + this.pirate.setVelocity(0, 0); + this.playerShots.clear(true, true); + this.pirateShots.clear(true, true); + + if (result === 'won') { + this.spawnExplosion(this.pirate.x, this.pirate.y, 1.25); + this.pirate.setTint(0x555555); + this.status.setText('PIRATE DISABLED\nYou win\n\nPress R to restart'); + } else { + this.spawnExplosion(this.player.x, this.player.y, 1.25); + this.player.setTint(0x555555); + this.status.setText('YOUR SHIP IS DISABLED\nYou lose\n\nPress R to restart'); + } + } + + layoutHud(gameSize) { + const width = gameSize.width; + const height = gameSize.height; + if (this.status) this.status.setPosition(width / 2, 22); + if (this.healthLabels) { + this.healthLabels.player.setPosition(18, height - 64); + this.healthLabels.pirate.setPosition(width - 18, height - 64); + } + } +} + +new Phaser.Game({ + type: Phaser.AUTO, + parent: 'game', + width: window.innerWidth, + height: window.innerHeight, + backgroundColor: '#132335', + physics: { + default: 'arcade', + arcade: { debug: false }, + }, + scale: { + mode: Phaser.Scale.RESIZE, + autoCenter: Phaser.Scale.CENTER_BOTH, + }, + scene: GameScene, +}); diff --git a/src/game-v4.js b/src/game-v4.js new file mode 100644 index 0000000..01a9a69 --- /dev/null +++ b/src/game-v4.js @@ -0,0 +1,1350 @@ +import Phaser from 'phaser'; +import './style.css'; +import airshipSheetUrl from './assets/airships.svg?url'; +import playerAirshipUrl from './assets/player-airship-4frame.png?url'; +import explosionSheetUrl from './assets/explosions.svg?url'; +import cannonballUrl from './assets/cannonball.png?url'; +import { airshipLog, registerDebugSnapshot } from './diagnostics.js'; +import { + DEFAULT_PIRATE_SHOT_DAMAGE, + PLAYER_MAX_HULL, + normalizePlayerDamage, + reducePlayerProjectileHits, + resolveTaggedProjectile, +} from './game-logic.js'; +import { + pirateDesiredHeading, + pirateRosterForWave, + pirateSpeedForRange, + separationVector, +} from './pirate-ai.js'; +import { + ENVIRONMENT_ISLANDS, + environmentWindAt, + velocityWithEnvironment, +} from './environment-physics.js'; + +const WORLD_SIZE = 2400; +const PLAYER_MAX_SPEED = 180; +const PLAYER_REVERSE_SPEED = -55; +const PLAYER_ACCELERATION = 92; +const PLAYER_BRAKE = 118; +const PLAYER_TURN_RATE = 76; +const PLAYER_COAST_DRAG = 0.992; +const HELM_DEAD_ZONE = 0.1; +const HELM_STEER_CURVE = 1.18; +const PLAYER_BROADSIDE_RELOAD_MS = 850; +const SHOT_SPEED = 520; +const SHOT_LIFETIME = 900; +const PIRATE_FALLBACK_MAX_HULL = 120; +const MAX_PIRATES = 6; +const HUD_PUBLISH_INTERVAL_MS = 50; +const PLAYER_SMOKE_REAR_OFFSET = 48; +const PLAYER_SMOKE_ENGINE_OFFSET = 17; +const ROLLING_CLOUD_COUNT = 34; +const ROLLING_CLOUD_WRAP_MARGIN = 180; +const DENSE_CLOUD_MIN_COUNT = 8; +const DENSE_CLOUD_MIN_SCALE = 2.2; +const DENSE_CLOUD_MAX_SCALE = 3.9; +const DENSE_CLOUD_CONCEALMENT_RADIUS_SCALE = 82; +const CLOUD_FIRE_SUPPRESSION_CONCEALMENT = 0.55; +const CLOUD_CLOSE_ENGAGE_RANGE = 180; +const AUTO_RESET_MS = 2200; + +const clamp = (v, min, max) => Math.max(min, Math.min(max, v)); +const degToRad = (deg) => deg * Math.PI / 180; +const normalizeDegrees = (deg) => ((deg % 360) + 360) % 360; +const signedAngleDelta = (target, current) => { + let delta = normalizeDegrees(target) - normalizeDegrees(current); + if (delta > 180) delta -= 360; + if (delta < -180) delta += 360; + return delta; +}; +const bearingTo = (from, to) => normalizeDegrees(Math.atan2(to.y - from.y, to.x - from.x) * 180 / Math.PI + 90); +const headingRad = (ship) => degToRad(ship.angle - 90); + +class GameScene extends Phaser.Scene { + constructor() { + super('game'); + } + + init() { + this.playerSpeed = 0; + this.playerHull = PLAYER_MAX_HULL; + this.gameState = 'playing'; + this.lastPlayerShot = { port: -Infinity, starboard: -Infinity }; + this.playerBroadsideReloadMs = PLAYER_BROADSIDE_RELOAD_MS; + this.helmVector = { x: 0, y: 0 }; + this.pendingPlayerHits = []; + this.playerHitSequence = 0; + this.playerSmokeAccumulatorMs = 0; + this.environmentWind = { x: 0, y: 0, strength: 0, heading: 0 }; + this.lastDiagnosticsAt = -Infinity; + this.lastHudPublishAt = -Infinity; + this.wave = 1; + this.defeated = 0; + + airshipLog('scene:init', { + hull: this.playerHull, + wave: this.wave, + }); + } + + preload() { + this.load.spritesheet('airships', airshipSheetUrl, { + frameWidth: 64, + frameHeight: 64, + }); + this.load.spritesheet('player-airship', playerAirshipUrl, { + frameWidth: 128, + frameHeight: 256, + }); + this.load.spritesheet('explosions', explosionSheetUrl, { + frameWidth: 64, + frameHeight: 64, + }); + this.load.image('cannonball', cannonballUrl); + } + + create() { + this.physics.world.setBounds(0, 0, WORLD_SIZE, WORLD_SIZE); + this.drawWorld(); + this.createRollingClouds(); + this.createAnimations(); + + this.player = this.physics.add.sprite(1200, 1550, 'player-airship', 0); + this.player.setDepth(6).setCollideWorldBounds(true).setDisplaySize(66, 126); + this.player.body.setAllowGravity(false); + this.player.body.setCircle(44, 20, 84); + this.player.setFrame(0); + this.createPlayerSmoke(); + + this.pirates = this.physics.add.group(); + this.playerShots = this.physics.add.group(); + this.pirateShots = this.physics.add.group(); + this.arcGraphics = this.add.graphics().setDepth(4); + this.createEnvironmentPhysics(); + + this.physics.add.overlap(this.playerShots, this.pirates, this.hitPirate, null, this); + this.physics.add.overlap(this.pirateShots, this.pirates, this.hitPirate, null, this); + this.physics.add.overlap(this.pirateShots, this.player, this.hitPlayer, null, this); + + registerDebugSnapshot(() => ({ + gameState: this.gameState, + playerHull: this.playerHull, + playerSpeed: this.playerSpeed, + pendingPlayerHits: this.pendingPlayerHits?.length || 0, + activePirates: this.pirates?.countActive?.(true) || 0, + playerShots: this.playerShots?.countActive?.(true) || 0, + pirateShots: this.pirateShots?.countActive?.(true) || 0, + wave: this.wave, + defeated: this.defeated, + environmentWind: this.environmentWind, + now: this.time?.now ?? null, + player: this.player ? { + x: Math.round(this.player.x), + y: Math.round(this.player.y), + angle: Math.round(this.player.angle), + active: this.player.active, + visible: this.player.visible, + hasBody: Boolean(this.player.body), + } : null, + })); + + airshipLog('scene:create', { + hull: this.playerHull, + wave: this.wave, + worldSize: WORLD_SIZE, + }); + + this.cursors = this.input.keyboard.createCursorKeys(); + this.handleHelmVector = (event) => { + this.helmVector.x = clamp(Number(event.detail?.x) || 0, -1, 1); + this.helmVector.y = clamp(Number(event.detail?.y) || 0, -1, 1); + }; + window.addEventListener('airship:helm-vector', this.handleHelmVector); + this.keys = this.input.keyboard.addKeys({ + firePort: Phaser.Input.Keyboard.KeyCodes.Q, + fireStarboard: Phaser.Input.Keyboard.KeyCodes.E, + stop: Phaser.Input.Keyboard.KeyCodes.SPACE, + restart: Phaser.Input.Keyboard.KeyCodes.R, + }); + + this.cameras.main.setBounds(0, 0, WORLD_SIZE, WORLD_SIZE); + this.cameras.main.startFollow(this.player, true, 0.08, 0.08); + this.cameras.main.setZoom(1.12); + + this.createHud(); + + this.scale.on('resize', this.layoutHud, this); + this.events.once(Phaser.Scenes.Events.SHUTDOWN, () => { + this.scale.off('resize', this.layoutHud, this); + registerDebugSnapshot(null); + window.removeEventListener('airship:helm-vector', this.handleHelmVector); + airshipLog('scene:shutdown', { + gameState: this.gameState, + hull: this.playerHull, + wave: this.wave, + defeated: this.defeated, + }); + }); + this.layoutHud({ width: this.scale.width, height: this.scale.height }); + this.spawnWave(); + } + + + + + createRollingClouds() { + if (!this.textures.exists('rolling-cloud')) { + const cloudTexture = this.make.graphics({ x: 0, y: 0, add: false }); + cloudTexture.fillStyle(0xe7f0f4, 0.34); + cloudTexture.fillEllipse(64, 42, 92, 46); + cloudTexture.fillStyle(0xf5f8fa, 0.26); + cloudTexture.fillCircle(42, 38, 27); + cloudTexture.fillCircle(67, 29, 31); + cloudTexture.fillCircle(88, 40, 25); + cloudTexture.generateTexture('rolling-cloud', 128, 84); + cloudTexture.destroy(); + } + + this.rollingClouds = []; + for (let i = 0; i < ROLLING_CLOUD_COUNT; i++) { + const denseCloud = i < DENSE_CLOUD_MIN_COUNT || Phaser.Math.Between(0, 5) === 0; + const foreground = denseCloud || Phaser.Math.Between(0, 4) === 0; + const baseScale = denseCloud + ? Phaser.Math.FloatBetween(DENSE_CLOUD_MIN_SCALE, DENSE_CLOUD_MAX_SCALE) + : Phaser.Math.FloatBetween(0.85, 2.35); + const alphaMin = denseCloud + ? Phaser.Math.FloatBetween(0.4, 0.52) + : foreground + ? Phaser.Math.FloatBetween(0.08, 0.13) + : Phaser.Math.FloatBetween(0.025, 0.07); + const alphaMax = denseCloud + ? Phaser.Math.FloatBetween(0.72, 0.9) + : foreground + ? Phaser.Math.FloatBetween(0.18, 0.3) + : Phaser.Math.FloatBetween(0.08, 0.16); + const cloud = this.add.image( + Phaser.Math.Between(-ROLLING_CLOUD_WRAP_MARGIN, WORLD_SIZE + ROLLING_CLOUD_WRAP_MARGIN), + Phaser.Math.Between(-ROLLING_CLOUD_WRAP_MARGIN, WORLD_SIZE + ROLLING_CLOUD_WRAP_MARGIN), + 'rolling-cloud', + ); + + cloud + .setDepth(denseCloud ? 8 : foreground ? 7 : 2) + .setScale(baseScale) + .setAlpha(alphaMin) + .setBlendMode(denseCloud ? Phaser.BlendModes.NORMAL : Phaser.BlendModes.SCREEN); + + cloud.setData('denseCloud', denseCloud); + cloud.setData('foreground', foreground); + cloud.setData('baseScale', baseScale); + cloud.setData('alphaMin', alphaMin); + cloud.setData('alphaMax', alphaMax); + cloud.setData('alphaPhase', Phaser.Math.FloatBetween(0, Math.PI * 2)); + cloud.setData('alphaRate', Phaser.Math.FloatBetween(0.00018, 0.00048)); + cloud.setData('rollPhase', Phaser.Math.FloatBetween(0, Math.PI * 2)); + cloud.setData('driftScale', Phaser.Math.FloatBetween(0.55, 1.35)); + cloud.setData( + 'concealmentRadius', + denseCloud ? baseScale * DENSE_CLOUD_CONCEALMENT_RADIUS_SCALE : 0, + ); + cloud.setData( + 'concealmentStrength', + denseCloud ? Phaser.Math.FloatBetween(0.82, 0.98) : 0, + ); + cloud.setData('presence', denseCloud ? Phaser.Math.FloatBetween(0.25, 1) : 1); + cloud.setData('weatherCycleMs', Phaser.Math.Between(18000, 36000)); + cloud.setData('weatherPhase', Phaser.Math.FloatBetween(0, Math.PI * 2)); + cloud.setData('weatherCycleIndex', -1); + + this.rollingClouds.push(cloud); + } + } + + updateRollingClouds(deltaMs) { + if (!this.rollingClouds?.length) return; + + const dt = Math.min(deltaMs / 1000, 0.05); + const now = this.time?.now ?? 0; + + for (const cloud of this.rollingClouds) { + const wind = environmentWindAt({ + x: cloud.x, + y: cloud.y, + timeMs: now, + }); + const driftScale = cloud.getData('driftScale') || 1; + cloud.x += wind.x * driftScale * dt; + cloud.y += wind.y * driftScale * dt; + + const phase = cloud.getData('alphaPhase') || 0; + const rate = cloud.getData('alphaRate') || 0.0003; + const alphaMin = cloud.getData('alphaMin') || 0.04; + const alphaMax = cloud.getData('alphaMax') || 0.14; + const visibility = 0.5 + 0.5 * Math.sin(now * rate + phase); + + let presence = 1; + if (cloud.getData('denseCloud')) { + const weatherCycleMs = cloud.getData('weatherCycleMs') || 26000; + const weatherPhase = cloud.getData('weatherPhase') || 0; + const cyclePosition = (now % weatherCycleMs) / weatherCycleMs; + const weatherWave = 0.5 + 0.5 * Math.sin(cyclePosition * Math.PI * 2 + weatherPhase); + const windPresence = clamp((wind.strength - 5) / 18, 0, 1); + const targetPresence = clamp(weatherWave * 0.72 + windPresence * 0.38 - 0.12, 0, 1); + const previousPresence = cloud.getData('presence') ?? targetPresence; + presence = Phaser.Math.Linear(previousPresence, targetPresence, Math.min(1, dt * 0.7)); + cloud.setData('presence', presence); + + const cycleIndex = Math.floor(now / weatherCycleMs); + const previousCycleIndex = cloud.getData('weatherCycleIndex'); + if (presence < 0.06 && cycleIndex !== previousCycleIndex) { + this.reseedDenseCloudUpwind(cloud, wind); + cloud.setData('weatherCycleIndex', cycleIndex); + } + } + + cloud.setAlpha(Phaser.Math.Linear(alphaMin, alphaMax, visibility) * presence); + + const baseScale = cloud.getData('baseScale') || 1; + const rollPhase = cloud.getData('rollPhase') || 0; + const roll = 1 + Math.sin(now * 0.00022 + rollPhase) * 0.045; + cloud.setScale(baseScale * roll, baseScale / roll); + + if (cloud.x > WORLD_SIZE + ROLLING_CLOUD_WRAP_MARGIN) cloud.x = -ROLLING_CLOUD_WRAP_MARGIN; + if (cloud.y > WORLD_SIZE + ROLLING_CLOUD_WRAP_MARGIN) cloud.y = -ROLLING_CLOUD_WRAP_MARGIN; + if (cloud.x < -ROLLING_CLOUD_WRAP_MARGIN) cloud.x = WORLD_SIZE + ROLLING_CLOUD_WRAP_MARGIN; + if (cloud.y < -ROLLING_CLOUD_WRAP_MARGIN) cloud.y = WORLD_SIZE + ROLLING_CLOUD_WRAP_MARGIN; + } + } + + + + reseedDenseCloudUpwind(cloud, wind) { + const magnitude = Math.max(1, Math.hypot(wind?.x || 0, wind?.y || 0)); + const windX = (wind?.x || 1) / magnitude; + const windY = (wind?.y || 0) / magnitude; + const margin = ROLLING_CLOUD_WRAP_MARGIN; + const crossOffset = Phaser.Math.Between(-Math.round(WORLD_SIZE * 0.45), Math.round(WORLD_SIZE * 0.45)); + const centerX = WORLD_SIZE / 2; + const centerY = WORLD_SIZE / 2; + const sideX = -windY; + const sideY = windX; + + cloud.x = centerX - windX * (WORLD_SIZE / 2 + margin) + sideX * crossOffset; + cloud.y = centerY - windY * (WORLD_SIZE / 2 + margin) + sideY * crossOffset; + cloud.setData('driftScale', Phaser.Math.FloatBetween(0.65, 1.45)); + cloud.setData('weatherPhase', Phaser.Math.FloatBetween(0, Math.PI * 2)); + } + + cloudConcealmentAt(x, y) { + if (!this.rollingClouds?.length) return 0; + + let concealment = 0; + for (const cloud of this.rollingClouds) { + if (!cloud.getData('denseCloud')) continue; + + const radius = cloud.getData('concealmentRadius') || 0; + if (radius <= 0) continue; + + const distance = Phaser.Math.Distance.Between(x, y, cloud.x, cloud.y); + if (distance >= radius) continue; + + const radialStrength = 1 - (distance / radius); + const strength = cloud.getData('concealmentStrength') || 0; + const presence = cloud.getData('presence') ?? 1; + concealment = Math.max(concealment, radialStrength * strength * presence); + } + + return clamp(concealment, 0, 1); + } + + updateCloudConcealment() { + if (!this.player?.active) return; + + const playerConcealment = this.cloudConcealmentAt(this.player.x, this.player.y); + this.player.setAlpha(Phaser.Math.Linear(1, 0.3, playerConcealment)); + this.player.setData('cloudConcealment', playerConcealment); + + for (const pirate of this.pirates?.getChildren?.() || []) { + if (!pirate?.active) continue; + const concealment = this.cloudConcealmentAt(pirate.x, pirate.y); + pirate.setAlpha(Phaser.Math.Linear(1, 0.36, concealment)); + pirate.setData('cloudConcealment', concealment); + } + } + + createEnvironmentPhysics() { + if (!this.textures.exists('environment-collider')) { + const colliderTexture = this.make.graphics({ x: 0, y: 0, add: false }); + colliderTexture.fillStyle(0xffffff, 1); + colliderTexture.fillRect(0, 0, 4, 4); + colliderTexture.generateTexture('environment-collider', 4, 4); + colliderTexture.destroy(); + } + + this.environmentObstacles = ENVIRONMENT_ISLANDS.map((island) => { + const obstacle = this.physics.add.staticImage( + island.x, + island.y, + 'environment-collider', + ); + obstacle + .setDisplaySize(island.radius * 2, island.radius * 2) + .setVisible(false) + .refreshBody(); + obstacle.body.setCircle(island.radius); + + this.physics.add.collider(this.player, obstacle, () => { + this.playerSpeed *= 0.7; + }); + this.physics.add.collider(this.pirates, obstacle); + this.physics.add.overlap( + this.playerShots, + obstacle, + this.hitEnvironmentProjectile, + null, + this, + ); + this.physics.add.overlap( + this.pirateShots, + obstacle, + this.hitEnvironmentProjectile, + null, + this, + ); + + return obstacle; + }); + } + + hitEnvironmentProjectile(first, second) { + const shot = first?.getData?.('projectileOwner') ? first : second; + if (!shot?.active || !shot.getData?.('projectileOwner')) return; + + const { x, y } = shot; + shot.destroy(); + this.spawnExplosion(x, y, 0.2); + } + + createPlayerSmoke() { + if (!this.textures.exists('player-smoke')) { + const smokeTexture = this.make.graphics({ x: 0, y: 0, add: false }); + smokeTexture.fillStyle(0xe3ecee, 0.18); + smokeTexture.fillCircle(8, 8, 7); + smokeTexture.fillStyle(0xf4f7f7, 0.28); + smokeTexture.fillCircle(7, 7, 4.5); + smokeTexture.generateTexture('player-smoke', 16, 16); + smokeTexture.destroy(); + } + + this.playerSmoke = this.add.particles(0, 0, 'player-smoke', { + lifespan: { min: 620, max: 980 }, + scale: { start: 0.5, end: 1.45 }, + alpha: { start: 0.46, end: 0 }, + rotate: { min: 0, max: 360 }, + speedX: 0, + speedY: 0, + frequency: -1, + quantity: 1, + }); + this.playerSmoke.setDepth(5); + } + + updatePlayerSmoke(deltaMs) { + if (!this.playerSmoke || !this.player?.active || !this.player.visible) return; + + const forwardThrust = clamp(this.playerSpeed / PLAYER_MAX_SPEED, 0, 1); + if (this.gameState !== 'playing' || forwardThrust <= 0.04) { + this.playerSmokeAccumulatorMs = 0; + return; + } + + const heading = headingRad(this.player); + const forwardX = Math.cos(heading); + const forwardY = Math.sin(heading); + const sideX = -forwardY; + const sideY = forwardX; + + const sternX = this.player.x - forwardX * PLAYER_SMOKE_REAR_OFFSET; + const sternY = this.player.y - forwardY * PLAYER_SMOKE_REAR_OFFSET; + + const emissionIntervalMs = Phaser.Math.Linear(150, 48, forwardThrust); + this.playerSmokeAccumulatorMs += deltaMs; + + while (this.playerSmokeAccumulatorMs >= emissionIntervalMs) { + const spread = Phaser.Math.FloatBetween(-0.16, 0.16); + const trailHeading = heading + Math.PI + spread; + const trailSpeed = Phaser.Math.Linear(16, 46, forwardThrust) * Phaser.Math.FloatBetween(0.82, 1.16); + const localWind = environmentWindAt({ + x: sternX, + y: sternY, + timeMs: this.time.now, + }); + const velocityX = Math.cos(trailHeading) * trailSpeed + localWind.x * 1.4; + const velocityY = Math.sin(trailHeading) * trailSpeed + localWind.y * 1.4; + + for (const engineSide of [-1, 1]) { + const jitter = Phaser.Math.FloatBetween(-1.5, 1.5); + const engineX = sternX + sideX * (PLAYER_SMOKE_ENGINE_OFFSET * engineSide + jitter); + const engineY = sternY + sideY * (PLAYER_SMOKE_ENGINE_OFFSET * engineSide + jitter); + const particle = this.playerSmoke.emitParticleAt(engineX, engineY, 1); + if (particle) { + particle.velocityX = velocityX; + particle.velocityY = velocityY; + } + } + + this.playerSmokeAccumulatorMs -= emissionIntervalMs; + } + } + + createHud() { + this.mobileHudActive = !window.matchMedia('(hover: hover) and (pointer: fine)').matches; + + const fixedText = (x, y, text, style = {}) => this.add.text(x, y, text, { + fontFamily: 'monospace', + color: '#e8f2f7', + ...style, + }).setScrollFactor(0).setDepth(31); + + this.hudGraphics = this.add.graphics().setScrollFactor(0).setDepth(30); + + this.brandText = fixedText(14, 10, 'ARROWSTACK // SPARROW', { + fontSize: '10px', + color: '#8cd3ff', + }); + + this.speedText = fixedText(14, 29, '', { + fontSize: '16px', + color: '#ffffff', + }); + + this.headingText = fixedText(this.scale.width / 2, 10, '', { + fontSize: '17px', + color: '#d8ecff', + align: 'center', + }).setOrigin(0.5, 0); + + this.waveText = fixedText(this.scale.width / 2, 32, '', { + fontSize: '11px', + color: '#8cd3ff', + align: 'center', + }).setOrigin(0.5, 0); + + this.combatText = fixedText(this.scale.width - 76, 11, '', { + fontSize: '10px', + color: '#c8d6df', + align: 'right', + lineSpacing: 2, + }).setOrigin(1, 0); + + this.playerHullLabel = fixedText(14, 55, '', { + fontSize: '10px', + color: '#a7f0c1', + }); + + this.enemyHullLabel = fixedText(this.scale.width - 14, 55, '', { + fontSize: '10px', + color: '#ffb8b8', + align: 'right', + }).setOrigin(1, 0); + + this.status = fixedText(this.scale.width / 2, 102, '', { + fontSize: '15px', + color: '#ffffff', + backgroundColor: '#071018dd', + padding: { x: 14, y: 8 }, + align: 'center', + }).setOrigin(0.5, 0); + + this.controlsHint = fixedText(this.scale.width / 2, this.scale.height - 22, 'ARROWS move • Q/E broadside • SPACE brake • R restart', { + fontSize: '10px', + color: '#91a8b7', + backgroundColor: '#07101899', + padding: { x: 8, y: 4 }, + }).setOrigin(0.5, 1); + + if (this.mobileHudActive) { + for (const item of [ + this.hudGraphics, + this.brandText, + this.speedText, + this.headingText, + this.waveText, + this.combatText, + this.playerHullLabel, + this.enemyHullLabel, + this.status, + this.controlsHint, + ]) { + item?.setVisible(false); + } + } + } + + createAnimations() { + if (!this.anims.exists('player-forward')) { + this.anims.create({ + key: 'player-forward', + frames: this.anims.generateFrameNumbers('player-airship', { start: 0, end: 3 }), + frameRate: 6, + repeat: -1, + }); + } + + if (!this.anims.exists('pirate-idle')) { + this.anims.create({ + key: 'pirate-idle', + frames: this.anims.generateFrameNumbers('airships', { start: 4, end: 7 }), + frameRate: 5, + repeat: -1, + }); + } + + if (!this.anims.exists('impact-explosion')) { + this.anims.create({ + key: 'impact-explosion', + frames: this.anims.generateFrameNumbers('explosions', { start: 0, end: 5 }), + frameRate: 18, + repeat: 0, + }); + } + } + + spawnWave() { + const roster = pirateRosterForWave(this.wave, MAX_PIRATES); + const count = roster.length; + airshipLog('wave:spawn', { + wave: this.wave, + count, + classes: roster.map(({ key }) => key), + }); + this.status.setText(`WAVE ${this.wave}\n${count} PIRATE${count === 1 ? '' : 'S'}`); + + for (let i = 0; i < count; i++) { + const angle = (Math.PI * 2 * i / count) + Phaser.Math.FloatBetween(-0.25, 0.25); + const radius = Phaser.Math.Between(500, 760); + const x = clamp(this.player.x + Math.cos(angle) * radius, 120, WORLD_SIZE - 120); + const y = clamp(this.player.y + Math.sin(angle) * radius, 120, WORLD_SIZE - 120); + this.spawnPirate(x, y, angle, roster[i]); + } + + this.time.delayedCall(900, () => { + if (this.gameState === 'playing') this.status.setText(''); + }); + } + + spawnPirate(x, y, angle, pirateClass) { + const pirate = this.pirates.create(x, y, 'airships', 4); + pirate.setDepth(6).setCollideWorldBounds(true).setDisplaySize(pirateClass.displaySize, pirateClass.displaySize); + pirate.body.setAllowGravity(false); + pirate.body.setSize(46, 58, true); + pirate.angle = normalizeDegrees(Phaser.Math.RadToDeg(angle) + 90); + pirate.setData('class', pirateClass.key); + pirate.setData('classLabel', pirateClass.label); + pirate.setData('hull', pirateClass.hull); + pirate.setData('maxHull', pirateClass.hull); + pirate.setData('speed', pirateClass.speed); + pirate.setData('turnRate', pirateClass.turnRate); + pirate.setData('reloadMs', pirateClass.reloadMs); + pirate.setData('projectileDamage', pirateClass.projectileDamage); + pirate.setData('preferredRange', pirateClass.preferredRange); + pirate.setData('retreatRange', pirateClass.retreatRange); + pirate.setData('broadsideRange', pirateClass.broadsideRange); + pirate.setData('broadsideError', pirateClass.broadsideError); + pirate.setData('lastShot', this.time.now + Phaser.Math.Between(-700, 300)); + pirate.play('pirate-idle'); + return pirate; + } + + drawWorld() { + const bg = this.add.graphics(); + bg.fillStyle(0x132335, 1); + bg.fillRect(0, 0, WORLD_SIZE, WORLD_SIZE); + bg.lineStyle(1, 0x8db3cc, 0.08); + for (let x = 0; x <= WORLD_SIZE; x += 100) bg.lineBetween(x, 0, x, WORLD_SIZE); + for (let y = 0; y <= WORLD_SIZE; y += 100) bg.lineBetween(0, y, WORLD_SIZE, y); + + const island = this.add.graphics(); + island.fillStyle(0x5d694e, 1); + island.fillEllipse(430, 480, 230, 150); + island.fillStyle(0xa18a62, 1); + island.fillEllipse(430, 470, 190, 105); + island.fillStyle(0x283827, 1); + island.fillCircle(390, 440, 18); + island.fillCircle(455, 450, 14); + island.fillCircle(490, 425, 12); + + const island2 = this.add.graphics(); + island2.fillStyle(0x5d694e, 1); + island2.fillEllipse(1940, 1840, 260, 165); + island2.fillStyle(0xa18a62, 1); + island2.fillEllipse(1940, 1830, 210, 112); + } + + update(_time, deltaMs) { + const dt = Math.min(deltaMs / 1000, 0.05); + const hadQueuedPlayerHit = this.pendingPlayerHits.length > 0; + + if (this.gameState !== 'playing') { + if (Phaser.Input.Keyboard.JustDown(this.keys.restart)) this.scene.restart(); + const hudState = this.buildHudState(); + if (!this.mobileHudActive) this.drawHud(hudState); + this.publishHudState(hudState, true); + return; + } + + this.processPlayerHits(); + this.validateLivePlayerState(); + if (this.gameState !== 'playing') { + const hudState = this.buildHudState(); + if (!this.mobileHudActive) this.drawHud(hudState); + this.publishHudState(hudState, true); + return; + } + + if (this.time.now - this.lastDiagnosticsAt >= 1000) { + this.lastDiagnosticsAt = this.time.now; + airshipLog('scene:heartbeat', { + gameState: this.gameState, + hull: this.playerHull, + pendingHits: this.pendingPlayerHits.length, + activePirates: this.pirates?.countActive?.(true) || 0, + playerShots: this.playerShots?.countActive?.(true) || 0, + pirateShots: this.pirateShots?.countActive?.(true) || 0, + wave: this.wave, + now: this.time.now, + }, 'debug'); + } + + this.updatePlayer(dt, deltaMs); + this.updatePlayerSmoke(deltaMs); + this.updateRollingClouds(deltaMs); + this.updateCloudConcealment(); + this.updatePirates(dt); + this.updateProjectiles(); + this.drawWeaponArcs(); + this.checkGameState(); + + const hudState = this.buildHudState(); + if (!this.mobileHudActive) this.drawHud(hudState); + this.publishHudState(hudState, hadQueuedPlayerHit); + + if (hadQueuedPlayerHit) { + airshipLog('combat:post-hit-frame-complete', { + gameState: this.gameState, + hull: this.playerHull, + playerActive: this.player?.active ?? null, + playerVisible: this.player?.visible ?? null, + bodyEnabled: this.player?.body?.enable ?? null, + velocityX: this.player?.body?.velocity?.x ?? null, + velocityY: this.player?.body?.velocity?.y ?? null, + now: this.time.now, + }); + } + } + + updatePlayer(dt, deltaMs) { + if (!this.player?.body) return; + + const rawHelmX = Math.abs(this.helmVector.x) > HELM_DEAD_ZONE ? this.helmVector.x : 0; + const helmX = Math.sign(rawHelmX) * Math.pow(Math.abs(rawHelmX), HELM_STEER_CURVE); + const helmY = Math.abs(this.helmVector.y) > HELM_DEAD_ZONE ? this.helmVector.y : 0; + const throttleForward = this.cursors.up.isDown ? 1 : Math.max(0, -helmY); + const throttleReverse = this.cursors.down.isDown ? 1 : Math.max(0, helmY); + + if (throttleForward > 0) this.playerSpeed += PLAYER_ACCELERATION * throttleForward * dt; + if (throttleReverse > 0) this.playerSpeed -= PLAYER_BRAKE * throttleReverse * dt; + if (this.keys.stop.isDown) this.playerSpeed *= Math.pow(0.025, dt); + + if (throttleForward === 0 && throttleReverse === 0 && !this.keys.stop.isDown) { + this.playerSpeed *= Math.pow(PLAYER_COAST_DRAG, deltaMs / 16.667); + } + + this.playerSpeed = clamp(this.playerSpeed, PLAYER_REVERSE_SPEED, PLAYER_MAX_SPEED); + const turnStrength = clamp(Math.abs(this.playerSpeed) / 100, 0.28, 1); + const directionSign = this.playerSpeed < 0 ? -1 : 1; + const keyboardTurn = (this.cursors.right.isDown ? 1 : 0) - (this.cursors.left.isDown ? 1 : 0); + const turnInput = keyboardTurn || helmX; + + this.player.angle += PLAYER_TURN_RATE * turnStrength * directionSign * turnInput * dt; + + const forwardThrust = clamp(this.playerSpeed / PLAYER_MAX_SPEED, 0, 1); + if (forwardThrust > 0.06) { + if (!this.player.anims.isPlaying || this.player.anims.currentAnim?.key !== 'player-forward') { + this.player.play('player-forward'); + } + this.player.anims.timeScale = 0.65 + forwardThrust * 1.35; + } else { + if (this.player.anims.isPlaying) this.player.anims.stop(); + this.player.setFrame(0); + this.player.anims.timeScale = 1; + } + + const h = headingRad(this.player); + this.environmentWind = environmentWindAt({ + x: this.player.x, + y: this.player.y, + timeMs: this.time.now, + }); + const playerVelocity = velocityWithEnvironment( + Math.cos(h) * this.playerSpeed, + Math.sin(h) * this.playerSpeed, + this.environmentWind, + 1, + ); + this.player.setVelocity(playerVelocity.x, playerVelocity.y); + + if (Phaser.Input.Keyboard.JustDown(this.keys.firePort)) this.playerBroadside(-1); + if (Phaser.Input.Keyboard.JustDown(this.keys.fireStarboard)) this.playerBroadside(1); + } + + updatePirates(dt) { + const pirates = this.pirates.getChildren(); + + for (const pirate of pirates) { + if (!pirate.active || !pirate.body) continue; + + const dx = this.player.x - pirate.x; + const dy = this.player.y - pirate.y; + const distance = Math.hypot(dx, dy); + const bearing = bearingTo(pirate, this.player); + const preferredRange = pirate.getData('preferredRange') || 335; + const retreatRange = pirate.getData('retreatRange') || 210; + const turnRate = pirate.getData('turnRate') || 52; + const baseSpeed = pirate.getData('speed') || 118; + + let desiredHeading = pirateDesiredHeading({ + bearing, + currentHeading: pirate.angle, + distance, + preferredRange, + retreatRange, + }); + + const separation = separationVector(pirate, pirates); + if (separation.x || separation.y) { + const desiredRad = degToRad(desiredHeading - 90); + const steerX = Math.cos(desiredRad) + separation.x * 1.15; + const steerY = Math.sin(desiredRad) + separation.y * 1.15; + desiredHeading = normalizeDegrees(Math.atan2(steerY, steerX) * 180 / Math.PI + 90); + } + + const delta = signedAngleDelta(desiredHeading, pirate.angle); + pirate.angle += clamp(delta, -turnRate * dt, turnRate * dt); + + const speed = pirateSpeedForRange({ + distance, + preferredRange, + retreatRange, + baseSpeed, + }); + const h = headingRad(pirate); + const pirateWind = environmentWindAt({ + x: pirate.x, + y: pirate.y, + timeMs: this.time.now, + }); + const pirateVelocity = velocityWithEnvironment( + Math.cos(h) * speed, + Math.sin(h) * speed, + pirateWind, + 0.9, + ); + pirate.setVelocity(pirateVelocity.x, pirateVelocity.y); + + const relative = signedAngleDelta(bearing, pirate.angle); + const broadsideError = Math.abs(Math.abs(relative) - 90); + const lastShot = pirate.getData('lastShot') || 0; + const broadsideRange = pirate.getData('broadsideRange') || 420; + const broadsideTolerance = pirate.getData('broadsideError') || 38; + const reloadMs = pirate.getData('reloadMs') || 1650; + const projectileDamage = pirate.getData('projectileDamage') || DEFAULT_PIRATE_SHOT_DAMAGE; + const playerConcealment = this.player.getData('cloudConcealment') || 0; + const targetObscured = playerConcealment >= CLOUD_FIRE_SUPPRESSION_CONCEALMENT + && distance > CLOUD_CLOSE_ENGAGE_RANGE; + + if (!targetObscured && distance < broadsideRange && broadsideError < broadsideTolerance && this.time.now - lastShot > reloadMs) { + const side = relative >= 0 ? 1 : -1; + this.fireBroadside(pirate, side, this.pirateShots, 'cannonball', projectileDamage, 0.9); + pirate.setData('lastShot', this.time.now); + } + } + } + + playerBroadside(side) { + const broadside = side < 0 ? 'port' : 'starboard'; + if (this.time.now - this.lastPlayerShot[broadside] < this.playerBroadsideReloadMs) return; + this.fireBroadside(this.player, side, this.playerShots, 'cannonball', 16, 1.0); + this.lastPlayerShot[broadside] = this.time.now; + } + + fireBroadside(ship, side, group, texture, projectileDamage, velocityScale) { + if (!ship?.body) return; + const actor = group === this.pirateShots ? 'pirate' : 'player'; + const base = headingRad(ship) + side * Math.PI / 2; + + airshipLog('combat:broadside-fired', { + actor, + side: side < 0 ? 'port' : 'starboard', + damage: projectileDamage, + x: Math.round(ship.x), + y: Math.round(ship.y), + angle: Math.round(ship.angle), + }, 'debug'); + const offsets = [-7, 0, 7]; + + for (const offset of offsets) { + const angle = base + degToRad(offset); + const x = ship.x + Math.cos(base) * 34; + const y = ship.y + Math.sin(base) * 34; + const shot = group.create(x, y, texture); + shot.setDepth(8).setDisplaySize(14, 14); + shot.body.setAllowGravity(false); + shot.setData('bornAt', this.time.now); + shot.setData('damage', projectileDamage); + shot.setData('projectileOwner', actor); + shot.setData('sourceShip', ship); + if (actor === 'pirate') shot.setData('playerHitQueued', false); + const shotWind = environmentWindAt({ + x, + y, + timeMs: this.time.now, + }); + const shotVelocity = velocityWithEnvironment( + Math.cos(angle) * SHOT_SPEED * velocityScale + ship.body.velocity.x * 0.25, + Math.sin(angle) * SHOT_SPEED * velocityScale + ship.body.velocity.y * 0.25, + shotWind, + 0.22, + ); + shot.setVelocity(shotVelocity.x, shotVelocity.y); + } + } + + hitPirate(first, second) { + if (this.gameState !== 'playing') return; + + const playerShot = resolveTaggedProjectile(first, second, 'player'); + const pirateShot = playerShot ? null : resolveTaggedProjectile(first, second, 'pirate'); + const shot = playerShot || pirateShot; + const pirate = shot === first ? second : first; + if (!shot?.active || !pirate?.active || pirate === this.player) return; + + const projectileOwner = shot.getData('projectileOwner'); + const sourceShip = shot.getData('sourceShip'); + if (projectileOwner === 'pirate' && sourceShip === pirate) return; + + const damage = shot.getData('damage') || 10; + const { x, y } = shot; + shot.destroy(); + this.spawnExplosion(x, y, 0.32); + + const previousHull = pirate.getData('hull') || pirate.getData('maxHull') || PIRATE_FALLBACK_MAX_HULL; + const hull = Math.max(0, previousHull - damage); + pirate.setData('hull', hull); + + airshipLog('combat:pirate-hit', { + damage, + hullBefore: previousHull, + hullAfter: hull, + projectileOwner, + friendlyFire: projectileOwner === 'pirate', + }); + + if (hull <= 0) { + this.spawnExplosion(pirate.x, pirate.y, 1.25); + pirate.destroy(); + if (projectileOwner === 'player') this.defeated += 1; + + if (this.pirates.countActive(true) === 0) { + this.wave += 1; + this.playerHull = Math.min(PLAYER_MAX_HULL, this.playerHull + 15); + this.status.setText('WAVE CLEARED\n+15 HULL'); + this.time.delayedCall(1100, () => { + if (this.gameState === 'playing' && this.pirates.countActive(true) === 0) this.spawnWave(); + }); + } + return; + } + + this.flashShip(pirate, projectileOwner === 'pirate' ? 0xffd29a : 0xffcccc); + } + + hitPlayer(first, second) { + if (this.gameState !== 'playing') return; + + const shot = resolveTaggedProjectile(first, second, 'pirate'); + if (!shot?.active || shot === this.player) { + airshipLog('combat:player-hit-rejected', { + firstOwner: first?.getData?.('projectileOwner') ?? null, + secondOwner: second?.getData?.('projectileOwner') ?? null, + firstIsPlayer: first === this.player, + secondIsPlayer: second === this.player, + }, 'warn'); + return; + } + + if (shot.getData('playerHitQueued')) return; + + const damage = normalizePlayerDamage(shot.getData('damage'), DEFAULT_PIRATE_SHOT_DAMAGE); + + // The overlap callback only records a verified pirate projectile. + // Hull mutation and projectile destruction happen on the next scene update, + // outside the Arcade Physics callback. + shot.setData('playerHitQueued', true); + this.pendingPlayerHits.push({ + shot, + damage, + x: shot.x, + y: shot.y, + }); + + airshipLog('combat:player-hit-queued', { + damage, + pendingHits: this.pendingPlayerHits.length, + shotAgeMs: this.time.now - (shot.getData('bornAt') || this.time.now), + hull: this.playerHull, + }); + } + + processPlayerHits() { + if (!this.pendingPlayerHits.length || this.gameState !== 'playing') return; + + const hits = this.pendingPlayerHits; + this.pendingPlayerHits = []; + + const beforeHull = this.playerHull; + const playerStateBefore = { + active: this.player?.active ?? null, + visible: this.player?.visible ?? null, + bodyEnabled: this.player?.body?.enable ?? null, + velocityX: this.player?.body?.velocity?.x ?? null, + velocityY: this.player?.body?.velocity?.y ?? null, + gameState: this.gameState, + }; + + const result = reducePlayerProjectileHits({ + hull: this.playerHull, + hits, + maxHull: PLAYER_MAX_HULL, + fallbackDamage: DEFAULT_PIRATE_SHOT_DAMAGE, + }); + + this.playerHull = result.hull; + const { totalDamage, appliedHits, gameOver } = result; + + for (const impact of hits) { + const shot = impact.shot; + if ( + shot !== this.player + && shot?.active + && shot?.getData?.('projectileOwner') === 'pirate' + ) { + shot.destroy(); + } + } + + if (appliedHits > 0) { + try { + for (const impact of hits) { + this.spawnExplosion(impact.x, impact.y, 0.32); + } + this.playerHitSequence += 1; + this.playPlayerHitReaction(totalDamage); + airshipLog('combat:player-hit-fx', { + impacts: hits.length, + scale: 0.32, + }, 'debug'); + } catch (error) { + airshipLog('combat:player-hit-fx-error', { + message: error?.message || String(error), + }, 'error'); + } + } + + airshipLog('combat:player-hit-processed', { + queuedHits: hits.length, + appliedHits, + ignoredHits: 0, + damage: totalDamage, + hullBefore: beforeHull, + hullAfter: this.playerHull, + gameOver, + now: this.time.now, + playerStateBefore, + playerStateAfter: { + active: this.player?.active ?? null, + visible: this.player?.visible ?? null, + bodyEnabled: this.player?.body?.enable ?? null, + velocityX: this.player?.body?.velocity?.x ?? null, + velocityY: this.player?.body?.velocity?.y ?? null, + gameState: this.gameState, + }, + }, gameOver ? 'warn' : 'info'); + + if (gameOver) this.finishGame(); + } + + spawnExplosion(x, y, scale = 1) { + const fx = this.add.sprite(x, y, 'explosions', 0).setDepth(20).setScale(scale); + fx.play('impact-explosion'); + fx.once(Phaser.Animations.Events.ANIMATION_COMPLETE, () => fx.destroy()); + } + + flashShip(ship, tint) { + ship.setTint(tint); + this.time.delayedCall(90, () => { + if (ship.active) ship.clearTint(); + }); + } + + playPlayerHitReaction(damage = DEFAULT_PIRATE_SHOT_DAMAGE) { + if (!this.player?.active) return; + + this.player.setTint(0xffd7d7); + this.time.delayedCall(110, () => { + if (this.player?.active && this.gameState === 'playing') this.player.clearTint(); + }); + + this.cameras.main.shake(120, clamp(0.0035 + damage * 0.00055, 0.004, 0.012)); + } + + validateLivePlayerState() { + if (this.gameState !== 'playing' || this.playerHull <= 0 || !this.player) return; + + const issues = []; + if (!this.player.active) issues.push('inactive'); + if (!this.player.visible) issues.push('hidden'); + if (this.player.alpha !== 1) issues.push('alpha'); + if (!this.player.body) issues.push('body-missing'); + else if (!this.player.body.enable) issues.push('body-disabled'); + + if (issues.length > 0) { + airshipLog('player:live-state-invalid', { + issues, + hull: this.playerHull, + active: this.player.active, + visible: this.player.visible, + alpha: this.player.alpha, + bodyEnabled: this.player.body?.enable ?? null, + }, 'warn'); + } + } + + buildHudState() { + const player = this.player; + if (!player) return null; + + const activePirates = (this.pirates?.getChildren?.() || []).filter((pirate) => pirate?.active); + const { pirate: nearest, range } = this.nearestPirate(); + const now = this.time?.now ?? 0; + const reloadReady = (side) => clamp( + (now - (this.lastPlayerShot?.[side] ?? -Infinity)) / Math.max(1, this.playerBroadsideReloadMs), + 0, + 1, + ); + + return { + gameState: this.gameState, + speed: this.playerSpeed, + heading: normalizeDegrees(player.angle), + wave: this.wave, + hostiles: activePirates.length, + kills: this.defeated, + player: { + hull: this.playerHull, + maxHull: PLAYER_MAX_HULL, + hitSequence: this.playerHitSequence, + }, + target: nearest ? { + hull: nearest.getData('hull') || 0, + maxHull: nearest.getData('maxHull') || PIRATE_FALLBACK_MAX_HULL, + name: nearest.getData('classLabel') || 'PIRATE', + range, + } : null, + reload: { + port: reloadReady('port'), + starboard: reloadReady('starboard'), + }, + environment: { + windSpeed: this.environmentWind?.strength || 0, + windHeading: this.environmentWind?.heading || 0, + concealment: this.player?.getData?.('cloudConcealment') || 0, + }, + radar: activePirates.slice(0, 10).map((pirate) => ({ + dx: (pirate.x - player.x) / 900, + dy: (pirate.y - player.y) / 900, + })), + status: this.status?.text || '', + }; + } + + publishHudState(state = this.buildHudState(), force = false) { + if (!this.mobileHudActive || !state) return; + + const now = this.time?.now ?? 0; + if (!force && now - this.lastHudPublishAt < HUD_PUBLISH_INTERVAL_MS) return; + + this.lastHudPublishAt = now; + window.dispatchEvent(new CustomEvent('airship:hud-state', { detail: state })); + } + + updateProjectiles() { + for (const group of [this.playerShots, this.pirateShots]) { + for (const shot of group.getChildren()) { + if (!shot.active) continue; + if (this.time.now - shot.getData('bornAt') > SHOT_LIFETIME) shot.destroy(); + } + } + } + + drawWeaponArcs() { + this.arcGraphics.clear(); + if (this.gameState !== 'playing') return; + + const radius = 190; + const forward = headingRad(this.player); + this.arcGraphics.lineStyle(2, 0xffc857, 0.28); + + for (const side of [-1, 1]) { + const center = forward + side * Math.PI / 2; + this.arcGraphics.beginPath(); + this.arcGraphics.arc(this.player.x, this.player.y, radius, center - Math.PI / 4, center + Math.PI / 4); + this.arcGraphics.strokePath(); + } + } + + nearestPirate() { + let nearest = null; + let nearestRange = Infinity; + for (const pirate of this.pirates.getChildren()) { + if (!pirate.active) continue; + const range = Math.hypot(this.player.x - pirate.x, this.player.y - pirate.y); + if (range < nearestRange) { + nearest = pirate; + nearestRange = range; + } + } + return { pirate: nearest, range: nearestRange }; + } + + drawHud(state = this.buildHudState()) { + if (!state) return; + + const width = this.scale.width; + const compact = width < 700; + const target = state.target; + const playerHull = state.player?.hull ?? PLAYER_MAX_HULL; + const playerMaxHull = state.player?.maxHull ?? PLAYER_MAX_HULL; + const nearestHull = target?.hull ?? 0; + const nearestMaxHull = target?.maxHull ?? PIRATE_FALLBACK_MAX_HULL; + const nearestClass = target?.name || 'PIRATE'; + const rangeText = target && Number.isFinite(target.range) ? `${target.range.toFixed(0)}m` : '--'; + + this.speedText.setText(`${Math.abs(state.speed || 0).toFixed(0)} ${state.speed < 0 ? 'REV' : 'FWD'}`); + this.headingText.setText(`${(state.heading || 0).toFixed(0).padStart(3, '0')}°`); + this.waveText.setText(`WAVE ${state.wave} • ${state.hostiles} HOSTILE${state.hostiles === 1 ? '' : 'S'}`); + this.combatText.setText(compact + ? `K ${state.kills}\n${rangeText}` + : `DEFEATED ${state.kills}\nRANGE ${rangeText}`); + + this.playerHullLabel.setText(`SPARROW ${playerHull}/${playerMaxHull}`); + this.enemyHullLabel.setText(target + ? `${nearestClass} ${nearestHull}/${nearestMaxHull}` + : `WAVE ${state.wave} CLEAR`); + + const side = 14; + const gap = 14; + const barY = compact ? 75 : 72; + const barHeight = compact ? 8 : 10; + const barWidth = (width - side * 2 - gap) / 2; + const enemyX = side + barWidth + gap; + + this.hudGraphics.clear(); + this.hudGraphics.fillStyle(0x071018, 0.78); + this.hudGraphics.fillRect(0, 0, width, compact ? 96 : 98); + this.hudGraphics.lineStyle(1, 0x8cd3ff, 0.15); + this.hudGraphics.lineBetween(0, compact ? 96 : 98, width, compact ? 96 : 98); + + this.hudGraphics.fillStyle(0x17232d, 0.95); + this.hudGraphics.fillRoundedRect(side, barY, barWidth, barHeight, 4); + this.hudGraphics.fillRoundedRect(enemyX, barY, barWidth, barHeight, 4); + + this.hudGraphics.fillStyle(0x61c98b, 1); + this.hudGraphics.fillRoundedRect(side, barY, barWidth * (playerHull / playerMaxHull), barHeight, 4); + + if (target) { + this.hudGraphics.fillStyle(0xd65757, 1); + this.hudGraphics.fillRoundedRect(enemyX, barY, barWidth * (nearestHull / nearestMaxHull), barHeight, 4); + } + } + + checkGameState() { + if (this.playerHull <= 0) this.finishGame(); + } + + finishGame() { + if (this.gameState !== 'playing') return; + + airshipLog('game:finish', { + hull: this.playerHull, + wave: this.wave, + defeated: this.defeated, + pendingHits: this.pendingPlayerHits?.length || 0, + }, 'warn'); + + this.gameState = 'lost'; + this.playerSmokeAccumulatorMs = 0; + this.player.setVelocity(0, 0); + this.playerShots.clear(true, true); + this.pirateShots.clear(true, true); + + for (const pirate of this.pirates.getChildren()) { + if (pirate?.body) pirate.setVelocity(0, 0); + } + + this.spawnExplosion(this.player.x, this.player.y, 1.35); + this.player.setVisible(false); + this.status.setText('SHIP DESTROYED\nRestarting in 2s...'); + + this.time.delayedCall(AUTO_RESET_MS, () => { + this.scene.restart(); + }); + } + + layoutHud(gameSize) { + const width = gameSize.width; + const height = gameSize.height; + const compact = width < 700; + + if (this.headingText) this.headingText.setPosition(width / 2, 9); + if (this.waveText) this.waveText.setPosition(width / 2, 32); + if (this.combatText) this.combatText.setPosition(width - (compact ? 76 : 14), 11); + if (this.enemyHullLabel) this.enemyHullLabel.setPosition(width - 14, compact ? 57 : 54); + if (this.playerHullLabel) this.playerHullLabel.setPosition(14, compact ? 57 : 54); + if (this.status) this.status.setPosition(width / 2, compact ? 104 : 108); + if (this.controlsHint) { + this.controlsHint.setPosition(width / 2, height - 12); + this.controlsHint.setVisible(!compact); + } + } +} + +new Phaser.Game({ + type: Phaser.AUTO, + parent: 'game', + width: window.innerWidth, + height: window.innerHeight, + backgroundColor: '#132335', + physics: { + default: 'arcade', + arcade: { debug: false }, + }, + scale: { + mode: Phaser.Scale.RESIZE, + autoCenter: Phaser.Scale.CENTER_BOTH, + }, + scene: GameScene, +}); \ No newline at end of file diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000..f460a6c --- /dev/null +++ b/src/main.js @@ -0,0 +1,216 @@ +import Phaser from 'phaser'; +import './style.css'; + +const WORLD_SIZE = 2400; +const MAX_FORWARD_SPEED = 180; +const MAX_REVERSE_SPEED = -55; +const ACCELERATION = 85; +const BRAKE = 110; +const TURN_RATE = 72; +const BROADSIDE_SPEED = 520; + +class GameScene extends Phaser.Scene { + constructor() { + super('game'); + this.speed = 0; + } + + create() { + this.physics.world.setBounds(0, 0, WORLD_SIZE, WORLD_SIZE); + this.drawWorld(); + this.createTextures(); + + this.ship = this.physics.add.image(WORLD_SIZE / 2, WORLD_SIZE / 2, 'ship'); + this.ship.setDepth(5); + this.ship.setCollideWorldBounds(true); + this.ship.body.setAllowGravity(false); + + this.projectiles = this.physics.add.group(); + this.arcGraphics = this.add.graphics().setDepth(4); + + this.cursors = this.input.keyboard.createCursorKeys(); + this.keys = this.input.keyboard.addKeys({ + firePort: Phaser.Input.Keyboard.KeyCodes.Q, + fireStarboard: Phaser.Input.Keyboard.KeyCodes.E, + stop: Phaser.Input.Keyboard.KeyCodes.SPACE, + }); + + this.cameras.main.setBounds(0, 0, WORLD_SIZE, WORLD_SIZE); + this.cameras.main.startFollow(this.ship, true, 0.08, 0.08); + this.cameras.main.setZoom(1.15); + + this.hud = this.add.text(18, 18, '', { + fontFamily: 'monospace', + fontSize: '15px', + color: '#e8f2ff', + backgroundColor: '#071018cc', + padding: { x: 12, y: 10 }, + lineSpacing: 4, + }).setScrollFactor(0).setDepth(20); + + this.title = this.add.text(18, 18, 'ARROWSTACK AIRSHIP', { + fontFamily: 'monospace', + fontSize: '12px', + color: '#8cd3ff', + }).setScrollFactor(0).setDepth(21); + + this.hud.y = 42; + } + + drawWorld() { + const background = this.add.graphics(); + background.fillStyle(0x132335, 1); + background.fillRect(0, 0, WORLD_SIZE, WORLD_SIZE); + + background.lineStyle(1, 0x8db3cc, 0.08); + for (let x = 0; x <= WORLD_SIZE; x += 100) background.lineBetween(x, 0, x, WORLD_SIZE); + for (let y = 0; y <= WORLD_SIZE; y += 100) background.lineBetween(0, y, WORLD_SIZE, y); + + const clouds = this.add.graphics(); + for (let i = 0; i < 42; i++) { + const x = Phaser.Math.Between(80, WORLD_SIZE - 80); + const y = Phaser.Math.Between(80, WORLD_SIZE - 80); + const radius = Phaser.Math.Between(25, 65); + clouds.fillStyle(0xbcd2df, Phaser.Math.FloatBetween(0.025, 0.09)); + clouds.fillCircle(x, y, radius); + clouds.fillCircle(x + radius * 0.6, y + 8, radius * 0.7); + clouds.fillCircle(x - radius * 0.5, y + 5, radius * 0.6); + } + + const island = this.add.graphics(); + island.fillStyle(0x5d694e, 1); + island.fillEllipse(430, 480, 230, 150); + island.fillStyle(0xa18a62, 1); + island.fillEllipse(430, 470, 190, 105); + island.fillStyle(0x283827, 1); + island.fillCircle(390, 440, 18); + island.fillCircle(455, 450, 14); + island.fillCircle(490, 425, 12); + } + + createTextures() { + const ship = this.make.graphics({ x: 0, y: 0, add: false }); + ship.fillStyle(0xd8a65f, 1); + ship.fillTriangle(32, 2, 8, 62, 56, 62); + ship.fillStyle(0x715438, 1); + ship.fillRect(17, 31, 30, 20); + ship.fillStyle(0xe8dfc7, 1); + ship.fillEllipse(32, 24, 42, 16); + ship.lineStyle(2, 0x201914, 0.8); + ship.strokeTriangle(32, 2, 8, 62, 56, 62); + ship.generateTexture('ship', 64, 68); + ship.destroy(); + + const shot = this.make.graphics({ x: 0, y: 0, add: false }); + shot.fillStyle(0xffd36a, 1); + shot.fillCircle(5, 5, 5); + shot.generateTexture('shot', 10, 10); + shot.destroy(); + } + + update(_time, deltaMs) { + const dt = deltaMs / 1000; + + if (this.cursors.up.isDown) this.speed += ACCELERATION * dt; + if (this.cursors.down.isDown) this.speed -= BRAKE * dt; + if (this.keys.stop.isDown) this.speed *= Math.pow(0.025, dt); + + if (!this.cursors.up.isDown && !this.cursors.down.isDown && !this.keys.stop.isDown) { + this.speed *= Math.pow(0.985, deltaMs / 16.667); + } + + this.speed = Phaser.Math.Clamp(this.speed, MAX_REVERSE_SPEED, MAX_FORWARD_SPEED); + + const turnStrength = Phaser.Math.Clamp(Math.abs(this.speed) / 100, 0.28, 1); + const directionSign = this.speed < 0 ? -1 : 1; + + if (this.cursors.left.isDown) this.ship.angle -= TURN_RATE * turnStrength * directionSign * dt; + if (this.cursors.right.isDown) this.ship.angle += TURN_RATE * turnStrength * directionSign * dt; + + const heading = Phaser.Math.DegToRad(this.ship.angle - 90); + this.ship.setVelocity(Math.cos(heading) * this.speed, Math.sin(heading) * this.speed); + + if (Phaser.Input.Keyboard.JustDown(this.keys.firePort)) this.fireBroadside(-1); + if (Phaser.Input.Keyboard.JustDown(this.keys.fireStarboard)) this.fireBroadside(1); + + this.drawWeaponArcs(); + this.cleanupProjectiles(); + + const normalisedHeading = Phaser.Math.Angle.NormalizeDegrees(this.ship.angle); + this.hud.setText([ + `speed ${Math.abs(this.speed).toFixed(0).padStart(3, ' ')} ${this.speed < 0 ? 'REV' : 'FWD'}`, + `heading ${normalisedHeading.toFixed(0).padStart(3, ' ')}°`, + '', + '↑ / ↓ throttle / reverse', + '← / → steer', + 'Q port broadside', + 'E starboard broadside', + 'SPACE brake', + ]); + } + + fireBroadside(side) { + const broadsideAngle = Phaser.Math.DegToRad(this.ship.angle - 90 + side * 90); + const muzzleOffset = 34; + const x = this.ship.x + Math.cos(broadsideAngle) * muzzleOffset; + const y = this.ship.y + Math.sin(broadsideAngle) * muzzleOffset; + + const shot = this.projectiles.create(x, y, 'shot'); + shot.setDepth(6); + shot.body.setAllowGravity(false); + shot.setData('bornAt', this.time.now); + shot.setVelocity( + Math.cos(broadsideAngle) * BROADSIDE_SPEED + this.ship.body.velocity.x * 0.3, + Math.sin(broadsideAngle) * BROADSIDE_SPEED + this.ship.body.velocity.y * 0.3, + ); + + this.tweens.add({ + targets: shot, + alpha: 0.15, + duration: 700, + ease: 'Quad.easeIn', + }); + } + + cleanupProjectiles() { + for (const shot of this.projectiles.getChildren()) { + if (!shot.active) continue; + if (this.time.now - shot.getData('bornAt') > 800) shot.destroy(); + } + } + + drawWeaponArcs() { + const g = this.arcGraphics; + g.clear(); + + const radius = 190; + const base = Phaser.Math.DegToRad(this.ship.angle - 90); + + g.lineStyle(2, 0xffc857, 0.28); + + g.beginPath(); + g.arc(this.ship.x, this.ship.y, radius, base + Phaser.Math.DegToRad(-135), base + Phaser.Math.DegToRad(-45)); + g.strokePath(); + + g.beginPath(); + g.arc(this.ship.x, this.ship.y, radius, base + Phaser.Math.DegToRad(45), base + Phaser.Math.DegToRad(135)); + g.strokePath(); + } +} + +new Phaser.Game({ + type: Phaser.AUTO, + parent: 'game', + width: window.innerWidth, + height: window.innerHeight, + backgroundColor: '#132335', + physics: { + default: 'arcade', + arcade: { debug: false }, + }, + scale: { + mode: Phaser.Scale.RESIZE, + autoCenter: Phaser.Scale.CENTER_BOTH, + }, + scene: GameScene, +}); diff --git a/src/mobile-hud.js b/src/mobile-hud.js new file mode 100644 index 0000000..b7073b9 --- /dev/null +++ b/src/mobile-hud.js @@ -0,0 +1,761 @@ +import topHudSrc from './assets/controller/top-hud.js'; +import playerHealthSrc from './assets/controller/player-health-fresh-sheet.png'; +import enemyHealthSrc from './assets/controller/enemy-health.js'; +import cannonRoundelSrc from './assets/controller/cannon-roundel.js'; +import helmFrameSrc from './assets/controller/helm-frame.js'; +import helmKnobSrc from './assets/controller/helm-knob.js'; +import { airshipLog } from './diagnostics.js'; + +const isDesktopPointer = window.matchMedia('(hover: hover) and (pointer: fine)'); + +if (!isDesktopPointer.matches) { + const root = document.querySelector('#mobile-controls'); + + if (root) { + const style = document.createElement('style'); + style.textContent = ` + #mobile-controls.controller-active { + overflow: hidden; + } + + #controller-hud { + position: absolute; + inset: 0; + z-index: 1; + overflow: hidden; + pointer-events: none; + user-select: none; + -webkit-user-select: none; + color: #f8e8b7; + font-family: Georgia, 'Times New Roman', serif; + font-weight: 700; + text-shadow: 0 1px 2px #000, 0 0 5px rgba(47, 22, 2, .95); + } + + .steam-piece { + position: absolute; + pointer-events: none; + } + + .steam-piece > img { + display: block; + width: 100%; + height: auto; + pointer-events: none; + user-select: none; + -webkit-user-select: none; + } + + .steam-top { + left: 0; + top: 0; + width: 100%; + height: auto; + aspect-ratio: 960 / 246; + overflow: visible; + } + + .steam-top-value { + position: absolute; + top: 63%; + transform: translate(-50%, -50%); + display: grid; + place-items: center; + min-width: 0; + height: 15%; + padding: 0 2px; + text-align: center; + white-space: nowrap; + overflow: hidden; + color: #f7dfa1; + font-size: clamp(9px, 2.45vw, 12px); + font-variant-numeric: tabular-nums; + font-feature-settings: 'tnum' 1; + letter-spacing: .015em; + line-height: 1; + text-shadow: 0 1px 1px rgba(0, 0, 0, .95), 0 0 3px rgba(42, 19, 2, .78); + } + + .steam-speed { left: 9.3%; width: 7%; } + .steam-heading { left: 21.2%; width: 12%; } + .steam-wave { left: 50%; top: 67%; width: 8%; } + .steam-hostiles { left: 65.4%; width: 7%; } + .steam-kills { left: 78.2%; width: 7%; } + .steam-range { left: 91.1%; width: 12%; } + + .steam-player-card, + .steam-enemy-card { + top: clamp(80px, 10.3vh, 90px); + aspect-ratio: 360 / 130; + width: min(31vw, 120px); + overflow: visible; + } + + .steam-health-art { + position: absolute; + inset: 0; + z-index: 0; + background-repeat: no-repeat; + background-size: 400% 300%; + background-position: 0 0; + background-color: transparent; + image-rendering: auto; + pointer-events: none; + } + + .steam-player-card { + left: 1%; + } + + .steam-player-card.steam-hit { + animation: steam-player-hit 220ms ease-out; + } + + @keyframes steam-player-hit { + 0% { filter: brightness(1); transform: translateX(0); } + 25% { filter: brightness(1.9); transform: translateX(-4px); } + 55% { filter: brightness(1.35); transform: translateX(4px); } + 100% { filter: brightness(1); transform: translateX(0); } + } + + .steam-enemy-card { + right: 1%; + } + + .steam-card-name, + .steam-card-value { + position: absolute; + z-index: 2; + transform: translate(-50%, -50%); + white-space: nowrap; + text-align: center; + pointer-events: none; + } + + .steam-card-name { + top: 28%; + color: #f6d58e; + font-size: clamp(8px, 2.2vw, 11px); + letter-spacing: .06em; + } + + .steam-player-card .steam-card-name { + left: 61%; + } + + .steam-enemy-card .steam-card-name { + left: 39%; + } + + .steam-card-value { + top: 67%; + color: #fff0bd; + font-size: clamp(8px, 2.4vw, 12px); + } + + .steam-player-card .steam-card-value { + left: 61%; + } + + .steam-enemy-card .steam-card-value { + left: 39%; + } + + .steam-radar-wrap { + left: 1%; + bottom: max(8px, env(safe-area-inset-bottom)); + width: min(39vw, 174px); + aspect-ratio: 1; + } + + .steam-helm-frame { + position: absolute; + inset: 0; + width: 100%; + height: 100%; + object-fit: contain; + pointer-events: none; + z-index: 1; + } + + .steam-piece > img.steam-helm-knob { + position: absolute; + left: 50%; + top: 46%; + width: 16%; + height: auto; + object-fit: contain; + transform: translate(-50%, -50%); + pointer-events: none; + z-index: 3; + will-change: transform; + } + + .steam-helm-label { + position: absolute; + left: 50%; + bottom: 5%; + transform: translateX(-50%); + width: 55%; + text-align: center; + color: #ffe5a0; + font-size: clamp(8px, 2.5vw, 12px); + letter-spacing: .12em; + pointer-events: none; + } + + #steam-radar-contacts { + position: absolute; + left: 17%; + top: 14%; + width: 66%; + height: 69%; + border-radius: 50%; + overflow: hidden; + z-index: 2; + } + + .steam-radar-player, + .steam-radar-dot { + position: absolute; + width: 6px; + height: 6px; + margin: -3px 0 0 -3px; + border-radius: 50%; + box-shadow: 0 0 6px currentColor; + } + + .steam-radar-player { + left: 50%; + top: 50%; + color: #ffe08c; + background: currentColor; + } + + .steam-radar-dot { + color: #ff5c42; + background: currentColor; + } + + .steam-cannon-port, + .steam-cannon-starboard { + right: 3%; + width: min(22vw, 104px); + aspect-ratio: 1; + overflow: visible; + } + + .steam-cannon-port { + bottom: max(116px, calc(env(safe-area-inset-bottom) + 112px)); + } + + .steam-cannon-starboard { + bottom: max(8px, env(safe-area-inset-bottom)); + } + + .steam-cannon-port > img, + .steam-cannon-starboard > img { + width: 100%; + height: 100%; + object-fit: cover; + border-radius: 50%; + clip-path: circle(49% at 50% 50%); + } + + .steam-reload-track { + position: absolute; + left: 12%; + right: 12%; + bottom: -7%; + height: 5px; + border: 1px solid rgba(232, 184, 91, .42); + border-radius: 999px; + background: rgba(8, 25, 31, .72); + overflow: hidden; + pointer-events: none; + } + + .steam-reload-fill { + display: block; + width: 100%; + height: 100%; + transform: scaleX(1); + transform-origin: left center; + background: rgba(255, 224, 140, .92); + transition: transform 60ms linear; + } + + .steam-action-label { + position: absolute; + left: 50%; + bottom: 7%; + transform: translateX(-50%); + min-width: 48%; + padding: 2px 7px; + border: 1px solid rgba(232, 184, 91, .55); + border-radius: 999px; + background: rgba(8, 25, 31, .82); + text-align: center; + color: #ffe5a0; + font-size: clamp(8px, 2.3vw, 11px); + line-height: 1.1; + letter-spacing: .1em; + white-space: nowrap; + box-shadow: 0 1px 4px rgba(0,0,0,.5); + } + + .steam-status { + display: none; + position: absolute; + left: 50%; + top: 27%; + transform: translateX(-50%); + max-width: 72%; + padding: 7px 12px; + border: 1px solid rgba(201, 146, 60, .7); + border-radius: 8px; + background: rgba(8, 20, 24, .82); + color: #fff0c3; + font-size: clamp(10px, 3vw, 14px); + text-align: center; + white-space: pre-line; + box-shadow: 0 4px 18px rgba(0,0,0,.35); + } + + .steam-status.visible { + display: block; + } + + #mobile-controls.controller-active #drag-stick { + left: 1%; + bottom: max(8px, env(safe-area-inset-bottom)); + top: auto; + width: min(39vw, 174px); + height: auto; + aspect-ratio: 1; + border: 0; + border-radius: 50%; + background: transparent; + box-shadow: none; + backdrop-filter: none; + -webkit-backdrop-filter: none; + z-index: 3; + } + + #mobile-controls.controller-active #drag-stick::before, + #mobile-controls.controller-active #drag-stick::after, + #mobile-controls.controller-active #drag-thumb { + opacity: 0; + } + + #mobile-controls.controller-active .mobile-control { + min-width: 0; + height: auto; + padding: 0; + border: 0; + border-radius: 0; + background: transparent; + color: transparent; + font-size: 0; + box-shadow: none; + backdrop-filter: none; + -webkit-backdrop-filter: none; + transform: none; + z-index: 3; + } + + #mobile-controls.controller-active .mobile-control.active, + #mobile-controls.controller-active .mobile-control:active { + background: rgba(255, 210, 112, .08); + transform: none; + } + + #mobile-controls.controller-active .mobile-control.port, + #mobile-controls.controller-active .mobile-control.starboard { + left: auto; + right: 3%; + width: min(22vw, 104px); + aspect-ratio: 1; + border-radius: 50%; + } + + #mobile-controls.controller-active .mobile-control.port { + top: auto; + bottom: max(116px, calc(env(safe-area-inset-bottom) + 112px)); + } + + #mobile-controls.controller-active .mobile-control.starboard { + top: auto; + bottom: max(8px, env(safe-area-inset-bottom)); + } + + #mobile-controls.controller-active .mobile-control.restart { + left: auto; + right: 1%; + top: clamp(147px, 20.5vh, 179px); + bottom: auto; + width: 14%; + height: auto; + aspect-ratio: 1; + border-radius: 50%; + } + + @media (max-height: 700px) and (max-width: 699px) { + .steam-player-card, + .steam-enemy-card { + top: 76px; + } + + .steam-radar-wrap { + width: 34vw; + bottom: max(6px, env(safe-area-inset-bottom)); + } + + #mobile-controls.controller-active #drag-stick { + width: 34vw; + bottom: max(6px, env(safe-area-inset-bottom)); + } + + .steam-cannon-port, + .steam-cannon-starboard, + #mobile-controls.controller-active .mobile-control.port, + #mobile-controls.controller-active .mobile-control.starboard { + width: min(20vw, 90px); + } + + .steam-cannon-port, + #mobile-controls.controller-active .mobile-control.port { + bottom: max(106px, calc(env(safe-area-inset-bottom) + 102px)); + } + } + + @media (min-width: 700px) { + :root { + --steam-wide-helm-size: clamp(118px, 28vh, 180px); + --steam-wide-cannon-size: clamp(72px, 18vh, 100px); + --steam-wide-edge-right: max(18px, env(safe-area-inset-right)); + --steam-wide-edge-left: max(18px, env(safe-area-inset-left)); + --steam-wide-bottom: max(12px, env(safe-area-inset-bottom)); + } + + .steam-top { + left: 50%; + width: min(64vw, 560px); + height: auto; + aspect-ratio: 960 / 246; + transform: translateX(-50%); + } + + .steam-top-value { + font-size: clamp(9px, 1.15vw, 13px); + } + + .steam-player-card, + .steam-enemy-card { + top: clamp(70px, 20vh, 104px); + } + + .steam-player-card { + left: max(12px, env(safe-area-inset-left)); + width: min(18vw, 180px); + } + + .steam-enemy-card { + right: max(12px, env(safe-area-inset-right)); + width: min(18vw, 180px); + } + + .steam-card-name { + font-size: clamp(8px, 1.15vw, 12px); + } + + .steam-card-value { + font-size: clamp(8px, 1.25vw, 12px); + } + + .steam-radar-wrap, + #mobile-controls.controller-active #drag-stick { + left: var(--steam-wide-edge-left); + bottom: var(--steam-wide-bottom); + width: var(--steam-wide-helm-size); + } + + .steam-cannon-port, + .steam-cannon-starboard, + #mobile-controls.controller-active .mobile-control.port, + #mobile-controls.controller-active .mobile-control.starboard { + top: auto; + bottom: var(--steam-wide-bottom); + width: var(--steam-wide-cannon-size); + } + + .steam-cannon-starboard, + #mobile-controls.controller-active .mobile-control.starboard { + right: var(--steam-wide-edge-right); + } + + .steam-cannon-port, + #mobile-controls.controller-active .mobile-control.port { + right: calc(var(--steam-wide-edge-right) + var(--steam-wide-cannon-size) + 14px); + } + + #mobile-controls.controller-active .mobile-control.restart { + right: max(12px, env(safe-area-inset-right)); + top: clamp(118px, 30vh, 168px); + width: clamp(52px, 8vw, 76px); + } + + .steam-status { + top: clamp(92px, 24vh, 144px); + max-width: min(44%, 430px); + font-size: clamp(10px, 1.25vw, 14px); + } + } + + @media (min-width: 1100px) { + .steam-top { + width: min(52vw, 560px); + } + + .steam-player-card { + width: min(28vw, 360px); + } + + .steam-enemy-card { + width: min(25vw, 330px); + } + } + `; + document.head.appendChild(style); + + root.classList.add('controller-active'); + + const hud = document.createElement('div'); + hud.id = 'controller-hud'; + root.prepend(hud); + + + const addPiece = (className, src, inner = '') => { + const piece = document.createElement('div'); + piece.className = `steam-piece ${className}`; + + const image = document.createElement('img'); + image.src = src; + image.alt = ''; + image.draggable = false; + image.addEventListener('error', () => { + airshipLog('hud:image-error', { + component: className, + srcType: src?.slice?.(0, 32) || 'unknown', + }, 'error'); + }); + piece.appendChild(image); + + if (inner) piece.insertAdjacentHTML('beforeend', inner); + hud.appendChild(piece); + return piece; + }; + + addPiece('steam-top', topHudSrc, ` + 0 + 000° + 1 + 0 + 0 + -- + `); + + const addHealthPiece = (className, src, inner = '') => { + const piece = document.createElement('div'); + piece.className = `steam-piece ${className}`; + + const art = document.createElement('span'); + art.className = 'steam-health-art'; + art.style.backgroundImage = `url("${src}")`; + piece.appendChild(art); + + const probe = new Image(); + probe.addEventListener('load', () => airshipLog('hud:health-sheet-loaded', { component: className })); + probe.addEventListener('error', () => airshipLog('hud:health-sheet-error', { component: className }, 'error')); + probe.src = src; + + if (inner) piece.insertAdjacentHTML('beforeend', inner); + hud.appendChild(piece); + return piece; + }; + + const playerHealthPiece = addHealthPiece('steam-player-card', playerHealthSrc, ` + SPARROW + 100/100 + `); + + const enemyHealthPiece = addHealthPiece('steam-enemy-card', enemyHealthSrc, ` + PIRATE + CLEAR + `); + + const radarPiece = document.createElement('div'); + radarPiece.className = 'steam-piece steam-radar-wrap'; + + const helmFrame = document.createElement('img'); + helmFrame.className = 'steam-helm-frame'; + helmFrame.src = helmFrameSrc; + helmFrame.alt = ''; + helmFrame.draggable = false; + helmFrame.addEventListener('load', () => airshipLog('hud:helm-frame-loaded')); + helmFrame.addEventListener('error', () => airshipLog('hud:helm-frame-error', {}, 'error')); + radarPiece.appendChild(helmFrame); + + const helmKnob = document.createElement('img'); + helmKnob.className = 'steam-helm-knob'; + helmKnob.src = helmKnobSrc; + helmKnob.alt = ''; + helmKnob.draggable = false; + helmKnob.addEventListener('load', () => airshipLog('hud:helm-knob-loaded')); + helmKnob.addEventListener('error', () => airshipLog('hud:helm-knob-error', {}, 'error')); + radarPiece.appendChild(helmKnob); + + radarPiece.insertAdjacentHTML('beforeend', ` +
+ +
+ HELM + `); + hud.appendChild(radarPiece); + + addPiece('steam-cannon-port', cannonRoundelSrc, ` + PORT + + `); + + addPiece('steam-cannon-starboard', cannonRoundelSrc, ` + STBD + + `); + + const status = document.createElement('div'); + status.className = 'steam-status'; + status.dataset.steam = 'status'; + hud.appendChild(status); + + const fields = Object.fromEntries( + [...hud.querySelectorAll('[data-steam]')].map((el) => [el.dataset.steam, el]), + ); + + const radarContacts = radarPiece.querySelector('#steam-radar-contacts'); + + const setHelmKnob = (x = 0, y = 0) => { + const maxOffset = Math.min(radarPiece.clientWidth * 0.16, 24); + const px = Math.max(-1, Math.min(1, x)) * maxOffset; + const py = Math.max(-1, Math.min(1, y)) * maxOffset; + helmKnob.style.transform = `translate(-50%, -50%) translate(${px}px, ${py}px)`; + }; + + window.addEventListener('airship:helm-vector', (event) => { + setHelmKnob(event.detail?.x ?? 0, event.detail?.y ?? 0); + }); + + window.addEventListener('blur', () => setHelmKnob(0, 0)); + const radarDots = Array.from({ length: 10 }, () => { + const dot = document.createElement('span'); + dot.className = 'steam-radar-dot'; + dot.hidden = true; + radarContacts.appendChild(dot); + return dot; + }); + + const clamp01 = (value) => Math.max(0, Math.min(1, value)); + + const healthFrame = (current, max) => { + const pct = max > 0 ? clamp01(current / max) : 0; + return Math.max(0, Math.min(11, Math.round((1 - pct) * 11))); + }; + + const setHealthFrame = (piece, frame) => { + const col = frame % 4; + const row = Math.floor(frame / 4); + const art = piece.querySelector('.steam-health-art'); + if (!art) return; + art.style.backgroundPosition = `${(col / 3) * 100}% ${(row / 2) * 100}%`; + }; + + const updateRadar = (contacts = []) => { + radarDots.forEach((dot, index) => { + const contact = contacts[index]; + if (!contact) { + dot.hidden = true; + return; + } + + let dx = Number(contact.dx) || 0; + let dy = Number(contact.dy) || 0; + const distance = Math.hypot(dx, dy); + if (distance > 1) { + dx /= distance; + dy /= distance; + } + + dot.style.left = `${50 + dx * 36}%`; + dot.style.top = `${50 + dy * 36}%`; + dot.hidden = false; + }); + }; + + let lastPlayerHitSequence = 0; + + const pulsePlayerHit = (sequence) => { + if (!Number.isFinite(sequence) || sequence <= lastPlayerHitSequence) return; + lastPlayerHitSequence = sequence; + playerHealthPiece.classList.remove('steam-hit'); + void playerHealthPiece.offsetWidth; + playerHealthPiece.classList.add('steam-hit'); + }; + + const renderHudState = (state) => { + if (!state?.player) return; + + const playerHull = Math.max(0, state.player.hull ?? 100); + const playerMaxHull = Math.max(1, state.player.maxHull ?? 100); + const target = state.target || null; + + fields.speed.textContent = `${Math.abs(state.speed || 0).toFixed(0)}${state.speed < 0 ? 'R' : ''}`; + fields.heading.textContent = `${(state.heading || 0).toFixed(0).padStart(3, '0')}°`; + fields.wave.textContent = String(state.wave || 1); + fields.hostiles.textContent = String(state.hostiles || 0); + fields.kills.textContent = String(state.kills || 0); + fields.range.textContent = target && Number.isFinite(target.range) ? `${Math.round(target.range)}m` : '--'; + fields['player-hull'].textContent = `${playerHull}/${playerMaxHull}`; + fields['enemy-name'].textContent = target?.name || 'PIRATE'; + fields['enemy-hull'].textContent = target ? `${Math.max(0, target.hull || 0)}/${Math.max(1, target.maxHull || 120)}` : 'CLEAR'; + + setHealthFrame( + playerHealthPiece, + healthFrame(playerHull, playerMaxHull), + ); + setHealthFrame( + enemyHealthPiece, + target ? healthFrame(target.hull || 0, target.maxHull || 120) : 11, + ); + + fields['port-reload'].style.transform = `scaleX(${clamp01(state.reload?.port ?? 1)})`; + fields['starboard-reload'].style.transform = `scaleX(${clamp01(state.reload?.starboard ?? 1)})`; + + const statusText = String(state.status || '').trim(); + fields.status.textContent = statusText; + fields.status.classList.toggle('visible', Boolean(statusText)); + + pulsePlayerHit(state.player.hitSequence ?? 0); + updateRadar(state.radar || []); + }; + + window.addEventListener('airship:hud-state', (event) => { + renderHudState(event.detail); + }); + + airshipLog('hud:mounted', { + mobile: true, + pieces: hud.querySelectorAll('.steam-piece').length, + }); + + } +} diff --git a/src/pirate-ai.js b/src/pirate-ai.js new file mode 100644 index 0000000..36a70ae --- /dev/null +++ b/src/pirate-ai.js @@ -0,0 +1,159 @@ +export const PIRATE_CLASSES = { + raider: { + key: 'raider', + label: 'RAIDER', + hull: 80, + speed: 148, + turnRate: 70, + reloadMs: 1280, + projectileDamage: 4, + preferredRange: 300, + retreatRange: 175, + broadsideRange: 380, + broadsideError: 34, + displaySize: 70, + }, + frigate: { + key: 'frigate', + label: 'FRIGATE', + hull: 120, + speed: 118, + turnRate: 52, + reloadMs: 1650, + projectileDamage: 6, + preferredRange: 335, + retreatRange: 210, + broadsideRange: 420, + broadsideError: 38, + displaySize: 78, + }, + captain: { + key: 'captain', + label: 'CAPTAIN', + hull: 180, + speed: 102, + turnRate: 44, + reloadMs: 1450, + projectileDamage: 8, + preferredRange: 365, + retreatRange: 225, + broadsideRange: 470, + broadsideError: 32, + displaySize: 88, + }, +}; + +export const PIRATE_CLASS_COSTS = { + raider: 1, + frigate: 2, + captain: 3, +}; + +const normalizeDegrees = (deg) => ((deg % 360) + 360) % 360; + +const signedAngleDelta = (target, current) => { + let delta = normalizeDegrees(target) - normalizeDegrees(current); + if (delta > 180) delta -= 360; + if (delta < -180) delta += 360; + return delta; +}; + +export const waveDifficultyBudget = (wave) => { + const safeWave = Math.max(1, Math.floor(Number(wave) || 1)); + return safeWave + 1 + Math.floor((safeWave - 1) / 2); +}; + +export const pirateRosterForWave = (wave, maxPirates = 6) => { + const safeWave = Math.max(1, Math.floor(Number(wave) || 1)); + const safeMaxPirates = Math.max(1, Math.floor(Number(maxPirates) || 1)); + const count = Math.min(safeWave, safeMaxPirates); + let remainingBudget = Math.max(count, waveDifficultyBudget(safeWave)); + let captainSlots = safeWave >= 4 ? Math.max(1, Math.floor(safeWave / 4)) : 0; + const roster = []; + + for (let index = 0; index < count; index += 1) { + const remainingSlots = count - index - 1; + const minimumRemainingCost = remainingSlots * PIRATE_CLASS_COSTS.raider; + + if ( + captainSlots > 0 + && remainingBudget - PIRATE_CLASS_COSTS.captain >= minimumRemainingCost + ) { + roster.push(PIRATE_CLASSES.captain); + remainingBudget -= PIRATE_CLASS_COSTS.captain; + captainSlots -= 1; + continue; + } + + if (remainingBudget - PIRATE_CLASS_COSTS.frigate >= minimumRemainingCost) { + roster.push(PIRATE_CLASSES.frigate); + remainingBudget -= PIRATE_CLASS_COSTS.frigate; + continue; + } + + roster.push(PIRATE_CLASSES.raider); + remainingBudget -= PIRATE_CLASS_COSTS.raider; + } + + return roster; +}; + +export const pirateDesiredHeading = ({ + bearing, + currentHeading, + distance, + preferredRange, + retreatRange, +}) => { + if (distance < retreatRange) { + return normalizeDegrees(bearing + 180); + } + + if (distance < preferredRange + 40) { + const optionA = normalizeDegrees(bearing + 90); + const optionB = normalizeDegrees(bearing - 90); + return Math.abs(signedAngleDelta(optionA, currentHeading)) + < Math.abs(signedAngleDelta(optionB, currentHeading)) + ? optionA + : optionB; + } + + return normalizeDegrees(bearing); +}; + +export const pirateSpeedForRange = ({ + distance, + preferredRange, + retreatRange, + baseSpeed, +}) => { + if (distance < retreatRange) return baseSpeed * 0.9; + if (distance > preferredRange + 100) return baseSpeed; + return baseSpeed * 0.82; +}; + +export const separationVector = (ship, ships, radius = 125) => { + let x = 0; + let y = 0; + + for (const other of ships) { + if (!other || other === ship || !other.active) continue; + + const dx = other.x - ship.x; + const dy = other.y - ship.y; + const distance = Math.hypot(dx, dy); + if (distance <= 0 || distance >= radius) continue; + + const strength = (radius - distance) / radius; + x -= (dx / distance) * strength; + y -= (dy / distance) * strength; + } + + const magnitude = Math.hypot(x, y); + if (magnitude > 1) { + x /= magnitude; + y /= magnitude; + } + + return { x, y }; +}; diff --git a/src/progression/modules.js b/src/progression/modules.js new file mode 100644 index 0000000..6cc6780 --- /dev/null +++ b/src/progression/modules.js @@ -0,0 +1,125 @@ +export const SHIP_BASE_STATS = { + maxHull: 100, + maxSpeed: 180, + reverseSpeed: -55, + acceleration: 92, + brake: 118, + turnRate: 76, + reloadMs: 850, + cannonDamage: 16, + windExposure: 1, + cargoCapacity: 4, + salvageCapacity: 2, + radarRange: 900, +}; + +export const MODULE_CATALOG = { + 'stock-engine': { + id: 'stock-engine', + name: 'Stock Twin Propellers', + slot: 'engine', + rarity: 'common', + price: 0, + modifiers: {}, + }, + 'tuned-propellers': { + id: 'tuned-propellers', + name: 'Tuned Propellers', + slot: 'engine', + rarity: 'improved', + price: 280, + modifiers: { maxSpeed: 20, acceleration: 10 }, + }, + 'corsair-overdrive': { + id: 'corsair-overdrive', + name: 'Corsair Overdrive', + slot: 'engine', + rarity: 'rare', + price: 690, + modifiers: { maxSpeed: 34, acceleration: 18, turnRate: -5 }, + }, + 'standard-broadside': { + id: 'standard-broadside', + name: 'Standard Broadside', + slot: 'weapon', + rarity: 'common', + price: 0, + modifiers: {}, + }, + 'long-nine-cannons': { + id: 'long-nine-cannons', + name: 'Long Nine Cannons', + slot: 'weapon', + rarity: 'improved', + price: 360, + modifiers: { cannonDamage: 4, reloadMs: 70 }, + }, + 'quicklock-breeches': { + id: 'quicklock-breeches', + name: 'Quicklock Breeches', + slot: 'weapon', + rarity: 'rare', + price: 620, + modifiers: { cannonDamage: 2, reloadMs: -180 }, + }, + 'timber-hull': { + id: 'timber-hull', + name: 'Timber Hull', + slot: 'hull', + rarity: 'common', + price: 0, + modifiers: {}, + }, + 'reinforced-keel': { + id: 'reinforced-keel', + name: 'Reinforced Keel', + slot: 'hull', + rarity: 'improved', + price: 420, + modifiers: { maxHull: 28, maxSpeed: -7 }, + }, + 'stormglass-nav': { + id: 'stormglass-nav', + name: 'Stormglass Navigator', + slot: 'navigation', + rarity: 'rare', + price: 560, + modifiers: { windExposure: -0.22, radarRange: 240 }, + }, + 'brass-compass': { + id: 'brass-compass', + name: 'Brass Compass', + slot: 'navigation', + rarity: 'common', + price: 0, + modifiers: {}, + }, + 'salvage-rig': { + id: 'salvage-rig', + name: 'Deck Salvage Rig', + slot: 'utility', + rarity: 'improved', + price: 330, + modifiers: { salvageCapacity: 2 }, + }, + 'expanded-hold': { + id: 'expanded-hold', + name: 'Expanded Cargo Hold', + slot: 'cargo', + rarity: 'improved', + price: 350, + modifiers: { cargoCapacity: 4, maxSpeed: -4 }, + }, +}; + +export const STARTER_LOADOUT = { + engine: 'stock-engine', + weapon: 'standard-broadside', + hull: 'timber-hull', + navigation: 'brass-compass', + utility: null, + cargo: null, +}; + +export const purchasableModules = () => Object.values(MODULE_CATALOG) + .filter((module) => module.price > 0); diff --git a/src/progression/ship-loadout.js b/src/progression/ship-loadout.js new file mode 100644 index 0000000..43c3652 --- /dev/null +++ b/src/progression/ship-loadout.js @@ -0,0 +1,153 @@ +import { + MODULE_CATALOG, + SHIP_BASE_STATS, + STARTER_LOADOUT, + purchasableModules, +} from './modules.js'; +import { createSeededRandom } from '../world/seeded-random.js'; + +const clamp = (value, min, max) => Math.max(min, Math.min(max, value)); + +export const createStarterProgression = () => ({ + credits: 650, + scrap: 0, + loadout: { ...STARTER_LOADOUT }, + inventory: [], +}); + +export const deriveShipStats = (loadout = STARTER_LOADOUT) => { + const stats = { ...SHIP_BASE_STATS }; + + for (const moduleId of Object.values(loadout)) { + if (!moduleId) continue; + const module = MODULE_CATALOG[moduleId]; + if (!module) continue; + for (const [key, value] of Object.entries(module.modifiers || {})) { + stats[key] = (stats[key] ?? 0) + value; + } + } + + stats.maxHull = Math.max(1, stats.maxHull); + stats.maxSpeed = Math.max(40, stats.maxSpeed); + stats.acceleration = Math.max(10, stats.acceleration); + stats.turnRate = Math.max(15, stats.turnRate); + stats.reloadMs = Math.max(260, stats.reloadMs); + stats.cannonDamage = Math.max(1, stats.cannonDamage); + stats.windExposure = clamp(stats.windExposure, 0.35, 1.5); + stats.cargoCapacity = Math.max(1, Math.floor(stats.cargoCapacity)); + stats.salvageCapacity = Math.max(1, Math.floor(stats.salvageCapacity)); + return stats; +}; + +export const installModule = (progression, moduleId) => { + const module = MODULE_CATALOG[moduleId]; + if (!module) return { ...progression, installed: false, reason: 'unknown-module' }; + + const inventory = [...(progression.inventory || [])]; + const inventoryIndex = inventory.indexOf(moduleId); + if (inventoryIndex >= 0) inventory.splice(inventoryIndex, 1); + + const loadout = { ...(progression.loadout || STARTER_LOADOUT) }; + const replaced = loadout[module.slot] || null; + loadout[module.slot] = moduleId; + if (replaced && MODULE_CATALOG[replaced]?.price > 0) inventory.push(replaced); + + return { + ...progression, + loadout, + inventory, + installed: true, + replaced, + installedModule: moduleId, + }; +}; + +export const buyAndInstallModule = (progression, moduleId) => { + const module = MODULE_CATALOG[moduleId]; + if (!module || module.price <= 0) return { ...progression, purchased: false, reason: 'not-for-sale' }; + if ((progression.credits || 0) < module.price) { + return { ...progression, purchased: false, reason: 'insufficient-credits' }; + } + + const purchased = { + ...progression, + credits: progression.credits - module.price, + inventory: [...(progression.inventory || []), moduleId], + }; + return { ...installModule(purchased, moduleId), purchased: true }; +}; + +export const marketForPort = (port) => { + const stock = purchasableModules().filter((module) => { + if (port?.type === 'industrial') return ['engine', 'hull', 'utility', 'cargo'].includes(module.slot); + if (port?.type === 'military') return ['weapon', 'hull', 'navigation'].includes(module.slot); + if (port?.type === 'fuel') return ['engine', 'navigation', 'cargo'].includes(module.slot); + return true; + }); + + return stock.sort((a, b) => a.price - b.price); +}; + +export const salvageForPirate = ({ + seed = 'salvage', + classKey = 'raider', + wave = 1, + sequence = 0, +} = {}) => { + const random = createSeededRandom(`${seed}:${classKey}:${wave}:${sequence}`); + const chance = classKey === 'captain' ? 0.86 : classKey === 'frigate' ? 0.62 : 0.42; + const modulePool = purchasableModules(); + const module = random() < chance + ? modulePool[Math.floor(random() * modulePool.length)] + : null; + const scrap = 1 + Math.floor(random() * (classKey === 'captain' ? 8 : classKey === 'frigate' ? 5 : 3)); + const credits = 20 + Math.floor(random() * (35 + wave * 8)); + + return { + moduleId: module?.id || null, + scrap, + credits, + condition: module ? clamp(0.28 + random() * 0.67, 0.28, 0.95) : null, + }; +}; + +export const collectSalvage = (progression, salvage, stats = deriveShipStats(progression.loadout)) => { + const inventory = [...(progression.inventory || [])]; + let moduleCollected = false; + + if (salvage?.moduleId && inventory.length < stats.salvageCapacity) { + inventory.push(salvage.moduleId); + moduleCollected = true; + } + + return { + ...progression, + inventory, + scrap: (progression.scrap || 0) + Math.max(0, salvage?.scrap || 0), + credits: (progression.credits || 0) + Math.max(0, salvage?.credits || 0), + lastSalvage: { ...salvage, moduleCollected }, + }; +}; + +export const bestAffordableMarketUpgrade = (progression, port) => { + const stats = deriveShipStats(progression.loadout); + const candidates = marketForPort(port) + .filter((module) => module.price <= (progression.credits || 0)) + .filter((module) => progression.loadout?.[module.slot] !== module.id) + .map((module) => { + const next = deriveShipStats({ ...progression.loadout, [module.slot]: module.id }); + const score = (next.maxHull - stats.maxHull) * 0.7 + + (next.maxSpeed - stats.maxSpeed) + + (next.acceleration - stats.acceleration) * 0.45 + + (next.turnRate - stats.turnRate) * 0.35 + + (stats.reloadMs - next.reloadMs) * 0.06 + + (next.cannonDamage - stats.cannonDamage) * 5 + + (stats.windExposure - next.windExposure) * 30 + + (next.salvageCapacity - stats.salvageCapacity) * 8 + + (next.cargoCapacity - stats.cargoCapacity) * 4; + return { module, score }; + }) + .sort((a, b) => b.score - a.score); + + return candidates[0]?.module || null; +}; diff --git a/src/style.css b/src/style.css new file mode 100644 index 0000000..d829460 --- /dev/null +++ b/src/style.css @@ -0,0 +1,15 @@ +html, body, #app, #game { + margin: 0; + width: 100%; + height: 100%; + overflow: hidden; + background: #0f1720; +} + +body { + font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; +} + +canvas { + display: block; +} diff --git a/src/world/seeded-random.js b/src/world/seeded-random.js new file mode 100644 index 0000000..6a0cd4a --- /dev/null +++ b/src/world/seeded-random.js @@ -0,0 +1,22 @@ +export const hashSeed = (seed = '') => { + let hash = 2166136261; + for (const char of String(seed)) { + hash ^= char.charCodeAt(0); + hash = Math.imul(hash, 16777619); + } + return hash >>> 0; +}; + +export const createSeededRandom = (seed = '') => { + let state = hashSeed(seed) || 0x6d2b79f5; + return () => { + state += 0x6d2b79f5; + let value = state; + value = Math.imul(value ^ (value >>> 15), value | 1); + value ^= value + Math.imul(value ^ (value >>> 7), value | 61); + return ((value ^ (value >>> 14)) >>> 0) / 4294967296; + }; +}; + +export const randomBetween = (random, min, max) => min + (max - min) * random(); +export const randomInt = (random, min, max) => Math.floor(randomBetween(random, min, max + 1));