From 2c13accf65c25cd4581a1f5092651b1b3b49630c Mon Sep 17 00:00:00 2001 From: alex-gh Date: Wed, 11 Dec 2013 00:37:57 +0100 Subject: [PATCH 1/9] Nuke Disarmament --- code/game/gamemodes/nuclear/nuclearbomb.dm | 120 +++++++++++++++++++-- icons/obj/stationobjs.dmi | Bin 83006 -> 83163 bytes 2 files changed, 112 insertions(+), 8 deletions(-) diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm index 7480555d694..f8894c6f5cd 100644 --- a/code/game/gamemodes/nuclear/nuclearbomb.dm +++ b/code/game/gamemodes/nuclear/nuclearbomb.dm @@ -8,6 +8,8 @@ var/bomb_set density = 1 var/deployable = 0.0 var/extended = 0.0 + var/lighthack = 0 + var/opened = 0.0 var/timeleft = 60.0 var/timing = 0.0 var/r_code = "ADMIN" @@ -15,15 +17,48 @@ var/bomb_set var/yes_code = 0.0 var/safety = 1.0 var/obj/item/weapon/disk/nuclear/auth = null + var/list/wires = list() + var/light_wire + var/safety_wire + var/timing_wire var/removal_stage = 0 // 0 is no removal, 1 is covers removed, 2 is covers open, // 3 is sealant open, 4 is unwrenched, 5 is removed from bolts. flags = FPRINT use_power = 0 + proc //Bomb squad, go! + nukehack_win(mob/user as mob) + var/dat as text + dat += "Nuclear Fission Explosive
\nNuclear Device Wires:
" + for(var/wire in src.wires) + dat += text("[wire] Wire: [src.wires[wire] ? "Mend" : "Cut"] Pulse
") + + dat += text("
The device is [src.timing ? "shaking!" : "still"]
") + dat += text("The device is [src.safety ? "quiet" : "whirring"].
") + dat += text("The lights are [src.lighthack ? "static" : "functional"].
") + user << browse("Bomb Defusion[dat]","window=nukebomb_hack") + onclose(user, "nukebomb_hack") + + /obj/machinery/nuclearbomb/New() ..() r_code = "[rand(10000, 99999.0)]"//Creates a random code upon object spawn. + src.wires["Red"] = 0 + src.wires["Blue"] = 0 + src.wires["Green"] = 0 + src.wires["Marigold"] = 0 + src.wires["Fuschia"] = 0 + src.wires["Black"] = 0 + src.wires["Pearl"] = 0 + var/list/w = list("Red","Blue","Green","Marigold","Black","Fuschia","Pearl") + src.light_wire = pick(w) + w -= src.light_wire + src.timing_wire = pick(w) + w -= src.timing_wire + src.safety_wire = pick(w) + w -= src.safety_wire + /obj/machinery/nuclearbomb/process() if (src.timing) bomb_set = 1 //So long as there is one nuke timing, it means one nuke is armed. @@ -36,6 +71,30 @@ var/bomb_set return /obj/machinery/nuclearbomb/attackby(obj/item/weapon/O as obj, mob/user as mob) + + if (istype(O, /obj/item/weapon/screwdriver)) + src.add_fingerprint(user) + if (src.auth) + if (src.opened == 0) + src.opened = 1 + overlays += image(icon, "npanel_open") + user << "You unscrew the control panel of [src]." + + else + src.opened = 0 + overlays -= image(icon, "npanel_open") + user << "You screw the control panel of [src] back on." + else + if (src.opened == 0) + user << "The [src] emits a buzzing noise, the panel staying locked in." + if (src.opened == 1) + src.opened = 0 + overlays -= image(icon, "npanel_open") + user << "You screw the control panel of [src] back on." + flick("nuclearbombc", src) + + return + if (src.extended) if (istype(O, /obj/item/weapon/disk/nuclear)) usr.drop_item() @@ -119,6 +178,8 @@ var/bomb_set /obj/machinery/nuclearbomb/attack_hand(mob/user as mob) if (src.extended) + if (src.opened) + nukehack_win(user,50) user.set_machine(src) var/dat = text("Nuclear Fission Explosive
\nAuth. Disk: []
", src, (src.auth ? "++++++++++" : "----------")) if (src.auth) @@ -145,8 +206,9 @@ var/bomb_set visible_message("\red With a steely snap, bolts slide out of [src] and anchor it to the flooring!") else visible_message("\red \The [src] makes a highly unpleasant crunching noise. It looks like the anchoring bolts have been cut.") - flick("nuclearbombc", src) - src.icon_state = "nuclearbomb1" + if(!src.lighthack) + flick("nuclearbombc", src) + src.icon_state = "nuclearbomb1" src.extended = 1 return @@ -161,16 +223,55 @@ var/bomb_set else usr << "\red You adjust some panels to make [src] deployable." src.deployable = 1 + return + /obj/machinery/nuclearbomb/Topic(href, href_list) ..() if (!usr.canmove || usr.stat || usr.restrained()) return - if (!ishuman(usr)) - usr << "\red You don't have the dexterity to do this!" - return 1 if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf)))) usr.set_machine(src) + if(href_list["act"]) + var/temp_wire = href_list["wire"] + if(href_list["act"] == "pulse") + if (!istype(usr.get_active_hand(), /obj/item/device/multitool)) + usr << "You need a multitool!" + else + if(src.wires[temp_wire]) + usr << "You can't pulse a cut wire." + else + if(src.light_wire == temp_wire) + src.lighthack = !src.lighthack + spawn(100) src.lighthack = !src.lighthack + if(src.timing_wire == temp_wire) + explode() + if(src.safety_wire == temp_wire) + src.safety = !src.safety + spawn(100) src.safety = !src.safety + if(src.safety == 1) + visible_message("\blue The [src] quiets down.") + if(!src.lighthack) + if (src.icon_state == "nuclearbomb2") + src.icon_state = "nuclearbomb1" + else + visible_message("\blue The [src] emits a quiet whirling noise!") + if(href_list["act"] == "wire") + if (!istype(usr.get_active_hand(), /obj/item/weapon/wirecutters)) + usr << "You need wirecutters!" + else + wires[temp_wire] = !wires[temp_wire] + if(src.safety_wire == temp_wire) + explode() + if(src.timing_wire == temp_wire) + if(!src.lighthack) + if (src.icon_state == "nuclearbomb2") + src.icon_state = "nuclearbomb1" + src.timing = 0 + bomb_set = 0 + if(src.light_wire == temp_wire) + src.lighthack = !src.lighthack + if (href_list["auth"]) if (src.auth) src.auth.loc = src.loc @@ -211,14 +312,16 @@ var/bomb_set return src.timing = !( src.timing ) if (src.timing) - src.icon_state = "nuclearbomb2" + if(!src.lighthack) + src.icon_state = "nuclearbomb2" if(!src.safety) bomb_set = 1//There can still be issues with this reseting when there are multiple bombs. Not a big deal tho for Nuke/N else bomb_set = 0 else - src.icon_state = "nuclearbomb1" bomb_set = 0 + if(!src.lighthack) + src.icon_state = "nuclearbomb1" if (href_list["safety"]) src.safety = !( src.safety ) if(safety) @@ -266,7 +369,8 @@ var/bomb_set src.timing = -1.0 src.yes_code = 0 src.safety = 1 - src.icon_state = "nuclearbomb3" + if(!src.lighthack) + src.icon_state = "nuclearbomb3" playsound(src,'sound/machines/Alarm.ogg',100,0,5) if (ticker && ticker.mode) ticker.mode.explosion_in_progress = 1 diff --git a/icons/obj/stationobjs.dmi b/icons/obj/stationobjs.dmi index 8f59c08e25092155f20a067b1768477c4dad3092..ad68bd45917f0bbf783923e41d9a010b5cb79388 100755 GIT binary patch delta 19108 zcmZ5{2{@GD_x9Mbln6z(QTAjhYsg5lBq6e|m1N11UCc|UlqH0+O~{gc$r3SkA!Ogz zu{L&w+2?!p`~Cmd_kGtjb6sQ1`@YZfob%l0-1j+8(_6afD7p_qR5BI9JhXfTK~sL& zbV>8QAIdhnc0`X3(Sa1sgL~DxURIaFt4wL{905E0b6O#51f+Jt&JQt8UKL?ssqg5w z!pCemY?rN517b3Q68}78Os{Sln&FH-~0Vci+lFz)qypPDqM>@W>p>$uR0&s zRNDZxsgB9a(7#7fI?2H1d@TzFowb9CsXapZ?5aNP`}BI6+-0}a z=&y3^`Werf%brKn(XpCFhUQ=DL$1KDQT549;@jw<3-9Hi1_^ZEJu`42;mYw1>&e1o$mtwuf@{_KNIC?f73wpTc`#I7@E<$5HO1TgH2? z{WPil>4ua&D1}Nrgd=}$Spq>afZ=K_4tO3;cjsM7$d+fStqbB;s}q(6uv%J+8x04$2hY#??N@QG}*}!um$GMqC%}{Y`Au%6rt< z{L8fo$uPS)vh1X*%QPCJVy->XprHD8%L+kd<-UkY@Sc_P<^{eI^f-Qwl5kqS7*$?n zA4A`e>xaJ~>L;cRfHgd{Z+TM{X2I%ek-MuJmz{l?sjg3zy-r$E{CkkH3bjnEb$T~P>^g%q zr>PG?%hnOLfrbi6(}P-}+uwYEpakh6!U5yW$czLxj;3W%7|t7obm>quRBK?$8e(NV zlU-J3Fh*aVl@;dd;jwm_iRnq-2gMmr8i@VQTqEOgS!cOH8zG!tP143EF5$Il_fr+t}le&ta(0t3i8YiaBCkDGQK2~T~Tok^wf!(=RBsP zW#hhk)%ElDDsN0Sal7p4<%bD?Tg4+5aTChVe_=<1Mm;$=__$$y1;7s@USKeonW_P` z-j}NU*kCmas-TS_;XV;T1;wS4Z>7!4A#Yfq$&LQ1`1v5T{{f7B9v@V^!xeF@Xz2ip zsd!`^xRL~kc-onlCqhnjExmR7Hb8Ub%9Vu!+-@@s%kEWO;;<{3L$KzY8!ncwZ$N7| zX7KJ$bJphOW{85@M6<_ieNq|>Py;XV#Cj5SX7~QW{I{(w$#!$W7mmsEFNT*Crw5X8 z{754NGCn#VZ7?GslpH~&kx)(7_sq7Q?s-gHmKVm&Yj%Uw_sr%6#HtPuezf0V>v{*@ zoia*7@oj98^6qC8x@LU5hXU>2jj*8%0wlGaMie^-@RT1flCs#ZPi2kkSP_$upcy!* z`&(FKXkihxxaa^;ml2Epo}uDjswDGxM2%?|G6y?te+myfOKnEu*T5$=KGAn`;-zRk zw2REFUgb-w$aO>+04*LuPuHM#k$=Uo4>9P$Dg5HVRzvR81T)mXt6={GjJUqP4GmAbOifK~f7+fTVMYzvMpEEjb`5~v*3xqYp6%f05HUJi!tf(| zPuBbS?EbU9ob(I_mn&bo8~9KtXP(pA+fX|DC9XYN#2RCG!X|NVQV|EZ;N1Y#pQ_GF z0$&d%FL5vlpPBnhHoY;9vpOQlA)5*q!-iY+RS6A(nxqqGd* z)5cnG!r)U)_=i4j!&d^u?+4aU5?8Jmnwq{I95jNk?!epJ8I`?P??p#Pf2plC3qAvZ zBcblKRx>I4O_PxJ_)V7`(ojlM#Kv%bIB~hQ5a>&lPnN0`r|L6??=_Z1AAWDyM9ibM@r|`1`u7}ouhUL#Sv?P6K)FDb)Hni`37Bt9V80`gn^R3DPx~3 z&)rpLd?mmDzHV214uR0#S{BXRKVOy_a^|VVo|PcHY`j-5#q{8%DFcaSa_HIbSOoFM zfibh#Emm%Gc%cD}nDu3XMTMWu>7@f+HH`cC`nIgR=*}Cx1o|sb#xhDfg4)}aM24u8 z@cmsp+!&rfQuqQ?`7;y1b>C-B4o(f>eR^#W7S-w1 z;e8DvqxTiy9F*fSvl?v)bcw618t|N`z({&gn(*kvF05C zh=Nl1D8~(nEA4~L#TRt()*hDy4)hw&2$Ed5Rsdir3OiBjPRAeEj>V3b(%A-fOkhX* zkrsPv>jV#)h~7y>s}RXBdEwe3R~;WXH`?% z)%csqZcNd=E0!?am+GpoK(eWTh)JzWT)<<$~m5|90VClqJzEL(W~I zb0E{80Bf7M{<{&XYtl!OtI(X)m^@31gP#sls~Cerl(z34j5%>yIM=>ib|*F_}NJU}lX^!A5lYH*V+h0U~jKHeC5i*@q$ zXKP{CR~a(8I?+$|iW=Q>v0;o@9BlvB1j@|z9Fx7NpoImax-HG}&bqpd+g}X@|H}e$ zPL)*L;=(j>s@KP8d)TPPXt`As+K5*f9l92dc~DMbi847$DIyL-jtN+^0M%eX*Ga%PO+cdWC`RiW4bMud!oJti zymv3SqZ?&NcB~d3(}Ahb7hf29hTK<*-miM3eOW_n2x%VZES1`3KQZkoTUp_Ptx1u>8j88F}wX$x48}@5!+&j zyzJLT)Q)qBrLEN@o(iTcxv2X$l3(ryb5QCwoF+W&WLJaps9As=df=1nvB9ogml{WH znp_~;jN*@qLwtwV^n3v6^5}wsn%e0!qR`RnF>XMcw(v#LZ_{~FcfDw%bTkyS7RbFfK^2_5enf3 z`raaNF<@HVU3VRx<4THt3mar%Ey2bVQuRG07RzjIZ)=FPgp^%;XUr8W#HV zjL=COh|^O?PMO4^Q>5RZQ?C@8SJ1}=AA3|#W{*9)GUnTtay5qWt+{%;(v(BhbYoFe zUYg5N4SWp~kWbLsxTFwEa_XN(rTqqoi^j1C26bdQ2$ZcP z9eyGBceZEm`WgoeT8q}26F8NaIoEASBawPchBbodiT++K?h0~=9+X=DUkL9 zhN3X}&&Vtf_l2fq2Bq(nReNQ43JU{%P{9T+Wu$ zegb?W-AKh2EA~6_wr?lk)o{A}6{ILVxtn*3NQFD8g&gAq{0^)C-W#@=5E-n%6d+An{7T$vJN)QNaS zsg1Q`=yOG$e%ote)I=#-B=`^#h2L)&%Fo6tg1!L_DQ2UKV_LJrD@}SIDP{b33KAy? zkpK9YOYD@sR!R>ul?b4qT5uyUI8Ue$XA&;#I&RWO2jSgOi;^C-j+4E~DdW28lOBko z&g&zqk~gN1U3SoVdZ#%qE12u*;e_;Z#c^eq#lf){F#%Kc^nTa$fYbW?Yy@hcYpzy> z833*J)c-f-r!M>gz)dcDz0fRf8KixJOmyFNEJRJm*uTHbz4>r zP!<-CjbuIimaxNEV&743Kc$V0632mnWhNjfP+cNR7tuK#r~+MhK6S6Q_Iv28!k;a_ zuA4w0=2kJ_>oxNrNJV4i!4!S$`BpI1uNMCZX7;Ieyb&M!rVNCG5(oOy6umdi%0Idm zuD?}@yAycpZynW-kndw2>T+!N6Vx`@6CeqfLf9q8UC2)WoD|}<&sj)LdAP85~ya~A?+NO z@0MM7hyFU9JGJ?#l7fp2VA*k4Jh*TK^r}*-p<^h9DX*`9IAQPv*BIB_~R9PQs#S z{r}L?bNahM2?h#gY2UjwZvZ?E6FLr@!h1h@2pBn3;VI@)d>sr4zLh{5?YHWSf`)u@gyb zOs7yAJDQbOG%N6c}*NUDnp{~+t#1tvJ97zgAZx` zVuEl__>3lFw!8raG8g`E9)Z&XDOXLZ^A4=-`R?`Cs18JtE?cm)OEysV> z!D?)zh!6g{xL~vFS$*Z@e`=qTepzY_izixUYIZr&0kD@+H)EqV%?`M5B-v3Q-!sFZ z_X(Qu)gO^X0U?mSHdsqx!*BIHpWrp>b70s8c#eG4GmHPIz z(c5TOZJSj#R3*Aj{ro&%?Imc&d8UUcm8s*!Wqd9{IyqSMYu8HODs5}vk`vlrC-(7W zg1-;o_re!OzJ?@p!B)Sbb9))lP(C^c2SPcwK2uUwczpOWbyU6;SA~|UWx;bp zjCULA>z7g;z?2-}K718iKc{Y|%jWyt{1R!4{#miPIGcq)^sOo8aB{@KFzt&BpXbTz3eVjkeZ=L#!?s{a`U>e~5g!r403yQR) zuJ@B%I9{786QpV!lQ$@)3h^G`-#o%8IRn|^d>0X0%ih~FE|BK##4Z_sclkN=p@TyV zeMiUR=^GjMef<2MHnM^)(Ctx5@kVeGDWt_~!P^I;O4ygs3)08-4|KEYWm)CmR z4Y|g3p%y*rvJ}$ZaJ{kY9Ur^TQkk@gvp*$|h!fqjZ zAk%&R-2F6QU%U%@adZ`855NO&fD@~?d&&PtoBv`FZo2%IEj#v?AVfd}x@`{eW)Qp^uZxqI2<}u z7@=5VEsh@mUNE6|>Jpve(5n1!5}*J6k`pntM27NlwoI&QCyquN}QN zm+Ir{4ea+`#1&h(fttAZF-?i_@5q|+PWD>;m@Yx9E2m+!;S=Z2WQ)h7a-D2uRF`yP zr_4m0U5$wdVtu2fKa;;$?*V(N>+icwok^5<$nF;BZ%i7ko*DsAKcCwZmb^{6_zG9=559aOL80@c2jre zS$tNh>-C@T>O5QY6Z5)9i&p@HN*Px9lgTWc^_KjnGttcaf4MHl%m52pOKHQVZa3%f-j zn=`crRU+R7TQD^Wx{jf?3dt1KG|Kjw-Di$7uCH-x=~Qa+-4yIqZ&WEx=TGAR+xFnLfg z#VaCggeV3p6isz?N~OCrp-YdxWVe39)s}aL&o=nA2*#)+6RB94T7*J|D*vVgbO?>; zAUUdtPcwnn7HfzO{WUv(V(qLSkDa**Z%QzAYqjH1@#j?Feag!}HQu78wqB7_rBr~> zHoGPIMF+`|-4t6zC6I@O$xnJbC3^qH&^)e2xXjqtvCvM3+VdRI!vt0PFT1RPa<_bg zpTGZxi;L3N$7y(4@4Ix=mnOYWVy{#u)EDvRCn28W=Cn>)+sAaZ9JO;E#>VV04kibN z=9kKkOdc35YQ}Vh-$$_U$I&-E2D+X^LgB>6a(x-^?Pb2=$;E`v<5!WBdvWwIbp()^ zPC0=RWbigGBxIaRxXP)o{p&>YFR*m*Xu#->ME~#4=Kh$`)N!bKK~#@LjM=N@H^fs| zcA+cpTxXS2mrPxkcSpp`BAJhdRdhUwW zH>{w$J)Xmg`Zo0*5WaDa@#ZZbe&+w3DbEg0>O+ZBNPl6X+yT{N{gCOjxi*`I<(wB8 z_hW?AA7CGvD0%IF4Mr>vKw$@!D4lgD-A@+qDwN_hq7{emT1o%fx7j>Vy;4#;*BYZZ zC-(9=xXYI|c`JoXfP~;e8-NRps2}N&K4*3I6QPir=M5|qr#7`^L)*;XNkX_^{7u17 z>5s4oJaln&MJ2E%2R|De92G`*W@e?owN(~x>fueAD8Cc}B>(zV79F3Z%Ho!Bcr%a} zu#UNPs@VF+bty(iPC$5wisk(IsV-4>sKlZ9ej8J3fB*dvU}R)rqT=zshM^HQ9)=|S z?u`v6;&z-u)J98L?oP-@3L|qj)T#3LQpd7!eGspS9>VCM9>rDnhmYjHfDawH zw&z@|>coEsh%Ww_L+^~AH%5F%4X`nz$D$%>8nDMlN1Yhvqzmu{WtFfz5&LnefWo2* zbZKG%{24>2%(z|5cW0K?UzVn$y=UN&zSo;FKeT+INoMcfZLT9IgE7fgY=XZMY8k z_Fz8aldidBfP$^3GTCIw#Hvid5xC+da`)pf#_98GUo;q^5dnKJpLJG<{gVKlnhYR- zGbvBxOX=BXF0Y0+G>4CV6qJ@~`TEMcsAg8Q>J1&%z8sf=s5=$!J{h3OVpa9q{A7;h zdoOHo`}Q(41>W5xPfBMg-Hb9}Clj3gq; z)3h4xQKWB?C)Drg)1qHoW9L}I>?%$oQj zbjxpNu@)8;onwk@UwdG_Xl7%hPu|;1*;L_R`bMyjoGrCc*Js8Z%s?6A!0HbE3S=>L zZ#DB~HniECihKGLt4P+))>a1*cQ80TEuogunqW{uD=_|PLj-^mhWkz*Vjbnbfb?va zK-%rPZo6`jVg@y_!K(nutW1$l^lEJ1^{%kFHh<(~*iS@0U%S7#HS?x1gJ6Qt8`nc1 ze>laNo0kh)NjriQdBnUfkXFvIKfNwLI`T!_Z;eCYOW0_$+;ha~{9#4|U-?uQmxZYF z0ZoPsO^>^lC>+;J&CH6%nxAway>b?2>by29;>mlg$bH_g=s18Rd`KVu<2{TI3F@vS z)Frs{rZb$3PL^b+OoU!`mRvtc>|SK1Vf_FV#>zHyA;MmHCHgb|6Rb;7I^VFV*MNLG7N_*D0u4uXE_B7#xHR=M}f@CrzchoV5!wByY< z+jfrIw*21fHI{SBR3Co;bCi{gxQ~g01DW#1yoTRvy`k;}79vuZRu^@%V)Jvy+(j21 zerHH{6iP_lPq0VpKrEQg@Cd~}M8?v} ze{&zGL=SvTX#EN+Pi%2fPcl}dGQ64Rc1=d+gAdPsq8+FA+S5_#G7xM^ zv>K^8<;Pc29(>0`z(VbK{i<{9Sx0t730Jk;Zqb)zFT{n7pnv}Ub?L)ai60r zgwQ+;>cOS=bVk@X?A5Ij(Ji4@_3FsY@MH;E}En_`TU_!xB$|=Tm?F^4ZQl5 zfox0Dv2Ea`0wWq4h8&-&ZOV%DO6{D1DvHv>)4R%Q~)Hjv^n_~&3UR1fcS_p>pLDas_Rn!QHm+&+duLDV$6KUF+R zFL!=!rb@fk?uK*qi_BXVRgtl@tPtgprWvfSQ0NT|XczClP1iPoUap>QG{Q4@Pu4x^@|?TBk5;JmC3!hT)jO|A%#I8Cuw4{}xCilZ;bj z)c&f4fm~e9Zd|YOJ<>E7OjOzP1B}{GKGbQ7rws~=BD=2WhjcR`qlwBQ#{=IG9an9x z#CBibqZuO-sc^uJU!bTniyr8aD20^PUH*nhFaS+{cI^PyZk6Q>std;3o+ULbC4d_E z^^He1J)pAC5%bI-31mdvIl;X{GJjAFSrT=ANYIszw*fiVNiPj#gbP7or;-c z^8Ko~Fo6e=Y=)0Cc7LbJ-`HwPh@LGnOZ!V1FN2SoP^_4l^Y9In&4GKExKc~ULSV2@ z(Q1m)=sz#tx3jUcBPRHTZQX>>Q!yz)mCwC_X z42ulUG*wn|S1mcg!FPJl_6=haLAkF4GMDH8bu7|g6pJ4>>=PXgPTf#!SWO%y_66+g z4ild$P~gDMtbd@Lg~j&v<4?4v2hYZE`KbnlxZh65+vrGZmR@?cxSyAiKghujsw2T; zpVuk132em3C^EtzHDV+m)z3eVP(H5$Ne8eF#zYK^B(6musK}-XiG`@meP?XqQ*rqj zDoz)_4(#jltN49dQf$+MhZzstqz~TE%fofu2Kv@!^Z0MUb5cWtKz69V>8|)g;GYn; zTOfRES#jKeHRuLqw{7>+r_d;}C_*k*Aaidy5lor1`^@;^6CS( zMkn_`o(@Co1~sateN`TOGOFUY`Aat%RKs8g3*nv|7h2&IP-|@y6#RtwEepIR+-?!L zJaE&gaQ^oI=oTkx3L?|al*Z-Be$FYdzPZM3D|vSt3V}fJCk6kql(NDXSqCljUTVpq z54VDuAp(4HC?92zBIDdB?AL+yF#3h!g67ZqY4Vif=dA&?6Ow(>8lkN{Qzn(tE3D>scbjGFm{4`3_u)U|0vWQ? z>KYhsRQXwe+r>wh%?d_;R?xmBuHwC~^k3gh;Upxj?5wled5_0t+}=n*#K!;{|IrUm zX7vL>(>y-5s(_>FOh5=a4NyZ?Q-Bl{m|Q|2`)O+f`LrKHaJdEgz_+6nrziUcI{#5B zPqampq7YS*Fs!93^qn@de)E4gu4b+?`E{<|U=2X2Gf+<=X?;A1iR56XoTU;wWmuNO z6Q22hKV1d6s`_P8>mK=@#yxTq>D3Q-qJ6g$peDFwN1dYQn|73(96_NCQ-Axvb4}Y+ zB;MEI=>?vBe-Vs>A{+~0#;Uf`Wtf!bDdXssB;?Oi^pP;gdR@RdzJt{))Y2WLjQijV zR3!)JhO+CC|A@ubD%Jj47VPN1y6b>6@>8gvkFPV?@qNq+3}|1y;bdYb+YZu3H?j&E zU)3>-!KjxrGt@W$yRxk)-txy?XHQxwtTUEN4L473`Y2P?@)VSDCSUtbW_&p3vE1@p5~_V;~&|0%4=I;G(CC9<~u;lQZ&j}{*f{ZK{9)}G$6*&+FQhu0Ayn)uZf+s{(%k<2OyOg zzU361_8%Wd?N+uyLg@$>7Mh;FsrbHRJmT{G7@eD+udRSjy~G!B8}3c~c2;9QpixyX z+G6PkhgImiQ`kzGfluQS$Oh^*3nMBZr8mhlB7^&1&k|48hd;;d8$KeN5&HjYd+!|( z{ikZS)a-fmuAV&|MaTVs%_XbYH?coV7k)t8*wjl7pjN-*7dwcK(f8yz^RD*jksTfk zi_I%+D%Zf;!QjxWWK*r*)c3k5ui1*#Fhj8ju+yr}TI%OdyZ}(R1bmN&*^%587mgF> z3r}pN2MwJSaoZpM?;F0pr3szbq!O&sz5-V(3Pvxo_is3a0=CQ=M0M z_sBBa&VCaLW?@D5*>90mG4#~xn@YbtZXsz;b~SEgT>f0+WH$@0%K%i&lmxE2Hy9=b zG|1T_TR$Q@xi$`OowQcLZjqGnUlIUn!s8Dx80oA6tJcnzfEAJakpL9|?!te8aLHGg z$*-ph$l74pp2}YI6<{aIA()3cNJ;SrSM^sOzU!S zap}}EgP5GJArf*EGxWeBNr4lRV;VKI1(_j-Knru#{mr17`HZlDDm@k zSJ@#CA8=|7CW-)<)?h_@X})AxED>zPNerO?k3$Ug3FMWYvSVTqR&*IxJB5)BM+0gk z3J+X5K%nY|7#L1~fB-Jh`{{p(y&MX-tyFdOrkVQlp+rt|J^xy)=pE%Dsjmf+?jFv! zvQ<>tagS|}W@M19t^vfm$icm|5ONY6)S{kdQ1cQw|u7j))B9v98CdnY6wray0fl>9S}W`___JR8J>eu zBoHM?S_q&cP?1D%8pA1~2_8qsas9~ODpF-YF-u{q(*$N-2OIzzM|Nx}bL9xG`E|Vf zp7^7!Y@Md)A4Vr_G~z2uq3js1+xq`?>j7M_8rY_1>kn<0JF(Cw;)i)_N774{ z%RNqk{sXU*ylbHGq%sGI5E64WJ)Zyw!@#W#vn}Xt3H(DC_%BF<5D>HXo)K(Q{8!K7 z3KP#+_-~&h8q8+?^R(X+N zrKW(FW9UO7N{Y%cEdPN$+5s%$Jacvica|jjqyoo=+6%xY&o{+LTEXK-NeYVd^bn;G zyxh?aK+g|W`1GhtmIuVBF#ozMKT3|)=v7C-K^ps+H#ypQ7|6@Y5v)#yf;ngp92}U$ zW&NfLl9mb8Bz|QdNVECA@8L5}T>LHepJ2o*DzsMOIP(r&SZECiO-QKNO26-9NzyEO zbbMhnJ2zL@x#YgTzyFoHC;Js#IIzz0z^mx+1~lf8PXJdNiL{Vor1b8+k%{HIS4)>6 zyq9xw7yuTQ@HnlO$*q&b=xJ^ET3~3(c(|9sS%n6gqgT|P3OvnJ64W2<3m`P!C!QdF8n6U|6YH>8unSywnlNH)kUL9RqlaN{b%v*( zlvb^}pee!os#@AwGM;2=tyAtXE9?^}d8RfVCHGzHK3{Qfj$`I4OQDWY=ueTDsC%tq!br3bnIxp>v! z29={c0AXCU}Idzxr05{`x0HmTK*|PD#{TVaVi{ni{{~ z`Ch!Qaq_WkGRRTXxKgZ=e@Nr566>!C7(fobYE#caINlkzzA|W8mXe}}9i;ha*B0z6rRgDV`A->gScH3az=^=2Ju|N*T%gZsQ3nboueI57YYeK|pjY|;L z(}BruVkuyJ+wOg^e+mED0Ht*1z?GN2!=v2Ji}yOrn?O>3E&nCUkU`d|zr8zAlwB%m z&q)>+yj49eSNqW2|7g=JGELS$Fyn-6I_^V*V7RG~cLe9B#*6s6e10*N0qI((zSwY>vQi3-c0_2%`t znEi4Urshc{O)YJik?HrK6J+UTtQi@a@FHbnX`HHBp0ekutmT~3)M|UH)w+5#g+p)@71NaWSb&lw`tke!&yX-XE$`r{so-k^7TKh!la9bQ#Z4QK7wF$@wprN z8r2Er_QlQ*Ch4Vk`Z7Ux)gr44pq6EA0Fl0J((z22*_`KX>#Xd~S9GUY-;VB{sx%xf zTJhhRWUrkqjXce~M`?Qugir4TGBm}W{eCZlNi=kJ+%9esLVhx*x*sPim)p>p za$g6k2R3Tyeu_9neQCDo=O)dwn)!CMw;aeHdrnjIhpsP=m#|A6mCIE>f2z7Ss0)Pl z^xPfAd=|h|Ee|7K}n_vypyNWjr_ zH#A&0^mIMvrzNL*hX;1v%ORUhE=#x@JoNm$TCZQrC|^IL#&$=JR|^cnyj?A}mhUQ^ z?{nPGJfp_j>1hYeUX(HC?mkd;s~{sDxp#Y&Pr5CA$$6&qN=Jz;CHQH0Wv2gPrYz$k z?R5FF1n2U5N}TtSRWG~9m*O#FODmu|bx!YYXzY8=j^`F(V1xVUJq?;L)+-Vje^iuG z@B*pR^zloIwJeqKA?m%h0bztSfb0anCZMM_%67Bb_jC5)j%D2+IT++S@`xL+76MgN zjFlJnrKt<##aDqUi#O49k7b^2CfNHYFv?=Ow7G8aB!TR-G{Din4e2^42fP%rL_V&a zyU0fejmiE}%#rAHPrLi0I5-O~UhdXIV;klW;i@S&Hy;r6B>MS1xYE@c^?$>jD|q^; zD8=UwVl}&tc%X>L96e;hdH*JyfvvxPI&86V z!GCk2Wox1$yeRQE*kA;R%Q3&xk8rQuym>$0_?|{?`LeO}x5HZ>9WI zj*59{I?9kNmC;u_%W7E)KKc+skLJBuDAkQG&oR&%nwg1;07*$n47Air!PxRT)qq_A zznwYBqrsmb?#XUbl78D^mfkPzFSLY;Y>=(`clA9(@H&I zPXmoAFwF{`;Ra2b+&x+Z{34a;Xp#@)yo+q)At3LQ*8x2k6V+Pv$u4L!Ey&XG_#Il9R zrmtS^!NC_409PGMb?{;SyHqO+;Hj>+mdEq<%|NmDy?Eh$8IMu8`Yov$WWr@ zSv+acGVUm-C7Kyjyqb>=g-# zikHXkPp(rdWC44ROiod+lRFg+8Q=C=<17{>@JJ+ATN2foc?`3OsfIPEf@)!rNbhS` zBxvf;H(Gj=Uw0tdD3n)Ak2KvBCN>ouOkV0<n&kSK%>w?N1_7fhZ&4NL+HY{#mgYrj*;{=69UNSBOawI2F zcO*J?8Cl#=*`D~$R&J6A1N*p2E)@sWUTYe<%nT?;YXjEQJ=-qJ#RaVN+@pc2KjoaC z$bar;n!(GvE*ujU{Tl87;#T?e;0n1lT7>Mf;hERNb@t*=Sp7q%A^Pu|k(_nS#s+&s zaBJ{@lea*^$F?^tH0oNB|FTI}{Bu7Qt(I`qrr1@B89kvSz3~_Ps zmgZ}1$gUW0Rh;VX-R6!wLuyDYN~W5i)7H_O5(&?uJG&cf!u7?(oHlJX?3vuVuokM1 z$>6EXXACp(wcJ>A(?}=H+lV%rT18H?;;Zt0CeJbm|o? z2SE;X6-T=y`q8Y(Vk|}0bfK~dVfmKe*WfFhB?qu9E2Yto{@qKHVJRFuIB6i`>ie}I zqxB}DDNLauWHZuySea#E=J!DLdBlxj8IH4U{palip3u_e3X5G8KevioR+>=akvhh- z87)9+7xHSJDS>d^vb&;o#-{1&Tzw+5=3OlTPs?fxOXkM#P{<|R&}}uG@vXo9kjEi6 z8-V&{+0iQQd#24`r_GtOua{}wJ)$eMq};E45}E)i+jZUv{nVBvEa~672cy*j>WMct zK@VBGMHIoyZqeLjrFD=4&)iiw^M%TUsdlx18En<0jIvxrm?6Uvm?Gv>;MBGhIFgcE zO$}M~L?Un8etwp|d_7M=VJPH@Cu>^@Anowv83VZMd7Z-hj6z$7uuOnc6~;unj!batX+Illu3%Q+r48r*&LmNp$YnU=!S@`q}NebNiMBn6SiB*&LQf z4}ddZHvbH$*`_l9$Hy^P9(+pI%8f}FMDX2TVt8rm=07XFbta~h3f>EVCJp^r$3)SV z3k~!{aOwC}nT$}V~08qNU#u_Yo)ZhgR}VEjQjTX#TV5Q zQ=1kd)vyMbMSN=ebj7k>Oz;tn&NNh!A!_v171!GrHx8-vImhTd^aVnbd+rY71xhFD z<>x%?q3!Zv5K9F&87F|>q^PTmNWM5hKNXt6!s@830Bc3;4hPG##W?uKR?`dsYP5W@?fogUL4HrKvK156K zT=Ua6v+gIc420#2Ty>9cv1!lg0h{s3qy}$<;kR>7Qvy2Qn>BL-A3V*l- z-0#e1?8AJA7vkG5gr1)*K2af_egr!?8g&Q@k&qFW!*1DZmh8g$X0^AMJ_Sho{m=M6 z<3aCrV0`2+Re6JV!A&7TTiXj~%@P!T>&%g@mKnd2Tcu4XtljAxhbeH-v#DPM}BILApHW*^tmj<^0aP=dYAl z*T54yj|gK<&B;~?hv!J+u+MbrI%M)voYO96!g%V9vqL1|yW}BE)nl1qX<-{A&D+`W zo41CH4sp0Wf_zByVGz8!YS`vcrF^hUKXy$=ZDH~hEB41u>l1;^%xZ4Duz zUB4C}QV5kdWbd_W6Vnn3gVVfcvv9$9xkCejbz0w3_H9xV=*ik)G;|$z$~iAwR=#pi z3Bb+VICFf=NYcB(!^CvjXvv4kSmw?O3BQu%Rvf&XxhEZo8y0JxWNi7Nwq4hk|ll0+woGmK1j^| z(dZYTsn)=@Su=gD7_#km~?9ybM^ z&B#bGG4ZgR0)}9vSBqpdz*^1wR5<7Dx6#qBs-{757yWAJ0f#~6ng0H6`kPed50U)S zHP6B0#R>|KzV%!A7Cs-Jn0PxjX6iOw!(8-tTr}gQEIX1LcXH6g;<=dK<;k0~linK) z0gh0^Q+lSkgva2S6#LqNd1YYw?2c$oSxXTbzl|V2C?|O01$`PVYMvTh(IpD~pR4FBRK*Er4Gkjc*}vg7@si z^Hv}I^x3e%c%#D%VjGpHlCtpuLv?m}-# z=TujpkBNzagpQ4A0~JpI*=-9ZxdZw?bwO?+k5P{yp|8h=pLJf?3v_iYs)NZ-@P1l0 z@RSZvc#xr=CX}HjUdmEHUBYb$XusKBmUZXXX*_;4z?KTms(~}8l*rw6Yj16$OrGT% z71`$>1jQSGe2D8OS8MJt)uByY=>P*Sr&?aqhrr_dPZt}bUl3$^wgf+2Xo?UI z=ag~WRn3dFZT+}-`jec`Imd8LqX};&rAa!1D4=OEp#4cL;4I=t_SZfm^S9Z$iH1w* zOgvqeR8^yQcgz1)=p^QW^QxfhQ!4j4J;m*mN(OUU{BT4^N&R6qwL6<73bmnp|P~*_dfz*jz&JkSS`4QTC^QO8G zHBVQ|wpeJ+7gmrmgULdRjvXvp@c&F%LRPA+{%j(9Lb&Zbls(ri%vYMMDcjL_5E?JQvK)dv4M29M}z8RDV&UP4Bz1jX?v` zZrM4p8QZp7%WPonGrhsCmTbb%(4W-7{$`!@EiZ5HhKC);1Pf<*hU|Lb3mmivmu*?H zhWG50kjdvWCmk`1-m+!Oi+>DoCnTkXiZ1&9|GM zc_b8&`Dts$#Yt;A`DCpa5_EoA)mLrtF120_9+YfSP_x>^5;Chs*6xcK@NgGx?MbZN zc`n7DYc*Bt!@fYQj9@fm1ZJS*gNvj$t9hyd8>aKYPCcY$0c>0S`uTbPLEuhvMuy&A z-^i&iJpZkE0~(~{XxbpeH?1c1khlI`4ZD4h`|^+M)$`pq$FE+UK|zFzQNsJ*npaST zQhW{`6D~cyv2pQ(O1V_q_m6(vmILYQc=f7sQ|^+J*I$3tPYnGnyXpGohwKfr^Zyma z{ele6u5k%dTcrQGQv99eWTCvnlh(%sUi-Xm<-h)2{}Z6jREjqM&FKLr^R`R^jZxME z@neocks4qVv3T*RQ#T_g=0dtx9IHdLwAa3aI*MykrNdRBwJx2Jt2j=EFMh@#0}Hb? z4l%+tdds;kO|FT&3v6%!fgfI9^*8RWIE+&3* zh4i$Vl@q&D^ugn-KXB1`?d$}_NP{MfzyFf@)6M1pej)P$Z!EzS1yhD zC7KDWZZdLnj{*-H*|4f^@4B7(Yu}x3(PeK)tG~hsT%!4-=#>&Um7EZ{Y2pK{R+$-q zqn{Unx{n=mWB9!><-btQL7|3r;4-B>tllZ-qobo!e+MrzWnXsn@5@U)RyharVy?%` zTN?`*h=0$osg3uyEUg71Dz&c~4YJAxD<;U2= zV_Sg-D9r!Q)K&QZ@AuE=ZL7Y^^tOQ0Skj$G49Au!om#39_$jrt-b_PZ-`()s!aaYw zVzMB{83AMBY-!UJ9#BNRxw(0VRI5exw>3B0oxo0=IAMpQhf7@$@Fa=7*LxT2nd5c{ eoMjF7{j6W&Yh%-;ymAi%5O})!xvX<|i>4Wqn80As*^WpM6dfi6_MN zbcD(tnKFz$zwJKfqtwb*)c22oHU3#m|5g0n1B?piin>FdWd!4n;+quT2t9hbWMLDF zyxHsT4Jh+?8-)@a8&tJ7GD9Rn&L!!88@aWU6spo4YO^3cP2(IHEf-u8lN9J8$jKHN zFVU^Y8lKSpkfY1<)hglkX|#=|)bP5jh4<_r_JrG3`rBaRHE%>IqNdvjz*M#R7i~T) ztA}^H4HC0XCi0ir1B_47U`S(#=G6=LuD-qp{-1S$I*0;%^Rn5GJB+0%vmRE}3N_J( z;JS4YZiMdB`HnZYUEgDW|E6nQkR%{rkog|5QVx-?)-o`WC#fx6=;lGE8q-^T@j_ph z$9IEl6W~RR!3K-ttpFV`nXr-nqp;I-kGJLgxOi*qwXoZcQ}0tZ6$0OAF#+;Nv7EB1?&m!VAi`arkSHTlG3by9*;#9#72z52CD9L zEA;!~)zO_1^hf%))!k!zbASM{G^JF#L{l}cNgbn&8;U`+1OCSib1R8k7}v+D$QX-w zb1HRY<-Z0v8{CLF+*~Ih_5pQJP>_p!@s=g+^MZS-C|#jXur z<6wv=Jw80_2JGG^L*bv`Bup~F2z6@UboDgRxWDuadBU6A4N9NG>HH{1~s}}r3x%>h27MNcobO)a;TT; z6JM%+1Uqbpuk|@UcN9qpeGoY&Ix{tOPTpf%H0hQ}?}|2 zp4J$`vIxo>aRUyQW2e#=+h;-2$vo{%hH4oZaYD>D{}wFr%}uzeaouNv=;uEERiK|| z3E+`Ro)TAM=^&Z7^6%d%+uGW=E?-uc=j~M5YYZwy92T(;mp%@NJ`%e^UM3I{2}e~x zn=>3=6MRTsf||B>P1lg1-ABlLr_y`QBv;ZK0n+=G;o!sLSp|glJf|n&-qE+IBOfC3 z*oDKAB-%2I=@IkZVn6kFB`G?*v>PNK?wqqbkf~?d010E}d;SW^pdtnNj3g|}%?>(U zG(PzCGK1}nco9eXn%=W#fpKwcuK)fP=v&2q8vH6n%N+K!^mXOryo-Fh!WD~huE@wp z^U6uKBb6aS5B0=b)E$aDQ>CGai*lRTVy-G*{N#SB|> zOS|Ab;1dTe!ZXsVgrvp2i>QEe}*)K1SIyq*?znb#&!gR#w*H ztGAHfaWQ*-Yf6L|fM8LQnfbwY^{b6nOcxb$P((}(`l>#A(z1P3(+~Xg$0@S?9H;}2FV<-QM00&_uf~#~36P3-WbK+%>4m(7@2tsK{CIV*VTPRt$wrrGcgffSa|cqPjv<$6P2~u$jjegzrHv!nW7xK za&5k!yr{iA$azjuS~@r>=@MeP+Hs~egi+7HAfzpfU2F5nb8?;A+8qpeakaAcnB0F` z98pPhFj+_Q9O8Jo@6`jO>rCoz9&!m@H!&@zPf2pVuQihO_JxwsOHUuN@K2~xK=I6- z+qgHSRoAe~y_=+nPX|Yckv!e;swa=C(ea?o4HlEvQGPMUv*_E8U{w&%gS zmr-@JzI&F(OA{!{3CmZ2pY7zy$UaZRBra^YRFMJU-lqAp21S>_mjZ$G-k#mL(ky{M z;dSH%y1`u#LUtCubx%l}t-%Cc`vElxflG0(_Zct=M0ck!gc8a@!WsL|&9?$i*2=#a;7%<5XY^*G6`i*wM_Gwwk%6sYar0;| zFYn>@yARgfG(E~321ZDUxd z+(YP}d-o#fQQgkz0uT>Xcj(>=gOBM=OKvCL0)+dm)yH!HjC@!M@PWxnO_J-LuCA^+ zTvj};DVeZbQ!%$qXnTyJ;u45NN@X#0pZRHjd-%lHFfiPa+c8uvGBt#Ax$=O`Vtwh4 zj){pc4%sDxYfCY_3W3f5etO2h=v9bGrS%mqrZ)qr3hNsidjBLweZ|DYtoA@57H`Wb zktIh4ao4l@!&?QDWiqJm8gn8CyNnDBGQo(r;KBuIZbK6$Ed(39oTV%jtD|q{f(l1dhcPp_d-1(g*$y zwn_I6EiEXB{Wlq+@}v`oUAt|eiNULiEqL?Grkv-Lc-hkTRSG@pyGH@}t&1o+&5_A9 z3}$;8C`bpsTAw;t3qbC&hD6v5=s;8anXJ{(rq>XqrI|TMgUpQ0SJg3&Llvux2 z3~8NO?9qG=1R@A|c<=7>yUU!0y*Y-AJ!85_FC=9|5%%q<&ZPydq+1k}AJB=@)fD35 zKW>6uE->eOGnfh+?(n%qS*c^K`81rt5oL^1Ib5bXNh(XDKqacE3I=lPtH2 zImniFk;gtwjg^HACEQX0+)|zJiAEFIn-c=?ql1HtTus#%@*GT*G7{y^yjvct9u4}! z6zpTA@-!O6$cgh<0TrN7fo+Bj&9hI`&ZqcC+}vxy-X^rIA~RN+b-o-I+*CgJw`Va+ zfOP`=c(oa)p1(I-=GHqgTS>wWK%2Yv^B{ZwA8e-0w*yD_-i9Fg`*~iR{A;NGDjS(j zSUoNN6uSm9!ER>TBMk0}s}>zmr2RnqHkmc&c81K(^1t%*&;wG!eZ7p0lRBo&O%{3| zBvFGf&JZgy!$>j}Kc07(XL|IA?_?7xGoJ^;`TA9RP#`dU`uX{y>@^MO)x?vNEVI#_ zD%QBc+#j@pGR|)oQsjQ_8^IgY{8C4myWvj}9!$qDjD`M;H9lIA+#N^1`uE)${)vKS zDqu_K!J3BvClos`%!*HP)`~ta+Jry@f-mz4$)KnBsv24n60c;gYSD`YgM6t7&u*ut z!8tI$-$3g+l5Dv2hg36kIA!lL@FhrJpfSdzGSA$_g-g!Msby$RpaoUs85k4FUOj%5 zvs(nRJzEvsK#mo_()#fkuiCb+YN0INiu2-@Nc{kxu?Gr`fYhE&oom_IsXZmjau@R- zYbR;84#2P}?j#n7j&=JWK@&mhv3$vm8mdBQwj;M`!wm_VqXDaT5QbbwM@NDQ%gy6a z8j97n#x+l{RcdNxG;yFD4@ItLz@400+{KJq-F418)!Rb(Nds^TveMq-CneOUoZb*1 z_pqZkc>zgAo5<(sc0|jK2|19b?2*?WBu3a&$Nxckkwskuo25Un?+KhsudJP0#==gf zAvYf%!2Ne9^_K?o;Kc<78_5#f!`2givfZnAtgalQ>I?R3_{B$r5DczzDs_RQ3g)xn zV6QJ8O!a}auqbVP=RX|sIY7b$Xk@J#e;K{7a3z%?^;dt*-zAnV)s{*nkBr729CP@A zx%ofSrPtU#nSc41?*uL^B0lNSL>p|Hr7FY*p}4DkO=%cU1;6o zRYj+8*r(O=;)MBr6qTSKb3czE#=+l@XVRAujU6-~q$|iZHE#3h=om)M8D)^kuT)eb z^miYu!Kt5>#^}T0$ftCbt#So0Ez51APTG9k`_%c!k0=8TM#CrpB7MRxFKUT~oX>18LJIJjr-k^y(eTW(`f zffsj8*~jES6E`(A#hDr+m_cKzI6QN>vtM}R{4QWiQzN5!n!^+4Oc{A0h6v|k2cozb zEcp*~H=vZN<_CfIg{i3wo+)Q%uIiE(vvHk0+bJNobs+F(V=i@y1=1HY-PNlq4!l}7 z$+V=Kw!M=g~*JGN;+JPe40HJpH%e~}Tm zjevk+{Q2{D-uH)9X6kMA?&}WrRFY;Vx!ZxlO?W1}e#!WhA=*b1VdZDHreSZ|vBixW zee+k5<;B`nQ`8;JVr+)HLVAAs2Num!%=qvRl7cK^6dD{BIvs5(Q&vNnCO1k5sB7{*93E9iuHH7fq5cW*#0dLjIw~P3hwM8Z0pcTU{CLMYX*Y#-x0TIE*O7kPyP&Lq(% zNzpff%%YaO1~9X?L=hAoL!{26um;(87#Q&Dr}8;?tE-MF7^D4JRh5X!wQm0WL!8P5 zvZNh4rMLl9+ifvJc+%f?qG#hLDy%+QQ=|?9YFlXxNmd*1N}gKU7B?<#lOev3w`|hRBA*|60w0}fxU?St`&@h`hyiA z-_&lL93Go@QhbqoIVQ|=eBA!il+Jxoj=+(PgyhNd6oSAD{y(Y8s-|(Heucl{s_gAn zsUV+@)7v>WOWM9RGv=qNu-lk51aP~-f`G=Oz5V2{-CtkFJI9R%(z(eY$|SQRc^i^y z2)v^C-O=MloI?^xrC*-pK=Ajyv+s$Dwm)ho4t`sd|mCj4>8RQxLD}X;>DM=!_%h$!*rDoTcwIAHJjL+{grWUV zX7wJcojkUt?zJRwQ~4t?;~p6qY=`wFz$4ZhO(ro+P&Jx{irWD8#NRZ;fC0@ z*`l?@_-gna24cUB_-0H@pj;c2?;PIRGiU*^A$lO!Fjt)lS7exq!a5(V>7sQ@P7?h` z65?HrjFh_Ulj~S0cprBF$Q;_O=Bd^Tm_YPa@nPbthk8rMLkMLgCDi35?Y1 zds)&r2jZ$fB*61%k2V1PB9m!o1xO-TpXP+ba3gFnHuq7JYiEQ!S>W@a>2J;bie^`b z_odT2PeebDGQ2hStJoW;mfarGJIjsn{|0e>s$R-%3`2aBUuhNq@_ zQe4qzTuT>$(PakXk5Mz^!PMF(kp33VCFt#g%#8Z>g+Ee)LEs92-5cv?-0qAKe%~+K znEbtUh#Afq`aCy9iuRo8)=obA`dtp$dOJ0chan5E-E1iLR|N!7RYab>+IScleWS1b zUHYmlw0VCpRQlSFf}*A4_ns+ZmanVfjFmCH4&-|Z%vl7(2#^pEVk>A8gamd^eS!n; z*1jwWhE=~(W&TVUJE~m9b{Z79ke2jo$EpMuVjPoMPzf^b?t}-D;oy%(tqV}!l9#Zr zgcs?ST~_CKV7?M6pSrh=uv|Ez)F_bWlJ>gy`4)ZPAK{JU*K8E*z$zuibQ*>Jq=d77 z#khakl_y=}jam~eaTjmFt7y6H8dc;qq}b0^gv|Y$>M5qDu{x)d_(p-7I801_)XYA- zgjsz@xj>1oJX8|uy8V@?)X-2T10!5Pt%bpsv$t}3A8xUPQ9yF?o)nbW^g47O{|r~d z6kGshevR-=Xa5#}dl33Qa5z0ZJ=oe9A-SF0$hf|s=we$^f%}j=TjeF zA&__9qUe^zT|v1Me<%Ed|7>nN zNG}9{!v#L^D#U#b0AaP}sZ7fJt1}Wy6D3pke@Se=^o1*+j>qdSK_1$vnZ)C_e2*7F z6-lSeV-v$GT08S!aGu>Te%je`;mp#gQFiCo!9XrxQbA2e4Fot&2P9p>(TtAfGf=nC zeA97mY|$vnLet+wQK3c;SJ!1iRiwAEeuw?zhpx1JDzJ#gi)Q^*_G-x3l(> z#{xiCu?9}!MKYXfJ|8@YfBKNJ)k$(Nj@1_6Qd7O7n8x_Qj`G&4%PXD@A3{UX6XT_v z={(#pH_Fbg(xiYAILiqUcf9pLt<+td)m{xg*TCuPr~2gE+eccRYl^s380r$l1+#p+ z4+;P1+2C*da_z3|#)-$1JobP8{wYAI&)hC$3m_lZP?G_F7bYa>u{bknAS_2r<;yd} zTTXJ0Q__v2P0*F9t|j#TIEWB?H6E)KuYME~1S{?)h#kHC7?{K@lVTq2;Khee*T+m3 zjQ$1`#G+v^tdv|i5Fe4K!HC8GoOB#4GX~W!7d!m2lL0+%)sDMJv zl9aiWloZ_5RL3F~tikk^hEx{b%-p96sIRY2l^rE|G~Ql-EencTlp6_)ijmY8uu)z9DdlmZB_ptan_ z$6^keaaiD8uO_o}6*F*OfLUp>u5bE-Rh!*`Cs*iwHiVW4Ot#yaoh;W8G>VI;?xpT% zWJf;&!iB?a1qdPKN?r(^4g!7*XF~>o>zhXcBDqmR#0}L|ZkI6Qs z14G?1^d;&J?k}ctnH}PhCVxdZbMjQ`zTpY%$53& zju0E(My~catOv=!oa%E@$wBy*>bA-UP?Htb<+dZaIsaJRN57Hy+2NiZ?6|4SKl#k$ zMo>vA=li>1+!WzKV`Ipj~1q_ar*E%3Qpz#}ab z+`z4BTgD2wWt*9ir+Z0KwZDgetCIJ|d|6F+4pbaV%YBS7SrEyoD|zCH{F!Bog(5<}a8uWMm``j*iyrE2H0Eeb))> zmz6!&R)w_ec-WKJg#I^Mpuh+EP57#hr$uM84@uF4c0tr+aMaI^yD5WnRc#l#o)&$G zt*|+E`eEy2s6&F7dwSNCeEX7mO7V;Q5pM3OOfNIT@?{N4w+2J-z9%s*5#~Im9V?dO zGYzS3=2(nNNIOkreDkAhDFOWP()Q{NaW9>>^q=wRVYi;u{GSZ$?)oZ*-qp%E-xKb8>R%Lj)iRNt6bF!IOSehdclFWD^g+ z?F@RECEzJt?s|NZKB`?zI8*a9=gW#5mLS!qNWSHyNUmQ(?Nm>nEXEB7FSE0jh`Wi| z*ptLxZQSiDd1dV0anY`U=5wR&+a|D%nyhWSFh~>dWs%%&iTa8jlp1G=8b=hmdTLOy zZbJh3CIkox`|?0oei}e4IlDbIJ)Kolu<-el)fBou8%N{|pbEeBz70h&Wkb8BzvR1Al$q z#Jlaax5P#CScO>VA9a$2l&JA+#$|3>iD^88Rf&LI%WLVrfn-yu8I$2r1 zuvsKi3JZA3o>+6a^m;c7?)<*U!{+FH5p7lO-fAaG2*Gde>h@eSeXpB0R@%7xI^`{`N%Qs}icuK&}V18{i_ z7)!)HldYs$8c&j&^`erSaS7V40^K~K((QNL(}$P>58~@(G2GKjgkc3iFw8?Hnu)6B zN@W5m5Z=yr4(I-SF+%-dd0T;iY&-)~Eb?=3*|NsRl5~DtFqUcM-ofxgw83irJ#Fn( z5^roGoco%FH~)mBleos^27Byw+dicABrnH zZxN&m;{F@zixFOn^cjVE%FIHOyvcu&^5^wGv8k!O4Yhhmr>&}<`Pq6-%~fF7s^YMF z%xW{avxDD0jkZ8{gcw)ExZ5r|Bk&meg%l=;pgcfuS-yhwj=z(u~k0=e-stPi;qjoG5QZH^Ox`I ze?$`4`vgP^V2G$?s2@riH&f+|tVN6lo~vlR!@;zud4J?I^r9FW+p}uRaU|Gz5^5qz zCYw&+-A$DGvA&6nNZu;laUC0$ELua#Etf^xAX@7A}zq( zwV3|Hw|^vOYJ@=`7FpLScG?^ArRAvX#~}UvV4Lgh>}`Rns;d0r;`?b`Qf6Kczmbl% zXU{{{KXImSD+qD`fnA^Y*cnk4=w(~WU;_Ivbh0KF{w``6$&1){6;|$iCY)z%Mnkiw4Fgd}>Vh9i~G+_X( zT0g?g|0tw{@cI^V^ee6Q)&xn?dx&zVJ35MkMsxBKT$i1_eK#zY80R0Re#ISDlr!DL zlV5ZV06yTeV$1wGdZARTCETTZ|HMuyqBt|aZN6qZ1v|&LUe>Y_iNr;>8@F(OA3-qD zU!5?V)v%F9wHUY|)zst|SaW9ql$Q)t0oR?oqd8!uKJ)2=YRj!0umMy~^Vs_XC=Vr% zomNm!`-aD=qie&5!)s^Hxpc{)dkoMvsj!SNrc&$^z7;}{_33wafBR`pA>{m9a~Vl+ zCv6+=TlGypuGTAhEuKqa-P}YmHekV7!z8pilz7gK2HE zSz7Gm#cP|~!?{`>L^RItW%8opSNk|20g!tsl4Mb^ovBGngo(gYus`(!hvvk-!fcO(D_`LSNpZOgl6>MTNA$5*-6SHAWMqq!E>>z>3ASC8MuL z-TNmwz0xqCiu85(5{JjJ%*r$9aGODtd5pmqmY(HBo6-C zKZ!ordH^{e0eeXK)|fE7^k+lYo%r>cVJe2!8(i?~r^?W1>wiz)i5VE-<+yu^?E|G#yl_ziyH66Bmu32gF>2TX0l6`VroH;n~x zsV0tH>z6j&gI!~Qogu{1pNb-UFp)muMIdFAuE*@;Sg4BP69}$&C)w--kH^d418%ZE ztD?Rb@Wsz#dn%{5)NtQcc;a|g3`#9yXAXIt;50x)orDm^Qf@AfmPXBiQz#yZZl8}& zMw2vgIj$*(xXK(8BoOKLxdbkbetbkFcM)_ZUt%{cJ8%OB`bWHQM$f}G6ZK!GG`S;$ zo_$aE4bs{*5RCOaOsP5z$ZZ2j-R6;)NU`C7l&F36pI8W`S`AnzL4Bf@EJg6qo0}08 z*;*P;-LD6DAA+jD{;!6XXwB;pD~DPNgLyCXeQpldk(R$jB>91Wx8m*tyKC_j3jqIu zM6x#4y(#;VDhQoW?>5;w!z~1O_aS{Loe)qYHvB>}+RwGgBZ~Uy>X6J=Ik&Ib^rfdRP zlCR)CpfWcts^-M^RagGtbGWq{OeA2Wg~<((D{tt3CcU4jTk;*rvk(cuvZz=_ zq87SfnqDqtN(~PK@2r9AT9~e@9ANzNj5UHJl0IMVmUjao)ws+le>j4qgr5Z3k|LgB zy=w}zo=)ToXMp4s&WW1VQKh3+2m7eXb`M!`{fF$qW&^MTR%Kyf^Y3IJLgev{a2pjg zHQ3WOInD{=zf&cAR^$5f;7e$C{&HSvsjj<+-`Rq%H=02Qg$tg@nj8+KDPh^N#dM9UW!B7Fb`sW?_-4%rs{mLX!SIM}0;9PkAjKCUwSselKgC|KB@#lz5gy zAOe=aS*ITg*I!aUrec}*Q>G}IJY;~VDe`xLi3em$btDl>(jVe+n~6b)REk{6Cd;{? z{JQ2@7c%&e%5<;R=di5YPSD`a>V!~MaLmk36LYQj!!=YLN&V~w63L9Dl9FKfE6~mS zwi9LqruL54wvz?_t02WA0kGgX@V~W8(y7tGszjDf=JE?JCm2%1OXKeInvT{3r{z<-Vsn z-^%`S;z_M`BY=kQAJ+ka{fyWDw*V3WC$mP;FY^Xt!}bPq+`ra$m_n_s%E)a?W~+T! zIQ_o5N{A=|>i++(cg_;E;HhqxhNa3%WbY+|VFVyKpuL(J$KWNez)FM>33HkM5($#A zwRr!%xN$(qN6v-!if6BqQY{vHIc!0jQ};7b^! zoNQBlYr38uWJRrmduGAJiG-kQ+QCH1>8w%R(LGv4rH~xzypf1d_pNq-@@R!6MBNL7 zNf_NrFeRFEpj-fO3#5oWPTDK(hX?b!p)|Z^u3V6^w{ur#YKW3aM*e|5(MO1;18{6r z6E2k<oZKJ^i|Dzh?#{23Xc zO70Ee9Ou8Mvlt_b;Vhinp&@{MlTm@QnJr)eXGNcH_$G6V<#x&o1w(9JFgRgwSOGL{ z#-C)(Tu*N~NfvmJ`X`C#^XB(yTsx!M*zrBa>b+i znUC&)Mhu?^=X(m1jDP6AzjH1?HqirU;#GJ@&B!V7Tqp3iGgu-lx+L+}Z>L)Xxr`zc z_wrs9^=M8Vin2K#F-98TmC~Lt0W4w5eBYMVu5vKgk|?Qym1JwTwib*OJeQ$QVbjTT zF;C;*^UKI=QY}x}`tg~MyP&=V6prSXf2)y2!DTKy;!Gms-$l3)H(W@g*cJ+Nl;xw* zX^Fq)Q$KCF_w*IJxQa?Zv!+}|HII${{cWaw#27`isQu?OYJ2rJJOd!9LBa)SapLRA zYM?`drd%)lT}}yih1~v7l>$N=+~LS+7w4Qzv2FAPGtPA_URCtWn?wrWS_028x^Dnp z3}^1#FPhf%CO*rQIiv@<%@QQ+{f9Q{{rXE0Yo#^}@Ya{YSrYgChGRWPN1x#SaSU$< zse{h~;!dR2fuKjEhs*y7lze^vqf7=^#*Qd8G!QzHW1<<#sbzV4^WZvcS#BJ8qwayS z#xL{M;-;UuzMuVZAA(gy!3M#>!9n)n7Id6sM4ARVluT2Wz)m3_*mY|gKs^$8uCav7 zK=h^p-M9ac$?fPoH&O@n&ytcSb3+5jQfDQ4Ktn_0M$Hv4TE73CTbgG!RajIm!O8`% z{%QWN+VPwJQ;@#=Kt3EGxPpC!F600Vl?z{xQAXs*5J@8Uqji5`OIJ!uWRD3vE68j#PkO+mcbNN#`5`TVl{n(cru=kaQHYiH z$8Cj-w=_?2RXK-@eRHFU2LMuc)yQkoZG@oN<$Qz#@2*OY#5$cG5B|V9j~&l#?+K&< zUp>{$$i@QCLk7#XP_c-trEx5=_XB)f^yH=9dN(Hy8wMYuH7ugJn#um2FrM_j34olutoyWms#70)@kGj3=Ukm93HQ=247A442;7b3Ou)IRG9el|J)jh z#rf@fDL3w_hI50Xxe3x>@1l+r(GIo^bY;IuyqbU|&BFg1#{Zu*MEuiA|e4-|URNxp|Yj;L*OZ^#5H0x&pTR~Q^yR5+%V};?`Nw<0@5iER)5OZamqR-DT z!td|&vmiVGz;Y}v15JlJ_!FXLGI`dZkjg@QmqGh}v>O^5OR6x;tErLW6FN(EpzMMs zm2!T*I!%q~VCCoQSf3X>F=qNS{460MIV=AsH6-k?(gNZiaOMl-^sY)C7Ctr8X?kqm3cH_~(A7L-m~p?s-~yr%D58dE zAFqQJfFWM``Sr_;TWq4idrlhQVFqc43Q$C&SCw8{S=~}lg@#v~6T*3WR;GK7nb>R&& zmX0hj8JXT1gtNszP4c^aNxbgLi2i3a#ct#%!B!;W$0|DntPd~tuTHwrXsdRN-+7?E zwY4?mPA2BhHFCcK$vKL{kfL{v98W!ApN?lSFm8a;?_*5H5Gc&O5zj<)@`I z!GjaJ;VZq#7Gx6fo3_vkP;JZcx|p*Q0J%CTpheW@}mVFNId?UKrbKx#W8<2c@f&VfkO9rStj|Qra zix(kX6y;xPl~Vd?QrakdW2yY2v~FF#FU_lY>+*#fG}vz$Oee}bL8_jIytT6%IN2Zl z6HhQ1MH*7x)KLu!3vnOLj?a9o%Dr(tGxI4Oq+LB-h^NO&lp_xRF2OGxu{t8p+y-v$ zE}CcCh&QYc7@R@CK3koC3!b6bo~(4mEO%#XTM_CWtHQlkF7`VnPN%8(Ua}wi(LIq? zJlEt2-JcIqICTC5bb0~@7ploa0ukDfS~3ZbDWZ{Q$PPIT0x-+j&FWak84IkBq=jE)HEUywm$Jsi?3hea{l)G=tJ-QN)ZqMC&E~N zE8>8@zet@*{JhHX{^&S31eTv){&wgp^`cDU2j0I2cDR4O$HERZzUVg^1c1B_UpVsR z4=ycYbR5ZRqc*@So3*fn|e(Mrd7dHIf_j%T!rdqE1LLFrayjchUbpBesJL*io6rWf}beQn)l|v=)X5# zKh59H2vv>&j}28gW_OPlorjvcukkI%#2cQ^{|Sg>#|WLFavgQ551*ajcaJCl>1pRT z0{0^4W=<-1s7@1WW?RuY+E(3bsS0jv)r{1X;MoVmSIG0vz@`eZ$gsQmt3?2LPk<=q zw~|gfgzFKbdsTnExp}wgxQrM>qRR`qJA=UQEXTC5wcKy|_!uoEjK`HKVfc?;%HRm8 z(NrwV7T2!P#Y6|jbh3WD$I1=xo$GQfOHR&u6UyG9pBET&Pf}4b!1y|4k|su(#k7%} z_r>%buY+ug{JQ9+h^v<)gs&s(GQRKe)voE>z1}T*3)e#%vPf=gY#+m9(~A}zCX5+Y zmf7AqnLDYJ{JdmRrzIt>w`=oy-$iY(JPb9FGzC_wUk|N*? zzvFbP?&&(dsum?Sa6)DKSs-bpje#F@XWRO9mUJF9L7dV9NH4Dkgz%ya2w9#Ka&xKc za3aw_o=5eg!!X%_FxfiEH}AzSJ0Scw7^D1sK@tqZ_b;w|QM4EC$<+z!w{F}2O=q3H zY0E2Gv|Uy{w8KnW0?7L|x_YhlG2bTtoNSrgnU`mt4_WoxR|cjpiLOgnQK=X;Ik=_5Ui4 z<nap}}OCv~ee1ji*gJ@Y6Tjx{~YfeTE;rPC}rC%4Yi)SQ6 zsrj%Gs8#mb7bH0amCvF4NaW<_&olC~sjC;SPMA{(eEikvDw=-hoPKF7<;oKg2WDFE z&|0paOTMd%3#-&1uXCzD$#SXBt&67!>OaF3ff2>Eku>*}dsO8o-h!bcMkE6aG~f$7 zQJ57J#8v0Vou#2sVL?az#GYh}9@ifd|w?mpsMd$ zTly*d)kw@G?TN_cv0`?6brTFXSS{3-6VfPR;kEa8oOWyg zz!8Qgk)%EGj<@cREKmRQqob_JARM_s+S_>%xw#41JuR5G(r#NETp|N{wl}`Z@;G>; zNESBz;5f_vPtpR1ZAZ-A4exQzb-dgGh|^V~3=)axeynWMGPk3Q)pmUL)5*-|s`d$I@v+4=vui zNUD|fS3UR{jc0=Oni91tGQ0 zHKs;vkFaV_%DkTz^P}jo8JAU9K=d3u6m>r4s`Ax?^FJqdmZ0q^W8RQ8YoI>spbz-k z2|9;I30;U!9XK-sY^IuF}@tm-A@9dI1D3not(=WsDViEX_gi z*-gq1BZd9LcI$l9)O6j+{0!Yl=4aq}t-Y5rZNe74Rf>jU7|$jYDvn1E1_MY$oQqrlmWTUJEWr%0VGNHG1f z0<&xbUuu6S7&$}LuS{rZf`VJa|D1mM%#7JoPfz(P$0}2m0&hzkkJ7}0V-QP5nKcKO z$6jdvuIG|^URLWuWG}l&iP4egV-eiQG|PJ=`Qi_kxx#PM)|<3X%Mj%N&2z;r5qk-v zEvR5I@%g3NZg7a|%_cYvs`=YKbBy*${Xmpz_zj{f*q+TI*41+=gW}X{zl!0$?ufpT zunmSJi`PtMwE?lc$*u+8>n)D{L})Ve-pqaSK^(zy;&PpmU%6$nMcica7at-k7Jd@) z>46thRx&M^=BQOKM+0(`oSC(aykK~fl%8cm>gd4tTOouz8kbkEFgwPW9L+0u3d?O> zuHbgNyNOkqQIAgptQod~Y9v_IOx>$&{aMEyr<2y@%2*cb)gX@I;;Vf@c84d4b1*8r zV2Uf$3lyh*_%VKY+XFl~44x@xO5bZ+skFH*D<59?Q9uTuu^!kHy(!j4FwVbiy(D>w z`D4vg`(h#=DE4ZrbmsK63p`w{>!1JZNnMJjlvUdHPy%zA20Edj<0r~K1rdLQB@xI*npx58a{_whBC%MWrteUD?4fAkSN zD|}m4IdJF~MU)x8n&o?@+p09av3x@MxfwGGDyo1Zd;14@&no2rzUg!tQzxAvtphlz zmM!2jfrt|rm>(1>bzGExaGZP#*ZX(y)33* z-FNbak$+}vT?Fp^Bk_Vgi@dEoYtKMIhEHCAuCLw&2){*}My=m2FU??DmkWTJxaaI9 z4+O7bze-8UFOBfYrs&ij<3U5_z0V9Xq8784QO3q!T+T){xcGQkPm|xta$Mxh>f7MR zHIM9O{{b$z^PlHj^bYzP%IXF)4lZ~d2|I1$9v#oYkLY8+ln6kQY-^)2TmRs9P^6fA$N&Bf zK05Mnm}}+(4vrk*%4k~KVP07%svZ!_pbbMh44te$Mu;og{X%|MK3N@ zYDA~@(|oG@rPr6q0r1jDgf4KYvZVAg?<<1{V_Wuhz3{-Un%AwU4_MCIF6gVBp`k5k z#z`tK!AsFXyk`fuy{fSHf7aAw6%^1z{>+l-l6K~TeUqqCPN=|h z$j!|K8+s5m3%spEt0CIk*SDb-CNshNWm)$f)JyhRnhub1Jx%pSCQCkL@#Uw0QS$Dx z)NB3+O~-+Q7rueJs^|1+{*SG#O_s{A6i|>J@1B)S^d8)6yTAlzS{UAd&`7*gv$Uix zccDgpGnl&Vc5v0YOTyxlKZo14#g_|p!M1Ijl8z_Jxna=PQ|sp*bJvAOE_@W-RXUft z{eidyz(6pq(Z{PAru#~7Y(Z2)vpeC2sN0jU=p|NezWbK%pC1}$Kh*cdUz>>3kuUQT zQ~b92-PVzPYFgkfxT{;!DEb{}O>Z3Z=-WHkv!8LWqSKE5HsYXR)h}Wy%%mPEk~>_d zKKeie_qbXh3v6~4Z;Q|cN(O=fa|l=kZh<*k{W?PHI%s%V+0-2uS40cGP->YJ{L%Vr zO(oA`z64^L@D7N}?R#w&T-yx+z5f1c(hNLZzjj3fv+}t>#w;oUZJTHjd}Cn&GRoG~ zGODs7{y|VPZ=Hb)YD%&ckfdv71#-y>{PR;gHWEoC(3S&1$U zzj7cjNa>#NJoi02=RRhb$A12E$I&E-oi-gOE(mnJDJv*jc=H~x6(eSGEkk}*R{?Ow z=`aWXjo9nuQ>IU6TpZY|T>r>q@(Q1ev;Rb%U2nzV87VzW_odo=W0lU_bs5>&m;W-t za;C)5H?yRU{QDj*&FpL{ueasddqRVaA8`w|DWW?-w`@fW9eUHEEl=BjkW2@J`sRvGz#@p@9oV;Fm z;dapea!BkSh2)vp4u4cJstfJezC$^Q{l|t4^R_c?ln~g= zIB~-U-t){)`4mnuKh!YT8sU+V9JpW$%Zw;Klm89tI@63FLU%H&*~j`<{`i!%U`@n| z{wEa)3S2!sjPWgXRgXFa zNi!N4X{l`9e5x_1eZ%=rNeK_lH91X%&sI8cCIiPR)8v^z!-O*$cXB?^>t9*5da)(1 zFl6A+@d-0xfN>!Uuu1_9LK=viwOjDBUTzw{iu}y%Qs77(aOCeuimNH(*9x1O+xhp7 zTw7~@er3+(Wxp91mix~?_U~{0Vc?3{EYBHJ{}}8RHUn#DIjEwt;L?-qlao>{g=MWu z7!Fi?D*ckt|EetPJFq+jn(0%P!nwlar&Y}hUKzVDZhk7=)9y3?M-;uafr)T_J=iga zxH>pBy!S}}r6w4A0!OeyLBo(h6xIkCi3JV%l*YMc0f#yq_fGx0zz(=!9Vj2c!{>1A z)t`_NUNwP78b2H!YxRCTuKo=%V2y*5aE;ybl~*R$MBatC z#PFu4hl99I!BbZeU^ncf`0VD%e;~nhP3fh=5{CyR=YH9HC4SCdcIXvoth7m?<7CGg z{uP_{C-0lI9=HK7bg}{5_=Xt`X|r>F*8B55*tP4)?F~=7duvpxTb}^SCZNs@TzqTA z%W|r%-p(zx{dk>WLV>!1!rv#W1^)U!y#RGhBxpU!Ibe!Fv>tlz#~BHm70N96?L7_d z>_pQeQWsDv>&SNzyXr5+N^j;JSuM4U^ta}Ed&1{SloH`e|xTa$NVMfN*y zxZ|60q?TRfm1bmk`}Qqx6wnE%vf*#UwtC5JNsfJBLn5@lp0v7NYIrhD&zs(o^eOhL+ZT>N}9M|B> ziyvj5`s?92748|so4|z}^1$Ko^*%G=-qsjCo~!l!=&S`>C+Tbdww3cgCI<<3CzoU? zHNVYl`oWi0|J=N5J~)*peL4i(w8P+}n_%a<5_qD+ua#_5%)v6N71b8BSOV8$fYN-+ jRSyZsVhteY=ac`;Wye|b`BjDPGXR07tDnm{r-UW|Ajw>o From f8cff80d3f1bd2165ac6a441666b2da9e76c81e9 Mon Sep 17 00:00:00 2001 From: Nanai Date: Mon, 4 Nov 2013 12:40:08 -0500 Subject: [PATCH 2/9] Fix for missing and robotic limbs getting infected with germs and being incurable. --- code/modules/organs/organ_external.dm | 6 ++++++ code/modules/surgery/robolimbs.dm | 7 ++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 2201bd15870..a87fa3b160a 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -45,6 +45,7 @@ // how often wounds should be updated, a higher number means less often var/wound_update_accuracy = 1 + /datum/organ/external/New(var/datum/organ/external/P) if(P) parent = P @@ -297,6 +298,11 @@ This function completely restores a damaged organ to perfect condition. #define GANGREN_LEVEL_TERMINAL 2500 #define GERM_TRANSFER_AMOUNT germ_level/500 /datum/organ/external/proc/update_germs() + + if(status & ORGAN_ROBOT|ORGAN_DESTROYED) //Robotic limbs shouldn't be infected, nor should nonexistant limbs. + germ_level = 0 + return + if(germ_level > 0 && owner.bodytemperature >= 170) //cryo stops germs from moving and doing their bad stuffs //Syncing germ levels with external wounds for(var/datum/wound/W in wounds) diff --git a/code/modules/surgery/robolimbs.dm b/code/modules/surgery/robolimbs.dm index 985862b0463..cda3d9fd96c 100644 --- a/code/modules/surgery/robolimbs.dm +++ b/code/modules/surgery/robolimbs.dm @@ -4,7 +4,7 @@ ////////////////////////////////////////////////////////////////// /datum/surgery_step/limb/ - can_infect = 1 + can_infect = 0 can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) if (!hasorgans(target)) return 0 @@ -125,7 +125,6 @@ /datum/surgery_step/limb/attach allowed_tools = list(/obj/item/robot_parts = 100) - can_infect = 0 min_duration = 80 max_duration = 100 @@ -148,6 +147,8 @@ var/datum/organ/external/affected = target.get_organ(target_zone) user.visible_message("\blue [user] has attached [tool] where [target]'s [affected.display_name] used to be.", \ "\blue You have attached [tool] where [target]'s [affected.display_name] used to be.") + + affected.germ_level = 0 affected.robotize() if(L.sabotaged) affected.sabotaged = 1 @@ -162,4 +163,4 @@ var/datum/organ/external/affected = target.get_organ(target_zone) user.visible_message("\red [user]'s hand slips, damaging connectors on [target]'s [affected.display_name]!", \ "\red Your hand slips, damaging connectors on [target]'s [affected.display_name]!") - target.apply_damage(10, BRUTE, affected) \ No newline at end of file + target.apply_damage(10, BRUTE, affected) From 54f06a1d12038c52fd64f0576471d33221fa338b Mon Sep 17 00:00:00 2001 From: Iamgoofball Date: Wed, 20 Nov 2013 14:56:49 -0800 Subject: [PATCH 3/9] made head PDA carts be in lockboxes. Added Abandoned Crates! --- code/modules/mining/abandonedcrates.dm | 147 +++++++++++++++++++++ code/modules/mining/mine_turfs.dm | 6 +- code/modules/research/designs.dm | 173 +++++++++++++++++++++++++ 3 files changed, 325 insertions(+), 1 deletion(-) create mode 100644 code/modules/mining/abandonedcrates.dm diff --git a/code/modules/mining/abandonedcrates.dm b/code/modules/mining/abandonedcrates.dm new file mode 100644 index 00000000000..72ddbffe4a9 --- /dev/null +++ b/code/modules/mining/abandonedcrates.dm @@ -0,0 +1,147 @@ +/obj/structure/closet/crate/secure/loot + name = "abandoned crate" + desc = "What could be inside?" + icon_state = "securecrate" + icon_opened = "securecrateopen" + icon_closed = "securecrate" + var/code = null + var/lastattempt = null + var/attempts = 3 + locked = 1 + var/min = 1 + var/max = 10 + +/obj/structure/closet/crate/secure/loot/New() + ..() + code = rand(min,max) + var/loot = rand(1,30) + switch(loot) + if(1) + new/obj/item/weapon/reagent_containers/food/drinks/bottle/rum(src) + new/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus(src) + new/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey(src) + new/obj/item/weapon/lighter/zippo(src) + if(2) + new/obj/item/weapon/pickaxe/drill(src) + new/obj/item/device/taperecorder(src) + new/obj/item/clothing/suit/space/rig(src) + new/obj/item/clothing/head/helmet/space/rig(src) + if(3) + for(var/i = 0, i < 12, i++) + new/obj/item/weapon/coin/diamond(src) + if(4) + new/obj/item/clothing/shoes/clown_shoes(src) + new/obj/item/clothing/under/rank/clown(src) + new/obj/item/clothing/mask/gas/clown_hat(src) + new/obj/item/weapon/bananapeel(src) + if(5) + for(var/i = 0, i < 6, i++) + new/obj/item/weapon/reagent_containers/food/snacks/sliceable/birthdaycake(src) + new/obj/item/weapon/lighter/zippo(src) + if(7) + new/obj/item/weapon/reagent_containers/glass/beaker/bluespace(src) + if(9) + for(var/i = 0, i < 5, i++) + new/obj/item/weapon/ore/diamond(src) + if(10) + for(var/i = 0, i < 5, i++) + new/obj/item/weapon/ore/clown(src) + if(11) + return + if(12) + new/obj/item/seeds/deathberryseed(src) + new/obj/item/seeds/deathnettleseed(src) + if(13) + new/obj/machinery/hydroponics(src) + if(14) + new/obj/item/seeds/cashseed(src) + if(15) + for(var/i = 0, i < 3, i++) + new/obj/item/weapon/reagent_containers/glass/beaker/noreact(src) + new/obj/item/weapon/reagent_containers/hypospray(src) + if(16) + for(var/i = 0, i < 9, i++) + new/obj/item/bluespace_crystal(src) + if(17) + new/obj/item/mecha_parts/mecha_equipment/weapon/honker(src) + new/obj/item/mecha_parts/chassis/honker(src) + new/obj/item/mecha_parts/part/honker_torso(src) + new/obj/item/mecha_parts/part/honker_head(src) + new/obj/item/mecha_parts/part/honker_left_arm(src) + if(18) + return + if(19) + for(var/i = 0, i < 4, i++) + new/obj/item/weapon/melee/classic_baton(src) + if(20) + new/obj/item/weapon/storage/lockbox/clusterbang(src) + if(21) + new/obj/item/weapon/aiModule/robocop(src) + if(22) + new/obj/item/clothing/under/chameleon(src) + for(var/i = 0, i < 7, i++) + new/obj/item/clothing/tie/horrible(src) + if(23) + new/obj/item/clothing/under/shorts(src) + new/obj/item/clothing/under/shorts/red(src) + new/obj/item/clothing/under/shorts/blue(src) + //Dummy crates start here. + if(24 to 29) + return + if(8) + return + if(6) + return + //Dummy crates end here. + if(30) + for(var/i = 0, i < 4, i++) + new/obj/item/weapon/melee/baton(src) + +/obj/structure/closet/crate/secure/loot/attack_hand(mob/user as mob) + if(locked) + user << "The crate is locked with a Deca-code lock." + var/input = input(usr, "Enter digit from [min] to [max].", "Deca-Code Lock", "") as num + if(in_range(src, user)) + input = Clamp(input, 0, 10) + if (input == code) + user << "The crate unlocks!" + locked = 0 + else if (input == null || input > max || input < min) + user << "You leave the crate alone." + else + user << "A red light flashes." + lastattempt = input + attempts-- + if (attempts == 0) + user << "The crate's anti-tamper system activates!" + var/turf/T = get_turf(src.loc) + explosion(T, 0, 1, 2, 1) + del(src) + return + else + user << "You attempt to interact with the device using a hand gesture, but it appears this crate is from before the DECANECT came out." + return + else + return ..() + +/obj/structure/closet/crate/secure/loot/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(locked) + if (istype(W, /obj/item/weapon/card/emag)) + user << "The crate unlocks!" + locked = 0 + if (istype(W, /obj/item/device/multitool)) + user << "DECA-CODE LOCK REPORT:" + if (attempts == 1) + user << "* Anti-Tamper Bomb will activate on next failed access attempt." + else + user << "* Anti-Tamper Bomb will activate after [src.attempts] failed access attempts." + if (lastattempt == null) + user << " has been made to open the crate thus far." + return + // hot and cold + if (code > lastattempt) + user << "* Last access attempt lower than expected code." + else + user << "* Last access attempt higher than expected code." + else ..() + else ..() diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index 5cc0e53a5c3..fa9145df216 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -495,7 +495,11 @@ commented out in r5061, I left it because of the shroom thingies var/turf/simulated/floor/plating/airless/asteroid/N = ChangeTurf(/turf/simulated/floor/plating/airless/asteroid) N.fullUpdateMineralOverlays() - + var/crate = rand(1,30) + switch(crate) + if(1) + visible_message("After digging, you find an old dusty crate buried within!") + new/obj/structure/closet/crate/secure/loot(src) return /turf/simulated/mineral/proc/excavate_find(var/prob_clean = 0, var/datum/find/F) diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index 7432080c8c3..bfa5947eb16 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -1680,3 +1680,176 @@ datum/design/borg_syndicate_module req_tech = list("combat" = 4, "syndicate" = 3) build_path = "/obj/item/borg/upgrade/syndicate" category = "Cyborg Upgrade Modules" + +///////////////////////////////////////// +/////////////PDA and Radio stuff///////// +///////////////////////////////////////// +datum/design/binaryencrypt + name = "Binary Encrpytion Key" + desc = "An encyption key for a radio headset. Contains cypherkeys." + id = "binaryencrypt" + req_tech = list("syndicate" = 2) + build_type = PROTOLATHE + materials = list("$metal" = 300, "$glass" = 300) + build_path = "/obj/item/device/encryptionkey/binary" +datum/design/pda + name = "PDA" + desc = "A portable microcomputer by Thinktronic Systems, LTD. Functionality determined by a preprogrammed ROM cartridge." + id = "pda" + req_tech = list("engineering" = 2, "powerstorage" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 50, "$glass" = 50) + build_path = "/obj/item/device/pda" +datum/design/cart_basic + name = "Generic Cartridge" + desc = "A data cartridge for portable microcomputers." + id = "cart_basic" + req_tech = list("engineering" = 2, "powerstorage" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 50, "$glass" = 50) + build_path = "/obj/item/weapon/cartridge" +datum/design/cart_engineering + name = "Power-ON Cartridge" + desc = "A data cartridge for portable microcomputers." + id = "cart_engineering" + req_tech = list("engineering" = 2, "powerstorage" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 50, "$glass" = 50) + build_path = "/obj/item/weapon/cartridge/engineering" +datum/design/cart_atmos + name = "BreatheDeep Cartridge" + desc = "A data cartridge for portable microcomputers." + id = "cart_atmos" + req_tech = list("engineering" = 2, "powerstorage" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 50, "$glass" = 50) + build_path = "/obj/item/weapon/cartridge/atmos" +datum/design/cart_medical + name = "Med-U Cartridge" + desc = "A data cartridge for portable microcomputers." + id = "cart_medical" + req_tech = list("engineering" = 2, "powerstorage" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 50, "$glass" = 50) + build_path = "/obj/item/weapon/cartridge/medical" +datum/design/cart_chemistry + name = "ChemWhiz Cartridge" + desc = "A data cartridge for portable microcomputers." + id = "cart_chemistry" + req_tech = list("engineering" = 2, "powerstorage" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 50, "$glass" = 50) + build_path = "/obj/item/weapon/cartridge/chemistry" +datum/design/cart_security + name = "R.O.B.U.S.T. Cartridge" + desc = "A data cartridge for portable microcomputers." + id = "cart_security" + req_tech = list("engineering" = 2, "powerstorage" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 50, "$glass" = 50) + build_path = "/obj/item/weapon/cartridge/security" + locked = 1 +datum/design/cart_janitor + name = "CustodiPRO Cartridge" + desc = "A data cartridge for portable microcomputers." + id = "cart_janitor" + req_tech = list("engineering" = 2, "powerstorage" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 50, "$glass" = 50) + build_path = "/obj/item/weapon/cartridge/janitor" +datum/design/cart_clown + name = "Honkworks 5.0 Cartridge" + desc = "A data cartridge for portable microcomputers." + id = "cart_clown" + req_tech = list("engineering" = 2, "powerstorage" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 50, "$glass" = 50) + build_path = "/obj/item/weapon/cartridge/clown" +datum/design/cart_mime + name = "Gestur-O 1000 Cartridge" + desc = "A data cartridge for portable microcomputers." + id = "cart_mime" + req_tech = list("engineering" = 2, "powerstorage" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 50, "$glass" = 50) + build_path = "/obj/item/weapon/cartridge/mime" +datum/design/cart_toxins + name = "Signal Ace 2 Cartridge" + desc = "A data cartridge for portable microcomputers." + id = "cart_toxins" + req_tech = list("engineering" = 2, "powerstorage" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 50, "$glass" = 50) + build_path = "/obj/item/weapon/cartridge/toxins" +datum/design/cart_quartermaster + name = "Space Parts & Space Vendors Cartridge" + desc = "A data cartridge for portable microcomputers." + id = "cart_quartermaster" + req_tech = list("engineering" = 2, "powerstorage" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 50, "$glass" = 50) + build_path = "/obj/item/weapon/cartridge/quartermaster" + locked = 1 +datum/design/cart_hop + name = "Human Resources 9001 Cartridge" + desc = "A data cartridge for portable microcomputers." + id = "cart_hop" + req_tech = list("engineering" = 2, "powerstorage" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 50, "$glass" = 50) + build_path = "/obj/item/weapon/cartridge/hop" + locked = 1 +datum/design/cart_hos + name = "R.O.B.U.S.T. DELUXE Cartridge" + desc = "A data cartridge for portable microcomputers." + id = "cart_hos" + req_tech = list("engineering" = 2, "powerstorage" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 50, "$glass" = 50) + build_path = "/obj/item/weapon/cartridge/hos" + locked = 1 +datum/design/cart_ce + name = "Power-On DELUXE Cartridge" + desc = "A data cartridge for portable microcomputers." + id = "cart_ce" + req_tech = list("engineering" = 2, "powerstorage" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 50, "$glass" = 50) + build_path = "/obj/item/weapon/cartridge/ce" + locked = 1 +datum/design/cart_cmo + name = "Med-U DELUXE Cartridge" + desc = "A data cartridge for portable microcomputers." + id = "cart_cmo" + req_tech = list("engineering" = 2, "powerstorage" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 50, "$glass" = 50) + build_path = "/obj/item/weapon/cartridge/cmo" + locked = 1 +datum/design/cart_rd + name = "Signal Ace DELUXE Cartridge" + desc = "A data cartridge for portable microcomputers." + id = "cart_rd" + req_tech = list("engineering" = 2, "powerstorage" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 50, "$glass" = 50) + build_path = "/obj/item/weapon/cartridge/rd" + locked = 1 +datum/design/cart_captain + name = "Value-PAK Cartridge" + desc = "A data cartridge for portable microcomputers." + id = "cart_captain" + req_tech = list("engineering" = 2, "powerstorage" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 50, "$glass" = 50) + build_path = "/obj/item/weapon/cartridge/captain" + locked = 1 +datum/design/cart_traitor + name = "Detomatix Cart" + desc = "A data cartridge for portable microcomputers." + id = "cart_traitor" + req_tech = list("syndicate" = 2, "powerstorage" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 50, "$glass" = 50) + build_path = "/obj/item/weapon/cartridge/syndicate" + From d8f88385376eebfc14e85aff5a890cd0331f290f Mon Sep 17 00:00:00 2001 From: Iamgoofball Date: Wed, 20 Nov 2013 14:56:49 -0800 Subject: [PATCH 4/9] made head PDA carts be in lockboxes. Added Abandoned Crates! --- baystation12.dme | 1 + code/modules/research/designs.dm | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/baystation12.dme b/baystation12.dme index e80f58bb92e..25a0fa7dc3f 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -889,6 +889,7 @@ #include "code\modules\maps\reader.dm" #include "code\modules\maps\swapmaps.dm" #include "code\modules\maps\writer.dm" +#include "code\modules\mining\abandonedcrates.dm" #include "code\modules\mining\machine_input_output_plates.dm" #include "code\modules\mining\machine_processing.dm" #include "code\modules\mining\machine_stacking.dm" diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index bfa5947eb16..c611155a0ba 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -1852,4 +1852,3 @@ datum/design/cart_traitor build_type = PROTOLATHE materials = list("$metal" = 50, "$glass" = 50) build_path = "/obj/item/weapon/cartridge/syndicate" - From 9c628924e541d6c415cb9eb8205caf55853175eb Mon Sep 17 00:00:00 2001 From: Iamgoofball Date: Wed, 20 Nov 2013 15:29:33 -0800 Subject: [PATCH 5/9] After a very prolonged set of Syndicate budget cuts, Detomatix PDA carts are no longer buildable --- code/modules/research/designs.dm | 8 -------- 1 file changed, 8 deletions(-) diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index c611155a0ba..170b80622f3 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -1844,11 +1844,3 @@ datum/design/cart_captain materials = list("$metal" = 50, "$glass" = 50) build_path = "/obj/item/weapon/cartridge/captain" locked = 1 -datum/design/cart_traitor - name = "Detomatix Cart" - desc = "A data cartridge for portable microcomputers." - id = "cart_traitor" - req_tech = list("syndicate" = 2, "powerstorage" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 50, "$glass" = 50) - build_path = "/obj/item/weapon/cartridge/syndicate" From c095aa1eda379d47f978ace60ecf44acce40b1ea Mon Sep 17 00:00:00 2001 From: alex-gh Date: Wed, 11 Dec 2013 02:00:03 +0100 Subject: [PATCH 6/9] Nuke disarm fixes --- code/game/gamemodes/nuclear/nuclearbomb.dm | 29 +++++++++++----------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm index f8894c6f5cd..b8faeeef976 100644 --- a/code/game/gamemodes/nuclear/nuclearbomb.dm +++ b/code/game/gamemodes/nuclear/nuclearbomb.dm @@ -26,18 +26,6 @@ var/bomb_set flags = FPRINT use_power = 0 - proc //Bomb squad, go! - nukehack_win(mob/user as mob) - var/dat as text - dat += "Nuclear Fission Explosive
\nNuclear Device Wires:
" - for(var/wire in src.wires) - dat += text("[wire] Wire: [src.wires[wire] ? "Mend" : "Cut"] Pulse
") - - dat += text("
The device is [src.timing ? "shaking!" : "still"]
") - dat += text("The device is [src.safety ? "quiet" : "whirring"].
") - dat += text("The lights are [src.lighthack ? "static" : "functional"].
") - user << browse("Bomb Defusion[dat]","window=nukebomb_hack") - onclose(user, "nukebomb_hack") /obj/machinery/nuclearbomb/New() @@ -212,6 +200,17 @@ var/bomb_set src.extended = 1 return +obj/machinery/nuclearbomb/proc/nukehack_win(mob/user as mob) + var/dat as text + dat += "Nuclear Fission Explosive
\nNuclear Device Wires:
" + for(var/wire in src.wires) + dat += text("[wire] Wire: [src.wires[wire] ? "Mend" : "Cut"] Pulse
") + dat += text("
The device is [src.timing ? "shaking!" : "still"]
") + dat += text("The device is [src.safety ? "quiet" : "whirring"].
") + dat += text("The lights are [src.lighthack ? "static" : "functional"].
") + user << browse("Bomb Defusion[dat]","window=nukebomb_hack") + onclose(user, "nukebomb_hack") + /obj/machinery/nuclearbomb/verb/make_deployable() set category = "Object" set name = "Make Deployable" @@ -245,7 +244,8 @@ var/bomb_set src.lighthack = !src.lighthack spawn(100) src.lighthack = !src.lighthack if(src.timing_wire == temp_wire) - explode() + if(src.timing) + explode() if(src.safety_wire == temp_wire) src.safety = !src.safety spawn(100) src.safety = !src.safety @@ -262,7 +262,8 @@ var/bomb_set else wires[temp_wire] = !wires[temp_wire] if(src.safety_wire == temp_wire) - explode() + if(src.timing) + explode() if(src.timing_wire == temp_wire) if(!src.lighthack) if (src.icon_state == "nuclearbomb2") From f6a4f16291fed24a1daa2ebe68005b72b050c2b9 Mon Sep 17 00:00:00 2001 From: alex-gh Date: Wed, 11 Dec 2013 03:34:27 +0100 Subject: [PATCH 7/9] Abandoned crats spawn in unsimulated turfs --- code/modules/mining/abandonedcrates.dm | 3 +-- code/modules/mining/unsim_mine_turfs.dm | 6 +++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/code/modules/mining/abandonedcrates.dm b/code/modules/mining/abandonedcrates.dm index 72ddbffe4a9..3278fbd7a8b 100644 --- a/code/modules/mining/abandonedcrates.dm +++ b/code/modules/mining/abandonedcrates.dm @@ -60,8 +60,7 @@ new/obj/item/weapon/reagent_containers/glass/beaker/noreact(src) new/obj/item/weapon/reagent_containers/hypospray(src) if(16) - for(var/i = 0, i < 9, i++) - new/obj/item/bluespace_crystal(src) + new /obj/item/weapon/storage/pill_bottle/random_meds(src) if(17) new/obj/item/mecha_parts/mecha_equipment/weapon/honker(src) new/obj/item/mecha_parts/chassis/honker(src) diff --git a/code/modules/mining/unsim_mine_turfs.dm b/code/modules/mining/unsim_mine_turfs.dm index 64bb3e5a30e..b656adb4e4d 100644 --- a/code/modules/mining/unsim_mine_turfs.dm +++ b/code/modules/mining/unsim_mine_turfs.dm @@ -487,7 +487,11 @@ commented out in r5061, I left it because of the shroom thingies var/turf/unsimulated/floor/plating/airless/asteroid/N = ChangeTurf(/turf/unsimulated/floor/plating/airless/asteroid) N.fullUpdateMineralOverlays() - + var/crate = rand(1,30) + switch(crate) + if(1) + visible_message("After digging, you find an old dusty crate buried within!") + new/obj/structure/closet/crate/secure/loot(src) return /turf/unsimulated/mineral/proc/excavate_find(var/prob_clean = 0, var/datum/find/F) From 5935158167a73ef53031007913524ee67f21e77c Mon Sep 17 00:00:00 2001 From: Ccomp5950 Date: Thu, 14 Nov 2013 06:28:08 -0600 Subject: [PATCH 8/9] Ghosts will now see bold text if they have ghostears on and the player speaking is visible to the ghost (same room, within 7 tiles). Allows ghosts to better be able to tell who is within a conversation they are focusing on while also allowing them to listen in on outside conversations. Conflicts: code/modules/mob/living/say.dm --- code/modules/mob/living/say.dm | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 07456b54011..0dc6be11b08 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -309,6 +309,7 @@ var/list/department_radio_keys = list( var/list/listening listening = get_mobs_in_view(message_range, src) + var/list/onscreen = get_mobs_in_view(7, src) for(var/mob/M in player_list) if (!M.client) continue //skip monkeys and leavers @@ -379,12 +380,14 @@ var/list/department_radio_keys = list( M:show_message("[src] talks into [used_radios.len ? used_radios[1] : "radio"]") var/rendered = null + if (length(heard_a)) var/message_a = say_quote(message,speaking) if (italics) message_a = "[message_a]" + var/message_ghost = "[message_a]" // bold so ghosts know the person is in view. rendered = "[GetVoice()][alt_name] [message_a]" var/rendered2 = null @@ -392,10 +395,14 @@ var/list/department_radio_keys = list( //BEGIN TELEPORT CHANGES if(!istype(M, /mob/new_player)) if(M && M.stat == DEAD) - rendered2 = "[GetVoice()] [alt_name] (Follow) [message_a]" + if ((M.client.prefs.toggles & CHAT_GHOSTEARS) && M in onscreen) + rendered2 = "[GetVoice()] [alt_name] (Follow) [message_ghost]" + else + rendered2 = "[GetVoice()] [alt_name] (Follow) [message_a]" M:show_message(rendered2, 2) continue //END CHANGES + if(hascall(M,"show_message")) var/deaf_message = "" var/deaf_type = 1 From 31dd8daaf4553cd6a65e46ebfb57ecf4423e469b Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Wed, 20 Nov 2013 18:26:55 +1030 Subject: [PATCH 9/9] Diona will take five times as much damage from plant-B-gone as previously. Conflicts: code/modules/reagents/Chemistry-Reagents.dm --- code/modules/reagents/Chemistry-Reagents.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index 126b77b5bfa..0a072a74fd8 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -1340,7 +1340,7 @@ datum var/mob/living/carbon/human/H = M if(H.dna) if(H.species.flags & IS_PLANT) //plantmen take a LOT of damage - H.adjustToxLoss(10) + H.adjustToxLoss(50) plasma name = "Plasma"