From fdc6a02eea369ec293e9656d50dc5ff7eb188157 Mon Sep 17 00:00:00 2001 From: Artur Date: Wed, 25 Mar 2020 12:46:42 +0200 Subject: [PATCH] Hm --- code/_onclick/item_attack.dm | 2 +- .../crafting/recipes/recipes_clothing.dm | 9 ++++++ .../game/gamemodes/bloodsucker/bloodsucker.dm | 2 +- code/game/objects/items/stacks/medical.dm | 4 +++ .../bloodsucker/bloodsucker_life.dm | 26 +++++++++++++++--- .../bloodsucker/bloodsucker_powers.dm | 6 ++++ .../bloodsucker/datum_bloodsucker.dm | 6 ++-- .../antagonists/bloodsucker/powers/cloak.dm | 2 +- code/modules/hydroponics/grown/garlic.dm | 4 ++- .../living/carbon/alien/special/facehugger.dm | 14 +++++----- .../carbon/human/species_types/vampire.dm | 4 +-- .../chemistry/reagents/food_reagents.dm | 1 + icons/mob/neck.dmi | Bin 45707 -> 45980 bytes icons/obj/clothing/neck.dmi | Bin 2866 -> 2996 bytes 14 files changed, 60 insertions(+), 20 deletions(-) diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index fe407509fe..baa1add7e1 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -119,7 +119,7 @@ send_item_attack_message(I, user) if(I.force) apply_damage(totitemdamage, I.damtype) //CIT CHANGE - replaces I.force with totitemdamage - if(I.damtype == BRUTE && !HAS_TRAIT(src, TRAIT_NOMARROW)) + if(I.damtype == BRUTE) if(prob(33)) I.add_mob_blood(src) var/turf/location = get_turf(src) diff --git a/code/datums/components/crafting/recipes/recipes_clothing.dm b/code/datums/components/crafting/recipes/recipes_clothing.dm index 5636be6b2a..fb3500a037 100644 --- a/code/datums/components/crafting/recipes/recipes_clothing.dm +++ b/code/datums/components/crafting/recipes/recipes_clothing.dm @@ -287,3 +287,12 @@ /obj/item/bedsheet/cosmos = 1) time = 60 category = CAT_CLOTHING + + +/datum/crafting_recipe/wintercoat_cosmic + name = "Cosmic Winter Coat" + result = /obj/item/clothing/neck/garlic_necklace + reqs = list(/obj/item/reagent_containers/food/snacks/grown/garlic = 15, + /obj/item/stack/cable_coil = 10) + time = 100 //Takes awhile to put all the garlics on the coil and knot it. + category = CAT_CLOTHING diff --git a/code/game/gamemodes/bloodsucker/bloodsucker.dm b/code/game/gamemodes/bloodsucker/bloodsucker.dm index 58559b721f..7f9873cfb0 100644 --- a/code/game/gamemodes/bloodsucker/bloodsucker.dm +++ b/code/game/gamemodes/bloodsucker/bloodsucker.dm @@ -262,7 +262,7 @@ target.mind.add_antag_datum(V, V.master.get_team()) // Update Bloodsucker Title (we're a daddy now) B.SelectTitle(am_fledgling = FALSE) // Only works if you have no title yet. - // lOg it + // Log it message_admins("[target] has become a Vassal, and is enslaved to [creator].") log_admin("[target] has become a Vassal, and is enslaved to [creator].") return TRUE diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 205ce57251..50e9b94e97 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -72,6 +72,8 @@ to_chat(user, " [M] is at full health.") return FALSE user.visible_message("[user] applies \the [src] on [M].", "You apply \the [src] on [M].") + if(AmBloodsucker(M)) + return M.heal_bodypart_damage((heal_brute/2)) return TRUE if(iscarbon(M)) @@ -148,6 +150,8 @@ return if(iscarbon(M)) return heal_carbon(M, user, 0, heal_burn) + if(AmBloodsucker(M)) + return to_chat(user, "You can't heal [M] with the \the [src]!") /obj/item/stack/medical/ointment/suicide_act(mob/living/user) diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_life.dm b/code/modules/antagonists/bloodsucker/bloodsucker_life.dm index af2fd1b374..01e8774c27 100644 --- a/code/modules/antagonists/bloodsucker/bloodsucker_life.dm +++ b/code/modules/antagonists/bloodsucker/bloodsucker_life.dm @@ -12,7 +12,7 @@ /datum/antagonist/bloodsucker/proc/LifeTick()// Should probably run from life.dm, same as handle_changeling, but will be an utter pain to move set waitfor = FALSE // Don't make on_gain() wait for this function to finish. This lets this code run on the side. - var/notice_healing = FALSE + var/notice_healing while(owner && !AmFinalDeath()) // owner.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) == src if(owner.current.stat == CONSCIOUS && !poweron_feed && !HAS_TRAIT(owner.current, TRAIT_DEATHCOMA)) // Deduct Blood AddBloodVolume(-0.1) // -.15 (before tick went from 10 to 30, but we also charge more for faking life now) @@ -82,16 +82,32 @@ /datum/antagonist/bloodsucker/proc/HandleHealing(mult = 1) // NOTE: Mult of 0 is just a TEST to see if we are injured and need to go into Torpor! //It is called from your coffin on close (by you only) - if(poweron_masquerade == TRUE || owner.current.AmStaked() || owner.current.reagents?.has_reagent(/datum/reagent/consumable/garlic)) + var/notice_garlic + var/notice_necklace + if(poweron_masquerade == TRUE || owner.current.AmStaked()) + return FALSE + if(owner.current.reagents?.has_reagent(/datum/reagent/consumable/garlic)) + if(notice_garlic) + to_chat(owner.current, "Garlic in your blood is interfering with your regeneration!") + notice_garlic = TRUE + return FALSE + if(istype(owner.current.get_item_by_slot(SLOT_NECK), /obj/item/clothing/neck/garlic_necklace)) + if(notice_necklace) + to_chat(owner.current, "The necklace on your neck is interrupting your healing!") + notice_necklace = TRUE return FALSE owner.current.adjustStaminaLoss(-1.5 + (regenRate * -7) * mult, 0) // Humans lose stamina damage really quickly. Vamps should heal more. owner.current.adjustCloneLoss(-0.1 * (regenRate * 2) * mult, 0) owner.current.adjustOrganLoss(ORGAN_SLOT_BRAIN, -1 * (regenRate * 4) * mult) //adjustBrainLoss(-1 * (regenRate * 4) * mult, 0) + if(notice_garlic) + notice_garlic = FALSE + if(notice_necklace) + notice_necklace = FALSE // No Bleeding if(ishuman(owner.current)) //NOTE Current bleeding is horrible, not to count the amount of blood ballistics delete. var/mob/living/carbon/human/H = owner.current if(H.bleed_rate > 0) //Only heal bleeding if we are actually bleeding - H.bleed_rate =- 0.5 + regenRate * mult + H.bleed_rate =- 0.5 + regenRate * 0.2 * mult if(iscarbon(owner.current)) // Damage Heal: Do I have damage to ANY bodypart? var/mob/living/carbon/C = owner.current var/costMult = 1 // Coffin makes it cheaper @@ -235,6 +251,7 @@ /datum/antagonist/bloodsucker/proc/Torpor_Begin(amInCoffin = FALSE) owner.current.stat = UNCONSCIOUS + owner.current.apply_status_effect(STATUS_EFFECT_UNCONSCIOUS) ADD_TRAIT(owner.current, TRAIT_FAKEDEATH, "bloodsucker") // Come after UNCONSCIOUS or else it fails ADD_TRAIT(owner.current, TRAIT_NODEATH, "bloodsucker") // Without this, you'll just keep dying while you recover. ADD_TRAIT(owner.current, TRAIT_RESISTHIGHPRESSURE, "bloodsucker") // So you can heal in 0 G. otherwise you just...heal forever. @@ -248,8 +265,9 @@ power.DeactivatePower() /datum/antagonist/bloodsucker/proc/Torpor_End() - REMOVE_TRAIT(owner.current, TRAIT_FAKEDEATH, "bloodsucker") owner.current.stat = SOFT_CRIT + owner.current.remove_status_effect(STATUS_EFFECT_UNCONSCIOUS) + owner.current.cure_fakedeath("bloodsucker") REMOVE_TRAIT(owner.current, TRAIT_NODEATH, "bloodsucker") REMOVE_TRAIT(owner.current, TRAIT_RESISTHIGHPRESSURE, "bloodsucker") REMOVE_TRAIT(owner.current, TRAIT_RESISTLOWPRESSURE, "bloodsucker") diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_powers.dm b/code/modules/antagonists/bloodsucker/bloodsucker_powers.dm index 507e1f2739..abfd2d120f 100644 --- a/code/modules/antagonists/bloodsucker/bloodsucker_powers.dm +++ b/code/modules/antagonists/bloodsucker/bloodsucker_powers.dm @@ -93,6 +93,12 @@ if(display_error) to_chat(owner, "You have a stake in your chest! Your powers are useless.") return FALSE + if(istype(owner.get_item_by_slot(SLOT_NECK), /obj/item/clothing/neck/garlic_necklace)) + to_chat(owner, "") + return FALSE + if(owner.reagents?.has_reagent(/datum/reagent/consumable/garlic)) + to_chat(owner, "Garlic in your blood is interfering with your powers!") + return FALSE // Incap? if(must_be_capacitated) var/mob/living/L = owner diff --git a/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm b/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm index 20ce602fce..1821ec2f3d 100644 --- a/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm +++ b/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm @@ -22,7 +22,7 @@ // STATS var/vamplevel = 0 var/vamplevel_unspent = 1 - var/regenRate = 0.4 // How many points of Brute do I heal per tick? + var/regenRate = 0.4 // How fast do I regenerate? var/feedAmount = 15 // Amount of blood drawn from a target per tick. var/maxBloodVolume = 600 // Maximum blood a Vamp can hold via feeding. // BLOOD_VOLUME_NORMAL 550 // BLOOD_VOLUME_SAFE 475 //BLOOD_VOLUME_OKAY 336 //BLOOD_VOLUME_BAD 224 // BLOOD_VOLUME_SURVIVE 122 // OBJECTIVES @@ -47,8 +47,8 @@ SSticker.mode.bloodsuckers |= owner // Add if not already in here (and you might be, if you were picked at round start) SSticker.mode.check_start_sunlight()// Start Sunlight? (if first Vamp) SelectFirstName()// Name & Title - SelectTitle(am_fledgling=TRUE) // If I have a creator, then set as Fledgling. - SelectReputation(am_fledgling=TRUE) + SelectTitle(am_fledgling = TRUE) // If I have a creator, then set as Fledgling. + SelectReputation(am_fledgling = TRUE) AssignStarterPowersAndStats()// Give Powers & Stats forge_bloodsucker_objectives()// Objectives & Team update_bloodsucker_icons_added(owner.current, "bloodsucker") // Add Antag HUD diff --git a/code/modules/antagonists/bloodsucker/powers/cloak.dm b/code/modules/antagonists/bloodsucker/powers/cloak.dm index 1bb7b02357..a616c39923 100644 --- a/code/modules/antagonists/bloodsucker/powers/cloak.dm +++ b/code/modules/antagonists/bloodsucker/powers/cloak.dm @@ -2,7 +2,7 @@ /datum/action/bloodsucker/cloak name = "Cloak of Darkness" - desc = "Blend into the shadows and become invisible to the untrained eye. Movement is slowed in brightly lit areas." + desc = "Blend into the shadows and become invisible to the untrained eye. Movement is slowed in brightly lit areas, and you cannot dissapear while mortals watch you." button_icon_state = "power_cloak" bloodcost = 5 cooldown = 50 diff --git a/code/modules/hydroponics/grown/garlic.dm b/code/modules/hydroponics/grown/garlic.dm index 7ee8aab9a8..fd24376282 100644 --- a/code/modules/hydroponics/grown/garlic.dm +++ b/code/modules/hydroponics/grown/garlic.dm @@ -23,6 +23,8 @@ /obj/item/clothing/neck/garlic_necklace name = "garlic necklace" - desc = "A clove of garlic on a string, tied to itself in a circle, just might fit around your neck. For paranoid people who fear getting their blood sucked." + desc = "A clove of garlic on a cable, tied to itself in a circle, just might fit around your neck. For loonies people who fear getting their blood sucked." icon_state = "garlic_necklace" + item_state = "garlic_necklace" + alternate_worn_icon = 'icons/mob/neck.dmi' \ No newline at end of file diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm index 9640c72481..eb1b38b9ff 100644 --- a/code/modules/mob/living/carbon/alien/special/facehugger.dm +++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm @@ -247,13 +247,13 @@ /proc/CanHug(mob/living/M) if(!istype(M)) - return 0 + return FALSE if(M.stat == DEAD) - return 0 + return FALSE if(M.getorgan(/obj/item/organ/alien/hivenode)) - return 0 + return FALSE if(AmBloodsucker(M)) - return 0 + return FALSE if(ismonkey(M)) return 1 @@ -262,9 +262,9 @@ if(ishuman(C) && !(SLOT_WEAR_MASK in C.dna.species.no_equip)) var/mob/living/carbon/human/H = C if(H.is_mouth_covered(head_only = 1)) - return 0 - return 1 - return 0 + return FALSE + return TRUE + return FALSE #undef MIN_ACTIVE_TIME #undef MAX_ACTIVE_TIME diff --git a/code/modules/mob/living/carbon/human/species_types/vampire.dm b/code/modules/mob/living/carbon/human/species_types/vampire.dm index b62b8304da..6a4ef2e9d9 100644 --- a/code/modules/mob/living/carbon/human/species_types/vampire.dm +++ b/code/modules/mob/living/carbon/human/species_types/vampire.dm @@ -82,7 +82,7 @@ to_chat(H, "You're already full!") return //This checks whether or not they are wearing a garlic clove on their neck - if(sucking_checks(victim, TRUE, FALSE)) + if(!sucking_checks(victim, TRUE, FALSE)) return if(victim.stat == DEAD) to_chat(H, "You need a living victim!") @@ -96,7 +96,7 @@ to_chat(H, "[victim] is blessed! You stop just in time to avoid catching fire.") return //Here we check now for both the garlic cloves on the neck and for blood in the victims bloodstream. - if(sucking_checks(victim, TRUE, TRUE)) + if(!sucking_checks(victim, TRUE, TRUE)) return if(!do_after(H, 30, target = victim)) return diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index 837c3614a8..ce276a0d8b 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -18,6 +18,7 @@ /datum/reagent/consumable/on_mob_life(mob/living/carbon/M) current_cycle++ M.nutrition += nutriment_factor + M.CheckBloodsuckerEatFood(nutriment_factor) holder.remove_reagent(type, metabolization_rate) /datum/reagent/consumable/reaction_mob(mob/living/M, method=TOUCH, reac_volume) diff --git a/icons/mob/neck.dmi b/icons/mob/neck.dmi index de59a136d99ca23e0b751b962395756793bcaafb..d899950b791ce189c53b278e03adf02163ad67a3 100644 GIT binary patch delta 3295 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 delta 3009 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 DO}7Xq diff --git a/icons/obj/clothing/neck.dmi b/icons/obj/clothing/neck.dmi index 0bdaa36e6248c6651f423569e52749145389f88c..ea44ae0a7c1ef53a3ef91b29ff6da5ca40799b05 100644 GIT binary patch delta 2685 zcmV-@3WD{r7PJ?TBmq9LB{Knk?%kvI?ak`fnDXA$^5(pGG0MpR0004WQchCV=-0C=30l(9|&F${+1%Tq+{45Glwf?8D_=qn&6aWB^8 zl9S_t;OPkzA$36K+wAE3f7!B~wSC_04@bLwIhZ%(N+sJT`*?e2x_1hH5?k_cZ@P%o zN4X?bK(K`?m(D1JE7Jwy+FmxMJ28xSiT^mppuu8cCYMx}RZwE7zD)D1OW+5UsRusI zQlID;bf}L^RYs^fyb9BVp=ZRrNbx<0MS?aF9Y3M?k`l0^)MDxydf-IONYc zOp9Alsn!4gAJ{qP-asVx+*rGrJZoN*#OFftd){;3bFVRsNS~^IVln-AJgy&4BtGu` z$)tWfHu6YI7$1GCB}|N^K8i3o{zOk0o6r-+C-sDhbSnKZgvlvAVQge#VnhQNADx^W z)c__^>1iG?lkw#npPCxi1I|oLXaQ#@C$)enzQ$SO4uH9-DGeYPI5ROb!v+NmoSmGV zWrG3*9-AIZtAdh$rFS1fFfccj%ke>pJsO#a!8GJdj6WWojKef!OiWCt(?Bbi%iBL^aD&Lb2&|b2@mqC#e@7R_)@7Jk~&or#28#uf)%5GgGAh&gK z08!+BpmGo65aP_6&*wdSxO4IOFX`V9QR+Sbg!A*B@`g%K=1}uRiWDi*f2@LOE-Yxq ziPuGStu~$h_}3K6^jo_HITqFOQn*UP~chRayb}6lkk4{VP!=PXc69z zKd!C@1xR=(HK9d#D4uYQ#NWeje4WG$7R=IriU2fCQ!!q&%BupLcj6#ot>TC z-MzhCrH2wwCYc44Nmc_?Dvh{YjItLH5-b}HMp*?|!P|59&s8_)z&<|1`?c*Yu#e9$ z_$B};D?@;gVem}=QdSgzb!amcexdLiKipm4+uLIn63Vaubhb3N`7px*(Am;|C;+m$ zWh~d6gGtCPA~*-PU=lKekPt*H6`W2ploCh?B9@Czr%|K?02}=6{l^b?cMiER;F5?7 z&X(pDAaF^}VTr!pl3k8G%K%xU=*Z8urTwE+76aW$(AnR}T z@9KAWEuoKC>=GUU*){$Lyq3{NEOr@>fc%hvui*7NK>=I=kBB_bYk2*CK~Ml!#3Ld< zuwF?Y1so#Z)@$jbfJ5X5*DDF>g%f%$Ap?PP#KAcV6fRPv|AAVzeRLEwghq&Wd~CN` zL4z<7cy_zp4kw{acz^zRauQZR!b63Wuw}PT1fXr(LBlB2YPSR+MkU06GRZ;HC}i6w zt+vFoZPg?^eRKK-eonc6D|9wG8}QS)FM;zw6sJ!08%I|9d>((8&h_>aGs~0mOczIq^0coFDF^7f^sX#}5b8 zUSA|wHX4kwH^<=po3pbwvJwhHKr@UDS!uP-&NPH@eZ%0c4;co3-vl6KMbT(ZPtX4P z>x|<=!ofSk2jABb4&FU{m|+3vY-v9H2L8JL_aPyO*lszUhFOkvCAy35`+eY&h)2$r zCS3akQCdK>Wg`q9VEg2R`V567e0##9))DNZPuezl39Mn;RUaG2t)mt~0U*%qq2My)cTX_9VPypA$BO-@PZ>5g{4v|Brw-PdxaE?L^7b#MtNRc9a zoVw?zZqOK<0Pg~iVMXi;JUqMT1_{Ec&xhyCXFB~iW|*GKuphYWT{fHW#(rP>eDRz) zA12iBAzX)lxOIte2+0uoJYVz&bRN1e4_`V1hm{|=> z;qz_!h;Fcd#{|T6eV-e!4JIt&>l+Gn!@O58sK1RgVl`# zcokB>YsFcZL%?xm|Nr`yr)&KKI@QcoR&C z_0Q*Sf-kYp^Ep?I11ho4^Enq)fUBME`CQl=^}xcwD(s{F9wDr2alf)5tuW|4);6pK rMp11;TVN9GsDnm`6e&`qPfY&+-(PbFg4`VK00000NkvXXu0mjf4fXKt delta 2554 zcmVFt>uXYnKXy7~mb8#9Skn#p{ddB2pjaUK9brdR(}FbU`6pm@W{P zdb2j&iDAI|`JZD98Z2gJa!I8uf)aD_d1|vRfj_IH9{ALxe$X-KP#>9!3{Z4<5vB=4 z&xqr!#B~s}0(BxfenRm%C15@IG%*dp-2y+ z_&`x`-EOzLsO=Jo3bj6%=ew=bep#kQ#Y|9`{YJ2O!v_fAx*L`^9?=tqM)ic@F+E`< z5l{3&7#-IWh6YAQ2Q+};*w|Q10~m=XCV0SP(vxp^e0*3BI5|411)Lfi(*nl%IZhdO z08EdMYXHH($ ziE<8NLI7?0muZGCChBkI*BOcqoP+6|h#1d*drpks0T2@s)m+~QP2${6PjlnpDV*Dx z85ds!=}?02c_-hC7k4L&rg3iB>xV*r>4l-i$HIGLGOgRCig`$=@5DWMx*Jp zCcpv@@~g#z{1SZecs!AS>JyB&0e?@v{G*GI0Tg(UUp*dcpu(dK#MTGtl`eJz{`oR_ zGs#JgPvNoQ4Z-q(gj{&TuzVmP$2T#ACMH~bK$w|*(eY<8Ge_dV@_~eGcn6^UVT+~# z!?75&KWx!|3?MitrrBMBhLOqK`g8sj!8be%?GIZt4G8-eMac0DDnhdRAz)n2vIwz@ zPiF{(--se)_ypd-Gj0hE3%uAMvjj(^f4IP55xN2Ag@vy(pg9UKD)5F!*d^F8 zkX=2Lf!yjLD=;pqkl>R@uQT(AI!6I21KHI>8p!8=R~pFfV3dQZ2q{41l9dQA<}+QR z%0RvWh9n-}|0Eu}!@4d(03;0*glM1ulrK5~C7z~1bMg2u>1Rk#>fQi^b91ig^_5_n zea#ntC{Un4kF2a|E-YxqbC$KZ_+&J0A>PuGnawieh_}3K<#JC-bt8#q=JR=)P~usI zLZLr|roemiW@Uv2v;^MUx2voD0u*>Cn$Qw>D4uXlh`)x{__`1?m^Je&63{eFVmxOR zRwbZiSrP1cOpA!hWE?cTVNlbVem}?imY@2LWaRN2`I8c09K&Q6#0e1Yy5C`eQ$4%Sx7{NC7`pV zxy^?emVnNdh5$(Ema%kg7K)HvM6d?8pa_{kNC+b4vreb!N(m$c5eqq|(-0|t0l+GM zdGGPV-JL^j47e2Hg0rQ$1qfUUanae*P=G}pLAtg%3w@B+{=xRvJ_jhK77$I<2)hBr z)B>WV8X?nXiXIl~$JI(g1Ljv&M4u61aqS6ng~IBp=rbZL%$~4XsptUGwVKvJu<(F$ za3Q+@`{(W?bZcnPfZuDYr<$b0;dt-&Q@DZ7wGC;$|6fZQ>@ zY%J#%a|i{1f)0@N7yG&T2#+Q75hpv3M?mfv{{)X^^bse!fJZ=nO2E(X_$Z(NE{jJ* zzR?$Wd=gLqm%}3>Ke0Y5A0-?j-_{r9ql81`C)Z~M>4uZ~q9FSM=ZJ%UbJSP3K!N@P zs@wL_QNJNHLcHT+yI$`%2qTGSHyRCp650aq>(`SLzXA$8lurrkcH=|>+P2+q7((?% zT>@fMd<>|P+;18}wtZ4>C_LMyitzO8^bCGZxid63nj7%bd?p~v~{V<1$Gh6Kca&x<2-2ILdR2NHUn-?jlx*J!Rk#{+h~xHq8g{16a8ylyln z?nZ<4(Rp+ON-*bme?aZ|Wr9_s!6>_P4BnrepP#9jAP51?FgDao(>g!b5W@KlgF8QD z7<`j}A}d6rIXyl9_U)YGL&BS9h7UfkBfNQb@nMD~ptGg9{{_5%_3+O_LJ+Z0cRCHT z9P6g&E_&$aflDDCIa?Zk?HA5huHWM?mg3RHuHx^uEX zkiLX-5RxJExWDKP=-hN+ZoV{c946mz)t25l zM~Y9Lo+j*wMvDY&k}o@SbAON=ZadCh)!GbT*NfY_ye4dab(W)>k(*<2^G$%#7l8U} zOHg`_J?}4G%KqYX89*bsQ!8?M^5b{p`xl;HhE`O91Y5ifW=0VqV4aP6x=hqi%`FXEki2ibM>1VeG>r%TE2MQD@P@q780{L9Me*f>W)$8~F z9$USB|L@V&>-Ya2UA=z)@A2h*f3DxU%l)}N%lrOZpg@5F1qu`>P@wzhU&~`v!B@4e Q^Z)<=07*qoM6N<$f@%1{O#lD@