From 0f6a3adf6812ea228f115de2bf786c9639ae754e Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 28 Feb 2015 16:28:54 +1030 Subject: [PATCH 01/13] Fixes #8256 --- code/__HELPERS/global_lists.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 68c74c614e9..6de12ac074b 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -45,7 +45,7 @@ var/global/list/skin_styles_female_list = list() //unused var/global/list/underwear_m = list("White" = "m1", "Grey" = "m2", "Green" = "m3", "Blue" = "m4", "Black" = "m5", "Mankini" = "m6", "None") //Curse whoever made male/female underwear diffrent colours var/global/list/underwear_f = list("Red" = "f1", "White" = "f2", "Yellow" = "f3", "Blue" = "f4", "Black" = "f5", "Thong" = "f6", "Black Sports" = "f7","White Sports" = "f8","None") //undershirt -var/global/list/undershirt_t = list("Black Tank top" = "u1", "White Tank top" = "u2", "Black shirt" = "u3", "White shirt" = "u4", "None") +var/global/list/undershirt_t = list("White Tank top" = "u1", "Black Tank top" = "u2", "Black shirt" = "u3", "White shirt" = "u4", "None") //Backpacks var/global/list/backbaglist = list("Nothing", "Backpack", "Satchel", "Satchel Alt") From d0451eaa2d339241472d2126c1c30efc03cc5584 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 28 Feb 2015 16:30:34 +1030 Subject: [PATCH 02/13] Fixes #8249 --- code/modules/hydroponics/seed_datums.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index 561210537dd..1ee86c22f45 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -685,7 +685,7 @@ name = "wheat" seed_name = "wheat" display_name = "wheat stalks" - chems = list("nutriment" = list(1,25)) + chems = list("nutriment" = list(1,25), "flour" = list(1,25)) kitchen_tag = "wheat" /datum/seed/wheat/New() From 3bf7d1446ca902569b406360bca49aec42feee54 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 28 Feb 2015 16:45:18 +1030 Subject: [PATCH 03/13] Fixes #8285 --- code/modules/hydroponics/seed_controller.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/hydroponics/seed_controller.dm b/code/modules/hydroponics/seed_controller.dm index e914ce7c3d5..84cbc727deb 100644 --- a/code/modules/hydroponics/seed_controller.dm +++ b/code/modules/hydroponics/seed_controller.dm @@ -2,7 +2,7 @@ // Processes vines/spreading plants. #define PLANTS_PER_TICK 500 // Cap on number of plant segments processed. -#define PLANT_TICK_TIME 25 // Number of ticks between the plant processor cycling. +#define PLANT_TICK_TIME 75 // Number of ticks between the plant processor cycling. // Debug for testing seed genes. /client/proc/show_plant_genes() From 53e59cbf942311541fa418bd70d6415538ca1eb1 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 28 Feb 2015 16:47:08 +1030 Subject: [PATCH 04/13] Fixes #8126 --- code/modules/organs/organ_external.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 4dcc006df6d..5aeb4c8bd7c 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -84,8 +84,8 @@ if(istype(owner,/mob/living/carbon/human)) var/mob/living/carbon/human/H = owner if(H.species && H.species.flags & IS_SYNTHETIC) - brmod = H.species.brute_mod - bumod = H.species.burn_mod + brmod = (!isnull(H.species.brute_mod) ? H.species.brute_mod : 1) + bumod = (!isnull(H.species.burn_mod) ? H.species.burn_mod : 1) brute *= brmod //~2/3 damage for ROBOLIMBS burn *= bumod //~2/3 damage for ROBOLIMBS From c659ebefdefa85efef0ed0f5564c79674d3b3d0f Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 28 Feb 2015 16:47:27 +1030 Subject: [PATCH 05/13] Fixes #8176 --- .../living/silicon/robot/drone/drone_items.dm | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/code/modules/mob/living/silicon/robot/drone/drone_items.dm b/code/modules/mob/living/silicon/robot/drone/drone_items.dm index 10b11648d16..68df16d0204 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_items.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_items.dm @@ -69,7 +69,7 @@ wrapped = null return - src.loc << "\red You drop \the [wrapped]." + src.loc << "You drop \the [wrapped]." wrapped.loc = get_turf(src) wrapped = null //update_icon() @@ -79,6 +79,9 @@ /obj/item/weapon/gripper/afterattack(var/atom/target, var/mob/living/user, proximity, params) + if(!proximity) + return // This will prevent them using guns at range but adminbuse can add them directly to modules, so eh. + //There's some weirdness with items being lost inside the arm. Trying to fix all cases. ~Z if(!wrapped) for(var/obj/item/thing in src.contents) @@ -123,7 +126,7 @@ wrapped = I return else - user << "\red Your gripper cannot hold \the [target]." + user << "Your gripper cannot hold \the [target]." else if(istype(target,/obj/machinery/power/apc)) var/obj/machinery/power/apc/A = target @@ -140,7 +143,7 @@ A.charging = 0 A.update_icon() - user.visible_message("\red [user] removes the power cell from [A]!", "You remove the power cell.") + user.visible_message("[user] removes the power cell from [A]!", "You remove the power cell.") //TODO: Matter decompiler. /obj/item/weapon/matter_decompiler @@ -173,7 +176,7 @@ for(var/mob/M in T) if(istype(M,/mob/living/simple_animal/lizard) || istype(M,/mob/living/simple_animal/mouse)) - src.loc.visible_message("\red [src.loc] sucks [M] into its decompiler. There's a horrible crunching noise.","\red It's a bit of a struggle, but you manage to suck [M] into your decompiler. It makes a series of visceral crunching noises.") + src.loc.visible_message("[src.loc] sucks [M] into its decompiler. There's a horrible crunching noise.","It's a bit of a struggle, but you manage to suck [M] into your decompiler. It makes a series of visceral crunching noises.") new/obj/effect/decal/cleanable/blood/splatter(get_turf(src)) del(M) if(wood) @@ -270,16 +273,16 @@ grabbed_something = 1 if(grabbed_something) - user << "\blue You deploy your decompiler and clear out the contents of \the [T]." + user << "You deploy your decompiler and clear out the contents of \the [T]." else - user << "\red Nothing on \the [T] is useful to you." + user << "Nothing on \the [T] is useful to you." return //PRETTIER TOOL LIST. /mob/living/silicon/robot/drone/installed_modules() if(weapon_lock) - src << "\red Weapon lock active, unable to use modules! Count:[weaponlock_time]" + src << "Weapon lock active, unable to use modules! Count:[weaponlock_time]" return if(!module) From 4b15f1a24959f55e0e9fa5206da206f9a7b1cd43 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 28 Feb 2015 16:47:41 +1030 Subject: [PATCH 06/13] Fixes #7877 --- code/game/objects/structures/door_assembly.dm | 4 ++++ code/game/objects/structures/girders.dm | 10 +++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index b4281a6033a..ec55e6549e1 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -248,6 +248,10 @@ glass = 1 else if(istype(S, /obj/item/stack/sheet/mineral) && S.sheettype) var/M = S.sheettype + // Ugly hack, will suffice for now. Need to fix it upstream as well, may rewrite mineral walls. ~Z + if(M in list("mhydrogen","osmium","tritium","platinum","iron")) + user << "You cannot make an airlock out of that material." + return if(S.get_amount() >= 2) playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1) user.visible_message("[user] adds [S.name] to the airlock assembly.", "You start to install [S.name] into the airlock assembly.") diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index 0512b814b2c..85415cd1629 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -26,7 +26,7 @@ var/damage = Proj.damage if(!istype(Proj, /obj/item/projectile/beam)) damage *= 0.4 //non beams do reduced damage - + health -= damage ..() if(health <= 0) @@ -144,6 +144,10 @@ if(S.sheettype) var/M = S.sheettype + // Ugly hack, will suffice for now. Need to fix it upstream as well, may rewrite mineral walls. ~Z + if(M in list("mhydrogen","osmium","tritium","platinum","iron")) + user << "You cannot plate the girder in that material." + return if(!anchored) if(S.amount < 2) return S.use(2) @@ -271,11 +275,11 @@ //Girders only provide partial cover. There's a chance that the projectiles will just pass through. (unless you are trying to shoot the girder) if(Proj.original != src && !prob(cover)) return -1 //pass through - + //Tasers and the like should not damage cultgirders. if(!(Proj.damage_type == BRUTE || Proj.damage_type == BURN)) return - + health -= Proj.damage ..() if(health <= 0) From 71ecceec9edb319385a37985e16740832fc78728 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 28 Feb 2015 16:51:37 +1030 Subject: [PATCH 07/13] Fixes #8226 --- code/modules/reagents/reagent_containers/food/snacks.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm index df5a1f0dbfe..9ab669b4bba 100644 --- a/code/modules/reagents/reagent_containers/food/snacks.dm +++ b/code/modules/reagents/reagent_containers/food/snacks.dm @@ -481,14 +481,14 @@ user.drop_from_inventory(src) del(src) -/obj/item/weapon/reagent_containers/food/snacks/throw_impact(atom/hit_atom) +/obj/item/weapon/reagent_containers/food/snacks/egg/throw_impact(atom/hit_atom) ..() new/obj/effect/decal/cleanable/egg_smudge(src.loc) src.reagents.reaction(hit_atom, TOUCH) src.visible_message("\red [src.name] has been squashed.","\red You hear a smack.") del(src) -/obj/item/weapon/reagent_containers/food/snacks/attackby(obj/item/weapon/W as obj, mob/user as mob) +/obj/item/weapon/reagent_containers/food/snacks/egg/attackby(obj/item/weapon/W as obj, mob/user as mob) if(istype( W, /obj/item/toy/crayon )) var/obj/item/toy/crayon/C = W var/clr = C.colourName From 227fda7b4c3a578eb90f0ee66861207938e9d8c7 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 28 Feb 2015 16:59:37 +1030 Subject: [PATCH 08/13] Fixes #8245 --- code/modules/hydroponics/seed_datums.dm | 2 +- icons/obj/hydroponics_products.dmi | Bin 12618 -> 12610 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index 1ee86c22f45..d47a6582a96 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -916,7 +916,7 @@ set_trait(TRAIT_PRODUCTION,5) set_trait(TRAIT_YIELD,3) set_trait(TRAIT_POTENCY,10) - set_trait(TRAIT_PRODUCT_ICON,"treefruit") + set_trait(TRAIT_PRODUCT_ICON,"cherry") set_trait(TRAIT_PRODUCT_COLOUR,"#8C0101") set_trait(TRAIT_PLANT_ICON,"tree2") diff --git a/icons/obj/hydroponics_products.dmi b/icons/obj/hydroponics_products.dmi index 4f9911debeae35441836ef48d3e741dac76ff042..7708c4896aa348c9e443aec5759ff89816ab741b 100644 GIT binary patch delta 12102 zcmZX4Wl)?!vo6an?hb+A?he7-Jp#eqodgLBFYYcu5+Fc;pi6Lf39i9q2_9^5hnw%5 zQ}@)ZJAY=Xr)Q?8YNo57r+e74$FdpnOfF*i5Y)z$U)_a7J-aB^}oGBWb;@UXSD{rK^tm6esEqN19bnudmkl9G~ygoKEQ z2n7WNA0OY^+8P%ZmzI{+9tfQmj;^MNg zv2k*8vb?+uhrgcf0<{%d_GNvoDF)$OPoK25INKgcX_1%ocd_Ue(n`oz zFX5oLwaC{cbp`1kFT8|-pWAyy=`P}Z-i3MaiX%m_JB*YP?ya&Pi@^BD73r&juU+y^pWV;Jq3@ShecwYeIE??dV@_xi9h!W#QPxlCyQ!* z{uKpWj2SYZTuW*jjqNU*fUA*s?VdoWk?7-*Kw7O$5ZWvGdef;{L&#gUemmpMA>mUf z+~ubdu{X-v3ny#9LSLeqBjGScxrtu+#mb;Pc$3(}TuSjJ`9w0>9NQfn8ZC3v^`!v6 zVz&Z(@YT;;y8i{~fZ4z+EWWGG;G<{R++M>N0ns;n*}Fnv^8^_CHd6eE;84kk^M#N@ zv3CYyyN_ zBuF}oghY#^sv!Hu_v=wktQC=R?(T@^`vG!JtWallCEPR0)W~kFL(z3iC#ErVd8nhGy@ol6$^MR6>fJn}%0 z!ANnmYS5g$hK81!mWCQ3ES7JsCU!9&1&h>v?K46M$&xE9UR6~!I(ldbNtA*)6{Xzr z#7oOjR!uD?3DFb2!YCgii~JS;%9V&HKFmD@BKjUkKUraFqh(6R%B(SIiW z)Xx|~)OHlzrDEE^>AMYoZ$&7CIvo*&M)%cOL9I^|(zUP76(st)VKyuzY8W}YzA%f- zBPty0v_P>fhY~vl1#I3!Mv08hGlEIq=KLP;o|LHEU{oc=c6HXUro95~ocEL7^l~bv z6X0aNMlfRiL891H%tW{FleD9aB$N5b7mS_%C8)^9?2ezX8>EntU(w}fMgPWYK*5T> ztqbC!s?(!J&{Z&zn=rG1S0aF|M%oSS(hDa`WF0WgSL~(+$qW%tU7~9&T3V6>*P8$h zoaHuiU9T9Lc&QxmeUer(75GLXFxCWh30!36(-K_xySf!h(KtAJv_BLZ5@YH%VWmI6 z2fI8Y|AA=y?CGX*(1w7qIAXTlg()U zgzP3|PpncNE<@J0A3y~WK@O{*lV}0On&7(mkR^gMblkLLLE1f%8{rBBFKeVW2Dc07?zGVgg?C`!rsv;sG%Fx1OVx}da0G!-FG3~c z1r@xE0FB^}goWu!rftkrJCSx&_8JqOxcmh;3(B8?Zy+wg9`9u2>Uqz{Al0Hsd1*HX zMrWINep{SfoK*y9B#|?d`fwdG*gy}t`OIUMFcT$I+#Lp7{&J5D&|BaI`)>Ht zwL2h&NMdq zK&-g-mw?Jppa*vdyJsfLw-)noJ)6|3=M33u)F7%(iI>5+9SW8=S`8(D(NR&=5c6_G zg-Vg(I=T&rWoHp|A5IkYG$ILzo%;5^bs+A}uUv{jz?hBbvEH{{NLQn|5m#4cnjaRt zN`t<=sad?~c?&oYt92PBFt!CfE-!c;)=)jviiT}6Qq?IEllXlmCnF|C)L4**k4C>u z+!9Rz57=^>+vaDPt?v!|yv{2&CN<@53X)nd(we#O4{s};A?{?I41Mg-iE;sPWNx*A z?J`*lDZA;6s@1qrP)ZSS{M_Op`-0o^Nl#WMJCSU#9T4IqNYxZUX2U5V+b|gP()|U2 zWAhEYL7NS8VMDBn-otc^X3OLm4^_b)sc5*q zC6zPI3@{=u-FWoezjUEJ-*c}CO+)h9a*_GIHR8uk+Na=I{l+4ogX)H6yP5@g3%1&< z`P*Q~4wKFE+NSS9gN+LH)y0>r-fVQ8;FANRt|#h2`QgmmoHL_5PfNpQ1zDn6nV8Jn z*5M3d-u(Z1rT_Q2{%7FSfXVO%AU@$Abs`zd_G&wSE4DuQw!%h(N22j%j}CoPRFkLf ze%ZHt!#wEU{Vlt9Vc9+u5+QHC;wJK9k=qS%e+vuH9ZqUNP#l_O+#i;GCt+eb#Mxq3=TR?73;4Q=3hye{BbSckD87YbX70i*hm-CufZ=|nE9P~M zE+(b84Vc1Riq!4JIfp(Es;rz!bH;YY_HHVfH2mS=&jUL8L>ML5cvEfjL*w$Bq(r=` zAPOp6i(W4$ebO+|yQdj#9(MYs{nv-F9S4^-<26j<{3SCd#Qj=#=qm)U%#93TI%0ZH6HJ7jL8!e8RDRp-&y@`RD}#2#HCb@=i%V9w!^3Qt8^ zHapx=zWc0e8y?BiZ|KZ59%M(3g1uzXM2X*%zP9gp_d=A{=EZ=MeIw5_-+C(=f9=A& zHl}GVgGyeFeuX=2TS1T3ZWp5g6B~P_-ZP}MbOMF2s^CwBa}U!69YERrQjMhA`DFlP z0_9Yb3!_X(FROKCDS=g?gSUZpDTCg<&L-NLJv{605s{7|NT8gL`}*?AAG0%4P2WRh z?rZiPJ!da=-=rx|NDUcDH1B4K882#|7s>v-Nf5XJ9hsY8K#%rITdX^V2{C)f?C*u9 zPj}KuG5XTw5ByHf7yu7lSk8xO&@8{XcBje|YqKX*eVrjSsiNThEU zBpQGEOLD{9+UJ>L%2;RhK1o2r+B2K^7iN$jn%MW^HJDJwzA$z$br@#Ai^8!&-KJ_6 z_I5MwoTpx|b0iayzITIbOYixU_PiHbLs6d`5sV@jR;I8;at4&T!UMYwFNt^05yrWK zFS}EQnL^#+1^tQ;DLQrf%(mXn5YCS(L9tzZv1&uYMS7^;EBc&cx*8??shyIi`d3v4070q29dqsU}t}45usY$s4Xw_j)UUGYRq|ZJ?f5GgyKx$FH&R; zmar4lOyMmM+_6p&Jf(BBLpiD+NGm%f1|QqVx#W=xrUX>FjozyLAqQK#PycuskiDn< z3XF<>)$F0dPLE=|>n1;C^v7AjzR^AxSdkIAU5a z4XrO@8buoYXAo{=jVftVg?)<#9CsF`R!XBh#cUljRZaR71*h*=)cWef$ ztlVA7t3;sV`J0$nk>#Upn$qQ0aiAv}?i;&&2~|@6|2#%a!Km%&1C>5Z(9AR?w;k*S78B#mw`n63=5G|J4`(yw`e=md6UwrLDSUG6#(HwxKtadomqY``K#Y0MTey?}OP;g}b+GMc*ayi$=fEsUnx7BG z46?D!0(5NMWc{bS=$w+pAhZePGS)Z)mKVXSj3`N(QTWwM9TfXrDH5hTV}mk!I%sdb z9z3o3S=B9`N4j2ka&`T_F2Jb1ZsG8$#tyt2d9!lsURCYs&E>?G25f%oj{(HIh-Ggx z6*fp@k;q}mgDIXECV%AzDJAupa#&v9tgCEyEV|UVpQWeEy=NW$dcj6s&1rZ0*5%#0 zmKltq55uzlLzM=(a%eRWGxN}2!?u%dJ%#Dp@*;ky5}DBvIaEh=cZl&oknksYH`Rg= zhkF)uSbTyfF3)+ZAJ9y&6nM)>W9GdchX0nkYOL@5z4sUkH4dAxNCh=KnN1)SS9=Gx z56wx>0yprHEX4$ylp{Bu`Gn4=IYnW{mvpLk417p_u-d!(+ctU7;i<{G^^x>5S7NbC zI6JJ@GyWZy3GHi{llNjI;Vl#M23DWkgGA9N&daP4Rd;$v@c@0@{A_J=-uqir8YO`n zlq~m(=9=ZMpPvt3XJ!60>i&wIw!pd2^;jxE+#+Dms;Q1T`+WzO{pYCEA)K1^mz@4$ zMU=)V#v*Mg@>~4{yLs@T3Lihe|Ic^*OxC@ryyiB$^YZOUbW#Ws&V&?OsVc=WQ;>Q1 z(fC$T0lMI(M3iKL&-0(Lt5pkd?>rjbC2n&@=dN-H~q5$6{!k-N$%6Z!VN`6QE5f z9yxRA)Nc`{G^giWM?8Z6)c1QoO!6D@Mz}H zX9*Mdt{OqbMWj_N(^U+9<4f;|&lqBJpV;>7F-qe1tWQPUJcY~|EhEIV@WYC6A#Hy~ zJeJW>#3d!yI6b}D_+fSl-Fu8o@MYVZb|qlr@e{LB{aLB%YqLQk%*wFf!{RaY-{+v# z;jgYTqZ0+7TqD8bTn@b=l&khrEfy`FgyuJQG?72XF2ky512N1pmf2_@V6z1Vub=e^ zo8rW9#0v~&qDgXqEoS_swk*n?D*g;gBzf%f^M#lOjO+Z$XAVkhK_fy-#r>_bolij2 z#+~M6AB%yf>_baKtBIB?9!ii({Ft<5*MTos_0&j?$*`% z90fkR@JRq*Q5o3rQhls;W*;~0&JwRE!ke(ixXb>!Vg6}M zt2#Q9y(;MK=%3#vWAt74tzST{k}N=kDoJCG0`GjNQG?W}+m|Pk3Xp*KNmtHY3)sdU*)8W!Ug|U+FK$X2FmdF4~()!O6L2{3&Wdj))+;x@V898)JnBg=2Q}uen?z z!$@UC6V%b;3VpAKf1<~oq4Zq5FML0&&&EYo{9*sD%Hf>}e|BQF3EB2e`o+`W&-Art z(T3?|+W*BYmPPHS0C!j0yz9<%fPis~A15w6fKR>+cn$_{#dnNb)eF@nyJkCg$Sl00 z`to>eh9Op+*EVL?L#-_@KeL9~fwGKC9fx9paTqL5d@jL!=m2ip>c)bTgFYjwjQ#9g ziCmQcCevU9N{@@b&p9Q5uoV0%yZ41Us`CbH6aV2TuRI6DUEhXlRYo01Jj`s&W&i8!=7Kmg#O#_&fG zxXcS|15Da5>u9fp@iP_}%C>xi@MuUsDJUzSm(G955-DB6JH>kPzZer)muNYg1WB#G z?Pj=cM#b4FM;u|rrV>}c5_+xu|Bw_L8SVLZ#_fI-Ru< zjYVdhT_rBjsvIeC9P6JBy2`-q9C+{QNEXw=YEAbGwUeJlD3`;blvirq%XN{v-NLyj zL`{7RH%iWd_p_w}C_5dbN=t!5A&JzFY?V8rVF$S6z#l1TUbrr^ZpX{rHy8q7-$`L> zK#=qU`N%yH-WAQBq(QEzHDwx1(AeWij>a#hrn5;YY0trad9^w+TOK??=R9_Z#QdRD zJ_*TInXm7-RKP9ouaoWEhcrZf;hI_kxT&BkkX68fb~A;(=y|0X_pG9Al&wi0?aTY1 zsc)svERPP4`kxM!R@P_SB&_uiiof@70WwoM?Ne%qW9ZH0C$|Nt>dG`c-B^yI|6neQ z&bymYOw3fdB<&S`D(&Df8YDidg}ybQOCs|ufj+$YNOXRE-OV#biY}3dEf1sVYS+}m z?B(B1N5esbO*94s#;?~+Xu%RQP(S)7|H)BSa~wrAs*nao@-YlAwBrM(z*dSiVB<25 z9u0|8C`grLaKk7$Lg2OISvp%9&t&+ZjqWWTVW@d}o_)^HvpHjp+Z}BP zFVVhXl@X`q4e%toRcvDf^F*&(0!(JGbMHIsg47K{Hxa9^w_>N!pI@63iKez=dA4;g zKh`VU?_FNwx#<+kAiZu1x~}>5fQIKCEZrB)Lw_WY{?=JX?6c%eHtsAFuK(h&G4c!h ztTEf#`N#>RLw78LNDNX(~3Y?x+9qukGG zPR$qg=6C@C0ey6|5xuC;op6qZaVx8e?}5>7MNNURFnV~bPKk93G4~}Jzb?UEcS#rV zcUuK@0o0DMAo0#E%GttlBJGSm7aI7aJ zqOR*%3U%LGJnRKuk&xpP9l+&rz$jOR+kMy&OX>vY44#0i*AFri^T51`zz_|9hI~PV z_Hv$mO?k-d*=?7ljsrRE9B^^1VT@!64BKYE8}sTIew~(MT9uOniWLxOug@0L#h2_* zSvbo;VG5W?5pey}s!{o$2*b8~dS6~YF75br8y3GdkiPb3d%1upA$%H4a?&%Z ztXnPOx)OztxZ6u-rCM!k-Y&}H3b8|v%pB04p zXW*ka0?xN~xpo?ZDV}rqxkMG~kc4D#eYyXHbnv(4If_^Qp!4wua%RkOmNJ0AR?L2+ zwUY|%GR8XEZ_&W-0_I`-t*7{jmS2z_^W99B}`|&{QKfwKO5HRgTv-dWd>U-O=U$J(-?qJ*(-ipkl+9}V z6jOH^SCUIi^C^mehQd%w>{93?@V-tvwpbR*~fcbFaS43@YQCh=?y{Sf3vU zPGS=h=5j9k0D6lKD5c8P{eLdheu-|27heS_Go zJ~vUyvUFQ2inh{H>u(~H+@Fr;VOD*~R>J-OX;>C+n343|LY9ERrS-u6jt42ct!>TB zl|Cr1^I9+iu~lOef88k6twGdCuYzP}O=G@h$Z-><6f?-&AU20;-qrQsBqx(A7@;+&m7q7s_OBU(}NnQ zNl3+G857r zR-Uvix#lehZRf!zqZZc27NfGVVxT>T_w`NmXk?__Ew4WwZze9HASLd#`=4@;k1RJO zAK`N&(BQ3Z>qKpMpePfBc`=ejm*I+MdFC6B!?LJP?yrfY{j-w?6n?Cso9`>0zFgqt z6Xy2-?fKEFNHUOZA^n~%eYyhr`o|{nBu{<55^ilT2d1tlWGOXFr}_(&3@r)} z?vHRhipDG>_^HhDw-#VT_sBydPJ?)Of~>U2|82lk-wUN@SJ;cz%5MV(>!k|c4RHU^ zb=xTL=$cyOFX|W=NXlhfhKGl1S`^>E3HUrghE5c2g0N?g0AVwC2dn>X^4jGI{CNa( zTkptebeYdBuAbSAy0EbSf2ha*CL_a34A+3w3783y+b_-e30;)3tChQT0X8#Aa&ml^ zUz)qPGp{!9dTE~UPw2lbO`{dIfSiX%|*yt-a=I_4Vrj+>gz_&>1oM0DO1l>Lq6X`&DmeqINp>P16U zZ_J*yY2pJPr7d1DQjq5<*gTJ2YXN~4JdIfVI9siJkF)fKG-364jw-^#-#F_f5Urj3)ap5 zanyOc<#9hWv2^r+kNc+_DUN+;u){m*fbij>z4f{QWJb4y2yyue^GJc^!GX$WGFg@}lxKEo^+dViNz zE_ok>*u3YJeu<5YFMmFHO2Uu&EyPxNI-e* z0V3*&KL{D-TKo}*a@p3BY9A{`@n)YVDsuE%_h#qUD9&5 z{r3ZU;0^_04`P_u0|V~#%{Lt?zbuXC?&5!R^7a;4#3LbzI_{nG{7Zo{6+qZ6Q zqOmx4QHy~<@U!kaRHa{!&>s`N+SUZfiL_xj#QX|~pcFUz`{x_RWg5r%MxqX*FsLqD z-A6Q3H6MiMZiz?|P{o?&4vs|F2gHxL!XoEqF6Zua=NiMHa{Qh=JAjl2gaJ8oJ`Rb3 znqJ2F+jpVkXDf!2YsxMkXd9mCEmU_qZxZ(pSOQ~uUlMe6yf{`V*#R#nw zx)k~fj^`UETGmZzD#I~aQ(GZ#03jJ*_D#$F% z`(b}XtpiZ}QNmzJdT117;IxEcc3?k-G6tQh(l#=Ze)}*is6$WG;nC~fd&x`K(T4u? z7;$M7q25iy-v`y*&+|sVEiEECvKd6M{)?~c6Zj7rCofBzzz?$m1H@7m^YWR4#5YJt zSfl@`CFsQoVL`Ay4Gi=6K;OSNEE8Jgm^QTHq)z`{;}Pbl zk)=jJrPk`&L?3OIz#M#ZC*|wsVepIWO|!g)HrHx7GxG*TauQDzApE}dpWBOc5|M$F zpN2bf_I!Z-Q4yssGs)9cH|2kGtE8#v-(M23o3)41WO&>^p1IemXz-te;Xi*U#KK4g zWNYdZeLA>UFvlzvlAb-^suy>i&@#`CaKiWGHDKA(x6RWW)ZkV(D{Nl zmi*&06~3sUi*%=oT#P-;Or^_QvqIp&RLj;0jmd4mm7%f>S%SOPkTm1?q}P+XhL&rm{WK^NZYZ>bdrfV6Dw9>%u{>+YnyA z5EXoky3R!F-8)aY9xPIW^{f^q!_DNRldhmWAMXEQw_?xWe=Fa)wI*&)FZ(FVV$as(3+7%dl)u-T(LG}~t&wTyrk>?q`Z=U|)Y`xiK z6@}W1J4|X4&Yl4)QYf}tn4Ks0=J<|s0+LD3!t|#1^;bJwc%6$UC1}Oh#ZwQmV0%yu zCAqsBD}zy1h64dqa*Y-0JSH`!*~1%s?vHNL2at}O&BG(K!>g2(zNeHYLR<^TMOz{gOugL$Aw0UMh4$&1`eQQDxK~{Q zxZ|ZOmOu!|ok5~O)0F6($(M(NsH3Xv?#>DBf6mMp2>9L`e5TEYk-8if2n?bJ&udwm<$7~zyf1YZ=#XFKwZVb5dji%SlQnLKwvOuMO8dA}1{Sb2jn)uy# zGWgw^_rxNW21YHmKPaD4=CDDVXRb`}V2;bk8N9r9OEs(Gfaos@JRa~|3oMq9{1_*D zX9&a2ygPnJMr)RDcW`BRm(O5AfJE2p3~o&ju>O~8bnAfwV7|tpZrl+76sxytYP@P5DfM1QBo-%YH` zZ&gyu-8{BGVC~hYAsP~RLp6{@c?E==nW|QhakkoBrR1uqx%$=cQ+rD~SoE2+E-P-BIvzyZIcm zj1F#*XLhd>+>uxAW=Z`=Qf?GhU}n?@9KrBK8YK3{k&LWkj_3%U4gb{F+UsXYH`@rs zxd&;QhJ-}08LoNA4LKRl**^l57w8Sm2)yT_y>d91bKB;q2*Az8H^+N9%O+)oR0X4` ztGAnPti3J3df7Ya>)z|J;ukwJR0oe38gOgyc)8%cXj}VpY`#S5TWcciP9^WKFLEI=!!?tx*w$%IkuG@)9BGDx=-Z=w_0@A`%@i!o?gJwZjVx`{BQPyt=LidN^|3xj`Y32k9}F*clJIcgZ(h zZ{S5nE>5W{A_;sdnP$Msza1wyx>B1NP;P;HG#$7rFxlJ7sC5Yf&|UC))P>zL_zML! zf$cet-UCwKT;(Q;>~Eu-#Ip57(L%Q^ES2*^&%VWRtonk7k9@!8NcZP0so84G$p5SQ zrRt<+wo3IN=1uBX2NT`tt}y39Q644r%|(Ow zy@}K_(L>6o+}MD8En4+ngEO-11M;Hk)~3Wr8m~H1r{}qB2D~F$4rC#7fAh5EyhW)7 zS+`hyA=NUhkD7$1GKLE zK12ksT9KmP;t%h%6{NJrkW9qp&^`Lo0>if(3l2$fUnuUl(;8#A&ves;*$bMzZ} z!}Xsj*A5bWlyT5)$XzS8?R+P#OVme5p-niAAGI+dK50}RkKiP=$BpCXAJR(p94wPG zRkTx;MnJT19ko+D-^TJXc3v0dChFQ>t@sRjt_^UM#f4PRa&cN3NMhs0@EF-`1G zWoJrFpE&#FizyrXd|64dj~y1_?gmrT6*!wj`mo}`j-m*vc_Ejbie_h&h7~14$Wjjt zv0gFpQ4q@jEJ0i2%>p& zy=9%oyYYA$3Ik{fjt&J?fD#_P2~6@&>z%Fx1z->WwLr_phjqQAA#Wz2pdrVh^Y;zU zmPLt^rW*chktj{obJLTW~EH@)AuEW4~!E?Xq@XEwnMJHSnStxU&hWU}vrMgE&n zMW&$SY!s~T{8ETf`(4SxZ|g0EBG{$SM$k37Q~;b8w&c3*f+tEtbFjcOEd)e6vKoYJV984G`Wv@FKI-H-{wjFjF6s`v1%ll{e{+c zFf%u&?Q^P!vWYhV3g?w_XDyTBc=0RWI9a9Xu_VN-`|RIJEKCO|Tr^hT39+K{&+LTy z%zxTAivNTLv3ySmD&5)t2#Nm*>H6)V<|Z@KgJ^R_>iTakpFx%g`bici=|iM{O;u4# Kp-Rp?G~GUD7Qb@;h`33P^(>NO$+4ySq6cAbsdVfBxTC@69(C zb20mwJ+o##Yhv%|wHmdm34-Tya&j^=Gb<=4h>wr|^y!nSsVO!#_T%H@*RNkaJw1zx zikO+1+1c4wR#wKx#~mCTf`fxaL`0H*!Yc!6YHCVKN_Tg6Q&Ursk&z)GAwPcnP*G8- zudmnF*H=|ljgF2sGBS#djSUP86c-n#rluYo95gmI_VDnqwYBy3_O`aRmX(#&)YO!d zljG;-CnY7dv$Nyk;@aHYWMgBqu&|h(o-QdVIXXI;pPzSgb6Z_qB_t%&(9m#kae)v* zAO;2o=jZ2ZYirxv+sDVp7Z(@F2?%V-od`Tgrq^kG$=3*KfGPfA{pxaByLl&jp83|M z_*h!v-Hx$Pb;XCg(dW~qWfL8OHoy9I7QP%E7vk9j9NJ+&e_bcbuBuqoU)hOwy0wDB zGh<$z%=xJw)7$!%v8@B+DeM=QCIc803@{1AbA7a?g|(Cqf)%{+z1fV=1rD6yNWWkg zt2xNB9REFV2CPPAj9J!vqW9#)dkoj&ysio8<pZ(r^i4UN8cX_)c#2q;>?~@F!UGzyKh7Ac0j1@=f)btdv;7UEIWc^Zx(#}NVMlx~ruJ>3b;+k8H6bA00?DHR$^vRK8rI5!R z3p3`vBUbpmk1(@tNS&35WZ>Z$1#%8xqRBJ^hP(fI-#^@Qzf#;|e%Hs{qiwwkg@dDp zQdP4Z7-AZTbAtaAS0g}7Y?CYZy}yybf0}qk;fO-Rut1^Q$s3H zZ>PxkPqKj$VbT<54KI0;1g;nq&P@THcrH?WpZ(2@&XJ9!jrO}U5^J*;g2!^94b?kA zK-XKX+n)L$@UK{+P~s6z_lsVRXW23J$6v8=JS0+U++r4maUZ0~2SEZUs=EYml`|xH z=}9DcNz`V<*5so!woyc^2Dq0^;nncCQBuq4NlCa=dFf~%0!wbq8s^)M{X!yo1_pF= z4wGS3?tW5wu!kfSpV+1X8j}KuK=*zUFzvwwzN*}M$qa9KY z@paf9?f4Y4BP_H1I|IQM5gBARxI#=FB5g4xZ%y}=4n!0F!6J+X?HBb+l7h%GkPgT7 zCY}JyO%fGF6G2NPTjTFgW*F?O{qC}uIqT+3Y_Lf>8-CP{#1e`gsesp*h)TZ>M zNjQ3C(8k6D5d}Np%Hq&Jp=}7TCUhQ-DIh)KnMQIy9VA?6jFavrTtHC>8W<(fS!Chj z!~&VsBE+*tIo}&1UBN3Oo3R#<1cnnK2Oz;Q*tyTsaoWVi=)%%`GU`kLw)%%D(w+#2 zPFPFWpF#RqLp~Mg@8~*v#J1l$&dKoD^h%-zmUv7|8Vi}(4r>;6uz+iq@+o-07w;)Ltiw@!ucdwF)gMJiW%eYlj=b=AC#qO zhV)Yuls`dK!lX&cu+vev{!oKyO78G;H$gWB$csjr$xx|p``*YYw~+%pR_~|#3R*w%ViJDKsZK{ zV@v4pR}mP-nG%>u&)v)ZB=fE&jrCOq(a}Eqlor_{aqj^xSqjIg+tq>I*(R0S7X1Ky zV;g>KiZz|`L>Obmmk>jUEp2Amjzp`Hf16g_#9cqg;3Mg!hAR4t7Sb;wnl)bRY#q3- zhrC+v>heudv6Vi+1HUX7DrC{1Z023$#kfu?A?RC25D4}|L5(E}wD(TxT?AY@1ie6e z500&w>{LR4fx)JA2K&nI{&Nh!nV71GLa7O1uBVk>sFLo4I%omS51vT{&b-}25RB3V zCnf`aYFjl)wat9<4UO-+Uj&{EXCxk10-+F|6;hPPmiMmaR`HsPXb1()Ox{KEGfDlug*WqlDavHm7 zn{8a(ulB%HJ#9SuY24#mQAcjsWX{`0G7UqT4(sq*@A=dmib-#lw~!%`C(2z;aM>$7 z7HY;qc)f=Ya7|0{s9YoEXb|5|MCb&0D=-Su*47>XQ7L0_McR38KZIYzqQU=YCchvF zr(fu381PUVwdoNXOna+k~-2a%~$_ya?8$?SbSje>mz#gKS+ED4tWCb`seX!8OMGayn*Vu~p z`N%^Tx{|9L;YMluapxkueD*zpv~eR5#8|aShN#Zx5U{{mA9ge5>iH{M|Kqs~YEyp^ z`7a1a0Z9ucL*Z^+tf%V6Znv`r-c2UEgNg8TVD0?^92|+wWRaS~*#V=VSdY~ZNm4BJB#N1HxNN2HRkIE})=lml z&D98o55W#SzqNuDM}EWAZGL=}_=@4;kGZOG3x145rGAU#ZlHx+A(FAnl@O$gzycTb z8L28vNyU?4a?~?EI+`-WGkC{Tx(m5l4euUJ?~Joh8VU=5XBnpnbqz`O6C4a#Ss_F8y=5vVhY zHA)?KDO;dvSTetnwB;Q9z9E7B@H>UZAELe7qh{P1pz3kBBVzr{w`WxrsJ%VZMQ4eP zT_zjW{ciMK=|iC46c+f!w}>+sB~A6J$A)vNXCQ^Bw2;0a6gPRz*wKbyE5;qr}AEjk5b@0%(d4!sS$^?Z+fTTClZn0{7 zZu#*gS)HAky5&&$ByRKZhGFtM!z6z3+yP;PnvngJ1qdS)sUy5AZSKxH{yOCZ!#~V6 zen~08@3Igut~f^DVyfw*LB1vUPa!jgc3a7=Y>tLA$HKFga; zLZ|#jPAoIYPn_GJ9#;vpw7}mihwZ>n$_J9_{E04wzMv_*;c+WB;SYX+k(Gg3Bp1T~;Xk8pD?&m@lgLn2c8vGD-!q~x z8!5jfc33(~Hn2qiZe#c(pD=h<<`{prys_1@HaT)Ry+aCSl-st^>s7c__@jn3~f zgY)Njk83%oUd8_~;EC+8loR#bga*fsH>gFOB@*Y3XIl7H^3u`SMD&?TVX!<;FE~TG z0-b{f2+#4FMW{Z2$c9EqP2xB&yWKf?L0taI?>t;El|Xl zV17Su6(EKbE}GuTy{!H8)Iw_^^BW&wUlo6g)~!?-Iy;Ws)4c8Ae0`xD+_oJ<^>ze3 zu43u6n93_V#9c1ct_S}b0m~}8lyE#KdA^C-5oyNPm*ipx4|m>NO_yKJrND-1uqT9`A^t)K)|_SQuxu@f26Aa_g~=;<|K@Ti1#e!(cKGg4gotCt;Dq09M-z?yj`%SUA)L=(i{+dzW~r(aOy z5FJ@(*BuhH$AnKclIJzlwBiW2j;+Tve-stywtxv~Y}_3->Lc{nU&OvwGV5SI2{P3oaTFzPFy1(0T# z)CTh?{R)^g6^F>UR}8oWi2Z7v{_lhBf47P@FIf%SdcWYWEMM0d>D@eL$tWfY$JML& z;`aOW97?wuKK2%!=>E!Y5#Z2yC;;swmeZFx73NG)_6nYI~zgXDaYNgBYvQPF2 zEz5I9mJ-Lt4y(=+`vF&$as3<+Bj)pUyZt{ms3UaKxqRi4 zcRDo5F~h*KoLB9)K=&$aZNYbfub=cvQu5zfeB}WE1#fYr(eh^tvfiGMidY z`Cv5MgC6bix4?oqYnIifB2gu%IBupygju41krVAdG<9-xmT`FFFRJxVX(PoVS5M=x z;mEv=el$HmTlVtOrdf5mM9ag0akKGmI%wxxQm=QIBRpm9?3}~hr>^glYX%uBmSozi zde?47d)=wkq(KUS3-4V-zNlVGs}PSYMO8JA&zaq(Mutn7*;=k#Dy;s{^C$n|)ZloC zknv@)DRhAy^?2eC8aq`f%NJhFtVBWKX=CHqOq;vWfPH*{4Ws@00nul^J z-|P|{DDfZ1YWnZPNgt_@I6!leytHmYHdTojaUum>E! zo2?L5k2H*MgdV7A5(hl$OJIO%@7m+(hKOkezRGYy3~hQ-n$d}9{Kod1FKzx&0mvAg z&n%n?X*=ojMOuX`Xd^Q1AcT%A72T|8YiERIM#8k6=C4YRyDRxMtKGBF1C(|O-`)sn zF_PPbfK-u7pi=YH3P@vLse&JOOIV(6s|Bb((;*w+hd9R8YYs)%f0!%AAyS)n-DK@- zVgBIJ3M*Z(B+uk15%Mbui0{3+0pb(wA=;@0U0<1q^YKyYvYM%N#!yd~J=);80Ag?G z>bo6CE3IrMutqlJ^>n>cqFnS`E9X+m;Dvml3~O6ggNFb`L<2O907J;w`?(srP=*|X zZ};-9DEVy0Ej0g#TH!hSIRUD*X&(rel+)`d3h78@xB*^UOGgorRSV$b$##MM!vwdx zio!K5nXE_n^`=Qkhw9rnbg%u0$2zE0D-<{^N|PajGsW*EmxP|VpHgd%8$vi{s?x|b zq}?;#XldSmQOC7v5Wk&MZudRkCt$3_jBe$7gWVAp&PmL!L*NIm}aV~8_sVtN^Z)ibe8_ju+u+Vj%rxcS+fTi|9hynqd=Y4yJ*NJ@YhXdq zm)c1%(6L0hKl{v+9p}%Az5T2y9kdPZ3Hv0obx><`WTe2O%4bgP%o0E8fm4A*AtE7H zpYE>cl-``Wwt95*?snmVZQ19q#z!<|3mnSd>2@3te9v}4)?ODjP}-XgxUcvY=;x!U zQFek5mwgusU_jkf24LIFg(CN|J>EiD@c6`l?a4Cs1=c!bXGrxU=MzQx04PxDmg?|u zo4zY_S{*1uAkkTZ^NUf0_Txa*;MQ4IefiJ1cO|Ds&s-491d-AGXA?=mN zByhp;X%83=hky>U398@myIVdeUCTGjma;NsENJ;jI3jL$6g>1|cL*nsI=mGG%mcn! zUPxGu&Te*pUP~PIoQm~wgRx#-cHZE4Ox4-k$Tx`&u3Z&$zo?6^(TEAmQ{OJ&r7g2C z|M3I0w}n&AY;5@LFUajnmtjjhg}zb(&o@hn)gnPjQ@#rrk5iBLQPb3D77W|o(+wD3gB4)P7J))-ZkiYUM<=k{>=;iD~aZ$JEpFi3*k9QZCy;7&2xwcjPi z?X}UM)+&WFEn4@wTuYaTo=B~+_R%~y`jwKKhuc8*8-CPJUUWI{-t`1jRI)ASaITI# z?Gt!7<+m1E{T{F%McdbfWhOQldzfC9xN=Y$E8L1Ff=Zry6ur+lNF30O*Sf!OQt;-f z$|)a%Q}2(jKc5yb&HxL_jDOf?HlpXUCO=m3@OR$tXUJt2FSqumWxKgQq)+ z3a5_JAK^$4>#z@tCzw;3>$(VkKH0FA-^BEAde`k3r1(U{d>@eAyyS%2`6kV;9&h(r zKSupy4ty5)@I*T43TqSM*1u-#*0t5BnSlVW0zoj-grgFg#|B<-AN*ge*KW}<1!@(Z zRczjp{rPHxvss4d9m9@eoS`g%%+@*Md<%mLf+(C(oS?t2uPPqG2*LEhW3muT(8_%t zY2%3#n)e)g^`R2`%-V5d+@{$%v)gx!cgua-+teOt(U70;dB(uRVxUz@>PPwuHsUn5 zT3wPLyrWc=G@!TWMS^kkNfh=bJya*b-mxFtjOUK(pET=qP(I6@p;!oF@hzL5vMO(K zhiSnZK71!9Wke8Zsl_uPhJ}iQk)WcUllbc|QBf`(sFFC|<%_}Al}+xh?xT*FX6IPY z?K4-cet2^s4-^;*x`4NHb{0xd*y<8_@>6#2aVI<_5D)M4P_C+)i$2!sIqGOsl6er6 zn)W_W)Fd$QnW(rpP>I)pmg95Kx0-!n975dEpw5S~AX=?|Q8wSo{!9Gv8c-_rntsbr z6!7*qeq6hV&mYEj82&3?2N)3IxzZ#&sWfixMe3mWEQleO#_savB~4izW&ur`+A?!L zaRWlt61z$y=K&Zb>c%p?KN8EW4{Y7>n3HT{<0G`fq@GN)JT|JM7vOM`|Gz?Dw#7#e$2+{Coa=95)ZCWvg1hP1rl+uJLvZ znTaKLL&Fsbb2G|c8#5~%9bNDWgG*9}?|`F%K4;225*Ml|x2UvM)6G#cHVT-J_w((^ za-;5IN((&YpX~PTm%nBL;cj1GS&4u&JkKnf7`o5*k8PG8W77PZTE{vmNpe{Q{OjIx zmj0z@4KKVotFlG;lDEUXJjNk-rjpJy9(gg^bP;oVal0Y;``1iW?2Py1;C!uK-y@Kq zcFVSu-A=_D3JVv%FD%$eRu_nI#B;6{5XI+Kd!R_;kh1Qa$Qc`3cUr14qER=hbv!ll zUAdgx-{d;m_u$PT=5Z7&whUzI*BVePMQHV$u88FDkOZ**511 zL`D9Lp(+0e=mz;zZHzjzO3vXD*9%Y>no+Uelj3HZU!y*~;kze@UmvI+gSiCD8owcu^p!*JW!A zp{s>EA=PJIL6RYu8G3a3GE~jbxl(Ux=ASc>I2sz=dFUcPvx|b)#c> zG24sja8BLWm^8@qb8zt8uL-K>irR}`?Y_IDppf&nkDf2#f^4TkwyWVal+O8(!1f!T z^4e0)WJK607C5cZsr#ALBNqtjh*WH8+rLPjWC*${4Ox!RH<3fx9Wf`hm0$F;d6Zdf z$)Dx2^fAHU&N;Fj{O9wj;?l7VU7pmxdS6Yw;|IKm9r1lrS%O06W|`}S>NdMFehi|p ziX_ur9D8lLa`W->8glbwP)Z)z7eG^eK9w5w_IGg#ga3DA|H4#^CVFfjkk{ zG!8Cm7^$i`E7OQAL+vZ7Q?$kPS7cpIHWHN<1j9{;i+tbG)u21%!7nb*j733l%Sv6P6ds?*|q$jtFl za3`HnPD##lZTET@Wx^HVOoUh)Lo4dSb zSr2{PbKdG~rulm-a|Bcq~Z|24I4 zxKFmcTo;QE2w|4A`SnFsE-Vb>eD3APrrM;Z9aqOefUcA!=jgF;05|XdPRaI{%;n@5Bcc-oXCZ~l9)`P{DpNF9i&jtS zv5DxrR=2s@aEk<7&u6}zoxQkZRZ1mE{`x^_Us+x?c*hL?-4UwET3v zbMw!MTI7G(0>tVC5)@(PFMCu8V$b51V)UdWc{0nvKcJ$|F`e`5%cbI5374<^anvLp z%0iM4l&cJ%rA_0a-A{QirxuJ*u_-GWb-6;X|008wU({5ARza8Pti4%O6RIl!o zh*NbVo5mZI&x6W z(B}3n!G-gt7V&+&O&gUx1J1X^oHRkOQAi(sJpB1vA<~w}fX9_NTNh|%g)uENcPk7VkNGPhpE(Hwpf_xb}Ci0d1ev!WZcK$v!o zbW7u+(tR#llo2Op%^pGv$MBAic~ksnxFwuTV^NYic^F*%z2l67&t1;Kz?5j(kEU-j zwb2|8m*qKo?xTa1XyrwLX!TMpjb#`xqw>-6^q`rXvkxUAEztu`lW=gD^Z)rv01-K> z8#w%iVWH5QYtWCS}Ie*60-!-xusZyUWbl(taA9H>V}&@*Z;^yP+oU>Ogzh9mFy&j_skE z?GMtt&=-z)nxBoit+j4>3pHytGEUvglGj#?8#wF=S{XUO3{YPWx%#6G4AP5PE+O`@ zg|WQp%0{bV-{ds-0w3ykJoo``Yv+=~H`vh3gxs-BzOZS~V4XRpdn2V!F&NCvJHWid zTPEhft?15t+O~(m6fAfI-$aH2Ic@zwW3F+p#wFV5mG~|_e1Z4oVm^gBpiyC%xW7A- zye$A6Qe4I_g;ahKVZ}NQcqK|Ph{)@9(o|-46qQ~kq`$k3;lP^WnIUsuSkKDQoWY5! z`DbzdM+tUPQ&{HBszOs>B9DYkh>5hpgLv`TJ$S=2vhGXt{m=^s#t^;eJhtV=u<-kt zT_i)?r0K7C#jmx)zb6Yi;GmhN2qZ;o>?EM_>s0%s$n5q`X1@jeM@_knGSWLf4=JTf zR17hR`@wBWv|z7OGtLy?_hLbJyuV!a&0VBQ+zBB4y~ymRqB6g?9%ROe=6RDuTZN2} zz8qn|5PaObCd)9~g^5|qL(Nr4D$ObA4VNnqR1 zhAGFuP{kQm5IF}FO&-quoszXLM3XB%jRC|a43KLUn?>yri|xySB-l?`^1db&eJd+z zzl_wlHNQC~)E)6f71JvG;&%FuYE!K0p@P7(Kqg^%xwC}znk|J6{qYL=hQ@_EXScOY z#9dUdzQOp4bH*1w8@)iCOC}kCdnkk+e{){0llhT277BQ`=0I?(92_8cd<BfSaLBq{S4&W6DKvDsU@s`!o!JKYq~`JjT;7~xwbq!p0IJ^ zf>C$>TWPCtXA!u{NEXsS@=dOx?TtZgex(vgKxb)!b*3kcibcRz{_nnFgei^;>t|8~g4Zcs9%16N-eELo5S>Iy$4{ zmXR-xS0O%v{&*c*bUsI`)u@Z{^zlJh(xh=U7vacx;H>S`^a;N@!I|6KQzZB2gj`BI zi>%7TOWnU&ODtWb&HFf?(KedcI|CL1yt#omg1*M?*A8OX?N<-=NAx+^MXTslW=Vj#V*-FU+zo~pQCC0Pak;crm9Fk1nwSxYd1%< zV}M-c95|`!ezNchRg<|`TyQ(bTbO!pMt1z6T90G%`6TMyW|JCwME)t`8r|o)>Ku|| z4)R3~n1wfR6e!-P-?|X5%ylxzDl6%x-FsIl#%Shl;Uos#X!R7wf&N)2 zPX;%CX5kUMTW$X154K)3!QL*d8}mgOiOXpu=#!Q{greG@cZAQAm6&U zn6>2OG{&^e3g>;e$x~V!4EV04We|(D=Xr;MS@v$8z_(mA=x3M|Tc|Xs ze#ka5DoQ`r8?bscsUb2@4*V_2!s}U@s&4OK_crx8^Paqb=j7Tx|H(YA7TJ4R*_?jH z5);V*35?Ok-g2e87=y%Bv~Kwr4h@1hP@(FKYI|MnyZRm+D}bTn>uakftBU`;|1#J4Rzcr zz4VT)pge0_>SF`;{6Mxe{XwiQ82pzAW`P;FFpH(xTj$5%wQqEV-+lg|L3N*k{7(@v z{J1Wnc;Evv%f%oHk_$^U5gC4R?(0deq+ia)o^PGmpZfm@!#Rtgk`H_NX z=r@^heTs7v+&dBfsk^N}ik(0P^YGEd3Q~AC1KCZ(pr}f1-`{e(EjXVM7T~vp7%jGi z#i6m8z}d=GCn0$2-162_{Gv|U|h<+>q;h21jAwX*D0r0 zqc6ICS-G?l_+t=&7SuP}-1NxD^M<+nOBA6vTLe!3XXRb-Vx=LlMPj9r3W+D*K|4Ve{TM2CZ>5LVhdm( zl!@XS0^Dzp*E#$B@YmL7>7pS~iGO9L`V8zM^H&fJu9x{jsDneCaV|gS+QeotfXq9* zx=o=bviTs+pI^KR?f5Pi@Oy|26Tc=_aBHfOQE)ZBiq4pd9(5&7f1^tj04W>2ZC-CI zZFA+nE1i4^u=Axjw|j*%P=4d~hE_lSJrjX$Gw>ZX{8A5>Ab8#rDWA?TG1~mSw(|Jt zeiE8Kst3afc9whgox17_F;lD-gw@SZ5kK$=nz%zU? z6~4k6`>K*0g;HQcoDhzJJqi|oAiCI(0#Z#b52W?DJRHmo+RJkq{djd)doD-lMF76R zA~05^vA2>K9INwP_5>dKi0A_vSY`(I2_`fdgPhwTrX*aH&`S30M<`9DGE}J*w~?0w z#}=V#=6d4w<4wR(%=^Ip+eMur8T%};AWTPljY-*THw_wcod#6L-DTL#ap_ETDb3JC z5}&7Drwww`x{?ve>gf4Lt>1;y@IYdsDHR!2bv8UWf7I|sVdY5#?d@f9LnhK1^~adO z^JN(8ew>D%Dw;_|=$5-f9E5Y{PWxSVeU_WR=T?)5hzRxLvP3t&Hi*lt@% zeOv~n1QHB~v;&GzVR^-`$}~%}1;H;w)^G8<3W+q|tA1ecQ&7@4ev;7rdpB8GS?Vtn zrKT?%8o-(QZadoMQ1^n6o{-um&GF!ipyI>BH&iMqTui!+Wfjo@*focPMtL+ zwzUMQrsUO<*WoXfz{9Hd)O-8pv*SDgJ@G$8H{un{SkH*%PGd(``EK!O+Y6y2mpAI< zi(I{g)#rM;|GF6H{*S!DdVM;vNF`aryI)sEa?ZjH}SlmbAO{#I{XK%M&I{z`g%Q?EWuo^s0CfD*UeGygu~k z9^~7-wEnc|YF73W*b$`0`t*-mbI)H>9{Wb7_jHTk3FF6>_=QQ*kCzZ@HnrD&PwC7D z)US={|E7rLa6%=pXmzbFB4610Z!MK)#4pITqMs3uXW2Uei+^`iS)ErZomisV>ee7J QxPL`aR!yc#$|Cgt0S1Sn(f|Me From a0452f34234af5ea9e1dad6baa9d97006742413a Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 28 Feb 2015 17:08:30 +1030 Subject: [PATCH 09/13] Alternative fix for golem damage. --- code/modules/mob/living/carbon/human/species/species.dm | 4 ++-- code/modules/organs/organ_external.dm | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index 943f90bcca2..ea4f9f9d41d 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -35,8 +35,8 @@ /datum/unarmed_attack/bite ) var/list/unarmed_attacks = null // For empty hand harm-intent attack - var/brute_mod = null // Physical damage reduction/malus. - var/burn_mod = null // Burn damage reduction/malus. + var/brute_mod = 1 // Physical damage multiplier. + var/burn_mod = 1 // Burn damage multiplier. // Death vars. var/gibber_type = /obj/effect/gibspawner/human diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 5aeb4c8bd7c..4dcc006df6d 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -84,8 +84,8 @@ if(istype(owner,/mob/living/carbon/human)) var/mob/living/carbon/human/H = owner if(H.species && H.species.flags & IS_SYNTHETIC) - brmod = (!isnull(H.species.brute_mod) ? H.species.brute_mod : 1) - bumod = (!isnull(H.species.burn_mod) ? H.species.burn_mod : 1) + brmod = H.species.brute_mod + bumod = H.species.burn_mod brute *= brmod //~2/3 damage for ROBOLIMBS burn *= bumod //~2/3 damage for ROBOLIMBS From b572763f7793c4546fefc1d929262ce2bf2a83d5 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 28 Feb 2015 17:19:21 +1030 Subject: [PATCH 10/13] Fixes #8253 --- code/modules/hydroponics/spreading/spreading_response.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/hydroponics/spreading/spreading_response.dm b/code/modules/hydroponics/spreading/spreading_response.dm index ccf74e4ef71..1f8a0cc4688 100644 --- a/code/modules/hydroponics/spreading/spreading_response.dm +++ b/code/modules/hydroponics/spreading/spreading_response.dm @@ -63,8 +63,8 @@ victim.buckled = src victim.update_canmove() buckled_mob = victim - - if(victim.loc != src.loc) + var/turf/T = get_turf(src) + if(victim.loc != T && T.Enter(victim, get_turf(victim))) src.visible_message("Tendrils lash out from \the [src] and drag \the [victim] in!") victim.loc = src.loc victim << "Tendrils [pick("wind", "tangle", "tighten")] around you!" From 273a9e24801c4d0c276e033a9c1619445b792d21 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 28 Feb 2015 17:19:38 +1030 Subject: [PATCH 11/13] Should stop plants spreading through diagonal windows. --- .../hydroponics/spreading/spreading_growth.dm | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/code/modules/hydroponics/spreading/spreading_growth.dm b/code/modules/hydroponics/spreading/spreading_growth.dm index 0729b2b3437..64ef1b55c6e 100644 --- a/code/modules/hydroponics/spreading/spreading_growth.dm +++ b/code/modules/hydroponics/spreading/spreading_growth.dm @@ -1,9 +1,17 @@ #define NEIGHBOR_REFRESH_TIME 100 +/obj/effect/plant/proc/get_cardinal_neighbors() + var/list/cardinal_neighbors = list() + for(var/check_dir in cardinal) + var/turf/simulated/T = get_step(get_turf(src), check_dir) + if(istype(T)) + cardinal_neighbors |= T + return cardinal_neighbors + /obj/effect/plant/proc/update_neighbors() // Update our list of valid neighboring turfs. neighbors = list() - for(var/turf/simulated/floor/floor in range(1,src)) + for(var/turf/simulated/floor in get_cardinal_neighbors()) if(get_dist(parent, floor) > spread_distance) continue if((locate(/obj/effect/plant) in floor.contents) || (locate(/obj/effect/dead_plant) in floor.contents) ) @@ -80,10 +88,12 @@ // Kill off our plant. if(plant) plant.die() // This turf is clear now, let our buddies know. - var/turf/T = get_turf(src) - for(var/obj/effect/plant/neighbor in range(1,src)) - neighbor.neighbors |= T - plant_controller.add_plant(neighbor) + for(var/turf/simulated/check_turf in get_cardinal_neighbors()) + if(!istype(check_turf)) + continue + for(var/obj/effect/plant/neighbor in check_turf.contents) + neighbor.neighbors |= check_turf + plant_controller.add_plant(neighbor) spawn(1) if(src) del(src) #undef NEIGHBOR_REFRESH_TIME \ No newline at end of file From 0beb6259f639f27083ca5fd1a482b8ac7977f56c Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 28 Feb 2015 17:29:26 +1030 Subject: [PATCH 12/13] Partial fix for #8068. --- code/game/machinery/bots/secbot.dm | 7 ++++++- code/game/objects/items/weapons/handcuffs.dm | 18 +++++++++++------- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/code/game/machinery/bots/secbot.dm b/code/game/machinery/bots/secbot.dm index 6aa43c1b390..b7809c4460e 100644 --- a/code/game/machinery/bots/secbot.dm +++ b/code/game/machinery/bots/secbot.dm @@ -350,7 +350,12 @@ Auto Patrol: []"}, if(istype(src.target,/mob/living/carbon)) var/mob/living/carbon/C = target - if(!C.handcuffed && !src.arrest_type) + var/wearing_hardsuit + if(istype(C,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = C + if(istype(H.back, /obj/item/weapon/rig) && istype(H.gloves,/obj/item/clothing/gloves/rig)) + wearing_hardsuit = 1 + if(!wearing_hardsuit && !C.handcuffed && !src.arrest_type) playsound(src.loc, 'sound/weapons/handcuffs.ogg', 30, 1, -2) mode = SECBOT_ARREST visible_message("\red [src] is trying to put handcuffs on [src.target]!") diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index 246636890da..5ed83d086b3 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -28,7 +28,7 @@ if (C == user) place_handcuffs(user, user) return - + //check for an aggressive grab for (var/obj/item/weapon/grab/G in C.grabbed_by) if (G.loc == user && G.state >= GRAB_AGGRESSIVE) @@ -41,11 +41,15 @@ if (ishuman(target)) var/mob/living/carbon/human/H = target - + if (!H.has_organ_for_slot(slot_handcuffed)) - user << "\red \The [H] needs at least two wrists before you can cuff them together!" + user << "\The [H] needs at least two wrists before you can cuff them together!" return - + + if(istype(H.gloves,/obj/item/clothing/gloves/rig)) // Can't cuff someone who's in a deployed hardsuit. + user << "The cuffs won't fit around \the [H.gloves]!" + return + H.attack_log += text("\[[time_stamp()]\] Has been handcuffed (attempt) by [user.name] ([user.ckey])") user.attack_log += text("\[[time_stamp()]\] Attempted to handcuff [H.name] ([H.ckey])") msg_admin_attack("[key_name(user)] attempted to handcuff [key_name(H)]") @@ -62,7 +66,7 @@ feedback_add_details("handcuffs","H") O.process() return - + if (ismonkey(target)) var/mob/living/carbon/monkey/M = target var/obj/effect/equip_e/monkey/O = new /obj/effect/equip_e/monkey( ) @@ -155,13 +159,13 @@ var/last_chew = 0 var/turf/p_loc_m = C.loc playsound(src.loc, cuff_sound, 30, 1, -2) user.visible_message("\red [user] is trying to put handcuffs on [C]!") - + if (ishuman(C)) var/mob/living/carbon/human/H = C if (!H.has_organ_for_slot(slot_handcuffed)) user << "\red \The [H] needs at least two wrists before you can cuff them together!" return - + spawn(30) if(!C) return if(p_loc == user.loc && p_loc_m == C.loc) From 38d959e9f8c3fad97f53db5341164b34cf6dd744 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 28 Feb 2015 17:34:31 +1030 Subject: [PATCH 13/13] Should fix light level reporting. --- code/modules/hydroponics/trays/tray.dm | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm index d915a116c58..19f181d03e7 100644 --- a/code/modules/hydroponics/trays/tray.dm +++ b/code/modules/hydroponics/trays/tray.dm @@ -592,15 +592,20 @@ if(!environment) //We're in a crate or nullspace, bail out. return - var/area/A = T.loc - var/light_available - if(A) - if(A.lighting_use_dynamic) - light_available = max(0,min(10,T.lighting_lumcount)-5) - else - light_available = 5 + var/light_string + if(closed_system && mechanical) + light_string = "that the internal lights are set to [tray_light] lumens" + else + var/area/A = T.loc + var/light_available + if(A) + if(A.lighting_use_dynamic) + light_available = max(0,min(10,T.lighting_lumcount)-5) + else + light_available = 5 + light_string = "a light level of [light_available] lumens" - usr << "The tray's sensor suite is reporting a light level of [light_available] lumens and a temperature of [environment.temperature]K." + usr << "The tray's sensor suite is reporting [light_string] and a temperature of [environment.temperature]K." /obj/machinery/portable_atmospherics/hydroponics/verb/close_lid_verb() set name = "Toggle Tray Lid"