From 9c0ad6fcba8aad0ca444125230eb65aecb08834c Mon Sep 17 00:00:00 2001 From: Mitchell Hansen Date: Mon, 24 Nov 2025 22:36:53 -0800 Subject: [PATCH] other files --- WEB_BUILD.md | 49 +++++ assets/bindings.ron | 6 + assets/display_config.ron | 4 + assets/screenshot1.png | Bin 0 -> 12393 bytes assets/screenshot2.png | Bin 0 -> 14449 bytes assets/sprites/flappy.png | Bin 0 -> 29296 bytes assets/sprites/flappy.ron | 169 ++++++++++++++++ assets/sprites/logo.png | Bin 0 -> 43242 bytes assets/sprites/logo.ron | 24 +++ build-web.sh | 25 +++ src/gameover_state.rs | 412 ++++++++++++++++++++++++++++++++++++++ 11 files changed, 689 insertions(+) create mode 100644 WEB_BUILD.md create mode 100644 assets/bindings.ron create mode 100644 assets/display_config.ron create mode 100644 assets/screenshot1.png create mode 100644 assets/screenshot2.png create mode 100644 assets/sprites/flappy.png create mode 100644 assets/sprites/flappy.ron create mode 100644 assets/sprites/logo.png create mode 100644 assets/sprites/logo.ron create mode 100755 build-web.sh create mode 100644 src/gameover_state.rs diff --git a/WEB_BUILD.md b/WEB_BUILD.md new file mode 100644 index 0000000..74a0158 --- /dev/null +++ b/WEB_BUILD.md @@ -0,0 +1,49 @@ +# Building Flappy Bird for Web + +## Prerequisites + +1. Install the WebAssembly target: +```bash +rustup target add wasm32-unknown-unknown +``` + +2. Install wasm-bindgen-cli (will be done automatically by build script): +```bash +cargo install wasm-bindgen-cli +``` + +## Building + +Run the build script: +```bash +./build-web.sh +``` + +This will: +- Build the WASM binary +- Generate JavaScript bindings +- Copy assets to the `web/` directory +- Copy the HTML file + +## Running Locally + +Serve the web directory with any HTTP server: + +**Python:** +```bash +python3 -m http.server --directory web 8080 +``` + +**Alternative (if you have basic-http-server):** +```bash +cargo install basic-http-server +basic-http-server web +``` + +Then open http://localhost:8080 in your browser! + +## Notes + +- The game uses WebGL2 for rendering +- All assets are included in the build +- Image sampling is set to nearest neighbor for crisp pixel art diff --git a/assets/bindings.ron b/assets/bindings.ron new file mode 100644 index 0000000..414c217 --- /dev/null +++ b/assets/bindings.ron @@ -0,0 +1,6 @@ +( + axes: {}, + actions: { + "flap": [[Key(Space)]], + }, +) diff --git a/assets/display_config.ron b/assets/display_config.ron new file mode 100644 index 0000000..3f50ce8 --- /dev/null +++ b/assets/display_config.ron @@ -0,0 +1,4 @@ +( + title: "test", + dimensions: Some((432, 768)), +) diff --git a/assets/screenshot1.png b/assets/screenshot1.png new file mode 100644 index 0000000000000000000000000000000000000000..90c88813af28d556bdba45d18a5de10d94029d10 GIT binary patch literal 12393 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 literal 0 HcmV?d00001 diff --git a/assets/screenshot2.png b/assets/screenshot2.png new file mode 100644 index 0000000000000000000000000000000000000000..b7a024e79efc15e3a33c9a5c19dbcf537f4cf1f0 GIT binary patch literal 14449 zcmeHuXIRtcyD-*P`>%siDqB#fQdE{<2SQZ@Wh%&C3X(7r*)zn}Rza4E5LQ4zh-@M3 z6)j6f5&UP-)SZFcB8neRkI zL=IiPWMV5KvZq!=Wbd(W_X*#ao~OZuUtfowzkKam;V16fn+d|-(qR{!!t7w+u*e%B zJ|Yk(EXYSS)H}q-2O8=N3uErZf<#1)iCi{0cP%Q9L5{Aw$#$38f{m6pZYY*YGRjYo zLX-v~0w>O|{`T^&)L!YYbh7j`_7{9_n118-@jQ)rllNI?Uf!@eDSk{@WAo;%z-(1; zaPpozM+Y)jJ1%+rRZ?HBdvy>pCFSTI9&JgmOewSxdE*^?Lq$GjYiR3F$&MdwZ4-t{7ht`o$PR<^Q>WH~lO|%ONDNy#cbHUmV zcw`_nDHqzNlY>iia`rPrk4XEZ?RjE`nMm#%GpPeIwq~Z|RaZFg%oJzB{8k@XsHHAd zx1LgzscCA`>W}~G7f(h6aFP*WY27e$cd0s+yTUy$rysL??O1Hj2rL1Nk+!fHC|Xe# zsqpjj(|4&%jM^5y#&TXO+k8_ypx&xwz`*;ri;46&qsfV<)v#KM)<_978eK@H|E{<1 z)(s~Ym(*s?A5Ly=_c!}X^+m-i!Im~w-Kj?bn%dgVVX+Kr-4ZlfX(sI0lBupiq0}#{ z4wDSMkXa|K-1J};pg_#gBl_at%D9-A7%Mb%^|ex37Y!unUXTZhA(xvM)(>v5rYZP& zlQgeN<^u}ig4E&9)?7@Qf0kxof;IHRLHQ^_{^ z5!TB5b-a;1Gr4JivfiO6v@M01jxn~mQWeEU3Ta30H!bwTHCw~ZWGXjkygP^qYDlq0 zi{BGfNFu?oMpZ3~{aLxW<-B%^uhz^w#0U_ABe`I>E$bXAlGJP?0(0czAu(IiWX= zB4fO^WPH?k9Y^e?GC4_GJN;pnu!~~eSwWae!|2&4L#i|(VW}FcCLtkFIO1p4NTPE+ z(Ibg-a~VyukCF;W^d6-&x#Won`qM`CqAa^-8XMynHlJn|>7(Dm$k-NSO3e7RLcB^z z2{v+u5e~6p=&vSt1zZw9+Bs`sPk4*ikZ+F(YhAD$?l|+hD6Myh?jAf>j6oN$#uERa zDpMEwx}E&Zv|Q6`yovaxD9CAi*Rza2(pP7Pgq%e;X&g#U91B~XAjv!law4s*g=op( zn&>6y?wy^Tmq!{noQSFQ8_eCj?ZtpOlYZch?PcMj+s^8RL6ri7z08^eaH@X_UJNi?^%(~63q=yj8w z_nm3oSiM`+MIAdbv~6b1eO39Mgd+(^wVe9l^*gt<;vx6@-f0S{;-|$<+YDaRQj$nJ z(_=r)>xrT^x*x5~5MSMTU);1%<~rj#{g-&~Dprual~$0Q$w83ACf2Mr7i)I>7#ojg3;*wk-Y$=1uHR^^Vhx$26ZUt2a) z<@DW1)~)Te;8??)}sh^%hkF3;NTS zrw3N^$my&5Mb!(ApuavVb*)3kK(rf(Sn=#tkWbFa%1MN`Dy25U(i{;i`ym&O*A8C5 zIk3tVZSWQhAhhB+3ez&`ahwA)st6V_cqeCox>jl$hFnQ&qM2@&j%J=%shaS}2;W$`5R2Q~?6wV)kW_53 zzup#IcqFoYE466}E>KdG2__~n6CmmeY53vuqqmBrxiaMZP5k$-uU~<<%ZS$m5b)!p z_ZQUilUGKd_hr#CL%xPa9_%EnbhU+R#HObVw@^%3fpar%eF!V*=n1#jd7~~k-?mI) zcPj`Q*$+Yy*~Wsmhjk~O?`NY5QK82oN|Q_%}o zJC}_p52(h}%8^$>Y>q9-BhF5mrI{8@Btvz*=HBfcf*PGD3e+kh`+|zwM+%sSZk~+& zr4st=2TvuLl$Ay85r%1)EY8=|B$EE?*2{u;LwPIW4fZT@W_Iw}a(>J)3LhiTk&hZJ zpCPTpL8o?xnaR1H>upV3D}heD;JTpU#uXe`X?}j*n^<+Uy!a(-rw2&f8LaU(vq3aS zhbq&Gq7Aa%)=O$SnK}?D-Um(xbFQ_vK+Y(FfY=|6+3(Uuxdl>B(U?Qs8d=oC(D&?I=Gy)RF!={T>^i0}6>8YUG z7}5LoX)INg!n$(CMAxNNJ;eyu>}%8LRR}l&B#Cy#PH!vBs3X`pQ5)DTMHa$i<&^sT}i{TOfLvboHCV zj{#Y*a0Yy4>%3tsOjogSIOpCLv}eXO>dW^sfK8e`dOERn)77^XnFm4Y%8wMIn0* zcnV6kDw#m}P;&Noy|)T~nn3!?sND8s_xQxGcp?0$rf}2=nwfEIs z_XG>7tC{ShsoCzQSBpD>5XV!kEPszJ(no@e#0CaV*R-|CwMH`UN3^!*JgM05EE-DK zuMnpvv}|7Bm=N4%K7SqEt4(yX<4y~$M-Bt!M(+{22~d=~zIJF0DP?o$!jQX*Q{_k` zQlb#Pe#O2KrbDf~ho0eYh6$}jSSxvpqz>PBi;=+29Z_dhT+~D2&GQUvqz;@$Etn{s zJbBWaeQ`u{A|YX+Yk0?YP_?Sdyj7NLx;x?((`&h$7ibdcqmqhpyFa&Civ3kv`J`7! zj6no0|M0bdhC{S5dKk4UvAJn+v3y48&4FlIJ3=Q-=s?P(8SdO#o@`di!BNtKq!=he zO-bW62*{(sy8|K z0iRUM*XMeZp(d7=-4`XTHaNW_>59ZaS$yS?Z<{u-Vdvz#R-l~kTf9JAPY6I6&8CyQw(NoAj>qU zQHof}qmw-NS=fhr+>Yhoz{}&Bvc0MDDN1IkT`S~P@7`rg%e?qHyV&RxLX|xi^W9w2J^c7rD%9zcq35BTi+JzxAF+t$F8QD<*161IZY)wtI7tv>h z4E}*fi@T3Y(?VvB!AWl|+kz^p2D4JSoAL;dtEr2I(xWULedZUNdC!m)jD^Na;kiVk z|NJZ%Jag!xd$#XupK?RB>9w|YSt#Tt^-&rjI*t#qQNVjAGUGsw>8r=Tz=U{O{4}t! z4Of|?uYXBDKx%Q)xZniNP_0uh-*ps!%%|tZ^b0J-Ij8eQHbg$g!>jp=<0Z3hOeeTI z;${#z06yrsZ$jiIYwfjXb0!F+olRFQ+plYznR`lBDUgi=)ZF+h+ za>(K7pHXR}M_|0v(YYH)X(CC$hy#h<`GO-anIlG49B>EEz$Kj3_Kaqvt!=kF8WJuw zBw^NBw*ZU%$>HXP#`+gO>Cuupy`PG5jIyG*+zSK zwYbd9d79p!9N7B{g5+lO1MfW6-j{7u57j1&xw6^Nd1-hj=&U0JUjTc$64M4aShP)%_r4{!7&srR%bH-t$o0J2N+UHvIudllJ#G55aFOTG=ZS=)|gpSN^Rm`dA+NA0%3PTIi^!wTOzm zxPiM<5G{Dl6%mo0@00(pT$A}4`4{%_i&d3=G#aH&oAFZT3;q22Mw!ZS3Y^f2=L`|2 zt{Rc*pxm~Uvr2in|45bCzK8vZ;U`{kS6Zu?+pQh~Ds3k)v+*kU_t5lz)bM#!PKcNL zzkuW*V~BsReAJ&9InAmXog+@I_WR5F zn2v{hvHN(kkbId$1d)gsSX}EO2+H4Y9B2^x0;US0$Xu5Jmi;QSS}hm%t?Pv^u)37d zf4kXG?^5;1`)9JLrY5W7nf5(Gn$w*4wEodos z*({TkI`tXgfAh>S68Zz=>AwoEM&1}`o3CCW=iI$(bYRsGA94mB*BEHo{109qOE}wc z$7IdOe^@nh?L1xFDc3HaLUQ-1>^*ENFLzbHW?eHyu!K!**`F-^`LJQdy}6fsS`5N{ z%3BCkk=%12*GAlx{^VRu@Lbmqy^@N%>}0)*4)dggXOJ-=e!dUZhQJLIgOH`kiQ2Q? zC_^PpSxktR!}eA!{0nO{k$Kk^EVLA@%xK4HE056L)8z^c&j+Kj4HdxlPLGlYYY2A8;q0IBAl*gp)vxDV&kPM4|==l0> z1$*M|5*h6JSp43OVGr)Hw1u>1!ULg{>+O<8MYXmBH??4J_^yX_#c9#8=dt^|b&_eC zV;Ry(TF?_-rq-YK8ryoWz<<9YKF!{~%HG?5mDQ5z_JiEB-}Mr1JeGcceobiM(&kA_ zevxog=n8RW)6G68KMkQ=CI#B-i#aKz8~uOrRUOzQ_M_Uo80q&Ge!KRWY&z@E0BpO` z)7c$#>)p#}#t(rITmt^1MuZ7bjyp8;Lb`M?inxS`6KWlw9-$6{v3S1)nS27Yr0!c+ zpWA1t$JQY2E#Kg+KD{4HNLVSK<~|j|H~z%5h=%4b#Wq}S@v9*T6k>>-QPI7q#sQ)J z$o(kVzn`DAy`jW=b4dU+AXkjp6f>6iY1+n5peh;POO66q2QYe~ZCiOg%A_2Z}B(?IHqd0#XuIzxMO^)g)59^qxnk4tue<9M( zex`-aQ*3dA?fCEe)1p0X+1|Z3H!i3t^GB-7%@fl7csD^Hzk9i4em%9IoQtc)wjocod}PKe)7X5oYY*lLn$m)xlAE`eas(Q!iqn1rK}XV zvt%FXGH3h7*5Gg`{W{O<6d>QNueZS^g0b$5kRL#Y^Ae@f0@VL_8j8>1F@PRF3+WNK z8?x=XUw~ewr~4|?&iUOXbNXa-!)u+N0jcak)cZ^;JcJW=BIC9Ty)~kEQ$WX*Q=3b( zW3}Psz-!TP`69f5#j)rfZ_r^*9%p(OgrD~Y)^xz78(O?;AK*zlz**l@s%j-vjit%N zg!f3B*wbvD1-mlQH2;Nx1kr=Mk;xVeR!q1?81IVW#I9oBeUz3ymBUKX2W&4arNrz*#q*_GDP_XN{Xr;HE5s@(J0o6JT>8Fx1?U@pgXZ z;{1$TnRH`_7b?y&vz2F&fL*2gBSv2I8tcECOq8EQ(10iPaxb3hXH zufdv@5U)f+>i~f_fa&JDpHi3eT$vu$o7!sfpt|`F=wPtL%icOrYU|M|)H&!dp#bM> zk*_)tWA0ajZ$cpAb z(eZ}uya*lSw>``IMq6wzV)mw%4{+l8#n>zEt`W*f{^={^7S)u&j|Rj zspY(s(8ObGRit@Hvvu1;(#d8%t)ooTiqM5LMi z82ROM6A=ympv%`!qIN~Xm6n%h7xJ&FY*(qjnmuSPo@gjHF^5>YzC2~X-S><1X9sC7 zQeyupQK;gX2;!FCZP*I8@7#7tT~ou;w1F0vrwZO$`N;#E&zg_)rlPyj78yg+1=9NN zMmMwX8SthpQPXb%OYwh-h)A+`djV=Gb#S1D8kHcGqD(z2^BMMsnG%?tvowMNsJ5l; z(J&+LtU_MvR$h>fotM$W^P3h`rSZ?B#kA1U$W=&kPkOLE;xm+$LW%lCcWHy@L~F~+ zcWe(UD_ARc3R#5H!;S>7APU*#Ix#Ex>2Pd$cK)la(#}!WXRXl@S8%RR&3pjf52cas zHBHee6H?O1k)A-e23xY!uJ-@nJqoquKxoovPL3?QMVslApO0E>?O3r_VZ8P2|C0(A zEeR^jX=lCcTRif%{c2H@GlLHHG*nG8k8Of5Zl1#Sf zTIe|eFh!FTFq&u8(4^_vrm(TC#&aNJ%R9+6pWLU)BVt3B{ruujI$5`qv@sV?#)J&l zSpi}8_35tk^_$6~qJ)W1!ywPfg4YEr1*^T}fTl-yz6RT$A+k zx&SvtuPwr3fGK3MBDqs|M?jE6Lx@}E2$^K`4G}CjJJ;kM`EY`tarGyW?>gkBtoweTyOJ`IP5I zelQp4>>OXAl6TKKMrwk8bo5|hKuNjmLF3Rc;$jG8+Avr}p*&w&xKSewAzFrz`pJD| zKEn2N&)nmU)BzJ191V+X>G8!OZZY!6U^?~e>f_)Epj|t7evw}GWQ$%j%98sMvUJ_a&c?n4rN?n`LQcLIH+M09Q_iI+_nA-66 z5%KiR*hv+b+nTPn;>^v~Q|CZBNZ4;`)PE3FFRU#;h8_$gK6}qW+sIE0HP-abm(S(@ zsAq+vkIj*^<@>5NF6oMba=?e&CqnIRv_xy*I{Gkos-~{u-ZY=gIJ_20Sj%;aO}!9v z@lSMq#W3d&PVwlR!}juE>S9liK{&luNHqYpHmj!?1)H%PNH?lxED)qn6iR)l`FrZx zHP75~=rDd7mGp!f$N22u;#-bykF}4cgs0>`s}dw5TZrEo>P@e-^4}%4k8VQ+*(%{I zc+Bur&c>bBB;6QWCLjKsG%XBQxwUwg3sCgD=>=*?gu*@s&P`t z1YD{G;Tk3f=BnTwc0YhN7*hN=xUYA%f1)p+IH)zkprol?i`B&wKZiz@M}}g($;YZ? z7c%Vn;xHaDd}Gui#y%t=I^I=Hi3=2yzfR0YB~M?dT;3e9mzL%j>p$&AqEjqq~2x9%XG#u-JJO@xGe{V{7lcHYR#$>L3Ut zcDjEO!8=w^nGWNZ$EN(55nc*kxq`d%+93D!tCRtiC3&O_DyP(;$Cp7E3uffm_BY8@ zsCXaV<^;EHe%9P*p_uE+LPStGx$k9EHt>Xve#~_P@+qUB$THo>5eB2%19p=++~{sg zLD<&XHO1GkyEwvSS2~BXzEcNP4l4M84W(dOv|0qA-4c=#cuJU+J&>{9&T&#DuIt0n z)9h{jrI<2ML_bu8w4n*fcD()macw(xTT_1ab!}309>Lk#sQ0NL9)~MP=C85VW#B~E zRbmV_97VKN_5_mS7_$!L8%sxv7{Lsa={d@pdoV$Tkicjo)T+x+f6>uEMr&=O{jWy zEmBiez1a5UolyJl5bindp|@)M7Zx8sGS)+SzIxFABdQElyyCS@Ih8`uwGYBR+D7=P z9W}A#>X1Td0;9Q{h|$Fma}IL&R|?R61EO-Y96n-Sz=Eh-EGZZ|XP_s^{?VnbN7Lul zzazSVT+Dkb(?Q%{a&Tdc!0^Mf(w^a%yt~1eAjoZ7C+`y}9!01Iy0J&)jz(ixe%P=; zP~SS*QO)ilwedPbOTVte2SAQ{0!s(C-q_Y-iOknT>zqU#ckLWcT(GkN4cX9LZ-*jr z*gbcY?ewcO@kHxUuo`E@2Jx%&;x+g^5jPS_TU_y9p4CncgQOS0j2_~ zk8?ZMSkK87!r=E?_F_Kz{C13zFu5IrwT?F*Lu?& z;RA`=VMX_ss@wU@Dm4YmbaWM})b_84Q+H<129`ybG&%zSW$6P)o8_)#9m!a$4Anv*{t+GcYMA5P?>I{`X=2$OWR!ZikqhA;_4A9+hCuK)F z1f2mLH^Q5Tp7*N`pcZ2lE&(R02)YF&xi{5O%bxwN{*HDBCG95s9|R~Xydua~Z?jU6 z*cbi)tM~5K0~RQM1xes&bIpUz)1JW7k_+`LGJTRW{yu4#?cg08UyU*p*CuS0PZ9v_ zlEZ6W22Rmq?@1k*_=0uWMp;x7V}|L@u-P&q-|gnAcC&d1dPl6IW8Lt>e-rt@`*=8CD&FZR9oHU7+y;4?(bCsEoh>*W->6txuym5BRl# z_cup$WLBZBtz}QT28}e|u0l=GgwQhYMRXi*8orESL>%Hw`f0BvPZ_q>E)Ly0>=?eu z!`M`)VVO0e)oP6+ntjx9TrnBk6)M>Q+n`CVRGTLhfNXgb#7h3+_8{W7mJ=Bg#!*cz z-y0kM9#B0|ibq2{)>XyCR>k*w{PbmT%w;wQgm>ROb#CY7p+>Z7c^13j+HYAfbgriC zXoxQPbu*y&y;12+E2*Fogm1|Y&iOuJYqtbp@ewvH&f3L011Wrr_ZsdU&RQ+;*$>XA zzBwaTHfEz+rnUX@;^=ZeaMNM#Nu$w~43LD<^g0S!WeI?nu#38!tWv{>oiM<}q@hjCL zmPI$*=-9J~eJ1V9BJ)qoMPLx6Wh>DkDRJ^8N@PpGwnYB(ZJqQg6e0><&&0juyJ8(O zR%vz|HROOpOchG2JP1X*0LX}7)dM1*3;6hDE8Wd`*}#$dbmQn(9zef18$-?60A-&3 z^|A@UPV}*iv1#_WnFCUCSU(*isC;Hzx}I{dE1UMq%-*@NnzyMhb7wft*+WF38sORe!+ks;Ezo>j_M>Lr)U+<}}xt7so34m;IzYB5L$a3DgGKwivZtMTc{~86P!G0iQZ# zly9+LdpMF|K0;lqXzT7I*L7?!;CZEQvs3K}OB%M*)`lL%^ApE<%NhxzUWB$MVHFZ~ z6F)V2qDicYvQeD4)8es;;c%bBta%BU1W7p^gMmjytg2cQ;>$FuyGS}+uR0-_I4Z9 z{a~ZwcVNM=51C1^#&H1buI9AMCMMJ?_S-gTPnMfEJ7_H=2PEqt(eQ#6@^6s;@fU6Zp#xLk06?JWy7f!BPlh0+&?bxEW`mE z^4=7_pD$w&xua40n4m6?zxbPfbd2YAmE2hD$&qJk-Qsk2ZTj9;wMy{B-2ICb12)DE z;|a9wH-23+ITTt^$XqjF$inQV4Nx6Rq5sm%r63DJGtHgoj2>}qz$1wftDNS7O0CxV zhiNuBVr-J~B|-Gwzcs9bN!L1` z4?D`ZEY1piZYr3#B2GtBENc-S*#pO-lMH43A4s1wQi&@9!)+U}+8HnMBTDQLYaNk` z!&9mT4$TK2wdy0yzve`ZImGzCJz9PSDbCWJ{lQsj18ekBvu`b5ePi%(`Iya$jnP7O zFp?tqi0cOMuu-kdv!Jl^SvNfMCrF4)Q~+%q(nzXLA4uGrXB@2zyuc@u>>N@k`%Pzg zgtUiJtpP9upS4fqN6X!$xUlK|_1r^B?rCmS)hNcw{9ddgBpwiG1&lVm;x7HH>i6OF z`mw1&C*Xl{Q=1z;w;v<;noD+6B20h@5 z&NUqh>GbP(8kLmlNW9;il5q&o$eZj*J34C)(K;-O?FF!wKR>T%)Y^Y6GC9A?bn3>9={WdQ$t+TKD zVU6D1JH`CHaSrMdenlK?OOYd~bGY)7o_mN9=4B{>sMu=!Md}zqp3~<9! zk!cr7kIOdl4|+{)$9Y&B@b0O%%M4y(y%wI1jhaez{2Y_~cN((l983VIZJX&uEBi$P zFJWq^FFzCy#sZg{w^Q!c+EsCA7mPlZfCGvYrtp5t$AtTAW9rr3QlA(Hj1<^C7G@SdWS_?D zT^{#TSs}(sj00R@2)TRpbi$P?V?p~edNWt!aIWvv=LWk!}`eRbzQ&q@i zdU&R(IAt3neD6x<1gFy6nRuC z+*sr~nZhsO3Zu8jA3EiPdA9=nTLT~a8aA&8vx~PrB-}5W3>q?zd_en4;OE&NhT@4! z0^-N2ck^Gxv40oE3)^-ml5kZ*NEzZZ;(&RrrJPb|?Q*$n?28c2I z?=rjK$n@XEa|Fu~5&YpTOZUI5p#B>tjkPgc1+PBRIF8TI{k!y@knzu1|FI2F8^MCK z9hbQs@;TS>AL_N0(n7BLN+fX5o@lC-i%f2j6?vgKy_sU3B=TbwCw&^Us3!8VXBm~? z%O8t1BOekO&niMC%!@0Vet3=`?%wi4z@Jld_QTu?EybLpyG@N(?qw?F)EF*8g&XW_ z2>ue@^t*`lav^sA__wS5=k??N;VC(U7<%L1NJCQI{N3(Q6L#|>ZQ?bd@*g`O5YcRA z^2ff0g)@IYNRmUSA5q`7t*`#~TC8B~Zz|+3@A=rg`JdjTdlEik@r|%SV54%Hdq{Zu zxt72+U#;qP9!c0|B{KeiS7}km;Z284e30dkXK<|?1h*Hau*=35Cdm<6Fn*Q7(cNF2 zISQ>@hlq{Za7nyxAOje8#d$G$x zLNT5P7dwqMX0IW>52o|PU|h@X-%PtgJ5*+hlf}Ya*UJen3XdL<|4`*+X>|T>!uVKjHvT0`Tq7 z>)#ppM&zt+J)YumUNK0n`0OI0T_wPS>V&~-MS%<=I4eGcchPA^|M*Z_dn zL~)YmvqU4Nw%OhDK@veu99?CnAU7QK(j4eulbSjQQ3!)_P~;dROH(-q7tY4J=y!bg z=oH(649kR}#|j+5k-u-yIegn<7kG}|+F|$YZCIUhg|AAZ70~{>m#dKMjHOO%s%N+y z4+`Sj!wAX}pX!dcwg&`2>~IJxy)Wca5t^DeFGkOtnJIt(W)HbkO&pBLD`L@u6F{95 z$R{~Ckp?&!Kol+JwPMPV`o-Cc!;-}3`jXR8B+v` zm;+Q6_m`A`4Ku)U6%|ShZ14ik@x-mVKpHJ@vZpEs0krS{vA1vOhyc4~!1Cjjwn8&v zU(>+*z)P7{yBowcpTi|nv)P0gv->xJk9Sv?07z43qay)s0{J|?Iw6st*DLaPjRaEG zh=A{uw_B)qQnTn&WIA!opS0fOub{r*P36s!;n#OwlG^DVfq-qXw*g{bkLU{sML4znL zWttV;D7jl%%2m@TZY%`jaVMw?ybsFfR91=POHj5J)Q$YWsn@}l4>_fk4op|Q%kAGG zZw)Z2&2U*fA^n`A`49N1Xq(IOk3B|lap3eDMUN^;KbIS~al}Y2;Q-yCfDdhb=y9IV zfDWnfownv^5!vWq{1*d;cakDH%V`aX^aF=qXc@|mgibe}l^cxNvOwA!%UwL~37In7 zg|xRXFX+!n&J{SHy9idJs+p@HQ_vmR%-GTP$p!g+Q$JDjcNWn?Z3c7b`M5=)Ij8yX zJ$5J_PL$U8qrrO$b>?M#xKL!kjo^b%tA15x-STa-~GlI=Jt=`_szW8r&+@ zy4lLPz)SVfTIDTQXuR%2-9aW@{B>Ymd|hUp@l|w@k|eM1`@Bw^1Kk6jx2!c8elc!!RZutJ(^?~r%tCXvUF*z?w+w`cv6+bJ~x7VpHIX2EH zdQ-Af+MrmkSg(Bf?M&jxfXSMSBu0@evyC|BbqqC=r?{E~V_Iz5K$>(KvpBh(`G{YM z>c1cT#3NL8w6C^@Wxh&uG%|dNRwT$OPts|xZe(~tm6D`+S1iituUzZa^H@9kSG9J$ zuZ0FmMif3z_ca^R3Eb6ao@kY6{@rsX+GCl9sf>QL`Bg%zR$)7@*NqjHL7G98@iN0i z#=>piM zJy3U1adb&^59u}qj0H1IHVoeik_a#hvKtQ+`xU<}eqH>=n7T-MWPC)n*w^t1vjKC0 z*3TXZlYb*U`VO^2znlo*VeO>r(G!fGTXr5-9;Y5L9=OK>=j!JY$Hm8`wrM?@88tR9 zN4s}#l-!^SmkB3~HIAK+wP%@Ros}8Cx1Ujv@kVAS<9@n^9-a~cz0Y)CP1)>za;Qhhd<$3e zuaN0^Cg;;Bf*tj0-;;wq6lLYR>URb2coQTO4mytc#P7(xw*S{MzEbhI!X%F~jk#Xp zOefk#^G&ytE7bMH%CkOircDMDhDqA?cP0#;96R^@6feG<5EAJV{SE0=IcoKeAd6s6 z40`|f{aKD1}c zjlVU-SMAv`DG1))R-7;}7cWhcO6%1seaJpfcuv$fliC+L z(_GyAJfZZP^5G*Ez7i^ACvn$A#*v7uOs#^i>HC|ndO4T#m($~4Kdkt?O3!%L_{TTx zm;C%mN2@+7Z@O3$9(16WIlWP+2^!5%&4J=d-K%Vt4s>T}FQ)RI%l^QvG>v?X-^mjK zX2?S$CG{quF6XY3E*X*-5(D}h0%(f{Tl^nf{;I2whCZtDhwF!yOd!*K$oL-Z+Ov#& zDE3B5zH;13NDAG)G!pqN$WRKk9}LMh=!T zpD>qPES)@E)?Q>5lR9>IJ6UNj_PoLkwJq3Sa-94siS`58o0y3S-QK%Gw-HFk`CnbM zcWG;@p8n#mLK~>*|JoLwEcb37y`wW+yb-Xm!gQH-B*E@U>|s8;Tvhn0s%d9%+5%38 z@$=MP%Sne<+1*VHLwk}C6uN2 zP`H=ux3h98z3O{c#kAT@WND%1E~Z2*xlSmfZp-_$mA3ceNZ}g;liy~wahRR6^L@6e z%q07r(Fq@UpULx=M;Q$}zL#4u+067#Z=KBRCC>F{w?ig9ce`tc5C+cZQ~Az%DKu&~ zPTuf{0#mk>(3Th3eimnsDZ9$6nJvcrQ|wnnCsy;46PyMMVY<&zn@zaZDviW^Iju??)h~^^Tt*w9)ek!QnNL6MS2545Hxwdv4;oy> zUmos1!l>Pg3jm}*f462p z)e&$=1E>iBs*YTQV5?}tG=xXA1F;fOL<#_JfFn3SR0wd%0v_%_N-0jZJJ1R!*0E>z z_7)t){q1t|NZZTpgzROtwa+pF6qAsK&i3|pkJvawA#URi#BJ&Ek`n*~5i~xR0~D*~ zBN1Iq2*O6$i_(HjAt5lD<*-uM)dB!VcK~qB27rrc00_1Q0OvIT*s=ovVFdu7h+o=D z-2ebv`G+b>&%7qK>JgQ1!c1FeBh7_Y#k|lns45mgU~7FQk;{G&z{IrSq0dRtxm zM^H|Vs+4$Tzz%xx>RZKXT)|WKf;YqUdhWZ$o(Ml!(Suo&s)F9{D7YVb#x~1;i5_`D zPpo|Bpi#SC37DIjz4X6gN%&iLGUG`COqDso5V0L6SM{=f>O47FT<_0)^9u&Vy7x^U zK^f_He3lRk9Ptq^Kd3n{;;QHsi^O|vE8_-Gh)P~;mcs9#PG;CI2f7y@G@P4d_Mz-$ zF|72*^j9$NC0A~#yJ55u*$_o2qdlL39KxX&DQuBa2t^incrVwNIf5%AZ?r)7PF6!H zl=oLp<&YPr!MbV}g)dq#;sBJB1_4eO&Ud9(k5M{Fe4rrp!4&r~ghH9`N-k@4bnSFB zklCyw3a2072zheht}jSm^%-8Dg!h&>;J+mhDw)Wu z?mQx$WLWL*%@kU1gRO1pybwx2xnsg>pxH-2wYmC*q!dCQ_ERaXWwrT!Hfe#KG~3{32?==jvDe z^QkxjfHQ$<9k|Ytpj$_0!4&}7|+fj(o202uQ zrt10(V?5_+uEz&sp`}o^1HcEI)^wIPu&ug57QcOT+G`M5@JhyI;BbO5{(3dt_vgrR zg`~^h`|ZiKvCG?}Sjd#2-y2a#pLN5d)r&Xp$=Y{xsM8;p>$)tL8(uK^wi6}TR^B+j7WF6Km5s8?LgYES<9!Bs4aVRozfqeldaYW!J_z*LhV}kR2PH8Q8K-k=atks6qKK@ zMNS&=A9jBqJ=Qb;NXh=AN1ZkkGpx~G0JBNH^}orhsIr;KEU7rKf~feq zdHD#T_8(?C7f8QL{F8$tdbf!B%c8sY@Uc4ePhCF-!GD!Eb|ggp9~oLJU85EOSy$Z= z#*_KiMEv7Blq75t>!cJiD46EVSaJgmDg^*9x5*5O!;t(|1!#;O4{=XzZH zK322i%U8qv&wqA!ld~w?44&clk9+=0e#2#LI9#cObs24?3-9IGHo_{v7v&4~dw$K{a9`W~E!U|0Fx%8tDJx*w-- zysUMe=Z8wL=#<~3_Jz$11$UjbWHe;eKVZ9@K+Nssgs58|*%;#J{@QK%J#q=Jgn4kF z>rSg+_jEFSk*jHl^I&jxmk7ReIe5{#oB*?0wA}<0WSUPspJMUOm1^CTj<1sx`{~CJ z$}*$NZ=2@>8W+4hu0jW<+i|RXj(D2NDuDz*4o5=ym&lXaQETtjJaL@A$9WxoJ_B(2 zj8E(#q6-!e5Mj$TXy3c`cppwOX?I425d_zqCkeq(&(KZvGYGop1)(w4vz=WojoFJt2GAxB_!|-cib4)1UT&_ zqa{`>sPyV}*Ux$QB`0*016&Aa?Wx0>%;Z zHi-;UAD6MYrSd6_L;F?H3JK#?hvh}Ke6QWA`{Jc;*pQ`wpwRp!0SpPj`EMP5x>J@l z>$hYe+SeniPynatadPfs)@R>*@vH`C$3H4$r+t6CORnYHH97k)vX;kJLf1CG7{DSU zPphNgdgNY79iMc^G#NlM(p+VqVtb0e*dOlWRKTnB!29lA`(%_;Tr`&^2v5Kjq#1{?p~sv^lH6J$Kq+dQytuGhGlqG|zOvd7xgKh6_oBe)i^+mki9I~i8eI5J3l&-fFX4m6rs=Ug^VGXt z6)V075u7vcM%7+^UyD&{p|?fqFtsDobvu=T)o*u_RL`b&>x%li{^9UV^k(-Bm$LF- z*|fjvuM0?QkJF3g0rxa(&F8t+2XU?mu3g=QN#o)5TMfsmXCeiw8|$aLtQY3)=-LvG zNI8R2kHP1cO1lPx2T>MRB>0?qh*$6pG8|y_YG)U<`tI4vA9RDsJ>vV6%Ko6|D1io; zd~G~>*6Gj!1vg4f#&vIaB<$M9i7CcS;az|35NNpwTEFFFp1PooHEF)9r^Kr8V~PYm z%p*Mwe~c0I9d;MC+&37$YZU-)Bl#XzC)=f^zIR67u!%c@^f`r7s3g`leZqJXu zy}WRXH^}p^NE-M!ZEu;Le17Dcq;u#$)sO{-EUCKO0h$eawI(aSP1eGG9)8|Yxa{N} zmp!~ZkU$0;+9LgWgrYC+t;+ZDwO4oC`#I^Dk(HI4+g{OIQM$Uidh2pVo)>(LYfN7k+?=`o_$s+w0??Eif!*@st(!V~7c~qEJ%i3(Gro~q2ya(GJ zCaBhm(WB!oT4RIg?ej{8+V+E;l$^l<=n?pGIaH*jDBkys%DK-Cbry`RC@HfRI5%Dwce$_sH`!Uiphl+HVi01Vs!DMhT z6y#)Ks|rZApjbn*k88CPUWMnb4j(ztAh6+zZc61U`At_~aETG$+DlVe>pI*JRT}HR z#0@8Zh}?5G$FqE2&~cQu%f9U0a(s*;4T6U$n_XT9E7U5+9qr!hjPfsHi9pn#j86_x zR40b)a5uIKKKa8t8W<=ROj2e@BF}~D=vv7l~0oNOjm-Bc_-4Ir2}ujA=Vubu_i zHysH(q#1VzDFHT;wT@Pm+hmdbqoa>Ew7NR{utP@3|1r`ZdKTejj){_cI=spo4X)GC zYCA^05kX%M9~E+1PlV8kuyUXg{x{p;weH$g97C`{f=_%-A!Wh2&@ zKhR;GDDI(WPh3rJ3*-HL2g8Om%92_af|&VD3zkVoMEI@0Ei$FE5;O>Gd}S>_l-NF~ z1_`xSx9ZZt?rh2(A<(z9^Iyh>z%VgB;wCFTM+jDv`^9*!-{a3xE1B?vne-}->#o_f zCZ5mVezUsM(6M@rdw%{m&5d8be$Cn>J?))9#d4bxsDn{gH^;S>Y`P4cvp3k9TASK# zdt)&LX>h;>?AGZFVN$oe&25oAuEgD|u|){$M)q_x=Jmc)BcZ}y2=>guD0RV)u*=?L zj=PL`8BsKSe1s>F6wY=%dq| z+c>x&+@5{OgcE`lL8=comk`z58NM6lt1c&g>?^rrsnF zuS({=dV{+G{Il7E38ako#YCL;7J292-D#P!y|@GTwH~Gnc0p6{d5kWGCx)`7yl^JKb zJ5wLg_hno-g>FB~y)*->P^6tuXROz`{X+-{&AJxe!gw*Cch(uhov(;id6&AOgFIs`n}QP(S6^+uJSXWBYnWY9mzswv%; zHX2=KWfp%VtbW)`{3weoqHWM?9)&#?#V15!z(b;t57Kj0cNR5sF;36rvgy!W`#X) zb}%q_-~m7bc$~Ul&wlND#CmpoGn?McdZ?eUVTadCABIO7JeljR^Tp zQOl|mAamWWt(ErbW0xIfMgO71W+o<&yDa`xw26Poq zhO)FHIp!wdO#MJh^hrp9ryrdkUmnTBf)=lmZu zF(yzsfS~`$pCIU)`nSxIGLf|n{!FF6B*bxecy-0JGS~0LJcP|>J-a{Gq#(NzLz0yl z52qR&0vJ5|+-P(n;LSuIm=kBK-!jV-*nK6tN%m&dyD>H_9Bjdl0*SU#$;U*Fp=0{( z_MXivId5)O&7;8u3RwX)d-lXb`K{B6h18MtVl;E|kA5uFoZLl6;dg zx5>#s3x%N_A1U7CYEYgQyJ3lorl}QISsV`Ts}fG?_0$p8kKee)ycb2^orvk)hd#Wx z#MmN^vX0o1Z}6iAC&g5^Xw;O4jsw4xo{Yw2G~J$UM2Axo@v(h;@(nT(`RtkUbMYMw zMyrK9?esu^PmE{XMTAG3=h^-~D36TN$uNAS=lgxXJxyq}EL_l4eT{^Bap(~#o{<#8 zBU+}An6hc=i-}DG=jFd~#6bFaEwVH?a_HNiFLszP%E&4-Ly~1F;@spuE#}81^Gb?! z24>5o=ucOGq7y@CT< zT4dhd8FR;KaQJI~44n`~&z*(cnTp~jF?=r5*%U*o1#))s=s0f(eA}JhkfQ0c28;`E z9=IPzdh0@rm^-_`Ira`ItdrDAbINzjz6ergkIrm{J>ZRFkAi3LEXydj{RQp~Ty3rq z)=f2`PSYl0X$}dji4{UW9rRT_mt7? ziF!h#_OJmq&czU0_nN=jU+Z5sKm>a5XY#!y>qxya8||Sz@rZqv!(oKWu*_?w_h+|Y3-YBSH@Wmtkv7a2^-$_iNewq8@vVXt|^EmoL zdgbiK$g%t(2i;0p>Y)LKLa4EBIYGUKpRITcL=P6Gou%J-u~RpVSkhqT;!p zC`bTsNhW5seU~8UAr`)459O?Qs5emZbSvtY zc3wbt2&CUB(=Y>5YhbsLro#;QpX=nc%iZ;7{3?RIxD2EWfaB!NPk7ZT%zR9;EcUBf z)3k!!!YFkAv8?@6Is#~qvdEWA-=O;&s>44K5hbKlhxN>N@M|T z*2lqCxaDEFvVayAj}8rD}2%jY{&3WgvCm9FIt$ILwBfn4o?Y$iT#ck z=B#8h&5l~u;h}`VtCD_oFJIjt2&9O3wDjt4$YHRRs2`xy8me%AK+B`FW z*GWn<$yLc>ntan;KQbX07X^uCy6g_~AB!tX5xE!X7(xR~Ybe!7yaCJX+FbK8L9A2d ze%i9PT-A!zs4gxmeuJOpe8da3!78D}!8ju}>b|bytH^HDF;&X(_vC(sBi&IKbi+uY zCgxLvXJ(bm!^@Omk?$lv2iE%g9s>2zqmHnc8#JtXl`*;7{4z{CkX^5olE!ZYGkN5J zr9rVc2I>9;2I;O$rLwEy=7`=`Tc$pYj`*4>dOM*+<`=O8qCUSG;bBk2ikU)r5UJI(#V2@D?dg~Ybf!I<9C@K zHc;=7o-}Vr)_JwHnC8_A!Mt&|nGX_t(8a;Y8 zjVL^}F+CGGvN}kzZ)=0{RSXMpQab{s)km~j=5MkCITj~@0AjZDCQ0#8lRbPps4%jQ z!ps_fMF?I7wODLCK=^xW>=C|T4Rn5Y^Vd0kz#_APdBs#?gnRIG7a7a!Ub%fagwhh7 zlw5A>eS^%-z(R7wB!#+ZFzHllo3Q=n+5^2(QU0w@w7MRu+!_u(p{Y@aHtFXgJy!4C zk>YxVt7H`$<_W&#f7w&La2u(E!^G3KoZ9WhnY?~8jtQea%03QPu=Xp)x%Z1LKT{s@ z@0@?Qk8yx9{BS|^F$8Rd^Y4FSRWWFrdZvj z@`-93>LL5al!9~o<9mOy%X+&&%)^Y5K4JOpS8IgrpyvTcHB?)6YIp^z)^L2h=P@%V z*WmpcA9OSAB!!a@5wGX&CY4DSCu$s4eZ^IQd-dzTZBMa;zO>QowaDDP4Ydi)NghpE zzD2kHsPGWfg(lFW{d)Sclnn)!$!S&1{+-cVVJ; z@Mq*odne8?nx|FYyA>6Inf?bV8vyi$t0^O4SE{$Um~0sJs%vAxRxp(z1q8_i#26|} z?ft+}AoY_lG_eRRRq&J0v5_X@`IOkqU@nxo(CWiX!LH_i@&(t*FC94+aL2hxcTOo2 zNmE%|ur`MJr#MVbH{G&M8nDu)wn0hLz{GGgaHCXW=#k+ z5S*}aN_#(8hG>ZU<{vdEefI|0-a>;d9vB1O7XE+q&3L&CqNu6=${O>g?Tvl2E}Q!T)I~N1LMAoA=k0m1F?HfuW=o88yT;y;nF$g zQV$LsfyNdxdJJCXq_E)-e$knh-+XIUOJgID(!x?Qv9Bf`qcjQi)3aOq!_PGTiRwK?J3iXx1T#eK?-MwfTsb0H`Kwnj`^Z9KL>S1_pabU!sst>L@`fX;>nHP-gP89V; z_1l}lOGVayW?t1H{e1srwW%IQR@{*{7#DG=sXl$3%dXmWH`dOsfMTCd#lPqPO*o0;Vjgz@11>JR}Nn2}pxNjVsXoGM_aMo+M{ZW?4E9SW=e5E0`vJ%0fO#%gv!_v9D zh)~w1r>n#FJE-BPN4zMn^M9~yeyVl*Z5RG~^}V&#M#YHZ2`=>A&4Jh#ns;Z|-jz$l z7TqKF)if=LerS$iZQ7EB*Lv(Wl}!8oqaA%%6C3ZMv?Ftnb+o%>N*1C>D)V};GcUY6 zmM+PI;l!NdE|VkYVv`tKHd#^Dp|B9D`g9Njp&-xlS=ls1%i298jJ)w{M}^~k&J(Y_ zx$oilUWW3tQ%!Y)KmNj}}XoUGB(+qPvLx4&On{NMd^nlg^4>iq?&1!TH$6S~)ri1?4h zDn`)sS6x6&83Wve>}pyJ5$jGy`mtL?2{&`UZ2!IG!v0_d5#31d&l| z^1JolIClz~RN61^y3&ROuzFr)($N-_cz@e=O?{EcD{3@K=h)&i_Nvb}Uh?29YniNX zA*F6FEN*^brBHs?e_>^{)n`OCboi)*_rG(N*SW<^P85##+gd(;#&ModQN4;ws^inBy)$OgzQ=!^ka2{cwwr|M0R6CnVVIVgRQ~<_g}z$bnfijtgyF~fCVFl87Dyg<&4V2++<H~RW`$Dg`io5-D=atXy0GqytAXp8~{q3!7^SQ&gM3$XZR}Biv4ke38 zE_+qIZHD?h*Rjy6#!;7>a(=615ml+7=8?*uUYcNpHq3zuzm$jswLCxehLL&w+z4 z(R8+>wRe?G-Kh~%;vMwe1=VDm(H;5Fm366e8D+^Hz)pSZ9}{16c;g~ozuY*%%|l(* zsrX7SbA~pL)Jd^&Gx1?$iQ&p2>5`=4-|SiL_3c5#wSQ9Q zvWEU{@i3ha^~FHiTW74^w%vTguDj*?nwSRnF4K#WzZ^N6J+E!`+pJTpBR2Rv7Ygqz z&>%!z2oy(!Bm;gXH}ARm+!zlNyPrU;+zqFBF|zZNd%5h-N}AB=INH6Xi+AxD6>?Y5 zr%Au2Y3jGHf1k$`g)~jtQ14+}MEGYj^Y2$*^N4Iza=$Sg*P{7$J{?^9Ts=!XWUYJnSId_19_aOJ9bc4%=*qS6)& zrdl7SZuo`7Kf}xZtE|U3C>?xk^~}*l(}$7d0-r1ItDT3xPqDvVaJHSV5hWoH&ie=n zY}$mh{=D2F4m`KA#@z=qGa>&KAYl_q;1^A9Ftr&HP1|DHYp`S<{DFz*x_pTdr)5f_ zw4=V@SNrtk^=-B?cffzeHsI|mn0bNzmp7siy?dR_mweZucyyts7dh1>A4h?`hZeQ@ z_Btt{DUcHnd+YvR!BdC0a%mR!X*}ai`#S;G{lLVmbPAq2G}U;jAC?DPQ`Zfp@mD_h zuV4y$H6Nl$-hIW3P3c&-S^k76`?TD?CLVip{=ZVH>x9q$zE~^I-@#U&HFog#I2U~4V>|FLw<{RFle;5s)2{R;fA z)Q7WK21K+xI0tcERrZop|C~FY?Y~N+|BDgLTg^6-{|5_@q*QFF+?*%uq^VoD-`A-& zW_%13TNFVf+4-?6+_D>+arw*T7>cQ{njYD81=C8PP_0)0!+FeN-%K|plk3%h2~1~# zLY)L*Z^ezO3;le{SAiSbZTotXLfWgRUmv@Mw57Ak{!$H7q~yk~rnJp_QBMj1Q|A<- ztkyh`Od0pI1sLatQ*)zzCr1aj2+YKUF<8_|W6aF#wd+{5yh4H{R$%2v9U>C5wBMdp z&j==PN-uK(qh@m8K^$9;9Ok{o-KHc#lSitgSe*uQgA1^lgaED?gz-fjn|x&6gSdr) z!qV6V0Gr(bv(Q4ZZ1PNuL;wSrF^qo|4aBdv9nBS=m^4*ov4V+oU-V8)?w5uJfvetYmV_a)Llv)kZ#00YQkV*Dl$m-`=FcDDA3(1}DnsMLgH6?MF6? zJk>JW6}o60&9ySxokmTADGV(pqrTLmXrtY8R_2dNbMJ4Q)(%1J?d^4xIk3fpQow-< zJ22uj&0Ytk{0!qCF>$^G~>Tw-Y(qQs>wV9d%L8by!SOGKpX@? ztB4rXbJ0bD#ahOPbve$UGSi#5|v?hd*xS+f!^2N};)+d1Xo zEpuxFdDx`vzczL& z+4TM9GKef*aSYkTz_e$@O<|C--;lXTL*tVdn;fTCAGm#vk7Cm|c_NBz-STjtUB?q> z_qdjc38s?YXRrM>2Ojul+QtAr7!aEJo07P{pU=WC_v$fX4{VfAi#;!3@=|y|bOH`( z6qA%JN$@^%6JR#D*>lj^P|$4SAGQb{3~6sgnQCCA`kXVHaRIai9)ufuIwIq$XzVL; zuo?O5S6dB2844z^HGfcAcAZ>J2vz}#JHO%fH?cH77=4QemW2`ksg~RTFc_xDL=3xD z8Zk@glK*26Y68Vq`lH6F?Nx7#=GNj;Ik7&Pps^zab}3B;!RDNaNdw@`+V?FlyiTZ{ zdeU*cP(4{T)}Rx%14u0{hDHaWV=VIsuyGrGJt7Ap?6?1wvaF^Vu`%q)$%~_S|GINL zSl8o2IT$Q5w-$O;7_{tNLd6)-RZ7+t+ zp^3cLi6)W(Yl|!dGbENNGZ?wy-ZTT@t_5W*#VA7ko%x^Tuuv!DxO2Jkvin=*$zc=UqmH*&jMsck>ku3_R(V&Bv@?3;Y@f9?mQ&l0`3y^L z-PPU?c^oasC_Py7KOOuaJbUYhfXj^4kTWx{#-L zfHZ%En3PV8&~mh zqPM`>B{eqJ!IgQQT>}h>qhYZ+0pYNH{mXLHEG;dj+?o+@-L(jf(ZbpoXztrJ?+q&L?RNBEEY1e@)EB_;?!%#3sF7m4uK2|!luN&rv16507L($9IZ8?k&0U@(Rv zg%D#_z@G7vcs@kP`Xp`;dU4$Pr7-ADoDfHg*Lq}x$$QvJ$MoMhg&fOkvgr3KM!;4?Bnv}6hsbJV;#bF$cFq&(}c z88QLdyExD>hPo&bQmFBhmFcwkoS_6|{Yt7bVG3-dEm}(#nSy)YioWSVxUd z&KX6e&UZ2V>4#`AbHn@m`e2~&W%3izxIc#`Fc_n0lfPni}@8{M{bK&zW zkgP_4LB+J=WHHhoHcx1{9S1h`0vtp5$>)^UR&8bd5e-_LXl)q<1vd2)3{7?ipZqTp z`7dnxLV5Z}%G{)jMREEk{?x5#?4D{cD-&K(<@D#+k^i3WIq@&2>BtKGUzRqTRCKHK z{SH-SzkkOXj7aWntn1ZX{C!pD=R+%m^dTs%`w=-*Xm4od^uj9dqg}h-{zA#G4S0hw z{E3QaR+I+l0Ifw+aRU&S8U`=C-#|!EB!=l(;ZiVi0SCy$<`ZP-%ZixL8gKDQ$I1!8 zB2QzxQ^6uf@$!M0Mzyb@G5XZZ+jJu)f|V0mMODUj=Z@mCtbRvprx9wKZ-kx*D{@fa zVVZIA9%?-WUeG)tgXt(znp6AH&QD`@+RN&y1D5~b3kV2WK7Yf8awV&biF;WX<53YB z`Uk&K(%8_6z@m^@tEkw~(%%ZVaFf~4#OZ}&edy04vLY$m7OT8rwZdT~6smOm1ACHN z12hVk60AC625g;-nidx1^2>p4A>3k#lwpHABxR-WK9Hn7+7tCQt*U$yyp7LAVSDT` zCA)pG+x#gOri}~Dax3)&6Rhlo%*-G0k<&ZT+8ul}{ycG1${p5=CYHn#meIsmhb-p;t`twplnhYY-;n}Gv>UQ)HLpi6yhcsX z^`+zOD7mGy$%>7F1kQM|JfVP;4i%T&8@HA%B&yr0696r_^n9%w?zK65n1G|~0#XdM zatDntAu!nC{PB-Z4$kboN5k=J9~7V6^4g|Fe*gtZu{`$Oz)l>$-^R^L-%UbXvw5je zl!G(s&PEIm0z%P9Pd%(ctiPdKWADY`PI*-gt|W%h4xG9?;kvV@8z_G zYy9asUo+AV-Ly7#COA5O^?)r>LFhG}a}7HfOwya*^rP~fEFXN$QsfajUftZk-HoPA zOq+CNe%xKH@k1LYhKl4CG4qE$NPihCwK34fL5JXe<=W!CZ6jytzHiZR&XKgM@b0HU znxXIKR0;%8jY$Z9n}-WJF3^(WJN_KK7$_&QQ>*1 z-!}j&UU?Fwf$HcQ6W4FZ-fG`J6Qh!yW3E1lbYBX}Z!VXY_x=V5ODS@eZ)R;0*|JMn z)OkHcem^i7<^6Nkk`-~~KO4BYFG~)mD4lk~lp_N{v3 zKfV1qU*vFQ`sgI~30I0a^b7IAk{m7i^(e{CnR^`SB zF&a%WqXlCE>t-;HDnmDGlskIk^J|!t{iu$vNcv^jwLm8zBnXM(S45GHNJ*BB7`GJK z+us{9ZeKsrOCLA20F-U8vTZ_;T-{z-zp;zdgysUHc_I z)8zB%75ZiVlf=KWe$v`vUykEJ#SuN>l6!wAn9Tj%X<=UOw54@S4vL3=3k&c0^Z252 z8v0I`9%PsLYcKfA$T*KKKS;1u><3Gr;u*z&f53#!(xVJKBNUTXHh*j4iOkcI`H4x_ zN09bU5b2)rcL85@juFqw9^_Ulxp0o$Q;C;1V7n_J{!WVRz3~2%!dn=a*9i&L&BIHh zg_BfIf2h|=t>J0#Y@1m!`=4TM)Azpeh+7~qZKS|HkV@SswJ$2K^VQTzV1(*Q$gtKa zl=`#i^2Qq>vk@s*b_f}sQSL+Fp&)CtV6KQR3YOWg6ekL{?7Y|MW3qSBT z73toi;lCARQ6=Q_BmGeIL|dAr8@$xmx=GoMs&FJc&oNsC-P#1{8_L`}tqB4B=Y7IB z1p8M;G@!PA=>VSS*_j05hs+<7ex@cHT_7wFK;cv-&hJoh>Dv27xSy6~!ow^dga+VP z@VmXp9a1E(_|fF<{v-fD;!NU z))P#nN*I!RR>iW4$*?3BS z*1LI|C9*)IPVXM{=}}KY4ZIX@N?kqV;pBOWb8EuiIUThrqs^Xg1ClXh4OHLwDULU& z{ykp(LpI&5?g%_i6!H5fp1u*q0o!j71!fTe9wN%Z_#7VY<`UagLaN#8>tsT1Ct7k~ z6MKM2(pZf~>EZ_*(9HGl6d@-$qM!CO-UoeYn_lBFj4PcVX)v1HJf`iCnbbH(n?KpK zNT0^wefK_tgct_2b|dpQpks2d{hOIMPhz6uO0w~>F$NVbFhAw9#yTnO;3gPIB8r;- z^hCX7`P|&-PeGNu(p&26HTM^IQ%nIaJ&@w~534-n1+SmIDl1Gc)2Vu-Q?~Vl;1>*x zeByHn6n_BPnIuf1EzE4zcZ<4hUB~`9-ZA-q+Is7_D5I`z^q!#`29Qwc1_6r=xXI7f72->)F4?DcQ5+RRCy6eb#Hz?#zR&la zUg*L>{O^nbr_I>fNVaxE)gC}ZKAE(K+DdI0B;XlN%$gQ0NPqQVN?U=8FO4`*K}gEV6QHwXU=8I6h|> zBoG@;OriqC@jukv&PwA9{d5rGx$|i zl`!FdJ&DCKOnnP{ePX}SjUP@-2Jq(m6{^8;i$Bl*db;8&Z=A9u1!KP#PpP8j-5*^X zvs)wm4IiH38=lq46$1mm?j;kj6vXI0sPbX_ZUnSGZd1;G=Up*J>>P3J-04e3k|saq zAA#amrNiqIE*}r$)=s70~NP{LW51^!7UQO^_rindh=_a>kCPuuFv z(?#zz(wpNWfzg?{*E&!g7dDbcp1~(|ybMNI>C48LJ>k%Qv6Pb^K=OAsuh-@|F4cT* zzi;0|&YdKfE&ihzDKkE8I#N&V#@f2zGDG9bVhdptrhoHuYc9yyxuO~qyLXR5v5g(n zdISME|K4{I!6<{Y*Rsn*p^w%&va8lFwSv5C9r+p+QZgHtJXhT*f%J^ET|w<(W{r?q zr3X0Qst6@q=%#(xXhiYNgZwUb1BS~_j7vKHMoLiln2zEuypaNDpI1VE-CoRBGeGLk zi(uCyTR~HC`a7%7K(|ekKp!BI)g-1535nZJZ$&eUVC1ZaY zNM3>igCHRk#0q!^ILIq{FAfngbk0)%V=l{11Oj)W=Wh6{A!supXF0SPPgM?iW3n^W zh~Fv%)k$HEVDpj+eJ$Lc6Y=W>$2Vrrh!=s;lX!HN?!;e-D72m=MhE!fy+6JL(-J-raF8OkzvMZ^ z*@Z827E-+y=l&s&iYz~AI)FJ3pS^rYCEs1=%hLuA7M|aFf?Z^6$Dwb3i@b-tOn`i3 zk#DhRz&SN3OshY$LZ|VWpE2}pQl8x>(PRuQZj!t8*VelyO<};qQSL)Y2yV2MlXWb}1SGaiAnu3lh`mpN4&T-JCQg(4Hkd&RaN*+%z zXWSA~bf#4?ipwC@2%DOMVMO#PeEDl%?+%E#8UDr}8#1T+pJ|+c`zb#R@I0XPs*U#K zJMozR8H#}I{j_SIy0&D=+&xVJ0;X(mHcXPGlDzZoIfQgc7Q9}!Ov!cGF!!j>P;Rhc z92CIqjR(LUM1d}BID-}pF;#vwyMsL)R;}Qf!JaeGJ2s2j3i-6szfO>%3voGb8R3E( zuk>Kks~#qfW)Bc6tzr<`Ffw$ZKnnhq9!07cz%Xs9<#u?VHLQ9~t$3a@Y{Fu13+d}mpeb?q%Zh6o0sWX@kEV?PFv{tfRd#eZ zl4Dz--cHBzrCWqHxb_pi#lTKZs%^s|VE7Qnn1dtMGGBmwum6uMYs%H&7v~TzCgoT@ z{t{jUIFgvhhMOQ1+_?ozKy`nK)91TK7L;q{5ye!^`z&N5yj)RL)mGE0^3vm`vTg&UwS&xJbrEk7w1>3mm_8bl$ zo4Tg+G9z2SDu94IHnM(euXrKR-ZDn>+vw5fiFlXqTaFrln}l~V0V!E^F=}8&-^w=A zU!Trotq3~QpG$Cw9kdDb5u@{TFBvj|t?5Yh;Ru|A}IkYt>9W%L(~! z-l9|9`>F4ND7m)PIg-lKKoPZd+xT%kUMlusx(CBLZP>vje^OD7Et9gZX*mV~frr+I zI^JOcwn-!oQt+PH=%=m4f>Pwe^4ygDG8JlwP&K<^Jn5YnihTwqATQb(+WJGK-zYGtHZM;2KtL>BW5Ht{Y4*?(x%*Q>cs)A;}+ALVosR6(y#gv`1!tDl&26oNt*)c9v3f+@x!ygmotq z=q8zBmF%INRr61%9(YHw5TCmqYjK+40Z|$mK>2D)zliyO0L3BKr({01)Cq0Ud25-NXn!rL^{``oElrME^ zTzwEtrrB!#tBCIgA1zuv1sHG(b`rxbuOnW{2REiygj4P*GhWb6yS~|xZIO7lQ|G-m z4up*vaO*&~rxYh;-M=v=`G?eC(sgcmNWSAfJoAbq`4h~VdNC*gRu2+C<07YI&V@xJ zUu87TCW`E5cBr}0a`H8&n;F<4eqMTeM5bjAFus>w7{8f-v_ovqAW?av&h_H9GdP5o z@xoB-;ol&@!4*m51^{sAWgi^JPnm$ttBfc{R+tZ{S0?)7!ee8pc&i65k9bkZO{LOg z^wKG{!GyX4zrH6;_i2srDp9GiY~+(;MO8=xYVHqQ$NVRIkO~h0#X7a%5ecuuhmGzN zaiM3t=<&Z|)L1Hzd|ZLnJ_G($AF;5Ja+e$~lj3oYOR@R64kYT<9G>OQZZARU zgJ0~l8KZ{vE8r-gzYtS%l{j(s2x@?KAb%YK;MAryN}kbYJId97Y3wjv_izp)yfB+# zbe8U(H1QU0NWfbHz&DEi_h|K|0}14qs@L? zIOlZr%+-l*C{ChywO$Ku#hY)EIQT( zrH1gbse#~`wNFGOfkGIt25d|3g+EzNK)}9yPr^rYjkhTR8xwp;(ejm#az`uC z42iKxUJ)eRu%cz0`h-7}Z=&rS`4-nEwDI`svcWJlS!wIb~7OLvu#HW)IEyT&1pNUN{Gqq(TrHg2mvC7dZ)v9qFl*+NkbFju?6`yTxO8#I^ksObF!_-gXBAU5=xev)4lJKz~iAdnIr-dlNURn2sOnGv2C1Um?O-a zzSZYby!o_*u_VXzeH}+$PVnlg2md`dBg5E$PJr8~JG+>YZdPc`9)bG75|^)*e7>#Y zU>s+h1w=+adMy7TgHmpzR@SiJ3pETiYC89i9p71Dk&^D&A{a|^05}X7LKKZow91{T zT=!^$e}O>A)(vUvz^7j3daHt05iVoB9j-EF@Gf>_;U*zzl?qcnoCTi--aT-#7lFB7 z^8x(S012=FXoMhwu}YyX+efFr9tJL8SyOxpPjDFKOyBmNG-M!K>dO=XsM7| zH0j-aeOgso)+MD81)334AS(&dL0C7B^_=TmLhBU zbxo}qH80%pVs7fG{wNu^@lRp*kU4SAq7)X1<*UmIe_^NB8ABqqF_F*EvHjiZ=ehg9 zt4ztwoJGZGDvgxFQfY-|HuCA-p92$fDDF0pf@Fa^=VS0~Y5z6=oNgYr81~k>9Pn`UvLm#h0V0M>rMNe{JNd^P4P|_K3x(7_1bf) zynFY~Y8xCuf@Rv2#D6i=S)RaALCPzx%I9z|J}b3~m0#007w&xne)MoMV63d)@y5{; z-{td}zpWVl`vMtSqU)w|EI)?iUq4a*7dm)qC}R@ zEB`Ol3Spi*P>_{uDm-ygCud0Q{)?fuE&{^3ttVF=>o$6gHo{PLe&3biF=-hl?dz!!bFo7O4?O^q%GPW^7lI;j^ks z*#~52Atcj>jLZAhFw=Kg$f?a|ZaJFF`Pchtfzq8gf(15+z%d9WwJm^il3)C{yYfwGQf>h(%!hq*>Ucs<>d=hZMp`>O-5TZFRleQ zq(J+Dc~mNpCUHS++OXBzdG+=!I*Zp~W0FHba0yE6K-7h^m6%B5?qjS&x@=@O zCQXyG)L{OH36ZjF*~r{1_ek3a=YwZo;VIsQj^k2yURgb30QWu<20Uihgr}DcESNOp z%^qcjzsoKV9{-Kf#uuF@dV0M1h|czZuIb_3*=AA9jxeQ$FOG{%UOXj(7+a^B6i zSps$eg2i%SfUC5Rq-k|(6VS0oGm@w#HYqMl3Tgsf{YED}RyeqwvMn&pakmatUw)@3taeUT-N9Q8g!(R(4Zl@mMbRQf%4wn zFF$)eS2ip|q-l(Wq(z@Bc2Vi{gA-K)tp?X!Qs4I1(Q;Kgho=Us2Mvs226-_>A4{ywyeU5%upXSn@HeHpC%OlNlq z!}~?^d>iHCv#84Ex!Gm*M0bY&3wmGZcfs^gQQ54Goz)-fqyk^bh93Z0Bi9OaAHjA; zIrW%LqdIZmK0A89n34=V5S*+#VkUyo*}3Wz@Lp_)mPtR)a~5HN^k;;CmgBDswGd2a zX7sXyex8PijP{yxct#wG{=S55Ct*;Q)`*@Ahl)-A%Ij>2APKH<;fTzky zs@D{gv5ML@UZrhaa0AQ{eS2)Oy#`+)BS)Yv#rX-ygN&-{JpHxccyM0{KVc1WU#%pK zkC{cNhKjpZE+?>SHl@4MJ!(JdV^@fzbiVP5)^i8@2WmJ zaN)|#?&Mc?4jQ^ovR1h3LYJ(ixkxn||6d@@N!*P|V291(PSi^=Z#%zI^x*ybLvgHs zZwxBiTF_&9}e)Ip{wgcz*43-Os{w62Ek`a z9Y+PAaLP}P)hPHywrV&y%^C{v&Va#gd_ywD&%2uGZLBMD}nr(6qjDYk$nz`{4_hy_TP+ zGBrlgMKx)r$@KlooyHInmd?*bCuwu%8jR|U401|Q0R=8BH^KVM2Q?twD_=hepJ-$i zfL=cN81mZZKV@(UDCt-i$y&FAzmZJ%DCaykOn>Fbb-eDZ9I$m5oPDlXM3ynD;BU27 zFI0e`Y4}HwWU%I?dfKcvoc^*kL!O=$;EEc$m5*VZ~;; z$o~-D-M8>XmlXjptR+_9A}Jfnrcmrtl1jY!sy@bv8ow-ERXlrys;t68EQoxSyw~x% zB_mXIrc$~SUuzEhU>fq|gSxHCVpHBG_fwj*?=?4Xv^s#QI8z<)916x$?bm?yH=)$Z z$B_vm7!8!A;o1n(^)6?pVA?-DNCguvWMJjgH>Au( zDLL27m%<%cc&@9ARahrUw3l0AM=Te^u-Qmur2!Z5NY|2y*L)m86%&i(@MgT91?AnUbB#yr6miRg1<$9YeR|C7^#tytHI%fKCE z1oV>yMVQEt~hstwjje6}X*wGD>jScS$d$}##lmTS@U%!*i zji=9p%9MBBjs3Dqw0Q+#tyM#;X@RXManAV;d&Os`hy^h#A zph8xT!~H_N<*rhQ+{E~OT(Bo+=go#n6;0Key;y8*M#E++whVUE)VC-r8q9yBHoJkM z?BOuB(1`OpGrl_vNJ8J(~9^R@!@F-3K9QCTBn^$TI+dRCxa7JKSIO`a`93Q{d64jnln9c1KPM zh|r<>H9bhkQ<<>ji_#w}Z6jpC*4m4cg(5D9;UvuNFXhwpkI+O1d?9$|gNqceO$Fsp znF$>U5H|0mD@H0`%wE_!kx1Lj*N*tT381fmF{B*XpZZmKT@09EffoiI3j(8}eS30C zGZHaLvE!4vaTok|=VQ-$KCFCofghdJ!d(c zq5RxGcP6vfWWom3bV9gfGuC|_{P}m<`Ca3E=Qkeh6$nUJ9~W}IZaJdgv1KnpoZ1Nl zGqgYk^+2$t&Fp?XrD=GR5j9c5K~T5sFwYJPSX(y1{!+o08TF2d4fazbFQ&@nOS*64>X`D#`3dCz9dnmUTyAidW%W zlvV{ErPabVlyIYSGtX6;6*&N(1_~M!e^kkXXND*&zXw~D<^WB&PcE;Y*lKECC_$?T z9wTpZEXX%t4#L#D?ELwsS`CM+_1Z#&>E-&RZ2hc?#ZZu8k7FvTYQ)A)fG= z6>DIYD+IW_S2iSqO8RtRakyQ-$uzm;?u{%t1>GL7qk5WFEBbi3DITIP&cSXS5?(tX z@a_?+$)yoU$zR)@0}5Uontw%6*=v&b;l@Zt08%!!*ab>`zL<= zyvbueJgsF{3}{^=p#zWX3`6(r@+bfw${%awrg%KJLbzB+@-uX9ML>bYw*fKH96xPa zwQ`V)UquwJr)qs*?9&XVH}bs=w}#-O&HJ8S1mG}(`4=3sK9DSm3Tv_oq4Amyy}W){ zz81##*k#&2@gq}W{7NtDSqacNOO@U`(m1RSeM^4JqjwEXV&aSqWP-st7uTMmwb|-3 zx=pSQ!hezs3ANMb=*%t=5nklaqaqa~E9om`dM~60eJg)+ghQgRWQMi+ujv>(CS}wK zJJ!^3!L|Xk-Li&t>6Z)DcVM|x(5sHnxp*)S@ozY5CWvcv7S}js0bq`tQ%3i~{|eQ{ zr`B$v(bPGAn%w|RmmKWu!y@xu`Ap16@$N||{a09tWxSA3eVqd7-d#^ktmVzTIA z=6AEuRuTs}ZBoN!0jGl*8~$g&%P7y|QF_6S4XGOL>fEe7pzj%=u}y)jyasf^8lWCD zcK3@4#f?aa79^&DINoUwoYdAqGmrZ}8_t*H1Y6Z^RM?^Q?`{^P{~4YTWXO#R(WJJ~jEBfUENsy}T4_O%7@@eY^f7Jmtoi z>Aw{OXZy}|mwt2mJU$2pSTVpKycs|)cuo|&_|szX!R+`ar+VJ5g5)1rV37hDi1JPF zA(x2h9FO3r4+A!$sn46mccai-;jfuCs^R3iwD$UNeUdW440RWBe%%(}xtM6RpKEpr z6TxK)j7k&$zP@{u?)e9#_NJ~S@22rjMx0D4!SvvY3h7gj46VT^4>83B{ zqP+3Zk2ixjo0S}_Q~;Vl%R>faLA1zp1?mx(>GpM%Ie3gfa$2GH6JPDylAovkv{xBD zR$K)NImoQ+mNHnn@&(PsWIA3ZFudzmvQ`R&iSo9H6KjbsnP&kBChmrroAgN400y6k zaOxqjCp?Nq5Xj7KbT0Ra$H%l=DHbpKkNS_pGCODL|J)TZfBAEMRIKddiYeA6Yr?}R z<-mU$xkZtVBDCMAH-Y_Bz69L_je!l{W>9$^rttamSG3A+UyD}xU1PRv_rNoK0|fo~ zOeHF$8$n|Tc;G1G4`B=$v$?l+^|QC|=ozGe76BvdSB`RUuPjneDYEMOX=B=52e$@^<#zAG0$T5D^)v_K z04sXktDi#0eOP4*0FX`e-n8ARbf97H$8xs?IB2gK6*%z<7yxeX{s$~O9W-UL@THA)+|v)%LaJDV;m6O9ZC!spv`Q3p#dLl^%#?!5r z-?8;3M9Qk?IyX15$Bi9|9PHEUhT9bi!}S`%-3xE;1ZE=hDt|HlFBQGw7>-pGl}q$q zP(Dz~0ds!>JVE~JC=jLaob74RM|nEClw!UY+eTemJ8`GcVf9nmV=MLVmhVh&l#fNO zVO`)EEoEq(h7_NW#HjAo{B=lv^Dnkng#T)*P~mak5g7=`mT zWu<8(4%o8Okl8s=UGPGnm~T+8aT_|rv)SkRFxy#mEg7l~(qupZ@8F0;JCXAkln^TR zf%K*dan!3b=re&NBU`IS2M(vGhwpLt7E>A%9z^WK&HnDTwb#%V4scY93NR{SyDm6r20wJ9*LlxDYg&-+3acdLVWDUgY(h?d??y@1GV+ z6J|VJ%RqEen*!hheKW<{X{Xj>um9M6X{Ew5RKltIdOGU3yIkiIY0)Fqbf)>H*%bCc z<=LLu%jo|2xANb(GsNN|KQMybJEedB6e4_0$4Q+(afE7Kf%4N55m*mUU#LzZbfdgW zhGt<0EQc>u^m_}dnnW-77;lzJ1}8uY$g=($gY}dl#EQRtBb?V|!a|h6%B6#$y)@EK z>PX_sOBbENdt#}9l9+<^IWCd?&YkD(jpE_7;gVYwbAD<&T~~O4w^NkZq4 ze8VV!i*@BUC)T}Vaqc$0v9IO~1Penrb9sLQrD&)3T_;F6USftQs&k?{6v=IXR^B)Q z`C+|$m5^w$KM47ykMDecz7_$?2lZ3pC%rU0e7xpfE)W700)sEf-Qzi|JUsocnyZk1 zUK3EI)L;~c-x*JC)7LXWR-N1#9~UW`vwzt!j%DpOv~A-VIJn@Zfx#g-6E8|hrrGVw z!FglY?spicw<^?7&BsFc-d6!xpse>VpWz7uoiQAv#G;HBa3`)5pV7d`NQy-&P> zi!(pi`>v!el(}Iy^cTPB!y|4_(tN3;uEC!lYdu4W2UOPZ$|)e9yD&EIvqzrxcRB7ok#4dvfO}2x|5XLg6dKeaIfx>2{*OWuxk@$8QP%Et_Dp z;fIz37%Md; z^hO9_{3sN(M*w%G7a5%=b@NwsFAd!(l^BhSyo+kyNKNZzcRC|allpHRIoe}EDE^lkCXQIl3CXt$sO(Z8NPo=8ClOu`s+dmpIz zT75jou1OF<*)W?^Z~NU&{6T*leKU7qHQt_BSp>EKOtQs@q3-Ovx6RXIM?)hmPS)p zOzAgo?~_wkgfH0vj{k+<722KpMrj3@9ICzcXra4pyLIxL6rx=C_)X<^nOl5t3Z)yh z9-?}HXHnxWONV!}#_ZLjp^0X8x_x#jf4}_*DHST^$NrvR%yEr>-f!)6ykezl(I}-)PhOkj)(81Br)cE)U zeC?AktGSbm_4EJTIG6Dhe1gEJcJOjCb^3;lA<9I$Hz?~nC!e=$`F1WEb|NYy_0MNt z)qGHZCrM<1s|}aN5VQ5fs50OhuD)M?kZP6Xx{W|YNTM$^!3JXf zf=>h*KY=1h)SXM7HVr>@3^a41+Qk-S&2IALzC5jLzr*;SkpY3<3UHdm+;z|>W4{On zfQ0WJC^b3A;a4zf1oqSQL%ujG)Zw?@*rN^iprbCz=H|t}AFb#o{Ex%_H7Oh9Gp`d^ ozU?8rZdwDK;vo7#T;E~<*aq=`Po7ae2Eachd3CuG8FT;t2WCGf$N&HU literal 0 HcmV?d00001 diff --git a/assets/sprites/flappy.ron b/assets/sprites/flappy.ron new file mode 100644 index 0000000..d8f7053 --- /dev/null +++ b/assets/sprites/flappy.ron @@ -0,0 +1,169 @@ + +List(( + texture_width: 512, + texture_height: 512, + sprites: [ + ( // Daytime background + x: 0, + y: 0, + width: 144, + height: 256, + ), + ( // Nighttime background + x: 146, + y: 0, + width: 144, + height: 256, + ), + ( // Down Pipe + x: 56, + y: 323, + width: 26, + height: 160, + ), + ( // Up Pipe + x: 84, + y: 323, + width: 26, + height: 160, + ), + ( // Ground + x: 292, + y: 0, + width: 168, + height: 56, + ), + ( // Floppy + x: 3, + y: 490, + width: 17, + height: 13, + ), + ( // Tap Tap Dialogue + x: 292, + y: 91, + width: 56, + height: 48, + ), + ( // Play Button + x: 354, + y: 118, + width: 52, + height: 29, + ), + ( // Leaderboard button + x: 414, + y: 118, + width: 52, + height: 29, + ), + ( // Get Ready + x: 295, + y: 59, + width: 91, + height: 24, + ), + ( // Flappy Bird Text + x: 351, + y: 91, + width: 90, + height: 25, + ), + ( // Game Over + x: 395, + y: 58, + width: 100, + height: 22, + ), + ( // Number 0 + x: 314, + y: 198, + width: 20, + height: 28, + ), + ( // Number 1 + x: 135, + y: 455, + width: 20, + height: 28, + ), + ( // Number 2 + x: 292, + y: 138, + width: 20, + height: 28, + ), + ( // Number 3 + x: 314, + y: 138, + width: 20, + height: 28, + ), + ( // Number 4 + x: 336, + y: 138, + width: 20, + height: 28, + ), + ( // Number 5 + x: 358, + y: 138, + width: 20, + height: 28, + ), + ( // Number 6 + x: 292, + y: 168, + width: 20, + height: 28, + ), + ( // Number 7 + x: 314, + y: 168, + width: 20, + height: 28, + ), + ( // Number 8 + x: 336, + y: 168, + width: 20, + height: 28, + ), + ( // Number 9 + x: 358, + y: 168, + width: 20, + height: 28, + ), + ( // Menu Button (index 6) + x: 462, + y: 26, + width: 40, + height: 14, + ), + ( // OK Button (index 8) + x: 462, + y: 42, + width: 40, + height: 14, + ), + ( // Bird Animation 1 (index 67) + x: 3, + y: 491, + width: 17, + height: 12, + ), + ( // Bird Animation 2 (index 68) + x: 31, + y: 491, + width: 17, + height: 12, + ), + ( // Bird Animation 3 (index 69) + x: 59, + y: 491, + width: 17, + height: 12, + ) + ] +)) \ No newline at end of file diff --git a/assets/sprites/logo.png b/assets/sprites/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..159d8cb1c9885d4fa78aa16f5c9ebacef1a6289f GIT binary patch literal 43242 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 M?x-u~$eRWKAN1(tBLDyZ literal 0 HcmV?d00001 diff --git a/assets/sprites/logo.ron b/assets/sprites/logo.ron new file mode 100644 index 0000000..c8bd048 --- /dev/null +++ b/assets/sprites/logo.ron @@ -0,0 +1,24 @@ +( + texture_width: 690, + texture_height: 230, + sprites: [ + ( + x: 0, + y: 0, + width: 230, + height: 230, + ), + ( + x: 230, + y: 0, + width: 230, + height: 230, + ), + ( + x: 460, + y: 0, + width: 230, + height: 230, + ) + ] +) \ No newline at end of file diff --git a/build-web.sh b/build-web.sh new file mode 100755 index 0000000..166dc7f --- /dev/null +++ b/build-web.sh @@ -0,0 +1,25 @@ +#!/bin/bash +set -e + +echo "Building for WebAssembly..." + +# Install wasm-bindgen-cli if not present +if ! command -v wasm-bindgen &> /dev/null; then + echo "Installing wasm-bindgen-cli..." + cargo install wasm-bindgen-cli +fi + +# Build the project +cargo build --release --target wasm32-unknown-unknown + +# Generate JS bindings +wasm-bindgen --out-dir ./web --target web ./target/wasm32-unknown-unknown/release/flappy-bird-rust.wasm + +# Copy assets and HTML +mkdir -p web/assets +cp -r assets/* web/assets/ +cp index.html web/ + +echo "Build complete! Files are in ./web" +echo "To serve locally, run: python3 -m http.server --directory web 8080" +echo "Then open http://localhost:8080" diff --git a/src/gameover_state.rs b/src/gameover_state.rs new file mode 100644 index 0000000..eff8856 --- /dev/null +++ b/src/gameover_state.rs @@ -0,0 +1,412 @@ +use bevy::prelude::*; +use crate::splash_state::*; +use crate::components::*; + +#[derive(Component)] +pub struct GameOverScreen; + +#[derive(Component)] +pub struct ScoreCard { + pub target_y: f32, + pub animation_speed: f32, +} + +#[derive(Component)] +pub struct TinyScoreDisplay; + +#[derive(Component)] +pub struct TinyHighScoreDisplay; + +#[derive(Resource, Default)] +pub struct DebugScoreCard { + pub enabled: bool, +} + +#[derive(Component)] +pub struct ScoreCardDebugSprite; + +pub fn setup_gameover( + mut commands: Commands, + sprite_handles: Res, + window_query: Query<&Window>, + score: Res, + mut high_score: ResMut, +) { + let Ok(window) = window_query.single() else { + return; + }; + let width = window.width(); + let height = window.height(); + + // Update high score if current score is higher + if score.value > high_score.value { + high_score.value = score.value; + } + + // Game Over sprite - positioned at 3/4 height + let target_y = height * 0.75; + + commands.spawn(( + Sprite { + image: sprite_handles.texture.clone(), + texture_atlas: Some(TextureAtlas { + layout: sprite_handles.layout.clone(), + index: SPRITE_GAME_OVER, + }), + ..default() + }, + Transform { + translation: Vec3::new(width * 0.5, target_y, 0.3), + scale: Vec3::splat(3.0), + ..default() + }, + GameOverScreen, + )); + + // Score card - starts below screen and animates up + let card_target_y = height * 0.4; + commands.spawn(( + Sprite { + image: sprite_handles.texture.clone(), + texture_atlas: Some(TextureAtlas { + layout: sprite_handles.layout.clone(), + index: SPRITE_SCORE_CARD, + }), + ..default() + }, + Transform { + translation: Vec3::new(width * 0.5, -200.0, 0.2), + scale: Vec3::splat(3.0), + ..default() + }, + ScoreCard { + target_y: card_target_y, + animation_speed: 400.0, + }, + GameOverScreen, + )); + + // Determine medal based on score + let medal_index = if score.value >= 40 { + SPRITE_MEDAL_PLATINUM + } else if score.value >= 30 { + SPRITE_MEDAL_GOLD + } else if score.value >= 20 { + SPRITE_MEDAL_SILVER + } else { + // Everyone gets at least bronze + SPRITE_MEDAL_BRONZE + }; + + // Spawn medal - attached to card animation + commands.spawn(( + Sprite { + image: sprite_handles.texture.clone(), + texture_atlas: Some(TextureAtlas { + layout: sprite_handles.layout.clone(), + index: medal_index, + }), + ..default() + }, + Transform { + translation: Vec3::new(width * 0.35 - 33.0, -200.0, 0.3), + scale: Vec3::splat(3.0), + ..default() + }, + ScoreCard { + target_y: card_target_y - 10.0, + animation_speed: 400.0, + }, + GameOverScreen, + )); +} + +pub fn gameover_input( + keyboard: Res>, + mouse: Res>, + touches: Res, + mut next_state: ResMut>, +) { + if keyboard.just_pressed(KeyCode::Space) + || mouse.just_pressed(MouseButton::Left) + || touches.any_just_pressed() { + next_state.set(GameState::Ready); + } +} + +pub fn animate_score_card( + time: Res