From e40bd37be2f8bdd3275d7658c43120af44a6f136 Mon Sep 17 00:00:00 2001 From: Frank DeMarco Date: Fri, 30 Oct 2020 03:57:46 -0400 Subject: [PATCH] removed buttons from dialog --- NS.py | 100 +++++++++++++++++++++++++--------------- config | 2 +- resource/scores | 3 +- resource/sfx/comeOn.ogg | Bin 0 -> 14079 bytes 4 files changed, 66 insertions(+), 39 deletions(-) create mode 100644 resource/sfx/comeOn.ogg diff --git a/NS.py b/NS.py index d6616e5..3569e67 100644 --- a/NS.py +++ b/NS.py @@ -361,6 +361,12 @@ class Tony(Sprite): elif name == "static": self.board.hide() + def shift_frame(self): + Sprite.shift_frame(self) + frameset = self.get_current_frameset() + if frameset.name == "board" and frameset.current_index == 1: + self.get_audio().play_sfx("comeOn") + def update(self): save = self.get_display_surface() intermediate_surface = Surface(self.location.size, SRCALPHA) @@ -453,7 +459,7 @@ class Logo(Sprite): class Title(Animation): - UNLOCK_MOVES = NS.N, NS.NW, NS.E, NS.S + UNLOCK_MOVES = NS.NW, NS.N, NS.NE, NS.NW def __init__(self, parent): Animation.__init__(self, parent) @@ -469,10 +475,10 @@ class Title(Animation): self.show_video() def reset(self): - # self.first_pressed = False - # self.first_pressed_elapsed = 0 self.unlock_index = 0 self.get_game().platform.set_glowing(self.get_game().platform.get_buttons_from_edges([self.UNLOCK_MOVES[0]])) + self.halt() + self.show_video() def activate(self): self.active = True @@ -529,7 +535,8 @@ class Title(Animation): self.video.unhide() self.play(self.hide_video, delay=self.get_configuration("time", "attract-gif-length"), play_once=True) self.get_game().tony.set_frameset("static") - self.reset() + self.unlock_index = 0 + self.get_game().platform.set_glowing(self.get_game().platform.get_buttons_from_edges([self.UNLOCK_MOVES[0]])) def hide_video(self): self.video.hide() @@ -924,23 +931,25 @@ class SkipPrompt(GameChild): class AdvancePrompt(GameChild): - BUTTON_SIZE = 8 - BUTTON_BORDER = 1 - BUTTON_SPACING = 27 + BUTTON_SIZE = 30 + BUTTON_BORDER = 3 + BUTTON_SPACING = 64 def __init__(self, parent): GameChild.__init__(self, parent) dsr = self.get_display_surface().get_rect() self.buttons = Button(self, NS.N, self.BUTTON_SIZE, self.BUTTON_BORDER), \ Button(self, NS.NW, self.BUTTON_SIZE, self.BUTTON_BORDER) - self.buttons[1].location.bottomright = dsr.right - 3, dsr.bottom - 3 - self.buttons[0].location.bottomright = ( - self.buttons[1].location.right - self.buttons[0].location.w - self.BUTTON_SPACING, - self.buttons[1].location.bottom) self.plus = Sprite(self) self.plus.load_from_path(self.get_resource("Plus.png"), True) - self.plus.location.center = self.buttons[1].location.left - self.BUTTON_SPACING / 2, \ - self.buttons[1].location.centery + dsr = self.get_display_surface().get_rect() + self.plus.location.center = dsr.centerx, dsr.centery + 70 + self.buttons[1].location.center = self.plus.location.move(self.BUTTON_SPACING, 0).center + self.buttons[0].location.center = self.plus.location.move(-self.BUTTON_SPACING, 0).center + self.background_rect = Rect( + self.buttons[0].location.topleft, + (self.buttons[1].location.right - self.buttons[0].location.left, self.buttons[0].location.height)) + self.background_rect.inflate_ip((10, 10)) def reset(self): self.cancel_first_press() @@ -972,8 +981,7 @@ class AdvancePrompt(GameChild): def update(self): if self.first_pressed: self.first_pressed_elapsed += self.get_game().time_filter.get_last_frame_duration() - # if self.first_pressed_elapsed > 4000: - # self.cancel_first_press() + self.get_display_surface().fill((255, 255, 255), self.background_rect) for button in self.buttons: button.update() self.plus.update() @@ -1454,7 +1462,7 @@ class Boss(Animation): self.health = Health(self) self.sword = Sword(self) self.register(self.brandish, self.cancel_flash, self.show_introduction_dialogue, - self.show_end_dialogue) + self.show_end_dialogue, self.end_dialogue) self.kool_man.add_frameset([0], name="normal", switch=True) self.visitor.add_frameset([0], name="normal", switch=True) self.spoopy.add_frameset([0], name="normal", switch=True) @@ -1518,6 +1526,7 @@ class Boss(Animation): elif self.level_index == 2: dialogue.show_text("Lizard! My moves are so unpredictable you might as well" + " give\nup now!") + self.play(self.end_dialogue, delay=5000, play_once=True) def reset(self): self.level_index = 0 @@ -1533,6 +1542,7 @@ class Boss(Animation): self.queue = None self.brandish_complete = True self.countdown.reset() + self.halt(self.end_dialogue) def deactivate(self): self.active = False @@ -1540,11 +1550,11 @@ class Boss(Animation): def activate(self): self.active = True - def combo(self): + def combo(self, delay=2500): self.queue = None if self.get_game().serial_enabled(): self.get_game().reset_arduino() - self.play(self.brandish, delay=2500, play_once=True) + self.play(self.brandish, delay=delay, play_once=True) def brandish(self): self.queue = [] @@ -1762,6 +1772,8 @@ class Boss(Animation): " manage to defeat\nall of us?") if self.player_defeated: self.countdown.activate() + else: + self.play(self.end_dialogue, delay=5000, play_once=True) def transition_to_battle(self): index = self.level_index + (not self.player_defeated) @@ -1787,11 +1799,18 @@ class Boss(Animation): elif self.level_index == 2: self.spoopy.set_frameset(0) + def end_dialogue(self): + self.get_game().dialogue.deactivate() + if not self.battle_finished: + self.combo(delay=1300) + else: + self.get_game().wipe.start(self.transition_to_battle) + def update(self): if self.active: self.backgrounds[self.level_index].update() dialogue = self.get_game().dialogue - if dialogue.active and self.get_game().chemtrails.boys.amount > 0: + if self.countdown.active and dialogue.active and self.get_game().chemtrails.boys.amount > 0: if self.advance_prompt.check_first_press(): self.advance_prompt.press_first() elif self.advance_prompt.check_second_press(): @@ -1823,7 +1842,8 @@ class Boss(Animation): dialogue = self.get_game().dialogue if dialogue.active: self.get_game().dialogue.update() - self.advance_prompt.update() + if self.countdown.active: + self.advance_prompt.update() class Countdown(GameChild): @@ -2029,7 +2049,7 @@ class Ending(Animation): self.slime_bag.location.center = self.get_display_surface().get_rect().centerx, 300 self.tony_avatar = load(self.get_resource("Introduction_tony_avatar.png")).convert() self.advance_prompt = AdvancePrompt(self) - self.register(self.start) + self.register(self.start, self.start_wipe) def reset(self): self.deactivate() @@ -2052,12 +2072,18 @@ class Ending(Animation): self.text = RainbowSprite(self, foreground, 180, 200) self.text.location.midtop = dsr.centerx, 80 self.get_game().tony.set_frameset("static") + dialogue = self.get_game().dialogue + dialogue.activate() + dialogue.set_avatar(self.tony_avatar) + dialogue.set_name("???") + dialogue.show_text("") + self.play(self.start_wipe, delay=20000, play_once=True) def start(self): self.advance_prompt.cancel_first_press() dialogue = self.get_game().dialogue - dialogue.activate() - dialogue.set_avatar(self.tony_avatar) + # dialogue.activate() + # dialogue.set_avatar(self.tony_avatar) dialogue.set_name("Tony") dialogue.show_text(self.TEXT[0]) self.text_index = 0 @@ -2074,18 +2100,18 @@ class Ending(Animation): Animation.update(self) dialogue = self.get_game().dialogue wipe = self.get_game().wipe - if not wipe.is_playing() and not self.is_playing(self.start) and not self.text_index == 2: - if self.advance_prompt.check_first_press(): - self.advance_prompt.press_first() - elif self.advance_prompt.check_second_press(): - if dialogue.is_playing(): - dialogue.show_all() - else: - if self.text_index < len(self.TEXT) - 1: - pass - else: - self.start_wipe() - self.advance_prompt.cancel_first_press() + # if not wipe.is_playing() and not self.is_playing(self.start) and not self.text_index == 2: + # if self.advance_prompt.check_first_press(): + # self.advance_prompt.press_first() + # elif self.advance_prompt.check_second_press(): + # if dialogue.is_playing(): + # dialogue.show_all() + # else: + # if self.text_index < len(self.TEXT) - 1: + # pass + # else: + # self.start_wipe() + # self.advance_prompt.cancel_first_press() self.get_game().logo.update() self.get_game().tony.update() self.slime_bag.update() @@ -2109,5 +2135,5 @@ class Ending(Animation): self.text.move(dx, dy) self.text.update() self.get_game().dialogue.update() - if not wipe.is_playing() and not self.is_playing(self.start): - self.advance_prompt.update() + # if not wipe.is_playing() and not self.is_playing(self.start): + # self.advance_prompt.update() diff --git a/config b/config index 6556589..7b1a10b 100644 --- a/config +++ b/config @@ -35,4 +35,4 @@ timer-start-time = 7000 timer-addition = 1000 sword-delay = 300 attract-gif-length = 10000 -attract-board-length = 4000 +attract-board-length = 3600 diff --git a/resource/scores b/resource/scores index 7c9c0b8..b423df2 100644 --- a/resource/scores +++ b/resource/scores @@ -18,4 +18,5 @@ 173960 237842 171298 -164711 +198296 +142464 diff --git a/resource/sfx/comeOn.ogg b/resource/sfx/comeOn.ogg new file mode 100644 index 0000000000000000000000000000000000000000..afa9d2d6217080e50f141c4bbaafd8b85352a4fd GIT binary patch literal 14079 zcmeIYby!tT*FU`J?vTzygVH5&=#V^c2Fy9z8bn$I zejEJW&wW3?f1dZcp7*c!dgsiUy{6X8`poP#Yi72#gM%J`3jE`WoBfn-$oGo`=qL;* zk3GDsoxE=nP!-E=9sq!-N4b4Ap=jUK{4aM?^CqV`jw+1A^7_9!EVRFzguwzvPM(f; zwY?meT%D{9Zuv8*F$wYu^7D)F3o~)T>}-8)oZKCll-wUXd3m_I*}400-7uyC{|X*% zH*sklFAp0#Z*MzWCTo8tJr5%kjKBQZN1AXx8%clzHx(k}{K&(i<*=E<*rbgTLph{DDpCSWbGk_* zmj73vB;g3=%3;%ot?`TFhkh47qYG1#Fd_!iHkiVQ0j5L~ zd04+(F-;h^1U6$BldvrXkN^PLxt!6toVdg^HMl@801!iU$$K8r^}V9&tER)lCNRbT z02BZlEToNId3bUxFFQk4BAo zI}Tts5G2w3orr&djG$5{%*82}Sk73>HYQA0ua=j2{bt{$W?%AMlVA5?>s>U)3K z+Xpvk-Z!jngRQPjx(u?LXz{1_DQ`!*KuWuNb18%Pzlz+Jy9F7P7fSph&T4@Rdu-j2 zNtwi&MsQQ^bb}vgsE%^~lo#QXyr~nk3Ih-7(`mew`lKBOd*B7p$ z?C0v-CB?b1g8jU;1Gj&yVfZM8nXZ_duBhF(h?$=ggAdy&s8;26 zsBiot5KdKZP7{%&OZ>D1ViPSlz?VP5#a=$8FCR{xpK8NR0V9NggBK1Er=zTR(m`u@ zL4S)303-+#j7Skx2^0MjhiIblYNH7cqx}>A-#nmW!q7u0(Eq~(Z0M&H$xlU+f8xBu zXu_jtQo5k__+PvKyR9m)Ek%+MssCsTY)ESK{|&kR*PZ?U8T@}80b+2eTLJ%;%;YpR zEI=d~;HgRq!AV3PL{m+{&N>0!E5du{FsDLg2V0KmWYLY1><~yZxL_^fZrL@VN(%1bnojxB* z-H4s*m`<#uE3BDX=!E3v*Mw7m_R7i)?4gC7t3ddRGIT&56`+f@HctQHpUDwjSd#vi zi_)mDrXE}^vCuygG?tvw3z0Rvnuk(1OO!qw9{x`<61fF7q)iT%hEMu_z2N}1h}`;c z+vvEyCfwJIDZ0=p9f?F%;3;a8gFMZqeV?sIQ)H8aM%=^=9aiy#yZ zaxybaLAj~2{h3>8W%OVny=?4-I_cw^_w&a zu7X>;CkdtwT1r~#Tx?-OavTLoW1xLR1_1iEXy^6*KxdV^g&T$f;K$qCzzrgm0=XS6 z&h$cdwZ8*^?E4p<$>1>FK#$~}rU2~%O*q`FhW8fBtq=S+uz|4r1?|IKSCbpm?5G>c z!4Uy5GoALen@xGf`>|qYt_A>pqGJKssI&$u;#@R%yu!9@H|r&oDl`E!$?b^cahb!C zVA$YW@gLKl6i@}Hd~Eg9jX^a9bpQj9LJZtS{~f??a{nFue?;+t#@Vff_8$QT@Ea}; zoXO5qNq$xvHL?Up6a@iJ_cp2mDsOywt^$2*a0GnxAI4P6M+&S%@+Tg;c6krUaWW@Q zS@ULk6UuXObs5;`a)rTQ>U<4GG3q&ai7@r@NuyYSlKiQMG3DLXv1(j(6AxnqC|O-K zOX_EwORK4DT)6q_sBB`puq|v|`3mQp3A(XaO?dexAG+{&Q!Sdr6f~sA2*{kx!FUCx zOab6YC>o&nJWi+#@{S@N^A1f7DFEWeL<~+6aL$0UA|Dnj0nQ3SdF&j0FzuFNPKv#m zJ-7QGm^zqtOC`Xz{-KD~x!&E>xY;6c6@=dA6036-g{VfWDDwzL_cX4a(h()e1CbbY^ThUczhy zI$efm2bqW8X9BGeE^c2YkS_ob06)PFngS#wqXSm9j;@|Qeu0Rv$k+r>L4uAN2n2Vo zY*0l-VQ(sG8d^Gf21X`k7FGzT#{X{7nGgUv`d^FcMuVfH|J{Q_$hUQ16jz6)3@|1(d+&?3^Z%pe$Ca_Ilki>9@Nhi2@f;Me|pR-;Gw^@rp|%OxlDgl5r4kxomi^-z@2Z)OGf^Gt<)R00P5Z|uhqf$M)K1@I>ly9It`{p)bbDL5 zxcdf>zImAzL8rCX1`wZZ^Rd^MeN~Xp#*7k-vFd@b?;^F&OKPq(U!Ji{YEH4K$GDPr zyu#1HMbyw!1F_w@AFR&@+e!*;n{ElB9E0%DqkYo-H1+ZjP%Du%HPjjJZ?>!+4k;%HEkB9iDD%>}#$9 zB9OCg1B&@neAr>VZYGb6mV$aIkPBA(whfV0zj3$#JB=FSj1E`f;1J0pIWij>mF1%V zqh&2r6H;W579>u6D?0X6W5?JWXznG*)?dA#d{67)ca4I{f?=81HcYMB$e&#{-5(?s zaxvy&-YPq^c>N^s_n*V%uFpqj!^Z+n6L67;-jJ=cOi7G|Ud^r-`!3%SN6#)L;Ig(G zUpoOxL~v;{`MxhVe1Bo7t5qvXr0F93_xZQf5hk&|@k-%cr_)srHM4*YC(Manvx%CH zYlm+#-W{jw8h2P&K9d;&DTb9CrD`R~pr1C{iA?NV9Feil z9g6vZTo+z$&D1vRF+Sa^3py_O^Cs4y80L8)}Z9|Qw-Nws4F|q zYtzO=otidG?jcjw0)%3lRCkr^Q!>-SkVw$D6X12OHNt;15up1gng?f4s}etE5*CGR zWz8CG2#MGnbq&)$y%3YV3fe{$?4ca*A6b)Q@AUh#I!?+y_=QIhIC&#gik6xT*+$9I zTjWamrmwQdH=sz6fOTg`{QG$ITW^Dqg{P06UfR6$_hR%pj;9Ud<9RZ_0ap%}!^-e*29y+*{`F_BH_~+Bg>G_J z&X$D8Kw|Zlz=3|s_V!j5>zZrh;puN_i9?wkt`BrZ$qFp*P7P3&>JMFLG-=a}O>0_; zKc1>VnH}dB%jOg(c;A*tee4lb`^d9@^h;)w(-hN~ve(CuGK+85?)xKcSkQ6H6Pv9} zh^^K=((W2t8(9%u4Adc8K{h!%l^IbtJ+`{F-|ONZ@7vP}PD3%*W6@@Ss}Itn`-&C9 zGx8nVk01Pj2|P} zt^mKwtG(oLZ;pQWr1^BkeBoSSnH~8_rUm!Dv)P~y3e$&X-k)=9d@#imPRh$6c88y4 zc50%7yW>6=F~|O<_qt!@l?*wduc|wy=Tszttz9)ec~Q{-7^pZvIVG`aGPD7UWOfFiWGI2u{pP6Lm%&MmIdeQEE2 z4XX~LKvT`yxjWTQCf+%{rZk2A8~_rrQv|=Yjm5Qf5D%3-C{nMlvY)*s91*B5D}T@4 zKlAG}UCHK!P=aTOO}fLtTcv%4q7)%ULMTQjl)dqV*w=x2+mxn)!r4hF6#hxQ`{~aZ zG5q>!n^FpC$q`^*+AxA?TRMiVQ#_G}PlRppNZdP!{^%Z&5+1HkCGcvTG4-hvU{9g{ zpzK#oUz$)wSNJOcc*I-Jg5)Nx&Mm}@q3uf7tWU)hC5y$@5utssx6E44$>(;T>@h}E zvt{to3nz{G)F4ttgJNu~#P$&qA$bV#BDJEzTPcatiaZ}iZ?XPz569Fe9{KlPZ_J9U zu%{I{;3kNce44D==|Ef02r!)#7$hL<*NZEDjeF>pnAdrh;BPOw%|RlFKmfE902Iv} zuVp0bjP$X?!n~wyA!T5J#R2TGLttaQN(-kRr3f@PT0I<5`&#afa|H2UI|>w|i%MXs zxVV@GPHa;?D)@rV?RoTL^a)-L(rl}0(S*Ry?5Fqdhd;x_4(O6_xRWZ;9i5EAKaof* z!bkJL`d;pS0@fqhL>*^=)6`bVHzQL!A;v&U`YU@aA#O|Jt*pq*E9&)Mn+EhE!&C$7 z6<%ZSU-8aqloKEeduV-SoZ~oTFaV}@Oqv7?2E4mRtsCU-nTLK8cLkG;JUia1eB>{c zh-a7WS&M^31^}!NP6kv_ZY;bTN8WB^lA99G_9ar)C(P52VB^b6o)TlXUt{arc}^yi z21h#$F%JixN(^sb`coWVK3X`C76Ocr*V`g>&!}HLj*~9({&LY2%X3fQu7Vf= zPV(r$PpNnQn`RRm4*RhvPCH8?dL?Wb=qE*670kyK(EUhfWA zjb-B&f*0bYK@(Y|%D%GJbUyRR3$+=Qz!FjJtsnyUyLBHe_@chM#r4(UcF+Es{ta2_ z;~qDBZhP%jL+tCOi_N>a4h&lME2_%JbQn~+*86q`u@rNSnjE2)sgLgujof$${ zTSLfHtNBZuMukc4ufm}^D=mjOA2>HQB|_j-J@KZCY#(fyYVPdn6Gu9Ey|PcV+xhCW z)GZS{aIbdv`uuFLQfa&0}bOsX4=J*jCY?*MF#uIvKqC>46)Lfs@#NRq~GHLv98hq1TiKaIn@v~8rcCs zw+}WQz7YcA&f2sTF31FXUo9#dd?1s?pmu-N?M|K;v!b(6pVVPp%yex2Me z6ZO7WLEP`^#qu|c(43-y^Q^mNsl=>y&HWfM1LE4Ru0;|wjDEV+E#$sE)j8ym_)%-6 zk}g**x%&}g0{k&s^#M;9?({A7VGnpPnT9Sd_6sh#uMMuP?)DUX}sCb3l6MSs6^@2u2)D}z>|D>cQbxx z3`m+8pBk2a%z>>Xg^{x;H$Wh+J~>9Tvrn%drb+J~{L(8o*YeaW(#FhyUv+gwMiG{4 zhgG?u1?+Y>`u+juKx_O3F8EOOe*Hkgd4+|!5u4L6X(W>WFyd$bSi$8UdWbKq3%iO(y=vpHJnU~ zuaCCnTp3+>`n0k+{`J+Ph&QlzMwqc&hMHzv-AY<`m~Py|sh7=PLN2O9HWwS)eZTv4 zXXboFN&nqI>Ai40a$euk+GykNd(7uu!;_40N07i9mbUeU=Nx(0HQ&A3r`Ft$yk{uQ zY>>lYx36z>ZpUxVm(e_**W~^1uIZCJf$eQ0;N!~Bv;i{7v|8g`j?(an(QgK)!{wcy z%RWXvwLTTvTQ6T$E~ywyOGRH8E?WVy)8uW~3E`M6ID{`MqIOpOk{idDe_E1np<}&& zT7}j4^2o=n@|?14fD!7ZW_w9W{U^myv_H0n{dsB5?RK{<`c6HwnYqo~YBq^(<4C$K z!vexlMa&<9+Bi0^`+jGWN5Hx{w0^~5q%UNNb&@@EEts%P%+wHo1KSk6@t_m4h zTQAtlYG}JP+_6|pd&on7aZ)K%>^jEL$M0N)H}^YB_?NTM#zkp#sY3{Ry57NS>C_4Z zi$iyNBAp8Eh8Drx!Hzw1>+7X$iRdMM^Yt#(8oO#$`QRv-((&#KQh8#kyh#?~l;hgC zD&WU9?So+F2PtJrR^O)2gx4Dw7T*+SHJU8a-#=XrjL31rXkgp46|s@?Hr`m2$84ci zR(M)7m_tx0PX9SQnNhUE(NSBJ&b3mC-WtXu8~BXVnfXg`6x0^_Vv+XHO$K*EhKG$9 ziM-K<2u@76E(MP@MohK(p|0z-v&}`y1W#Gjoe!T^;8DJIA4w*EMqx^)tJ>YW>su%! z)E#=6_n5E0q&&8BL<7%-{>rHAp5}a6M&+m33_VMfjnyA4LEHJ)#Rv1})!<1&@%vQ= z1{G#+W4<(5nIE&VnNto2(&G!lvAEr8KYov=#B?8K6a~DmXVmfr@7!yOwq>`se}9F* zm2fbLMR{K+ChO11wgf~v%pe0~kcq0r$SPh}wO~HuUx%E4@LiMN+Jn%+?bk-^K86oP zK0-=nUJiwi!%IH(?rSL0((#bl$N>KwS_It)3)-pRp~cO`4PSbRIm0#QHOIBwHRCnp z`tB{wdrf*xb4>z{4bv|iS# zp#oKJ>?%fqJk0n+9nUyXfL#yBr=9y5S33miO1*L2=`4$P?_JYa zl;6kS_4L=N*7D+KG9!1bBNq+=|op|0Nqj zi^++=+$e7hHrEYl+PLJ^ey|T7y$E$zMofR-+poTNapHNr+1Oe+rCqsSV5iN72Iz}w ztgnm_mzR8-qRt|a3dI|-t#P!S-MCjt**-3NK1h@fb zdFe}SIp10hT1DW{*jEb0g-JM-zSH%^v$#5in#D z%Ay&KhTOm)ri-Vjn|;q>0L4RgpO^Js2+at;&b^-o8D7fMb`-^Kw!}9(k`i1UKoDg$ z`Z0D~e@hf8SDrs7Fs(!Z0iCtlL{GqhHFw?Iq?s^tmj>+`Vm)%0ttGW7g7n)6c_u z6bQ5vXc0>4lD`M4^16)2mFM;G+TsXsd`*?%tll@gU(Z7D^L*R^2Qo@0bSm3&7CL-& z$cjz2P-9hXXN9I%4nv^$RRIa*?Ulql^6x~UO<(5~W$`efQ_o}7Ttwg$x>Q9xxKP^P zRY3rQnsTT^tP`YC3Ll5J@0G2vUz9-jYJn5ZG#o*39=(~vfI@wYJ5xK07RoBZZy#R0 zb_tzi(}3Il=IQrVC5Hb@JW~ zrAV*%NXO>^1C~(lRQ~VKraAWzHm&>0qGJJeB-s6a z?sbCS1GJ_8j;Vg<^m6HH!V!yQI`r70v@pYlN#@cB0-O|W$zH#=5#CiiuME*m^WAc*i;l0x{7%ymJe+nt6&{0 z(U-gzJpDi&6z8t%bkr!R>9 zI{u~6YjeD{Yz~};Pxc_g#zmX;>%ks|@jpT?YIa;?(JnQ5QKhCWR5|d!%}3v_H%b@$ zL~nNGXLFwDtih*2fyr&9<(?I|-1xOIV)5#@;9#wG|C-)`2*|xRgTPNTZ1Ukut5n2h z|FF^^*Nu(7kdla65FAGPB#H*`gqF6Fg2(i|Mpv^jmnZ-Pnypi^t{6?@dv*^>DNlLN z)OP<{$sBniY)b>vz>8vzh#7oag3pyY?#4_QwC7QxeF}Gvvk1<66IrI#r;wKVpqq$s zMT0&2aiHXaS6sDxzxl5K(bIpYQS@qYDZu$1f9Td(P zn&*6cpIC5W(Xd9o?6tPGsJ=#K17V&&?a-7Pz^h4FY-&hH_D^A+s~;fI7V4_yLeQ47m3 z9f9KS@1{)+^SDQe5uj!WN>gOiLo~-j95aj?$iKxJ=Dcq+x0rSdcF-=R}amZ_)k7 zr(3wA#a$%B6c2!EHPLXp#~k`Mt4%$z_!L|S!7`Dh4e6?zwRj^X1_0dL*)=K(kL8Ba zBPU+ExunClh+x~AeL?AXqELqyOIbn)4&xN}T z6^4YEo~20-`wv_;?@PeFL(YbS=UcDR9WvQ3vUNl9TUOKIOaKMr&@93CTNk zzgK8j?{vUCYKNj__(^ukR*t^w3?iAJvL!N_}wCR*u5k3C6SXWF#^BQ99>^oL{ zI{o-lOV_$rX7RK<2K>drW(|H!yf+^Pnm+fU%m>2&Km^dcsId%m^*Qi-n((L00-S!( zw7XI*9Pe}8%3A}))xTRbPW?K}8k%4Ik%59hF(U>D?tU4^P4n&Q=m`#-+4$v{XL*bw za~e;Yt(DXyMyWbfX_wuGI^0dZr89-vf6`+T7Z7~?P_0E130uhRrW8bsE)roeU|Ix5 z?Kk7`K2XkSok#tc2hgco9(E~itj9sXi(BCAO0K5t(iNb4Py^ui4kPNQzD49EpwL`2 zVnNY@)kGFV)3oGSTi(^(?c^>|o_&49&+&D)&i0xJT3?ogVq^8Dn*iktgKmRcaw$zL zctFx-l#HHh04>*iJT8h<$_@xZwtNZRHZBIQOIN);{GG!M_r)vi`sE;IJZ}b+2DOdT z)C45erbDY=PfgOjCKa4JZdv#9v*2Z%KB->=fa|ru^_{9u0^hN)5yRM04Gq6%2hY&6Upt6Nywhzik>1GIWPHllXvH2{eRM}-F3?1C4#ou_ z(3x6Uvt`uT7@BH)c&aXoUMjq ze581<3dO!b6_DcN+g`zQhvsV!mRkHI@w&(~N@;KluPtys>R%kB%3_^5VTxe_kB3(x z^YqV7t5HlO|JX0f1D0#Dmeoj* zS-f3_kbGN74nd=aj?~2!|1*v}B1~`EFF88-;2Q)DeW)fVEQrrKx+;R1*|enl)JsvC z{DjnVJ}y7>VA~Tq>ETz0{RCD1^JuZ^Sxa+@mf<3rqzUSQpU66ZGaE?J{Ddvs#913h2_t2&KH*?Z;FWSH*9c z*8?9eE>E9Md+&MgE&6S|yngMAmH<1>i2C#i0Dg&4A057o$Vw*H=X`eQdOq7y2f64U zi$=ryddv)n10>2(u|xzw7(S(+n$w!N;}2a{Geymth@_3upZu@gjKwoOga86If)FKr9ff1{yJWlkKaB$x$7w z4rif(5k74}M5X(D=(Ekd!XBbNiCBrQjnH;->MCcej2DU>!A#!*@Ek+NyP$>Il{QPz zklaH9@Ay)-HP@ho(qbwNyWn(5aYx1$E}4F6O6Vm2cJR*9``z!u>x?ChwOJuSzxcVO zEd;DFPri+ZTr5bu=qVj~FD>(uhKHKv-LHF!LtX{UA!{&6!jz%j2F$ zG8PaMf3OBmh*Cq(fuU_R+)C)4e03G}aBz?i14tlkohH9HV z*7Nd1>nt}z;d_VO`3x8;FxBsFdUDJAFX_mYNkL%EC3A7sq~g5s!HuTx&wDhL6i^lV0W)yflM5j4BjyOCI)|Hl}@XE<82VMoX}aIc0Q(9*=wcIieI6 z{}?BIybSo-Fr#VT>6_SMkox$ow&j==D}w76i;zQ#Q?VQXh$E#wHodlkS4#aUFQLON zM#%=o#5#cmH!u09%D-`1Ed*FwGp}@!+*D}MalY3lhZ}pGy(68^! zCZd$CJ_H;(USgAQv=je|wg&k7=QCz!DOxgN1k}j3spd^u07do3Vi*ginsT-;z+uS` zeq@Pq_2%fC^oJBP{ZYmu0;mPdYk#9<=lRx4tmJb*mld@Szugp=6`$Z#ZbZtfYmvyK zR$=<1k5)YOzI3<9^o)+o1?C7 zCi;`R&2$`^Po|GGyo)9{@+*bxI_I=xFVH^DqJA!{kP@AJ=Dqt;BaAN_7d!Y94l(Hr zfJzul4B&$bI5Rb)o$u%yec0!7cvR;%ba$(JLplc!UD({~?r=EAa&FZjky>zcfT9$m zg9YUZnn65x>iyv;<0>sX1C<3*En=#9Tt$T_Dl3+`o}Z; z7A37eCAy+elg`Zn$=4y{tpd!GNQX!+#|G9xFW-LO^J{?l@EK^-j4PR0*r(D#$oz=6x)6kNsB<$5-6VZ3#Krqa;9pV@il9*5x z$G2(ZcBar$ZFWCtPN0OzX`eayH6CI5tm~|tX+@lenJQ6KRcQ0Dp+%;ADt~y^=?HKSj{c^pi zOXpIlb>|^(nYfpY@foyGyh850`v4aeCNagh&sf>mRWoShQ?WF>(;}sN_3yy;Oe6^v%<+h_doi*Stydr>-JHe?ndvEXpkN@5UB^ rQ#``~-wVwB(<+)Z=I_<+QJ4IpgMCj6_-@>oH5hD-l~f3RTl0Sai)U+1 literal 0 HcmV?d00001