From 7384ffc5b7b9425bf96681b234d47589c18fcc32 Mon Sep 17 00:00:00 2001 From: Avior Date: Wed, 2 Jun 2021 01:35:08 +0200 Subject: [PATCH] =?UTF-8?q?TicTacTicTac=20c'est=20un=20TicTacToe=20?= =?UTF-8?q?=F0=9F=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Avior --- public/assets/tictactoe/O.png | Bin 0 -> 594 bytes public/assets/tictactoe/X.png | Bin 0 -> 542 bytes public/assets/tictactoe/bip.wav | Bin 0 -> 21190 bytes public/assets/tictactoe/victory.wav | Bin 0 -> 107302 bytes src/GameEngine.ts | 245 ++++++++++++++++++++++++++++ src/pages/index.tsx | 3 + src/pages/tictactoe/Game.ts | 161 ++++++++++++++++++ src/pages/tictactoe/index.tsx | 15 ++ 8 files changed, 424 insertions(+) create mode 100644 public/assets/tictactoe/O.png create mode 100644 public/assets/tictactoe/X.png create mode 100644 public/assets/tictactoe/bip.wav create mode 100644 public/assets/tictactoe/victory.wav create mode 100644 src/GameEngine.ts create mode 100644 src/pages/tictactoe/Game.ts create mode 100644 src/pages/tictactoe/index.tsx diff --git a/public/assets/tictactoe/O.png b/public/assets/tictactoe/O.png new file mode 100644 index 0000000000000000000000000000000000000000..d5272310f1cb355ca3c2447949198620e3cb0631 GIT binary patch literal 594 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 literal 0 HcmV?d00001 diff --git a/public/assets/tictactoe/victory.wav b/public/assets/tictactoe/victory.wav new file mode 100644 index 0000000000000000000000000000000000000000..0baeebf617d86025f82944be5b4dd66ab4743b26 GIT binary patch literal 107302 zcmY&=1$5jx6Rs_@cQ;KrWoBk(W=NSiWrmcQZ<#4&W@ct)X2!sR*KEJ<_Wtjk^N!A@ z8)v(cMx)WpeBY>fz1p=SyUj( z<)w4qjBKiYuPjH$97?7v(wCd zM=hpvkgX&evzkf4&SnWWo-?@7yva`%ByqWTL7X6#6^{u4z9>J4+spoBGBH(2QCfFW zI1}wu_9bhY)zT_qWw5*!izZnqt?X7Q^w!gwY^}G>TOTdf&TBWahuLfF%XYjS<{;}`O*Fiy~gaUzlC zOM9gjQb=qjb`^&3^yRMx~HkO^h>%C zIZFyKs~CwL%Oy~B}w)@+MZP6L-c->Xh5IT~qC%KtjOd<9lTZX&9HQ--iM2xsjtSG&g zX2{#*Lh@eexwuMb!Q1R4W;XrQ9&C*_uNtL|D|%l&r=Fl)({^dAw8h#IZLPLjJFmUe zR4q!cr1#M0>nHVZdMcxaG1S;(JTiz`!t7x#Gp|FFidwy`&DJL?uRYR!XjgTfIJK!( zG)o=+-{Ct5eqpwlOS&fYlT&*xd%k-5dVa`0`K~xesKS3@J2Lg@ zy>=UGpn1+HY246<>m_uezt?VPr=ja-wVT=-EvO~ai|En%Xnm7@N7wXRMl|Gg(D-0P znpMpq<|gy0DOpvlSnHUjTQ%*~HtkGv8oCU9gYHcXGM$NFm$R9N z9!R6*+@9y2L{A6LMfsA{SiHxV=DITJske~P6yuU!P(P-%)lz70)f4Ilb(y+UU8n9< zuc}{EQ7fi((iUi!G+isE_tUrOpY^OpCu6Pg+Q?wGH`ki)&74+0>$oM^-Rzro4d=Tv ziyBF1gmxEW4l+gAeQaTFKUac3&DRp12r;4~u9C{hZ{-=DlHTuL$J@ty$8$$+D}4~! z@kiNnWT-R1Drq(`Ht1>eU0Q1`O8ceWR!^#j)nn=<^_l8dlWV25F4}zUoaWbZ>mBuF z`aNC5>P>*&hm8`D(*bCE8Ec|-&&q|}Z`li-8EysIpjVTE%yFg)dyQ?(z2Lg@0e+g0 zUOX%|lLFF8xrWE@+3G#y<-N^3Mdi8TGhSy8l4tf^bFwj4zo(VguB!vp0;&~$8@?O9 z8Gac49Ja$*)p}|yr1eeBp>@}`X@9g5`Z)cXo&r+ZZRkclbCvnWtOm{2tWNeLyS`Kh@`)SYB9;#Qp6W$P> zj`55Q&&K#Jg@1=Ls?F5}>H{^k)=}Guy;nzHrT@{Z!Coa8wapEtWwwX?%xAB&vpLtD zCRBUcq9+rb^ktqg)!5x^8ptTX_26If(ZU0vx%fitCi$i5a%RsNPbV+u)4bWdl|3J% zFTxovikW2RH}~r+waaQ|b$z%>SXXW-`;;xpF6E5!TH(Uw!Xv^b!i*ZN?ob)6EA%^$ zzChRYUdA({u6fQZYn`yF*{|$H&U3dTEs(jyBHfttOcXnSy@av!fKuQWrT1do7#yqPLeXG9u^; zdw+Xc%7QqIdr6z-OTDXBPaPV*qcm0mp+liLp;)xppF%|>t9_Ltl0}4|Nu1nYXw7c4M;ME=l4`+lSLJ%BWrz*k z4;~5b51tFY3;II!LrX(HLv@w?N|x~Qa4L1BnoZlURo7o*JXvwV&9OSz9i3fN5`7F~ zx&2p{f3c;x30NzdugXv4&-0W}Q8l;_ zE8;}N5??3pJo%e&mrdqOH7064RZ+4i<3c2~J2*5L9jqU06&xPi7(IP?2TFQi8Db-AwRo~OMx-aEsWGvY?XoQMWK!{bV_P=!e{i|UpE zLi>U>f>z*B;Bw%0;71@WMztkKg-(TwcHFNYVLjG z9pGalHbvA*#w0uA>+bC+w-@F!oRv+ltiD$6h3HVPpc>c}7$4{t7#x@rI37>})q-m< zsv)6Yq5jaP8L$N>)%F_E_v<~3Z00ZXs&&n-=pLbWkao;3raOC^&CQMGu5c3HfS=3X z;w7OTR_%e1PK*&xijmSl=^^xJx17xr2hHB?t>Am)8yFFp>~cg;U(j<^8o`gEHyG)) z4&g{8O{i_~USMFLSRiE}GLSpaG%!E#Hc%nBJ(wl5IaE}+rt}PZ)l=#qt)L#%uNYg* zwbmv3nwyTKWbQKE*mrClZWEWpmEwo;yZE=fS12#^7M2NDg|JXS>;V~l6N^X_rDsw} zd6mq0Vm$%RaOn12U$%&|5nUp_d0TjbVm?l@%IRjfvr;frGq@^{IdIp%-oMBn=fC22 z{fz>91DPPBT%j|ej*1XI6CSNr)goaZUl=b;$C~Esr9n-L z5A}dHMek%ZFq>GD?AC5tl9x$h7O=^=iQF5m06z%Y{GN{x$_ibC8NzPiA^g~!Vzf9z zJSSRWRcWsDPAUT_(ViimpPm?K_h_FtVp~Mzhyz~1Gg)lTJ~YQ@ZNhg$+k!U(c>^c? zL;X$tjr_g*EB){N#f37iSk4So*J4OLZW z_yk+jS=tzVg0as0Wu0|0lm1LwHYK-<%fm0=zw!lz7>wkM@CtqzE2a=LiFw4LVg<2| z*h=gxP7ybVSFzu6OWma%QW!R15B$jK9@{e>r`u9rzK9dPC~rG?mvE14Fb=54l$xPp z!JdIf{=xpz{;d9dkkcIh8-Mk{$w1ZM)8MF3F6EuFF+5PMqvh8#8rjWS);9YhwVLc? zhQmUy<^))uef%Fjt59DUAj}pv2uGmRPld10Y#G{AQS2yA6%UAC#cWbf=^!j+H`t|; zo*kZ?-tFFEzKgzkzIC1l5)n$%3U+@tg$t2jt-u9;Uw94WT+%+yYKb$|x|Kw8%rG%zJPhkXh+&oyw&BA`+95no=z>E3B7UFdAyhus)rL|bQ zHu6QexM#N~zjwd4yzinnou`R3g-`9?hLpxC#X^;W^8zUX*Zdo?|4;c7{S^c2A*0p7 zBB95jsY=zbsJ>CpXuI^?##J-I{^sN)U6~qeh@Hx5TpNBn|BX*4RE3=$E=_c&KDnu8KeQyO{t)~LYAT9jCT(F$=31&aXOdY&Za*M7gMNE z*5IT->cDgVIsbKkg1>NJdcYqT44b_^)Cl(IUU-u_RU4*{G!~n0tSyd@bY>c{Jhzrh z!;j%_^FE;(Y~plbm9RzFCF~To3hOYU*}^33y`jQjVVE#p_y>QxEc_NSLfcnCr^-po zB~$7xzmZ!ZHtFR3?x`bB6_0Rd?In73b(1nQv^W?DObb+p&CVaFk9Us)WrBNyB|_Ij zeU!BDl9s7GwQ70+BQLz`C3Y`r5Shr-Wxuh#xcgi#zAwLtzso1`f)FKS7xD`Eg?vJ8 zA%~C+EvHaGC?nK`m6{}Mho1SwhT>B3vsgh|Em86S`J>$4^UBlNb3rnN>|7c4a2CtyE{2pT(&c3kL>D$yA;VR0MkR99_ z91)DcYaKkKqM>CWkFo&%(YbJMHKX=g+Xfri+w5npw|BS&5ho_$WOLbWu-gGHC(iud z{5XCVKOb!lypqwdp8KESN7w(1Yn>ER{Hmr&nOrcelH867GV8Vn68tZY*XhR=sPsS!a$zsjbKdOhqPn9yt?a-`HAGE2VqaiEQ zO1Yqv4_^$oR26lj)>hACBpJ`lS5{_+p@)$+496~jgxYeOxwo9m7vyU~4sFq*`MP{L zJ~w)|xbN^N&vE;>jod13IqdruWG3#zuBL}Xr}0;KkI+`w3$5x2>sd^?DfSosa52nf ztAH^_>!!{LCn!^t%1Q<$wUSq9rp#B~Diy-p;rVY>OCkq1M9*wIH{#4u))4!Y6GM+B zWf6H)V%MPp_-jkK?c5>mINBj(AmX@1+*ED^*PH9ewd9(jwdA^RgSlDUHu#$w zyoH|pRz#R(gjvEnp`5rvEGB+L)=ekJt@g$%?WRi9Vc`_vXUa+CgmONT~l_EhVy`;3#u5VM?>&d%rjL($|h8O;1)nz9?&PweJOQv%(xXD~B*N^MK zHQ>r|dAKy3z?rO{{eu=@Z8jN~m#fPS$t5r{pha5$1G-SrUkp2 zeZ)F!R<11iX~so!O}IK-d9DB##j#ux`wAz`VRkbzH~+A+&=x?Z``H_a5+b?En8P0K zH&=v@<*&jv^c7MHN!)&R4#{GtF>mQ_k)JuHc2x_hsnir|F15ZoQN66D)CNI9HTAQ4 zCF7dW#tgxyZDkjCrn!^on&cs}j;oM$%)r(|G&>8u?Ld}hKf8zB#;!$lGL;?4_Ga6& zP1!nZHMR;{75_%FJ&+Gv0qgORjo_+5o=2efWsxJe#gF29apl+|q_o}5EM;`kFKaC{ zNqencS8u9sRf23yEb_S-k=^~Fw?};4&irPMv$EN*?d#4<>K5ILydmY8namYNVKTDi z(QjuqhV9GtVY{>K*v9C;7@Lhv&Js4n{9xWAOYxj}h4Cja6q}YU$+luAAP@H%(yEWB z>N@A)&v0khIA#T1z+P!CFdpgk^q<-eZHhJ=5$po(i1rjyb|SWCDnUYakZhigBgFnlI!Uas!dQeL$bFD_S+pB}Pi)1oC{*dUdpB z`XGHJGJdkr)QH1~nwSU8bk=Okg_oVoIq8JmGV~R?02xQlkpRiWRAJgO{h2Y$6lMn6 zRP;LnzjtL?F%6iiOlhVtlaI-TmX9gQRKT-N%t&bBA?7KxF%R34oq=^sU=OfA7>Sud z|FTzE7mzDHYV<^oHkm;i3`SSjXlYD0&KWMUGfT}MW_4>5a(tugL_5~W?e3(a>C1E! zX-^hoOdp9&QZU(>f=qFy1YU)h+{m1#UHt7s+|F%j6b$M!ph_L|}Zi znck4#VdgFJ&1E3j`phH}N!#`}tBAGRY-GyjTjMhFdS{Kh$X$8=^?rk5mT|3%2=wxy4x|gZ!bZpCl5= z{2=|v2ReZ|o)gEr|hJH z>M|wMRq1~8JbEX69yz3U^bb0b#=(e}pZ-ICr#}J(c!UvOrccvH>HYL>dI!B7uU&Y5 z4FBgA@Qd%XMtd;k(wIvx%;Fv0mtH}=aw<7b?KyT!yNI2}7Hnd(w$ILJ7q#ozy^x9B z4J5|43pnka1IapaE=D(?yU;`EiS%rGA-$Adfwr7pLNB1_(9`Jg z^hkOTB-xd2N4KDx;IsAUI&@w9Y(zJw+tS_W{&Xxo9iQI}Ex3jeUZ6+N+31B-S@*Ql z*D31o&JX*Eecir%A*##5WA^VDFG>#7CI|lndl636rGw*j^`51(KPK)CZ$vA-=^WcLou{SC!^EQndv;3 zTSbhv6riwcR2OQvo5lU%TyVBP3R9fX&PcQ|&SYnfvmDQkI9Ht)PCTTO-YxDnbbGrq z+#T+7w*=LO8bVE{mQow3-H_Qy>Kt_ut9cde3jV!_(VoH6W7HvPKR&U8+DdJrHc)ZY zI%+Mo25l|gZ@{yy)J|$IK6Msi=Zf1*#6!lxj_Nq`FbPs6JFbsy{X0Z|jfueW~7f z+Jov!b;c*!;d3pi=2R1^5!HaIOVy@oQq`%dR28ZcRT1A*o+?L`rHWIzsVK_tzIN}s z*WC+PixciK_o#aW?I_+IcTc*f-Lv@1CHJa(!@Z5qJ#wG9FWt8o(^vPW8}9~O&1ESM zm5fS3rJ~YMX{mHndbA8^8UNS*eV^g))Aac3|84($DkGJd%1ULYa#DGyd{kb%%Rog? z3GOHNmHWhf;NHRfZ(wxS@$)9$-*NA`5Am1h81;Mi3&xP>s;&sMGc~?BBb9~9M&*E< zbL0E|ZF$lDdzS~#{(G7iJ>`c)i$DUUAc@LU4alf5B-VlI4oME9#!}O$dDIH5{~Brv zn?PMxt-j`ZcVqMTh=X&Ru=E7V`nwPiuQDexZ~Zq?rL`zB=*?V-F%RA1F99Y zFb1nMlp0Bm#`lhcwvWfpanu<6J_=8Vqrahl+c0Vb6^qYIqGq7?rO>AB(4Di?P3(;? zRFEQc3OWZ}lFmn4)E)f)HEvZ`bU!$koqf&*XN9xGS?nxx)fYaW7vFn}x`Ai^YWfxYyoTQIQje*Z z)FJ;^i`a`*tk4{Ht$NUP@Md{*b#poh* zLHwQ@Pye$8>0ui(!ZPH-^HOv*x-s1meNTq{+Dl)Bh1Kaau;k52S@IfI=^`b$F^*#& zu_xGV?8EVQ;r@*#SGFQ{NejQ{=Z((4F9x!R~!Qap<)+-3eB5 z5!A4YXpczCej)SsSg3);F9amF*$+4*N5(;y%t% z$LCITM^PWB+;j(e7S4z3m}3%c11E_f$w>+lNqj^gG%;|Z{QTc}a+kh|&)uN!;B0w= zGe@VrBnPQT+LBnDZRg21_ygsbUd&Qv0P~5|Bh~4R&L*3(=UL@|D?c^Qz$ZG0pZCq* zK(NXHabImcwvyY?KtaFRWuaxJGsoRTMPf`Va02|n`IH0aQ!Ua2Cum!o^KD2=%)CBM z)QWgsloY_Jn}_5hg-A(K1?O02GMvmKyWpS1Blla8iD8y8R~d~d$lCC%){`!DLnp62 z!1@71y{4JQG=NoyEiE_76ZRopnF47-7h{y24QZohMBi2F>4VijOO}sA#&oPRT85`cl*T25gL&OYE z;Ya-@4nAL;iH7gFg?Y^IY(>Nhhk+QD;>K{5xIXLzCV~EG_pk;4<*s6U(YNc9^&$FD zur@a6w{*&=43GP%QP7-YCYWszDb=y>+x>t-ex(-DEIhZZFvQL3G2;`W5|y#H&a+Efb`$A=Qv;8E;NB= zJ|$V0_V7>-GWVD-@aheC&=wO$?C}Y!aUF=)E_nQlnc2)VjCDFQk6FX)L)7q{@xq^t zVb`%Q*tA?bAPDhX1^yqtB42za9ucKS7~vzA^90;`P&)?N~E+i}eU#=;Z5 zHdqpMuzG{7^oW$6I2!epo&t=&Ewh#R%%nn`)SB%FU6{a5WXG^W5TCVVYa&w0#LBFO zsO2@HkUMCP;9Dm_Z}PHD*l~#RezJMF{)pZPatAwrhi&19a_QKA=wa42V}uUGQCp%m zQuC-8)qHA$ztLn`ZIt#!>!82a`x}h8&1_?3wk2nfyM`V@Jec=aWVwbSe!a0b#sS)|B>=!&ejhJ^C;-E1Y`CxV!q_~jX zi9B?G&4JZg#l7S5A@6jb&yOtTA0b-&CCud+t}@AFCF#>Jo*Ush;h=I=Ii_4uek!@b z!@`fkRn@a3NM$#x8S~HQW9LRAMb@i4|*!cuQxCbDf}@OSuim&TQmXacSoigOnpdqCzNJi3x+{H^MapBP5VA5E)ZJ=5P0{x1!?1&jT4n8dPFMOL z(v11Wv}aF1Lo0H9Ak*#0gWf@3UxBC*Wb=yfO_0mjflO>3VWevd8@d*H8se1Z(1BveY<55<@v62!?`=ezt+Ddm-IOFfxC^~t z0g59#c7S`u>99#zk-aO)S3m}@G2aoG;(Y!P{{i{@4#=FdVsG)e*i?Efb(VwjH2H^E zOlZ%pvc~IM)E?nkN*MY0Sm4cTLvKQ*z-Gt|4nrH2M+S4c-pVLt=Cvx=o1Dq?R?-_* zYA|w`X`ww+vBGz_pB%$y;>#j?IR?4iC&<}171jb-i3T=T0_aXT`KH{>^GB{I4H075 zo>p@8dJN>7xhq0~jl%pNya zYe&NUm3bitdHzMg^})wLM3;urDMx_OWLAHvSGE1XM9!L;wbpq;r-03$$NIP-V1zkb zA!I}c@RRvP$XM^?&tUKV;6N>uy$+t zll(pYHTZGA!6h=$Uj}6F+ajZR>2IF=jF?Z_DCL%q%1wX@cko0@nT2#rccYg&RjCx} z5quX|4K#XxKnrva{tnIy)lyP~{ozmQSIyRonhUL-jzoq+gEAwln+f^nV?cgHA&XE@ z016PSENXmU!w75)iS^n}C_05+DBLs@8LS$(?q3Q_ z`LVwg@Y1fq93eZDpoGGaS`B@_!P6098 zgWj(JZH)r!W4Gu7pMjPa$%Q>HJoC`!H17||;U7A#`aSe3u*QEQsbx~pqy|ark}~

