From 73b638f18c3d43b4017bc1f4b7861775cba2681d Mon Sep 17 00:00:00 2001 From: QwitherY <3392574079@qq.com> Date: Fri, 6 Dec 2024 22:55:29 +0800 Subject: [PATCH] Add animation of an explosion when the dinosaurs are killed --- .idea/misc.xml | 2 +- .../controller/DinosaurController.java | 1 + .../model/GameEntityFactory.java | 26 +++++++++++++++++- .../resources/assets/textures/explosion.png | Bin 0 -> 18716 bytes 4 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 src/main/resources/assets/textures/explosion.png diff --git a/.idea/misc.xml b/.idea/misc.xml index dc377ec..9dc782b 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -8,5 +8,5 @@ - + \ No newline at end of file diff --git a/src/main/java/com/dinosaur/dinosaurexploder/controller/DinosaurController.java b/src/main/java/com/dinosaur/dinosaurexploder/controller/DinosaurController.java index e9554cf..1951993 100644 --- a/src/main/java/com/dinosaur/dinosaurexploder/controller/DinosaurController.java +++ b/src/main/java/com/dinosaur/dinosaurexploder/controller/DinosaurController.java @@ -92,6 +92,7 @@ public void initGame() { */ public void initPhysics() { onCollisionBegin(EntityType.PROJECTILE, EntityType.GREENDINO, (projectile, greendino) -> { + spawn("explosion", greendino.getX() - 25, greendino.getY() - 30); FXGL.play(GameConstants.ENEMY_EXPLODE_SOUND); projectile.removeFromWorld(); greendino.removeFromWorld(); diff --git a/src/main/java/com/dinosaur/dinosaurexploder/model/GameEntityFactory.java b/src/main/java/com/dinosaur/dinosaurexploder/model/GameEntityFactory.java index 6c57eb7..9e171e8 100644 --- a/src/main/java/com/dinosaur/dinosaurexploder/model/GameEntityFactory.java +++ b/src/main/java/com/dinosaur/dinosaurexploder/model/GameEntityFactory.java @@ -2,6 +2,7 @@ import com.almasb.fxgl.dsl.EntityBuilder; import com.almasb.fxgl.dsl.FXGL; +import com.almasb.fxgl.dsl.components.ExpireCleanComponent; import com.almasb.fxgl.dsl.components.OffscreenCleanComponent; import com.almasb.fxgl.dsl.components.ProjectileComponent; import com.almasb.fxgl.dsl.views.SelfScrollingBackgroundView; @@ -11,12 +12,15 @@ import com.almasb.fxgl.entity.Spawns; import com.almasb.fxgl.physics.BoundingShape; import com.almasb.fxgl.physics.HitBox; +import com.almasb.fxgl.texture.AnimatedTexture; +import com.almasb.fxgl.texture.AnimationChannel; import javafx.geometry.Orientation; import javafx.geometry.Point2D; import javafx.scene.image.Image; import javafx.scene.paint.Color; import javafx.scene.text.Font; import javafx.scene.text.Text; +import javafx.util.Duration; import java.util.Objects; @@ -24,7 +28,7 @@ /** * Summary : - * The Factory handles the creation of Background , Player , Score , Life , Dino + * The Factory handles the creation of Background , Player , Score , Life , Dino, Explosion */ public class GameEntityFactory implements EntityFactory { /** @@ -133,6 +137,26 @@ public Entity newLife(SpawnData data) .with(new LifeComponent()) .with(new OffscreenCleanComponent()).build(); } + + /** + * Summary : + * Animation of an explosion will be handled in below Entity + */ + @Spawns("explosion") + public Entity newExplosion(SpawnData data) + { + Duration seconds = Duration.seconds(0.4); + AnimationChannel ac = new AnimationChannel( + FXGL.image("explosion.png"), + seconds, 16); + + AnimatedTexture at = new AnimatedTexture(ac); + at.play(); + return FXGL.entityBuilder(data) + .view(at) + .with(new ExpireCleanComponent(seconds)) + .build(); + } /** * Summary : diff --git a/src/main/resources/assets/textures/explosion.png b/src/main/resources/assets/textures/explosion.png new file mode 100644 index 0000000000000000000000000000000000000000..5743585b35cf3a8e3eed9e4525d0af864f4b7cb0 GIT binary patch literal 18716 zcmbrmd0dkD`ai7InR1$R(mB(rwkXzA+M;Qo(mI8NwoE#%v{ zEjm^Tl!}O`RF*`UC@SOzDkdocAtHh-KjwL!^ZlMP=lSP(J@@Mc_vd=Sy>NZ*&$Ya- z_eJiJz=KP^U-`Y2mDLi+q5a3KtQJ{@Ru>n2XL%>j=H^>=Hi?HqQ>?5O+yC{l<_~5Y ztgO~pLH6(YExklONGn~%5onTh#?{-?evI?U@jJE6ck4OZnp5tt7y1)_g#Ym)Qy|+X?Auw zEyIZ^X`g3uS8Bg~OB~<#Ki9hbX#W3cyWFkk!yqrTAYT?e4Vx*U+-R zX#4FS|0Y@iUoHE0@v9a5-^GXXvHxEVeg$^V`q$wX>wGaYRdI8SoR*g33^r)>1iE`s zmY+u(noTk2ot#R2Z^wj$n<-hVC+?DzDfunw&C8t;w{wD9t*uUyzy9kqf9-cKELFj_ zTOkngRd3o=E$Y7%QlF8+&Y$m8>z|-3H(`Vye0)NhJdBybOcF<;N)j=dp|veh?VMo$ z;xkvxXa ze(h@V{~#Hdtv8O3_w)R0pPHXN72~dni2%@G`uho-2ZKghU`u?CL!j(32Wh0q+eY?^ z?EIvMDDiXABaO_zvV{*EM}-y}q7V`F+7-ru&hRN#j|{917CCo|SEbEc1m(atNvy11 z1f~A_k9|1bBED!y$=WxYj`eeiRi5)3W`eAy@rF;eGfPxY)e#i*_48*}*9Iq)=Y9(F zh6^FzZ6?vW%VpxQK`)gYpP7T>D#_W6VyG*2N0Sf?{f2OSE(3S_O@tRsx>_5~%k&7o zNBx2j7o{gN%Y%W~>kXaBOBF5Jp4S~Lc}UcAP#~@Eco>V?4n(fYUB+|Pm}Ro@>^E}R z=FeFe4lB}#gy8-`Q4;|JP@%KR{ zdulOT zyjg+P;t6oP5Him<0=V>r=P)=*o7uD}#kkPh?v^Aa-N2`dTgqkZ6N6rNpT(~OL1$Rn zONVdWEHmxly!P?Wkye<3KH3}HLyK<{;=!@i!cU90IsI|#CWY_{L%|7p*GAhQVQsN^ zIHA5LSF}}~^|}ZCP9;DW^@bZYSwIlD;ZJm7#}c4>A^O(+Ms~FN()fZqsLjtv%Vv(@ zvPhZ6f23u_XwnAyK8B72JILq~x34}QCTP{Fj?9G@eexBCU14bqI6asTlx-LWTGy*8 zHN3G+-cfI&sB`53!a#CA^HFMJG>^SgxNC@yvLl)>=05s%TPv%%{R{tHkHFm)v6A)s zya<9JG>$3!EN`b+Sa_cgM zru7^qSAB|TGzJLSm}WX&Jj~a?D-}g|7}c3SqvJPbV`F3PEVonWqCe@56wjW(P}uTs zcTy7%fvnzVwA;7FR(n_Cw%dIU{O7Mqn{R#XPIn)EvakQ(YTU6?C5w2=vKC9n_b*Um?aApD04z^1rQPvg=Ht6^pV&eJ=I= z`Fhk-85|yz-{s2QCs$5(F(x#XDLJFkRgFo&eV`e)8y`?LthblQ?Q0N4dH+8cr}Zy(0a%h zb$syo-OomG51?%c=aw?}$EfP3$XoL8>Xckf^Sb;AeZ)Kk*#4^Ujk9 z`uxMv`)#5LFy!Jg0S&!Ha|dm8oi381vlmfK$%b+oD>dqKxRKt)A+oyWB9Hk%KTJq8 zNukagh`T+UD&o#9Tm-wL^s{z)tVr??0PW}&m@hMpx0zzsx*ZDLlV+-d+H$o&q0;8t zk$&qn&_gjK>uT9&*H;psYCTWB=FxzvLC1|nZJDi7xWBHd9%Vm~GCXx;lx?D?ipG$s zV-H$sS+YfUP`2ld4e(!}9mG73ifI+Sf1|hmn3J|#=F~no+!dPXuYF#SbWv8@qcPuX zdxEnQYWgHi1-eZwsJtzIQ?)_DUugLzG2vtn&{H0TPW5nwbYKh<- zf)&D-Vq%d*aefYqu$R`fb2jR*y}1$|Qe4%4L^kTo{hB~z(T=6l6aO;QA5zt}a_8%e+TEiAJZ{vm$JF?x`F*aX5N9A({ z75H!Z`l!}D>Fb__PA^QjU?gpRpcEvh%^fx0B`dPEbM*A^``^%xE2m=$t=fTGqETr! z%KT(jCGNtY#)N+2eXAAs43qV_Z6Y$;-@U≠+7#v8WHw*o z>z^;j9o2#@4mb-3y14PbZ0^Iw$WJf0MKwEOlQ|SFBV(lTI7c|Oq@x@$RZ6jSw|I}tmm}V$y#efv+$$mx zH$x1Nx=mgyybILVptH-+SFWpnB(2SqFW4G@H#-~)f(eL#*Ed0nuP!H33Ad1NplKvY z3IFKWA}6`v4u}1@+!@!Yjx`RFTW4v+U3}7*qktEldJ*x(CQafy44Aj}t0!8%SyQWJ3=n zp^TK=x0_X^lw48KBx*v5oJ)1uIxw58+0s-h@i}A8#3KDawjUgT&&?tpN&Pm%usqoJ zxYst(^FxM%BOqut5xr;;5FU-{k-YXlKr%1SmNtCn`(MgF zDQxw63pZ+2+7{(sao)EtW83=92n9cc9z)c_wQ8MA;{9=C)fcvt*K5?5T+tPI+ezV= zJ8Ud!qA>)JBhf4YTb6+A5Z1O;HWMEPHC1vXAg7$S;!lx6$r}7^hZ-7=sfaw5rZSBD zhECq%B+Gq)iuY2th zep7hJ4&rvbR!u+;y~ypK>ynd3QN5Dh&_N;}7=y^jm&!>cxURJ>_ zdcS4{R9tV}A+t(=N(ekP|K$B3W~Z_5!a`RFLK_;9k&)hlvd z6enN6sxtxYVjP{f_oBs3R5yoMu~DR1$1aCN6p+OE`1iPxjM4#GaYBIbXJMcf)Zt@_ zwq{u`ih6pBRB8CuXiz-?vDL~L-gDs54T4hgLBar)5Rj;T9p<i5h~f-rB6To8}uJh7RrZ>n4WCd%Mza2yq!=C#Ao#u)V#XkLZm zfxWkGeuz#VuYW(;WLgV-wJ@#OzYQA|VyxeHn}=2Ius?W_EsZF5owK0GLz*lVQv9O&cFoJ5_HA%Mj>93LkG0Fj+lGOQ zBjOrQJt)_B4BE}a%FOwTrZ4{Y93Wmo%n!xWI2xkf&XehC^YGBbRe=Kra~Bm?e_QOu zRL>1ccu%Eji_1fO3W3=(T^{n=tyC zKtW~BqzBVUy;6TlG4z%jL=`VjY%+&WVd28LW8rW*K_4RM^bfoT;Cbns*Y&QpDTivG z_1=K?jmtw%Z;DoP7N@ZMMd*2lCKUFSp^o$&C4g%hRa4vdy|Q4c$z3IPqDg6<<77up zutr#xIVqI}+TSQgd5}B?Br7~a#~JhAAH~B_Ms+kaqr4+;ax!E z(fTF{5Hs172fa}6!r~mZ>vy#nHDByUTsR(^peBy7clKfS+zZdnAkwA3S^7%~pw%s| z%5$4%hgVpQB^mgLV`HX}_Kll1Qs9Mm4+-yE?4%jh_|@mm=n)S@y#VNx-{S4z?2v~E z{fPA|fQ&2;0YOc`y9?|Zf@c}B3zWC01Sj4{Rr==*N7=U_B+1O$wf-46_sA!aJ%B$^ zqC7I~96)oBp6^Zit}RT3G5QYY^#f|4@1(Szi3E|B&>r-z+UujnXGA-!-dDImT*;@i z+^Y4<01P)x8xXenuqh^=)gx6_neJZfrVmB(LuKI7iuz%>aa<1OW{)&-IqJ_ye(qY! zV#-5cOP&!{aYF64V+^8hDoQZ{2QDT8zPgdDuE`WMT99*&!W(*JLIMt0_nAce`a@@U zaw^h@h$RI$43u+TqKxctR`Vu(Cc;77xAs*}QTknB1dri@?x;!guG0uRdO*^5Hm?jCd3DYMh^TXs$x;1i8qOGg^Rc8Mvg z47>JtDA$C4OaE9(tF57%{OwoY{ptI18yvCw24{Sw`WzbrQ+T;e4C6DY zm-iW{s2g&(xsUkw`02x-@7|}+rbd#ikVs^pU_n~$x1+(*(?#!HPl^6`X$q+mXnIzT z4NqvnB%aqJI57JhZ@qgbIK_#JAIqbLHt%?c5?*Nxzv)-6r=gnbO34GN2dcZSx3tfF zo-u-rHE-FnLn^*+)Gco6_)kNEUl=ypcD(t)L}gFv>Dklv{RAl&ZwBUF>yON;nTvE3 z20Ycgam_p-FmHiQvgA_q@(xLdS4)l8@Q$K;rL4kqS%i@z+i_p#S+8eF7t$Hm0hEK z77RQ(2@WtP*#WZhQvev2*I5rOA7O7 z`~?ks{l~CxD&|)y30w2~yHFY|wVlfTI90TOc>?6*Px7ZxcabR>G{|UumQus3S8re8 zksSFH@)%sVLyCIy$suWu6&+O?Y97LOG1aiK;z}1}a#5(#IuA)GXBObx}tezpdpmPxx?)Zr=q0dhGI9>BT0${FFh=}B`h zyMZ~1+rzmZ>AEMJ=qihJTND#JCGH^y{+N{{fp9LNv-iRW3{Nzoe(c|;hGlEDQ|Fw! z1ZL`g%ZA`(^4^ti^(?@huM57FNmR4x{@3UuZmn1Hu|$1=0D{+*lUDvpheT)idzVIO z9!!?X#y%N4Y);l^!;NWAVgi6(@#hAm@(az&L3{SQSw$2q=ZJxqzG~n;@Sk~7z5iO_ zm*8A;Te{&Kj^t|I=Ms$s-;chq0d_t{%5_cm8V(2A4xne$@V#(`Q;1;O$%Y2kpKpT7Xmif3H8Sjw0HB1qEEw$TeWxMn*21D~HT4B9iF%(CnUNs^HhRlc zliMrF=5wU2RRt4pW20XAgUX+!?&i@vW7wm?Ij5i1@4H_WoK`uYk9v?}A8<1ZXx%qXrv?{l*8Wh2o`EU}E?Q0lx{ z+1Oa350>~NHhhlM_b4!SDw{&*!~mLek}w9(TbF47U=rl)zo}l0}M?%Ixgbf}ez=Ls7BSJNl99j1e9YM&ZPZ zp;9==_WtNp7Jfg9t7`h#p4~9R5=Cu*B^S2uK#Byiu)J{4$;J(b*J*d!x<{JlqUAFx z9c&6WG8j9^ad}a-)JW{6cn$-1QAt7^qR4*y`_&Oq2|L`F4DQrc5c-#o zvjqD6JpeP5gZY&q%(LpVd5Fe2=$T%kWwq+3leAigivnZrg4w@f(#8*YDQDRK1PqO# zeL8^#%of4^}no0i=T8h7CpN2%oOTdrjGd zHKKl>*%Fsm7S!*iL-U`=zDIk&75%!i=N8`i3^%Oi6nA5uRsfE;N%usVMZkmOVXu+5 zyS=Aa09k9>GP#~ zWJraHo}vH-#zkI|Tp1`j_E zg---O99AlB1Jg-10ffg*QRbvb-)%vq-Q~6FD*`o3r5V*oouub09+c1Emy3!iyo!D> zsuB7BI^O`#(4_(FM}Cm8_h^Dwr1&FG{G}okBSOtv)MN8C@SW}k{gN`j#nEg~&Fpaq zd9uUpmf4e2DRK_Nv6-Rf-&gL01pg%Dx~7Fg@g7*eZOwy46}#;`_ejPxM+*nYP_a{J_sV})H$Z6kfOIJ4cTD){j-gGKkiOu zPW%9?{YP>d-YSG@3SD^RE;Kqu69lAUSJ;yXszUVly9~40kOdsmlP6azadp=+5QtYo z{@cn*T!%In!ujq*dgRq!Y0V48DWp-;U;%*#S896=mWKgIK1XtlBSp(nKyclVP>Y*gyfJW8b)D8IIXpnsr2Gk(a<%>1gb7YSI!dPBE zZl;myus8LauD6?^9c4fFW7E0c;xFjJ%6Y}Ezn%d%rD79puzq%ZOItp*q!7%*tWjj= zO!*l4VIq%F>+p}j0`#%>!0lg+;b{*;f$rOacH*Z04nOqTTCHaUPfSMN3$5{jl|bK| z;U}FGbz+HFrM?*Ou2k%6x|NW5P?{qs0L&{rxPA1)`au#cE0X7OAg$EOKReyz!~PUm zvx2pgrOuJh@*f1krDad@D{*ZJ4XwI!T)p~ovXvZ;Q6w{KSmf&4EU?br1n5U2i-=bYFM2%JAG(lQ}(paYV9spS;V~_k2;>< zp7KQSGPm}S3sYi0-heuyKWVpo4vtDrYKoCQOI_UtyT%)Il5LP*Jo0?!OOhX3_WQ*P z_3H4jiugIECS~p;F!Z6FFf8Oh@wZDeAgg=S2gTH-W|pCYYyTa*gs!R`OFe^#O)v;}a>#P}M{H^D9W+!A=X0@|ccUqXv52cj;LF&Jdz& zW3A~_^_aFV!YCIPD~z05I~dN9l@a!3MLwSdPm!+HrlWXoj_Ci`;&tX9!TPc zn{Agr0Jdfb)#+5*#RVFn`bCDlsV$C|*$lu8V~>QHYXh&UudYhF*8jovb6DtnU%a^J zzVST%f(6G4e0x^P_-5#rK{=7Pipy$R-ly(P3V^3oYC;-*t_AoFN=~!5D<_do9cpq( zn%4if&Akavjl$91FD$kPqW+pCtSveW*HcV6`AQxI^4TiqKDp9mAcr9HDf+AVQsse*h(qSa_g&T=z z?0ewT%>|^OkTh*Wb^m-Dlk>;cPfTELNhOkk{?+Dhpo2Wk>b>Bi`8dJ+U~@*qgC8m_ zSlK=0PfFiT`aM`wnGNZYf@WgPto`&`Z|)kP)4+wK%}dsIA`bB}QqtZ$=TdNX3zGlr zAHt#81+AbP~8MNcVb#tmD92kXXC&u>{;qowm4?;CW+cormOphYfR?7MZ;SSgJ$R=~6gT5r zvsI;RCx{gGcQEi(zLj`c;*>HPT#lf|IOf#mHDnp0iVd{LE-X!RA{5W4>*7ZAN+KiU zWWTe{WqF`P9|jtP09H){GwF^a8Jc~L4KHRouBoQ?)m+gYL!|v!|8tVaw3X!ircZq) zmJ|m{`|9&>{q6^RT~ejgkLWg*`)BL?zs1aRj#itAKSdxe2;;#;KmIbg|3z1{_+9L} z7djVRfotdvX;=y)6bOGm+cEn2j!$UG@AJa&?foqp)x?J}9?8w@cDh-pm2d7fZSSRJ znT0C6D?{i62eLopIyLt?p*9;E@vcb{6W1pRanX6&w7(=l*QmMO%a(l}Iq!C}-o0&h3#_Q_ z+&D|{J3O>_kd&j+MXxT%Yw=W(I)NW%b&nyM4|*ctka+{}v%J0maoR6C4Z$v?E^!W! z+DT{V14n!k>WvdcDn)k1bVEY9!)}YB9O_cYLf2YJV?ERIy=jd#$M*y zRO;32wZ?{WL~L9YLD9UfI&{9Gff@BqYd9p4eUo1evYhkxQc`~T+`939I2Xc zeP*@SXDAPWo;!xb(wk>2v(pm-0=Eq&p#2KkJyK-99=yIi9Ci3<7P*t7+38Gt{GTkE z^VIpTRH$L^^UsAhNKgV85_7Rn0udf+-d?o&2NtXy^4Kd%s7xd7DuFWl=tG1+S6qPf z&T{iU`x&%P0vt(=Z#=n1%@K{g=3=AzAH`7e{E6#06tZ1yY2U^JVvn$(?}XW<5Wx+w zCDs4tjOf8tj^Z9osvil!_{Y5&4YhBsAg*H)G`8~94{iEh2r{lqsuV}=xtK^#alo<@p+(^)CAsd{Pal)UFq)K*p zak%WOeL(}6-GAplD|+f$p$WGVAg_rQ`bTltu+5?@58M;_vaS%<9fB zfs^&4C*?(@4dl@z4D`GL)^Kf_Ii7x}OtEQ4o(TNwQluCx%8oY_lb)XNf!ANDbh(m{ zpD+26p3d`O{u1Q&KA!^zu2|TM+OE#3U$Gdp{H^aA(w>G4c83cIuxW6vLiTWbMg*l? z5y*HdSoS47KLf z`yR=cF7Kc*SHc>Pb7Na5>{42=;9^LUsYa3_OsW&}>7!kGH^&pT4zHGVrGG-%Cvuhr z5M=Hdq7NDx_aKD<2t)Kx>GJlFSUx+|bPU*D-M~s(NlG*cQ~jUG(-V40t{ z?0pYaMeTpa6m|{JB`u3}E2e>&Zd&CRb#|jIF+K{kG~*ea0p(o6G|@@lk2IQ&)*H(s zCe++M#{&_A7EDF(f)-gk;3|~RZVF`C8+&z|9POaea;AjVb7eMIkllpnk@s0h6#u(j zw6!??lQSzxD~K*tk;Uml0yGQ{^S(REe@E_EG5*8WTRFun79qjO&v)_*sJWokr9gBy zGND()B)TN7UEzFpD>EYne2c(26u^)ynE$|I|E-)Hf!GI-tC+Qey#*lRg6sz|vISc^ zGS4C2u)WBunr+Fes=aRWE*yTlgd+#e)O)3)Shc2WP(@&sZ+5kmLNQ0-hr+ab>l6?8 zqipIIOJYmgFWu#>JV1&O^ib|Lhm>o`E@gNjSP>%S^jTuAai$8X= z&kF}GBnwcBo<*i)$Z@XA$HgiL=f>T3FxMwn-7#Cya2N2pKt$zE9;!WSBi$StS#(Em z#T?POVz*X;*8}}IoblOuP!`sgs)*EJt4GazuPy{((Bh+n$r30itWEAR^j6p7l3ocp zB3!x`jw`HBu?g@a(@8tSGQ{1I4!Q{Q(lc~d+7=~cV$xpJi$-GP_a5dd5ie6eq3N|2 zgL_)+Cr(3EO~mst_8Btat~55qm47Ma;eXk{-7X{fG(rLrCJ@}BpY&Ssd(pQdCc2W4 z>V93AA#Y8vR6naBkAImE2iQ+@aw9Qw^yM<|h>CYMjgxvrxhbyP>*M;hrv;DWPq=im zDJR5nq%g0NiV$ui|LLKp`G_7~vuWYZOTGH~?P_APEpdSdY-Qbt9{KTV!Q38y@IT%3 z&~QIp;yoP>DI)wUMdv|1b;*prJg9~imRRz%1{F9b#o=< zlCNLB`Qj&?Y5h+t+9d9|qBuTgQ_+xc6m#K?_xbIZQ&0DrniQx+oN|yY)8@pgx||yg5lQ|t|Cgv zEgEuR*CeJqYVMb@15<;~7s$UpQQwEuRUrO| zvH27qaRCOh0HLH^G)BV=#^rVX)Tg-#$rjSG!__-s=xe<=x3=FtzkWyZfIW^{MI0z` zN!Yj3mY=t7${&v!>5SGQm~dw|j%=c`=IzyU^tfgH`bbu`Ddt@;n8iqdQ+W1|C`MgK53i^}g0U+0q-;?PviouuH09;KR6NgJw@ z6s<2orE}xPNSD_&3x+)KhBPTB@*q79bl{%CLO&|<>{i!kGl?JY4>J7`4n@+5*>923 zB0|z6eq>>anI5)D=iELxE=lN$edw8l-IAMRT%8zOt|`I{MnNMx7yd0xG@`6J65{&3 zf)NgvkaLqNl3P0O00EvUs-~~vQ4?=>#NQTg+D5f8ZEOy8lb)$UjBB1F=ygQ~6zRa| z42hzO`o&(xvEw<*{2wsFDXRoqqqN{9!X`^~*@3+lhGqzu2gjZ<5q8SAE;dp3+e)i? z<-peS#!7LBaHU-V;)*P(;cfDiJ{xH${(`)K@M7Mm$#_(k!e;_^M@wig)bB*^>J7dT zT1D08w`2j_p0P(bQ<^C34301k8qVTJdc(d^0A{-4gX zQFgaj0Gps9UK8WIHtPEmBb?c;;dU)Nf}SPwhR&<}+#b1XT!Tjy;ond#*+R%U#V8t6Z(jNSCxc67Zc3- zCCP*zm`udns5Z2XKw;fpXsQaBo;)U1ns$yW5u!qf4vxLbUw@kZmCV93FJb{R@y?bvE|k zbtXh1k}8?)sHiv^i*LIgiP0cWajfH^vST0~vdLKfw@|>-LO#S#afDp&IM3WO4!>=3 zYp(XPKD%TW-kb*sJMY-#+dH*>mxwG(pDBTx~Qd0QE#NdE%- z+H`zBD(C0a1B7N|b{eE_B+x4Swg&@FT;7J4BpYcZYmj-+N#{{C@f%A0gxch{A|yrT zfY004xAc9_QA-_98Ypvyuz7H@X@CmxrL^BK>&aW1$(BrzNkQ^g#{(>nQU=`u)<~Tf zqqcmzo5(is@Mru=$ReDm>WC)X5!4*bw@z&v3JYrV1>UL;kMvGF{xbr?r=EtDed6y@a}y_hyvwD7b@UnPEvc65#-@I!Mh zGAE@6VAq2M@cbPz?ArW(gb^Hv4-$%Cf{wiY!LadOW3NYXEE|) z0(gD9E3myrI2g7Ud7+%9geBuj4i1t@%kE{Hx^ZxQDz2K%*X@#FkLmRo=pvR-Za-St zndj%Qk3`_PLN%F@#JnK+`4Ql*&3-{I$y_P#)an6SA?gBYFe!F#w`+&SmudSwhAEP^ z2ZhBDM?c}&p(7!(hstHrsJSNerzuet{aj|OQMgl^L2FVVQn&`nS&~)air(~xf&Y~Z zDXo6A(Mx14v43nm475J97g60>EBj#$f>AgTEf+wUOeRS8YoN<_oCF1Xhxl`#@W-@V zU!o6nFzRbMf59D>pV>cf&6bLKqR(nuZ*T9&>>V4U;3aU_c4r(uVX`Sqe+v|OJPNpW zn!k1(-ke0j$rik*(MKHe;F{AN30l>CH;&3I9=_XxniL4osZN1}{^y=taLT8|gZXnt ziH4@kA50{z*-nt-N?wrgdUNP3GhsUwZ?Pnv9nuvO=Ce{Y?s`oULXnmm3cJFR$Gcex zWB1D}L?@TCU{DxS||M zPnk+2qmkCc3HJ);B2P>=j%$7v_MFp%boQ=?{1ntmiPwh5X!3=UvH7szbB+$F*jpsm zT9e9o2dJrDUqC%TrXEeGQ@U=WLSkTl$c$lHe&F|n3|Eo!fV8^o_)Y(ySih+EL4!em zGTQBikEwf!Uu)H|#kh)|w~xX%iF!_Oa59b1CGEnx8SgILnkv%gTNy5*1o#i?Hv)B~ zEIv_gGoqy4JRm)Vbh}=q=*>ptYr|xX1)Fo(wMc}}x&On&wzOtBonZAh+{jXE-P>og z=9YM}Fj`o)WB0%*e8kmUC%3$1sCDDXZGz;NBw5sSu{LfsZ6C?a@rQ_c3CYHf^&PrM;JJI7N*Gh?@^ zf~B|fJQdoo({TS`K_HY6{}h0!QBSt+8#f&9d+@j>vvTu63a!~w=M1ngS5%K8jD#fL ztkR0uHzzn|(ZQ<#_K6Eq?da^M1H3Se`D0s1d36S5S<&<@vb*(!;4Rf_eD$~B30>eX z!Mp5OnLPO_)w$Vc2OmLnO>^#@5%*HjC!Wdg94WFQr>^u#=z4eHyl}V87u=|O5pFOV-Qg7z82;AxWo=hWu!bqn)6UA&zedhH ztKD&EJUesWf11P>#kN+#g_T%uQ^}0T(_kQ>Gto3Xk9dqlc63Wum9IYum zb533C=B+#nEg}bIbMu< z@w<;RS9<%9Nolz$mq)9}9|0un;m0CZ=~?--&0s#J`AEY|4XB-OJFj=;)ILiIZr55o zjG)C(!l!h7CweK5kT_>DDya7w&vL^%-!#hoY*yB) zFJmIhxi|_g6?+rHZT%u5&GAXYd0eAn|;=y-9&)T+{DC z^2WH3oClAnDIl+Ch`DcWP}leT$*bVnc7;Be?g)+;tWjA~z<7C>MBh*&T+xp+?6f^S z7uhzSK8>XoToK z!->#B>yr_y=IB@n$CVKvoK4N&As%v5u_-=mPS8Mx zOxZ#wCQM280%7wWw~OpWF(CuifV(IwzC2ENkIc<#{)&!>=9-ygdIdlG3wt*OXLENi4mG4h5OhD;gyN48@2s3K#aQ8D2( z(trz@HBg>fI(4{sQ(mdG4>%zyM2~c~FDlpcs5%jCCmcFFng^pavk!ASz|okdD5#9( z`AF_$W~9E_kTuv826`!@N|+?DfQozQ@CsNhWA&)}Cz9xSYA?J0v{tWba&qdLkIzo_ zHhLr<2F|;}%ze4T%^Y6YB8Zc%&c#Fck3AoFkN@z{g*z^=Eu3S&UHOM|DcRt!U1eyx zb-AjU;B`riIJH<-n@W*?aY&^DUJzqcB7hJUej%8a;LqEjluKF(l$vRrusY6 z=3dO|!4AZq7`ciM+6NzG;D`njT`7@BYtzMO3)}XA^87K-SLr{5Hn046{6MR*lq&+Z zr**RhWDqG~^KdTGwe>F4$d+*72wHN=C(k4899WUjwo+|*+8O84Jv3x2k|?Z@mZ#p1 zf(5e5C}(8n^E|o*9?{$c;%_{`l?1x!jD;xreF~u z7o`x0zd+H#QYn8leP_^FVU2&#c%RgLPu4R%tAXVuM!?DaqMnVFT7E+eFC64VM9-Z6 z(vUA3_;kDo%eyD=i{>hCRTeuXjAutKycBOPx8USkwc>FoGb5VHl$@5^`t}WIYtv5sLtZsScRNwR9LLqJF2-#{Wfv6`$qp= z$c&O-vT)!PU)0}sH;KUDXYgc?g#}%0S|Tq2BDy3(^N~n zsmj!w{=uHrTVK+)7$Uu1jyR;ejSlEo5R5iKwMzVqC6mKsGsYO8c6g2U!5i5wXshz7 zZ1zs4t##;>yM5NnKhwt5J%TKSY41*4G>uWd_sMjGrlc0tl}4&0LVg#pRK z-F*^&XnI^^I9u`UOs}Ts0t01)YI%KQ9}TCF!Ui+{^V}8`e2f+7>!#FZMtStuJpAY1 zAfCZgt3~b*(EqhW_KmP%u@yOe`$Ox#`&M@O)p*etu(M*h+v2j^jt&d0y1>x|uS(lu z@$(diSBZ}O?W>7Yt>Bu_?^dyoN7E{hHTFhEV`6D=W)rL~9GE?#+LY$fk#TC)khFyi zx*;_l>n)mkofX(&#BL{9MdYkKQEc!=$(W%~q$zG+5NCJ)Wj1F!hd8qAwt zliER7)v2+LgFfPZ-=T@nqUkj4!JJD^E2#3y5tT=@X(NTzujIF{ZSO;rYTxwib1*~a zo)-Yjsg(16r9-W_a~>q;_Ae3KHs%~H@}u7o@$qoiBm@mH8Gga>83x{5DZR|}!wj7G zTVM5G6`_`vbI`{pvRapbzv2+ESk zs^ld~pJql-J`Dkx5foYQgEKJ~qkz`$>l>;^*%o=$MaY|!;V7zO4-9GQef3kL?3Gd@ z8L#Ker59R$6|1b7pA=jVFupB2bB76^5zqB0n;l*~+uXSdfOv_^(x-(VP#b!)PfUVA z&D?ZFqp4hDE79TA6sdPM*~JS+N(FhZI`3vp!HoA!rzn-TOM`^m7FWL-@s1)x2whVZ zx!(5)x6>yGtTd>1UvP7vumLV!Niv|#h7fZaU}G6y2RO>{Qhd?N_Teo59#Hq!{{l2S<;n6AR#SEpUNl_$I&5jkG``vv%S=8N z;n3tBx)P!wxuv-upw&onq+^?|6un1McI?J4C#q5@T$~qEf!i)Fj?-XQ5&avCMkgVJ$ zp7AGkyn@>=Y{5lKqyZLxEf*y7CTMYly1t_i>r(d1)fCLVbH;ZeELkR}=f*OwF`R`Y@RLQVmEL>!GgjOr){uEm2 z6o!*;eKD;*kWd$JIKeN9k?Az);JD7J_K*K;y%`FfkMJ7$-VcKodF&4a&i~K`oXq|VKJI}Ep7npk87L9AGrE1CS=|{ zA_nT5|59#`xI~x~QPMR3)tw)~DSUD4+12r0zH78p2CL*M++p z{Q+}!eb%o~4)?vRT5b9s?%Jpk1&eFgz zi{ehEm-6>lhdYS4c^_k&=3kVw^Z3zC3hgn+?;`Nw9HD5!X-vSTx7!i7Ykeac6sKtB z>|)fp*xRezEKS!D6&5xsaRj)>f(;V?TVGa{;rb=7W8ci(g?m#f;u08(qwL!kF z@4xoA*YfW_7tWoV-J3UEVD9WYW$)u1@27s7#9|-*yglq%8h>PwwYNlkHG9K^(pxXC zUSjzL+A9t0!iBA`Uhnw~>meAx?o2{y@&3qa8@YDQmnFW>F1f7rWwSP({O{Y(c9x18 zTAcTO?WtXtAGX_1@atR#6GfW~DL)jX`=7sJ0c}3teJ?q-U1iu~S%Nm)VaL-5&|oj4LjGpBdQGeCpTy+gq>RU$^!xFi`&7{NwPqd(P^A zOFg5)uSQSabM5!ky!F2=!cP?Qd|0*e{0bt^J9;%J$?>6xnS=*XIby_z*XID#nw(9pQ`hM z)|dS`cQyL2_f0kYQ`Nn)6TjrI!aa-)aQTdUEai${F>~)D9fp z8uxvs#r>tvw{J^!c=_$uzb#wtJp`UMP{J@HeJ!6T?$ZXM{QOxKgokUZzJL5twIlDH*xQ0jf(tH0WmjKjOqh3zk73mgWrrIYFL!?_o$_k! zKkubqulos1{K0?er(%rN%a;NF-RG+ohS&Vn4*q}PmIbgaz1xpr+rL{c-H*3ku}@?7 z725vj*6a7zQm#KKz0k*ZOHpBmA7e>FMaj!u=_PR*Z~rW~zWudC!OO}Ax7Pm-irT-k zG+KM-Uf{VSaxWMH($;=ljw{|67-qbU>1^1m%6RQn#)Ft&pKoW)m5<}^{JGm~Qfc#P41%b4N%j^)78&q Iol`;+0PXOIjsO4v literal 0 HcmV?d00001