From 7454025939831babbccc27efbc40579805cce726 Mon Sep 17 00:00:00 2001 From: Ethan Menell Date: Sat, 19 Oct 2024 22:31:01 -0500 Subject: [PATCH] Add gryphon simplemob (#9253) Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com> --- code/__defines/faction.dm | 1 + code/_helpers/global_lists_ch.dm | 9 +- .../objects/structures/ghost_pods/event_vr.dm | 1 + code/modules/ai/ai_holder_targeting.dm | 8 +- .../simple_mob/subtypes/vore/gryphon.dm | 266 ++++++++++++++++++ modular_chomp/icons/mob/vore64x64_ch.dmi | Bin 62814 -> 69359 bytes vorestation.dme | 1 + 7 files changed, 282 insertions(+), 4 deletions(-) create mode 100644 modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/gryphon.dm diff --git a/code/__defines/faction.dm b/code/__defines/faction.dm index 4689ba7984..c70340aeb6 100644 --- a/code/__defines/faction.dm +++ b/code/__defines/faction.dm @@ -61,6 +61,7 @@ #define FACTION_GOLEM "golem" #define FACTION_GRAFADREKA "grafadreka" #define FACTION_GRUBS "grubs" +#define FACTION_GRYPHON "gryphon" #define FACTION_HORSE "horse" #define FACTION_INSECTS "insects" #define FACTION_JELLYFISH "jellyfish" diff --git a/code/_helpers/global_lists_ch.dm b/code/_helpers/global_lists_ch.dm index 1463ad4810..b5b53966bb 100644 --- a/code/_helpers/global_lists_ch.dm +++ b/code/_helpers/global_lists_ch.dm @@ -79,7 +79,7 @@ var/global/list/vr_mob_tf_options = list( "Space ghost" = /mob/living/simple_mob/vore/alienanimals/spooky_ghost, "Teppi" = /mob/living/simple_mob/vore/alienanimals/teppi, "Bee" = /mob/living/simple_mob/vore/bee, - //"Dragon" = /mob/living/simple_mob/vore/bigdragon/friendly, //Currently adds 12 bellies to the user when transformed into. Do not uncomment without fixing this. + "Dragon" = /mob/living/simple_mob/vore/bigdragon/friendly, "Riftwalker" = /mob/living/simple_mob/vore/demon/wendigo, "Horse" = /mob/living/simple_mob/vore/horse/big, "Morph" = /mob/living/simple_mob/vore/morph, @@ -96,7 +96,9 @@ var/global/list/vr_mob_tf_options = list( "SWOOPIE XL" = /mob/living/simple_mob/vore/aggressive/corrupthound/swoopie, "Abyss lurker" = /mob/living/simple_mob/vore/vore_hostile/abyss_lurker, "Abyss leaper" = /mob/living/simple_mob/vore/vore_hostile/leaper, - "Gelatinous cube" = /mob/living/simple_mob/vore/vore_hostile/gelatinous_cube) + "Gelatinous cube" = /mob/living/simple_mob/vore/vore_hostile/gelatinous_cube, + "Gryphon" = /mob/living/simple_mob/vore/gryphon + ) var/global/list/vr_mob_spawner_options = list( "Parrot" = /mob/living/simple_mob/animal/passive/bird/parrot, @@ -194,7 +196,8 @@ var/global/list/vr_mob_spawner_options = list( "Sobaka" = /mob/living/carbon/human/sharkm, "Farwa" = /mob/living/carbon/human/farwa, "Neaera" = /mob/living/carbon/human/neaera, - "Stok" = /mob/living/carbon/human/stok + "Stok" = /mob/living/carbon/human/stok, + //"Gryphon" = /mob/living/simple_mob/vore/gryphon // Disabled until tested ) var/global/list/selectable_footstep = list( diff --git a/code/game/objects/structures/ghost_pods/event_vr.dm b/code/game/objects/structures/ghost_pods/event_vr.dm index 613f350fa8..f2106354aa 100644 --- a/code/game/objects/structures/ghost_pods/event_vr.dm +++ b/code/game/objects/structures/ghost_pods/event_vr.dm @@ -63,6 +63,7 @@ "Phoron Dragon" = /mob/living/simple_mob/vore/aggressive/dragon/virgo3b, "Space Dragon" = /mob/living/simple_mob/vore/aggressive/dragon/space, "Crypt Drake" = /mob/living/simple_mob/vore/cryptdrake, + //"Gryphon" = /mob/living/simple_mob/vore/gryphon,//CHOMPedit: more mobs "Weretiger" = /mob/living/simple_mob/vore/weretiger, "Lesser Large Dragon" = /mob/living/simple_mob/vore/bigdragon/friendly/maintpred, //CHOMPStation add. "Catslug" = /mob/living/simple_mob/vore/alienanimals/catslug, diff --git a/code/modules/ai/ai_holder_targeting.dm b/code/modules/ai/ai_holder_targeting.dm index ba2b33e174..ec600cc99f 100644 --- a/code/modules/ai/ai_holder_targeting.dm +++ b/code/modules/ai/ai_holder_targeting.dm @@ -342,8 +342,14 @@ preferred_target = null /datum/ai_holder/proc/vore_check(mob/living/L) - if(!holder.vore_selected) //We probably don't have a belly so don't even try + //CHOMPEdit Start + var/mob/living/simple_mob/simple = holder + if(istype(simple)) //We probably don't have a belly so don't even try + if (!simple.vore_active) + return FALSE + else if (holder.vore_selected == null) return FALSE + // CHOMPEdit End if(!isliving(L)) //We only want mob/living return FALSE if(!L.devourable || !L.allowmobvore) //Check their prefs diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/gryphon.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/gryphon.dm new file mode 100644 index 0000000000..95f40624b9 --- /dev/null +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/gryphon.dm @@ -0,0 +1,266 @@ +/mob/living/simple_mob/vore/gryphon + name = "gryphon" + desc = "A large, lazy feline-avian hybrid. Best not to walk too close to a gryphon alone." + + icon_state = "gryphon" + icon_living = "gryphon" + icon = 'modular_chomp/icons/mob/vore64x64_ch.dmi' + vis_height = 64 + + faction = FACTION_GRYPHON + maxHealth = 200 // Pretty tanky, but not a boss + health = 200 + see_in_dark = 8 + + melee_damage_lower = 5 + melee_damage_upper = 30 + + meat_amount = 15 + meat_type = /obj/item/reagent_containers/food/snacks/meat + + response_help = "pats" + response_disarm = "tries to shove" + response_harm = "hits" + attacktext = list("scratches", "bites") + + friendly = list("beak-nudges", "purrs towards", "slobberlicks") + vore_bump_emote = "tries to quickly devour" + + old_x = -16 + old_y = 0 + default_pixel_x = -16 + pixel_x = -16 + pixel_y = 0 + mount_offset_y = 15 + mount_offset_x = -12 + max_buckled_mobs = 1 + can_buckle = TRUE + buckle_movable = TRUE + buckle_lying = FALSE + + var/random_skin = TRUE + var/list/skins = list( + "gryphon" + ) + + special_attack_min_range = 2 + special_attack_max_range = 4 + special_attack_cooldown = 30 SECONDS + + devourable = FALSE + + ai_holder_type = /datum/ai_holder/simple_mob/vore/gryphon + say_list_type = /datum/say_list/gryphon + + can_be_drop_prey = FALSE + var/leap_warmup = 2 SECOND // How long the leap telegraphing is. + var/leap_sound = 'sound/weapons/spiderlunge.ogg' + +// Activate Noms! +/mob/living/simple_mob/vore/gryphon + vore_bump_chance = 25 + vore_digest_chance = 100 + // Strong pounce, but needs to be alone to trigger it + vore_pounce_chance = 100 + vore_pounce_falloff = 0 + vore_active = TRUE + vore_icons = 0 + vore_capacity = 2 + swallowTime = 20 + vore_ignores_undigestable = TRUE + vore_default_mode = DM_DIGEST + vore_pounce_maxhealth = 125 + vore_bump_emote = "tries to gulp down" + vore_capacity_ex = list("stomach" = 1, "throat" = 1) + vore_fullness_ex = list("stomach" = 0, "throat" = 0) + vore_icon_bellies = list("stomach", "throat") + +/datum/ai_holder/simple_mob/vore/gryphon + var/eat_attempts = 0 + var/maybe_eating = null + +/datum/ai_holder/simple_mob/vore/gryphon/find_target(list/possible_targets, has_targets_list) + ai_log("find_target() : Entered.", AI_LOG_TRACE) + var/targets = list() + if(!has_targets_list) + possible_targets = list_targets() + var/mob/sentient = null + var/alone = TRUE + for(var/mob/possible_target in possible_targets) + if(can_attack(possible_target)) // Can we attack it? + targets += possible_target + if (possible_target.client != null) + if (sentient == null) + if (vore_check(possible_target)) + sentient = possible_target + else + alone = FALSE + else + alone = FALSE + + // Only one player, consider eating them + if (sentient != null) + return possibly_eat(sentient, alone) + + // Only one mob, eat them + if (length(targets) == 1 && alone) + var/target = pick_target(targets) + if (vore_check(target) && can_attack(target)) + give_target(target) + return target + eat_attempts = 0 + return null + +/datum/ai_holder/simple_mob/vore/gryphon/proc/possibly_eat(var/target, var/alone) + if (target != maybe_eating) + eat_attempts = 0 + + maybe_eating = target + if (eat_attempts == 5) + to_chat(target, span_danger("\The [holder] licks its beak")) + else if (eat_attempts == 10) + to_chat(target, span_danger("\The [holder]'s stomach grumbles loudly")) + else if (alone && eat_attempts > 15 && can_attack(target)) + give_target(target) + + if (eat_attempts < 11 || alone) + eat_attempts += 1 + +/mob/living/simple_mob/vore/gryphon/init_vore() + if(!voremob_loaded) + return + if(LAZYLEN(vore_organs)) + return TRUE + + var/obj/belly/B = new /obj/belly/gryphon/beak(src) + vore_selected = B + B.affects_vore_sprites = FALSE + B.emote_lists[DM_HOLD] = list("You get pushed around the creature's maw, that tongue pressing you against the roof of its mouth and humming as it savors your taste", + "The gryphon swallows, pulling you closer to the gullet desperately trying to gulp you down.", + "You feel that beak tilt upwards to help pull you deeper into the gryphon's body, intent on making you disappear.") + B = new /obj/belly/gryphon/throat(src) + B.affects_vore_sprites = TRUE + B.belly_sprite_to_affect = "throat" + B.emote_lists[DM_HOLD] = list("You hear the light gurgling of the stomach below you, calling you to relax and allow the beast to claim you.", + "Those throat muscles squeeze and knead all along your body, pressing you deeper into the gryphon's body.") + B = new /obj/belly/gryphon/stomach(src) + B.affects_vore_sprites = TRUE + B.belly_sprite_to_affect = "stomach" + B.emote_lists[DM_HOLD] = list("The gryphon lightly sways its filled gut, tossing you around inside of the tight chamber.", + "A sudden pressure presses down across your body as the gryphon gives its gut a squeeze.", + "Sitting in the hot, stewing guts of the gryphon you wonder when someone will finally notice that you've disappeared.") + B.emote_lists[DM_DIGEST] = list("The churning gut squeezes down on your body, rubbing more of those acids into your skin and trying to claim you as nutrients to fuel the massive gryphon.", + "The gryphon lightly sways its filled gut, tossing you around inside of the tight chamber.", + "A sudden pressure presses down across your body as the gryphon gives its gut a squeeze.", + "Sitting in the hot, stewing guts of the gryphon you wonder when someone will finally notice that you've disappeared.") + +/mob/living/simple_mob/vore/gryphon/do_special_attack(atom/A) //Mostly copied from cryptdrake.dm + set waitfor = FALSE + if(!isliving(A)) + return FALSE + var/mob/living/L = A + if(!L.devourable || !L.allowmobvore || !L.can_be_drop_prey || !L.throw_vore || L.unacidable) + return FALSE + + set_AI_busy(TRUE) + visible_message(span_warning("\The [src] crouches down and wiggles its haunches!")) + to_chat(L, span_danger("\The [src] is looking right at you!")) + // Telegraph, since getting stunned suddenly feels bad. + do_windup_animation(A, leap_warmup) + sleep(leap_warmup) // For the telegraphing. + + if(L.z != z) //Make sure you haven't disappeared to somewhere we can't go + set_AI_busy(FALSE) + return FALSE + + // Do the actual leap. + status_flags |= LEAPING // Lets us pass over everything. + visible_message(span_critical("\The [src] leaps at \the [L]!")) + throw_at(get_step(L, get_turf(src)), special_attack_max_range+1, 1, src) + playsound(src, leap_sound, 75, 1) + + sleep(5) // For the throw to complete. It won't hold up the AI ticker due to waitfor being false. + + if(status_flags & LEAPING) + status_flags &= ~LEAPING // Revert special passage ability. + + set_AI_busy(FALSE) + if(Adjacent(L)) //We leapt at them but we didn't manage to hit them, let's see if we're next to them + L.Weaken(2) //get knocked down, idiot + +/mob/living/simple_mob/vore/gryphon/Login() + . = ..() + if(!riding_datum) + riding_datum = new /datum/riding/simple_mob(src) + add_verb(src,/mob/living/simple_mob/proc/animal_mount) + add_verb(src,/mob/living/proc/toggle_rider_reins) + movement_cooldown = 0 + +/mob/living/simple_mob/vore/gryphon/MouseDrop_T(mob/living/M, mob/living/user) + return + +/datum/say_list/gryphon + emote_hear = list("squawks!", "looks around as its stomach growls.") + emote_see = list("licks its beak.", "looks around.") + say_maybe_target = list("squawks") + say_got_target = list("screeches") + +/obj/belly/gryphon + autotransferchance = 50 + autotransferwait = 150 + fancy_vore = TRUE + contamination_color = "green" + contamination_flavor = "Wet" + vore_verb = "chomp" + belly_fullscreen_color = "#711e1e" + +/obj/belly/gryphon/beak + name = "Beak" + mode_flags = DM_FLAG_THICKBELLY + escapable = TRUE + escapechance = 5 + desc = "Noticing you alone, the gryphon lunges forwards and wraps its beak around your head, forcing you to stare into the dark abyss at the back of the gryphon's throat. It quickly tries to swallow you down, beak closing around your torso and head tilting back, letting gravity help make you disappear before anyone sees." + struggle_messages_inside = list( + "You try to push the gryphon's tongue away, instead getting tossed around and savoured by the massive beast", + "Pressing against the beak around your body, you barely pry them off of your torso, trying to wiggle out-- only for the gryphon to clamp right back down around you and continue swallowing their meal", + "You try to shy away from the back of the gryphon's maw, desperately avoiding the massive beast's gullet. The gryphon easily counterracts your efforts, pushing you closer and closer towards the fate that throat promises") + autotransferlocation = "Throat" + autotransfer_enabled = TRUE + autotransferchance = 30 + autotransferwait = 5 + belly_fullscreen = "a_tumby" + vore_sound = "Insertion1" + +/obj/belly/gryphon/throat + name = "Throat" + mode_flags = DM_FLAG_THICKBELLY + transferchance = 20 + transferlocation = "Beak" + escapechance = 0 + desc = "After pushing you about its maw for a while the gryphon finally swallows its treat, the gullet squeezing around you and the creature's head lifting as it gulps you down. Your upper body gets shoved into its throat, the powerful muscles kneading down on your body and continuing to coax you deeper towards the gurgling stomach below." + struggle_messages_inside = list( + "You try to push yourself back with your hands, finding no purchase against those slick, spittle-coated muscles.", + "Your hands push those throat walls away from you, only for them to clench down around you in another powerful swallow.") + autotransferlocation = "Stomach" + autotransfer_enabled = TRUE + autotransferchance = 50 + autotransferwait = 5 + belly_fullscreen = "VBO_intestines1" + vore_sound = "Tauric Swallow" + +/obj/belly/gryphon/stomach + name = "Stomach" + mode_flags = DM_FLAG_THICKBELLY + escapechance = 0 + transferchance = 10 + transferlocation = "Throat" + desc = "Finally, you get shoved into the beast's stomach, that hammock-like gut welcoming you into a pool of digestive acids. The heat is oppressive, the stomach walls kneading it against your skin, coaxing you to simply give in and become gryphon food. Other than the constant pleasure, the snug warmth is at least pleasant at the moment, rolling across your body in time with the creature's rhythmic breaths and heartbeats, the air stale and thick with the tinge of acid." + digest_mode = DM_DIGEST + digest_brute = 1 + digest_burn = 3 + struggle_messages_inside = list( + "You press your hands out at the tight stomach muscles, feeling the stiff resistance give way for a second, only for the walls to squeeze back down around you even tighter.", + "The gryphon presses its talons down on its midsection as you struggle, forcing you to stay still in the depths of its guts and await whatever fate the beast plans for you" + ) + belly_fullscreen = "VBOanim_belly1" + vore_sound = "Stomach Move" diff --git a/modular_chomp/icons/mob/vore64x64_ch.dmi b/modular_chomp/icons/mob/vore64x64_ch.dmi index 46320f48700f6181f929fcaa2d774cb3e717d05a..09e83711c5fc98458dc24b843997aff44d51f359 100644 GIT binary patch delta 15759 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 delta 9148 zcmc(Fc{Ejh*!CtsZ69Y3cLcfnBCV%_DO7@m=0}QBJN3=j_75cw?sL)HrT)^> zCry9eO>k+RPwJP-6Ys{!?K31Rn(bx%^ZH+pG-NV=V?3r>EF<<;NgR#P9M$DRLy6IN z0qhZ0p&V{wsgaAZCojKQqp%U8d&=AN`)ml6lHj!$*50B0uU1o6{Euo(mvW$`L3KyI zpA~B_>0sfs`&8!^ReCMWbg=<{V=szvAnii$G`9J8fNF{E>9gS?x_KI`WxxxcD-OYNL{t;zuufzQ$l`o)Ud(=2B&*d0B~Sj{W4TG23RNrftDRil3Ow zP+ehO-VO;~a~rOVpI$L_LWeG@Ql9*n!1B?V`RxFI2=iIauQ$Gy3fZZNUG}>C`>EM! z-?AW^`V+J#s6Lp~4C5C>*(px@*1S1d(u!JGaJ1V}N7!VTi)W86WDmOj`Gv~KG*5m? za;O;e^|9bI)PCrqNh;5IBB9F`t8pO0=0^uV+E#UofVe(6@Qc*yX2rFme+ap^KG(9k zDy5x!_|uf6cCO*al5PCRo@HKseuX3cD6--I06jDOfz_Z`(Ffr^MDvO;>mg|cOlmHA@wWwEoyJ8HZFbOd95$<&e!5uUbOu(y0^c1{{XFh zranB5i-)H*l0TTM;q!d3(*BOO=dT_C=jXy=T|+)pZYR7gIG^VUq;|ircFQp=NDy7E zNh-Cp;Gktb`sCE9Q+He$(6#<+#}Ru;XCFDgyNo-rIZt|g8F4KL3{*4zDC2kH-tM-8 zT-t~Jq9uk#EIVIwA&V`V-K$d6uO^zL);!u_Em6BLs(bu!3+2anrL8C{pF7bve$`o2 z4q|JFjNfo=o=Yq9;^wut@s+p7+YVNgmmfQ?8%f}A;=5`lO0C;BCi_`2JGFRU9c!>y zq=!pSOH0~2L$a5QcCX=?oe|q|v%EV-ec|j`3Iyg=;*g!tsiSNtYwxcuW5@eP=&5z| z^xjJx@@W{EcVTOP2TNsSOdY~!yc!=BrO{eOuX5tbOZEsGYg=2&hC2%ynfe2ze!Wb7 zdprKU?lnuhq|u3QB{yWzJq1lPD$40qa6da2D=TZS-eQqPNEH0|QPLd4U@$R!|7C;z z*WLeiFU`uATY;6;t!#Ij^vSh4N-Z-aP$|B}8bKhe6at?k$eE_q$A>01ubZ1cnezGz zd88u@@6_v3b^Fh7T|%Jv1xhTIT_8Fv28*GvAQ+UGRJ?r~r6;!2EO zK5lKz*Qm(&SA87T*2k{xSM`f1r%3;?aL$}OXDy+_wf-x@G3~Jl$4)v7=w?UV-P@dY zkWLMEFonp45LORT%6UQ#WsV2sVhn?>9C+pZ9WAAdLn>G->tcuUp21JA3+xXr!tKq) zBX3qlyHv%P6dmzHS41eEK7BelIVnVgqkvD&laEtgvcWqWJsPy}{L129b-X!GRON+F zoTzy7M#@VdD!+w|HGJ;f{R5III+!Hw%+ZAdDvQ%C)*&8mHzWG2&XTrf%evfa7zC(9 zljxBQ%QAKCXdPkP73EzY5xkbsP{om2y5~_MSiBVNNzS3GgXvQbu&kHM{^HIn(V1>x+ub2wLN24Xb@lB7-j)S*S9rS!!zRM&AbgueZn2sq{(Z^f^D#K90N_Yd!P5 z*FSKzS95&0&RgwaTMnh$d1GUoneyH_O2jH~DO}cnIR_>XVcAKWpKOMtc-NVDqMg$! zkX0cmmhWIVE7?Mf{kDvY7;93Fl#Ty={RW+A&beHHg7sQk^?JCq{o-9u#o(YwbO6;<$Scvo`!cNpYiBAH&!$8cgi`^&i<(XG~bLY zlUy2;IicOJ+V0d@@&edbe(vV~ZE9iKl03Y7%Sgb&u&&=cN*RMY^ z)V}^SoJYo;$~Z_S)g@yi!AsC+H9!#-#)5z*blSgn=Rk&gnOY@!7DzTkX^q_57Y@MM zN9~B>3k$Q1L|Z(0dFA~cjzuD_4-YfZ9QZox`>HTTBb&n5cxlivJ$&!s&b$Z8R@Sus ze6^-kKJEa1MMCt{`UPqYEPGbbwK96^37>hFs!xmRcWS++Zj9B7(}z<+LO}#!P}bnU z^q}>WS4N`GUc5LI<8N8F>}EeiIz~=h0dHQOJm6{G;xvK|Gk^%KVD1}j4;qNKeymzBe2>si!(R1qv64AZ9)Ebr;k z3;d`T7q{BeoTMDuz0IS50z}e11Eh}0QlYzF*1RWoSapIK-M~FD+~W<-vf7^ZBfklj zUH%27AO@2)V1odN{?BdD|Ixes?>D;?F@j*S(&lG*3CTaijYjCO| z%6g8see^qq?yaQfvQT#4WCJildS=%o&Yuq_9|RMM$C>?YT)CFtc-AZr19?Y69j+JPHmk(sEa{P&684+s{UIZ&K0sLoZUV3X+DW)A`R>Bd-Coe6z z;L&jU^yyA0QGoGAqTzu`%&ijTw+Q0q4StL%IzQtcz0eVk4BovPe}|@&0+WSi5`Rr< zlcVq1GnM?l`{a0mxq{s2@YEOMpg=sDcdHN8buv%&U$aUACQ)Ciu6@whI6*u2SeQx~ z0hcARvDCqDP}F}c>|HF6jP>)M9~+zJ*Vl<2T~Hw}8jzpuBgY5%_NtJ+!xJt74pmtA z$WV>o`-bR-Hg5ecQf~-muJ4GOP%$=!^Wf~cp(=)$ENcm_#iN=mkc*7{IJpb>l^$2= zvp^p#2nqPap}QZ2cz3QcvQI8 zJXl)t6gqs+>3IYc_PZ}>J3M=4d~PpKc53MfDs0bLZd&cHHRI6F^`i^w2JAovjYO#t z2r&pDLv1<%{Q@KXGJ-&E*n}($BVR8qW^$Y8?(OZp+^fmo{`D*Sw{PF9xoGn8^5CzL zG2nHJ7Co}M9W?26p|+Ig;aj1^OEAAXy9?;((_0(l^$1kje|Ha-9{|Xl096p8`Z{p( ziv>pS+uEogJUv%_>YCU4oP0{!bk~gIO+a8G4GY-e8H;c|^Zd}mHoBfuWsQ=C1)E9N zEE5)*_xH4_Qk)vPySqDWE9fi;IQ>3X=`mR*1w4+0vd)~T+O1Ve_p8f!7#=VjAPL&J zp)#X^=N_jQY4Qghiq$|5RJ(x|uyb`iR9J{f)1&39DJ+B{(DC=*hh7FQU$U<>RRFsF zEG0#?;yR$2O>=C|MrL{Mz;(8tSNu1#MRtSvpE?Mn=wuP+0jgDvjUUFw0w-y$c9Y^} zluGS(yJc57IJ|mvdp6;5r;u0|@LXn%vYnG>FB$-#9z(-Io+Jc@MgIPnAh-;_ugyv@ zDLS@LQ6Ssq{qDV*j|xQOye6Z_1$$|^>r8yx)fL!ufiU3({JlG!c1I(t8{4`lk@h0b z8Hg>J+v>8_m(tEUx>Rv<$7&3C*j)uN13CQEVTASjjsbs%XQ)9akmAN#scW)ihIGTV9IFj}Iqk;%_;lCMw?{iaQ$0Ru=f0j%{64V$ z5;yIym1_ub|1ZghE9%U}>6G^5Y9#XRWsSpdzN{!9A$iWV!Mpoo=-xEi<8pqfm09^v z)#-$i15)zxr%+#u4!d~8h*TL5ThgDA>i{+emY15}yb-#y@I97%6jp{%X4Nq_SKJu5 z>19t;_+*Lh`p%Rc$l~bj@^uZP7DGq{_*S!<@BJ_u&u{{YF;>dgrK%~S3 zm`|vHXY*AyH2|;op1h5#UoI~Lp-HIwc?JdMTx=u?mH#&HiGiL=xT^@lwtWe!YLu2E zLa%^lkkioZ3w7+blKC>@0}x{^K}M+wS)1lG{f!2Mu~j8gUj>s8!ZQAH_L^vtwJ8U8 zEDc28Y<-KKn6a^qDTgcZ`||o=HKT4HKvC(vKc1Kbl{#|`pg1;Mw=GZ^ry3TX_!+n_ z$RH3$SFb3BgSzwZ=g|yze%?Z7DxRzkR{&_u25kH;DvQ{vi<_hCnd(ZuSVn05{ae(> z0tgFn+1lgyzIxWI9HbFw#dnL9K|qUqEXZ;E;lqcBE{X#OMb_U~a;R2Q|D8 zM^gcR02IV6h$-**Hdxq8{-tx}iX9Y&XD?rB6d0+&2*r~bHq*kUKg9At_8e5paWK7Y zL3%k$>bs(xX;z}vCpEd^uY>C8VG^_eH6cmA&aSx~Oo*ER&h8Nqe_mI;%B&q|JNv^$ zgl88j0|*QFr@6Qt3_-?ycwl)wHYPlr+7#yI3(Zr9Ou}qSwHrB4)E7<(%2QGyqk${2 z&(hPA^PIB`3o;A~tYHc?JOw7nQG*t2wPuY5qAR+SLv@J&`@qrq`;CPTM`wny{zKLQ z;6j1g$-<-Fv0YKPzqYn^ue!;x(v(i1$Grwt_REY^7>jD`5rS`Kp-aygHagFFQGt2H zU52Z-z(`apzYq3iXJ_@ssk+y|cy|b_|wY9P;rnQpp|irk2!-pM zC3!v_@h@W?@oSHscXNN5I$2y+Mw@mCvSQl5+>M8vs{;dEK(gB(a8j2WILM@Ss~J48 zCUkFY1x&uBH7haEr^1hxRKI<@=WX!}WfC{vFcA|I(=s*&VY>8DFrKQC z_i?Du301h{>s9cIO=lL`7}4$>s??} z@5uN_x#aLQvdhAA)vEoNgpRJRqJ%`?a_5OGhgp@<{O?f-fH%8yn1L0=??L%AYL! zwer!vglB}|f}4)%3H6pL71y!3hN{x3j7s{%pb-l~&?`b(T9Ah2+nxC9!7YkW%7>Rf z@OXSw%R~siz_@5|EqLmwue$pU08>U{r%zu3aojxWQWY_@ZuP~b3g`>ed|2u~JUxJ= zG411gf*kdwz^jj?c4wKDFjWqs3EuZ4Hu}={gm!1X9H3?TxLuO3Bb?Y0zzh5U44j>f zrPKR6WaDmlcTPBww4lVyD|?I~oKmN+ZD8Q~ugGeRmZVc%!imvsKlv`WfiF`F@o+G&YBwRC){RR-_ne5ri7>iv zRu_TAg|bjW;wGiZR5mt>iFMW6wY}%p1<>y5BI&KQ^#kD&+QFNPdhWY_N;g^Fj+`%M zn?gs=><za zEntzv6@U(Iu1uqA(`tmZ3={pYpS!ov^H;f_I#7?^ipiqNKKRtZ&5=#>OKTu{v(nUF zGR0c=yPrwldi)50`Nx};%sXfIrotI^{xrvfy=Be|roIFYT__8wQ_ z+ib7GCz6uhukcC@*PeD=g=-rOQ|ne zw=@JSDjG}KX)n1kt}Ar7g(DD6KI~Qk84Fac4!`fw?_PtOU^gr% z8LQP7$uJTf13rkAP93QxMB^mX@$(qYke}1jxy`SY!6F-Rr#&LrFyfxWK`(rGCPTQB zoQDbbTdY}9P@cxb7vMPWOr1d!f(KR^9&ctJ2+n^E2BD?L>^H&7Cl~0fU=@h3cO@Bf z4G%)uFeub-ygHY&#@5x%*-SWK7&d-XX^I+R_KCxSZ*PRxR=;KSf1o5%?R{-7NBi^9nKXtNau zJvG8(tm9qA@FdDOVcvRTlTl1Kdq zRAHzhT@Ij_u$U%?GJld*dh?HdtB13Z-sowTUfc_1)N*d5;ac$iE(v+p%b)cKD~y0~ z48p#kpul=Q-i-*Nt>s_?$cSj{_}d1ti1~Gvb?}Nlf%}8abCWl&xZWt}s(n%*_fX+& z!t7c`E&APL&^3oy<+eFadG~|W@@hF(K-7EAXhaI^!1KDTg7FHWprHk@`WO1naE{LV z;Sw@Lz7du*gTOU?7E+zUAGl+X(x9$YVnX~QKdEvjq=RXlX}dF`gZN z2|!$d=HFvw+uMqZT~qB<3|Stiu-kE{K^ZM~TKVnqzL~Rfk2~$l|In!1rn&?xDoX7! z<$3VsG8?=aFVh~l=Afl*u<&$F(ZAiTZhEc}>L(G^5Q_ zEXBK?yeC9_!Pmq&6Tz(RldAch8y)48ip3zCj$y+=L#4n}%WieO24htL|KO|1U2Z1) z3Rp_OVZo-(HEj8sh+;$eb*d*e7x&XU?GN|69D%>>wr54Azk|JI%3)539kxlsVtvZA zjAk3q?VMkv@At0oDh3!02Rr=$A9~08`i^(Fh*GI}9R~d1%E2}$W~CMl5nw8Jc*3)G zDzg;utx2b@Rqt$qp%w$2F3(xb*cfCl``bppd2SOE6R-+0MLtzGDuHibqD7U_a3yA) z51!Eo4|^~1@W+eflH$e7*|{ij9+>cp3*H(pl!DAQIt+DmbW{kwA~B(rj(GPQ8?yJ- zi-ADOKD(xUkXY@xwd(Bo^Y6bhoy{gc7Ybssx-Vi7i@N0!Ad%r}6ks;U25z*=n{1MY zLk?G09dz=&i*UG(v9Zd|c7mekcoAsNjbs?gfmU?M&$94L`STJ{Ye^|v} z%P+o+iptUrB#qp$si8n5-0?|G+PotN%C25HN z0ABH@z_$;ps?MALP>sT36F8$;k0G^zoBZ#6E$9Ru>E$Qjlb6Qt9~fS^NU@(o(#wzE z+{7iI{?b3EnLojvUOwBL4h+fZL7TWldUH}O_!4v!$Nwt$Y49=Y_D<(bS;I?MsQ}D5 zN~&Wb(u4(4f{w5!bYJ|$z#e=vg*g)PcI)@41TCRQo%V}U$-QP1kOWwHO?wViHfY2! zUe5Wq4-;{pg4~X=jr?bW{^$08c5~t{zXMV4S6BP4M2=8lF!U6fe8w0pFU|1bO$&ALZ3T#4k~w^^LRosjBe)7~EBBRxs*CfPMh_f^!WH z5j2{{>fHx)?>T`E8FA14$2PPE{{rIi!Gj0O$@{m!ubr1!MOMGv@VMj`mYNC*;)=o& zxjj>Ag*G!0tD!RzyfH@m)upODl?1GZo4f~t1pxc#Dwg1D=SUO6l{q}D~J%yEpA29u(uZ| zB&e|9Z|WN#+20~G-`-lC(Lx)`^3#Lm=7hm;r;CuI^x1ZLw-8K{2Pfpy;NajuJl!1B z6v}rXw9N?@;ht4ye4D_xInP+K{|hapv$npzN8UA$o?~S-;ELc5DYa^5I(Zy)I9bp9 z%8thX-TNc(>Yp+VP9F4MKx)FE{3@$;MA0Ph34z9gy$T2#t|l;d6K?a6@jPPDc-Nq~ zq@?Aw7#Nbn^}YxNM&2#+8?hy?h|`1lRzMx$Y%Y*Ms@0IzzTr1XpW zt%=gmu`2BoSs9IVBfjc)0f!$t)6fB|;NOJwTnu~7sFb8Fkf3D^Tny;Ih&$)Y=`k=t z+e_8i)xa(Qp-uK#Bo2Xz+b2afCg*uZZoT#xRhnsL-VXw|00z%aPfd4r`SJ^LuN2Ez z#WH>luON6i_pp)i#ebSVWFw2TO{?IqLs?JC8*ien`J{EJ|(j$B2RFXCjGO#o~ zd08HL*`asL!9=#>OtLWJXe49{%9gom%Kh_^QL;<){mF5SObZ#YEcNtaLc-TBzLHv zCmkfFt`_x|H~!7EgkXxYt*n2IDR8DBZ2PiRjcw(-u-aaQ5riEp{lF1wK zyIveD8<H7sGKR4ayBv_CO#< z