7PKE(*I;fMGt;QlB=ezBg|2CX63wV6dCeid#D$AOUS z!p|pQE>sa00{QMG{glSZ8L>Mjdu#dzdG|{5_y%@MwNa>DAeFyC(wD@$iE3h7%yg@N zYG6`uRp_3QQJt-2G8A)z<7E!APq_VjOW`rrY7j8uUE&^K>a)Z?Vhu5a7=lGVB*X!M zUkCZV6Ec7+aZjuPWVEx)fFUu+TiO@x?IU^lQr3a+iQs+zlB8#e;}VA@?oG^^bR}t# ze_CL9@Omg!c%mAiKQ;tANEcz3a4Y^YKRb(i#rMGKC@GBHa8jHnwg=NdflSu}qaBWY zGYgpZAE6=;y(lnhD#)K<`Pz81gCCYj8pG8$lZW#L>-*Cs^-j!~m?LpuVlZ)6(m(zs zfwMtg85q{pgZeS^j5B~K#P#Hx01cleeiE}wwWVmOp;SWhNpHl>VlOeb_yemsL1+h_ zQ&m{_k(e`!nSK+8L5t4HqdXP7_^|hu_>>)Oj8WDHZYOO^WD>6>yiKT(_&6~xX_^0U zKnb={-iH6tMj0Qi@?-^@3Vx6!tP;IadvG{5O6#RLQV*%9 z2Uipb{w3Ijy6dsA`jl6E4{Oi{=&=Tl z%WHT-X@u5T(=1rg(!d?($qis{zj)93_IN8wDY%k`84?49l01pS66z+5Oo&g|oH!4f z`z25>^iY|ocGj1fY263RD(*RdQ5Ycp1ebXLP}MQuq!g8ckZgNV5Dx*PPAxozC7y+| zZ3#R;M(BzWb`mvllhh8o<%j2tcZF}H_qEuJ9ixv3E%o0>Jf2W2Azea;gr5mV6OSc* z_g4*G2*rdeYS9K|A0{F(5J-5In3PmL zurJt9Nux&Txpqve<)^(WV5iCuK}5l5ju%V|>#DPoj`i-oHLj zG!(DAQ_~r?#WDRjjZY1|A0xe$(#i$p?6M8^;Sedgv=ywIqwqy8zytfiErH)zk}C#J zcs_8pZeYMI5~_l&bXi&?_w-cuX7JtgtPze=JJqzo0ZC62%=m-xFXKBU6i=*!y^=b3 zHMBK+MQdbEqNcI~`OCs-ae(w)Dj~N*DKQrsD}fYl2#@>ijRwb8$T|gcjC$d&o$%mJ>EFhXn~eUPfk!{kYFKe?sB0$Ua+SzkV*@KRVW_LC~g$-&0D8ox3=DSmsxzC=A~ zLZEyIoJ@^3Q&BtFy?msY4C`149_o5|8T!mAUqhY3L$R8;Ly(0&{B1~dCtHGj&TK$z ze1K8Gqx;Fu01NyNzfTwiHgRhChkVwv*eiMp@U&Ga%mr2^R!Z26c_vHvn7}0U_4|T9 zLqr{@|6}E0o^UgS6XIeiuRL8o1aE4o+)_4S8F*FJK2=WoyC-H&SQmdNzEVQ|#6C%X{QH7? z6u-L7VBJ0JUA~G~M{=YQ@-cYEN96HxKKTrG$ySjOTMJwHL}1CY*pJ9aJV0KjJ#t5v zz~{ch3}thpW?~E97hZ}j-jJ5aojiHHLuHm*Z46UJ`pYDGFwaNvV-lt&zDt@E=oXq0 zcC~C)fIR2c3vb0UQZsoMytkY3I=QL*U5b&Oz%!XF+~hrceQqxMh{?gsBoa9boFfSs zbC9e8TS35z&cV5mT6`sLkb1~@J-uSDM&iRKXR!w*sPZD+{>`xT@n*(D* zi^2izquGJ9=Q0Ql!BW_U*vczg@Nb4guG7RMp$T#WL9Qydkp0TkVa_3YmX4%Fp6n1Q zg>1-hM9MF?g?xSZ5*NksQdv15@A35T#>u(4oyJ&Ys=p=r3_!MYVxFXR{x-0*i_~Jq zH#-;GnSUfa5M!}3Wm%Bl!o$fcZ5LCCLxfAbmv6=`XWs%#oJA~TPzM01`b7^QJhO*s zi&*|Vc=83nr9cQ>a3Chql=) zN4jx^gl=Fx90og!gH*Rj)ugLp32~wD9_)!;+-CLzla+}fCy_@!MjfP5&>QG#?skH9eeChfyX{YGpg?h#CIk;ik#*grr_+mc1}d1|y<-W}y0qGIX7#>)9RQv z=_**u7GUeGm7an{yjSV~o8C>lf)k`2znr_nx=azKBbiE%p;EawoV!kTcPgrDijptr zvpo9&{IZ<vP!NB)HvXP>lKij}%Zb){lb28ojr!KA+;?gNW%syF~%b#<|j7$vgU zvG0UCh$Z$TidX|bcd4)fzV1%w?E}PVk%(^k!dF=jzaove7g6MLJ{7-$%L+D0b@nx? zKhiT7fHbEeSLk8DHLe0D8toQv73UUKZMHMeY3)>V3ON}Z*)i-t_6PeJa<{jTExiL= z^`jlOQvypF23)hWJCQ06w4o6&_lB^DjoDtvN$z4C@|14i{;_k~i>++db#szg+e~LF z#w&1CP8j=9EwkI$XB;uk;P;2dJL8XG7?K%lKt0+Rl3MPHnC+InRfRz|y;-3NW#uvw>pvlaVh zFjWFbcm;BhK&X^j>!bR%tuFJ1-EFPpE^sXq`eu%PH%E zbpxo$2VfMo<+C$mB-QN}c8on1RVCZ)3-%jSOJ#E!Ia5)ClN&hLH>wx?47+s)cn71A z0dJ1#mr`IP-9XhqdG0i8fNj#7jDw5^J1^{kb{6|H_z26fE`w1y*AqC>090a5wH5(M zI&59FURv=M4Q@a|^xMuJYX1XN>AL;XPVQ7eo#a_312_{OsBXZBDw54a0;}c~Qwv$- z9ALEV=VCC+b?hr96;qAWr^~yIoQrlxJB9t)I%F-iCRxLQTn)5_fg3UtW7uw;1V`i( z>aLR6xq)D{f~05LTkMO_UE<_*S~#@pbc1xW08jYD)Pa8%1?Jcq zaCdlaI(vz+fEMMaGq_cqQy6(l`yJ%D)|!J}$Dt}`8Zef%)*kDe^~m}G-cA~I+cH9d;8iDc+#Z4c0>7ax>8LV(91I|JP$$Ac*ztp7tbEo}RFu+Ce*&Q`+g^ z%>0)>PX~dElM>9Eb4*&~z8@k#S(Q`ZE#+o=F>%=ctEp2?q!VX1 zup{h`(4F1rX(d{mwZl4UUBfCSSRAyc3=qo!km*)%Dn0;D&FoZldVouD%1LrcfGIEm z?1?HkzhBVVz*#v)7^WHaWC&;K2G#_B_!QfpjR!}mA6Y=>qSiUAv(|2EN7;#x;(7FR z5IS=TTJr=LqyZE%FSMous#cf&mFXYby@^AB)6FA%I{ z%o`>*@P(0VA@&pSs}sZobELjI-eH`5(8cO@Hrr#{sKr$+3-U~9=YT{T+CA*?_6pR$ z-iMWyp{I4g-kIg>a_&1C_GBk_zuO%sd5|gy*2{AGHp;3?kpYqa1Z$H9`=YVa4>Q~bnSRIaD1sgr zx*>NUmWHt$c6Ev9exeJ}j4so7i z2W-a9TVT((7ul<@=MSSA`G zO)4W@87n#oY@%!MJ|n@=>Wp5Ffa#Wu@iLFda#Efg1TUZ%mE7I#biuhOItkE_hd2%I z;O9&G3m68(N#*3hsn{G0q$$p7aC`1KKONT12988mcNUl|g~5V|zd8gq&kb;%zPU2EMFqhGssbKXW2yx>R$b70 ze=v7qsR@wy9B9`H%zrB+uoJwYd3fFqOe>zc3trVO^t=+^xzL^ew=HxRyUXxo4W4fS z>ufK2I*z_Bp|^YBH@yPG>WAxhdGM;zq34|7F%|e9W2r0{T$M2Y>R@%%q3XeVY=pTr z28XEz{!$Elr;Jo`N(VdZJ9t#@!Pa_>?|b>b_6qM`yKnIH9sc$KpZE-3&^LVcr~3C!KSK? z88!i>9cn?rA!;b%+i!OmcT^~Ybv!H-cNwW^ke$2H)=_xMy{-S5mvYYr)3|qJ{t8PRZov z!>+7>QFMjBGZ~t-1@`U%q@EwMY64bU477AC7>)C(m0%_A!O4AvdicMdlEW63gB|Dz z+prvb&|Y)}TE&>wyOmr9e6F+3PH@VWfI+zsKUc#p>~l^dQhDwCaa<=Qc4;Ly+U@5~ z!|uH3+HOU#CkJ3w^RNeYU``jnDSJtMqZDvEQ-h&d9_Pn@eI2Cl(Z9hRBIFL(q!n$U)w1KPd+#7Y(c!M22NR5uzcn?8*!3624_=3zqPRjbFumvup39<)ZB_y zx&cf3{cm5XFt1YJg0=@cYZiRYGq89n?0h+bxSWgvODrDzwVPBc_cEAP`N0xc(Mj(>Sg*XmEWC+Q{)bOk70IuyD>Ps4d5Mgvq!*7 z-)3LIiN<60&EfrQbsoYqDB%u(CbguNz@~qMRZUA5qN~#_=|1#0tk^cp?FpR#N#+CR zY9RP#XUKPw3Y?u$;P$Z02Eq}WGBA^K@CgdT|M~_0>lu8@FJLQq;iJ^S^M#oC7dwSh z9e083Ks1!u?SXT86m;bWtaxFZTixj~e|tNPnBgZlJDG51{>!x5KyDy6mX&D=hRR7W zciw^CVZ3Ou$B@a2ypX2=ZhXelD;G&ogvfH~I9tw&wL8rH!1 zw46RpKSj1rCOP2+w1zLR5ZtiGxE&!o)0mk6cG6EK2lzCb*&nE#uEg$SE|Vg3E2o*g z8$EnA_kwQ~YYsEVn)7l0!yPkh=C;}+VtQz$uv=rUzwC0@Nl8v0cQ{U{GGGsG22U>u zeorCHt_PU$YrqzK0rpW=rY>p?wxR|jl5L23l?PxLbVohNX5^M!QjX5x&~`)X9%Afr zW=fMXE!;wr!7Puvc@~-1aDPEH%=R7_O?{!$QBEwplacN^DkU^@GyNP9SU%DKIf$8L z3nG+vV4G!yzVt_geVs9x;_M)>VnS>s)MdRvZIj5gV9PUA=@0fnE5YoEn{ck;9-P@= zm@UG633m()JhK>chnZ+ru;yCttum0WYIk?ugC}@}s)T!Zo z4KT{)F(<$kNry_5xnSfZ=h~y5$>Lh@`S||ac6Jz3lip%?wHBB*Zm(!=LOS$`)V>hQTwtN zOc4gPEPdE5>}N2vhJw?O3UzL`_%-}}PG|Qpwdp=~a;vzx+{kBq&=2eD^tJkK{U&PG z^BTR3y@rXZk)5V!^~bG8HDN6(!MA6@4_z7>vmN?kBD$@{bc2R&gSQ@FGGPrT zfq$doK7uLSLuCKP1KFx9c!eU!HGf8*h3(7cGw=$}qC%yro?p+Wmj`EVwtfjW`ZUK) zLo`pSCPOQWV|8FW+t=V<}= znkx*B&lkQ9aJ13Fe0~*}Xtij?8flI-?xHq^)*omm(e7x8S~k5i*o3+sjSNvn=(CMV zG}W4Hr^nqzgQzz2dsH?pgN{aGhW)`JJ&76}0?t`;aJ%+{^OcqBid9s(hCs7qU|gTT zW7^4Y;B2NFHOZ3AR7O8t)%I%BQLQvZ+kkshe0pnrkM6;(Kp%{j<^!`i;=;k$pP!w5 z)J*J+Smd`-VZYC2&Y4){xxQ8n2D_+< zcE)bKl>P@d5}n5FKR>nfdRwp%buf5N899-Ml8`T95UXW}){Lb(BmQVj4kO-a0iNSe zrW89JHKoP5#b6V~@Na;ty%YMOioBdql3&TLqhDE-&5FiCJ&XSO@6AGY!GtQJj|BTN zk1-EgGRXXC_OX(zDX0pGcMek1kX0HD-N*s^c$m?ds$k{41SfAMI6Tey%X}qp6Y7a? zfaY!!*77==ir7{KGZ&&(V_M&YuA?@(XE)I9yo3@@a0I3aNu|42T8ABdX~ z{=K{EmJ}=3l+#FG1)jf8Zdn_R=K4_F3N=Y>qE=Izs-x6Hs;#!x&fu<$&8VK+f~wgw z*cVAw99XhG3Vk+2A zjK2C9?WH946_4POU2qO*d6B=w4 zLyog0B-D`n!02D%PNU7x(H`7QprTuV#l{JF!S?9@bn1jW!c)PMAjOIEd7H#o$&Jn0 z0X0J1g*%I4!m;5k;cwycY8$4fKl26 zCrN2=3`>EN(HgfDtp~ms;d$cO;Ata!B~IAF{I*&ccTsPfLERG`7;Y2p7M_V4nT|ULEL21Nncfq*_@!oP_-0$}<<1rABfXB4M*grea%!cx!|350-v~EHOvha)AEh|C zyC<9HxKu~9x!!awvylE$Rl~hd&6}tMl_>Oa04&WFxWDJP)&_O6$BmI@4J)@@+F3>! z^bOJ-d$Q-y!Qg_@$cwgh*U=M5PVlsIvrBP}Uw3d`OJkL@ zU?1ld&xq}C-_3EXK@~6MT`QNAD4{5m+uEUL*D~X#BtCpkIj=lI#ebdfCfpn|O%=4I zT0Z@%9)nxjF2e3LvTNf+dQNX4HGz{hK+dr=I1Smsp3RP0_3GjWaW*h_UA_SPyFD=4 zIBAsdfjMhgdIznJIzOB){2V>pQv6C$+y?a(HQ^7{mZ;<(u6vDLMq^Vq4_XuK@y;E} zrmv6~R47aYr*%5yw3N>Y9$9;l0|Rh4m<0catbYKLWBcCs;jZec_DpQsoD8G8HfEaDh5p~&=X`$e_qyJzuZc6IU3;&+*1ev`>AHlf!g*Uu%S^$d z-U@W{5BI(HPW5*1cJa>g-uCA6twOPApTB+}5ZI;kVpescE0>D5ED5atJaVQp;Ir$? z+u&o{T25KA!Qt7^PDy3o3k4@T&pT(jD!R@)D%f9HW{Le(i!#|i(f8CF>#Ycd+|)Z8 z1(GVhWP^7XJ=^S#*v@C|Ri; z%~0#oiJ8?XZF+$gR0oufhS2Zb8`8HE`Ud^j~JPgK?A`^_|V=w-j^jbfmSfv78XT1eXW0qi;3aTgYqmI=w}`!x^o$ zQM2d<|9^xo@}k64uhhF*g5JUujY8ylR1Y`P+dPQ)tRS>-JiOv9R^&VApP3*9Iyker z5?otc8J+V{JvlD6Q(p$^p~JAqo5$<%eDhd%77JiJV|^-GP=&Zh)0B!F9vnO_3c1&|Nb>)xx>gwS;mqBuOI9G+8F1 z=(N;Y0EM!l_PmZSj=!DLP$w%8b<$bOA=|1-N3>%~(0|wG@Xhj8L5-lOx0QE=_m{Vs zFV0uT|IptZU9`1ImEe!yTD2`PKz^gG>8o&!r;twCEtR1<)e_QVDsS^W+f;iMhtv7e zdCWD?_100(9%o4qz6ECoqWy_sjibEpJRdz#P~7{W_;>j#L#reE0a ze^K8!Z&L3I&t1=VPj>H6-i8(s@q=OVPoiItJ@_HG4}N-*e#7V^j26pL>k8{lHHGCU zYdK&kVm)lF0?#p;Rr8HwlQY&;FUl1)&zZ<^*m~HUN^1xeKGk=Pb5BZID>2V`hWC@V zx$gn0776}&fuhPwWiH*@cI_36c4^+X2F{Byi4mlY9TnbHsDb^Baw`P2SAR+zp5Uj?m>$KUhG`s1?>17{egW z2bq&nzp|pUaD_F0C|qPs<}q zEi`3npyU>gjm|noIjgu*MBQ*zcb>2}wA#&cR3*^S-xyxMh&Sl@<*|7yc>h9ytgp}Q zo9fTX+BOvZn9sqz>J-+_y+$3OGZEwkb6sYniuB0jM$IE5%yALhRmiuLj+^j9ZQ(?H zFwUZ5zxATIxYl2};NR-|%9+RTCKU3vMc2>7I{L*o0L8qOfilWlo@SCoRE?$@S zD{4iVy}g;YYxy4e2Kmzk?gr-5{Zd@b64oc>>?fdm_tQL(H@O;p6al#bdmRa7p8M=U zuGkvG*Uom7bq1VgUHx5eco*(ja)?RPJ%IxL0=}ucx4C?WRlZf(o_2l ziK|e?T!&88bavjcDB}#W>edCe!uF^Ck(M7_+gzoc*X+}+$IWfE4T>r7)mOxK$~%@$ zkP)c6d}Za?jgsP4)Jv`gIx7-%K}$6eyW_+98>6Anm_D=Z?52)F!yT1NTh3YPvrib$ z%JaxR&(Xx0+4aC#&vC|9-I7yy6xd_>EjvV{Ttn-0gR%7ewlq%9VMvjNA0A%mRT=gOf-3gE9^sln!AvJ zDNdDIu=GN;qygM`GnmJT%oxucOBk!EUE3YS?eP}3_=Y~A@BZ(;D!%95t=?7iRDANr z_!jsCdc3SCy)uP}k#azamtik5#Gb|R z1cJGm^AwRVJb*D56`6|u?mXqi+@IM*Fi~_M{bbclNyptF)-@yeRK2Es(BFiD!fP0f zD7qM*qn|sP{-bERzqVO4cC)7;hqu`Z!fLifOY^w1oAaZ+z0E6MFntT&=N_%_*?ot+ z3t4f_c_m+aRM+bIpZW&|k}K!Xrz%EP?S=MSZxq@k%txW-w7D=b-fuLI)}YkWh&VW{ zbtbX=G+PSzs78*EU^TG3iRk$>3vAB4z)@4m5`*L9P1o4>|d=H<*mYAb+^(ZFyC+W zAL8yW^c_IawzPi*{Z*3#4)!|*gK@!rtP1zobuKfmn_ddD#H8f3K0}JEX5Utqc-4kx z)Jv$^d)C&rZ;)cS9S`h1Yzdad(hL1a(5fW(%lq%pOE?#WqgTFyC?2~aQT%mf7!j&h zy{TQ&GlXUcgTxf%k`x%GCG2Mt$<-OHhvay&T(x(#DVD#b z3WhIOnclPkegj3Py}q-)U%ul01@ugf3Ye88N=)!+a5{P_QM#8^d9YBM8hR_#WD-fO z(BFAUe^Gn({y(`(%Pb0G=`m0GIh?NSIL0+3vBpa^Lj%;ml|_Lk{!aePemmMfW&NZ4 zw^1J56v(RVP)f6Fj^z&B)|Tj#jTNR7LU(qZjm$gAqE;hodrwNk%ybB)oSv-HW$FEh zVg0EGx4gmL$(F&IK~5(8qoxY_0wn^cP&aOa!q7xk0~y`rYk_jgae9TW2iuZIUZzz; zr&|go65gSj^O;C;19`;?T+dc zKtc_77`cntXgepO`}Lndd*!P#4n5a6bs`;|C5@}0wL)8%u7>0+fAXevpi}b<-K81j z#_}w7ZpqLFJB5bfY^!LSfCktxTdXxZM{pQ5)$7W`K(W9B{|5G&yZq1nnaS#KHjx15zVG3xgLD@8+L~ac@o{pw6#UKZk4Tv zwSc9Bbi_EM#steMD^NHR0`aW&dC4Xn38YZQD_(XwN^mOA;E2{i&p<`WCfpX9bBvVq zF>gS{C@s~2`OMxac-s3IuRZ8kD^GXMAGSBvb(SV_9&j%^=>;Cj3VobNz=ej?aQPTIW-W** zQ`5(#(RUMTDJ-Wk$I^vt3zkw21$qRk2WkYmunxTA`EFLy2A8AE`nOt7OVGCIIPyVO3x zHA-6LdSEM~^CbG%1?dU@N2yEJqP%)RZAi^!nqJ;05R$1Fm4vK#L)O0;dAxnZ!xF@L z2WIeF^r|-Jtq963=-7tr{F>2=MChO(PcJ4@~? z^%Z;T>(xcU&&n9w2MUq>ZpRGtPAMPUOzvp0njYq>ChTLJvC%Y>YS2ikPBOjeZRuTK z#uZ%QNh|E5OL7%+rHkbCYA~Wc%T+8}(6Os6=a*`TBlRm(E;6A9HIB~jLCQk>4Wfb_ zf@gzy)zxY$bPjS-E$L-6M(2GC$LJ1?_kv7bUi$UBn#V!>93`J*nDfAl&F5((C)0fZ zMc+P_+?G6YW~rNaU(cjvRmTU@QaOktOZ!bphj+pjR^;|%?@MX>*h3xG>q2fUMc3() zkQQB}`DF6mK+-?& z)1&@B5xu6IWa$-kAR}lTYr#`vys0gOM=7dF2T`8TnOSpjrz)B2p=Q+`4XwHK(qHFk zWDB!zLp|U-HgzKROkL;1T8VDh4!1OQmgt5T~?hZF`jo~3uN0RG_5{U zuSyLM*&5A)zo~X);hAqn%WSB5lvvsHr`}lGtJYSNsw$chX<%O`s@K&_(1Y*DKi<@v zQ918nDuANL4o@ z?u0~Z23M39CgQ3o6Dm_vdDl*H4Ud^IUh?%6y6>KFhgtj{RrI%1N6lh7xUd%7w~c6d ztQHNSu23VC&X}m@(0>x0TxYNGBfNLz?(c#C{R8Igkx`QR^#&-UoG4fIM6Kmt9hVho zxhzGeWg%6`h5Tv_dRvDf-d>}#l@g+^6>m*5F%A}MV5pt(NS_3GSqhS`3|weG=)LpI zK?TvV+5>@63w@+<&`v&6Y7}cKLs2y6dfM=5jZ#)iKCRJ^=}KLBj4)T&ARH6!qW~5y zzK4d2GZhQY)w(X=*451j<&P!#}2YlZLvFm5)Ub1)Zb1O+Tqof8z5QX3lNW;pS2axgj{}Q$?muqxH~3uVh!-J4 z{#DUB2qkhD#^wxn@{Z{_NAtq0eTTd$XBvVw*Jo&x6O5P>P>YYDPNYy~xUEhwc86g< z8be}CH7z!+HEn_a+R4{8Se>;HaEstwrkf_g@r2cuMxnd(ud>o&D6MU9HS5uO%3xXs z16eYZo#Uhqr9+deP^f&UL8xJa>6WS|L>E7UuS}4N`T;c4DEB1(SCy; z|JCSv2HW+oI+iyi{y%-L6ex84`$>UXS29SeBz%WNuv}q+%MOucf%KC2ko1A*3jc{{ z3PN$khkn9_eGh$$5Mn-rg?YYhV5It^#WgIV$rTHk)srXQmS@=r+AOS~R-NxtKk}XXpxiYL)vB$qF>w&d z7a0>bAXid_eo;rh&&=}{jxh>es}4t53u9M{?>!A(XcMDzH=iA_N^AHIvl*Qu7*9PR z&N^|t?u@KaP-iP(w9c9yqPQiZcNK%?)_N4ka)r)8K=m`a!iA1zg**zS6Akw@0g^AQ zqIH<}>M88ZJJ`#Y{O{|$Q3rS{mU9=T@D_x}|1{o;O>j~-;g$?jTA?@^e}kA=R-3wq z;*3TRt{%82omjUL9VUAquPZ~b4Tq13Hzh%btEfrDmq^FmK%8E^Oxgo58hA zLgg+@o?e74(@hy*csihywT-#`FX4)*Mre}pi`8qaK7yM2UYO)8(7I=gY`h7pBJ*@@ zn4iAzT78*cn!)1~MAc76`|Jj1yqUYQB*K)PgjM#KQZf&9fb7~2e=f7;eS~Dq6)J5^ z*YoLSJ=_;iMV|=Sog3c9#+!D@lm()Cvakw;#qG?+i%<>g1&dY`y+MEEDIVat>@Xcd z@$5bGPhMuzu_!S@iwf zPS!>T{P_pglr0>i6)TBdc+2w)-=zgS_rox1CiKhxgcLgqC6*WBc`-UwZN&Gc$wqH| zF65G;nzf?zcD%!BSv?Q&l1X1b_P z)W$*xeTL3yP5)3gzW-M}ZK#jX3RXYtf$XiezULAufxeZlsV zzWs{!ZuGzJ#eE{dp3D*BXzUp1_=|3>%Z~fhwLd$);UwarvS&CXr`?&zncSJynaP>m zna5ecS=3p~S&F)Dd1nP@C1>Txr;@WGzbnU|mUI?(#yAV}@A5ixJ99X*IkQqh&BBk_ zow=O(_)6`xIXz_c&f`_EnEtT7j@FKvbQtG!q;SX%ul)l(f0yv*+6?6|g&xi>^cz;D zV=S{h5nf&2$sokhzrCHVv6(1Y^tW}UbF6`_CfW!U(O)QROJYl)du%nD$2HIbS5dJ( zjQaNoy0R97204wUnQZgdkb(Met63qT0@=n?B-*>?*u^_~kl)?pO*N?THR4TrZ}biw;H@8SS`_jaoro;*QM=k+=H_zbMc-la8*E z5}ZX-y)zN)Wcm?y&|&qING&yeGJ{ZLm05F-nkp0NWhL_Vu!H|b7x6&x3lZ9GQ_IjJ zV=BE7IqBu{F#bx~98V~l}=-3%4`6dE)ajO2sRV&=vw zM3eu}-#Lj)ZV{-q4QLt{G2dcdnjxGp6{at(k|7xP=*3v6&!Nj@G8(OO^=0()9Dw(H zgjS-)_2)236R&kM#v04uP4Cl%lASJ;Q^c50Oxc*N_6a_roHzxIxQyoh>=n|`Q#1)J zGErJ+{(|P=0HJ{C7%b}*`b?_p8FYj0n&-sz_lS>QGGF;LtDcsAscQ6c4P~FTQ@qTFxi$pvNeWxvAJh$R5gL%tep(B6C7xkHX54P(*KYt|eXVWs^=hpy7 zv+2-9S2#O6Gk1L=_(k-Tyr6$17f)muyzzZ#-#Ree!-x)3vR=(&W;JoOgBabPajOgG zV!oq{HU<^6RH&ezBvaJ~efTt}Q|FQ!O8w2l#j3(JBaTj-?OJWl~YW%P!( za+i|QVKakXmrQg=Ol2HaMuRd=u!&XKVV;IUEKLXFX>vPt$*R7W{vdbs3N7(PRKi-o zI-S6o;g%(lMU$SI=ZPClR1E0#T(6c;-;;G2f+t>Ch{XKCBK%w*&FYEhu3tfmF}$Z9 zfGQU$u@;Eav#tl8;mwW zGLHkF~w6we1P|CL=7>pamz0EkZr?_S#1H)=eDW6?~3=;3hKn%h5R8 zhx6N8YE5~`Q%r(X{2a_kmf|m-pk1p0`+9}(RF{3#b0UDzjOwsAd!i;M z!xI%eh~8pFC8Odb8zw7BlpOr7BgEz*vj6G0ck>`)qtpgu2cA&9?Z#cwwA#G?zj5+9 zVw4Y!WM4N9+Bhrv*gK&>@{%Rn0kv07>px!r(JZOHDfZVor_M7N)q;*ucceACiW|2>cNA<00%V1|5 z4$}wrlf}>Pcld)48g_qnH2gVu75q0A_% zRwEavLD5X+eR5MVZ354`oBLvwOEBlGmLE`kY=HjSGfPhDEw>;dro${WN4=wjV~=B^ zW3_#!t-O`qVKK9wNxezFJWXIGo_Tj6gT|oWH`F)Nx6}888d5|5aunDqL&i!UbNaiJC(>nX`f?w}fzi4hz=o2O78g%Ezf{qE zI3_s{wS&><|2-fpUL4i9ZIHV8P-!}kenvm2l*0JJSsf!C@%X|OcNT)(8D`a__JTu8 z6TBF>Ol4}Q&*?i0OE4TtXc8`Yx6oUxkN=wwJ-%}|u5E!=-T;|>5dPvdm5dlVE0ctZ z5%+E-yFCd9gUn~0OCpddMs#5oUCDk^~Ro8Qe>fqj?z(Q5`rt!*r(okm~;N9ody-j@weHkD`EpW|t zGRxV?Znl8V-KP!JyBkwXmxb}fzhmi+C_pZM53_M{oHM$kg>wLPj}W==MwYQSz`Uo% z-xh7MZ&ZK(BATqn6U&U2o*joOtLuVujibALq4k7x)JUfmh4y>mOXZse9rW0<8@0mq zp5vZ(D9v?7D=|54mEV0`sTcOaQ*^eHlWzb1YF6!oc2WOf)TZ|T9;WR+=QC0|iK}65 z-m9@>{;yJ-Ok{~+)tbopytX8>)}!WgC!*tZ4l;8*DpAcHakzM%qoSMB5obGODP*p% z9aN-1obMmFg9Dznp4^_qo}`|Kr7FdFW{w;(o&4~sVka>GvHcxK%U-YENfJi%b|+5(0Uc}s|I)I4gN;U z&?o6drN0@p<#1;v#~#~I%NTKunoSwyujXs({o7OA^9~oPwYcS6aC_aQJageMIzkC` z#kX&Pzc_FI3My53h)N_XBzB>bSe99*N5r*nEIOSDr~+29v}eT3LW^)0I#}0;+rQ!> zlnQ;o=GJley}V<^=mfnTvb91%E3;!R_5x#Y6r(lx#g*fM_yALJm=s@`5jlPSX@quQ}^3#{Dq3=By#B+s4{gyC-jS) z4%MhGmT@S0Y{50_JT0C#h zbsd*%-7MdQli8#ZI##I6Kc)d}{xIhiJ zBr1m2(Fhuil2UEQ3EaE(Ib&Qmovj#0Z7rLHcfo;yE55(H+dU@F40l;~Qn%He+Fi*# z&V9#S6d%E?D6UrHj27UwX2G#@OK`3_PrIPkHI;z&`DPx=NN!2g^!JQu+%X99Wo|T>qD6v-Osjcugp(6QCIUU@o9)iYu zVd{mSkdqx-wA>duMUxBjPK~xK;SL=q=DBToj2`J1?vZFsj*d&s$UVBmPPn{n3JiCC zR@Qjfj606nDD~BMy?1uU9^KXsqeq%J>_w8k1Xzc3Fi`SqefcF{g*rF z9_kUGE-S*y?T1`wtds~AVzr;E7dLf)3o6Mh)EuSPWYm@Cpw;$>V=LT`@LdU@qV|dV z_K5fGHfQ^c@f5OT;4TeB5AqZGjN|d|Es2g`6qyVSZqMQzU_WC0CPnF!mEQgY?<-GA z&vbV_oJ2q2ADYqK-hIfO(X*WQ>^ORwiExBo80eil>jmw8p;sW@%bm-7sq61=h96* zICp;5*<9XJXyqowXL)5{2u_`CVU^zLDTRaL0rOzAa%V)ilJVSur_{J5I=!M8!5Yu* z8MEU)&S*NTNl)g?ww8|E#c}+}S#}=TdFOUB2Qj?FxR9D zr8VnV6b@_S=z=&MnSGw%OLvvIXghP#M10r&^|;~&f2lblMHq&3l6JY{HbA~ zH{nFrM;)Ra)H|3Oz?ekS`H=zFuv?r{d9;hiuS@A=PQdZ?v9|-v>r#Ie2&yy6eAu0SkUL#M4!YTH!2~~}KW{o*tzS-WDZy^Nk)*?`zKz&md19&qU8&B9IypFXK(VqW+uyLGVN`V7W(l-U^4EJ*-<1Ul64?Sh6 zZ9`$3tJrVbnpyYD_edAcRlNRtH0k&9T5!kv8zT6zCmQnm2(#iw-muI5UO0z7Qr2=d zebHks7W#pE=n=@WOHwX$)DJ<^I`QQz&V8xCQz~f5#98^cD_1y^<qP{}eZJ>^wmYVE92GLY5Z(sva_^+MiM-t^wmcy=H5 zCi0CyTYU&T)cQb8MOBW&bM;~Mcwwv(_K1DW0=oQ9ph>!*^nOgfFTdxl`^`NF-*Q)wHdUtyld6&Sgzwu`G4P)J?jpJGa`b5SNQ$GzZ=ZyZ;|1ydREvbL+f<_oe zFRPurZ9CYFS>$n-p{X=4;?dWI{ZK`@AnHnqWmz`pi809zIUQ%#h�jjr3%eW<;1@ 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 + if (!canvas) { + throw new Error('Error, canvas not found!') + } + this.canvas = canvas + if (this.options?.caseCount) { + this.caseSize = [ + // @ts-expect-error idc + this.canvas.width / ((typeof this.options.caseCount) !== 'number' ? this.options.caseCount[0] : this.options.caseCount ), + // @ts-expect-error idc2 lol + this.canvas.height / ((typeof this.options.caseCount) !== 'number' ? this.options.caseCount[1] : this.options.caseCount) + ] + } + + const ctx = canvas.getContext('2d') + if (!ctx) { + throw new Error('Error, Context could not get found!') + } + ctx.imageSmoothingEnabled = false + this.ctx = ctx + } + + public start() { + if (this.isRunning) { + console.warn('Game is already running') + return + } + this.isRunning = true + requestAnimationFrame(() => { + this.update() + }) + document.addEventListener('mousemove', (ev) => { + this.cursor.x = ev.clientX + this.cursor.y = ev.clientY + if (this.cursor.isDown) { + this.cursor.wasDown = true + } + }) + document.addEventListener('mousedown', () => { + this.cursor.isDown = true + }) + document.addEventListener('mouseup', () => { + this.cursor.isDown = false + this.cursor.wasDown = false + }) + } + + public pause() { + this.isRunning = false + } + + public setScene(scene: Scene | string) { + this.currentScene = typeof scene === 'string' ? Scene.scenes[scene] : scene + this.currentScene.setGameEngine(this) + } + + + private update() { + if (!this.isRunning) { + return + } + this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height) + if (this.options?.background) { + this.ctx.fillStyle = this.options.background + this.ctx.fillRect(0, 0, this.canvas.width, this.canvas.height) + } + this.currentScene?.update() + setTimeout(() => { + this.update() + }, 0) + } +} + + +export class SoundManager { + private audio: HTMLAudioElement + public constructor(path: string) { + this.audio = new Audio(path) + this.audio.load() + this.audio.volume = .8 + } + + public play() { + this.audio.play() + } + + public end() { + this.audio.pause() + } +} + +export class AssetsManager { + + public static assets: Record = {} + + public isLoaded = false + + private image: HTMLImageElement + + private constructor( + private path: string + ) { + this.image = new Image() + } + + public static init(path: string) { + if (!this.assets[path]) { + this.assets[path] = new AssetsManager(path) + } + return this.assets[path] + } + + public async load() { + return new Promise((res, rej) => { + this.image.src = this.path + this.image.onload = () => { + this.isLoaded = true + res() + } + }) + } + + public async get() { + if (!this.isLoaded) { + await this.load() + } + return this.image + } +} + +export class Scene { + public static scenes: Record = {} + + public background?: string + + private components: Array = [] + private ge!: GameEngine + + public constructor(sceneId: string) { + Scene.scenes[sceneId] = this + } + + public addComponent(...cp: Array) { + return this.components.push(...cp) + } + + public setGameEngine(ge: GameEngine) { + this.ge = ge + } + + public async init() { + this.components.forEach((v) => { + if (v.init) { + v.init() + } + }) + } + + public async update() { + this.components.forEach(async (v) => { + const state: Partial = {} + const width = (v.size?.width ?? 1) * this.ge.caseSize[0] + const height = (v.size?.height ?? 1) * this.ge.caseSize[1] + if (v.pos) { + const ax = v.pos.x * this.ge.caseSize[0] + const ay = v.pos.y * this.ge.caseSize[1] + state.mouseHovering = + this.ge.cursor.x >= ax && this.ge.cursor.x < (ax + width) && + this.ge.cursor.y >= ay && this.ge.cursor.y < (ay + height) + state.mouseClicking = state.mouseHovering && this.ge.cursor.isDown + state.mouseClicked = state.mouseClicking && !this.ge.cursor.wasDown + } + if (v.display && v.pos) { + const ax = v.pos.x * this.ge.caseSize[0] + const ay = v.pos.y * this.ge.caseSize[1] + if (v.display.type === 'color') { + this.ge.ctx.fillStyle = v.display.source + this.ge.ctx.fillRect( + ax, + ay, + width, + height + ) + } else if (v.display.type === 'image') { + this.ge.ctx.drawImage( + await AssetsManager.init(v.display.source).get(), + ax, + ay, + width, + height + ) + } + } + if (v.update) { + v.update(state as ComponentState) + } + }) + } +} + +export interface ComponentState { + mouseHovering: boolean + mouseClicking: boolean + mouseClicked: boolean +} + +export abstract class Component2D { + public id?: number + public display?: { + type: 'image' | 'color' + source: string + } + public pos?: {x: number, y: number, z?: number, rotation?: number} + public size?: {width: number, height: number} + + public init?(): Promise | void + + public update?(state: ComponentState): Promise | void +} diff --git a/src/pages/index.tsx b/src/pages/index.tsx index faad683..b38d696 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -9,6 +9,9 @@ export default class Index extends React.Component { Pokémon Shuffle + + TicTacToe mais ou il y a eu beaucoup trop de temps de passé sur le jeux + ) } diff --git a/src/pages/tictactoe/Game.ts b/src/pages/tictactoe/Game.ts new file mode 100644 index 0000000..21da913 --- /dev/null +++ b/src/pages/tictactoe/Game.ts @@ -0,0 +1,161 @@ +/* eslint-disable max-classes-per-file */ +import GameEngine, { Component2D, ComponentState, Scene, SoundManager } from 'GameEngine' + +const globalState: { + playerTurn: 'X' | 'O' + gameState: [ + [string, string, string], + [string, string, string], + [string, string, string], + ] +} = { + playerTurn: 'X', + gameState: [ + ['', '', ''], + ['', '', ''], + ['', '', ''] + ] +} + +class Item extends Component2D { + + public size = { + width: .9, + height: .9 + } + + private x: number + private y: number + + public constructor(index: number) { + super() + this.x = Math.trunc(index % 3) + this.y = Math.trunc(index / 3) + this.pos = { + x: this.x + this.x * .05, + y: this.y + this.y * .05 + } + console.log(this.pos, index) + } + + public init() { + console.log('item initialized') + } + + public update(state: ComponentState) { + // console.log(state) + const value: '' | 'X' | 'O' = globalState.gameState[this.x][this.y] as '' | 'X' | 'O' + if (state.mouseClicked && value === '') { + // console.log('hovering') + this.onClick() + } + + if (value === 'X') { + this.display = { + type: 'image', + source: '/assets/tictactoe/X.png' + } + } else if(value === 'O') { + this.display = { + type: 'image', + source: '/assets/tictactoe/O.png' + } + } + } + + private onClick() { + const clickSound = new SoundManager('/assets/tictactoe/bip.wav') + clickSound.play() + globalState.gameState[this.x][this.y] = globalState.playerTurn + console.log(this.checkVictory()) + if (this.checkVictory()) { + new SoundManager('/assets/tictactoe/victory.wav').play() + // globalState.gameState = [ + // ['', '', ''], + // ['', '', ''], + // ['', '', ''] + // ] + } + globalState.playerTurn = globalState.playerTurn === 'X' ? 'O' : 'X' + } + + // uh MAYBE refactor lol + private checkVictory() { + if(globalState.gameState[0][0] === globalState.playerTurn) { + if(globalState.gameState[1][0] === globalState.playerTurn) { + if(globalState.gameState[2][0] === globalState.playerTurn) { + return true + } + } + if(globalState.gameState[0][1] === globalState.playerTurn) { + if(globalState.gameState[0][2] === globalState.playerTurn) { + return true + } + } + if(globalState.gameState[1][1] === globalState.playerTurn) { + if(globalState.gameState[2][2] === globalState.playerTurn) { + return true + } + } + } + if(globalState.gameState[2][2] === globalState.playerTurn) { + if(globalState.gameState[2][1] === globalState.playerTurn) { + if(globalState.gameState[2][0] === globalState.playerTurn) { + return true + } + } + if(globalState.gameState[1][2] === globalState.playerTurn) { + if(globalState.gameState[0][2] === globalState.playerTurn) { + return true + } + } + } + if(globalState.gameState[1][1] === globalState.playerTurn) { + if(globalState.gameState[0][1] === globalState.playerTurn) { + if(globalState.gameState[2][1] === globalState.playerTurn) { + return true + } + } + if(globalState.gameState[1][0] === globalState.playerTurn) { + if(globalState.gameState[1][2] === globalState.playerTurn) { + return true + } + } + } + return false + } +} + +class Line extends Component2D { + + public constructor(direction: number, index: number) { + super() + this.display = { + type: 'color', + source: 'orange' + } + this.pos = { + x: direction ? index ? 1.95 : .9 : 0, + y: direction ? 0 : index ? .9 : 1.95 + } + this.size = { + width: direction ? .15 : 3, + height: direction ? 3 : .15 + } + } + +} + +const ge = new GameEngine('#test', { + caseCount: 3, + background: 'blue' +}) +const scene = new Scene('TicTacToe') +scene.addComponent( + ...Array.from(new Array(2)).map((_, index) => new Line(0, index)), + ...Array.from(new Array(2)).map((_, index) => new Line(1, index)), + ...Array.from(new Array(9)).map((_, index) => new Item(index)), +) + +ge.start() +ge.setScene(scene) diff --git a/src/pages/tictactoe/index.tsx b/src/pages/tictactoe/index.tsx new file mode 100644 index 0000000..4883fde --- /dev/null +++ b/src/pages/tictactoe/index.tsx @@ -0,0 +1,15 @@ +import { Text, Link } from '@dzeio/components' +import React from 'react' +export default class Snake extends React.PureComponent { + public async componentDidMount() { + await import('./Game') + + } + public render = () => ( + <> + + Bienvenue sur le TicTacToe le plus Overengineered du monde xd
Avec un moteur de jeux complètement fait maison et bien plus encore en préparation ! (vieille version en 75 lignes, nouvelle en plus de 200 lol)
+ Version faites il y a 4 ans encore disponible sur Github lol https://github.com/Aviortheking/TicTacToe + + ) +}