commit 0f26696a9e754a68e607f49c004414061e6dae62 Author: stephen001 Date: Sun Apr 6 21:28:08 2008 +0000 First commit, migrated from SS13.net repository. diff --git a/main-src/Code/!atoms.dm b/main-src/Code/!atoms.dm new file mode 100644 index 0000000..724e546 --- /dev/null +++ b/main-src/Code/!atoms.dm @@ -0,0 +1,3603 @@ +#define CELLSTANDARD 3600000.0 // gas capacity of cell at STP + +#define O2STANDARD 756000.0 // O2 standard value (21%) +#define N2STANDARD 2844000.0 // N2 standard value (79%) + +#define T0C 273.15 // 0degC +#define T20C 293.15 // 20degC + +#define FIREOFFSET 505 //bias for starting firelevel +#define FIREQUOT 15000 //divisor to get target temp from firelevel +#define FIRERATE 5 //divisor of temp difference rate of change + +#define NORMPIPERATE 40 //pipe-insulation rate divisor +#define HEATPIPERATE 8 //heat-exch pipe insulation + +#define FLOWFRAC 0.5 // fraction of gas transfered per process + + +//FLAGS BITMASK +#define ONBACK 1 // can be put in back slot +#define TABLEPASS 2 // can pass by a table or rack +#define HALFMASK 4 // mask only gets 1/2 of air supply from internals + +#define HEADSPACE 4 // head wear protects against space + +#define MASKINTERNALS 8 // mask allows internals +#define SUITSPACE 8 // suit protects against space + +#define USEDELAY 16 // 1 second extra delay on use +#define NOSHIELD 32 // weapon not affected by shield +#define DRIVABLE 64 // fireable by mass driver +#define ONBELT 128 // can be put in belt slot +#define FPRINT 256 // takes a fingerprint +#define WINDOW 512 // window or window/door + + +// channel numbers for power + +#define EQUIP 1 +#define LIGHT 2 +#define ENVIRON 3 +#define TOTAL 4 //for total power used only + +// bitflags for machine stat variable +#define BROKEN 1 +#define NOPOWER 2 +#define POWEROFF 4 // tbd +#define MAINT 8 // under maintaince + + + +/atom + layer = 2.0 + var/level = 2.0 + var/flags = FPRINT + var/fingerprints = null +/atom/movable + layer = 3.0 + var/last_move = null + var/anchored = 0.0 + var/weight = 25000.0 + var/elevation = 2.0 + var/move_speed = 10.0 + var/l_move_time = 1.0 + var/m_flag = 1.0 +/atom/movable/overlay + var/atom/master = null + anchored = 1.0 + +/client + var/obj/admins/holder = null + var/listen_ooc = 1.0 + var/move_delay = 1.0 + var/moving = null + var/vote = null + var/showvote = null + var/adminobs = null + +/datum/air_tunnel + //name = "air tunnel" + var/operating = 0.0 + var/siphon_status = 0.0 + var/air_stat = 0.0 + + var/list/connectors = list( ) + + +/datum/air_tunnel/air_tunnel1 + //name = "air tunnel1" +/datum/chemical + //var/name = "chemical" + var/moles = 0.0 + var/molarmass = 18.0 + var/density = 1.0 + var/chem_formula = "H2O" + var/name = "water-l" +/datum/chemical/ch_cou + //name = "ch cou" + molarmass = 270.0 + name = "CCSremedy-l" +/datum/chemical/epil + //name = "epil" + molarmass = 230.0 + name = "EPILremedy-l" +/datum/chemical/l_plas + //name = "l plas" + name = "plasma-l" + molarmass = 154.0 +/datum/chemical/pathogen + name = "pathogen" + var/amount = 0.0 + var/structure_id = null +/datum/chemical/pathogen/antibody + name = "antibody" + var/tar_struct = null + var/a_style = null +/datum/chemical/pathogen/blood + name = "blood" + var/antibodies = null + var/antigens = null + var/has_oxygen = null + var/has_co = null +/datum/chemical/pathogen/virus + name = "virus" +/datum/chemical/pl_coag + name = "pl coag" + name = "antipla-l" + molarmass = 176.0 +/datum/chemical/rejuv + name = "rejuv" + molarmass = 97.0 + name = "rejuv-l" +/datum/chemical/s_tox + name = "s tox" + name = "sleeptox-l" + molarmass = 45.0 +/datum/chemical/waste + name = "waste" + name = "waste-l" + molarmass = 200.0 +/datum/chemical/water + name = "water" +/datum/control + //name = "control" + var/processing = 1.0 +/datum/control/cellular + //name = "cellular" + var/checkfire = 0.0 + var/var_swap = 1.0 + var/time = 0 +/datum/control/gameticker + //name = "gameticker" + var/timeleft = null + var/timing = 0.0 + var/mob/human/killer = null + var/mob/human/target = null + var/theft_obj = null + var/objective = null + var/shuttle_location = null + + var/mode = "random" + var/event_time = null + var/event = 0 + +/datum/control/poll + //name = "poll" + var/question = null + + var/list/answers = list( ) + +/datum/data + var/name = "data" + var/size = 1.0 + //name = null +/datum/data/function + name = "function" + size = 2.0 +/datum/data/function/data_control + name = "data control" +/datum/data/function/id_changer + name = "id changer" +/datum/data/record + name = "record" + size = 5.0 + + var/list/fields = list( ) + +/datum/data/text + name = "text" + var/data = null +/datum/engine_eject + //name = "engine eject" + var/status = 0.0 + var/resetting = null + var/timeleft = 60.0 + +/datum/station_state + var/floor = 0 + var/wall = 0 + var/r_wall = 0 + var/window = 0 + var/door = 0 + var/grille = 0 + var/mach = 0 + +/datum/config + var/logooc = 0 // log OOC channek + var/logaccess = 0 // log login/logout + var/logsay = 0 // log client say + var/logadmin = 0 // log admin actions + var/loggame = 0 // log game events + var/logvote = 0 + var/allowvoterestart = 0 // allow votes to restart + var/allowvotemode = 0 // allow votes to change mode + var/votedelay = 600 // minimum time between voting sessions (seconds, 10 minute default) + var/voteperiod = 60 // length of voting period (seconds, default 1 minute) + var/votenodefault = 0 // vote does not default to nochange/norestart (tbi) + var/votenodead = 0 // dead people can't vote (tbi) + var/list/modes = list("extended", "traitor", "meteor", "monkey", "blob", "nuclear") // modes to choose between + var/list/pickprob = list() // relative probability of each mode + + +/datum/vote + var/voting = 0 // true if currently voting + var/nextvotetime = 0 // time at which next vote can be started + var/votetime = 60 // time at which voting will end + var/mode = 0 // 0 = restart vote, 1 = mode vote + // modes which can be voted for + var/list/vmodes = list("default", "extended", "secret", "random", "traitor", "meteor", "monkey", "nuclear", "blob", "sandbox" ) + var/winner = null // the vote winner + + +/datum/powernet + var/list/cables = list() // all cables & junctions + var/list/nodes = list() // all APCs & sources + var/newload = 0 + var/load = 0 + var/newavail = 0 + var/avail = 0 + + var/viewload = 0 + + var/number = 0 + + var/perapc = 0 // per-apc avilability + + var/netexcess = 0 + +/datum/debug + var/list/debuglist + +/datum/sun + var/angle + var/dx + var/dy + var/counter = 50 // to make the vars update during 1st call + var/rate + + +/mob + density = 1 + layer = 4.0 + var/already_placed = 0.0 + var/obj/machinery/machine = null + var/other_mobs = null + var/memory = "" + var/poll_answer = 0.0 + var/sdisabilities = 0.0 + var/disabilities = 0.0 + var/atom/movable/pulling = null + var/stat = 0.0 + var/next_move = null + var/monkeyizing = null + var/other = 0.0 + var/hand = null + var/eye_blind = null + var/eye_blurry = null + var/ear_deaf = null + var/ear_damage = null + var/stuttering = null + var/rname = null + var/blinded = null + var/rejuv = null + var/r_epil = null + var/r_ch_cou = null + var/r_Tourette = null + var/antitoxs = null + var/plasma = null + var/virus = 0.0 + var/sleeping = 0.0 + var/resting = 0.0 + var/lying = 0.0 + var/canmove = 1.0 + var/eye_stat = null + var/oxyloss = 0.0 + var/toxloss = 0.0 + var/fireloss = 0.0 + var/timeofdeath = 0.0 + var/bruteloss = 0.0 + var/cpr_time = 1.0 + var/health = 100.0 + var/drowsyness = 0.0 + var/paralysis = 0.0 + var/stunned = 0.0 + var/weakened = 0.0 + var/losebreath = 0.0 + var/muted = null + var/intent = null + var/a_intent = "disarm" + var/m_int = null + var/m_intent = "run" + var/obj/stool/chair/buckled = null + var/obj/dna/primary = null + var/obj/item/weapon/handcuffs/handcuffed = null + var/obj/item/weapon/l_hand = null + var/obj/item/weapon/r_hand = null + var/obj/item/weapon/back = null + var/obj/item/weapon/tank/internal = null + var/obj/item/weapon/storage/s_active = null + var/obj/item/weapon/clothing/mask/wear_mask = null + var/obj/screen/flash = null + var/obj/screen/blind = null + var/obj/screen/hands = null + var/obj/screen/mach = null + var/obj/screen/sleep = null + var/obj/screen/rest = null + var/obj/screen/pullin = null + var/obj/screen/internals = null + var/obj/screen/oxygen = null + var/obj/screen/i_select = null + var/obj/screen/m_select = null + var/obj/screen/toxin = null + var/obj/screen/fire = null + var/obj/screen/healths = null + var/obj/screen/zone_sel/zone_sel = null + var/obj/hud/hud_used = null + var/start = null + + var/list/organs = list( ) + var/list/grabbed_by = list( ) + var/list/requests = list( ) + + var/list/mapobjs = list() + +/mob/ghost + name = "ghost" + icon_state = "ghost" +/mob/human + name = "human" + icon = 'mob.dmi' + icon_state = "m-none" + gender = MALE + var/occupation1 = "No Preference" + var/occupation2 = "No Preference" + var/occupation3 = "No Preference" + var/need_gl = 0.0 + var/be_epil = 0.0 + var/be_cough = 0.0 + var/be_tur = 0.0 + var/be_stut = 0.0 + var/r_hair = 0.0 + var/g_hair = 0.0 + var/b_hair = 0.0 + var/h_style = "Short Hair (M)" + var/nr_hair = 0.0 + var/ng_hair = 0.0 + var/nb_hair = 0.0 + var/ns_tone = 0.0 + var/r_eyes = 0.0 + var/g_eyes = 0.0 + var/b_eyes = 0.0 + var/s_tone = 0.0 + var/age = 30.0 + var/b_type = "A+" + var/obj/item/weapon/clothing/suit/wear_suit = null + var/obj/item/weapon/clothing/under/w_uniform = null + var/obj/item/weapon/radio/w_radio = null + var/obj/item/weapon/clothing/shoes/shoes = null + var/obj/item/weapon/belt = null + var/obj/item/weapon/clothing/gloves/gloves = null + var/obj/item/weapon/clothing/glasses/glasses = null + var/obj/item/weapon/clothing/head/head = null + var/obj/item/weapon/clothing/ears/ears = null + var/obj/item/weapon/card/id/wear_id = null + var/obj/item/weapon/r_store = null + var/obj/item/weapon/l_store = null + var/icon/stand_icon = null + var/icon/lying_icon = null + var/now_pushing = null + var/t_plasma = 0.0 + var/t_oxygen = 0.0 + var/last_b_state = 1.0 + var/image/face = null + var/image/face2 = null + var/h_style_r = "hair_a" + weight = 2500000.0 + + var/list/body_standing = list( ) + var/list/body_lying = list( ) + +/mob/monkey + name = "monkey" + icon = 'monkey.dmi' + icon_state = "monkey1" + gender = MALE + var/t_plasma = null + var/t_oxygen = null + var/t_sl_gas = null + var/t_n2 = null + var/now_pushing = null + flags = 258.0 + +/mob/megamonkey + name = "mutant monkey" + icon = 'monkey.dmi' + icon_state = "megamonkey1" + gender = MALE + var/lastattacktime // world.time that last p-attack happened - for tuning firing rate + var/activecount // count-down before mob goes into idle mode + +/obj + var/throwspeed = 0.0 + var/throwing = null + var/datum/module/mod + +/obj/mark + var/mark = "" + icon = 'mark.dmi' + icon_state = "blank" + anchored = 1 + layer = 99 + mouse_opacity = 0 + + +/obj/blob + icon = 'blob.dmi' + icon_state = "bloba0" + var/health = 30 + var/attempt = 0 + var/idle = 0 + density = 1 + opacity = 0 + anchored = 1 + +/obj/admins + name = "admins" + var/rank = null + var/a_level = 0.0 + var/screen = 1.0 + var/owner = null +/obj/barrier + name = "barrier" + icon = 'stationobjs.dmi' + icon_state = "barrier" + opacity = 1 + density = 1 + anchored = 1.0 +/obj/beam + name = "beam" +/obj/beam/a_laser + name = "a laser" + icon = 'weap_sat.dmi' + icon_state = "laser" + density = 1 + var/yo = null + var/xo = null + var/current = null + var/life = 50.0 + anchored = 1.0 + flags = 2.0 +/obj/beam/a_laser/s_laser + name = "s laser" + icon_state = "spark" +/obj/beam/i_beam + name = "i beam" + icon = 'weap_sat.dmi' + icon_state = "laser" + var/obj/beam/i_beam/next = null + var/obj/item/weapon/infra/master = null + var/limit = null + var/visible = 0.0 + var/left = null + anchored = 1.0 + flags = 2.0 +/obj/bedsheetbin + name = "Linen Bin" + desc = "A bin for containing bedsheets." + icon = 'Icons.dmi' + icon_state = "bedbin" + var/amount = 23.0 + anchored = 1.0 +/obj/begin + name = "begin" + icon = 'stationobjs.dmi' + icon_state = "begin" + anchored = 1.0 +/obj/bomb + name = "bomb" + icon = 'screen1.dmi' + icon_state = "x" + var/btype = 0 //0 = radio, 1= prox, 2=time + var/explosive = 1 // 0= firebomb + var/btemp = 500 // bomb temperature (degC) + var/active = 0 + +/obj/bullet + name = "bullet" + icon = 'weap_sat.dmi' + icon_state = "bullet" + density = 1 + var/yo = null + var/xo = null + var/current = null + anchored = 1.0 + flags = 2.0 +/obj/closet + desc = "It's a closet!" + name = "Closet" + icon = 'stationobjs.dmi' + icon_state = "closet" + density = 1 + var/original = "closet" + var/orig_closed = "emcloset1" + var/opened = 0.0 + var/welded = 0.0 + flags = 320.0 + weight = 1.0E8 +/obj/closet/emcloset + desc = "A bulky (yet mobile) closet. Comes prestocked with a gasmask and o2 tank for emergencies." + name = "Emergency Closets" + icon_state = "emcloset0" + original = "emcloset0" +/obj/closet/l3closet + desc = "A bulky (yet mobile) closet. Comes prestocked with level 3 biohazard gear for emergencies." + name = "Level 3 Biohazard Suit" + icon_state = "l3closet0" + original = "l3closet0" + orig_closed = "l3closet1" +/obj/closet/syndicate + desc = "Why is this here?" + name = "Syndicate Weapons Closet" + icon_state = "syndicate0" + original = "syndicate0" +/obj/closet/syndicate/nuclear +/obj/closet/wardrobe + desc = "A bulky (yet mobile) wardrobe closet. Comes prestocked with 6 changes of clothes." + name = "Wardrobe" + icon_state = "wardrobe-b" + original = "wardrobe-b" +/obj/closet/wardrobe/black + name = "Black Wardrobe" + icon_state = "wardrobe-bl" + original = "wardrobe-bl" +/obj/closet/wardrobe/green + name = "Green Wardrobe" + icon_state = "wardrobe-g" + original = "wardrobe-g" +/obj/closet/wardrobe/mixed + name = "Mixed Wardrobe" + icon_state = "wardrobe-bp" + original = "wardrobe-bp" +/obj/closet/wardrobe/orange + name = "Prisoners Wardrobe" + icon_state = "wardrobe-o" + original = "wardrobe-o" +/obj/closet/wardrobe/pink + name = "Pink Wardrobe" + icon_state = "wardrobe-p" + original = "wardrobe-p" +/obj/closet/wardrobe/red + name = "Red Wardrobe" + icon_state = "wardrobe-r" + original = "wardrobe-r" +/obj/closet/wardrobe/white + name = "Medical Wardrobe" + icon_state = "wardrobe-w" + original = "wardrobe-w" +/obj/closet/wardrobe/yellow + name = "Technician Wardrobe" + icon_state = "wardrobe-y" + original = "wardrobe-y" +/obj/ctf_assist + name = "ctf assist" + var/play_team = 4.0 + var/picker = null + var/picking = null + var/paint_cans = 0.0 + var/immobile = 0.0 + var/neutral_replace = 0.0 + var/ejectengine = 1.0 + var/autodress = 1.0 + var/barriertime = 3.0 + var/wintype = "None" + var/starting = 0.0 + + var/list/avail_colors = list( "red", "blue", "green", "yellow", "black", "white" ) + var/list/avail_bases = list( "Engine", "CR", "Lounge", "Atmo", "Medical" ) + var/list/pickers_left = list( ) + var/list/players_left = list( ) + +/obj/d_girders + name = "Displaced girders" + icon = 'stationobjs.dmi' + icon_state = "d_girders" + density = 1 + anchored = 0.0 + weight = 1.0E8 +/obj/datacore + name = "datacore" + + var/list/medical = list( ) + var/list/general = list( ) + var/list/security = list( ) + +/obj/dna + name = "dna" + var/spec_identity = null + var/r_spec_identity = null + var/use_enzyme = null + var/struc_enzyme = null + var/uni_identity = null + var/n_chromo = null +/obj/effects + name = "effects" + mouse_opacity = 0 + flags = 2 +/obj/effects/smoke + name = "smoke" + icon = 'water.dmi' + icon_state = "smoke" + opacity = 1 + var/amount = 6.0 + anchored = 0.0 +/obj/effects/sparks + name = "sparks" + icon = 'water.dmi' + icon_state = "sparks" + var/amount = 6.0 + anchored = 0.0 + mouse_opacity = 0 +/obj/effects/sparks/ion_trails + name = "ion trails" + icon_state = "ion_trails" + anchored = 1.0 +/obj/effects/water + name = "water" + icon = 'water.dmi' + icon_state = "extinguish" + var/life = 15.0 + flags = 2.0 + mouse_opacity = 0 +/obj/equip_e + name = "equip e" + var/mob/source = null + var/s_loc = null + var/t_loc = null + var/obj/item/item = null + var/place = null +/obj/equip_e/human + name = "human" + var/mob/human/target = null +/obj/equip_e/monkey + name = "monkey" + var/mob/monkey/target = null +/obj/grille + desc = "A piece of metal with evenly spaced gridlike holes in it. Blocks large object but lets small items, gas, or energy beams through." + name = "grille" + icon = 'turfs2.dmi' + icon_state = "grille" + density = 1 + var/health = 10.0 + var/destroyed = 0.0 + anchored = 1.0 + flags = 64.0 + weight = 500000 // added + + +/obj/hud + name = "hud" + var/adding = null + var/other = null + var/intents = null + var/mov_int = null + var/mon_blo = null + var/m_ints = null + var/vimpaired = null + var/obj/screen/g_dither = null + var/obj/screen/blurry = null + var/h_type = /obj/screen +/obj/hud/hud2 + name = "hud2" + h_type = /obj/screen/screen2 +/obj/item + name = "item" + var/w_class = 3.0 +/obj/item/weapon + name = "weapon" + icon = 'items.dmi' + var/abstract = 0.0 + var/force = null + var/s_istate = null + var/damtype = "brute" + var/throwforce = null + var/r_speed = 1.0 + var/health = null + var/burn_point = null + var/burning = null + var/obj/item/weapon/master = null + flags = 258.0 + throwspeed = 7.0 + weight = 500000.0 +/obj/item/weapon/a_gift + name = "Gift" + icon_state = "gift" + s_istate = "gift" + weight = 1.0E7 +/obj/item/weapon/ammo + name = "ammo" + icon = 'ammo.dmi' + var/amount_left = 0.0 + flags = 322.0 + s_istate = "syringe_kit" +/obj/item/weapon/ammo/a357 + desc = "There are 7 bullets left!" + name = "ammo-357" + icon_state = "357-7" + amount_left = 7.0 +/obj/item/weapon/analyzer + desc = "A hand-held environmental scanner which reports current gas levels." + name = "analyzer" + icon_state = "analyzer" + w_class = 2.0 + flags = 322.0 +/obj/item/weapon/assembly + name = "assembly" + icon = 'assemblies.dmi' + s_istate = "assembly" + w_class = 3.0 + var/status = 0.0 + +/obj/item/weapon/assembly/m_i_ptank + desc = "A very intricate igniter and proximity sensor electrical assembly mounted onto top of a plasma tank." + name = "Proximity/Igniter/Plasma Tank Assembly" + icon_state = "m_i_ptank0" + var/obj/item/weapon/prox_sensor/part1 = null + var/obj/item/weapon/igniter/part2 = null + var/obj/item/weapon/tank/plasmatank/part3 = null + status = 0.0 + flags = 322.0 +/obj/item/weapon/assembly/prox_ignite + name = "Proximity/Igniter Assembly" + desc = "A proximity-activated igniter assembly." + icon_state = "prox_igniter0" + var/obj/item/weapon/prox_sensor/part1 = null + var/obj/item/weapon/igniter/part2 = null + status = null + flags = 322.0 +/obj/item/weapon/assembly/r_i_ptank + desc = "A very intricate igniter and signaller electrical assembly mounted onto top of a plasma tank." + name = "Radio/Igniter/Plasma Tank Assembly" + icon_state = "r_i_ptank" + var/obj/item/weapon/radio/signaler/part1 = null + var/obj/item/weapon/igniter/part2 = null + var/obj/item/weapon/tank/plasmatank/part3 = null + status = 0.0 + flags = 322.0 +/obj/item/weapon/assembly/time_ignite + name = "Timer/Igniter Assembly" + desc = "A timer-activated igniter assembly." + icon_state = "time_igniter0" + var/obj/item/weapon/timer/part1 = null + var/obj/item/weapon/igniter/part2 = null + status = null + flags = 322.0 + s_istate = "electronic" +/obj/item/weapon/assembly/t_i_ptank + desc = "A very intricate igniter and timer assembly mounted onto top of a plasma tank." + name = "Timer/Igniter/Plasma Tank Assembly" + icon_state = "t_i_ptank0" + var/obj/item/weapon/timer/part1 = null + var/obj/item/weapon/igniter/part2 = null + var/obj/item/weapon/tank/plasmatank/part3 = null + status = 0.0 + flags = 322.0 +/obj/item/weapon/assembly/rad_ignite + name = "Radio/Igniter Assembly" + desc = "A radio-activated igniter assembly." + icon_state = "rad_igniter" + var/obj/item/weapon/radio/signaler/part1 = null + var/obj/item/weapon/igniter/part2 = null + status = null + flags = 322.0 +/obj/item/weapon/assembly/rad_infra + name = "Signaller/Infrared Assembly" + desc = "An infrared-activated radio signaller" + icon_state = "infrared0" + var/obj/item/weapon/radio/signaler/part1 = null + var/obj/item/weapon/infra/part2 = null + status = null + flags = 322.0 +/obj/item/weapon/assembly/rad_prox + name = "Signaller/Prox Sensor Assembly" + desc = "A proximity-activated radio signaller." + icon_state = "motion0" + var/obj/item/weapon/radio/signaler/part1 = null + var/obj/item/weapon/prox_sensor/part2 = null + status = null + flags = 322.0 +/obj/item/weapon/assembly/rad_time + name = "Signaller/Timer Assembly" + desc = "A radio signaller activated by a count-down timer." + icon_state = "time_sig" + var/obj/item/weapon/radio/signaler/part1 = null + var/obj/item/weapon/timer/part2 = null + status = null + flags = 322.0 +/obj/item/weapon/assembly/shock_kit + name = "Shock Kit" + icon_state = "shock_kit" + var/obj/item/weapon/clothing/head/helmet/part1 = null + var/obj/item/weapon/radio/electropack/part2 = null + status = 0.0 + w_class = 5.0 + flags = 322.0 + +/obj/item/weapon/baton + name = "baton" + icon_state = "baton" + flags = 450.0 + force = 10.0 + throwforce = 7.0 + w_class = 3.0 + +/obj/item/weapon/bedsheet + name = "bedsheet" + icon = 'Icons.dmi' + icon_state = "sheet" + layer = 4.0 + s_istate = "w_suit" +/obj/item/weapon/bottle + name = "bottle" + var/obj/substance/chemical/chem = null + throwspeed = 20.0 + w_class = 1.0 +/obj/item/weapon/bottle/antitoxins + name = "antitoxins" + icon_state = "atoxinbottle" +/obj/item/weapon/bottle/r_ch_cough + name = "Cough remedy" + icon_state = "medibottle" +/obj/item/weapon/bottle/r_epil + name = "Epileptic Remedy" + icon_state = "medibottle" +/obj/item/weapon/bottle/rejuvenators + name = "rejuvenators" + icon_state = "rejuvbottle" +/obj/item/weapon/bottle/s_tox + name = "sleep toxins" + icon_state = "toxinbottle" +/obj/item/weapon/bottle/toxins + name = "toxins" + icon_state = "toxinbottle" +/obj/item/weapon/brutepack + name = "Bruise Pack" + desc = "A pack designed to treat blunt-force trauma." + icon_state = "brutepack" + var/amount = 5.0 + w_class = 1.0 + throwspeed = 20.0 +/obj/item/weapon/c_tube + name = "Cardboard tube" + icon_state = "c_tube" +/obj/item/weapon/camera + name = "camera" + icon_state = "camera" + var/last_pic = 1.0 + s_istate = "wrench" + w_class = 2.0 +/obj/item/weapon/card + name = "card" + w_class = 1.0 + + var/list/files = list( ) + +/obj/item/weapon/card/data + name = "Data Disk" + icon_state = "card-data" + var/function = "storage" + var/data = "null" + var/special = null + s_istate = "card-id" +/obj/item/weapon/card/emag + desc = "It's a card with a magnetic strip attached to some circuitry." + name = "emag" + icon_state = "emag-card" + s_istate = "card-id" +/obj/item/weapon/card/id + name = "Identification Card" + icon_state = "card-id" + var/access_level = null + var/lab_access = null + var/engine_access = null + var/air_access = null + var/registered = null + var/assignment = null +/obj/item/weapon/card/id/captains_spare + name = "Captain's spare ID" + icon_state = "card-id" + access_level = 5 + lab_access = 5 + engine_access = 5 + air_access = 5 + registered = "Captain" + assignment = "Captain" +/obj/item/weapon/clipboard + name = "clipboard" + icon_state = "clipboard00" + var/obj/item/weapon/pen/pen = null + s_istate = "clipboard" +/obj/item/weapon/cloaking_device + name = "cloaking device" + icon_state = "shield0" + var/active = 0.0 + flags = 322.0 + s_istate = "electronic" + throwforce = 5.0 + throwspeed = 5.0 + w_class = 2.0 +/obj/item/weapon/clothing + name = "clothing" + var/a_filter = 0.0 + var/fb_filter = 0.0 + var/h_filter = 0.0 + var/s_fire = 0.0 + var/see_face = 1.0 + var/color = null + var/brute_protect = 0.0 + var/fire_protect = 0.0 +/obj/item/weapon/clothing/ears + name = "ears" + w_class = 2.0 +/obj/item/weapon/clothing/ears/earmuffs + name = "earmuffs" + icon_state = "earmuffs" + s_fire = 1.875E7 + s_istate = "earmuffs" +/obj/item/weapon/clothing/glasses + name = "glasses" + w_class = 2.0 + s_fire = 7.5E7 +/obj/item/weapon/clothing/glasses/blindfold + name = "blindfold" + icon_state = "blindfold" + s_istate = "blindfold" +/obj/item/weapon/clothing/glasses/meson + name = "Optical Meson Scanner" + icon_state = "m_glasses" + s_istate = "glasses" +/obj/item/weapon/clothing/glasses/regular + name = "Prescription Glasses" + icon_state = "p_glasses" + s_istate = "glasses" +/obj/item/weapon/clothing/glasses/sunglasses + desc = "Strangely ancient technology used to help provide rudimentary eye cover. Enhanced shielding blocks many flashes." + name = "Sunglasses" + icon_state = "s_glasses" + s_istate = "s_glasses" +/obj/item/weapon/clothing/glasses/thermal + name = "Optical Thermal/Meson Scanner" + icon_state = "t_glasses" + s_istate = "glasses" +/obj/item/weapon/clothing/gloves + name = "gloves" + w_class = 2.0 + s_fire = 1.875E7 + var/elec_protect = 1 +/obj/item/weapon/clothing/gloves/black + desc = "These gloves are somewhat fire-resistant." + name = "Black Gloves" + icon_state = "bgloves" + s_istate = "bgloves" + h_filter = 4.0 + s_fire = 7.5E7 + fire_protect = 16.0 +/obj/item/weapon/clothing/gloves/latex + name = "Latex Gloves" + icon_state = "lgloves" + s_istate = "lgloves" + h_filter = 5.0 + elec_protect = 2 +/obj/item/weapon/clothing/gloves/robot + desc = "These gloves are somewhat fire-resistant." + name = "Robot Gloves" + icon_state = "r_hands" + s_istate = "r_hands" + h_filter = 4.0 + fire_protect = 16.0 + elec_protect = 0 +/obj/item/weapon/clothing/gloves/swat + desc = "These gloves are somewhat fire-resistant." + name = "SWAT Gloves" + icon_state = "swat_gl" + s_istate = "swat_gl" + h_filter = 4.0 + fire_protect = 16.0 + brute_protect = 16.0 + elec_protect = 2 + +/obj/item/weapon/clothing/gloves/yellow + desc = "These gloves are electrically insulated." + name = "insulated gloves" + icon_state = "ygloves" + s_istate = "ygloves" + h_filter = 4.0 + s_fire = 7.5E7 + fire_protect = 16.0 + elec_protect = 10 + + +/obj/item/weapon/clothing/head + name = "head" +/obj/item/weapon/clothing/head/bio_hood + name = "bio hood" + icon_state = "bio_hood" + fb_filter = 9.0 + flags = 262.0 + see_face = 0.0 + s_fire = 1.875E7 + fire_protect = 1.0 +/obj/item/weapon/clothing/head/helmet + name = "helmet" + icon_state = "helmet" + flags = 266.0 + s_istate = "helmet" + s_fire = 6.75E7 + fire_protect = 1.0 + brute_protect = 1.0 +/obj/item/weapon/clothing/head/s_helmet + name = "s helmet" + icon_state = "s_helmet" + flags = 262.0 + see_face = 0.0 + s_istate = "s_helmet" + s_fire = 5.625E7 + fire_protect = 1.0 +/obj/item/weapon/clothing/head/swat_hel + name = "swat hel" + icon_state = "swat_hel" + flags = 270.0 + see_face = 0.0 + s_istate = "swat_hel" + s_fire = 6.75E7 + brute_protect = 1.0 + fire_protect = 1.0 +/obj/item/weapon/clothing/head/wig + name = "wig" +/obj/item/weapon/clothing/mask + name = "mask" +/obj/item/weapon/clothing/mask/gasmask + name = "gasmask" + desc = "A close-fitting mask that can filter some environmental toxins or be connected to an air supply." + icon_state = "mask" + flags = 266.0 + w_class = 3.0 + fb_filter = 5.0 + a_filter = 6.0 + see_face = 0.0 + s_istate = "gas_mask" + s_fire = 7.5E7 + brute_protect = 1.0 + fire_protect = 1.0 +/obj/item/weapon/clothing/mask/m_mask + desc = "This mask does not work very well in low pressure environments." + name = "Medical Mask" + icon_state = "m_mask" + flags = 270.0 + w_class = 3.0 + fb_filter = 4.0 + a_filter = 6.0 + s_istate = "m_mask" + s_fire = 1.875E7 +/obj/item/weapon/clothing/mask/muzzle + name = "muzzle" + icon_state = "muzzle" + w_class = 2.0 + a_filter = 3.0 + s_istate = "muzzle" + s_fire = 1.875E7 +/obj/item/weapon/clothing/mask/robot + name = "Robot Mask" + icon_state = "r_head" + flags = 266.0 + w_class = 3.0 + fb_filter = 5.0 + a_filter = 6.0 + see_face = 0.0 + s_istate = "r_head" + s_fire = 7.5E7 + brute_protect = 1.0 + fire_protect = 1.0 +/obj/item/weapon/clothing/mask/robot/swat + name = "SWAT Mask" +/obj/item/weapon/clothing/mask/surgical + name = "Sterile Mask" + icon_state = "s_mask" + w_class = 1.0 + flags = 262.0 + fb_filter = 5.0 + a_filter = 6.0 + s_istate = "s_mask" + s_fire = 1.875E7 +/obj/item/weapon/clothing/shoes + name = "shoes" + var/chained = 0.0 + fb_filter = 1.0 + s_fire = 3.75E7 + brute_protect = 64.0 + fire_protect = 64.0 +/obj/item/weapon/clothing/shoes/black + name = "Black Shoes" + icon_state = "bl_shoes" +/obj/item/weapon/clothing/shoes/brown + name = "Brown Shoes" + icon_state = "b_shoes" +/obj/item/weapon/clothing/shoes/orange + name = "Orange Shoes" + icon_state = "o_shoes" +/obj/item/weapon/clothing/shoes/robot + name = "Robot Shoes" + icon_state = "r_feet" +/obj/item/weapon/clothing/shoes/swat + name = "SWAT shoes" + icon_state = "swat_sh" +/obj/item/weapon/clothing/shoes/white + name = "White Shoes" + icon_state = "w_shoes" + fb_filter = 5.0 +/obj/item/weapon/clothing/suit + name = "suit" +/obj/item/weapon/clothing/suit/armor + name = "armor" + icon_state = "armor" + s_istate = "armor" + s_fire = 1.875E7 + brute_protect = 6.0 +/obj/item/weapon/clothing/suit/bio_suit + name = "bio suit" + desc = "A suit that protects against biological contamination." + icon_state = "bio_suit" + fb_filter = 9.0 + a_filter = 9.0 + h_filter = 9.0 + s_istate = "bio_suit" + flags = 266.0 + s_fire = 1350000.0 + fire_protect = 126.0 +/obj/item/weapon/clothing/suit/firesuit + name = "firesuit" + desc = "A suit that protects against fire and heat." + icon_state = "firesuit" + fb_filter = 6.0 + h_filter = 6.0 + a_filter = 4.0 + s_istate = "fire_suit" + flags = 266.0 + s_fire = 7.5E7 + fire_protect = 126.0 +obj/item/weapon/clothing/suit/labcoat + name = "labcoat" + desc = "A suit that protects against minor chemical spills." + icon_state = "labcoat" + s_istate = "labcoat" + flags = 266.0 + s_fire = 1000000.0 + fire_protect = 126.0 +/obj/item/weapon/clothing/suit/robot_suit + name = "robot suit" + icon_state = "ro_suit" + fb_filter = 9.0 + a_filter = 9.0 + h_filter = 9.0 + s_istate = "ro_suit" + flags = 266.0 + s_fire = 1.875E7 + fire_protect = 126.0 +/obj/item/weapon/clothing/suit/sp_suit + name = "sp suit" + desc = "A suit that protects against low pressure environments." + icon_state = "s_suit" + fb_filter = 6.0 + h_filter = 6.0 + a_filter = 4.0 + s_istate = "s_suit" + flags = 266.0 + s_fire = 6.75E7 + fire_protect = 126.0 +/obj/item/weapon/clothing/suit/straight_jacket + name = "straight jacket" + icon_state = "straight_jacket" + s_istate = "straight_jacket" + s_fire = 1.875E7 + fire_protect = 126.0 +/obj/item/weapon/clothing/suit/swat_suit + name = "swat suit" + icon_state = "swat_suit" + fb_filter = 6.0 + h_filter = 6.0 + a_filter = 4.0 + s_istate = "swat_suit" + flags = 266.0 + s_fire = 6.75E7 + brute_protect = 126.0 + fire_protect = 126.0 +/obj/item/weapon/clothing/under + name = "under" + s_fire = 1.875E7 + fb_filter = 1.0 + fire_protect = 46.0 +/obj/item/weapon/clothing/under/black + name = "Black Jumpsuit" + icon_state = "bl_suit" + color = "black" +/obj/item/weapon/clothing/under/blue + name = "Blue Jumpsuit" + icon_state = "b_suit" + color = "blue" +/obj/item/weapon/clothing/under/green + name = "Green Jumpsuit" + icon_state = "g_suit" + color = "green" +/obj/item/weapon/clothing/under/orange + name = "Orange Jumpsuit" + icon_state = "o_suit" + color = "orange" +/obj/item/weapon/clothing/under/pink + name = "Pink Jumpsuit (F)" + icon_state = "p_suit" + color = "pink" +/obj/item/weapon/clothing/under/red + name = "Red Jumpsuit" + icon_state = "r_suit" + color = "red" +/obj/item/weapon/clothing/under/white + desc = "Made of a special fiber that gives special protection against biohazards" + name = "White Jumpsuit" + icon_state = "w_suit" + color = "white" + fb_filter = 5.0 +/obj/item/weapon/clothing/under/yellow + name = "Yellow Jumpsuit" + icon_state = "y_suit" + color = "yellow" +/obj/item/weapon/clothing/under/darkgreen + name = "Dark Green Jumpsuit" + icon_state = "dg_suit" + color = "darkgreen" +/obj/item/weapon/clothing/under/grey + name = "Grey Jumpsuit" + icon_state = "gy_suit" + color = "grey" + +#define MAXCOIL 30 +/obj/item/weapon/cable_coil + name = "cable coil" + var/amount = MAXCOIL + icon = 'power.dmi' + icon_state = "coil" + desc = "A coil of power cable." + w_class = 2 + flags = TABLEPASS|USEDELAY|DRIVABLE|FPRINT + s_istate = "coil" + +/obj/item/weapon/crowbar + name = "crowbar" + icon_state = "crowbar" + flags = 322.0 + force = 5.0 + throwforce = 7.0 + s_istate = "wrench" + w_class = 2.0 +/obj/item/weapon/disk + name = "disk" +/obj/item/weapon/disk/nuclear + name = "Nuclear Authentication Disk" + icon_state = "nucleardisk" + s_istate = "card-id" + w_class = 1.0 +/obj/item/weapon/dropper + name = "dropper" + desc = "A dropper that can hold a small amount of liquid." + icon_state = "dropper_0" + var/obj/substance/chemical/chem = null + var/mode = "inject" + throwspeed = 5.0 + w_class = 1.0 +/obj/item/weapon/dummy + name = "dummy" + invisibility = 101.0 + anchored = 1.0 + flags = 2.0 +/obj/item/weapon/extinguisher + desc = "The safety is on." + name = "Fire Extinguisher" + icon_state = "fire_extinguisher0" + var/waterleft = 20.0 + var/last_use = 1.0 + flags = 274.0 + w_class = 2.0 + force = 17.0 + s_istate = "fire_extinguisher" +/obj/item/weapon/f_card + name = "Finger Print Card" + icon_state = "f_print_card0" + var/amount = 10.0 + s_istate = "paper" + w_class = 1.0 +/obj/item/weapon/f_print_scanner + name = "Finger Print Scanner" + icon_state = "f_print_scanner0" + var/amount = 20.0 + var/printing = 0.0 + w_class = 3.0 + s_istate = "electronic" + flags = 450.0 +/obj/item/weapon/fcardholder + name = "Finger Print Case" + icon_state = "fcardholder0" + s_istate = "clipboard" + w_class = 3.0 +/obj/item/weapon/flash + name = "flash" + icon_state = "flash" + var/l_time = 1.0 + var/shots = 5.0 + w_class = 1.0 + flags = 322.0 + s_istate = "electronic" + throwspeed = 20.0 +/obj/item/weapon/flashbang + desc = "It is set to detonate in 3 seconds." + name = "flashbang" + icon_state = "flashbang" + var/state = null + var/det_time = 30.0 + w_class = 2.0 + s_istate = "flashbang" + throwspeed = 20.0 + flags = 402.0 +/obj/item/weapon/flasks + name = "flask" + icon = 'Cryogenic2.dmi' + var/oxygen = 0.0 + var/plasma = 0.0 + var/coolant = 0.0 +/obj/item/weapon/flasks/coolant + name = "light blue flask" + icon_state = "coolant-c" + coolant = 1000.0 +/obj/item/weapon/flasks/oxygen + name = "blue flask" + icon_state = "oxygen-c" + oxygen = 500.0 +/obj/item/weapon/flasks/plasma + name = "orange flask" + icon_state = "plasma-c" + plasma = 500.0 + +/obj/item/weapon/flashlight + name = "flashlight" + desc = "A hand-held emergency light." + icon_state = "flight0" + var/on = 0 + w_class = 2 + s_istate = "flight" + var/image/img + +/obj/item/weapon/game_kit + name = "Gaming Kit" + icon_state = "game_kit" + var/selected = null + var/board_stat = null + var/data = "" + var/internet = 1.0 + s_istate = "sheet-metal" + w_class = 5.0 +/obj/item/weapon/gift + name = "gift" + icon_state = "gift3" + var/size = 3.0 + var/obj/item/gift = null + s_istate = "gift" + w_class = 4.0 +/obj/item/weapon/grab + name = "grab" + icon = 'screen1.dmi' + icon_state = "grabbed" + var/obj/screen/grab/hud1 = null + var/mob/affecting = null + var/mob/assailant = null + var/state = 1.0 + var/killing = 0.0 + var/allow_upgrade = 1.0 + var/last_suffocate = 1.0 + abstract = 1.0 + s_istate = "nothing" + w_class = 5.0 +/obj/item/weapon/gun + name = "gun" + flags = 466.0 + s_istate = "gun" +/obj/item/weapon/gun/energy + name = "energy" + var/charges = 10.0 +/obj/item/weapon/gun/energy/laser_gun + name = "laser gun" + icon_state = "gun" + w_class = 3.0 + throwspeed = 10.0 + force = 7.0 +/obj/item/weapon/gun/energy/taser_gun + name = "taser gun" + icon_state = "t_gun" + w_class = 3.0 + s_istate = "gun" + force = 10.0 + throwspeed = 10.0 +/obj/item/weapon/gun/revolver + desc = "There are 0 bullets left. Uses 357" + name = "revolver" + icon_state = "revolver" + var/bullets = 0.0 + w_class = 3.0 + throwspeed = 10.0 + force = 60.0 +/obj/item/weapon/hand_tele + name = "hand tele" + icon_state = "hand_tele" + s_istate = "electronic" + w_class = 2.0 +/obj/item/weapon/handcuffs + name = "handcuffs" + icon_state = "handcuff" + flags = 450.0 + w_class = 2.0 +/obj/item/weapon/healthanalyzer + name = "Health Analyzer" + icon_state = "healthanalyzer" + desc = "A hand-held body scanner able to distinguish vital signs of the subject." + flags = 450.0 + w_class = 1.0 +/obj/item/weapon/igniter + name = "igniter" + desc = "A small electronic device able to ignite combustable substances." + icon_state = "igniter" + var/status = 1.0 + flags = 322.0 + s_istate = "electronic" +/obj/item/weapon/implant + name = "implant" + var/implanted = null + var/color = "b" +/obj/item/weapon/implant/freedom + name = "freedom" + var/uses = 1.0 + color = "r" +/obj/item/weapon/implant/tracking + name = "tracking" + var/freq = 145.1 + var/id = 1.0 +/obj/item/weapon/implantcase + name = "Glass Case" + icon_state = "implantcase-0" + var/obj/item/weapon/implant/imp = null + s_istate = "implantcase" + throwspeed = 5.0 + w_class = 1.0 +/obj/item/weapon/implantcase/tracking + name = "Glass Case- 'Tracking'" + icon_state = "implantcase-b" +/obj/item/weapon/implanter + name = "implanter" + icon_state = "implanter0" + var/obj/item/weapon/implant/imp = null + s_istate = "syringe_0" + throwspeed = 5.0 + w_class = 2.0 +/obj/item/weapon/implantpad + name = "implantpad" + icon_state = "implantpad-0" + var/obj/item/weapon/implantcase/case = null + var/broadcasting = null + var/listening = 1.0 + s_istate = "electronic" + throwspeed = 5.0 + w_class = 2.0 +/obj/item/weapon/infra + name = "Infrared Beam (Security)" + desc = "Emits a visible or invisible beam and is triggered when the beam is interrupted." + icon_state = "infrared0" + var/obj/beam/i_beam/first = null + var/state = 0.0 + var/visible = 0.0 + flags = 322.0 + w_class = 2.0 + s_istate = "electronic" +/obj/item/weapon/infra_sensor + name = "Infrared Sensor" + desc = "Scans for infrared beams in the vicinity." + icon_state = "infra_sensor" + var/passive = 1.0 + flags = 322.0 + s_istate = "electronic" + +/obj/item/weapon/t_scanner + name = "T-ray scanner" + desc = "A terahertz-ray emitter and scanner used to detect underfloor objects such as cables and pipes." + icon_state = "t-scanner0" + var/on = 0 + flags = FPRINT|ONBELT|DRIVABLE|TABLEPASS + w_class = 2 + s_istate = "electronic" + +/obj/item/weapon/locator + name = "locator" + icon_state = "locator" + var/temp = null + var/freq = 145.1 + var/broadcasting = null + var/listening = 1.0 + flags = 322.0 + w_class = 2.0 + s_istate = "electronic" + throwspeed = 20.0 + +/obj/item/weapon/m_pill + name = "pill" + icon_state = "pill" + var/amount = 1.0 + var/s_time = 1.0 + w_class = 1.0 + s_istate = "pill" + throwspeed = 20.0 +/obj/item/weapon/m_pill/Tourette + name = "green pill" + icon_state = "pill2" +/obj/item/weapon/m_pill/antitoxin + name = "red/blue pill" +/obj/item/weapon/m_pill/cough + name = "red pill" + icon_state = "pill4" +/obj/item/weapon/m_pill/cyanide + name = "orange pill" + icon_state = "pill5" +/obj/item/weapon/m_pill/epilepsy + name = "blue pill" + icon_state = "pill3" +/obj/item/weapon/m_pill/sleep + name = "red/blue pill" +/obj/item/weapon/m_pill/superpill + name = "red/blue pill" +/obj/item/weapon/ointment + name = "ointment" + icon_state = "ointment" + var/amount = 5.0 + throwspeed = 20.0 + w_class = 1.0 +/obj/item/weapon/organ + name = "organ" + var/owner = null + s_istate = "bio_orange" +/obj/item/weapon/organ/external + name = "external" + icon = 'human.dmi' + var/d_i_state = "" + var/brute_dam = 0.0 + var/burn_dam = 0.0 + var/bandaged = 0.0 + var/max_damage = 0.0 + var/r_name = "chest" + var/wound_size = 0.0 + var/max_size = 0.0 +/obj/item/weapon/organ/external/chest + name = "chest" + icon_state = "chest" + max_damage = 100.0 + d_i_state = "00" +/obj/item/weapon/organ/external/diaper + name = "diaper" + icon_state = "diaper" + r_name = "diaper" + max_damage = 90.0 + d_i_state = "00" +/obj/item/weapon/organ/external/head + name = "head" + icon_state = "head" + r_name = "head" + max_damage = 100.0 + d_i_state = "00" +/obj/item/weapon/organ/external/l_arm + name = "l arm" + icon_state = "l_arm" + r_name = "l_arm" + max_damage = 40.0 + d_i_state = "00" +/obj/item/weapon/organ/external/l_foot + name = "l foot" + icon_state = "l_foot" + r_name = "l_foot" + max_damage = 20.0 + d_i_state = "00" +/obj/item/weapon/organ/external/l_hand + name = "l hand" + icon_state = "l_hand" + r_name = "l_hand" + max_damage = 20.0 + d_i_state = "00" +/obj/item/weapon/organ/external/l_leg + name = "l leg" + icon_state = "l_leg" + r_name = "l_leg" + max_damage = 40.0 + d_i_state = "00" +/obj/item/weapon/organ/external/r_arm + name = "r arm" + icon_state = "r_arm" + r_name = "r_arm" + max_damage = 40.0 + d_i_state = "00" +/obj/item/weapon/organ/external/r_foot + name = "r foot" + icon_state = "r_foot" + r_name = "r_foot" + max_damage = 20.0 + d_i_state = "00" +/obj/item/weapon/organ/external/r_hand + name = "r hand" + icon_state = "r_hand" + r_name = "r_hand" + max_damage = 20.0 + d_i_state = "00" +/obj/item/weapon/organ/external/r_leg + name = "r leg" + icon_state = "r_leg" + r_name = "r_leg" + max_damage = 40.0 + d_i_state = "00" +/obj/item/weapon/organ/internal + name = "internal" +/obj/item/weapon/organ/internal/blood_vessels + name = "blood vessels" + var/heart = null + var/lungs = null + var/kidneys = null +/obj/item/weapon/organ/internal/brain + name = "brain" + var/head = null +/obj/item/weapon/organ/internal/excretory + name = "excretory" + var/excretory = 7.0 + var/blood_vessels = null +/obj/item/weapon/organ/internal/heart + name = "heart" +/obj/item/weapon/organ/internal/immune_system + name = "immune system" + var/blood_vessels = null + var/isys = null +/obj/item/weapon/organ/internal/intestines + name = "intestines" + var/intestines = 3.0 + var/blood_vessels = null +/obj/item/weapon/organ/internal/liver + name = "liver" + var/intestines = null + var/blood_vessels = null +/obj/item/weapon/organ/internal/lungs + name = "lungs" + var/lungs = 3.0 + var/throat = null + var/blood_vessels = null +/obj/item/weapon/organ/internal/stomach + name = "stomach" + var/intestines = null +/obj/item/weapon/organ/internal/throat + name = "throat" + var/lungs = null + var/stomach = null +/obj/item/weapon/paint + name = "Paint Can" + icon_state = "paint_neutral" + var/color = "neutral" + s_istate = "paintcan" + w_class = 3.0 +/obj/item/weapon/paper + name = "Paper" + icon_state = "paper" + var/info = null + w_class = 1.0 + throwspeed = 15.0 +/obj/item/weapon/paper/Internal + name = "paper- 'Internal Atmosphere Operating Instructions'" + info = "Equipment:
\n\t1+ Tank(s) with appropriate atmosphere
\n\t1 Gas Mask w regulator (standard issue)
\n
\nProcedure:
\n\t1. Wear mask
\n\t2. Attach oxygen tank pipe to regulater (automatic))
\n\t3. Set internal!
\n
\nNotes:
\n\tDon't forget to stop internal when tank is low by
\n\tremoving internal!
\n
\n\tDo not use a tank that has a high concentration of toxins.
\n\tThe filters shut down on internal mode!
\n
\n\tWhen exiting a high danger environment it is advised
\n\tthat you exit through a decontamination zone!
\n
\n\tRefill a tank at a oxygen canister by equiping the tank (Double Click)
\n\tthen 'attacking' the canister (Double Click the canister)." +/obj/item/weapon/paper/Map + name = "paper- 'Station Blueprint'" + var/map_graphic = 'ss13mapd.png' + info = {" +
+CQ: Crew Quarters
+L: Lounge
+CH: Chapel
+ENG: Engine Area
+EC: Engine Control
+ES: Engine Storage
+GR: Generator Room
+MB: Medical Bay
+MR: Medical Research
+TR: Toxin Research
+TS: Toxin Storage
+AC: Atmospheric Control
+SEC: Security
+SB: Shuttle Bay +SA: Shuttle Airlock
+S: Storage
+CR: Control Room
+EV: EVA Storage
+AE: Aux. Engine
+P: Podbay
+NA: North Airlock
+SC: Solar Control
+ASC: Aux. Solar Control
+"} + +/obj/item/weapon/paper/Toxin + name = "paper- 'Chemical Information'" + info = "Known Onboard Toxins:
\n\tGrade A Semi-Liquid Plasma:
\n\t\tHighly poisonous. You cannot sustain concentrations above 15 units.
\n\t\tA gas mask fails to filter plasma after 50 units.
\n\t\tWill attempt to diffuse like a gas.
\n\t\tFiltered by scrubbers.
\n\t\tThere is a bottled version which is very different
\n\t\t\tfrom the version found in canisters!
\n
\n\t\tWARNING: Highly Flammable. Keep away from heat sources
\n\t\texcept in a enclosed fire area!
\n\t\tWARNING: It is a crime to use this without authorization.
\nKnown Onboard Anti-Toxin:
\n\tAnti-Toxin Type 01P: Works against Grade A Plasma.
\n\t\tBest if injected directly into bloodstream.
\n\t\tA full injection is in every regular Med-Kit.
\n\t\tSpecial toxin Kits hold around 7.
\n
\nKnown Onboard Chemicals (other):
\n\tRejuvenation T#001:
\n\t\tEven 1 unit injected directly into the bloodstream
\n\t\t\twill cure paralysis and sleep toxins.
\n\t\tIf administered to a dying patient it will prevent
\n\t\t\tfurther damage for about units*3 seconds.
\n\t\t\tit will not cure them or allow them to be cured.
\n\t\tIt can be administeredd to a non-dying patient
\n\t\t\tbut the chemicals disappear just as fast.
\n\tSleep Toxin T#054:
\n\t\t5 units wilkl induce precisely 1 minute of sleep.
\n\t\t\tThe effects are cumulative.
\n\t\tWARNING: It is a crime to use this without authorization" +/obj/item/weapon/paper/courtroom + name = "paper- 'A Crash Course in Legal SOP on SS13'" + info = "Roles:
\nThe Forensic Technician is basically the investigator and prosecutor.
\nThe Staff Assistant can perform these functions with written authority from the Forensic Technician.
\nThe Captain/HoP/Warden is ct as the judicial authority.
\nThe Security Officers are responsible for executing warrants, security during trial, and prisoner transport.
\n
\nInvestigative Phase:
\nAfter the crime has been committed the Forensic Technician's job is to gather evidence and try to ascertain not only who did it but what happened. He must take special care to catalogue everything and don't leave anything out. Write out all the evidence on paper. Make sure you take an appropriate number of fingerprints. IF he must ask someone questions he has permission to confront them. If the person refuses he can ask a judicial authority to write a subpoena for questioning. If again he fails to respond then that person is to be jailed as insubordinate and obstructing justice. Said person will be released after he cooperates.
\n
\nONCE the FT has a clear idea as to who the criminal is he is to write an arrest warrant on the piece of paper. IT MUST LIST THE CHARGES. The FT is to then go to the judicial authority and explain a small version of his case. If the case is moderately acceptable the authority should sign it. Security must then execute said warrant.
\n
\nPre-Pre-Trial Phase:
\nNow a legal representative must be presented to the defendant if said defendant requests one. That person and the defendant are then to be given time to meet (in the jail IS ACCEPTABLE). The defendant and his lawyer are then to be given a copy of all the evidence that will be presented at trial (rewriting it all on paper is fine). THIS IS CALLED THE DISCOVERY PACK. With a few exceptions, THIS IS THE ONLY EVIDENCE BOTH SIDES MAY USE AT TRIAL. IF the prosecution will be seeking the death penalty it MUST be stated at this time. ALSO if the defense will be seeking not guilty by mental defect it must state this at this time to allow ample time for examination.
\nNow at this time each side is to compile a list of witnesses. By default, the defendant is on both lists regardless of anything else. Also the defense and prosecution can compile more evidence beforehand BUT in order for it to be used the evidence MUST also be given to the other side.\nThe defense has time to compile motions against some evidence here.
\nPossible Motions:
\n1. Invalidate Evidence- Something with the evidence is wrong and the evidence is to be thrown out. This includes irrelevance or corrupt security.
\n2. Free Movement- Basically the defendant is to be kept uncuffed before and during the trial.
\n3. Subpoena Witness- If the defense presents god reasons for needing a witness but said person fails to cooperate then a subpoena is issued.
\n4. Drop the Charges- Not enough evidence is there for a trial so the charges are to be dropped. The FT CAN RETRY but the judicial authority must carefully reexamine the new evidence.
\n5. Declare Incompetent- Basically the defendant is insane. Once this is granted a medical official is to examine the patient. If he is indeed insane he is to be placed under care of the medical staff until he is deemed competent to stand trial.
\n
\nALL SIDES MOVE TO A COURTROOM
\nPre-Trial Hearings:
\nA judicial authority and the 2 sides are to meet in the trial room. NO ONE ELSE BESIDES A SECURITY DETAIL IS TO BE PRESENT. The defense submits a plea. If the plea is guilty then proceed directly to sentencing phase. Now the sides each present their motions to the judicial authority. He rules on them. Each side can debate each motion. Then the judicial authority gets a list of crew members. He first gets a chance to look at them all and pick out acceptable and available jurors. Those jurors are then called over. Each side can ask a few questions and dismiss jurors they find too biased. HOWEVER before dismissal the judicial authority MUST agree to the reasoning.
\n
\nThe Trial:
\nThe trial has three phases.
\n1. Opening Arguments- Each side can give a short speech. They may not present ANY evidence.
\n2. Witness Calling/Evidence Presentation- The prosecution goes first and is able to call the witnesses on his approved list in any order. He can recall them if necessary. During the questioning the lawyer may use the evidence in the questions to help prove a point. After every witness the other side has a chance to cross-examine. After both sides are done questioning a witness the prosecution can present another or recall one (even the EXACT same one again!). After prosecution is done the defense can call witnesses. After the initial cases are presented both sides are free to call witnesses on either list.
\nFINALLY once both sides are done calling witnesses we move onto the next phase.
\n3. Closing Arguments- Same as opening.
\nThe jury then deliberates IN PRIVATE. THEY MUST ALL AGREE on a verdict. REMEMBER: They mix between some charges being guilty and others not guilty (IE if you supposedly killed someone with a gun and you unfortunately picked up a gun without authorization then you CAN be found not guilty of murder BUT guilty of possession of illegal weaponry.). Once they have agreed they present their verdict. If unable to reach a verdict and feel they will never they call a deadlocked jury and we restart at Pre-Trial phase with an entirely new set of jurors.
\n
\nSentencing Phase:
\nIf the death penalty was sought (you MUST have gone through a trial for death penalty) then skip to the second part.
\nI. Each side can present more evidence/witnesses in any order. There is NO ban on emotional aspects or anything. The prosecution is to submit a suggested penalty. After all the sides are done then the judicial authority is to give a sentence.
\nII. The jury stays and does the same thing as I. Their sole job is to determine if the death penalty is applicable. If NOT then the judge selects a sentence.
\n
\nTADA you're done. Security then executes the sentence and adds the applicable convictions to the person's record.
\n" +/obj/item/weapon/paper/flag + icon_state = "flag_neutral" + s_istate = "paper" + anchored = 1.0 +/obj/item/weapon/paper/jobs + name = "paper- 'Job Information'" + info = "Information on all formal jobs that can be assigned on Space Station 13 can be found on this document.
\nThe data will be in the following form.
\nGenerally lower ranking positions come first in this list.
\n
\nJob Name general access>lab access-engine access-systems access (atmosphere control)
\n\tJob Description
\nJob Duties (in no particular order)
\nTips (where applicable)
\n
\nResearch Assistant 1>1-0-0
\n\tThis is probably the lowest level position. Anyone who enters the space station after the initial job\nassignment will automatically receive this position. Access with this is restricted. Head of Personnel should\nappropriate the correct level of assistance.
\n1. Assist the researchers.
\n2. Clean up the labs.
\n3. Prepare materials.
\n
\nStaff Assistant 2>0-0-0
\n\tThis position assists the security officer in his duties. The staff assisstants should primarily br\npatrolling the ship waiting until they are needed to maintain ship safety.\n(Addendum: Updated/Elevated Security Protocols admit issuing of low level weapons to security personnel)
\n1. Patrol ship/Guard key areas
\n2. Assist security officer
\n3. Perform other security duties.
\n
\nTechnical Assistant 1>0-0-1
\n\tThis is yet another low level position. The technical assistant helps the engineer and the statian\ntechnician with the upkeep and maintenance of the station. This job is very important because it usually\ngets to be a heavy workload on station technician and these helpers will alleviate that.
\n1. Assist Station technician and Engineers.
\n2. Perform general maintenance of station.
\n3. Prepare materials.
\n
\nMedical Assistant 1>1-0-0
\n\tThis is the fourth position yet it is slightly less common. This position doesn't have much power\noutside of the med bay. Consider this position like a nurse who helps to upkeep medical records and the\nmaterials (filling syringes and checking vitals)
\n1. Assist the medical personnel.
\n2. Update medical files.
\n3. Prepare materials for medical operations.
\n
\nResearch Technician 2>3-0-0
\n\tThis job is primarily a step up from research assistant. These people generally do not get their own lab\nbut are more hands on in the experimentation process. At this level they are permitted to work as consultants to\nthe others formally.
\n1. Inform superiors of research.
\n2. Perform research alongside of official researchers.
\n
\nForensic Technician 3>2-0-0
\n\tThis job is in most cases slightly boring at best. Their sole duty is to\nperform investigations of crine scenes and analysis of the crime scene. This\nalleviates SOME of the burden from the security officer. This person's duty\nis to draw conclusions as to what happened and testify in court. Said person\nalso should stroe the evidence safely.
\n1. Perform crime-scene investigations/draw conclusions.
\n2. Store and catalogue evidence properly.
\n3. Testify to superiors/inquieries on findings.
\n
\nStation Technician 2>0-2-3
\n\tPeople assigned to this position must work to make sure all the systems aboard Space Station 13 are operable.\nThey should primarily work in the computer lab and repairing faulty equipment. They should work with the\natmospheric technician.
\n1. Maintain SS13 systems.
\n2. Repair equipment.
\n
\nAtmospheric Technician 3>0-0-4
\n\tThese people should primarily work in the atmospheric control center and lab. They have the very important\njob of maintaining the delicate atmosphere on SS13.
\n1. Maintain atmosphere on SS13
\n2. Research atmospheres on the space station. (safely please!)
\n
\nEngineer 2>1-3-0
\n\tPeople working as this should generally have detailed knowledge as to how the propulsion systems on SS13\nwork. They are one of the few classes that have unrestricted access to the engine area.
\n1. Upkeep the engine.
\n2. Prevent fires in the engine.
\n3. Maintain a safe orbit.
\n
\nMedical Researcher 2>5-0-0
\n\tThis position may need a little clarification. Their duty is to make sure that all experiments are safe and\nto conduct experiments that may help to improve the station. They will be generally idle until a new laboratory\nis constructed.
\n1. Make sure the station is kept safe.
\n2. Research medical properties of materials studied of Space Station 13.
\n
\nToxin Researcher 2>5-0-0
\n\tThese people study the properties, particularly the toxic properties, of materials handled on SS13.\nTechnically they can also be called Plasma Technicians as plasma is the material they routinly handle.
\n1. Research plasma
\n2. Make sure all plasma is properly handled.
\n
\nMedical Doctor (Officer) 2>0-0-0
\n\tPeople working this job should primarily stay in the medical area. They should make sure everyone goes to\nthe medical bay for treatment and examination. Also they should make sure that medical supplies are kept in\norder.
\n1. Heal wounded people.
\n2. Perform examinations of all personnel.
\n3. Moniter usage of medical equipment.
\n
\nSecurity Officer 3>0-0-0
\n\tThese people should attempt to keep the peace inside the station and make sure the station is kept safe. One\nside duty is to assist in repairing the station. They also work like general maintenance personnel. They are not\ngiven a weapon and must use their own resources.
\n(Addendum: Updated/Elevated Security Protocols admit issuing of weapons to security personnel)
\n1. Maintain order.
\n2. Assist others.
\n3. Repair structural problems.
\n
\nHead of Research 4>5-2-2
\n\tPeople assigned as head of research should make sure all experiments are conducted efficiently. They should\nalso carefully moderate the usage of all equipment. All experiment results should be reported to this person.
\n1. Moderate equipment.
\n2. Process research results.
\n3. Coordinate all research.
\n
\nHead of Personnel 4>4-2-2
\n\tPeople assigned as head of personnel will find themselves moderating all actions done by personnel. Security\nshould report to them. Also they have the ability to assign jobs and access levels.
\n1. Assign duties.
\n2. Moderate personnel.
\n3. Command Security.
\n
\nCaptain 5>5-5-5 (unrestricted station wide access)
\n\tThis is the highest position youi can aquire on Space Station 13. They are allowed anywhere inside the\nspace station and therefore should protect their ID card. They also have the ability to assign positions\nand access levels. They should not abuse their power.
\n1. Assign all positions on SS13
\n2. Inspect the station for any problems.
\n3. Perform administrative duties.
\n" +/obj/item/weapon/paper/photograph + name = "photo" + icon_state = "photo" + var/photo_id = 0.0 + s_istate = "paper" +/obj/item/weapon/paper/sop + name = "paper- 'Standard Operating Procedure'" + info = "Alert Levels:
\nBlue- Emergency
\n\t1. Caused by fire
\n\t2. Caused by manual interaction
\n\tAction:
\n\t\tClose all fire doors. These can only be opened by reseting the alarm
\nRed- Ejection/Self Destruct
\n\t1. Caused by module operating computer.
\n\tAction:
\n\t\tAfter the specified time the module will eject completely.
\n
\nEngine Maintenance Instructions:
\n\tShut off ignition systems:
\n\tActivate internal power
\n\tActivate orbital balance matrix
\n\tRemove volatile liquids from area
\n\tWear a fire suit
\n
\n\tAfter
\n\t\tDecontaminate
\n\t\tVisit medical examiner
\n
\nToxin Laboratory Procedure:
\n\tWear a gas mask regardless
\n\tGet an oxygen tank.
\n\tActivate internal atmosphere
\n
\n\tAfter
\n\t\tDecontaminate
\n\t\tVisit medical examiner
\n
\nDisaster Procedure:
\n\tFire:
\n\t\tActivate sector fire alarm.
\n\t\tMove to a safe area.
\n\t\tGet a fire suit
\n\t\tAfter:
\n\t\t\tAssess Damage
\n\t\t\tRepair damages
\n\t\t\tIf needed, Evacuate
\n\tMeteor Shower:
\n\t\tActivate fire alarm
\n\t\tMove to the back of ship
\n\t\tAfter
\n\t\t\tRepair damage
\n\t\t\tIf needed, Evacuate
\n\tAccidental Reentry:
\n\t\tActivate fire alrms in front of ship.
\n\t\tMove volatile matter to a fire proof area!
\n\t\tGet a fire suit.
\n\t\tStay secure until an emergency ship arrives.
\n
\n\t\tIf ship does not arrive-
\n\t\t\tEvacuate to a nearby safe area!" +/obj/item/weapon/paper/engine + name = "paper- 'Generator Startup Procedure'" + info = {"Thermo-Electric Generator Startup Procedure for Mark I Plasma-Fired Engines +
+Warning! Improper engine and generator operation may cause exposure to hazardous gasses, extremes of heat and cold, and dangerous electrical voltages.
+Only trained personnel should operate station systems. Follow all procedures carefully. Wear correct personal protective equipment at all times.
+Refer to your supervisor or Head of Personnel for procedure updates and additional information. +
+Standard checklist for engine and generator cold-start.
+
    +
  1. Perform visual inspection of external (cooling) and internal (heating) heat-exchange pipe loops. +Refer any breaks or cracks in the pipe to Station Maintenance for repair before continuing. +
  2. Connect a CO2 canister to the external (cooling) loop connector, and release the contents. Check loop pressurization is stable.
    +Note: Observe standard canister safety procedures.
    +Note: Other gasses may be substituted as a medium in the external (cooling) loop in the event that CO2 is not available. +
  3. Connect a CO2 canister to the internal (heating) loop connector, and release the contents. Check loop pressurization is stable.
    +Note: Observe standard canister safety procedures.
    +Note: Nitrogen may be substituted as a medium in the internal (heating) loop in the event that CO2 is not available. +Do not use plasma in the internal (heating) pipe loop as an unsafe condition may result. +
  4. Using the thermo-electric generator (TEG) master control panel, engage the internal and external loop circulator pumps at 1% maximum rate.
    +
  5. Ignite the engine. Refer to document NTRSN-113-H9-12939 for proper engine preparation, ignition, and plasma-oxygen loading procedures.
    +Note: Exceeding recommended plasma-oxygen concentrations can cause engine damage and potential hazards. +
  6. Monitor engine temperatures until stable operation is achieved. +
  7. Increase internal and external circulator pumps to 10% of maximum rate. Monitor the generated power output on the TEG control panel.
    +Note: Consult appendix A for expected electrical generation rates. +
  8. Adjust circulator rates until required electrical demand is met.
    +Note: Generation rate varies with internal and external loop temperatures, exchange media pressure, and engine geometry. Refer to Appendix B or your supervisor for locally determined optimal settings.
    +Note: Do not exceed safety ratings for station power cabling and electrical equipment. +
  9. With the power generation rate stable, engage charging of the superconducting magnetic energy storage (SMES) devices. +Total SMES charging rate should not exceed total power generation rate, or an overload condition may occur. +"} + +/obj/item/weapon/paper_bin + name = "Paper Bin" + icon = 'stationobjs.dmi' + icon_state = "paper_bin1" + var/amount = 30.0 + s_istate = "sheet-metal" + w_class = 5.0 +/obj/item/weapon/pen + desc = "It's a normal black ink pen." + name = "pen" + icon_state = "pen" + flags = 386.0 + w_class = 1.0 + throwspeed = 15.0 +/obj/item/weapon/pen/sleepypen + desc = "It's a normal black ink pen with a sharp point." + var/obj/substance/chemical/chem = null +/obj/item/weapon/pill_canister + name = "Pill Canister" + icon_state = "pill_canister" + w_class = 1.0 + s_istate = "brutepack" +/obj/item/weapon/pill_canister/Tourette + desc = "Tourette's Syndrome Remedy\nAdminister as required to surpress Tourette syndrome induced twitching.\nAdminister only once every 15 minutes. Active for 20 at most.\nWARNING: Neurodepressant! Rebalances chemical alignment!\nWarning: May cause drowsyness.\nIf drowsyness persists for over 5 minutes contact medical professional." + name = "Pill Canister- 'Tourette's Syndrome Remedy'" +/obj/item/weapon/pill_canister/antitoxin + desc = "Anti-toxins\nAdminister as required to relieve of plasma burns.\nAdminister only once every 5 minutes.\nWarning: May cause drowsyness.\nIf drowsyness persists for over 5 minutes contact medical professional." + name = "Pill Canister- 'Antitoxin Supplements'" +/obj/item/weapon/pill_canister/cough + desc = "Chronic Cough Syndrome Remedy\nAdminister as required to surpress excessive coughs.\nAdminister only once every 15 minutes. Active for 20 at most.\nWarning: May cause drowsyness.\nIf drowsyness persists for over 5 minutes contact medical professional." + name = "Pill Canister- 'CCS Remedy'" +/obj/item/weapon/pill_canister/epilepsy + desc = "Epilepsy Remedy\nAdminister as required to surpress excessive coughs.\nAdminister only once every 15 minutes. Active for 20 at most.\nWARNING: Neurodepressant! Rebalances chemcial alignment!\nWarning: May cause drowsyness.\nIf drowsyness persists for over 5 minutes contact medical professional." + name = "Pill Canister- 'Epilepsy Remedy'" +/obj/item/weapon/pill_canister/placebo + desc = "Placebos\nThese pills do nothing phsyiologically." + name = "Pill Canister- 'Placebos'" +/obj/item/weapon/pill_canister/sleep + desc = "Sleeping Pills\nAdminister as required to calm person.\nCauses 10 minutes of drowsyness. MAY induce immediate sleep.\nWARNING: Neurodepressant! Do not overdose!\nWarning: Causes drowsiness!If drowsyness persists for over 15 minutes contact medical professional." + name = "Pill Canister- 'Sleeping Pills'" +/obj/item/weapon/prox_sensor + name = "Proximity Sensor" + icon_state = "motion0" + var/state = 0.0 + flags = 322.0 + w_class = 2.0 + s_istate = "electronic" +/obj/item/weapon/rack_parts + name = "rack parts" + icon_state = "rack_parts" + flags = 322.0 +/obj/item/weapon/radio + name = "Station Bounced Radio" + suffix = "\[3\]" + icon_state = "radio" + var/freq = 145.9 + var/wires = 7.0 + var/b_stat = 0.0 + var/broadcasting = null + var/listening = 1.0 + flags = 450.0 + throwspeed = 9.0 + w_class = 2.0 + s_istate = "electronic" +/obj/item/weapon/radio/beacon + name = "Tracking Beacon" + icon_state = "beacon" + var/code = "beacon" +/obj/item/weapon/radio/electropack + name = "Electropack" + icon_state = "electropack0" + var/code = 2.0 + var/on = 0.0 + var/e_pads = 0.0 + freq = 144.9 + w_class = 5.0 + flags = 323.0 + s_istate = "electropack" +/obj/item/weapon/radio/headset + name = "Radio Headset" + icon_state = "headset" +/obj/item/weapon/radio/intercom + name = "Station Intercom (Radio)" + icon_state = "intercom" + anchored = 1.0 +/obj/item/weapon/radio/signaler + name = "Remote Signaling Device" + icon_state = "signaler" + var/code = 30.0 + w_class = 1.0 + freq = 145.7 + var/delay = 0 +/obj/item/weapon/rods + name = "rods" + icon_state = "rods" + var/amount = 1.0 + flags = 322.0 + w_class = 4.0 + force = 9.0 + throwforce = 20.0 + throwspeed = 10.0 +/obj/item/weapon/screwdriver + name = "screwdriver" + icon_state = "screwdriver" + flags = 322.0 + force = 5.0 + w_class = 2.0 + throwforce = 5.0 + throwspeed = 15.0 +/obj/item/weapon/shard + name = "shard" + icon = 'shards.dmi' + icon_state = "large" + w_class = 4.0 + force = 7.0 + throwforce = 10.0 + s_istate = "shard-glass" +/obj/item/weapon/sheet + name = "sheet" + var/amount = 1.0 + var/length = 2.5 + var/width = 1.5 + var/height = 0.01 + flags = 322.0 + throwforce = 7.0 + throwspeed = 10.0 + w_class = 4.0 +/obj/item/weapon/sheet/glass + name = "glass" + icon_state = "sheet-glass" + force = 5.0 +/obj/item/weapon/sheet/rglass + name = "reinforced glass" + icon_state = "sheet-rglass" + s_istate = "sheet-rglass" + force = 6.0 +/obj/item/weapon/sheet/metal + name = "metal" + icon_state = "sheet-metal" + throwforce = 14.0 +/obj/item/weapon/sheet/r_metal + name = "reinforced metal" + icon_state = "sheet-r_metal" + force = 5.0 + throwforce = 14.0 + s_istate = "sheet-metal" +/obj/item/weapon/shield + name = "shield" + icon_state = "shield0" + var/active = 0.0 + flags = 322.0 + s_istate = "electronic" + throwforce = 5.0 + throwspeed = 5.0 + w_class = 2.0 +/obj/item/weapon/storage + name = "storage" + var/obj/screen/storage/boxes = null + var/obj/screen/close/closer = null + w_class = 3.0 +/obj/item/weapon/storage/backpack + name = "backpack" + icon_state = "backpack" + w_class = 4.0 + flags = 259.0 +/obj/item/weapon/storage/box + name = "Box" + icon_state = "box" + s_istate = "syringe_kit" +/obj/item/weapon/storage/disk_kit + name = "Data Disks" + icon_state = "id_kit" + s_istate = "syringe_kit" + +/obj/item/weapon/storage/disk_kit/disks + +/obj/item/weapon/storage/disk_kit/disks2 + +/obj/item/weapon/storage/fcard_kit + name = "Fingerprint Cards" + icon_state = "id_kit" + s_istate = "syringe_kit" +/obj/item/weapon/storage/firstaid + name = "First-Aid" + throwspeed = 8.0 +/obj/item/weapon/storage/firstaid/fire + name = "Fire First Aid" + icon_state = "firstaid-ointment" +/obj/item/weapon/storage/firstaid/regular + icon_state = "firstaid" +/obj/item/weapon/storage/firstaid/syringes + name = "Syringes (Biohazard Alert)" + icon_state = "syringe_kit" +/obj/item/weapon/storage/firstaid/toxin + name = "Toxin First Aid" + icon_state = "firstaid-toxin" +/obj/item/weapon/storage/flashbang_kit + desc = "WARNING: Do not use without reading these preautions!\nThese devices are extremely dangerous and can cause blindness or deafness if used incorrectly.\nThe chemicals contained in these devices have been tuned for maximal effectiveness and due to\nextreme safety precuaiotn shave been incased in a tamper-proof pack. DO NOT ATTEMPT TO OPEN\nFLASH WARNING: Do not use continually. Excercise extreme care when detonating in closed spaces.\n\tMake attemtps not to detonate withing range of 2 meters of the intended target. It is imperative\n\tthat the targets visit a medical professional after usage. Damage to eyes increases extremely per\n\tuse and according to range. Glasses with flash resistant filters DO NOT always work on high powered\n\tflash devices such as this. EXERCISE CAUTION REGARDLESS OF CIRCUMSTANCES\nSOUND WARNING: Do not use continually. Visit a medical professional if hearing is lost.\n\tThere is a slight chance per use of complete deafness. Exercise caution and restraint.\nSTUN WARNING: If the intended or unintended target is too close to detonation the resulting sound\n\tand flash have been known to cause extreme sensory overload resulting in temporary\n\tincapacitation.\nDO NOT USE CONTINUALLY\nOperating Directions:\n\t1. Pull detonnation pin. ONCE THE PIN IS PULLED THE GRENADE CAN NOT BE DISARMED!\n\t2. Throw grenade. NEVER HOLD A LIVE FLASHBANG\n\t3. The grenade will detonste 10 seconds hafter being primed. EXCERCISE CAUTION\n\t-Never prime another grenade until after the first is detonated\nNote: Usage of this pyrotechnic device without authorization is an extreme offense and can\nresult in severe punishment upwards of 10 years in prison per use.\n\nDefault 3 second wait till from prime to detonation. This can be switched with a screwdriver\nto 10 seconds.\n\nCopyright of Nanotrasen Industries- Military Armnaments Division\nThis device was created by Nanotrasen Labs a member of the Expert Advisor Corporation" + name = "Flashbangs (WARNING)" + icon_state = "flashbang_kit" + s_istate = "syringe_kit" +/obj/item/weapon/storage/gl_kit + name = "Prescription Glasses" + icon_state = "id_kit" + s_istate = "syringe_kit" +/obj/item/weapon/storage/handcuff_kit + name = "Spare Handcuffs" + icon_state = "handcuff_kit" + s_istate = "syringe_kit" +/obj/item/weapon/storage/id_kit + name = "Spare IDs" + icon_state = "id_kit" + s_istate = "syringe_kit" +/obj/item/weapon/storage/lglo_kit + name = "Latex Gloves" + icon_state = "lglo_kit" + s_istate = "syringe_kit" +/obj/item/weapon/storage/stma_kit + name = "Sterile Masks" + icon_state = "lglo_kit" + s_istate = "syringe_kit" +/obj/item/weapon/storage/toolbox + name = "toolbox" + icon_state = "toolbox" + flags = 322.0 + force = 8.0 + throwspeed = 4.0 + w_class = 4.0 +/obj/item/weapon/storage/toolbox/electrical + name = "electical toolbox" + icon_state = "toolbox-y" + flags = 322.0 + force = 8.0 + throwspeed = 4.0 + w_class = 4.0 + + +/obj/item/weapon/storage/trackimp_kit + name = "Tracking Implant Kit" + icon_state = "imp_kit" + s_istate = "syringe_kit" +/obj/item/weapon/sword + name = "sword" + icon_state = "sword0" + var/active = 0.0 + force = 3.0 + throwforce = 5.0 + throwspeed = 5.0 + w_class = 2.0 + flags = 290.0 +/obj/item/weapon/syndicate_uplink + name = "Station Bounced Radio" + icon_state = "radio" + var/temp = null + var/uses = 1.0 + var/selfdestruct = 0.0 + flags = 322.0 + w_class = 2.0 + s_istate = "electronic" + throwspeed = 20.0 +/obj/item/weapon/syringe + name = "syringe" + icon_state = "syringe_0" + var/obj/substance/chemical/chem = null + var/mode = "inject" + var/s_time = 1.0 + throwspeed = 5.0 + w_class = 1.0 +/obj/item/weapon/table_parts + name = "table parts" + icon_state = "table_parts" + flags = 322.0 +/obj/item/weapon/tank + name = "tank" + var/maximum = null + var/obj/substance/gas/gas = null + var/i_used = 350.0 + flags = 323.0 + weight = 1000000.0 + force = 5.0 + throwforce = 10.0 + throwspeed = 4.0 +/obj/item/weapon/tank/anesthetic + name = "anesthetic" + icon_state = "an_tank" + maximum = 1750000.0 + i_used = 1.0 +/obj/item/weapon/tank/jetpack + name = "jetpack" + icon_state = "jetpack0" + var/on = 0.0 + maximum = 3500000.0 + w_class = 4.0 + s_istate = "jetpack" +/obj/item/weapon/tank/oxygentank + name = "oxygentank" + icon_state = "oxygen" + maximum = 1750000.0 +/obj/item/weapon/tank/plasmatank + name = "plasmatank" + icon_state = "plasma" + maximum = 1600000.0 +/obj/item/weapon/tile + name = "steel floor tile" + icon_state = "tile" + var/amount = 1.0 + w_class = 3.0 + throwspeed = 5.0 + force = 6.0 + throwforce = 7.0 +/obj/item/weapon/timer + name = "timer" + icon_state = "timer0" + var/timing = 0.0 + var/time = null + flags = 322.0 + w_class = 2.0 + s_istate = "electronic" +/obj/item/weapon/weldingtool + name = "weldingtool" + icon_state = "welder" + var/welding = 0.0 + var/weldfuel = 20.0 + flags = 322.0 + force = 3.0 + throwforce = 5.0 + throwspeed = 5.0 + w_class = 2.0 +/obj/item/weapon/wire + desc = "This is just a simple piece of regular insulated wire." + name = "wire" + icon_state = "item_wire" + var/amount = 1.0 + var/laying = 0.0 + var/old_lay = null +/obj/item/weapon/wirecutters + name = "wirecutters" + icon_state = "cutters" + flags = 322.0 + force = 6.0 + throwspeed = 9.0 + w_class = 2.0 +/obj/item/weapon/wrapping_paper + name = "wrapping paper" + icon_state = "wrap_paper" + var/amount = 20.0 +/obj/item/weapon/wrench + name = "wrench" + icon_state = "wrench" + flags = 322.0 + force = 5.0 + throwforce = 7.0 + w_class = 2.0 + +#define CELLRATE 0.002 + +/obj/item/weapon/cell + name = "power cell" + desc = "A rechargable electrochemical power cell." + icon = 'power.dmi' + icon_state = "cell" + s_istate = "cell" + flags = FPRINT|DRIVABLE|TABLEPASS + force = 10.0 + throwforce = 2.0 + throwspeed = 1 + w_class = 3.0 + weight = 100000 + var/charge = 0 // note %age conveted to actual charge in New + var/maxcharge = 1000 + +/obj/landmark + name = "landmark" + icon = 'screen1.dmi' + icon_state = "x2" + anchored = 1.0 +/obj/landmark/alterations + name = "alterations" + +/obj/laser + name = "laser" + icon = 'weap_sat.dmi' + var/damage = 0.0 + var/range = 10.0 + +/obj/lattice + desc = "A lightweight support lattice." + name = "lattice" + icon = 'turfs2.dmi' + icon_state = "lattice" + density = 0 + anchored = 1.0 + layer = 2.5 + // flags = 64.0 + +/obj/list_container + name = "list container" +/obj/list_container/mobl + name = "mobl" + var/master = null + + var/list/container = list( ) + +/obj/m_tray + name = "morgue tray" + icon = 'stationobjs.dmi' + icon_state = "morguet" + density = 1 + layer = 2.0 + var/obj/morgue/connected = null + anchored = 1.0 + + +/obj/machinery + name = "machinery" + var/p_dir = 0 + var/h_dir = 0 // used for heat-exchange + var/capmult = 0 + var/stat = 0 + +/obj/machinery/alarm + name = "alarm" + icon = 'stationobjs.dmi' + icon_state = "alarm:0" + anchored = 1.0 +/obj/machinery/alarm/indicator + name = "indicator" + icon = 'airtunnel.dmi' + icon_state = "indicator" +/obj/machinery/at_indicator + name = "Air Tunnel Indicator" + icon = 'airtunnel.dmi' + icon_state = "reader00" + anchored = 1.0 +/obj/machinery/atmoalter + name = "atmoalter" + var/obj/substance/gas/gas = null + var/maximum + var/t_status + var/t_per + var/c_per + var/c_status + var/obj/item/weapon/tank/holding + var/max_valve = 1e6 +/obj/machinery/atmoalter/canister + name = "canister" + icon = 'canister.dmi' + density = 1 + maximum = 1.3E8 + var/color = "blue" + t_status = 3.0 + t_per = 50.0 + c_per = 50.0 + c_status = 0.0 + holding = null + var/health = 20.0 + var/destroyed = null + flags = 320.0 + weight = 1.0E7 + var/filled = 1 //fractional fullness at spawn +/obj/machinery/atmoalter/canister/anesthcanister + name = "Canister: \[N2O\]" + icon_state = "redws" + color = "redws" +/obj/machinery/atmoalter/canister/n2canister + name = "Canister: \[N2\]" + icon_state = "red" + color = "red" +/obj/machinery/atmoalter/canister/oxygencanister + name = "Canister: \[O2\]" + icon_state = "blue" +/obj/machinery/atmoalter/canister/poisoncanister + name = "Canister \[Plasma (Bio)\]" + icon_state = "orange" + color = "orange" +/obj/machinery/atmoalter/canister/co2canister + name = "Canister \[CO2\]" + icon_state = "black" + color = "black" +/obj/machinery/atmoalter/canister/aircanister + name = "Canister \[Air\]" + icon_state = "grey" + color = "grey" + +/obj/machinery/atmoalter/heater + name = "heater" + icon = 'stationobjs.dmi' + icon_state = "heater1" + density = 1 + maximum = 1.3E8 + t_status = 3.0 + var/h_status = 0.0 + t_per = 50.0 + var/h_tar = 20.0 + c_per = 50.0 + c_status = 0.0 + holding = null + anchored = 1.0 + var/heatrate = 1500000.0 +/obj/machinery/atmoalter/siphs + name = "siphs" + density = 1 + var/alterable = 1.0 + var/f_time = 1.0 + var/location = null + maximum = 1.3E8 + holding = null + t_status = 3.0 + t_per = 50.0 + c_per = 50.0 + c_status = 0.0 + weight = 1.0E7 + anchored = 1.0 + var/empty = null +/obj/machinery/atmoalter/siphs/fullairsiphon + name = "Air siphon" + icon = 'turfs.dmi' + icon_state = "siphon:0" +/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent + name = "Air regulator" + icon = 'aircontrol.dmi' + icon_state = "vent2" + t_status = 4.0 + alterable = 0.0 + density = 0 //***** +/obj/machinery/atmoalter/siphs/fullairsiphon/port + name = "Portable Siphon" + icon = 'stationobjs.dmi' + flags = 320.0 + anchored = 0.0 +/obj/machinery/atmoalter/siphs/scrubbers + name = "scrubbers" + icon = 'turfs2.dmi' + icon_state = "siphon:0" +/obj/machinery/atmoalter/siphs/scrubbers/air_filter + name = "air filter" + icon = 'aircontrol.dmi' + icon_state = "vent2" + t_status = 4.0 + alterable = 0.0 + density = 0 //***** + +/obj/machinery/atmoalter/siphs/scrubbers/port + name = "Portable Siphon" + icon = 'stationobjs.dmi' + icon_state = "scrubber:0" + flags = 320.0 + anchored = 0.0 +/obj/machinery/autolathe + name = "Autolathe" + icon = 'stationobjs.dmi' + icon_state = "autolathe" + var/m_amount = 0.0 + var/g_amount = 0.0 + var/operating = 0.0 + var/opened = 0.0 + var/temp = null + anchored = 1.0 +/obj/machinery/camera + name = "Security Camera" + icon = 'stationobjs.dmi' + icon_state = "camera" + var/network = "SS13" + var/c_tag = null + var/status = 1.0 + anchored = 1.0 + var/invuln = null + +/obj/machinery/circulator + name = "circulator/heat exchanger" + desc = "A gas circulator pump and heat exchanger." + icon = 'pipes.dmi' + icon_state = "circ1-off" + p_dir = 3 // N & S + var/side = 1 // 1=left 2=right + var/status = 0 + var/rate = 1000000 + var/obj/substance/gas/gas1 = null + var/obj/substance/gas/ngas1 = null + var/obj/substance/gas/gas2 = null + var/obj/substance/gas/ngas2 = null + + var/capacity = 6000000.0 + var/obj/machinery/node1 = null + var/obj/machinery/node2 = null + + var/obj/machinery/vnode1 + var/obj/machinery/vnode2 + + anchored = 1.0 + density = 1 + capmult = 1 + + //var/obj/machinery/power/teg/master = null + +/obj/machinery/computer + name = "computer" + density = 1 + anchored = 1.0 + +/obj/machinery/computer/airtunnel + name = "Air Tunnel Control" + icon = 'airtunnelcomputer.dmi' + icon_state = "console00" +/obj/machinery/computer/atmosphere + name = "atmosphere" + icon = 'turfs.dmi' +/obj/machinery/computer/atmosphere/siphonswitch + name = "Area Air Control" + icon_state = "switch" + var/otherarea + var/area/area +/obj/machinery/computer/atmosphere/siphonswitch/mastersiphonswitch + name = "Master Air Control" +/obj/machinery/computer/card + name = "Identification Computer" + icon = 'stationobjs.dmi' + icon_state = "id_computer" + var/obj/item/weapon/card/id/scan = null + var/obj/item/weapon/card/id/modify = null + var/authenticated = 0.0 + var/mode = 0.0 + var/printing = null +/obj/machinery/computer/communications + name = "communications" + icon = 'stationobjs.dmi' + icon_state = "comm_computer" +/obj/machinery/computer/data + name = "data" + icon = 'weap_sat.dmi' + icon_state = "computer" + + var/list/topics = list( ) + +/obj/machinery/computer/data/weapon + name = "weapon" +/obj/machinery/computer/data/weapon/info + name = "Research Computer" +/obj/machinery/computer/data/weapon/log + name = "Log Computer" +/obj/machinery/computer/dna + name = "DNA operations computer" + icon = 'Cryogenic2.dmi' + icon_state = "dna_computer" + var/obj/item/weapon/card/data/scan = null + var/obj/item/weapon/card/data/modify = null + var/obj/item/weapon/card/data/modify2 = null + var/mode = null + var/temp = null +/obj/machinery/computer/engine + name = "engine" + icon = 'enginecomputer.dmi' + var/temp = null + var/id = 1 + var/obj/machinery/gas_sensor/gs + var/access = "4000/0030" + var/allowed + +/obj/machinery/computer/hologram_comp + name = "Hologram Computer" + icon = 'stationobjs.dmi' + icon_state = "holo_console0" + var/obj/machinery/hologram_proj/projector = null + var/temp = null + var/lumens = 0.0 + var/h_r = 245.0 + var/h_g = 245.0 + var/h_b = 245.0 +/obj/machinery/computer/med_data + name = "Medical Records" + icon = 'weap_sat.dmi' + icon_state = "computer" + var/obj/item/weapon/card/id/scan = null + var/authenticated = null + var/rank = null + var/screen = null + var/datum/data/record/active1 = null + var/datum/data/record/active2 = null + var/a_id = null + var/temp = null + var/printing = null + var/allowed = "Medical Researcher/Medical Doctor/Head of Personnel/Captain" + var/access + +/obj/machinery/computer/pod + name = "Pod Launch Control" + icon = 'escapepod.dmi' + icon_state = "computer" + var/id = 1.0 + var/obj/machinery/mass_driver/connected = null + var/timing = 0.0 + var/time = 30.0 + + +/obj/machinery/computer/prison_shuttle + name = "prison shuttle" + icon = 'shuttle.dmi' + icon_state = "shuttlecom" +/obj/machinery/computer/secure_data + name = "Security Records" + icon = 'weap_sat.dmi' + icon_state = "computer" + var/obj/item/weapon/card/id/scan = null + var/authenticated = null + var/rank = null + var/screen = null + var/datum/data/record/active1 = null + var/datum/data/record/active2 = null + var/a_id = null + var/temp = null + var/printing = null +/obj/machinery/computer/security + name = "security" + icon = 'stationobjs.dmi' + icon_state = "sec_computer" + var/obj/machinery/camera/current = null + var/last_pic = 1.0 + var/network = "SS13" + var/maplevel = 1 +/obj/machinery/computer/shuttle + name = "shuttle" + icon = 'shuttle.dmi' + icon_state = "shuttlecom" + var/auth_need = 3.0 + + var/list/authorized = list( ) + var/allowed + var/access = "2000" + +/obj/machinery/computer/sleep_console + name = "sleep console" + icon = 'Cryogenic2.dmi' + icon_state = "sleeperconsole" + var/obj/machinery/sleeper/connected = null +/obj/machinery/computer/teleporter + name = "teleporter" + icon = 'stationobjs.dmi' + icon_state = "tele_computer" + var/locked = null + var/id = null + +/obj/machinery/connector + name = "connector" + icon = 'pipes.dmi' + desc = "A connector for gas canisters." + icon_state = "connector" + anchored = 1.0 + p_dir = 2 + var/obj/machinery/node = null + var/obj/machinery/atmoalter/connected = null + + var/obj/machinery/vnode = null + + var/obj/substance/gas/gas = null + var/obj/substance/gas/ngas = null + + //var/obj/substance/gas/agas + + var/capacity = 6000000.0 + capmult = 2 + var/flag = 0 + +/obj/machinery/inlet + name = "inlet" + icon = 'pipes.dmi' + icon_state = "inlet" + desc = "A gas pipe inlet." + anchored = 1 + p_dir = 2 + var/obj/machinery/node + var/obj/machinery/vnode + var/obj/substance/gas/gas + var/obj/substance/gas/ngas + var/capacity = 6000000 + capmult = 2 + + +/obj/machinery/vent + name = "vent" + icon = 'pipes.dmi' + icon_state = "vent" + desc = "A gas pipe outlet vent." + anchored = 1 + p_dir = 2 + var/obj/machinery/node + var/obj/machinery/vnode + var/obj/substance/gas/gas + var/obj/substance/gas/ngas + var/capacity = 6000000 + capmult = 2 + + +/obj/machinery/cryo_cell + name = "cryo cell" + icon = 'Cryogenic2.dmi' + icon_state = "celltop" + density = 1 + var/obj/machinery/line_in = null + var/mob/occupant = null + var/obj/substance/gas/gas = null + var/obj/substance/gas/ngas = null + anchored = 1.0 + p_dir = 8.0 + capmult = 1 + + var/obj/overlay/O1 = null + var/obj/overlay/O2 = null + + var/obj/machinery/vnode = null + +/obj/machinery/dispenser + desc = "A simple yet bulky one-way storage device for gas tanks. Holds 10 plasma and 10 oxygen tanks." + name = "Tank Storage Unit" + icon = 'turfs2.dmi' + icon_state = "dispenser" + density = 1 + var/o2tanks = 10.0 + var/pltanks = 10.0 + anchored = 1.0 +/obj/machinery/dna_scanner + name = "DNA Scanner/Implanter" + icon = 'Cryogenic2.dmi' + icon_state = "scanner_0" + density = 1 + var/locked = 0.0 + var/mob/occupant = null + anchored = 1.0 +/obj/machinery/door + name = "door" + icon = 'doors.dmi' + icon_state = "door1" + opacity = 1 + density = 1 + var/visible = 1.0 + var/access = "0000" + var/allowed = null + //var/r_access + //var/r_lab + //var/r_engine + //var/r_air + + var/p_open = 0.0 + var/operating = null + anchored = 1.0 +/obj/machinery/door/airlock + name = "airlock" + icon = 'Door1.dmi' + var/blocked = null + var/powered = 1.0 + var/locked = 0.0 + var/wires = 511.0 +/obj/machinery/door/false_wall + name = "wall" + icon = 'Doorf.dmi' +/obj/machinery/door/firedoor + name = "firedoor" + icon = 'Door1.dmi' + icon_state = "door0" + var/blocked = null + opacity = 0 + density = 0 +/obj/machinery/door/poddoor + name = "poddoor" + icon = 'Door1.dmi' + icon_state = "pdoor1" + var/id = 1.0 +/obj/machinery/door/window + name = "interior door" + icon = 'windoor.dmi' + visible = 0.0 + flags = 512.0 + opacity = 0 +/obj/machinery/firealarm + name = "firealarm" + icon = 'items.dmi' + icon_state = "firealarm" + var/detecting = 1.0 + var/working = 1.0 + var/time = 10.0 + var/timing = 0.0 + anchored = 1.0 +/obj/machinery/freezer + name = "freezer" + icon = 'Cryogenic2.dmi' + icon_state = "freezer_0" + density = 1 + var/connector = null + var/obj/machinery/line_out = null + var/obj/machinery/vnode = null + var/c_used = 1.0 + var/status = 0.0 + var/t_flags = 3.0 + var/transfer = 0.0 + var/temperature = 60.0+T0C + + var/obj/substance/gas/gas + var/obj/substance/gas/ngas + p_dir = 4.0 + anchored = 1.0 + capmult = 1 + +/obj/machinery/gas_sensor + name = "gas sensor" + icon = 'stationobjs.dmi' + icon_state = "gsensor" + desc = "A remote sensor for atmospheric gas composition." + var/id + anchored = 1 + +/obj/machinery/hologram_proj + name = "Hologram Projector" + icon = 'stationobjs.dmi' + icon_state = "hologram0" + var/atom/projection = null + anchored = 1.0 +/obj/machinery/igniter + name = "igniter" + icon = 'stationobjs.dmi' + icon_state = "igniter1" + var/on = 1.0 + anchored = 1.0 +/obj/machinery/injector + name = "injector" + icon = 'stationobjs.dmi' + icon_state = "injector" + density = 1 + anchored = 1.0 + flags = 512.0 +/obj/machinery/mass_driver + name = "mass driver" + icon = 'stationobjs.dmi' + icon_state = "mass_driver" + var/power = 1.0 + var/code = 1.0 + var/id = 1.0 + anchored = 1.0 +/obj/machinery/meter + name = "meter" + icon = 'pipes.dmi' + icon_state = "meterX" + var/obj/machinery/pipes/target = null + anchored = 1.0 + var/average = 0 +/obj/machinery/nuclearbomb + desc = "Uh oh." + name = "Nuclear Fission Explosive" + icon = 'stationobjs.dmi' + icon_state = "nuclearbomb0" + density = 1 + var/extended = 0.0 + var/timeleft = 60.0 + var/timing = 0.0 + var/r_code = "ADMIN" + var/code = "" + var/yes_code = 0.0 + var/safety = 1.0 + var/obj/item/weapon/disk/nuclear/auth = null + flags = 320.0 +/obj/machinery/valve + name = "valve" + icon = 'pipes.dmi' + icon_state = "valve0" + desc = "A gas valve." + var/obj/substance/gas/gas1 = null + var/obj/substance/gas/ngas1 = null + var/obj/substance/gas/gas2 = null + var/obj/substance/gas/ngas2 = null + var/capacity = 6000000.0 + var/obj/machinery/node1 = null + var/obj/machinery/node2 = null + var/obj/machinery/vnode1 = null + var/obj/machinery/vnode2 = null + var/id = "v1" + var/open = 0 + anchored = 1.0 + capmult = 2 + +/obj/machinery/manifold + name = "manifold" + icon = 'pipes.dmi' + icon_state = "manifold" + desc = "A three-port gas manifold." + anchored = 1 + dir = 2 + p_dir = 14 + var/n1dir + var/n2dir + + var/obj/substance/gas/gas = null + var/obj/substance/gas/ngas = null + var/capacity = 6000000.0 + var/obj/machinery/node1 = null + var/obj/machinery/node2 = null + var/obj/machinery/node3 = null + + var/obj/machinery/vnode1 + var/obj/machinery/vnode2 + var/obj/machinery/vnode3 + + + capmult = 3 + + +/obj/machinery/junction + name = "junction" + icon = 'junct-pipe.dmi' + icon_state = "junction" + desc = "A junction between regular and heat-exchanger pipework." + var/capacity = 6000000 + anchored = 1 + dir = 2 + p_dir = 3 + + var/obj/substance/gas/gas = null + var/obj/substance/gas/ngas = null + var/obj/machinery/node1 = null + var/obj/machinery/node2 = null + + var/obj/machinery/vnode1 + var/obj/machinery/vnode2 + + capmult = 2 + + +/obj/machinery/pipes + name = "pipes" + icon = 'reg_pipe.dmi' + icon_state = "12" + var/capacity = 6000000.0 + var/obj/machinery/node1 = null + var/obj/machinery/node2 = null + anchored = 1.0 + var/termination = 0 + var/insulation = NORMPIPERATE + var/plnum = 0 + var/obj/machinery/pipeline/pl + + + +/obj/machinery/pipeline // virtual pipeline consisting of multiple /obj/machinery/pipes + + name = "pipeline" + var/list/nodes = list() + var/numnodes = 0 + var/obj/substance/gas/gas = null + var/obj/substance/gas/ngas = null + + var/obj/machinery/vnode1 + var/obj/machinery/vnode2 + + invisibility = 101 + capmult = 0 + var/flow = 0 + + +/obj/machinery/pipes/flexipipe + desc = "Flexible hose-like piping." + name = "flexipipe" + icon = 'wire.dmi' + capacity = 10.0 + p_dir = 12.0 +/obj/machinery/pipes/high_capacity + desc = "A large bore pipe with high capacity." + name = "high capacity" + icon = 'hi_pipe.dmi' + density = 1 + capacity = 1.8E7 +/obj/machinery/pipes/regular + desc = "A stretch of pipe." + name = "normal pipe" +/obj/machinery/pipes/heat_exch + icon = 'heat_pipe.dmi' + name = "heat exchange pipe" + desc = "A bundle of small pipes designed for maximum heat transfer." + insulation = HEATPIPERATE + +/obj/machinery/pod + name = "Escape Pod" + icon = 'escapepod.dmi' + icon_state = "pod" + density = 1 + var/id = 1.0 + var/speed = 10.0 + var/capacity = null + flags = 320.0 + anchored = 1.0 +/obj/machinery/recharger + name = "recharger" + icon = 'stationobjs.dmi' + icon_state = "recharger0" + var/obj/item/weapon/gun/energy/charging = null + anchored = 1.0 +/obj/machinery/recon + name = "1-Person Reconaissance Pod" + icon = 'escapepod.dmi' + icon_state = "recon" + density = 1 + var/speed = 1.0 + flags = 320.0 + anchored = 1.0 +/obj/machinery/restruct + name = "DNA Physical Restructurization Accelerator" + icon = 'Cryogenic2.dmi' + icon_state = "restruct_0" + density = 1 + var/locked = 0.0 + var/mob/occupant = null + anchored = 1.0 +/obj/machinery/scan_console + name = "DNA Scanner Access Console" + icon = 'Cryogenic2.dmi' + icon_state = "scannerconsole" + density = 1 + var/obj/item/weapon/card/data/scan = null + var/func = "" + var/data = "" + var/special = "" + var/status = null + var/prog_p1 = null + var/prog_p2 = null + var/prog_p3 = null + var/prog_p4 = null + var/temp = null + var/obj/machinery/dna_scanner/connected = null + anchored = 1.0 +/obj/machinery/sec_lock + name = "Security Pad" + icon = 'stationobjs.dmi' + icon_state = "sec_lock" + var/obj/item/weapon/card/id/scan = null + var/a_type = 0.0 + var/obj/machinery/door/d1 = null + var/obj/machinery/door/d2 = null + anchored = 1.0 + var/access = "5500" + var/allowed = "Prison Security/Prison Warden/Security Officer/Head of Personnel/Captain" + +//*****RM +/obj/machinery/door_control + name = "Remote Door Control" + icon = 'stationobjs.dmi' + icon_state = "doorctrl0" + desc = "A remote control switch for a door." + var/id = null + anchored = 1.0 +//***** + +/obj/machinery/shuttle + name = "shuttle" + icon = 'shuttle.dmi' +/obj/machinery/shuttle/engine + name = "engine" + density = 1 + anchored = 1.0 +/obj/machinery/shuttle/engine/heater + name = "heater" + icon_state = "heater" +/obj/machinery/shuttle/engine/platform + name = "platform" + icon_state = "platform" +/obj/machinery/shuttle/engine/propulsion + name = "propulsion" + icon_state = "propulsion" + opacity = 1 +/obj/machinery/shuttle/engine/propulsion/burst + name = "burst" +/obj/machinery/shuttle/engine/propulsion/burst/left + name = "left" + icon_state = "burst_l" +/obj/machinery/shuttle/engine/propulsion/burst/right + name = "right" + icon_state = "burst_r" +/obj/machinery/shuttle/engine/router + name = "router" + icon_state = "router" +/obj/machinery/sleeper + name = "sleeper" + icon = 'Cryogenic2.dmi' + icon_state = "sleeper_0" + density = 1 + var/mob/occupant = null + anchored = 1.0 +/obj/machinery/teleport + name = "teleport" + icon = 'stationobjs.dmi' + density = 1 + anchored = 1.0 +/obj/machinery/teleport/hub + name = "hub" + icon_state = "tele0" +/obj/machinery/teleport/station + name = "station" + icon_state = "controller" + var/active = 0 +/obj/machinery/wire + name = "wire" + icon = 'wire.dmi' + + +/obj/machinery/power + name = null + icon = 'power.dmi' + anchored = 1.0 + var/datum/powernet/powernet = null + var/netnum = 0 + var/directwired = 1 // by default, power machines are connected by a cable in a neighbouring turf + // if set to 0, requires a 0-X cable on this turf + +/obj/machinery/power/apc + name = "area power controller" + + icon_state = "apc0" + anchored = 1 + var/area/area + var/obj/item/weapon/cell/cell + var/start_charge = 90 // initial cell charge % + var/cell_type = 1 // 0=no cell, 1=regular, 2=high-cap (x5) + var/opened = 0 + var/lighting = 3 + var/equipment = 3 + var/environ = 3 + var/operating = 1 + var/charging = 0 + var/chargemode = 1 + var/chargecount = 0 + var/locked = 1 + var/coverlocked = 1 + var/tdir = null + var/obj/machinery/power/terminal/terminal = null + var/lastused_light = 0 + var/lastused_equip = 0 + var/lastused_environ = 0 + var/lastused_total = 0 + var/main_status = 0 + netnum = -1 // set so that APCs aren't found as powernet nodes + var/access = "4000/0002/0030" + var/allowed = "Systems" + +/obj/machinery/power/terminal + name = "terminal" + icon_state = "term" + desc = "An underfloor wiring terminal for power equipment" + level = 1 + var/obj/machinery/power/master = null + anchored = 1 + directwired = 0 // must have a cable on same turf connecting to terminal + +/obj/machinery/power/generator + name = "generator" + desc = "A high efficiency thermoelectric generator." + icon_state = "teg" + anchored = 1 + density = 1 + + var/obj/machinery/circulator/circ1 + var/obj/machinery/circulator/circ2 + + var/c1on = 0 + var/c2on = 0 + var/c1rate = 10 + var/c2rate = 10 + var/lastgen = 0 + var/lastgenlev = -1 + +/obj/machinery/power/monitor + name = "power monitoring computer" + icon = 'stationobjs.dmi' + icon_state = "power_computer" + density = 1 + anchored = 1 + +#define SMESMAXCHARGELEVEL 60000 +#define SMESMAXOUTPUT 60000 + +/obj/machinery/power/smes + name = "power storage unit" + desc = "A high-capacity superconducting magnetic energy storage (SMES) unit." + icon_state = "smes" + density = 1 + anchored = 1 + var/output = 30000 + var/lastout = 0 + var/loaddemand = 0 + var/capacity = 5e6 + var/charge = 1e6 + var/charging = 0 + var/chargemode = 0 + var/chargecount = 0 + var/chargelevel = 30000 + var/online = 1 + var/n_tag = null + var/obj/machinery/power/terminal/terminal = null + +/obj/machinery/power/solar + name = "solar panel" + desc = "A solar electrical generator." + icon = 'power.dmi' + icon_state = "sp_base" + anchored = 1 + density = 1 + directwired = 1 + var/id = 1 + var/obscured = 0 + var/sunfrac = 0 + var/adir = SOUTH + var/ndir = SOUTH + var/turn_angle = 0 + var/obj/machinery/power/solar_control/control + +/obj/machinery/power/solar_control + name = "solar panel control" + desc = "A controller for solar panel arrays." + icon = 'enginecomputer.dmi' + icon_state = "solar_con" + anchored = 1 + density = 1 + directwired = 1 + var/id = 1 + var/cdir = 0 + var/gen = 0 + var/lastgen = 0 + var/track = 0 // on/off + var/trackrate = 600 // 300-900 seconds + var/trackdir = 1 // 0 =CCW, 1=CW + var/nexttime = 0 + +/obj/machinery/power/portable_gen + name = "portable generator" + desc = "A plasma-powered portable power generator." + var/obj/item/weapon/tank/holding + anchored = 0 + netnum = -1 + directwired = 0 + +/obj/machinery/compressor + name = "compressor" + desc = "The compressor stage of a gas turbine generator." + icon = 'pipes.dmi' + icon_state = "compressor" + anchored = 1 + density = 1 + var/obj/machinery/power/turbine/turbine + var/obj/substance/gas/gas + var/turf/inturf + var/starter = 0 + var/rpm = 0 + var/rpmtarget = 0 + var/capacity = 1e6 + +/obj/machinery/power/turbine + name = "gas turbine generator" + desc = "A gas turbine used to for backup power generation." + icon = 'pipes.dmi' + icon_state = "turbine" + anchored = 1 + density = 1 + var/obj/machinery/compressor/compressor + directwired = 1 + var/turf/outturf + var/lastgen + + + +/obj/machinery/cell_charger + name = "cell charger" + desc = "A charging unit for power cells." + icon = 'power.dmi' + icon_state = "ccharger0" + var/obj/item/weapon/cell/charging = null + var/chargelevel = -1 + anchored = 1 + +/obj/machinery/light_switch + desc = "A light switch" + name = null + icon = 'power.dmi' + icon_state = "light1" + anchored = 1.0 + var/on = 1 + var/area/area = null + var/otherarea = null + +/obj/cable + level = 1 + anchored =1 + var/netnum = 0 + name = "power cable" + desc = "A flexible superconducting cable for heavy-duty power transfer." + icon = 'power_cond.dmi' + icon_state = "0-1" + var/d1 = 0 + var/d2 = 1 + layer = 2.5 + + +/obj/manifest + + name = "manifest" + icon = 'screen1.dmi' + icon_state = "x" +/obj/meteor + name = "meteor" + icon = 'meteor.dmi' + density = 1 + var/steps = null + var/hits = 3.0 + anchored = 1.0 +/obj/meteor/small + name = "small" + icon_state = "small" +/obj/morgue + name = "morgue" + icon = 'stationobjs.dmi' + icon_state = "morgue1" + density = 1 + var/obj/m_tray/connected = null + anchored = 1.0 +/obj/move + name = "move" + icon = 'shuttle.dmi' + var/master = null + var/tx = null + var/ty = null + var/oxygen = O2STANDARD + var/oldoxy = null + var/tmpoxy = null + var/oldpoison = null + var/tmppoison = null + var/poison = 0.0 + var/co2 = 0.0 + var/oldco2 = null + var/tmpco2 = null + var/sl_gas = 0.0 + var/osl_gas = null + var/tsl_gas = null + var/n2 = N2STANDARD + var/on2 = null + var/tn2 = null + + var/temp = T20C + var/otemp + var/ttemp + + var/firelevel = 0.0 + var/airdir = null + var/airforce = null + var/checkfire = 1.0 + var/updatecell = 1.0 + anchored = 1.0 +/obj/move/airtunnel + name = "airtunnel" + icon = 'airtunnel.dmi' + icon_state = "floor" + var/deployed = 0.0 + var/obj/move/airtunnel/next = null + var/obj/move/airtunnel/previous = null + var/r_master = null +/obj/move/airtunnel/connector + name = "connector" + icon_state = "floor-c" + var/obj/move/airtunnel/current = null + deployed = 1.0 +/obj/move/airtunnel/connector/wall + name = "wall" + icon_state = "wall-c" + opacity = 1 + density = 1 + updatecell = 0.0 +/obj/move/airtunnel/wall + name = "wall" + icon_state = "wall" + opacity = 1 + density = 1 + updatecell = 0.0 +/obj/move/floor + name = "floor" + icon_state = "floor" +/obj/move/wall + name = "wall" + icon_state = "wall" + opacity = 1 + density = 1 + updatecell = 0.0 +/obj/overlay + name = "overlay" +/obj/point + name = "point" + icon = 'screen1.dmi' + icon_state = "arrow" + layer = 16.0 +/obj/portal + name = "portal" + icon = 'stationobjs.dmi' + icon_state = "portal" + density = 1 + var/obj/target = null + anchored = 1.0 +/obj/projection + name = "Projection" + anchored = 1.0 +/obj/rack + name = "rack" + icon = 'Icons.dmi' + icon_state = "rack" + density = 1 + flags = 320.0 + anchored = 1.0 +/obj/screen + name = "screen" + icon = 'screen1.dmi' + layer = 20.0 + var/id = 0.0 + var/obj/master +/obj/screen/close + name = "close" + master = null +/obj/screen/grab + name = "grab" + master = null +/obj/screen/screen2 + name = "screen2" + icon = 'screen.dmi' +/obj/screen/storage + name = "storage" + master = null +/obj/screen/zone_sel + name = "Damage Zone" + icon = 'zone_sel.dmi' + icon_state = "blank" + var/selecting = "chest" + screen_loc = "15,15" +/obj/secloset + desc = "An immobile card-locked storage closet." + name = "Security Locker" + icon = 'stationobjs.dmi' + icon_state = "1secloset0" + density = 1 + var/opened = 0.0 + var/locked = 1.0 + var/allowed = null + var/access = null + anchored = 1.0 +/obj/secloset/animal + name = "Animal Control" +/obj/secloset/highsec + name = "Experimental Technology" + allowed = "Captain/Head of Personnel/Head of Research" +/obj/secloset/captains + name = "Captain's Closet" + allowed = "Captain" +/obj/secloset/medical1 + name = "Medicine Closet" + allowed = "Medical Researcher/Prison Doctor/Medical Doctor/Captain/Head of Research" +/obj/secloset/medical2 + name = "Anesthetic" + allowed = "Medical Researcher/Prison Doctor/Medical Doctor/Captain/Head of Research" +/obj/secloset/personal + desc = "The first card swiped gains control." + name = "Personal Closet" + icon_state = "0secloset0" +/obj/secloset/security1 + name = "Security Equipment" + allowed = "Prison Security/Prison Warden/Security Officer/Captain/Head of Personnel/Head of Research" +/obj/secloset/security2 + name = "Forensics Locker" + allowed = "Prison Security/Prison Warden/Forensic Technician/Security Officer/Captain/Head of Personnel/Head of Research" +/obj/shut_controller + name = "shut controller" + var/moving = null + + var/list/parts = list( ) + +/obj/shuttle + name = "shuttle" +/obj/shuttle/door + name = "door" + icon = 'shuttle.dmi' + icon_state = "door1" + opacity = 1 + density = 1 + var/visible = 1.0 + var/operating = null + anchored = 1.0 +/obj/sp_start + name = "sp start" + icon = 'human.dmi' + icon_state = "male" + var/special = null + anchored = 1.0 +/obj/start + name = "start" + icon = 'screen1.dmi' + icon_state = "x" + anchored = 1.0 +/obj/stool + name = "stool" + icon = 'Icons.dmi' + icon_state = "stool" + flags = 320.0 + weight = 100000 +/obj/stool/bed + name = "bed" + icon_state = "bed" + anchored = 1.0 +/obj/stool/chair + name = "chair" + icon_state = "chair" + var/status = 0.0 + anchored = 1.0 +/obj/stool/chair/e_chair + name = "electrified chair" + icon_state = "e_chair0" + var/atom/movable/overlay/overl = null + var/on = 0.0 + var/obj/item/weapon/assembly/shock_kit/part1 = null + var/last_time = 1.0 +/obj/substance + name = "substance" + var/maximum + var/temperature + var/co2 + var/n2 + var/oxygen + var/plasma + var/sl_gas +/obj/substance/chemical + name = "chemical" + maximum = null + + var/list/chemicals = list( ) // contains /datum/chemical + + +/obj/substance/gas + name = "gas" + temperature = T20C + co2 = 0.0 + n2 = 0.0 + oxygen = 0.0 + plasma = 0.0 + sl_gas = 0.0 + maximum = -1.0 +/obj/table + name = "table" + icon = 'table.dmi' + icon_state = "alone" + density = 1 + anchored = 1.0 +/obj/team + name = "team" + var/captain = null + var/obj/ctf_assist/master = null + var/color = null + var/base = null + var/max_players = 20.0 + + var/list/members = list( ) + +/obj/test + name = "test" + var/success = 1.0 +/obj/watertank + name = "watertank" + icon = 'stationobjs.dmi' + icon_state = "watertank" + density = 1 + flags = 320.0 + weight = 5000000.0 +/obj/weldfueltank + name = "weldfueltank" + icon = 'items.dmi' + icon_state = "weldtank" + density = 1 + flags = 320.0 + weight = 5000000.0 +/obj/window + name = "window" + icon = 'turfs2.dmi' + icon_state = "window" + desc = "A window." + density = 1 + var/health = 14.0 + var/ini_dir = null + var/state = 0 + var/reinf = 0 + weight = 2500000.0 + anchored = 1.0 + flags = 512.0 + +/turf + icon = 'turfs.dmi' + var/intact = 0.0 + var/firelevel = null + var/oxygen = O2STANDARD + var/oldoxy = null + var/tmpoxy = null + var/oldpoison = null + var/tmppoison = null + var/poison = 0.0 + var/co2 = 0.0 + var/oldco2 = null + var/tmpco2 = null + var/sl_gas = 0.0 + var/osl_gas = null + var/tsl_gas = null + var/n2 = N2STANDARD + var/on2 = null + var/tn2 = null + var/temp = T20C + var/otemp + var/ttemp + + var/airdir = null + var/airforce = null + var/checkfire = 1.0 + var/atmoalt = null + var/updatecell = null + level = 1.0 + + + // the turfs to the N,S,E & W + var/turf/linkN + var/turf/linkS + var/turf/linkE + var/turf/linkW + + // whether those turfs are air-connected + var/airN + var/airS + var/airE + var/airW + + // whether to use special conduction heat transfer (through windows only) + + var/condN + var/condS + var/condE + var/condW + + + +/turf/space + name = "space" + icon_state = "space" + updatecell = 1.0 + oxygen = 0.0 + n2 = 0.0 + checkfire = 0 + oldoxy = 0.0 + oldpoison = 0.0 + temp = 2.7 // CMB radiation temperature+ + +/turf/station + name = "station" + intact = 1.0 +/turf/station/command + name = "command" +/turf/station/command/floor + name = "floor" + icon = 'Icons.dmi' + icon_state = "Floor3" + updatecell = 1.0 +/turf/station/command/floor/other + icon_state = "Floor" +/turf/station/command/wall + name = "wall" + icon = 'wall.dmi' + icon_state = "CCWall" + opacity = 1 + density = 1 + updatecell = 0.0 +/turf/station/command/wall/other + icon_state = "r_wall" +/turf/station/engine + name = "engine" + icon = 'engine.dmi' +/turf/station/engine/floor + name = "floor" + icon_state = "floor" + updatecell = 1.0 +/turf/station/floor + name = "floor" + icon = 'Icons.dmi' + icon_state = "Floor" + var/health = 150.0 + var/burnt = null + updatecell = 1.0 +/turf/station/floor/grid + icon = 'weap_sat.dmi' + icon_state = "grid" +/turf/station/floor/plasma_test +/turf/station/r_wall + name = "r wall" + icon = 'wall.dmi' + icon_state = "r_wall" + opacity = 1 + density = 1 + var/state = 2.0 + var/d_state = 0.0 + updatecell = 0.0 +/turf/station/shuttle + name = "shuttle" + icon = 'shuttle.dmi' +/turf/station/shuttle/floor + name = "floor" + icon_state = "floor" + updatecell = 1.0 +/turf/station/shuttle/wall + name = "wall" + icon_state = "wall" + opacity = 1 + density = 1 + updatecell = 0.0 +/turf/station/wall + name = "wall" + icon = 'wall.dmi' + opacity = 1 + density = 1 + var/state = 2.0 + updatecell = 0.0 diff --git a/main-src/Code/Test.dm b/main-src/Code/Test.dm new file mode 100644 index 0000000..ad6b3b6 --- /dev/null +++ b/main-src/Code/Test.dm @@ -0,0 +1,23 @@ + +/proc/dd_run_tests() + + var/test_classes = typesof(/obj/test) + for(var/class in test_classes) + var/obj/test/tester = new class( ) + for(var/test in tester.verbs) + call(tester, test)() + if (!( tester.success )) + else + //Foreach continue //goto(59) + if (!( tester.success )) + world << "Test failed." + return + //Foreach goto(26) + world << "All tests passed." + return + +/obj/test/proc/die(message) + + src.success = 0 + CRASH(message) + return diff --git a/main-src/Code/TextHandling.dm b/main-src/Code/TextHandling.dm new file mode 100644 index 0000000..ae006f1 --- /dev/null +++ b/main-src/Code/TextHandling.dm @@ -0,0 +1,140 @@ + +/proc/dd_file2list(file_path, separator) + + var/file + if (separator == null) + separator = "\n" + if (isfile(file_path)) + file = file_path + else + file = file( file_path ) + return dd_text2list(file2text(file), separator) + return + +/proc/dd_replacetext(text, search_string, replacement_string) + + var/textList = dd_text2list(text, search_string) + return dd_list2text(textList, replacement_string) + return + +/proc/dd_replaceText(text, search_string, replacement_string) + + var/textList = dd_text2List(text, search_string) + return dd_list2text(textList, replacement_string) + return + +/proc/dd_hasprefix(text, prefix) + + var/start = 1 + var/end = length(prefix) + 1 + return findtext(text, prefix, start, end) + return + +/proc/dd_hasPrefix(text, prefix) + + var/start = 1 + var/end = length(prefix) + 1 + return findText(text, prefix, start, end) + return + +/proc/dd_hassuffix(text, suffix) + + var/start = length(text) - length(suffix) + if (start) + return findtext(text, suffix, start, null) + return + +/proc/dd_hasSuffix(text, suffix) + + var/start = length(text) - length(suffix) + if (start) + return findText(text, suffix, start, null) + return + +/proc/dd_text2list(text, separator) + + var/textlength = length(text) + var/separatorlength = length(separator) + var/textList = new /list( ) + var/searchPosition = 1 + var/findPosition = 1 + while(1) + findPosition = findtext(text, separator, searchPosition, 0) + var/buggyText = copytext(text, searchPosition, findPosition) + textList += text("[]", buggyText) + searchPosition = findPosition + separatorlength + if (findPosition == 0) + return textList + else + if (searchPosition > textlength) + textList += "" + return textList + return + +/proc/dd_text2List(text, separator) + + var/textlength = length(text) + var/separatorlength = length(separator) + var/textList = new /list( ) + var/searchPosition = 1 + var/findPosition = 1 + while(1) + findPosition = findText(text, separator, searchPosition, 0) + var/buggyText = copytext(text, searchPosition, findPosition) + textList += text("[]", buggyText) + searchPosition = findPosition + separatorlength + if (findPosition == 0) + return textList + else + if (searchPosition > textlength) + textList += "" + return textList + return + +/proc/dd_list2text(var/list/the_list, separator) + + var/total = the_list.len + if (total == 0) + return + var/newText = text("[]", the_list[1]) + var/count = 2 + while(count <= total) + if (separator) + newText += separator + newText += text("[]", the_list[count]) + count++ + return newText + return + +/proc/dd_centertext(message, length) + + var/new_message = message + var/size = length(message) + if (size == length) + return new_message + if (size > length) + return copytext(new_message, 1, length + 1) + var/delta = length - size + if (delta == 1) + return new_message + " " + if (delta % 2) + new_message = " " + new_message + delta-- + delta = delta / 2 + var/spaces = "" + var/count = null + count = 1 + while(count <= delta) + spaces += " " + count++ + return spaces + new_message + spaces + return + +/proc/dd_limittext(message, length) + + var/size = length(message) + if (size <= length) + return message + else + return copytext(message, 1, length + 1) + return diff --git a/main-src/Code/_debug.dm b/main-src/Code/_debug.dm new file mode 100644 index 0000000..c83696c --- /dev/null +++ b/main-src/Code/_debug.dm @@ -0,0 +1,449 @@ +// NOTE WELL! +// Only include this file when debugging locally +// Do not include in release versions + + +#define VARSICON 1 +#define SDEBUG 1 + +/turf/verb/Flow() + set category = "Debug" + //set hidden = 1 + + for(var/turf/T in range(5)) + + var/obj/mark/O = locate(/obj/mark/, T) + + if(!O) + O = new /obj/mark(T) + else + O.overlays = null + + var/obj/move/OM = locate(/obj/move/, T) + + if(OM) + + if(! OM.updatecell) + O.icon_state = "x2" + else + O.icon_state = "blank" + + for(var/atom/U in OM.FindTurfs() ) + var/dirn = get_dir(OM, U) + if(dirn == 1) + O.overlays += image('mark.dmi', OM.airdir==1?"up":"fup") + else if(dirn == 2) + O.overlays += image('mark.dmi', OM.airdir==2?"dn":"fdn") + else if(dirn == 4) + O.overlays += image('mark.dmi', OM.airdir==4?"rt":"frt") + else if(dirn == 8) + O.overlays += image('mark.dmi', OM.airdir==8?"lf":"flf") + + else + + if(!(T.updatecell)) + O.icon_state = "x2" + else + O.icon_state = "blank" + + if(T.airN) + O.overlays += image('mark.dmi', T.airdir==1?"up":"fup") + + if(T.airS) + O.overlays += image('mark.dmi', T.airdir==2?"dn":"fdn") + + if(T.airW) + O.overlays += image('mark.dmi', T.airdir==8?"lf":"flf") + + if(T.airE) + O.overlays += image('mark.dmi', T.airdir==4?"rt":"frt") + + + if(T.condN) + O.overlays += image('mark.dmi', T.condN == 1?"yup":"rup") + + if(T.condS) + O.overlays += image('mark.dmi', T.condS == 1?"ydn":"rdn") + + if(T.condE) + O.overlays += image('mark.dmi', T.condE == 1?"yrt":"rrt") + + if(T.condW) + O.overlays += image('mark.dmi', T.condW == 1?"ylf":"rlf") + + +/turf/verb/Clear() + set category = "Debug" + //set hidden = 1 + for(var/obj/mark/O in world) + del(O) + + +/proc/numbericon(var/tn as text,var/s = 0) + + var/image/I = image('mark.dmi', "blank") + + if(lentext(tn)>8) + tn = "*" + + var/len = lentext(tn) + + for(var/d = 1 to lentext(tn)) + + + var/char = copytext(tn, len-d+1, len-d+2) + + if(char == " ") + continue + + var/image/ID = image('mark.dmi', char) + + ID.pixel_x = -(d-1)*4 + ID.pixel_y = s + //if(d>1) I.Shift(WEST, (d-1)*8) + + I.overlays += ID + + + + return I + + +/turf/verb/Stats() + set category = "Debug" + for(var/turf/T in range(5)) + + var/obj/mark/O = locate(/obj/mark/, T) + + if(!O) + O = new /obj/mark(T) + else + O.overlays = null + + + var/temp = round(T.temp-T0C, 0.1) + + O.overlays += numbericon("[temp]C") + + var/pres = round(T.tot_gas() / CELLSTANDARD * 100, 0.1) + + O.overlays += numbericon("[pres]", -8) + O.mark = "[temp]/[pres]" + + +/turf/verb/Pipes() + set category = "Debug" + + for(var/turf/T in range(6)) + + //world << "Turf [T] at ([T.x],[T.y])" + + for(var/obj/machinery/M in T) + //world <<" Mach [M] with pdir=[M.p_dir]" + + if(M && M.p_dir) + + //world << "Accepted" + var/obj/mark/O = locate(/obj/mark/, T) + + if(!O) + O = new /obj/mark(T) + else + O.overlays = null + + if(istype(M, /obj/machinery/pipes)) + var/obj/machinery/pipes/P = M + O.overlays += numbericon("[P.plnum] ", -20) + M = P.pl + + + var/obj/substance/gas/G = M.get_gas() + + if(G) + + var/cap = round( 100*(G.tot_gas()/ M.capmult / 6e6), 0.1) + var/temp = round(G.temperature - T0C, 0.1) + O.overlays += numbericon("[temp]C", 0) + O.overlays += numbericon("[cap]", -8) + + break + +/turf/verb/Cables() + set category = "Debug" + + for(var/turf/T in range(6)) + + //world << "Turf [T] at ([T.x],[T.y])" + + var/obj/mark/O = locate(/obj/mark/, T) + + if(!O) + O = new /obj/mark(T) + else + O.overlays = null + + var/marked = 0 + for(var/obj/M in T) + //world <<" Mach [M] with pdir=[M.p_dir]" + + + if(M && istype(M, /obj/cable/)) + + + var/obj/cable/C = M + //world << "Accepted" + + O.overlays += numbericon("[C.netnum] " , marked) + + marked -= 8 + + else if(M && istype(M, /obj/machinery/power/)) + + var/obj/machinery/power/P = M + O.overlays += numbericon("*[P.netnum] " , marked) + marked -= 8 + + if(!marked) + del(O) + +/turf/verb/Solar() + set category = "Debug" + + for(var/turf/T in range(6)) + + //world << "Turf [T] at ([T.x],[T.y])" + + var/obj/mark/O = locate(/obj/mark/, T) + + if(!O) + O = new /obj/mark(T) + else + O.overlays = null + + + var/obj/machinery/power/solar/S + + S = locate(/obj/machinery/power/solar, T) + + if(S) + + O.overlays += numbericon("[S.obscured] " , 0) + O.overlays += numbericon("[round(S.sunfrac*100,0.1)] " , -12) + + else + del(O) + +/mob/verb/Showports() + set category = "Debug" + + var/turf/T + var/obj/machinery/pipes/P + var/list/ndirs + + for(var/obj/machinery/pipeline/PL in plines) + + var/num = plines.Find(PL) + + P = PL.nodes[1] // 1st node in list + ndirs = P.get_node_dirs() + + T = get_step(P, ndirs[1]) + + var/obj/mark/O = new(T) + + O.overlays += numbericon("[num] * 1 ", -4) + O.overlays += numbericon("[ndirs[1]] - [ndirs[2]]",-16) + + + P = PL.nodes[PL.nodes.len] // last node in list + + ndirs = P.get_node_dirs() + T = get_step(P, ndirs[2]) + + O = new(T) + + O.overlays += numbericon("[num] * 2 ", -4) + O.overlays += numbericon("[ndirs[1]] - [ndirs[2]]", -16) + +/atom/verb/delete() + set category = "Debug" + set src in view() + + del(src) + + +/area/verb/dark() + set category = "Debug" + + if(src.icon_state == "dark") + icon_state = null + else + icon_state = "dark" + +/area/verb/power() + set category = "Debug" + + power_equip = !power_equip + power_environ = !power_environ + + world << "Power ([src]) = [power_equip]" + + power_change() + +// *****RM +/mob/verb/Jump(var/area/A in world) + set category = "Debug" + set desc = "Area to jump to" + set src = usr + + var/list/L = list() + + for(var/turf/T in A) + if(!T.density) + var/clear = 1 + for(var/obj/O in T) + if(O.density) + clear = 0 + break + if(clear) + L+=T + + src.loc = pick(L) + +// ***** + + +/mob/verb/ShowPlasma() + set category = "Debug" + Plasma() + +/mob/verb/Blobcount() + set category = "Debug" + world << "Blob count: [blobs.len]" + + +/mob/verb/Blobkill() + set category = "Debug" + blobs = list() + world << "Blob killed." + +/mob/verb/Blobmode() + set category = "Debug" + world << "Event=[ticker.event]" + world << "Time =[(ticker.event_time - world.realtime)/10]s" + +/mob/verb/Blobnext() + set category = "Debug" + ticker.event_time = world.realtime + + +/mob/verb/callshuttle() + set category = "Debug" + ticker.timeleft = 300 + ticker.timing = 1 + +/mob/verb/apcs() + set category = "Debug" + for(var/obj/machinery/power/apc/APC in world) + world << APC.report() + +/mob/verb/Globals() + set category = "Debug" + + debugobj = new() + + debugobj.debuglist = list( powernets, plines, vote, config, admins, ticker, SS13_airtunnel, sun ) + + + world << "Debug" + /*for(var/obj/O in plines) + + world << "[O.name]" + */ + +/mob/verb/Debug() + set category = "Debug" + Debug = !Debug + + world << "Debugging [Debug ? "On" : "Off"]" + + +/mob/verb/Mach() + set category = "Debug" + + var/n = 0 + for(var/obj/machinery/M in world) + n++ + if(! (M in machines) ) + world << "[M] [M.type]: not in list" + + world << "in world: [n]; in list:[machines.len]" + + +/mob/verb/air() + set category = "Debug" + + Air() + +/proc/Air() + + + var/area/A = locate(/area/airintake) + + var/atot = 0 + for(var/turf/T in A) + atot += T.tot_gas() + + var/ptot = 0 + for(var/obj/machinery/pipeline/PL in plines) + if(PL.suffix == "d") + ptot += PL.ngas.tot_gas() + + var/vtot = 0 + for(var/obj/machinery/atmoalter/V in machines) + if(V.suffix == "d") + vtot += V.gas.tot_gas() + + var/ctot = 0 + for(var/obj/machinery/connector/C in machines) + if(C.suffix == "d") + ctot += C.ngas.tot_gas() + + + var/tot = atot + ptot + vtot + ctot + + world.log << "A=[num2text(atot,10)] P=[num2text(ptot,10)] V=[num2text(vtot,10)] C=[num2text(ctot,10)] : Total=[num2text(tot,10)]" + +/mob/verb/Revive() + set category = "Debug" + + fireloss = 0 + toxloss = 0 + bruteloss = 0 + oxyloss = 0 + paralysis = 0 + stunned = 0 + weakened = 0 + health = 100 + if(stat > 1) stat=0 + disabilities = initial(disabilities) + sdisabilities = initial(sdisabilities) + for(var/obj/item/weapon/organ/external/e in src) + e.brute_dam = 0.0 + e.burn_dam = 0.0 + e.bandaged = 0.0 + e.wound_size = 0.0 + e.max_damage = initial(e.max_damage) + e.update_icon() + if(src.type == /mob/human) + var/mob/human/H = src + H.UpdateDamageIcon() + + +/mob/verb/Smoke() + set category = "Debug" + + var/obj/effects/smoke/O = new /obj/effects/smoke( src.loc ) + O.dir = pick(NORTH, SOUTH, EAST, WEST) + spawn( 0 ) + O.Life() diff --git a/main-src/Code/aaaDefines.dm b/main-src/Code/aaaDefines.dm new file mode 100644 index 0000000..616c863 --- /dev/null +++ b/main-src/Code/aaaDefines.dm @@ -0,0 +1,194 @@ +/proc/add_zero(t, u) + + while(length(t) < u) + t = text("0[]", t) + return t + +/proc/add_lspace(t, u) + while(length(t) < u) + t = " [t]" + return t + +/proc/add_tspace(t, u) + while(length(t) < u) + t = "[t] " + return t + +/obj/bomb/New() + + ..() //*****RM + switch(btype) + if(0) // radio + var/obj/item/weapon/assembly/r_i_ptank/R = new /obj/item/weapon/assembly/r_i_ptank( src.loc ) + var/obj/item/weapon/tank/plasmatank/p3 = new /obj/item/weapon/tank/plasmatank( R ) + var/obj/item/weapon/radio/signaler/p1 = new /obj/item/weapon/radio/signaler( R ) + var/obj/item/weapon/igniter/p2 = new /obj/item/weapon/igniter( R ) + R.part1 = p1 + R.part2 = p2 + R.part3 = p3 + p1.master = R + p2.master = R + p3.master = R + R.status = explosive + p1.b_stat = 0 + p2.status = 1 + p3.gas.temperature = btemp + T0C + //SN src = null + + if(1) // prox + var/obj/item/weapon/assembly/m_i_ptank/R = new /obj/item/weapon/assembly/m_i_ptank( src.loc ) + var/obj/item/weapon/tank/plasmatank/p3 = new /obj/item/weapon/tank/plasmatank( R ) + var/obj/item/weapon/prox_sensor/p1 = new /obj/item/weapon/prox_sensor( R ) + var/obj/item/weapon/igniter/p2 = new /obj/item/weapon/igniter( R ) + R.part1 = p1 + R.part2 = p2 + R.part3 = p3 + p1.master = R + p2.master = R + p3.master = R + R.status = explosive + + p3.gas.temperature = btemp +T0C + p2.status = 1 + + + if(src.active) + R.part1.state = 1 + R.part1.icon_state = text("motion[]", 1) + R.c_state(1, src) + + if(2) // time + + var/obj/item/weapon/assembly/t_i_ptank/R = new /obj/item/weapon/assembly/t_i_ptank( src.loc ) + var/obj/item/weapon/tank/plasmatank/p3 = new /obj/item/weapon/tank/plasmatank( R ) + var/obj/item/weapon/timer/p1 = new /obj/item/weapon/timer( R ) + var/obj/item/weapon/igniter/p2 = new /obj/item/weapon/igniter( R ) + R.part1 = p1 + R.part2 = p2 + R.part3 = p3 + p1.master = R + p2.master = R + p3.master = R + R.status = explosive + + p3.gas.temperature = btemp +T0C + p2.status = 1 + + del(src) + return + +/obj/proc/throwing(t_dir, rs) + + if (src.throwspeed <= 1) + src.throwing = 0 + src.throwspeed-- + if (rs == 0) + rs = 1 + if (src.throwing) + if (rs == 1) + step(src, t_dir) + sleep(1) + spawn( 0 ) + throwing(t_dir, rs) + return + else + if (rs > 1) + var/t = null + while(t < rs) + step(src, t_dir) + t++ + sleep(10) + spawn( 0 ) + src.throwing(t_dir, rs) + return + else + step(src, t_dir) + sleep(10 / rs) + spawn( 0 ) + throwing(t_dir, rs) + return + else + //*****RM + //src.density = 0 + if(istype(src, /obj/item)) + src.density = 0 + + //***** + return + + +//*****RM + +/obj/Bump(atom/O) + + if (src.throwing) + //world<<"[src] bumped into [O] and stopped" + src.throwing = 0 + ..() + +//***** +/atom/proc/burn(fi_amount) + + return + +/atom/movable/Move() + + var/atom/A = src.loc + . = ..() + src.move_speed = world.time - src.l_move_time + src.l_move_time = world.time + src.m_flag = 1 + if ((A != src.loc && A && A.z == src.z)) + src.last_move = get_dir(A, src.loc) + return + + +/proc/cleanstring(var/t) + + var/index = findtext(t, "\n") + while(index) + t = copytext(t, 1, index) + "#" + copytext(t, index+1) + index = findtext(t, "\n") + + + index = findtext(t, "\t") + while(index) + t = copytext(t, 1, index) + "#" + copytext(t, index+1) + index = findtext(t, "\t") + + + return t + + +/datum/config/New() + + for(var/M in modes) + pickprob[M] = 1 + +/datum/config/proc/pickmode() + var/total = 0 + var/list/accum = list() + + for(var/M in modes) + total += pickprob[M] + accum[M] = total + + //world << "[M] [pickprob[M]] [accum[M]]" + + var/r = total-(rand()*total) + + //world << "Chosen value is [r]" + + for(var/M in modes) + if(pickprob[M]>0 && accum[M]>=r) + //world << "Returning mode [M]" + return M + + world << "Failed to pick gamemode in config/pickmode()" + + return null + +/proc/upperfirst(var/t as text) + return uppertext(copytext(t,1,2))+copytext(t,2) + + diff --git a/main-src/Code/airtunnel.dm b/main-src/Code/airtunnel.dm new file mode 100644 index 0000000..68730a8 --- /dev/null +++ b/main-src/Code/airtunnel.dm @@ -0,0 +1,834 @@ + +/obj/move/airtunnel/process() + + if (!( src.deployed )) + return null + else + ..() + return + +/obj/move/airtunnel/connector/create() + + src.current = src + src.next = new /obj/move/airtunnel( null ) + src.next.master = src.master + src.next.previous = src + spawn( 0 ) + src.next.create(36, src.y) + return + return + +/obj/move/airtunnel/connector/wall/create() + + src.current = src + src.next = new /obj/move/airtunnel/wall( null ) + src.next.master = src.master + src.next.previous = src + spawn( 0 ) + src.next.create(36, src.y) + return + return + +/obj/move/airtunnel/connector/wall/process() + + return + +/obj/move/airtunnel/wall/create(num, y_coord) + + if (((num < 7 || (num > 14 && num < 21)) && y_coord == 72)) + src.next = new /obj/move/airtunnel( null ) + else + src.next = new /obj/move/airtunnel/wall( null ) + src.next.master = src.master + src.next.previous = src + if (num > 1) + spawn( 0 ) + src.next.create(num - 1, y_coord) + return + return + +/obj/move/airtunnel/wall/move_right() + + flick("wall-m", src) + return ..() + return + +/obj/move/airtunnel/wall/move_left() + + flick("wall-m", src) + return ..() + return + +/obj/move/airtunnel/wall/process() + + return + +/obj/move/airtunnel/proc/move_left() + + src.relocate(get_step(src, WEST)) + if ((src.next && src.next.deployed)) + return src.next.move_left() + else + return src.next + return + +/obj/move/airtunnel/proc/move_right() + + src.relocate(get_step(src, EAST)) + if ((src.previous && src.previous.deployed)) + src.previous.move_right() + return src.previous + return + +/obj/move/airtunnel/proc/create(num, y_coord) + + if (y_coord == 72) + if ((num < 7 || (num > 14 && num < 21))) + src.next = new /obj/move/airtunnel( null ) + else + src.next = new /obj/move/airtunnel/wall( null ) + else + src.next = new /obj/move/airtunnel( null ) + src.next.master = src.master + src.next.previous = src + if (num > 1) + spawn( 0 ) + src.next.create(num - 1, y_coord) + return + return + +/obj/machinery/at_indicator/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(58) + src.icon_state = "reader_broken" + stat |= BROKEN + if(3.0) + if (prob(25)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(109) + src.icon_state = "reader_broken" + stat |= BROKEN + else + return + +/obj/machinery/at_indicator/blob_act() + + if (prob(50)) + for(var/x in src.verbs) + src.verbs -= x + src.icon_state = "reader_broken" + stat |= BROKEN + +/obj/machinery/at_indicator/proc/update_icon() + + if(stat & (BROKEN|NOPOWER) ) + icon_state = "reader_broken" + + var/status = 0 + if (SS13_airtunnel.operating == 1) + status = "r" + else + if (SS13_airtunnel.operating == 2) + status = "e" + else + var/obj/move/airtunnel/connector/C = pick(SS13_airtunnel.connectors) + if (C.current == C) + status = 0 + else + if (!( C.current.next )) + status = 2 + else + status = 1 + src.icon_state = text("reader[][]", (SS13_airtunnel.siphon_status == 2 ? "1" : "0"), status) + return + +/obj/machinery/at_indicator/process() + + use_power(5, ENVIRON) + src.update_icon() + return + +/obj/machinery/computer/airtunnel/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(58) + src.icon_state = "broken" + if(3.0) + if (prob(25)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(109) + src.icon_state = "broken" + else + return + +/obj/machinery/computer/airtunnel/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/computer/airtunnel/attack_hand(var/mob/user as mob) + + if(stat & (NOPOWER|BROKEN) ) + return + + var/dat = "Air Tunnel Controls
    " + user.machine = src + if (SS13_airtunnel.operating == 1) + dat += "Status: RETRACTING
    " + else + if (SS13_airtunnel.operating == 2) + dat += "Status: EXPANDING
    " + else + var/obj/move/airtunnel/connector/C = pick(SS13_airtunnel.connectors) + if (C.current == C) + dat += "Status: Fully Retracted
    " + else + if (!( C.current.next )) + dat += "Status: Fully Extended
    " + else + dat += "Status: Stopped Midway
    " + dat += text("Retract Stop Extend
    ", src, src, src) + dat += text("
    Air Level: []
    ", (SS13_airtunnel.air_stat ? "Acceptable" : "DANGEROUS")) + dat += "Air System Status: " + switch(SS13_airtunnel.siphon_status) + if(0.0) + dat += "Stopped " + if(1.0) + dat += "Siphoning (Siphons only) " + if(2.0) + dat += "Regulating (BOTH) " + if(3.0) + dat += "RELEASING MAX (Siphons only) " + else + dat += text("(Refresh)
    ", src) + dat += text("RELEASE (Siphons only) Siphon (Siphons only) Stop Regulate
    ", src, src, src, src) + dat += text("

    Close
    ", user) + user << browse(dat, "window=computer;size=400x500") + return + +/obj/machinery/computer/airtunnel/proc/update_icon() + + if(stat & BROKEN) + icon_state = "broken" + return + + if(stat & NOPOWER) + icon_state = "c_unpowered" + return + + var/status = 0 + if (SS13_airtunnel.operating == 1) + status = "r" + else + if (SS13_airtunnel.operating == 2) + status = "e" + else + var/obj/move/airtunnel/connector/C = pick(SS13_airtunnel.connectors) + if (C.current == C) + status = 0 + else + if (!( C.current.next )) + status = 2 + else + status = 1 + src.icon_state = text("console[][]", (SS13_airtunnel.siphon_status >= 2 ? "1" : "0"), status) + return + +/obj/machinery/computer/airtunnel/process() + + src.update_icon() + if(stat & (NOPOWER|BROKEN) ) + return + use_power(250) + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(27) + return + +/obj/machinery/computer/airtunnel/Topic(href, href_list) + ..() + + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + usr << "\red You don't have the dexterity to do this!" + return + if ((usr.stat || usr.restrained())) + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["retract"]) + SS13_airtunnel.retract() + else + if (href_list["stop"]) + SS13_airtunnel.operating = 0 + else + if (href_list["extend"]) + SS13_airtunnel.extend() + else + if (href_list["release"]) + SS13_airtunnel.siphon_status = 3 + SS13_airtunnel.siphons() + else + if (href_list["siphon"]) + SS13_airtunnel.siphon_status = 1 + SS13_airtunnel.siphons() + else + if (href_list["stop_siph"]) + SS13_airtunnel.siphon_status = 0 + SS13_airtunnel.siphons() + else + if (href_list["auto"]) + SS13_airtunnel.siphon_status = 2 + SS13_airtunnel.siphons() + else + if (href_list["refresh"]) + SS13_airtunnel.siphons() + src.add_fingerprint(usr) + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(346) + return + +/obj/machinery/camera/attackby(W as obj, user as mob) + + if (istype(W, /obj/item/weapon/wirecutters)) + src.status = !( src.status ) + if (!( src.status )) + for(var/mob/O in viewers(user, null)) + O.show_message(text("\red [] has deactivated []!", user, src), 1) + //Foreach goto(49) + src.icon_state = "camera1" + else + for(var/mob/O in viewers(user, null)) + O.show_message(text("\red [] has reactivated []!", user, src), 1) + //Foreach goto(106) + src.icon_state = "camera" + return + + +//*****RM + +/obj/machinery/camera/ex_act(severity) + + if(src.invuln) + return + else + ..(severity) + return + +/obj/machinery/camera/blob_act() + return + + +obj/machinery/door_control/attack_paw(mob/user as mob) + return src.attack_hand(user) + +obj/machinery/door_control/attackby(nothing, mob/user as mob) + return src.attack_hand(user) + +obj/machinery/door_control/attack_hand(mob/user as mob) + + if(stat & NOPOWER) + return + use_power(5) + icon_state = "doorctrl1" + + for(var/obj/machinery/door/poddoor/M in machines) + if (M.id == src.id) + if (M.density) + spawn( 0 ) + M.openpod() + return + else + spawn( 0 ) + M.closepod() + return + + spawn(15) + if(!(stat & NOPOWER)) + icon_state = "doorctrl0" + +//***** + +/obj/machinery/door_control/power_change() + ..() + if(stat & NOPOWER) + icon_state = "doorctrl-p" + else + icon_state = "doorctrl0" + +/obj/machinery/sec_lock/attack_paw(user as mob) + + return src.attack_hand(user) + + +/obj/machinery/sec_lock/attack_hand(var/mob/user as mob) + + if(stat & NOPOWER) + return + use_power(10) + + if (src.loc == user.loc) + var/dat = text("Security Pad:
    \nKeycard: []
    \nToggle Outer Door
    \nToggle Inner Door
    \n
    \nEmergency Close
    \nEmergency Open
    ", (src.scan ? text("[]", src, src.scan.name) : text("-----", src)), src, src, src, src) + user << browse(dat, "window=sec_lock") + return + +/obj/machinery/sec_lock/attackby(nothing, user as mob) + + return src.attack_hand(user) + + +/obj/machinery/sec_lock/New() + + ..() + spawn( 2 ) + if (src.a_type == 1) + src.d2 = locate(/obj/machinery/door, locate(src.x - 2, src.y - 1, src.z)) + src.d1 = locate(/obj/machinery/door, get_step(src, SOUTHWEST)) + else + if (src.a_type == 2) + src.d2 = locate(/obj/machinery/door, locate(src.x - 2, src.y + 1, src.z)) + src.d1 = locate(/obj/machinery/door, get_step(src, NORTHWEST)) + else + src.d1 = locate(/obj/machinery/door, get_step(src, SOUTH)) + src.d2 = locate(/obj/machinery/door, get_step(src, SOUTHEAST)) + return + return + +/obj/machinery/sec_lock/Topic(href, href_list) + ..() + + + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + usr << "\red You don't have the dexterity to do this!" + return + if ((usr.stat || usr.restrained())) + return + if ((!( src.d1 ) || !( src.d2 ))) + usr << "\red Error: Cannot interface with door security!" + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["card"]) + if (src.scan) + src.scan.loc = src.loc + src.scan = null + else + var/obj/item/weapon/card/id/I = usr.equipped() + if (istype(I, /obj/item/weapon/card/id)) + usr.drop_item() + I.loc = src + src.scan = I + if (href_list["door1"]) + if (src.scan) + + + + if (scan.check_access(access, allowed)) + if (src.d1.density) + spawn( 0 ) + src.d1.open() + return + else + spawn( 0 ) + src.d1.close() + return + if (href_list["door2"]) + if (src.scan) + if (scan.check_access(access, allowed)) + if (src.d2.density) + spawn( 0 ) + src.d2.open() + return + else + spawn( 0 ) + src.d2.close() + return + if (href_list["em_cl"]) + if (src.scan) + if (scan.check_access(access, allowed)) + if (!( src.d1.density )) + src.d1.close() + return + sleep(1) + spawn( 0 ) + if (!( src.d2.density )) + src.d2.close() + return + if (href_list["em_op"]) + if (src.scan) + if (scan.check_access(access, allowed)) + spawn( 0 ) + if (src.d1.density) + src.d1.open() + return + sleep(1) + spawn( 0 ) + if (src.d2.density) + src.d2.open() + return + src.add_fingerprint(usr) + for(var/mob/M in src.loc) + if ((M.client && M.machine == src)) + spawn( 0 ) + src.attack_hand(M) + return + //Foreach goto(737) + return + +/obj/machinery/autolathe/attackby(var/obj/item/weapon/O as obj, var/mob/user as mob) + + if (istype(O, /obj/item/weapon/sheet/metal)) + if (src.m_amount < 150000.0) + src.m_amount += O:height * O:width * O:length * 1000000.0 + O:amount-- + if (O:amount < 1) + //O = null + del(O) + else + if (istype(O, /obj/item/weapon/sheet/glass)) + if (src.g_amount < 75000.0) + src.g_amount += O:height * O:width * O:length * 1000000.0 + O:amount-- + if (O:amount < 1) + //O = null + del(O) + else + if (istype(O, /obj/item/weapon/screwdriver)) + if (!( src.operating )) + src.opened = !( src.opened ) + src.icon_state = text("autolathe[]", (src.opened ? "f" : null)) + else + user << "\red The machine is in use. You can not maintain it now." + else + spawn( 0 ) + src.attack_hand(user) + return + return + +/obj/machinery/autolathe/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/autolathe/attack_hand(user as mob) + + var/dat + if (src.temp) + dat = text("[]

    Clear Screen", src.temp, src) + else + dat = text("Metal Amount: [] cm3 (MAX: 150,000)
    \nGlass Amount: [] cm3 (MAX: 75,000)
    ", src.m_amount, src.g_amount) + var/list/L = list( ) +/* L["screwdriver"] = "Make Screwdriver {40 cc}" + L["wirecutters"] = "Make Wirecutters {80 cc}" + L["wrench"] = "Make Wrench {150 cc}" + L["crowbar"] = "Make Crowbar {150 cc}" + L["screw"] = "Make Screw (1) {3 cc}" + L["5screws"] = "Make Screws (5) {14 cc}" + L["rod_t"] = "Make Rod (1x20) {20 cc}" + L["rod_l"] = "Make Rod (5x250) {1250 cc}" + L["grille_1"] = "Make Grille (250x250x1) {27345 cc}" + L["sheet_1"] = "Make Sheet (20x10x.01) {2 cc}" + L["sheet_2"] = "Make Sheet (30x10x.01) {3 cc}" + L["sheet_3"] = "Make Sheet (30x20x.01) {6 cc}" + L["sheet_4"] = "Make Sheet (30x30x.01) {9 cc}" + L["sheet_5"] = "Make Sheet (62.5x62.5x4) {15625 cc}" */ + + + for(var/t in L) + dat += "[L["[t]"]]
    " + //Foreach goto(230) + user << browse("Autolathe Control Panel[dat]", "window=autolathe") + return + +/obj/machinery/autolathe/Topic(href, href_list) + ..() + if ((usr.stat || usr.restrained())) + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + src.add_fingerprint(usr) + + if (href_list["temp"]) + src.temp = null + + + + + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(108) + return + +/obj/machinery/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + //SN src = null + del(src) + return + if(3.0) + if (prob(25)) + //SN src = null + del(src) + return + else + return + +/obj/machinery/blob_act() + if(prob(25)) + del(src) + +/obj/machinery/injector/attackby(var/obj/item/weapon/tank/W as obj, var/mob/user as mob) + + if(stat & NOPOWER) + return + use_power(25) + + var/obj/item/weapon/tank/ptank = W + if (!( istype(ptank, /obj/item/weapon/tank) )) + return + var/turf/T = get_step(src.loc, get_dir(user, src)) + ptank.gas.turf_add(T, -1.0) + src.add_fingerprint(user) + return + +/obj/machinery/alarm/process() + + if(stat & NOPOWER) + icon_state = "alarm-p" + return + + use_power(5, ENVIRON) + + var/safe = 1 + var/turf/T = src.loc + if (!( istype(T, /turf) )) + return + if (locate(/obj/move, T)) + T = locate(/obj/move, T) + var/turf_total = T.co2 + T.oxygen + T.poison + T.sl_gas + T.n2 + turf_total = max(turf_total, 1) + var/t1 = turf_total / CELLSTANDARD * 100 + if (!( (90 < t1 && t1 < 110) )) + safe = 0 + t1 = T.oxygen / turf_total * 100 + if (!( (20 < t1 && t1 < 30) )) + safe = 0 + src.icon_state = text("alarm:[]", !( safe )) + return + +/obj/machinery/alarm/power_change() + if( powered(ENVIRON) ) + stat &= ~NOPOWER + else + stat |= NOPOWER + + +/obj/machinery/alarm/examine() + set src in oview(1) + + if (usr.stat || stat & NOPOWER) + return + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + usr << "\red You don't have the dexterity to do this!" + return + var/turf/T = src.loc + if (!( istype(T, /turf) )) + return + + var/turf_total = T.co2 + T.oxygen + T.poison + T.sl_gas + T.n2 + turf_total = max(turf_total, 1) + usr.show_message("\blue Results:", 1) + var/t = "" + var/t1 = turf_total / CELLSTANDARD * 100 + if ((90 < t1 && t1 < 110)) + usr.show_message(text("\blue Air Pressure: []%", t1), 1) + else + usr.show_message(text("\blue Air Pressure:\red []%", t1), 1) + t1 = T.n2 / turf_total * 100 + t1 = round(t1, 0.0010) + if ((60 < t1 && t1 < 80)) + t += text("Nitrogen: [] ", t1) + else + t += text("Nitrogen: [] ", t1) + t1 = T.oxygen / turf_total * 100 + t1 = round(t1, 0.0010) + if ((20 < t1 && t1 < 24)) + t += text("Oxygen: [] ", t1) + else + t += text("Oxygen: [] ", t1) + t1 = T.poison / turf_total * 100 + t1 = round(t1, 0.0010) + if (t1 < 0.5) + t += text("Plasma: [] ", t1) + else + t += text("Plasma: [] ", t1) + t1 = T.co2 / turf_total * 100 + t1 = round(t1, 0.0010) + if (t1 < 1) + t += text("CO2: [] ", t1) + else + t += text("CO2: [] ", t1) + t1 = T.sl_gas / turf_total * 100 + t1 = round(t1, 0.0010) + if (t1 < 5) + t += text("NO2: []", t1) + else + t += text("NO2: []", t1) + usr.show_message(t, 1) + usr.show_message(text("\blue \t Temperature: []°C", T.temp - T0C), 1) + src.add_fingerprint(usr) + return + + +/obj/machinery/alarm/indicator/process() + + if(stat & NOPOWER) + icon_state = "indicator-p" + return + + var/safe = 1 + var/turf/T = src.loc + if (!( istype(T, /turf) )) + return + if (locate(/obj/move, T)) + T = locate(/obj/move, T) + var/turf_total = T.co2 + T.oxygen + T.poison + T.sl_gas + T.n2 + turf_total = max(turf_total, 1) + var/t1 = turf_total / CELLSTANDARD * 100 + if (!( (90 < t1 && t1 < 110) )) + safe = 0 + t1 = T.oxygen / turf_total * 100 + if (!( (20 < t1 && t1 < 30) )) + safe = 0 + src.icon_state = text("indicator[]", safe) + SS13_airtunnel.air_stat = safe + return + +/datum/air_tunnel/air_tunnel1/New() + + ..() + for(var/obj/move/airtunnel/A in locate(/area/airtunnel1)) + A.master = src + A.create() + src.connectors += A + //Foreach goto(21) + return + +/datum/air_tunnel/proc/siphons() + + switch(src.siphon_status) + if(0.0) + for(var/obj/machinery/atmoalter/siphs/S in locate(/area/airtunnel1)) + S.t_status = 3 + //Foreach goto(42) + if(1.0) + for(var/obj/machinery/atmoalter/siphs/fullairsiphon/S in locate(/area/airtunnel1)) + S.t_status = 2 + S.t_per = 1000000.0 + //Foreach goto(86) + for(var/obj/machinery/atmoalter/siphs/scrubbers/S in locate(/area/airtunnel1)) + S.t_status = 3 + //Foreach goto(136) + if(2.0) + for(var/obj/machinery/atmoalter/siphs/S in locate(/area/airtunnel1)) + S.t_status = 4 + //Foreach goto(180) + if(3.0) + for(var/obj/machinery/atmoalter/siphs/fullairsiphon/S in locate(/area/airtunnel1)) + S.t_status = 1 + S.t_per = 1000000.0 + //Foreach goto(224) + for(var/obj/machinery/atmoalter/siphs/scrubbers/S in locate(/area/airtunnel1)) + S.t_status = 3 + //Foreach goto(274) + else + return + +/datum/air_tunnel/proc/stop() + + src.operating = 0 + return + +/datum/air_tunnel/proc/extend() + + if (src.operating) + return + src.operating = 2 + while(src.operating == 2) + var/ok = 1 + for(var/obj/move/airtunnel/connector/A in src.connectors) + if (!( A.current.next )) + src.operating = 0 + return + if (!( A.move_left() )) + ok = 0 + //Foreach goto(56) + if (!( ok )) + src.operating = 0 + else + for(var/obj/move/airtunnel/connector/A in src.connectors) + if (A.current) + A.current.next.loc = get_step(A.current.loc, EAST) + A.current = A.current.next + A.current.deployed = 1 + else + src.operating = 0 + //Foreach goto(150) + sleep(20) + return + +/datum/air_tunnel/proc/retract() + + if (src.operating) + return + src.operating = 1 + while(src.operating == 1) + var/ok = 1 + for(var/obj/move/airtunnel/connector/A in src.connectors) + if (A.current == A) + src.operating = 0 + return + if (A.current) + A.current.loc = null + A.current.deployed = 0 + A.current = A.current.previous + else + ok = 0 + //Foreach goto(56) + if (!( ok )) + src.operating = 0 + else + for(var/obj/move/airtunnel/connector/A in src.connectors) + if (!( A.current.move_right() )) + src.operating = 0 + //Foreach goto(188) + sleep(20) + return diff --git a/main-src/Code/areas.dm b/main-src/Code/areas.dm new file mode 100644 index 0000000..b8dff70 --- /dev/null +++ b/main-src/Code/areas.dm @@ -0,0 +1,331 @@ +/area + var/fire = null + level = null + name = "area" + mouse_opacity = 0 + var/lightswitch = 1 + + var/eject = null + + var/requires_power = 1 + var/power_equip = 1 + var/power_light = 1 + var/power_environ = 1 + + var/used_equip = 0 + var/used_light = 0 + var/used_environ = 0 + + var/numturfs = 0 + var/linkarea = null + var/area/linked = null + var/no_air = null + +/area/aircontrol + name = "aircontrol" + linkarea = "airintake" +/area/airintake + name = "air intake" +/area/airtunnel1 + name = "airtunnel" +/area/control_room + name = "control room" +/area/controlaccess + name = "control access" +/area/crew_quarters + name = "crew quarters" +/area/decontamination + name = "decon" +/area/dummy + +/area/engine + name = "engine" +/area/engine_access + name = "engine access" +/area/escapezone + name = "escape zone" +/area/hallways + name = "hallway" +/area/hallways/centralhall + name = "central hall" +/area/hallways/eastairlock + name = "east airlock" +/area/hallways/labaccess + name = "lab access" +/area/hallways/loungehall + name = "lounge hall" +/area/lounge + name = "lounge" +/area/medical + name = "medical bay" +/area/medicalstorage + name = "medical storage" +/area/oxygen_storage + name = "gas storage" +/area/security + name = "security" + linkarea = "brig" +/area/shuttle + requires_power = 0 + name = "shuttle" +/area/shuttle_airlock + name = "shuttle airlock" +/area/shuttle_prison + name = "prison shuttle" + requires_power = 0 +/area/sleep_area + name = "sleep area" +/area/solar_con + name = "solar power control" +/area/start + name = "start area" +/area/supply_station + name = "supply station" +/area/testlab1 + name = "testlab1" +/area/testlab2 + name = "testlab2" +/area/testlab3 + name = "testlab3" +/area/testlab4 + name = "testlab4" +/area/aux_engine + name = "aux. engine" +/area/toolstorage + name = "tool storage" +/area/tech_storage + name = "technical storage" +/area/toxinlab + name = "toxin lab" +/area/vehicles + requires_power = 0 +/area/vehicles/shuttle1 +/area/vehicles/shuttle2 +/area/vehicles/shuttle3 + +// new areas + +/area/sleep_area_annexe + name = "sleep area annexe" +/area/south_access + name = "southern access corridor" +/area/transport_tube + name = "transport tube" +/area/shuttle_docking_arm + name = "shuttle docking arm" +/area/secure_storage + name = "secure stores" +/area/emergency_storage + name = "emergency stores" +/area/morgue + name = "morgue" +/area/repair_bay + name = "repair bay" +/area/engine/engine_gas_storage + name = "engine gas storage" +/area/engine/engine_storage + name = "engine storage" +/area/engine/engine_hallway + name = "engine hallway" +/area/engine/generator + name = "generator room" +/area/engine/combustion + name = "combustion chamber" +/area/engine/engine_control + name = "engine control" +/area/engine/engine_mon + name = "engine monitoring" +/area/station_teleport + name = "SS13 teleporter" +/area/chapel + name = "chapel" +/area/attack_ship + name = "attack ship" +/area/security_sub + name = "security annexe" +/area/aux_storage + name = "aux. storage" +/area/eva_storage + name = "EVA storage" + +/area/weapon_sat + name = "weapon sat" + requires_power = 0 +/area/med_sat + name = "med. sat" + requires_power = 0 + +/area/secret_base + name = "secret base" + no_air = 1 + power_equip = 0 + power_light = 0 + power_environ = 0 + +/area/prison + name = "prison" + requires_power = 0 + +/area/control_station + name = "control station" + requires_power = 0 + +/area/brig + name = "brig" + + + +/area/New() + + ..() + src.icon = 'alert.dmi' + src.layer = 10 + + if(!requires_power) + power_light = 1 + power_equip = 1 + power_environ = 1 + + spawn(5) + for(var/turf/T in src) // count the number of turfs (for lighting calc) + numturfs++ // spawned with a delay so turfs can finish loading + if(no_air) + T.oxygen = 0 // remove air if so specified for this area + T.n2 = 0 + T.res_vars() + + if(linkarea) + linked = locate(text2path("/area/[linkarea]")) // area linked to this for power calcs + + + spawn(15) + src.power_change() // all machines set to current power level, also updates lighting icon + +/area/vehicles/New() + + ..() + sleep(1) + var/obj/shut_controller/S = new /obj/shut_controller( ) + shuttles += S + for(var/obj/move/O in src) + S.parts += O + O.master = S + //Foreach goto(42) + return + +/area/proc/firealert() + + if (!( src.fire )) + src.fire = 1 + src.updateicon() + src.mouse_opacity = 0 + for(var/obj/machinery/door/firedoor/D in src) + if (!( D.density )) + spawn( 0 ) + D.closefire() + return + //Foreach goto(74) + return + + +/area/proc/updateicon() + + if( fire || eject ) + if(power_environ) + if(fire && !eject) + icon_state = "blue" + else if(!fire && eject) + icon_state = "red" + else + icon_state = "blue-red" + else + if(lightswitch && power_light) + icon_state = null + else + icon_state = "dark" + else + if(lightswitch && power_light) + icon_state = null + else + icon_state = "dark" + +/* +#define EQUIP 1 +#define LIGHT 2 +#define ENVIRON 3 +*/ + +/area/proc/powered(var/chan) // return true if the area has power to given channel + if(!requires_power) + return 1 + switch(chan) + if(EQUIP) + return power_equip + if(LIGHT) + return power_light + if(ENVIRON) + return power_environ + + return 0 + + +// called when power status changes + +/area/proc/power_change() + + for(var/obj/machinery/M in src) // for each machine in the area + M.power_change() // reverify power status (to update icons etc.) + + spawn(rand(15,25)) + src.updateicon() + + + if(linked) + linked.power_equip = power_equip + linked.power_light = power_light + linked.power_environ = power_environ + linked.power_change() + + + + +/area/proc/usage(var/chan) + var/used = 0 + switch(chan) + if(LIGHT) + used += used_light + if(EQUIP) + used += used_equip + if(ENVIRON) + used += used_environ + if(TOTAL) + used += used_light + used_equip + used_environ + + if(linked) + return linked.usage(chan) + used + else + return used + +/area/proc/clear_usage() + if(linked) + linked.clear_usage() + used_equip = 0 + used_light = 0 + used_environ = 0 + +/area/proc/use_power(var/amount, var/chan) + + switch(chan) + if(EQUIP) + used_equip += amount + if(LIGHT) + used_light += amount + if(ENVIRON) + used_environ += amount + +#define LIGHTING_POWER 8 // power (W) per turf used for lighting + +/area/proc/calc_lighting() + if(lightswitch && power_light) + used_light += numturfs * LIGHTING_POWER + diff --git a/main-src/Code/atmo_control.dm b/main-src/Code/atmo_control.dm new file mode 100644 index 0000000..31e3f0e --- /dev/null +++ b/main-src/Code/atmo_control.dm @@ -0,0 +1,661 @@ + +/obj/machinery/proc/process() + + return + +/obj/machinery/proc/gas_flow() + + return + +/obj/machinery/proc/orient_pipe(source as obj) + + return + +/obj/machinery/proc/cut_pipes() + + return + +/obj/machinery/proc/disc_pipe(target as obj) + + return + + +/obj/machinery/proc/buildnodes() + + return + +/obj/machinery/proc/getline() + if(p_dir) + return src + +/obj/machinery/proc/setline() + return + +/obj/machinery/proc/ispipe() + return 0 + +/obj/machinery/proc/next() + + return null + +/obj/machinery/proc/get_gas_val(from) + return null + +/obj/machinery/proc/get_gas(from) + return null + +/obj/machinery/meter/New() + + ..() + src.target = locate(/obj/machinery/pipes, src.loc) + average = 0 + return + +/obj/machinery/meter/process() + + if(!target) + icon_state = "meterX" + return + if(stat & NOPOWER) + icon_state = "meter0" + return + + use_power(5) + + average = 0.5 * average + 0.5 * target.pl.flow + + var/val = min(18, round( 18.99 * ((abs(average) / 2500000)**0.25)) ) + icon_state = "meter[val]" + +/* +/obj/machinery/meter/examine() + set src in oview(1) + + var/t = "A gas flow meter. " + if (src.target) + t += text("Results:\nMass flow []%\nPressure [] kPa", round(100*average/src.target.gas.maximum, 0.1), round(pressure(), 0.1) ) + else + t += "It is not functioning." + + usr << t + +*/ + +/obj/machinery/meter/Click() + + if (get_dist(usr, src) <= 3) + if (src.target) + usr << text("\blue Results:\nMass flow []%\nTemperature [] K", round(100*abs(average)/6e6, 0.1), round(target.pl.gas.temperature,0.1)) + else + usr << "\blue Results: Connection Error!" + else + usr << "\blue You are too far away." + return + +/* +/obj/machinery/meter/proc/pressure() + + if(src.target && src.target.gas) + return (average * target.gas.temperature)/100000.0 + else + return 0 +*/ + + +/obj/machinery/mass_driver/proc/drive(amount) + + if(stat & NOPOWER) + return + + use_power(500) + for(var/obj/O in src.loc) + if (O.flags & 64) + O.throwing = 1 + O.throwspeed = 100 + spawn( 0 ) + O.throwing(src.dir, src.power) + return + //Foreach goto(17) + flick("mass_driver1", src) + return + + + + + +/obj/machinery/atmoalter/siphs/New() + + ..() + src.gas = new /obj/substance/gas( src ) + src.gas.maximum = src.maximum + + return + +/obj/machinery/atmoalter/siphs/proc/releaseall() + + src.t_status = 1 + src.t_per = max_valve + return + +/obj/machinery/atmoalter/siphs/proc/reset(valve, auto) + + if(c_status!=0) + return + + if (valve < 0) + src.t_per = -valve + src.t_status = 1 + else + if (valve > 0) + src.t_per = valve + src.t_status = 2 + else + src.t_status = 3 + if (auto) + src.t_status = 4 + src.setstate() + return + +/obj/machinery/atmoalter/siphs/proc/release(amount, flag) + + var/T = src.loc + if (!( istype(T, /turf) )) + return + if (locate(/obj/move, T)) + T = locate(/obj/move, T) + if (!( amount )) + return + if (!( flag )) + amount = min(amount, max_valve) + src.gas.turf_add(T, amount) + return + +/obj/machinery/atmoalter/siphs/proc/siphon(amount, flag) + + var/T = src.loc + if (!( istype(T, /turf) )) + return + if (locate(/obj/move, T)) + T = locate(/obj/move, T) + if (!( amount )) + return + if (!( flag )) + amount = min(amount, 900000.0) + src.gas.turf_take(T, amount) + return + +/obj/machinery/atmoalter/siphs/proc/setstate() + + if(stat & NOPOWER) + icon_state = "siphon:0" + return + + if (src.holding) + src.icon_state = "siphon:T" + else + if (src.t_status != 3) + src.icon_state = "siphon:1" + else + src.icon_state = "siphon:0" + return + +/obj/machinery/atmoalter/siphs/fullairsiphon/New() + + ..() + if(!empty) + src.gas.oxygen = 2.73E7 + src.gas.n2 = 1.027E8 + return + +/obj/machinery/atmoalter/siphs/fullairsiphon/port/reset(valve, auto) + + if (valve < 0) + src.t_per = -valve + src.t_status = 1 + else + if (valve > 0) + src.t_per = valve + src.t_status = 2 + else + src.t_status = 3 + if (auto) + src.t_status = 4 + src.setstate() + return + +/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent/attackby(W as obj, user as mob) + + if (istype(W, /obj/item/weapon/screwdriver)) + if (src.c_status) + src.anchored = 1 + src.c_status = 0 + else + if (locate(/obj/machinery/connector, src.loc)) + src.anchored = 1 + src.c_status = 3 + else + if (istype(W, /obj/item/weapon/wrench)) + src.alterable = !( src.alterable ) + return + +/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent/setstate() + + + if(stat & NOPOWER) + icon_state = "vent-p" + return + + if (src.t_status == 4) + src.icon_state = "vent2" + else + if (src.t_status == 3) + src.icon_state = "vent0" + else + src.icon_state = "vent1" + return + +/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent/reset(valve, auto) + + if (auto) + src.t_status = 4 + return + +/obj/machinery/atmoalter/siphs/scrubbers/process() + + if(stat & NOPOWER) return + + if (src.t_status != 3) + var/turf/T = src.loc + if (istype(T, /turf)) + if (locate(/obj/move, T)) + T = locate(/obj/move, T) + if (T.firelevel < 900000.0) + src.gas.turf_add_all_oxy(T) + + else + T = null + switch(src.t_status) + if(1.0) + if( !portable() ) use_power(50, ENVIRON) + if (src.holding) + var/t1 = src.gas.tot_gas() + var/t2 = t1 + var/t = src.t_per + if (src.t_per > t2) + t = t2 + src.holding.gas.transfer_from(src.gas, t) + else + if (T) + var/t1 = src.gas.tot_gas() + var/t2 = t1 + var/t = src.t_per + if (src.t_per > t2) + t = t2 + src.gas.turf_add(T, t) + if(2.0) + if( !portable() ) use_power(50, ENVIRON) + if (src.holding) + var/t1 = src.gas.tot_gas() + var/t2 = src.maximum - t1 + var/t = src.t_per + if (src.t_per > t2) + t = t2 + src.gas.transfer_from(src.holding.gas, t) + else + if (T) + var/t1 = src.gas.tot_gas() + var/t2 = src.maximum - t1 + var/t = src.t_per + if (t > t2) + t = t2 + src.gas.turf_take(T, t) + if(4.0) + if( !portable() ) use_power(50, ENVIRON) + if (T) + if (T.firelevel > 900000.0) + src.f_time = world.time + 400 + else + if (world.time > src.f_time) + src.gas.extract_toxs(T) + if( !portable() ) use_power(150, ENVIRON) + var/contain = src.gas.tot_gas() + if (contain > 1.3E8) + src.gas.turf_add(T, 1.3E8 - contain) + + /*if (src.c_status == 1) + var/obj/machinery/connector/C = locate(/obj/machinery/connector, src.loc) + if (C) + var/obj/substance/gas/G = new /obj/substance/gas( ) + G.transfer_from(src.gas, src.c_per) + spawn( 0 ) + C.receive_gas(G, src) + return + else + src.c_status = 0 + */ + src.setstate() + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(654) + return + +/obj/machinery/atmoalter/siphs/scrubbers/air_filter/setstate() + + if(stat & NOPOWER) + icon_state = "vent-p" + return + + if (src.t_status == 4) + src.icon_state = "vent2" + else + if (src.t_status == 3) + src.icon_state = "vent0" + else + src.icon_state = "vent1" + return + +/obj/machinery/atmoalter/siphs/scrubbers/air_filter/attackby(W as obj, user as mob) + + if (istype(W, /obj/item/weapon/screwdriver)) + if (src.c_status) + src.anchored = 1 + src.c_status = 0 + else + if (locate(/obj/machinery/connector, src.loc)) + src.anchored = 1 + src.c_status = 3 + else + if (istype(W, /obj/item/weapon/wrench)) + src.alterable = !( src.alterable ) + return + +/obj/machinery/atmoalter/siphs/scrubbers/air_filter/reset(valve, auto) + + if (auto) + src.t_status = 4 + src.setstate() + return + +/obj/machinery/atmoalter/siphs/scrubbers/port/setstate() + + if(stat & NOPOWER) + icon_state = "scrubber:0" + return + + if (src.holding) + src.icon_state = "scrubber:T" + else + if (src.t_status != 3) + src.icon_state = "scrubber:1" + else + src.icon_state = "scrubber:0" + return + +/obj/machinery/atmoalter/siphs/scrubbers/port/reset(valve, auto) + + if (valve < 0) + src.t_per = -valve + src.t_status = 1 + else + if (valve > 0) + src.t_per = valve + src.t_status = 2 + else + src.t_status = 3 + if (auto) + src.t_status = 4 + src.setstate() + return + +//true if the siphon is portable (therfore no power needed) + +/obj/machinery/proc/portable() + return istype(src, /obj/machinery/atmoalter/siphs/fullairsiphon/port) || istype(src, /obj/machinery/atmoalter/siphs/scrubbers/port) + +/obj/machinery/atmoalter/siphs/power_change() + + if( portable() ) + return + + if(!powered(ENVIRON)) + spawn(rand(0,15)) + stat |= NOPOWER + setstate() + else + stat &= ~NOPOWER + setstate() + + +/obj/machinery/atmoalter/siphs/process() + +// var/dbg = (suffix=="d") && Debug + + if(stat & NOPOWER) return + + if (src.t_status != 3) + var/turf/T = src.loc + if (istype(T, /turf)) + if (locate(/obj/move, T)) + T = locate(/obj/move, T) + else + T = null + switch(src.t_status) + if(1.0) + if( !portable() ) use_power(50, ENVIRON) + if (src.holding) + var/t1 = src.gas.tot_gas() + var/t2 = t1 + var/t = src.t_per + if (src.t_per > t2) + t = t2 + src.holding.gas.transfer_from(src.gas, t) + else + if (T) + var/t1 = src.gas.tot_gas() + var/t2 = t1 + var/t = src.t_per + if (src.t_per > t2) + t = t2 + src.gas.turf_add(T, t) + if(2.0) + if( !portable() ) use_power(50, ENVIRON) + if (src.holding) + var/t1 = src.gas.tot_gas() + var/t2 = src.maximum - t1 + var/t = src.t_per + if (src.t_per > t2) + t = t2 + src.gas.transfer_from(src.holding.gas, t) + else + if (T) + var/t1 = src.gas.tot_gas() + var/t2 = src.maximum - t1 + var/t = src.t_per + if (t > t2) + t = t2 + //var/g = gas.tot_gas() + //if(dbg) world.log << "VP0 : [t] from turf: [gas.tot_gas()]" + //if(dbg) Air() + + src.gas.turf_take(T, t) + //if(dbg) world.log << "VP1 : now [gas.tot_gas()]" + + //if(dbg) world.log << "[gas.tot_gas()-g] ([t]) from turf to siph" + + //if(dbg) Air() + if(4.0) + if( !portable() ) + use_power(50, ENVIRON) + + if (T) + if (T.firelevel > 900000.0) + src.f_time = world.time + 300 + else + if (world.time > src.f_time) + var/difference = CELLSTANDARD - (T.oxygen + T.n2) + if (difference > 0) + var/t1 = src.gas.tot_gas() + if (difference > t1) + difference = t1 + src.gas.turf_add(T, difference) + + /*if (src.c_status == 1) // 1 = release + var/obj/machinery/connector/C = locate(/obj/machinery/connector, src.loc) + if (C && C.connected == src) + spawn( 0 ) + C.receive_gas(gas, c_per) + return + else + src.c_status = 0 + else if(src.c_status == 2) // 2 = accept + var/obj/machinery/connector/C = locate(/obj/machinery/connector, src.loc) + if (C && C.connected == src) + spawn( 0 ) + C.send_gas(gas, c_per) // connector will send case to canister + return + */ + + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(632) + src.setstate() + return + +/obj/machinery/atmoalter/siphs/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/atmoalter/siphs/attack_hand(var/mob/user as mob) + + if(stat & NOPOWER) return + user.machine = src + var/tt + switch(src.t_status) + if(1.0) + tt = text("Releasing
    Siphon Stop", src, src) + if(2.0) + tt = text("Release Siphoning Stop", src, src) + if(3.0) + tt = text("Release Siphon Stopped Automatic", src, src, src) + else + tt = "Automatic equalizers are on!" + var/ct = null + switch(src.c_status) + if(1.0) + ct = text("Releasing Accept Stop", src, src) + if(2.0) + ct = text("Release Accepting Stop", src, src) + if(3.0) + ct = text("Release Accept Stopped", src, src) + else + ct = "Disconnected" + var/at = null + if (src.t_status == 4) + at = text("Automatic On Stop", src) + var/dat = text("Canister Valves []
    \n\tContains/Capacity [] / []
    \n\tUpper Valve Status: [] []
    \n\t\tM - - - - [] + + + + M
    \n\tPipe Valve Status: []
    \n\t\tM - - - - [] + + + + M
    \n
    \n\nClose
    \n\t
    ", (!( src.alterable ) ? "Valves are locked. Unlock with wrench!" : "You can lock this interface with a wrench."), num2text(src.gas.tot_gas(), 10), num2text(src.maximum, 10), (src.t_status == 4 ? text("[]", at) : text("[]", tt)), (src.holding ? text("
    (Tank ([])", src, src.holding.gas.tot_gas()) : null), src, num2text(max_valve, 7), src, src, src, src, src.t_per, src, src, src, src, src, num2text(max_valve, 7), ct, src, num2text(max_valve, 7), src, src, src, src, src.c_per, src, src, src, src, src, num2text(max_valve, 7), user) + user << browse(dat, "window=siphon;size=600x300") + return + +/obj/machinery/atmoalter/siphs/Topic(href, href_list) + ..() + + if (usr.stat || usr.restrained()) + return + if (!( src.alterable )) + return + if ((get_dist(src, usr) <= 1 && istype(src.loc, /turf))) + usr.machine = src + if (href_list["c"]) + var/c = text2num(href_list["c"]) + switch(c) + if(1.0) + src.c_status = 1 + if(2.0) + src.c_status = 2 + if(3.0) + src.c_status = 3 + else + else + if (href_list["t"]) + var/t = text2num(href_list["t"]) + if (src.t_status == 0) + return + switch(t) + if(1.0) + src.t_status = 1 + if(2.0) + src.t_status = 2 + if(3.0) + src.t_status = 3 + if(4.0) + src.t_status = 4 + src.f_time = 1 + else + else + if (href_list["tp"]) + var/tp = text2num(href_list["tp"]) + src.t_per += tp + src.t_per = min(max(round(src.t_per), 0), max_valve) + else + if (href_list["cp"]) + var/cp = text2num(href_list["cp"]) + src.c_per += cp + src.c_per = min(max(round(src.c_per), 0), max_valve) + else + if (href_list["tank"]) + var/cp = text2num(href_list["tank"]) + if (cp == 1) + src.holding.loc = src.loc + src.holding = null + if (src.t_status == 2) + src.t_status = 3 + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(433) + src.add_fingerprint(usr) + else + usr << browse(null, "window=canister") + return + return + +/obj/machinery/atmoalter/siphs/attackby(var/obj/W as obj, mob/user as mob) + + if (istype(W, /obj/item/weapon/tank)) + if (src.holding) + return + var/obj/item/weapon/tank/T = W + user.drop_item() + T.loc = src + src.holding = T + else + if (istype(W, /obj/item/weapon/screwdriver)) + var/obj/machinery/connector/con = locate(/obj/machinery/connector, src.loc) + if (src.c_status) + src.anchored = 0 + src.c_status = 0 + user.show_message("\blue You have disconnected the siphon.") + if(con) + con.connected = null + else + if (con && !con.connected) + src.anchored = 1 + src.c_status = 3 + user.show_message("\blue You have connected the siphon.") + con.connected = src + else + user.show_message("\blue There is nothing here to connect to the siphon.") + + + else + if (istype(W, /obj/item/weapon/wrench)) + src.alterable = !( src.alterable ) + if (src.alterable) + user << "\blue You unlock the interface!" + else + user << "\blue You lock the interface!" + return + diff --git a/main-src/Code/blob.dm b/main-src/Code/blob.dm new file mode 100644 index 0000000..b233c8a --- /dev/null +++ b/main-src/Code/blob.dm @@ -0,0 +1,303 @@ +/obj/blob/New(loc, var/h = 30) + + blobs += src + + src.health = h + src.dir = pick(1,2,4,8) + //world << "new blob #[blobs.len]" + src.update() + + ..(loc) + +/obj/blob/Del() + blobs -= src + //world << "del blob #[blobs.len]" + ..() + + +/proc/bloblife() + + if(blobs.len>0) + + for(var/i = 1 to 25) + + var/obj/blob/B = pick(blobs) + + var/turf/BL = B.loc + + for(var/atom/A in B.loc) + A.blob_act() + + B.Life() + BL.buildlinks() + + +/obj/blob/proc/Life() + + var/turf/U = src.loc + + if (locate(/obj/move, U)) + U = locate(/obj/move, U) + if(U.density == 1) + del(src) + + if(U.poison> 200000) + src.health -= round(U.poison/200000) + src.update() + + var/p = health * (U.n2/11376000 + U.oxygen/1008000 + U.co2/200) + + if(!istype(U, /turf/space)) + p+=3 + + if(!prob(p)) + return + + + + + + + for(var/dirn in cardinal) + var/turf/T = get_step(src, dirn) + + //if(istype(U, /turf/space) && istype(T, /turf/space)) // don't propagate into space + // if( !(locate(/obj/move) in U) && !(locate(/obj/move) in T)) + // continue + + if(istype(T.loc, /area/sleep_area) && prob(90)) // slow down growth in sleep area + continue + + + + var/obj/blob/B = new /obj/blob(U, src.health) + + if(T.Enter(B,src) && !(locate(/obj/blob) in T)) + B.loc = T // open cell, so expand + else + if(prob(50)) // closed cell, 50% chance to not expand + if(!locate(/obj/blob) in T) + for(var/atom/A in T) // otherwise explode contents of turf + A.blob_act() + + T.blob_act() + T.buildlinks() + del(B) + +/obj/blob/burn(fi_amount) + + src.health-= round(fi_amount/500000) + + src.update() + +/obj/blob/ex_act(severity) + switch(severity) + if(1) + del(src) + if(2) + src.health -= rand(20,30) + src.update() + if(3) + src.health -= rand(15,25) + src.update() + + +/obj/blob/proc/update() + if(health<=0) + del(src) + return + if(health<10) + icon_state = "blobc0" + return + if(health<20) + icon_state = "blobb0" + return + icon_state = "bloba0" + + + +/obj/blob/las_act(flag) + + if (flag == "bullet") + health -= 10 + update() + else + health -= 20 + update() + + +/obj/blob/attackby(var/obj/item/weapon/W, var/mob/user) + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red The blob has been attacked with [][] ", W, (user ? text(" by [].", user) : ".")), 1) + //Foreach goto(20) + + var/damage = W.force / 4.0 + + if(istype(W, /obj/item/weapon/weldingtool)) + var/obj/item/weapon/weldingtool/WT = W + + if(WT.welding) + damage = 15 + + + src.health -= damage + src.update() + return + +/obj/blob/examine() + set src in oview(1) + + usr << "A mysterious alien blob-like organism." + + +/proc/blob_event() + + if(!ticker.event_time) // initial event timing + + ticker.event_time = world.realtime + rand(200, 900) // sometime between 20s to 1m30s after round start + + + if(world.realtime < ticker.event_time) // return if not yet reached the next event + return + + + switch(ticker.event) + if(0) + var/dat = "Cent. Com. Update: Biohazard Alert.
    " + + dat += "Reports indicate the probable transfer of a biohazardous agent onto Spacestation 13 during the last crew deployment cycle.
    " + dat += "Preliminary analysis of the organism classifies it as a level 5 biohazard. Its origin is unknown.
    " + dat += "Cent. Com. has issued a directive 7-10 for SS13. The station is to be considered quarantined.
    " + dat += "Orders for all SS13 personnel follows:
    " + dat += " 1. Do not leave the quarantine area.
    " + dat += " 2. Locate any outbreaks of the organism on the station.
    " + dat += " 3. If found, use any neccesary means to contain the organism.
    " + dat += " 4. Avoid damage to the capital infrastructure of the station.
    " + dat += "
    Note in the event of a quarantine breach or uncontrolled spread of the biohazard, the directive 7-10 may be upgraded to a directive 7-12 without further notice.
    " + dat += "Message ends." + + + for(var/obj/machinery/computer/communications/C in machines) + if(! (C.stat & (BROKEN|NOPOWER) ) ) + var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( C.loc ) + P.name = "paper- 'Cent. Com. Biohazard Alert.'" + P.info = dat + //Foreach goto(1830) + world << "Cent. Com. Update: Biohazard Alert." + world << "\red Summary downloaded and printed out at all communications consoles." + + ticker.event = 1 + + ticker.event_time = world.realtime + 600*rand(5,10) // next event 5-10 minutes later + if(1) + world << "Cent. Com. Update: Biohazard Alert." + world << "\red Confirmed outbreak of level 5 biohazard aboard SS13." + world << "\red All personnel must contain the outbreak." + + ticker.event = 2 + ticker.event_time = world.realtime + 600 // now check every minute + + if(2) + if(blobs.len > 500) + world << "Cent. Com. Update: Biohazard Alert." + world << "\red Uncontrolled spread of the biohazard onboard the station." + world << "\red Cent. Com, has issued a directive 7-12 for Spacestation 13." + world << "\red Estimated time until directive implementation: 60 seconds." + ticker.event = 3 + ticker.event_time = world.realtime + 600 + else + ticker.event_time = world.realtime + 600 + if(3) + ticker.event = 4 + var/turf/T = locate("landmark*blob-directive") + + if(T) + while(!( istype(T, /turf) )) + T = T.loc + else + T = locate(45,45,1) + + var/min = 50 + var/med = 250 + var/max = 500 + var/sw = locate(1, 1, T.z) + var/ne = locate(world.maxx, world.maxy, T.z) + defer_powernet_rebuild = 1 + for(var/turf/U in block(sw, ne)) + var/zone = 4 + if ((U.y <= T.y + max && U.y >= T.y - max && U.x <= T.x + max && U.x >= T.x - max)) + zone = 3 + if ((U.y <= T.y + med && U.y >= T.y - med && U.x <= T.x + med && U.x >= T.x - med)) + zone = 2 + if ((U.y <= T.y + min && U.y >= T.y - min && U.x <= T.x + min && U.x >= T.x - min)) + zone = 1 + for(var/atom/A in U) + A.ex_act(zone) + U.ex_act(zone) + U.buildlinks() + + defer_powernet_rebuild = 0 + makepowernets() + + + +/datum/station_state/proc/count() + for(var/turf/T in world) + if(T.z != 1) + continue + + if(istype(T,/turf/station/floor)) + if(!(T:burnt)) + src.floor+=2 + else + src.floor++ + + else if(istype(T, /turf/station/engine/floor)) + src.floor+=2 + + else if(istype(T, /turf/station/wall)) + if(T:intact) + src.wall+=2 + else + src.wall++ + + else if(istype(T, /turf/station/r_wall)) + if(T:intact) + src.r_wall+=2 + else + src.r_wall++ + + + + for(var/obj/O in world) + if(O.z != 1) + continue + + if(istype(O, /obj/window)) + src.window++ + else if(istype(O, /obj/grille)) + if(!O:destroyed) + src.grille++ + else if(istype(O, /obj/machinery/door)) + src.door++ + else if(istype(O, /obj/machinery)) + src.mach++ + + +/datum/station_state/proc/score(var/datum/station_state/result) + + var/r1a = min( result.floor / floor, 1.0) + var/r1b = min(result.r_wall/ r_wall, 1.0) + var/r1c = min(result.wall / wall, 1.0) + + var/r2a = min(result.window / window, 1.0) + var/r2b = min(result.door / door, 1.0) + var/r2c = min(result.grille / grille, 1.0) + + var/r3 = min(result.mach / mach, 1.0) + + + //world.log << "Blob scores:[r1b] [r1c] / [r2a] [r2b] [r2c] / [r3] [r1a]" + + return (4*(r1b+r1c) + 2*(r2a+r2b+r2c) + r3+r1a)/16.0 + diff --git a/main-src/Code/cell_process.dm b/main-src/Code/cell_process.dm new file mode 100644 index 0000000..d60a87f --- /dev/null +++ b/main-src/Code/cell_process.dm @@ -0,0 +1,1564 @@ + +/obj/move/CheckPass(O as mob|obj) + + return !( src.density ) + + +/obj/move/attack_paw(user as mob) + + return src.attack_hand(user) + + +/obj/move/attack_hand(var/mob/user as mob) + + if ((!( user.canmove ) || user.restrained() || !( user.pulling ))) + return + if (user.pulling.anchored) + return + if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1)) + return + if (ismob(user.pulling)) + var/mob/M = user.pulling + var/mob/t = M.pulling + M.pulling = null + step(user.pulling, get_dir(user.pulling.loc, src)) + M.pulling = t + else + step(user.pulling, get_dir(user.pulling.loc, src)) + return + +/obj/move/proc/res_vars() + + oldoxy = oxygen + tmpoxy = oxygen + + oldpoison = poison + tmppoison = poison + + oldco2 = co2 + tmpco2 = co2 + + osl_gas = sl_gas + tsl_gas = sl_gas + + on2 = src.n2 + tn2 = src.n2 + + otemp = temp + ttemp = temp + + return + +/obj/move/proc/relocate(T as turf, degree) + + if (degree) + for(var/atom/movable/A as mob|obj in src.loc) + A.dir = turn(A.dir, degree) + //*****RM as 4.1beta + A.loc = T + + //Foreach goto(25) + else + for(var/atom/movable/A as mob|obj in src.loc) + A.loc = T + //Foreach goto(73) + return + +/obj/move/proc/unburn() + + src.icon_state = initial(src.icon_state) + return + + +/obj/move/proc/Neighbors() + + var/list/L = cardinal.Copy() + for(var/obj/machinery/door/window/D in src.loc) + if(!( D.density )) + continue + + //++++++ + //L -= D.dir + + if (D.dir & 12) + L -= SOUTH + else + L -= EAST + + + + //Foreach goto(36) + + for(var/obj/window/D in src.loc) + if(!( D.density )) + continue + L -= D.dir + if (D.dir == SOUTHWEST) + L.len = null + return L + + //Foreach goto(115) + return L + +/obj/move/proc/FindTurfs() + + + var/list/L = list( ) + for(var/dir in src.Neighbors()) + var/turf/T = get_step(src.loc, dir) + + + //++++++ + + if(!( T )) + goto Label_299 + L += T + var/direct = turn(dir, 180) + //*****RM as 4.1beta + + for(var/obj/machinery/door/window/D in T) + if(!( D.density )) + goto Label_181 + //var/direct = get_dir(src, T) + if ((D.dir & 12)) + if (dir & 1) // was direct&1 + L -= T + goto Label_181 + else + if(dir & 8) // was direct&8 + L -= T + goto Label_181 + Label_181: + //Foreach goto(81) + + for(var/obj/window/D in T) + if(!( D.density )) + goto Label_294 + //var/direct = get_dir(T, src.loc) + if (D.dir == SOUTHWEST) + L -= T + goto Label_294 + else + if(direct == D.dir) + L -= T + + + Label_294: + //Foreach goto(199) + + //***** + Label_299: + if ((locate(/obj/move, T) && T in L)) + L -= T + var/obj/move/O = locate(/obj/move, T) + if (O.updatecell) + L += O + else + if ((isturf(T) && !( T.updatecell ))) + L -= T + //Foreach goto(26) + + + return L + + +/obj/move/proc/tot_gas() + return co2 + oxygen + poison + sl_gas + n2 + + +/obj/move/proc/process() + + if (locate(/obj/shuttle/door, src.loc)) + var/obj/shuttle/door/D = locate(/obj/shuttle/door, src.loc) + src.updatecell = !( D.density ) + if (!( src.updatecell )) + return + src.checkfire = !( src.checkfire ) + if (src.checkfire) + if (cellcontrol.var_swap) + var/divideby = 1 + var/total = src.oxygen + var/tpoison = src.poison + var/tco2 = src.co2 + var/tosl_gas = src.sl_gas + var/ton2 = src.n2 + var/totemp = src.temp + var/space = 0 + var/burn = src.firelevel >= 10 + for(var/atom/S in src.FindTurfs()) + var/obj/move/T = S + if (istype(T, /turf/space)) + space = 1 + else + divideby++ + total += T.oldoxy + tpoison += T.oldpoison + tco2 += T.oldco2 + tosl_gas += T.osl_gas + ton2 += T.on2 + totemp += T.temp + if (T.firelevel >= 900000.0) + burn = 1 + //Foreach continue //goto(158) + if (space) + src.oxygen = 0 + src.poison = 0 + src.co2 = 0 + src.sl_gas = 0 + src.n2 = 0 + src.temp = 0 + else + src.oxygen = total / divideby + src.poison = tpoison / divideby + src.co2 = tco2 / divideby + src.sl_gas = tosl_gas / divideby + src.n2 = ton2 / divideby + src.temp = totemp / divideby + if (src.sl_gas > 0) + src.sl_gas-- + if (src.poison > 100000.0) + src.overlays = list( plmaster ) + else + if (src.sl_gas > 101000.0) + src.overlays = list( slmaster ) + else + src.overlays = null + if (burn) + src.firelevel = src.oxygen + src.poison + if (src.firelevel >= 900000.0) + src.icon_state = "burning" + if (src.oxygen > 5000) + src.co2 += 2500 + src.oxygen -= 5000 + else + src.oxygen = 0 + + // heating from fire + temp += (firelevel/FIREQUOT+FIREOFFSET - temp) / FIRERATE + + src.poison = max(0, src.poison - 1000) + if (locate(/obj/effects/water, src)) + src.firelevel = 0 + for(var/atom/movable/A in src) + A.burn(src.firelevel) + //Foreach goto(561) + else + src.firelevel = 0 + if (src.icon_state == "burning") + unburn() + src.tmpoxy = src.oxygen + src.tmppoison = src.poison + src.tmpco2 = src.co2 + src.tsl_gas = src.sl_gas + src.tn2 = src.n2 + src.ttemp = src.temp + else + var/divideby = 1 + var/total = src.oxygen + var/tpoison = src.poison + var/tco2 = src.co2 + var/tosl_gas = src.sl_gas + var/ton2 = src.n2 + var/totemp = src.temp + var/space = 0 + var/burn = src.firelevel >= 10 + for(var/atom/S in src.FindTurfs()) + var/obj/move/T = S + if (istype(T, /turf/space)) + space = 1 + else + divideby++ + total += T.tmpoxy + tpoison += T.tmppoison + tco2 += T.tmpco2 + tosl_gas += T.tsl_gas + ton2 += T.tn2 + totemp += T.ttemp + if (T.firelevel >= 900000.0) + burn = 1 + //Foreach continue //goto(744) + if (space) + src.oxygen = 0 + src.poison = 0 + src.co2 = 0 + src.sl_gas = 0 + src.n2 = 0 + src.temp = 0 + else + src.oxygen = total / divideby + src.poison = tpoison / divideby + src.co2 = tco2 / divideby + src.sl_gas = tosl_gas / divideby + src.n2 = ton2 / divideby + src.temp = totemp / divideby + if (src.sl_gas > 0) + src.sl_gas-- + if (src.poison > 100000.0) + src.overlays = list( plmaster ) + else + if (src.sl_gas > 101000.0) + src.overlays = list( slmaster ) + else + src.overlays = null + if (burn) + src.firelevel = src.oxygen + src.poison + if (src.firelevel >= 900000.0) + src.icon_state = "burning" + if (src.oxygen > 5000) + src.co2 += 2500 + src.oxygen -= 5000 + else + src.oxygen = 0 + + // heating from fire + temp += (firelevel/FIREQUOT+FIREOFFSET - temp) / FIRERATE + + + src.poison = max(0, src.poison - 1000) + src.co2 += 2500 + if (locate(/obj/effects/water, src)) + src.firelevel = 0 + for(var/atom/movable/A as mob|obj in src) + A.burn(src.firelevel) + //Foreach goto(1153) + else + if (src.icon_state == "burning") + src.firelevel = 0 + unburn() + src.oldoxy = src.oxygen + src.oldpoison = src.poison + src.oldco2 = src.co2 + src.osl_gas = src.sl_gas + src.on2 = src.n2 + src.otemp = src.temp + else + if (cellcontrol.var_swap) + var/divideby = 1 + var/total = src.oxygen + var/tpoison = src.poison + var/tco2 = src.co2 + var/tosl_gas = src.sl_gas + var/ton2 = src.n2 + var/totemp = src.temp + var/space = 0 + src.airdir = null + src.airforce = 0 + var/adiff = null + for(var/atom/S in src.FindTurfs()) + var/obj/move/T = S + if (istype(T, /turf/space)) + space = 1 + src.airforce = src.oxygen + src.n2 + src.poison + src.co2 + 25000 + src.airdir = get_dir(src, T) + else + divideby++ + total += T.oldoxy + tpoison += T.oldpoison + tco2 += T.oldco2 + tosl_gas += T.osl_gas + ton2 += T.on2 + totemp += T.otemp + adiff = src.oldoxy + src.oldco2 + src.on2 - (T.oldoxy + T.oldco2 + T.on2) + if (adiff > src.airforce) + src.airforce = adiff + src.airdir = get_dir(src, T) + //Foreach continue //goto(1356) + if (src.airforce > 25000) + for(var/atom/movable/AM as mob|obj in src.loc) + if ((!( AM.anchored ) && AM.weight <= src.airforce)) + spawn( 0 ) + step(AM, src.airdir) + return + //Foreach goto(1559) + if (space) + src.oxygen = 0 + src.poison = 0 + src.co2 = 0 + src.sl_gas = 0 + src.n2 = 0 + src.temp = 0 + else + src.oxygen = total / divideby + src.poison = tpoison / divideby + src.co2 = tco2 / divideby + src.sl_gas = tosl_gas / divideby + src.n2 = ton2 / divideby + src.temp = totemp / divideby + if (src.sl_gas > 0) + src.sl_gas-- + if (src.co2 >= src.poison) + src.co2 -= src.poison + src.oxygen += src.poison + src.poison = 0 + else + src.poison -= src.co2 + src.oxygen += src.co2 + src.co2 = 0 + src.tmpoxy = src.oxygen + src.tmppoison = src.poison + src.tmpco2 = src.co2 + src.tsl_gas = src.sl_gas + src.tn2 = src.n2 + src.ttemp = src.temp + else + var/divideby = 1 + var/total = src.oxygen + var/tpoison = src.poison + var/tco2 = src.co2 + var/tosl_gas = src.sl_gas + var/ton2 = src.n2 + var/totemp = src.temp + var/space = 0 + src.airdir = null + src.airforce = 0 + var/adiff = null + for(var/atom/S in src.FindTurfs()) + var/obj/move/T = S + if (istype(T, /turf/space)) + space = 1 + src.airforce = src.oxygen + src.poison + src.n2 + src.co2 + 25000 + src.airdir = get_dir(src, T) + else + divideby++ + total += T.tmpoxy + tpoison += T.tmppoison + tco2 += T.tmpco2 + tosl_gas += T.tsl_gas + ton2 += T.tn2 + totemp += T.ttemp + adiff = src.tmpoxy + src.tmpco2 + src.tn2 - (T.tmpoxy + T.tmpco2 + T.tn2) + if (adiff > src.airforce) + src.airforce = adiff + src.airdir = get_dir(src, T) + //Foreach continue //goto(1927) + if (src.airforce > 25000) + for(var/atom/movable/AM as mob|obj in src.loc) + if ((!( AM.anchored ) && AM.weight <= src.airforce)) + spawn( 0 ) + step(AM, src.airdir) + return + //Foreach goto(2130) + if (space) + src.oxygen = 0 + src.poison = 0 + src.co2 = 0 + src.sl_gas = 0 + src.n2 = 0 + src.temp = 0 + else + src.oxygen = total / divideby + src.poison = tpoison / divideby + src.co2 = tco2 / divideby + src.sl_gas = tosl_gas / divideby + src.n2 = ton2 / divideby + src.temp = totemp / divideby + if (src.sl_gas > 0) + src.sl_gas-- + if (src.co2 >= src.poison) + src.co2 -= src.poison + src.oxygen += src.poison + src.poison = 0 + else + src.poison -= src.co2 + src.oxygen += src.co2 + src.co2 = 0 + src.oldoxy = src.oxygen + src.oldpoison = src.poison + src.oldco2 = src.co2 + src.osl_gas = src.sl_gas + src.on2 = src.n2 + src.otemp = src.temp + if ((locate(/obj/effects/water, src.loc) || src.firelevel < 900000.0)) + src.firelevel = 0 + //cool due to water + temp += (T20C - temp) / FIRERATE + + + + return + +/obj/move/wall/New() + + var/F = locate(/obj/move/floor, src.loc) + if (F) + //F = null + del(F) + return + +/obj/move/wall/process() + + src.updatecell = 0 + return + +/obj/move/wall/blob_act() + del(src) + return + +/obj/move/New() + + if ( (src.x & 1) == (src.y & 1) ) + src.checkfire = 0 + src.tmpoxy = src.oxygen + src.oldoxy = src.oxygen + src.tmppoison = src.poison + src.oldpoison = src.poison + src.tmpco2 = src.co2 + src.oldco2 = src.co2 + src.tn2 = src.n2 + src.on2 = src.n2 + + otemp = temp + ttemp = temp + ..() + return + +/turf/proc/res_vars() + + src.oldoxy = src.oxygen + src.tmpoxy = src.oxygen + src.oldpoison = src.poison + src.tmppoison = src.poison + src.oldco2 = src.co2 + src.tmpco2 = src.co2 + src.osl_gas = src.sl_gas + src.tsl_gas = src.sl_gas + src.on2 = src.n2 + src.tn2 = src.n2 + otemp = temp + ttemp = temp + return + +/turf/proc/unburn() + + src.icon_state = initial(src.icon_state) + return + + +//***** + + +// returns 0 if turf is dense or contains a dense object +// returns 1 otherwise +/turf/proc/isempty() + if(src.density) + return 0 + for(var/atom/A in src) + if(A.density) + return 0 + return 1 + + +/turf/proc/Neighbors() + + var/list/L = cardinal.Copy() + for(var/obj/machinery/door/window/D in src) + if(!( D.density )) + goto Label_96 //continue + //+++++ + //L -= D.dir + + if (D.dir & 12) + L -= SOUTH + else + L -= EAST + + Label_96 + //Foreach goto(34) + for(var/obj/window/D in src) + if(!( D.density )) + goto Label_178 //continue + L -= D.dir + if (D.dir == SOUTHWEST) + L.len = null + return L + Label_178 + //Foreach goto(111) + return L + + +/* +/proc/flipdir(dir) + + switch(dir) + if(1) + return 2 + if(2) + return 1 + if(4) + return 8 + if(8) + return 4 + if(5) + return 10 + if(6) + return 9 + if(9) + return 10 + if(10) + return 9 + else + return 0 + +*/ + + +/turf/proc/FindTurfs() + + var/list/L = list( ) + if (locate(/obj/move, src)) + return list( ) + for(var/dir in src.Neighbors()) + var/turf/T = get_step(src, dir) + //*****RM + + // + if((!( T ) || !( T.updatecell ))) + goto Label_317 + + L += T + var/direct = turn(dir, 180) + //*****RM as 4.1beta + + for(var/obj/machinery/door/window/D in T) + if(!( D.density )) + goto Label_201 + //var/direct = get_dir(src, T) + if (D.dir & 12) + if((dir & 1)) // was (direct & 1) + L -= T + goto Label_201 + else + if(dir & 8) //was (direct&8) + L -= T + + Label_201: + //Foreach goto(101) + + for(var/obj/window/D in T) + if(!( D.density )) + goto Label_312 + //var/direct = get_dir(T, src) + if (D.dir == SOUTHWEST) + L -= T + goto Label_312 + else + if(direct == D.dir) + L -= T + + Label_312: + + //Foreach goto(219) + + //***** + + Label_317: + //Foreach goto(40) + + for(var/turf/T in L) + if (locate(/obj/move, T)) + L -= T + var/obj/move/O = locate(/obj/move, T) + if (O.updatecell) + L += O + //Foreach goto(333) + return L + +/turf/New() + + if ((src.x & 1) == (src.y & 1)) + src.checkfire = 0 + src.tmpoxy = src.oxygen + src.oldoxy = src.oxygen + src.tmppoison = src.poison + src.oldpoison = src.poison + src.tmpco2 = src.co2 + src.oldco2 = src.co2 + src.osl_gas = src.sl_gas + src.tsl_gas = src.sl_gas + src.on2 = src.n2 + src.tn2 = src.n2 + + otemp = temp + ttemp = temp + + ..() + return + + +/turf/proc/setlink(dir, var/turf/T) + + switch(dir) + if(1) + linkN = T + if(2) + linkS = T + if(4) + linkE = T + if(8) + linkW = T + +/turf/proc/setairlink(dir, val) + + switch(dir) + if(1) + airN = val + if(2) + airS = val + if(4) + airE = val + if(8) + airW = val + +/turf/proc/setcondlink(dir, val) + + switch(dir) + if(1) + condN += val + if(2) + condS += val + if(4) + condE += val + if(8) + condW += val + +/turf/buildlinks() // call this one to update a cell and neighbours (on cell state change) + + updatelinks() + + for(var/dir in cardinal) + var/turf/T = get_step(src,dir) + if(T) + T.updatelinks() + +/turf/proc/updatelinks() // this does updating for a single cell + + airN = null + airS = null + airE = null + airW = null + + condN = 0 + condS = 0 + condE = 0 + condW = 0 + + // originally in turf/Neighbors() + + var/list/NL = cardinal.Copy() + + for(var/obj/machinery/door/window/D in src) + if(!( D.density )) + continue + + if (D.dir & 12) + NL -= SOUTH + condS = 1 + else + NL -= EAST + condE = 1 + + + for(var/obj/window/D in src) + if(!( D.density )) + continue + NL -= D.dir + setcondlink(D.dir, 1+D.reinf) + + if (D.dir == SOUTHWEST) + NL.len = null + break + + + + for(var/dir in cardinal) + var/turf/T = get_step(src, dir) + setlink(dir,T) + + + var/obj/move/O = locate(/obj/move, T) + if (O) + setlink(dir, O) + if (!O.updatecell) + goto Label_317 + + + if((!( T ) || !( T.updatecell )) || !(dir in NL)) + goto Label_317 + + //L += T + setairlink(dir, 1) + + var/direct = turn(dir, 180) + + for(var/obj/machinery/door/window/D in T) + if(!( D.density )) + goto Label_201 + + if (D.dir & 12) + if((dir & 1)) + //L -= T + setairlink(dir, null) + setcondlink(dir, 1) + goto Label_201 + else + if(dir & 8) //was (direct&8) + setairlink(dir, null) + setcondlink(dir, 1) + Label_201: + //Foreach goto(101) + + for(var/obj/window/D in T) + if(!( D.density )) + goto Label_312 + //var/direct = get_dir(T, src) + if (D.dir == SOUTHWEST) + //L -= T + setairlink(dir, null) + setcondlink(dir, 1+D.reinf) + goto Label_312 + else + if(direct == D.dir) + //L -= T + setairlink(dir, null) + setcondlink(dir,1+D.reinf) + + Label_312: + + //Foreach goto(219) + + //***** + + Label_317: + //Foreach goto(40) + + + + +/turf/proc/FindLinkedTurfs() + + + //if (locate(/obj/move, src)) + // return list( ) + + var/list/L = list( ) + if(airN) + L += linkN + if(airS) + L += linkS + if(airE) + L += linkE + if(airW) + L += linkW + +/* + for(var/turf/T in L) + var/obj/move/O = locate(/obj/move, T) + if (O) + L -= T + if (O.updatecell) + L += O + //Foreach goto(333) +*/ + return L + + +/turf/proc/report() + return "[src.type] [x] [y] [z]" + + +// return the total gas contents of a turf + +/turf/proc/tot_gas() + return co2 + oxygen + poison + sl_gas + n2 + +turf/proc/tot_old_gas() + return oldco2 + oldoxy + oldpoison + osl_gas + on2 + +/turf/proc/tot_tmp_gas() + return tmpco2 + tmpoxy + tmppoison + tsl_gas + tn2 + + +// return the gas contents of a turf as a gas obj + +/turf/proc/get_gas() + + var/obj/substance/gas/tgas = new() + + tgas.oxygen = src.oxygen + tgas.n2 = src.n2 + tgas.plasma = src.poison + tgas.co2 = src.co2 + tgas.sl_gas = src.sl_gas + tgas.temperature = src.temp + tgas.maximum = CELLSTANDARD // not actually a maximum + + return tgas + + + + +/turf/updatecell() + + + /*var/list/FT = FindTurfs() + var/list/FLT = FindLinkedTurfs() + if(FT.len != FLT.len) + world << "TLM: [src.report()] FT:[FT.len] != FLT:[FLT.len]" + for(var/turf/T1 in FT) + world << "FT: [T1.report()]" + for(var/turf/T2 in FLT) + world << "FLT: [T2.report()]" +*/ + + //if(tag && Debug) + // world.log << "T[tag]=[tot_gas()] Old=[tot_old_gas()] Tmp=[tot_tmp_gas()]" + + + src.checkfire = !( src.checkfire ) + if (src.checkfire) + if (cellcontrol.var_swap) + var/divideby = 1 + var/total = src.oxygen + var/tpoison = src.poison + var/tco2 = src.co2 + var/tosl_gas = src.sl_gas + var/ton2 = src.n2 + var/totemp = src.temp + var/space = 0 + var/burn = src.firelevel >= 10 + + + + /* + for(var/turf/T in src.FindLinkedTurfs()) + if (istype(T, /turf/space)) + space = 1 + break // *****RM + else + divideby++ + total += T.oldoxy + tpoison += T.oldpoison + tco2 += T.oldco2 + tosl_gas += T.osl_gas + ton2 += T.on2 + totemp += T.otemp + if (T.firelevel >= 900000.0) + burn = 1 + //Foreach continue //goto(113) + */ + + + if(airN) + if(istype(linkN, /turf/space)) + space = 1 + goto Enddir1 + else + divideby++ + total += linkN.oldoxy + tpoison += linkN.oldpoison + tco2 += linkN.oldco2 + tosl_gas+= linkN.osl_gas + ton2 += linkN.on2 + totemp += linkN.otemp + if (linkN.firelevel >= 900000.0) + burn = 1 + if(airS) + if(istype(linkS, /turf/space)) + space = 1 + goto Enddir1 + else + divideby++ + total += linkS.oldoxy + tpoison += linkS.oldpoison + tco2 += linkS.oldco2 + tosl_gas+= linkS.osl_gas + ton2 += linkS.on2 + totemp += linkS.otemp + if (linkS.firelevel >= 900000.0) + burn = 1 + if(airE) + if(istype(linkE, /turf/space)) + space = 1 + goto Enddir1 + else + divideby++ + total += linkE.oldoxy + tpoison += linkE.oldpoison + tco2 += linkE.oldco2 + tosl_gas+= linkE.osl_gas + ton2 += linkE.on2 + totemp += linkE.otemp + if (linkE.firelevel >= 900000.0) + burn = 1 + if(airW) + if(istype(linkW, /turf/space)) + space = 1 + goto Enddir1 + else + divideby++ + total += linkW.oldoxy + tpoison += linkW.oldpoison + tco2 += linkW.oldco2 + tosl_gas+= linkW.osl_gas + ton2 += linkW.on2 + totemp += linkW.otemp + if (linkW.firelevel >= 900000.0) + burn = 1 + + Enddir1: + + if (space) + src.oxygen = 0 + src.poison = 0 + src.co2 = 0 + src.sl_gas = 0 + src.n2 = 0 + src.temp = 0 + else + src.oxygen = total / divideby + src.poison = tpoison / divideby + src.co2 = tco2 / divideby + src.sl_gas = tosl_gas / divideby + src.n2 = ton2 / divideby + src.temp = totemp / divideby + if (src.sl_gas > 0) + src.sl_gas-- + if (src.poison > 100000.0) + src.overlays = list( plmaster ) + else + if (src.sl_gas > 101000.0) + src.overlays = list( slmaster ) + else + src.overlays = null + if (burn) + src.firelevel = src.oxygen + src.poison + if (src.firelevel >= 900000.0) + src.icon_state = "burning" + if (src.oxygen > 5000) + src.co2 += 2500 + src.oxygen -= 5000 + else + src.oxygen = 0 + + // heating from fire + temp += (firelevel/FIREQUOT+FIREOFFSET - temp) / FIRERATE + + + src.poison = max(0, src.poison - 1000) + src.co2 += 2500 + if (locate(/obj/effects/water, src)) + src.firelevel = 0 + for(var/atom/movable/A in src) + A.burn(src.firelevel) + //Foreach goto(522) + else + src.firelevel = 0 + if (src.icon_state == "burning") + unburn() + src.tmpoxy = src.oxygen + src.tmppoison = src.poison + src.tmpco2 = src.co2 + src.tsl_gas = src.sl_gas + src.tn2 = src.n2 + src.ttemp = src.temp + //if(tag && Debug) + // world.log << "Tot[tag]=[total+tpoison+tco2+tosl_gas+ton2] / [divideby]" + // world.log << "T[tag]=[tot_gas()] .Tmp=[tot_tmp_gas()]" + + else + var/divideby = 1 + var/total = src.oxygen + var/tpoison = src.poison + var/tco2 = src.co2 + var/tosl_gas = src.sl_gas + var/ton2 = src.n2 + var/totemp = src.temp + var/space = 0 + var/burn = src.firelevel >= 10 + + /* + for(var/turf/T in src.FindLinkedTurfs()) + if (istype(T, /turf/space)) + space = 1 + break // *****RM + else + divideby++ + total += T.tmpoxy + tpoison += T.tmppoison + tco2 += T.tmpco2 + tosl_gas += T.tsl_gas + ton2 += T.tn2 + totemp += T.ttemp + if (T.firelevel >= 900000.0) + burn = 1 + //Foreach continue //goto(705) + */ + + if(airN) + if(istype(linkN, /turf/space)) + space = 1 + goto Enddir2 + else + divideby++ + total += linkN.tmpoxy + tpoison += linkN.tmppoison + tco2 += linkN.tmpco2 + tosl_gas+= linkN.tsl_gas + ton2 += linkN.tn2 + totemp += linkN.ttemp + if (linkN.firelevel >= 900000.0) + burn = 1 + if(airS) + if(istype(linkS, /turf/space)) + space = 1 + goto Enddir2 + else + divideby++ + total += linkS.tmpoxy + tpoison += linkS.tmppoison + tco2 += linkS.tmpco2 + tosl_gas+= linkS.tsl_gas + ton2 += linkS.tn2 + totemp += linkS.ttemp + if (linkS.firelevel >= 900000.0) + burn = 1 + if(airE) + if(istype(linkE, /turf/space)) + space = 1 + goto Enddir2 + else + divideby++ + total += linkE.tmpoxy + tpoison += linkE.tmppoison + tco2 += linkE.tmpco2 + tosl_gas+= linkE.tsl_gas + ton2 += linkE.tn2 + totemp += linkE.ttemp + if (linkE.firelevel >= 900000.0) + burn = 1 + if(airW) + if(istype(linkW, /turf/space)) + space = 1 + goto Enddir2 + else + divideby++ + total += linkW.tmpoxy + tpoison += linkW.tmppoison + tco2 += linkW.tmpco2 + tosl_gas+= linkW.tsl_gas + ton2 += linkW.tn2 + totemp += linkW.ttemp + if (linkW.firelevel >= 900000.0) + burn = 1 + + Enddir2: + + + if (space) + src.oxygen = 0 + src.poison = 0 + src.co2 = 0 + src.sl_gas = 0 + src.n2 = 0 + src.temp = 0 + else + src.oxygen = total / divideby + src.poison = tpoison / divideby + src.co2 = tco2 / divideby + src.sl_gas = tosl_gas / divideby + src.n2 = ton2 / divideby + src.temp = totemp / divideby + if (src.sl_gas > 0) + src.sl_gas-- + if (src.poison > 100000.0) + src.overlays = list( plmaster ) + else + if (src.sl_gas > 101000.0) + src.overlays = list( slmaster ) + else + src.overlays = null + if (burn) + src.firelevel = src.oxygen + src.poison + if (src.firelevel >= 900000.0) + src.icon_state = "burning" + if (src.oxygen > 5000) + src.co2 += 2500 + src.oxygen -= 5000 + else + src.oxygen = 0 + + // heating from fire + temp += (firelevel/FIREQUOT+FIREOFFSET - temp) / FIRERATE + + + + src.poison = max(0, src.poison - 1000) + src.co2 += 2500 + if (locate(/obj/effects/water, src)) + src.firelevel = 0 + for(var/atom/movable/A as mob|obj in src) + A.burn(src.firelevel) + //Foreach goto(1114) + else + if (src.icon_state == "burning") + src.firelevel = 0 + unburn() + src.oldoxy = src.oxygen + src.oldpoison = src.poison + src.oldco2 = src.co2 + src.osl_gas = src.sl_gas + src.on2 = src.n2 + src.otemp = src.temp + //if(tag && Debug) + // world.log << "Tot[tag]=[total+tpoison+tco2+tosl_gas+ton2] / [divideby]" + // world.log << "T[tag]=[tot_gas()] .Old=[tot_old_gas()]" + + else + if (cellcontrol.var_swap) + var/divideby = 1 + var/total = src.oxygen + var/tpoison = src.poison + var/tco2 = src.co2 + var/tosl_gas = src.sl_gas + var/ton2 = src.n2 + var/totemp = src.temp + var/space = 0 + src.airdir = null + src.airforce = 0 + var/adiff = null + /* + for(var/turf/T in src.FindLinkedTurfs()) + if (istype(T, /turf/space)) + space = 1 + src.airforce = src.oxygen + src.poison + src.n2 + src.co2 + 25000 + src.airdir = get_dir(src, T) + break // *****RM + else + divideby++ + total += T.oldoxy + tpoison += T.oldpoison + tco2 += T.oldco2 + tosl_gas += T.osl_gas + ton2 += T.on2 + totemp += T.otemp + adiff = src.oldoxy + src.oldco2 + src.on2 - (T.oldoxy + T.oldco2 + T.on2) + if (adiff > src.airforce) + src.airforce = adiff + src.airdir = get_dir(src, T) + //Foreach continue //goto(1317) + + */ + if(airN) + if(istype(linkN, /turf/space)) + space = 1 + src.airforce = src.oxygen + src.poison + src.n2 + src.co2 + 25000 + src.airdir = NORTH + goto Enddir3 + else + divideby++ + total += linkN.oldoxy + tpoison += linkN.oldpoison + tco2 += linkN.oldco2 + tosl_gas+= linkN.osl_gas + ton2 += linkN.on2 + totemp += linkN.otemp + adiff = src.oldoxy + src.oldco2 + src.on2 - (linkN.oldoxy + linkN.oldco2 + linkN.on2) + if (adiff > src.airforce) + src.airforce = adiff + src.airdir = NORTH + if(airS) + if(istype(linkS, /turf/space)) + space = 1 + src.airforce = src.oxygen + src.poison + src.n2 + src.co2 + 25000 + src.airdir = get_dir(src, SOUTH) + goto Enddir3 + else + divideby++ + total += linkS.oldoxy + tpoison += linkS.oldpoison + tco2 += linkS.oldco2 + tosl_gas+= linkS.osl_gas + ton2 += linkS.on2 + totemp += linkS.otemp + adiff = src.oldoxy + src.oldco2 + src.on2 - (linkS.oldoxy + linkS.oldco2 + linkS.on2) + if (adiff > src.airforce) + src.airforce = adiff + src.airdir = SOUTH + if(airE) + if(istype(linkE, /turf/space)) + space = 1 + src.airforce = src.oxygen + src.poison + src.n2 + src.co2 + 25000 + src.airdir = EAST + goto Enddir3 + else + divideby++ + total += linkE.oldoxy + tpoison += linkE.oldpoison + tco2 += linkE.oldco2 + tosl_gas+= linkE.osl_gas + ton2 += linkE.on2 + totemp += linkE.otemp + adiff = src.oldoxy + src.oldco2 + src.on2 - (linkE.oldoxy + linkE.oldco2 + linkE.on2) + if (adiff > src.airforce) + src.airforce = adiff + src.airdir = EAST + if(airW) + if(istype(linkW, /turf/space)) + space = 1 + src.airforce = src.oxygen + src.poison + src.n2 + src.co2 + 25000 + src.airdir = get_dir(src, WEST) + goto Enddir3 + else + divideby++ + total += linkW.oldoxy + tpoison += linkW.oldpoison + tco2 += linkW.oldco2 + tosl_gas+= linkW.osl_gas + ton2 += linkW.on2 + totemp += linkW.otemp + adiff = src.oldoxy + src.oldco2 + src.on2 - (linkW.oldoxy + linkW.oldco2 + linkW.on2) + if (adiff > src.airforce) + src.airforce = adiff + src.airdir = WEST + + Enddir3: + + if (src.airforce > 25000) + for(var/atom/movable/AM in src) + if ((!( AM.anchored ) && AM.weight <= src.airforce)) + spawn( 0 ) + step(AM, src.airdir) + return + //Foreach goto(1518) + + if (space) + src.oxygen = 0 + src.poison = 0 + src.co2 = 0 + src.sl_gas = 0 + src.n2 = 0 + src.temp = 0 + else + src.oxygen = total / divideby + src.poison = tpoison / divideby + src.co2 = tco2 / divideby + src.sl_gas = tosl_gas / divideby + src.n2 = ton2 / divideby + src.temp = totemp / divideby + + + + if (src.co2 >= src.poison) + src.co2 -= src.poison + src.oxygen += src.poison + src.poison = 0 + else + src.poison -= src.co2 + src.oxygen += src.co2 + src.co2 = 0 + src.tmpoxy = src.oxygen + src.tmppoison = src.poison + src.tmpco2 = src.co2 + src.tsl_gas = src.sl_gas + src.tn2 = src.n2 + src.ttemp = src.temp + //if(tag && Debug) + // world.log << "Tot[tag]=[total+tpoison+tco2+tosl_gas+ton2] / [divideby]" + // world.log << "T[tag]=[tot_gas()] .Tmp=[tot_tmp_gas()]" + else + var/divideby = 1 + var/total = src.oxygen + var/tpoison = src.poison + var/tco2 = src.co2 + var/tosl_gas = src.sl_gas + var/ton2 = src.n2 + var/totemp = src.temp + var/space = 0 + src.airdir = null + src.airforce = 0 + var/adiff = null + /*for(var/turf/T in src.FindLinkedTurfs()) + if (istype(T, /turf/space)) + space = 1 + src.airforce = src.oxygen + src.poison + src.n2 + src.co2 + 25000 + src.airdir = get_dir(src, T) + break // *****RM + else + divideby++ + total += T.tmpoxy + tpoison += T.tmppoison + tco2 += T.tmpco2 + tosl_gas += T.tsl_gas + ton2 += T.tn2 + totemp += T.ttemp + adiff = src.tmpoxy + src.tmpco2 + src.tn2 - (T.tmpoxy + T.tmpco2 + T.tn2) + if (adiff > src.airforce) + src.airforce = adiff + src.airdir = get_dir(src, T) + //Foreach continue //goto(1872) + + */ + + if(airN) + if(istype(linkN, /turf/space)) + space = 1 + src.airforce = src.oxygen + src.poison + src.n2 + src.co2 + 25000 + src.airdir = NORTH + goto Enddir4 + else + divideby++ + total += linkN.tmpoxy + tpoison += linkN.tmppoison + tco2 += linkN.tmpco2 + tosl_gas+= linkN.tsl_gas + ton2 += linkN.tn2 + totemp += linkN.ttemp + adiff = src.tmpoxy + src.tmpco2 + src.tn2 - (linkN.tmpoxy + linkN.tmpco2 + linkN.tn2) + if (adiff > src.airforce) + src.airforce = adiff + src.airdir = NORTH + if(airS) + if(istype(linkS, /turf/space)) + space = 1 + src.airforce = src.oxygen + src.poison + src.n2 + src.co2 + 25000 + src.airdir = get_dir(src, SOUTH) + goto Enddir4 + else + divideby++ + total += linkS.tmpoxy + tpoison += linkS.tmppoison + tco2 += linkS.tmpco2 + tosl_gas+= linkS.tsl_gas + ton2 += linkS.tn2 + totemp += linkS.ttemp + adiff = src.tmpoxy + src.tmpco2 + src.tn2 - (linkS.tmpoxy + linkS.tmpco2 + linkS.tn2) + if (adiff > src.airforce) + src.airforce = adiff + src.airdir = SOUTH + if(airE) + if(istype(linkE, /turf/space)) + space = 1 + src.airforce = src.oxygen + src.poison + src.n2 + src.co2 + 25000 + src.airdir = EAST + goto Enddir4 + else + divideby++ + total += linkE.tmpoxy + tpoison += linkE.tmppoison + tco2 += linkE.tmpco2 + tosl_gas+= linkE.tsl_gas + ton2 += linkE.tn2 + totemp += linkE.ttemp + adiff = src.tmpoxy + src.tmpco2 + src.tn2 - (linkE.tmpoxy + linkE.tmpco2 + linkE.tn2) + if (adiff > src.airforce) + src.airforce = adiff + src.airdir = EAST + if(airW) + if(istype(linkW, /turf/space)) + space = 1 + src.airforce = src.oxygen + src.poison + src.n2 + src.co2 + 25000 + src.airdir = get_dir(src, WEST) + goto Enddir4 + else + divideby++ + total += linkW.tmpoxy + tpoison += linkW.tmppoison + tco2 += linkW.tmpco2 + tosl_gas+= linkW.tsl_gas + ton2 += linkW.tn2 + totemp += linkW.ttemp + adiff = src.tmpoxy + src.tmpco2 + src.tn2 - (linkW.tmpoxy + linkW.tmpco2 + linkW.tn2) + if (adiff > src.airforce) + src.airforce = adiff + src.airdir = WEST + + + Enddir4: + + if (src.airforce > 25000) + for(var/atom/movable/AM as mob|obj in src) + if ((!( AM.anchored ) && AM.weight <= src.airforce)) + spawn( 0 ) + step(AM, src.airdir) + return + //Foreach goto(2073) + if (space) + src.oxygen = 0 + src.poison = 0 + src.co2 = 0 + src.sl_gas = 0 + src.n2 = 0 + src.temp = 0 + else + src.oxygen = total / divideby + src.poison = tpoison / divideby + src.co2 = tco2 / divideby + src.sl_gas = tosl_gas / divideby + src.n2 = ton2 / divideby + src.temp = totemp / divideby + if (src.sl_gas > 0) + src.sl_gas-- + if (src.co2 >= src.poison) + src.co2 -= src.poison + src.oxygen += src.poison + src.poison = 0 + else + src.poison -= src.co2 + src.oxygen += src.co2 + src.co2 = 0 + + src.oldoxy = src.oxygen + src.oldpoison = src.poison + src.oldco2 = src.co2 + src.osl_gas = src.sl_gas + src.on2 = src.n2 + src.otemp = src.temp + + //if(tag && Debug) + // world.log << "Tot[tag]=[total+tpoison+tco2+tosl_gas+ton2] / [divideby]" + // world.log << "T[tag]=[tot_gas()] .Old=[tot_old_gas()]" + + if ((locate(/obj/effects/water, src) || src.firelevel < 900000.0)) + src.firelevel = 0 + //cool due to water + temp += (T20C - temp) / FIRERATE + + return + +/turf/conduction() + + var/difftemp = 0 + for(var/turf/T in FindCondTurfs()) + var/cond = getCond(get_dir(src, T)) + difftemp += (T.otemp-src.temp)/(10*cond) + + temp += difftemp + + +/turf/proc/FindCondTurfs() + + var/list/L = list( ) + if(condN) + L += linkN + if(condS) + L += linkS + if(condE) + L += linkE + if(condW) + L += linkW + + + return L + +/turf/proc/getCond(dir) + switch(dir) + if(1) + return condN + if(2) + return condS + if(4) + return condE + if(8) + return condW + return 0 + diff --git a/main-src/Code/cellautomata.dm b/main-src/Code/cellautomata.dm new file mode 100644 index 0000000..0248341 --- /dev/null +++ b/main-src/Code/cellautomata.dm @@ -0,0 +1,2268 @@ + +/obj/team/proc/process() + + if (src.base) + var/obj/starting = locate(text("landmark*CTF-base-[]", src.base)) + while(locate(text("landmark*CTF-supply-[]", src.base))) + var/obj/L = locate(text("landmark*CTF-supply-[]", src.base)) + var/obj/item/weapon/card/id/I = new /obj/item/weapon/card/id( L.loc ) + I.access_level = 5 + I.lab_access = 5 + I.engine_access = 5 + I.air_access = 5 + I.assignment = "Captain" + I.registered = text("[]", uppertext((src.color ? src.color : "rogue"))) + I.name = text("[]'s ID Card ([]>[]-[]-[])", I.registered, I.access_level, I.lab_access, I.engine_access, I.air_access) + var/obj/item/weapon/paper/flag/F = new /obj/item/weapon/paper/flag( L.loc ) + if (src.color) + F.icon_state = text("flag_[]", src.color) + F.name = text("flag- '[] Team's Flag'", uppertext(src.color)) + else + F.name = "flag- 'NEUTRAL Team's Flag'" + F.icon_state = "flag_neutral" + F.info = text("This is an authentic [] flag!\nCapture the Flag", (src.color ? src.color : "neutral")) + if (src.master.paint_cans) + var/obj/item/weapon/paint/P = new /obj/item/weapon/paint( L.loc ) + if (src.color) + P.color = src.color + P.icon_state = text("paint_[]", src.color) + else + P.color = "neutral" + P.icon_state = text("paint_[]", src.color) + //L = null + del(L) + while(locate(text("landmark*CTF-wardrobe-[]", src.base))) + var/obj/L = locate(text("landmark*CTF-wardrobe-[]", src.base)) + switch(src.color) + if("blue") + new /obj/closet/wardrobe( L.loc ) + if("green") + new /obj/closet/wardrobe/green( L.loc ) + if("yellow") + new /obj/closet/wardrobe/yellow( L.loc ) + if("black") + new /obj/closet/wardrobe/black( L.loc ) + if("white") + new /obj/closet/wardrobe/white( L.loc ) + if("red") + new /obj/closet/wardrobe/red( L.loc ) + else + //L = null + del(L) + if (starting) + for(var/mob/human/H in src.members) + H.loc = starting.loc + if ((src.master.autodress && src.color)) + H.w_uniform = null + del(H.w_uniform) + H.shoes = null + del(H.shoes) + switch(src.color) + if("blue") + H.w_uniform = new /obj/item/weapon/clothing/under/blue( H ) + H.shoes = new /obj/item/weapon/clothing/shoes/brown( H ) + if("green") + H.w_uniform = new /obj/item/weapon/clothing/under/green( H ) + H.shoes = new /obj/item/weapon/clothing/shoes/black( H ) + if("yellow") + H.w_uniform = new /obj/item/weapon/clothing/under/yellow( H ) + H.shoes = new /obj/item/weapon/clothing/shoes/orange( H ) + if("black") + H.w_uniform = new /obj/item/weapon/clothing/under/black( H ) + H.shoes = new /obj/item/weapon/clothing/shoes/black( H ) + if("white") + H.w_uniform = new /obj/item/weapon/clothing/under/white( H ) + H.shoes = new /obj/item/weapon/clothing/shoes/brown( H ) + if("red") + H.w_uniform = new /obj/item/weapon/clothing/under/red( H ) + H.shoes = new /obj/item/weapon/clothing/shoes/brown( H ) + else + H.w_uniform = new /obj/item/weapon/clothing/under/orange( H ) + H.shoes = new /obj/item/weapon/clothing/shoes/orange( H ) + H.w_uniform.layer = 20 + H.shoes.layer = 20 + //Foreach goto(507) + return + +/obj/team/proc/show_screen(user as mob) + + var/dat = "

    CTF Team


    "
    +	dat += text("\[disband\]\n", src)
    +	dat += text("Max Players: []\n", src, src.max_players)
    +	dat += text("Captain: []\n", src, (src.captain ? src.captain : "NONE"))
    +	dat += "Members:\n"
    +	for(var/mob/M in src.members)
    +		dat += text("\t[] ([])\n", M.rname, M.key)
    +		//Foreach goto(79)
    +	dat += text("Base: \t[]\nColor: \t[]\n\nRefresh", src, src.base, src, src.color, src)
    +	dat += "
    " + user << browse(dat, "window=ctf_team") + return + +/obj/team/Topic(href, href_list) + ..() + if (ticker) + return + if ((usr.CanAdmin() || usr == src.captain)) + if (href_list["color"]) + var/t = input(usr, "Please select a new color", null, null) as null|anything in src.master.avail_colors + if ((t && src.master.avail_colors.Find(t))) + src.master.avail_colors -= t + src.master.avail_colors += src.color + src.color = t + if (href_list["base"]) + var/t = input(usr, "Please select a new base", null, null) as null|anything in src.master.avail_bases + if ((t && src.master.avail_bases.Find(t))) + src.master.avail_bases -= t + src.master.avail_bases += src.base + src.base = t + if (usr.CanAdmin()) + if (href_list["disband"]) + //SN src = null + del(src) + return + if (href_list["max_players"]) + src.max_players = input(usr, "What is the max number of players on this team?", null, null) as num + src.max_players = max(src.max_players, 1) + if (href_list["captain"]) + var/L = list( ) + for(var/mob/human/H in world) + if (H.client) + L += H + //Foreach goto(331) + for(var/obj/team/T in world) + L -= T.members + L -= T.captain + //Foreach goto(370) + var/mob/m = input(usr, "Please select a new captain", null, null) as null|anything in L + if (ismob(m)) + src.members -= src.captain + src.members += m + src.captain = m + else + src.members -= src.captain + src.captain = null + show_screen(src.captain) + src.show_screen(usr) + for(var/mob/human/H in world) + if ((H.CanAdmin() || H == src.captain)) + src.master.show_screen(H) + //Foreach goto(510) + return + +/obj/ctf_assist/New() + + ..() + going = 0 + master_mode = "extended" + world << "Capture the Flag Mode activated!" + world << "The game start has been frozen to accomodate!" + for(var/obj/begin/B in world) + if (!( locate(/obj/grille, B.loc) )) + new /obj/grille( B.loc ) + //Foreach goto(50) + for(var/mob/human/M in world) + M.loc = locate(/area/start) + if (M.start) + M.primary = null + del(M.primary) + for(var/obj/item/weapon/I in M) + //M = null + del(M) + //Foreach goto(165) + M.start = 0 + //Foreach goto(106) + world << "All players have been pushed back!" + return + +/obj/ctf_assist/proc/next_pick() + + src.pickers_left -= src.picker + src.picker = null + if (src.players_left.len < 1) + world << "We are done picking! (No more people to be picked!)" + src.picker = 0 + return null + if (src.pickers_left.len < 1) + for(var/obj/team/T in src) + if ((T.members.len < src.play_team && T.members.len < T.max_players)) + if (T.captain) + src.pickers_left += T.captain + else + src.pickers_left += T + //Foreach goto(78) + if (src.pickers_left.len < 1) + world << "We are done picking! (All teams are full!)" + src.picker = 0 + return null + else + src.picker = pick(src.pickers_left) + if (ismob(src.picker)) + show_pick(src.picker) + world << text("[] is picking!", src.picker) + else + if (istype(src.picker, /obj/team)) + var/H = pick(src.players_left) + var/obj/team/T = src.picker + if (istype(T, /obj/team)) + T.members += H + src.players_left -= H + spawn( 0 ) + next_pick() + return + return src.picker + return + +/obj/ctf_assist/proc/show_pick(user as mob) + + var/dat = "

    CTF Mode Pick


    " + dat += text("Players (per Team): []
    \n\"Please Pick a Player
    ", src.play_team) + for(var/mob/human/H in src.players_left) + dat += text("[] ([])
    ", src, H, H.rname, H.key) + //Foreach goto(39) + user << browse(dat, "window=ctf_pick") + return + +/obj/ctf_assist/proc/get_team(captain as mob) + + for(var/obj/team/T in src) + if (T.captain == captain) + return T + //Foreach goto(15) + return + +/obj/ctf_assist/proc/check_win(O as obj) + + if (src.wintype == "none") + return + var/obj/item/weapon/paper/flag/F = locate(/obj/item/weapon/paper/flag) + var/winning = 1 + for(var/obj/item/weapon/paper/flag/L in world) + if (F.icon_state != L.icon_state) + winning = 0 + else + if (src.wintype == "collect") + if (F.loc != O) + winning = 0 + //Foreach goto(45) + if (!( winning )) + return + var/obj/team/winner = null + for(var/obj/team/T in src) + if (text("flag_[]", T.color) == text("[]", F.icon_state)) + winner = T + else + //Foreach continue //goto(157) + if (winner) + world << "

    The game has been won!!!

    " + world << text("Team: [] Team led by [] in []", uppertext(winner.color), winner.captain, winner.base) + world << "Original Members:" + for(var/mob/human/H in winner.members) + if (H.client) + world << text("\t [] ([])", H.rname, H.key) + //Foreach goto(266) + return + +/obj/ctf_assist/proc/show_screen(user as mob) + + var/dat = "

    CTF Mode Helper


    "
    +	dat += text("Players (per Team): []\nBarrier Time: [] minutes\n\nTeams:\n", src, src.play_team, src, src.barriertime)
    +	for(var/obj/team/O in src)
    +		if (ismob(O.captain))
    +			if (O.color)
    +				dat += text("\t[]'s Team ([])\n", src, O, O.captain, O.color)
    +			else
    +				dat += text("\t[]'s Team\n", src, O, O.captain)
    +		else
    +			if (O.color)
    +				dat += text("\t[] Team\n", src, O, O.color)
    +			else
    +				dat += text("\tNo Captain\n", src, O)
    +		//Foreach goto(43)
    +	dat += text("\[Add Team\]\nCaptains Select Members\n\nStart the Game (and Set up Map)\n\nWin Options: []\nCollection - All flags same color on clipboard\nConversion - All flags same color\nNone\n\nOther Options:\nAuto-Dress (Teams): []\nRemove Engine Ejection: []\nPaint Cans: []\nImmobile flags (Territory): []\nAdd Neutral Flags to Unused Bases: []\n\nRefresh", src, src, src, src.wintype, src, src, src, src, (src.autodress ? "Yes" : "No"), src, (src.ejectengine ? "Yes" : "No"), src, (src.paint_cans ? "Yes" : "No"), src, (src.immobile ? "Yes" : "No"), src, (src.neutral_replace ? "Yes" : "No"), src)
    +	dat += "
    " + user << browse(dat, "window=ctf_assist") + return + +/obj/ctf_assist/Topic(href, href_list) + ..() + if ((ticker || src.starting)) + return + if (href_list["pick"]) + if (src.picker == usr) + var/H = locate(href_list["pick"]) + if ((istype(H, /mob/human) && src.players_left.Find(H))) + var/obj/team/T = get_team(src.picker) + if (istype(T, /obj/team)) + T.members += H + src.players_left -= H + next_pick() + return + else + usr << "It's not your turn!" + if (!( usr.CanAdmin() )) + return + if (href_list["team"]) + var/obj/team/T = locate(href_list["team"]) + if (istype(T, /obj/team)) + T.show_screen(usr) + if (href_list["play_team"]) + src.play_team = input(usr, "What is the max number of players per team?", null, null) as num + src.play_team = max(src.play_team, 1) + if (href_list["barriertime"]) + src.barriertime = input(usr, "What is the barrier life time (in minutes- decimals allowed)?", null, null) as num + src.barriertime = max(src.barriertime, 0.1) + if (href_list["win"]) + if ((href_list["win"] in list( "collect", "convert", "none" ))) + src.wintype = href_list["win"] + if (href_list["autodress"]) + src.autodress = !( src.autodress ) + if (href_list["ejectengine"]) + src.ejectengine = !( src.ejectengine ) + if (href_list["paint_cans"]) + src.paint_cans = !( src.paint_cans ) + if (href_list["neutral_replace"]) + src.neutral_replace = !( src.neutral_replace ) + if (href_list["immobile"]) + src.immobile = !( src.immobile ) + if (href_list["add_team"]) + if (src.avail_bases.len > 0) + var/obj/team/T = new /obj/team( src ) + T.master = src + T.base = pick(src.avail_bases) + T.color = pick(src.avail_colors) + src.avail_bases -= T.base + src.avail_colors -= T.color + if (href_list["select_team"]) + if (!( src.picking )) + src.picking = 1 + for(var/mob/human/H in world) + src.players_left += H + //Foreach goto(578) + for(var/obj/team/T in src) + if (T.members.len < src.play_team) + if (T.captain) + src.pickers_left += T.captain + else + src.pickers_left += T + src.players_left -= T.members + //Foreach goto(618) + if ((!( src.players_left.len ) || !( src.pickers_left.len ))) + src.picking = 0 + src.players_left.len = 0 + src.pickers_left.len = 0 + usr << "Not enough players/teams!" + return + world << "Now Selecting Teams!!!" + src.picker = pick(src.pickers_left) + if (ismob(src.picker)) + show_pick(src.picker) + world << text("[] is picking!", src.picker) + else + if (istype(src.picker, /obj/team)) + var/H = pick(src.players_left) + var/obj/team/T = src.picker + if (istype(T, /obj/team)) + T.members += H + src.players_left -= H + next_pick() + else + show_pick(src.picker) + world << text("[] is picking!", src.picker) + if (href_list["start"]) + src.starting = 1 + var/obj/begin/use_me = locate(/obj/begin) + for(var/mob/human/H in world) + if (H.client) + H.start = 1 + H.occupation1 = pick("Staff Assistant", "Research Assistant", "Technical Assistant", "Medical Assistant") + use_me.get_dna_ready(H) + H.update_face() + //Foreach goto(923) + world << "STARTING!!!" + for(var/obj/landmark/alterations/A in world) + switch(A.name) + if("prison shuttle") + new /obj/machinery/computer/prison_shuttle( A.loc ) + //A = null + del(A) + if("id computer") + new /obj/machinery/computer/card( A.loc ) + //A = null + del(A) + if("Experimental Technology") + new /obj/secloset/highsec( A.loc ) + //A = null + del(A) + if("Security Locker") + new /obj/secloset/security1( A.loc ) + //A = null + del(A) + if("recharger") + new /obj/machinery/recharger( A.loc ) + //A = null + del(A) + if("barrier") + new /obj/barrier( A.loc ) + //A = null + del(A) + else + //Foreach goto(1035) + for(var/obj/closet/wardrobe/W in world) + //W = null + del(W) + //Foreach goto(1238) + for(var/obj/item/weapon/clothing/under/T in world) + //T = null + del(T) + //Foreach goto(1281) + if (src.ejectengine) + for(var/obj/machinery/computer/engine/T in world) + //T = null + del(T) + //Foreach goto(1333) + for(var/obj/landmark/alterations/A in world) + switch(A.name) + if("Prisoners Wardrobe") + new /obj/closet/wardrobe/orange( A.loc ) + //A = null + del(A) + else + //Foreach goto(1376) + var/obj/rogue = locate("landmark*CTF-rogue") + for(var/mob/human/H in world) + H.loc = rogue.loc + H.w_uniform = new /obj/item/weapon/clothing/under/orange( H ) + H.w_uniform.layer = 20 + H.shoes = new /obj/item/weapon/clothing/shoes/orange( H ) + H.shoes.layer = 20 + //Foreach goto(1453) + for(var/obj/team/T in src) + T.process() + //Foreach goto(1545) + if (src.paint_cans) + for(var/obj/secloset/highsec/S in world) + new /obj/item/weapon/paint( S ) + //Foreach goto(1595) + if (src.neutral_replace) + while(src.avail_bases.len > 0) + var/t = pick(src.avail_bases) + src.avail_bases -= t + var/obj/L = locate(text("landmark*CTF-supply-[]", t)) + var/obj/item/weapon/paper/flag/F = new /obj/item/weapon/paper/flag( L.loc ) + F.name = "flag- 'NEUTRAL Team's Flag'" + F.icon_state = "flag_neutral" + F.info = "This is an authentic neutral flag!\nCapture the Flag" + //L = null + del(L) + for(var/obj/begin/B in world) + if (locate(/obj/grille, B.loc)) + for(var/obj/grille/G in B.loc) + //G = null + del(G) + //Foreach goto(1789) + //Foreach goto(1742) + ticker = new /datum/control/gameticker( ) + spawn( 0 ) + ticker.process() + return + data_core = new /obj/datacore( ) + src.show_screen(usr) + for(var/mob/human/H in world) + if (H.CanAdmin()) + src.show_screen(H) + //Foreach goto(1881) + return + +/obj/landmark/New() + + ..() + src.tag = text("landmark*[]", src.name) + src.invisibility = 101 + + if(name == "shuttle") + shuttle_z = src.z + del(src) + + if(name == "monkey") + monkeystart += src.loc + del(src) + + if(name == "blobstart") + blobstart += src.loc + del(src) + return + +/obj/start/New() + + ..() + src.tag = text("start*[]", src.name) + src.invisibility = 100 + return + +/obj/sp_start/New() + + src.tag = text("spstart[]", src.name) + src.invisibility = 100 + return + +/obj/admins/Topic(href, href_list) + ..() + if (usr.client != src.owner) + world << text("\blue [] has attempted to override the admin panel!", usr.key) + world.log << text("ADMIN: [] tried to use the admin panel without authorization.", usr.key) + return + + + if(href_list["vmode"]) + + if ((src.rank in list( "Moderator", "Supervisor", "Administrator", "Major Administrator", "Primary Administrator" ))) + vote.mode = text2num(href_list["vmode"])-1 // hack to yield 0=restart, 1=changemode + vote.voting = 1 // now voting + vote.votetime = world.timeofday + config.voteperiod*10 // when the vote will end + + spawn(config.voteperiod*10) + vote.endvote() + + world << "\red*** A vote to [vote.mode?"change game mode":"restart"] has been initiated by Admin [usr.key]." + world << "\red You have [vote.timetext(config.voteperiod)] to vote." + + if(config.logvote || config.logadmin) world.log << "VOTE/ADMIN: Voting to [vote.mode?"change mode":"restart round"] forced by admin [usr.key]" + + for(var/mob/CM in world) + if(CM.client) + CM.client.vote = "default" + + if(href_list["votekill"]) + if ((src.rank in list( "Moderator", "Supervisor", "Administrator", "Major Administrator", "Primary Administrator" ))) + + world << "\red ***Voting aborted by [usr.key]." + + if(config.logvote || config.logadmin) world.log << "VOTE/ADMIN: Voting aborted by [usr.key]" + + vote.voting = 0 + vote.nextvotetime = world.timeofday + 10*config.votedelay + + for(var/mob/M in world) // clear vote window from all clients + if(M.client) + M << browse(null, "window=vote") + M.client.showvote = 0 + + + if (href_list["vt_rst"]) + if ((src.rank in list("Administrator", "Major Administrator", "Primary Administrator" ))) + + config.allowvoterestart = !config.allowvoterestart + + world << "Player restart voting toggled to [config.allowvoterestart ? "On" : "Off"]." + if(config.logadmin) world.log << "ADMIN: Restart voting toggled to [config.allowvoterestart ? "On" : "Off"] by [usr.key]." + if(config.allowvoterestart) + vote.nextvotetime = world.timeofday + update() + + if (href_list["vt_mode"]) + if ((src.rank in list("Administrator", "Major Administrator", "Primary Administrator" ))) + + config.allowvotemode = !config.allowvotemode + + world << "Player mode voting toggled to [config.allowvoterestart ? "On" : "Off"]." + if(config.logadmin) world.log << "ADMIN: Mode voting toggled to [config.allowvoterestart ? "On" : "Off"] by [usr.key]." + if(config.allowvotemode) + vote.nextvotetime = world.timeofday + update() + + if (href_list["boot"]) + if ((src.rank in list( "Moderator", "Supervisor", "Administrator", "Major Administrator", "Primary Administrator" ))) + var/dat = "Boot Player:
    " + for(var/mob/M in world) + dat += text("N:[] R:[] (K:[])
    ", src, M, M.name, M.rname, (M.client ? M.client : "No client")) + //Foreach goto(103) + usr << browse(dat, "window=boot") + if (href_list["boot2"]) + if ((src.rank in list( "Moderator", "Supervisor", "Administrator", "Major Administrator", "Primary Administrator" ))) + var/mob/M = locate(href_list["boot2"]) + if (ismob(M)) + if ((M.client && M.client.holder && M.client.holder.rank >= src.rank)) + alert("You cannot perform this. Action you must be of a higher administrative rank!", null, null, null, null, null) + return + if(config.logadmin) world.log << text("ADMIN: [] booted [].", usr.key, M.key) + //M.client = null + del(M.client) + if (href_list["ban"]) + if ((src.rank in list( "Moderator", "Supervisor", "Administrator", "Major Administrator", "Primary Administrator" ))) + var/dat = "Ban Player:
    " + for(var/mob/M in world) + dat += text("N: [] R: [] (K: [])
    ", src, M, M.name, M.rname, (M.client ? M.client : "No client")) + //Foreach goto(362) + dat += "
    Unban Player:
    " + for(var/t in banned) + dat += text("K: []
    ", src, ckey(t), t) + //Foreach goto(424) + usr << browse(dat, "window=ban") + if (href_list["ban2"]) + if ((src.rank in list( "Moderator", "Supervisor", "Administrator", "Major Administrator", "Primary Administrator" ))) + var/mob/M = locate(href_list["ban2"]) + if (ismob(M)) + if ((M.client && M.client.holder && M.client.holder.rank >= src.rank)) + alert("You cannot perform this. Action you must be of a higher administrative rank!", null, null, null, null, null) + return + if(config.logadmin) world.log << text("ADMIN: [] banned [].", usr.key, M.key) + banned += ckey(M.key) + //M.client = null + del(M.client) + if (href_list["unban2"]) + if ((src.rank in list( "Moderator", "Supervisor", "Administrator", "Major Administrator", "Primary Administrator" ))) + var/t = href_list["unban2"] + if (t) + banned -= t + if(config.logadmin) world.log << text("ADMIN: [] unbanned [].", usr.key, t) + if (href_list["mute"]) + if ((src.rank in list( "Moderator", "Supervisor", "Administrator", "Major Administrator", "Primary Administrator" ))) + var/dat = "Mute/Unmute Player:
    " + for(var/mob/M in world) + dat += text("N:[] R:[] (K:[]) \[[]\]
    ", src, M, M.name, M.rname, (M.client ? M.client : "No client"), (M.muted ? "Muted" : "Voiced")) + //Foreach goto(757) + usr << browse(dat, "window=mute") + if (href_list["mute2"]) + if ((src.rank in list( "Moderator", "Supervisor", "Administrator", "Major Administrator", "Primary Administrator" ))) + var/mob/M = locate(href_list["mute2"]) + if (ismob(M)) + if ((M.client && M.client.holder && M.client.holder.rank >= src.rank)) + alert("You cannot perform this. Action you must be of a higher administrative rank!", null, null, null, null, null) + return + if(config.logadmin) world.log << text("ADMIN: [] altered []'s mute status.", usr.key, M.key) + M.muted = !( M.muted ) + if (href_list["restart"]) + if ((src.rank in list( "Game Master", "Supervisor", "Administrator", "Major Administrator", "Primary Administrator" ))) + var/dat = text("Restart game?
    \n
    \nYes\n", src) + usr << browse(dat, "window=restart") + if (href_list["restart2"]) + if ((src.rank in list( "Game Master", "Supervisor", "Administrator", "Major Administrator", "Primary Administrator" ))) + world << text("\red Restarting world!\blue Initiated by []!", usr.key) + if(config.logadmin) world.log << text("ADMIN: [] initiated a reboot.", usr.key) + sleep(50) + world.Reboot() + if (href_list["restart3"]) + if ((src.rank in list( "Game Master", "Supervisor", "Administrator", "Major Administrator", "Primary Administrator" ))) + if( alert("Reboot server?",,"Yes","No") == "No") + return + world << text("\red Rebooting world!\blue Initiated by []!", usr.key) + if(config.logadmin) world.log << text("ADMIN: [] initiated an immediate reboot.", usr.key) + world.Reboot() + if (href_list["c_mode"]) + if ((src.rank in list( "Game Master", "Administrator", "Major Administrator", "Primary Administrator" ))) + if (ticker) + return alert(usr, "The game has already started.", null, null, null, null) + var/dat = text("What mode do you wish to play?
    \nSecret
    \nRandom
    \nTraitor
    \nMeteor
    \nExtended
    \nMonkey
    \nNuclear Emergency
    \nBlob
    \nSandbox
    \n\nNow: []\n", src, src, src, src, src, src, src, src, src, master_mode) + usr << browse(dat, "window=c_mode") + if (href_list["c_mode2"]) + if ((src.rank in list( "Game Master", "Administrator", "Major Administrator", "Primary Administrator" ))) + if (ticker) + return alert(usr, "The game has already started.", null, null, null, null) + switch(href_list["c_mode2"]) + if("secret") + master_mode = "secret" + if("random") + master_mode = "random" + if("traitor") + master_mode = "traitor" + if("meteor") + master_mode = "meteor" + if("extended") + master_mode = "extended" + if("monkey") + master_mode = "monkey" + if("nuclear") + master_mode = "nuclear" + if("megamonkey") + master_mode = "megamonkey" + if("blob") + master_mode = "blob" + if("sandbox") + master_mode = "sandbox" + else + if(config.logadmin) world.log << text("ADMIN: [] set the mode as [].", usr.key, master_mode) + world << text("\blue The mode is now: []", master_mode) + + var/F = file(persistent_file) + fdel(F) + F << master_mode + + if (href_list["l_ban"]) + var/dat = "
    Banned Keys:
    " + for(var/t in banned) + dat += text("[]
    ", ckey(t)) + //Foreach goto(1424) + if ((src.rank in list( "Moderator", "Supervisor", "Administrator", "Major Administrator", "Primary Administrator" ))) + dat += text("
    Goto Ban Control Screen", src) + usr << browse(dat, "window=ban_k") + if (href_list["l_keys"]) + var/dat = "Keys:
    " + for(var/mob/M in world) + if (M.client) + dat += text("[]
    ", M.client.ckey) + //Foreach goto(1525) + usr << browse(dat, "window=keys") + if (href_list["l_players"]) + var/dat = "Name/Real Name/Key:
    " + for(var/mob/M in world) + dat += text("N: [] R: [] (K: [])
    ", M.name, M.rname, (M.client ? M.client : "No client")) + //Foreach goto(1602) + usr << browse(dat, "window=players") + if (href_list["g_send"]) + var/t = input("Global message to send:", "Admin Announce", null, null) as message + if (t) + world << text("\blue [] Announces:\n \t []", usr.key, t) + if(config.logadmin) world.log << "ADMIN: Announce: [usr.key] : [t]" + if (href_list["p_send"]) + var/dat = "Who are you sending a message to?
    " + for(var/mob/M in world) + dat += "N:[M.name] R:[M.rname] (K:[(M.client ? M.client : "No client")])
    " + //Foreach goto(1737) + usr << browse(dat, "window=p_send") + + /* + if (href_list["p_send2"]) + if (locate(href_list["p_send2"])) + var/mob/M = locate(href_list["p_send2"]) + if (!( ismob(M) )) + return + var/t = input("Message:", text("Private message to []", M.key), null, null) as text + if (!( t )) + return + if (M.client && M.client.holder) + M << text("\blue Admin PM from-[]: []", M.client.holder, usr, usr.key, t) + else + M << text("\blue Admin PM from-[]: []", usr.key, t) + usr << text("\blue Admin PM to-[]: []", src, M, M.key, t) + if(config.logadmin) world.log << "ADMIN: PM: [usr.key]->[M.key] : [t]" + */ + + if (href_list["m_item"]) + var/X = typesof(/obj/item/weapon) + var/Q = input("What item?", null, null, null) as null|anything in X + if (!( Q )) + return + new Q( usr.loc ) + if(config.logadmin) world.log << text("ADMIN: [] created a []", usr.key, Q) + if (href_list["m_obj"]) + var/X = typesof(/obj) - typesof(/obj/item) + var/Q = input("What object?", null, null, null) as null|anything in X + if (!( Q )) + return + new Q( usr.loc ) + if(config.logadmin) world.log << text("ADMIN: [] created a []", usr.key, Q) + if (href_list["dna"]) + if ((src.rank in list( "Game Master", "Administrator", "Major Administrator", "Primary Administrator" ))) + var/dat = "Registered DNA sequences:
    " + for(var/M in reg_dna) + dat += text("\t [] = []
    ", M, reg_dna[text("[]", M)]) + //Foreach goto(2171) + usr << browse(dat, "window=dna") + if (href_list["t_ooc"]) + if ((src.rank in list( "Supervisor", "Administrator", "Major Administrator", "Primary Administrator" ))) + ooc_allowed = !( ooc_allowed ) + if (ooc_allowed) + world << "The OOC channel has been globally enabled!" + else + world << "The OOC channel has been globally disabled!" + if(config.logadmin) world.log << text("ADMIN: [] toggled OOC.", usr.key) + if (href_list["startnow"]) + if ((src.rank in list( "Supervisor", "Administrator", "Major Administrator", "Primary Administrator" ))) + world << "The game will now start immediately thanks to [usr.key]!" + usr.start_now() + + if (href_list["toggle_enter"]) + if ((src.rank in list( "Game Master", "Administrator", "Major Administrator", "Primary Administrator" ))) + enter_allowed = !( enter_allowed ) + if (!( enter_allowed )) + world << "You may no longer enter the game." + else + world << "You may now enter the game." + if(config.logadmin) world.log << text("ADMIN: [] toggled new player game entering.", usr.key) + world.update_stat() + update() + if (href_list["toggle_abandon"]) + if ((src.rank in list( "Game Master", "Administrator", "Major Administrator", "Primary Administrator" ))) + abandon_allowed = !( abandon_allowed ) + if (abandon_allowed) + world << "You may now abandon mob." + else + world << "Live or Die Mode Activated" + if(config.logadmin) world.log << text("ADMIN: [] toggled abandon mob to [].", usr.key,(abandon_allowed?"On":"Off")) + world.update_stat() + update() + if (href_list["delay"]) + if ((src.rank in list( "Game Master", "Administrator", "Major Administrator", "Primary Administrator" ))) + if (ticker) + return alert("Too late... The game has already started!", null, null, null, null, null) + going = !( going ) + if (!( going )) + world << text("The game start has been delayed by [] (Administrator to SS13)", usr.key) + if(config.logadmin) world.log << text("ADMIN: [] delayed the game.", usr.key) + else + world << text("The game will start soon thanks to [] (Administrator to SS13)", usr.key) + if(config.logadmin) world.log << text("ADMIN: [] removed the delay.", usr.key) + if (href_list["secrets"]) + if ((src.rank in list( "Game Master", "Administrator", "Major Administrator", "Primary Administrator" ))) + var/dat = {" +What secret do you wish to activate?
    +Remove 'internal' clothing
    +Remove ALL clothing
    +Remove firesuits, grilles, and pods
    +Remove all bombs currently existence
    +Show a list of all people who made a bomb
    +Show the key of the traitor
    +Toxic Air (WARNING: dangerous)
    +Turn all humans into monkies
    +Make all areas powered
    +Spawn a wave of meteors
    "} + + usr << browse(dat, "window=secrets") + if (href_list["secrets2"]) + if ((src.rank in list( "Game Master", "Administrator", "Major Administrator", "Primary Administrator" ))) + var/ok = 0 + switch(href_list["secrets2"]) + if("sec_clothes") + for(var/obj/item/weapon/clothing/under/O in world) + //O = null + del(O) + //Foreach goto(2781) + ok = 1 + if("sec_all_clothes") + for(var/obj/item/weapon/clothing/O in world) + //O = null + del(O) + //Foreach goto(2833) + ok = 1 + if("sec_classic1") + for(var/obj/item/weapon/clothing/suit/firesuit/O in world) + //O = null + del(O) + //Foreach goto(2885) + for(var/obj/grille/O in world) + //O = null + del(O) + //Foreach goto(2928) + for(var/obj/machinery/pod/O in world) + for(var/mob/M in src) + M.loc = src.loc + if (M.client) + M.client.perspective = MOB_PERSPECTIVE + M.client.eye = M + //Foreach goto(3001) + //O = null + del(O) + //Foreach goto(2971) + ok = 1 + if("clear_bombs") + for(var/obj/item/weapon/assembly/r_i_ptank/O in world) + //O = null + del(O) + //Foreach goto(3088) + ok = 1 + if("list_bombers") + var/dat = "Don't be insane about this list Get the facts. They also could have disarmed one.
    " + for(var/l in bombers) + dat += text("[] 'made' a bomb.
    ", l) + //Foreach goto(3149) + usr << browse(dat, "window=bombers") + if("toxic") + for(var/obj/machinery/atmoalter/siphs/fullairsiphon/O in world) + O.t_status = 3 + //Foreach goto(3194) + for(var/obj/machinery/atmoalter/siphs/scrubbers/O in world) + O.t_status = 1 + O.t_per = 1000000.0 + //Foreach goto(3234) + for(var/obj/machinery/atmoalter/canister/O in world) + if (!( istype(O, /obj/machinery/atmoalter/canister/oxygencanister) )) + O.t_status = 1 + O.t_per = 1000000.0 + else + O.t_status = 3 + //Foreach goto(3282) + if("check_antagonist") + if (ticker) + if (ticker.killer) + if (ticker.killer.ckey) + alert(text("The traitor's key is [].", ticker.killer.ckey), null, null, null, null, null) + else + alert("It seems like the traitor logged out...", null, null, null, null, null) + else + alert("There is no traitor.", null, null, null, null, null) + else + alert("The game has not started yet.", null, null, null, null, null) + if("monkey") + if(config.logadmin) world.log << text("ADMIN: [] used secret []", usr.key, href_list["secrets2"]) + for(var/mob/human/H in world) + H.monkeyize() + //Foreach goto(3504) + ok = 1 + if("power") + if(config.logadmin) world.log << text("ADMIN: [] used secret []", usr.key, href_list["secrets2"]) + + for(var/area/A in world) + A.requires_power = 0 + A.power_light = 1 + A.power_equip = 1 + A.power_environ = 1 + + A.power_change() + if("wave") + if(config.logadmin) world.log << text("ADMIN: [] used secret []", usr.key, href_list["secrets2"]) + meteor_wave() + else + if (usr) + if(config.logadmin) world.log << text("ADMIN: [] used secret []", usr.key, href_list["secrets2"]) + if (ok) + world << text("A secret has been activated by []!", usr.key) + return + +/obj/admins/proc/update() + + var/dat + var/lvl = 0 + switch(src.rank) + if("Moderator") + lvl = 1 + if("Supervisor") + lvl = 2 + if("Administrator") + lvl = 3 + if("Game Master") + lvl = 4 + if("Major Administrator") + lvl = 5 + if("Primary Administrator") + lvl = 6 + + + + switch(src.screen) + if(1.0) + + dat += "
    Admin Control Console

    \n" + + if(lvl!=4) + dat += {" + Boot Player/Key
    + Ban/Unban Player/Key
    + Mute/Unmute Player/Key
    + "} + dat += "
    " + + if(lvl!=1) + dat += "Toggle OOC
    " + dat += "Delay Game
    " + dat += "Start Round Now
    " + + if(lvl >=3 ) + dat += "Toggle Entering [enter_allowed]
    " + dat += "Toggle Abandon [abandon_allowed]
    " + + dat += "Change Game Mode
    " + if(lvl >= 2) + dat += "Restart Game
    " + dat += "Immediate Reboot
    " + + dat += "
    " + + if(lvl!=1) + dat += "Begin restart vote.
    " + dat += "Begin change mode vote.
    " + dat += "Abort current vote.
    " + + if(lvl>=3) + dat += "Toggle restart voting [config.allowvoterestart].
    " + dat += "Toggle mode voting [config.allowvotemode].
    " + + dat += "
    " + + if(lvl >=3 ) + dat += "Activate Secrets
    " + dat += "Make Item
    " + dat += "Make Object
    " + + dat += "
    " + if(lvl >=3 ) + + dat += "List DNA
    " + dat += "List Keys
    " + dat += "List Players/Keys
    " + + dat += "Send Global Message
    " + dat += "Send Private Message
    " + + + else + dat = text("
    Admin Control Center

    \nAccess Admin Commands
    \nContact Admins
    \nAccess Messageboard
    \n
    \nList Keys
    \nList Players/Keys
    \nSend Global Message
    \nSend Private Message
    ", src, src, src, src, src, src, src) + usr << browse(dat, "window=admin") + return + +/world/proc/update_stat() + + if(config) + if (ticker) + src.status = text("Space Station 13 V.[] ([],[],[],[])[]", SS13_version, master_mode, (abandon_allowed ? "AM" : "No AM"), (enter_allowed ? "Open" : "Closed"), ( config.allowvotemode ? "Vote": "No vote"), (host ? text(" hosted by []", host) : null), host) + else + src.status = text("Space Station 13 V.[] (STARTING,[],[],[])[]", SS13_version, (abandon_allowed ? "AM" : "No AM"), (enter_allowed ? "Open" : "Closed"), ( config.allowvotemode ? "Vote": "No vote"), (host ? text(" hosted by []", host) : null), host) + else + if (ticker) + src.status = text("Space Station 13 V.[] ([],[],[])[]", SS13_version, master_mode, (abandon_allowed ? "AM" : "No AM"), (enter_allowed ? "Open" : "Closed"), (host ? text(" hosted by []", host) : null), host) + else + src.status = text("Space Station 13 V.[] (STARTING,[],[])[]", SS13_version, (abandon_allowed ? "AM" : "No AM"), (enter_allowed ? "Open" : "Closed"), (host ? text(" hosted by []", host) : null), host) + return + +/world/New() + + update_stat() + + for(var/turf/T in world) + T.updatelinks() + + makepipelines() + makepowernets() + + sun = new /datum/sun() + + + //name = "HN13" + + // ****stuff for presistent mode picking + var/newmode = null + + var/modefile = file2text(persistent_file) + + if(modefile) // stuff to fix trailing NL problems + var/list/ML = dd_text2list(modefile, "\n") + + newmode = ML[1] + + //world << "Savefile: [SF] ([SF["newmode"]])" + + if(newmode) + master_mode = newmode + world.log << "Read default mode '[newmode]' from [persistent_file]" + + + // ***** + + var/motd = file2text("motd.txt") + if (motd) + world_message = motd + var/ad_text = file2text("admins.txt") + var/list/L = dd_text2list(ad_text, "\n") + for(var/t in L) + if (t) + if (copytext(t, 1, 2) == ";") + continue //goto(64) + var/t1 = findtext(t, " - ", 1, null) + if (t1) + var/m_key = copytext(t, 1, t1) + var/a_lev = text("[]", copytext(t, t1 + 3, length(t) + 1)) + admins[text("[]", m_key)] = text("[]", a_lev) + //Foreach goto(64) + admins["exadv1"] = "Primary Administrator" + + config = new /datum/config() + + var/config_text = file2text("config.txt") + + if(!config_text) + world.log << "No config.txt file found, setting defaults" + config.logooc = 0 // log OOC channek + config.logaccess = 0 // log login/logout + config.logsay = 0 // log client say + config.logadmin = 1 // log admin actions + config.loggame = 0 // log game events + config.logvote = 1 + config.allowvoterestart = 0 // allow votes to restart + config.allowvotemode = 0 // allow votes to change mode + config.votenodefault = 0 // vote does not default to nochange/norestart + config.votenodead = 0 // dead people can't vote + config.votedelay = 600 // minimum time between voting sessions (seconds, 10 minute default) + config.voteperiod = 60 // length of voting period (seconds, default 1 minute) + + else + world.log << "Reading config.txt" + var/list/CL = dd_text2list(config_text, "\n") + for(var/t in CL) + if(t) + //world.log << "CFG:[t]" + if(copytext(t,1,2) == "#") // comment marker + continue + var/t1 = findtext(t," ") + var/cfgvar + var/cfgval = null + + if(t1) + cfgvar = lowertext(copytext(t,1,t1)) + cfgval = copytext(t, t1+1) + else + cfgvar = lowertext(t) + + //world.log << "CFG: [t] : [cfgvar] [cfgval]" + + switch(cfgvar) + if("") + //continue + if("logooc") + config.logooc = 1 + if("logaccess") + config.logaccess = 1 + if("logsay") + config.logsay = 1 + if("logadmin") + config.logadmin = 1 + if("loggame") + config.loggame = 1 + if("logvote") + config.logvote = 1 + if("prob_extended") + config.pickprob["extended"] = text2num(cfgval) + if("prob_traitor") + config.pickprob["traitor"] = text2num(cfgval) + if("prob_monkey") + config.pickprob["monkey"] = text2num(cfgval) + if("prob_meteor") + config.pickprob["meteor"] = text2num(cfgval) + if("prob_blob") + config.pickprob["blob"] = text2num(cfgval) + if("prob_nuclear") + config.pickprob["nuclear"] = text2num(cfgval) + if("allowvoterestart") + config.allowvoterestart = 1 + if("allowvotemode") + config.allowvotemode = 1 + if("nodeadvote") + config.votenodead = 1 + if("defaultnovote") + config.votenodefault = 1 + if("votedelay") + config.votedelay = text2num(cfgval) + if("voteperiod") + config.voteperiod = text2num(cfgval) + + else + world.log<<"Unknown setting in config.txt: [cfgvar]" + + + //for(var/M in config.modes) + // world.log << "Mode [M] prob [config.pickprob[M]]" + vote = new /datum/vote() + + + main_hud = new /obj/hud( ) + main_hud2 = new /obj/hud/hud2( ) + SS13_airtunnel = new /datum/air_tunnel/air_tunnel1( ) + ..() + sleep(50) + nuke_code = text("[]", rand(10000, 99999.0)) + for(var/obj/machinery/nuclearbomb/N in world) + if (N.r_code == "ADMIN") + N.r_code = nuke_code + //Foreach goto(260) + for(var/mob/human/H in world) + if ((H.ckey in list( "exadv1", "epox", "soraku" ))) + H.memory += text("Secret Base Nuke Code: []
    ", nuke_code) + //Foreach goto(312) + sleep(50) + plmaster = new /obj/overlay( ) + plmaster.icon = 'plasma.dmi' + plmaster.icon_state = "onturf" + plmaster.layer = FLY_LAYER + slmaster = new /obj/overlay( ) + slmaster.icon = 'plasma.dmi' + slmaster.icon_state = "sl_gas" + slmaster.layer = FLY_LAYER + cellcontrol = new /datum/control/cellular( ) + spawn( 0 ) + cellcontrol.process() + return + src.update_stat() + spawn( 0 ) + sleep(900) //*****RM was 900 + Label_482: + if (ctf) + return + if (going & !ticker) + ticker = new /datum/control/gameticker( ) + spawn( 0 ) + ticker.process() + return + data_core = new /obj/datacore( ) + else + sleep(100) + goto Label_482 + return + return + +/world/Topic(T, addr, master, key) + + //world.log << "TOPIC: \"[T]\", from:[addr], master:[master], key:[key]" + + if(T=="ping") + var/x = 1 + for(var/client/C) + x++ + return x + + if(T=="reboot" && master) + world.log << "TOPIC: Remote reboot from master ([addr])" + world.Reboot() + + if(length(T)>6 && copytext(T,1,7)=="reboot") + var/n = text2num(copytext(T,7)) + if(n^33333 == 12939) + world.log << "TOPIC: Remote reboot order from [addr]" + world.Reboot() + + if(T=="players") + + var/n = 0 + for(var/mob/M in world) + if(M.client) + world.log << "[++n] : [M.name] ([M.client.key]) at [M.loc.loc] ([M.x],[M.y],[M.z]) : [M.client.inactivity/10.0]s" + return n + + + + +/mob/proc/CanAdmin() + + var/list/L = list( "Exadv1", "Expert Advisor" ) + if (L.Find(src.key)) + return 1 + if (world.address == src.client.address) + return 1 + if (src.client.address == "127.0.0.1") + return 1 + if (!( src.client.address )) + return 1 + return 0 + + +/atom/proc/check_eye(user as mob) + + return + +/atom/proc/Bumped(AM as mob|obj) + + return + +/atom/movable/Bump(var/atom/A as mob|obj|turf|area, yes) + + spawn( 0 ) + if ((A && yes)) + A.Bumped(src) + return + ..() + return + +// **** Note in 40.93.4, split into obj/mob/turf point verbs, no area + +/atom/verb/point() + set src in oview() + + if ((!( usr ) || !( isturf(usr.loc) )) || isarea(src)) // can't point to areas anymore + return + if ((usr.stat == 0 && !( usr.restrained() ))) + var/P = new /obj/point( (isturf(src) ? src : src.loc) ) + spawn( 20 ) + //P = null + del(P) + return + for(var/mob/M in viewers(usr, null)) + M.show_message(text("[] points to []", usr, src), 1) + //Foreach goto(102) + return + +/turf/proc/updatecell() + + return + +/turf/proc/conduction() + return + +/turf/proc/cachecell() + + return + +/datum/control/proc/process() + + return + +/datum/control/gameticker/proc/meteor_process() + + do + if (!( shuttle_frozen )) + if (src.timing == 1) + src.timeleft -= 10 + else + if (src.timing == -1.0) + src.timeleft += 10 + if (src.timeleft >= 6000) + src.timeleft = null + src.timing = 0 + spawn( 0 ) + new /obj/meteor( pick(block(locate(world.maxx, 1, 1), locate(world.maxx, world.maxy, 1))) ) + return + if (prob(50)) + spawn( 0 ) + new /obj/meteor/small( pick(block(locate(world.maxx, 1, 1), locate(world.maxx, world.maxy, 1))) ) + + + return + if ((src.timeleft <= 0 && src.timing && !( prison_entered ))) + src.timeup() + + sleep(10) + while(src.processing) + return + +/proc/meteor_wave() + if(!ticker || wavesecret) + return + + wavesecret = 1 + for(var/my = 1 to world.maxy) + spawn(rand(10,100)) + new /obj/meteor( locate(world.maxx, my, 1) ) + sleep(300) + wavesecret = 0 + +/datum/control/gameticker/proc/megamonkey_process() + + do + if (prob(2)) + spawn( 0 ) + new /obj/meteor( pick(block(locate(world.maxx, 1, 1), locate(world.maxx, world.maxy, 1))) ) + return + if (prob(10)) + spawn( 0 ) + new /obj/meteor/small( pick(block(locate(world.maxx, 1, 1), locate(world.maxx, world.maxy, 1))) ) + return + + check_win() + + sleep(50) + while(src.processing) + return + + +/datum/control/gameticker/proc/blob_process() + + do + if (prob(2)) + spawn( 0 ) + new /obj/meteor( pick(block(locate(world.maxx, 1, 1), locate(world.maxx, world.maxy, 1))) ) + return + if (prob(10)) + spawn( 0 ) + new /obj/meteor/small( pick(block(locate(world.maxx, 1, 1), locate(world.maxx, world.maxy, 1))) ) + return + + check_win() + + bloblife() + + blob_event() + + + sleep(10) + while(src.processing) + + return + + +/datum/control/gameticker/proc/extend_process() + + do + if (!( shuttle_frozen )) + if (src.timing == 1) + src.timeleft -= 10 + else + if (src.timing == -1.0) + src.timeleft += 10 + if (src.timeleft >= 6000) + src.timeleft = null + src.timing = 0 + if (prob(2)) + spawn( 0 ) + new /obj/meteor( pick(block(locate(world.maxx, 1, 1), locate(world.maxx, world.maxy, 1))) ) + return + if (prob(10)) + spawn( 0 ) + new /obj/meteor/small( pick(block(locate(world.maxx, 1, 1), locate(world.maxx, world.maxy, 1))) ) + return + if ((src.timeleft <= 0 && (src.timing && (!( prison_entered ) || src.shuttle_location == 1)))) + src.timeup() + + sleep(10) + while(src.processing) + return + +/datum/control/gameticker/proc/nuclear(z_level) + + if (src.mode != "nuclear") + return + if (z_level != 1) + return + spawn( 0 ) + src.objective = "Success" + world << "The Syndicate Operatives have destroyed Space Station 13!" + for(var/mob/human/H in world) + if ((H.client && findtext(H.rname, "Syndicate ", 1, null))) + if (H.stat != 2) + world << text("[] was []", H.key, H.rname) + else + world << text("[] was [] (Dead)", H.key, H.rname) + //Foreach goto(64) + src.timing = 0 + sleep(300) + if(config.loggame) world.log << "GAME: Syndicate success" + world.Reboot() + return + return + +//*****RM +/* + +/mob/verb/inv(var/mob/M) + set src = usr + + var/list/L = list() + L += src.contents + for(var/obj/item/weapon/storage/S in src.contents) + L += S.return_inv() + + + for(var/obj/O in L) + + world << "[O.name] - [O.type]" + +*/ + +/datum/control/gameticker/proc/timeup() + + + var/A = locate(/area/shuttle) + if (src.shuttle_location == shuttle_z) + world << "The emergency shuttle has docked with the station! You have 3 minutes to board the shuttle." + for(var/turf/T in A) + + if (T.z == shuttle_z) + for(var/atom/movable/AM as mob|obj in T) + AM.z = 1 + //Foreach goto(79) + var/turf/U = locate(T.x, T.y, shuttle_z) + U.oxygen = T.oxygen + U.oldoxy = T.oldoxy + U.tmpoxy = T.tmpoxy + U.poison = T.poison + U.oldpoison = T.oldpoison + U.tmppoison = T.tmppoison + U.co2 = T.co2 + U.oldco2 = T.oldco2 + U.tmpco2 = T.tmpco2 + + U.buildlinks() + //T = null + del(T) + //Foreach goto(45) + src.timeleft = 1800 + src.shuttle_location = 1 + switch(src.mode) + if("meteor") + spawn( 0 ) + meteor_process() + return + else + spawn( 0 ) + extend_process() + return + else + check_win() + return + +/datum/control/gameticker/proc/check_win() + + var/area/A = locate(/area/shuttle) + switch(src.mode) + if("traitor") + var/item = null + var/traitorwin = 1 + switch(src.objective) + if("alone") + for(var/mob/M in world) + if ((M != src.killer && M.client)) + if (M.stat != 2) + var/T = M.loc + if (!( istype(T, /turf) )) + else + if ((T in A)) + traitorwin = 0 + //Foreach goto(79) + if("assassinate") + if ((src.target && src.target.stat != 2)) + traitorwin = 0 + if("theft") + var/list/L = list( ) + if (src.killer) + L += src.killer.contents + for(var/obj/item/weapon/storage/S in src.killer.contents) + L += S.return_inv() + //Foreach goto(228) + for(var/obj/item/weapon/gift/G in src.killer.contents) + L += G.gift + //Foreach goto(271) + traitorwin = 0 + switch(src.theft_obj) + if("lasergun") + for(var/obj/item/weapon/gun/energy/laser_gun/O in L) + if (O.charges == 25) + traitorwin = 1 + else + //Foreach continue //goto(347) + item = "a fully loaded laser gun" + if("plasmabomb") + for(var/obj/item/weapon/assembly/r_i_ptank/O in L) + var/obj/item/weapon/tank/plasmatank/P = O.part3 + if ((P.gas.plasma >= 1600000.0 && P.gas:temperature >= 773)) // 500degC + traitorwin = 1 + else + //Foreach continue //goto(413) + item = "a fully armed and heated plasma bomb" + if("flashbang") + for(var/obj/item/weapon/flashbang/O in L) + traitorwin = 1 + + //Foreach goto(500) + item = "a flashbang" + if("captaincard") + for(var/obj/item/weapon/card/id/O in L) + if ((O.access_level == 5 && O.air_access == 5 && O.engine_access == 5 && O.lab_access == 5 && O.assignment == "Captain")) + traitorwin = 1 + else + //Foreach continue //goto(553) + item = "a captain's card with universal level 5 access" + if("sleepingpills") + for(var/obj/item/weapon/pill_canister/O in L) + for(var/obj/item/weapon/m_pill/sleep/P in O) + if (P.amount == 30) + traitorwin = 1 + else + //Foreach continue //goto(689) + //Foreach goto(658) + item = "a bottle of 30 sleeping pills" + if("pl_flask") + for(var/obj/item/weapon/flasks/O in L) + if (O.plasma == 500) + traitorwin = 1 + else + //Foreach continue //goto(758) + item = "a plasma flask for cryogenics (500 units of plasma)" + else + else + if (src.killer) + var/turf/T = src.killer.loc + if (!( istype(T, /turf) )) + traitorwin = 0 + else + if ((T in A)) + if (src.killer.stat == 2) + traitorwin = 0 + else + traitorwin = 0 + if (traitorwin) + world << text("The traitor ([]) wins!", src.killer.rname) + else + world << text("The Research Staff has stopped the traitor ([]) !", src.killer.rname) + switch(src.objective) + if("alone") + world << "The objective was to escape alone on the shuttle." + if("assassinate") + world << text("The objective was to assassinate [] and escape.", src.target) + if("theft") + world << text("The objective was to steal [] and escape.", item) + else + if("monkey") + var/monkeywin = 1 + for(var/mob/human/M in world) + if (M.stat != 2) + var/T = M.loc + if (istype(T, /turf)) + if ((T in A)) + monkeywin = 0 + //Foreach goto(999) + if (monkeywin) + monkeywin = 0 + for(var/mob/monkey/M in world) + if (M.stat != 2) + var/T = M.loc + if (istype(T, /turf)) + if ((T in A)) + monkeywin = 1 + //Foreach goto(1096) + if (monkeywin) + world << "The monkies have won!" + for(var/mob/monkey/M in world) + if (M.client) + world << text("[] was a monkey.", M.key) + //Foreach goto(1194) + else + world << "The Research Staff has stopped he monkey invasion!" + for(var/mob/human/M in world) + if (M.client) + world << text("[] was [].", M.key, M) + //Foreach goto(1254) + if("nuclear") + if (src.objective != "Success") + var/disk_on_shuttle = 0 + for(var/obj/item/weapon/disk/nuclear/N in world) + if (N.loc) + var/turf/T = get_turf(N) + if ((T in A)) + disk_on_shuttle = 1 + //Foreach goto(1327) + if (disk_on_shuttle) + world << "The Research Staff has stopped the Syndicate Operatives!" + for(var/mob/human/H in world) + if ((H.client && !( findtext(H.rname, "Syndicate ", 1, null) ))) + if (H.stat != 2) + world << text("[] was []", H.key, H.rname) + else + world << text("[] was [] (Dead)", H.key, H.rname) + //Foreach goto(1414) + else + world << "Neutral Victory" + world << "The Syndicate recovered the abandoned auth. disk but detonation of SS13 was averted. Next time, don't lose the disk!" + if("virus") + var/humanwin = 1 + var/list/shuttle = list( ) + for(var/mob/human/M in world) + var/T = M.loc + if (istype(T, /turf)) + if ((T in A)) + shuttle += M + if (M.virus > 0) + humanwin = 0 + //Foreach goto(1540) + var/dead = list( ) + var/alive = list( ) + var/escapees = list( ) + for(var/mob/M in world) + if (M.stat == 2) + if (M.client) + if (M.virus > 0) + dead += text("[] died. \red (Had Stage [] Infection)", M.rname, round(M.virus)) + else + dead += text("[] died.", M.rname) + else + if (shuttle.Find(M)) + if (M.virus > 0) + escapees += text("[] escaped on the shuttle. \red (Has Stage [] Infection)", M.rname, round(M.virus)) + else + escapees += text("[] escaped on the shuttle.", M.rname) + else + if (M.virus > 0) + alive += text("[] was left infected. \red (Has Stage [] Infection)", M.rname, round(M.virus)) + else + alive += text("[] was left to be infected on Space Station 13.", M.rname) + //Foreach goto(1653) + if (humanwin) + world << "The Research Staff have won!" + else + world << "The Virus has won!" + for(var/I in escapees) + world << text("[]", I) + //Foreach goto(1851) + for(var/I in alive) + world << text("[]", I) + //Foreach goto(1883) + for(var/I in dead) + world << text("[]", I) + //Foreach goto(1915) + if("meteor") + var/list/L = list( ) + for(var/mob/M in world) + if (M.client) + if (M.stat != 2) + var/T = M.loc + if ((T in A)) + L[text("[]", M.rname)] = "shuttle" + else + if (istype(T, /obj/machinery/pod)) + L[text("[]", M.rname)] = "pod" + else + L[text("[]", M.rname)] = "alive" + //Foreach goto(1955) + if (L.len) + world << "\blue The following survived the meteor attack!" + for(var/I in L) + var/tem = L[text("[]", I)] + switch(tem) + if("shuttle") + world << text("\t [] made it to the shuttle!", I) + if("pod") + world << text("\t [] at least made it to an escape pod!", I) + if("alive") + world << text("\t [] at least is alive.", I) + else + //Foreach goto(2092) + else + world << "\blue No one survived the meteor attack!" + if("megamonkey") + var/success = 1 + for(var/mob/megamonkey/M in world) + if(M.stat == 0 && M.z == 1) // check for concious, alive monkeys in SS13 maplevel + success = 0 + break + + if(success) + world << "The humans have won!" + world << "The station has been retaken from the mutant monkeys" + if(config.loggame) world.log << "GAME: Humans have destroyed all monkeys" + sleep(300) + world.Reboot() + else + return + + if("blob") + + if(ticker.event == 4) + world << "The staff has lost!" + world << "The station was destroyed by Cent. Com." + + if(config.loggame) world.log << "GAME: Blob mode was lost." + ticker.event = 5 + sleep(300) + world.Reboot() + return + + if(ticker.event == 5) + return + + var/active = 0 + + for(var/obj/blob/B in blobs) + if(B.z == 1) + active = 1 + break + + + if(!active) + if(ticker.event < 3) + world << "The staff has won!" + world << "The alien organism has been eradicated from the station" + + var/datum/station_state/end_state = new /datum/station_state() + end_state.count() + + var/percent = round( 100.0 * start_state.score(end_state), 0.1) + + world << "The station is [percent]% intact." + + if(config.loggame) world.log << "GAME: Blob mode was won with station [percent]% intact." + + ticker.event = 5 + sleep(300) + world.Reboot() + else + world << "The staff has lost!" + world << "The alien organism has been eradicated from the station, but directive 7-12 has already been issued." + + if(config.loggame) world.log << "GAME: Blob mode was lost after eradicating blob too late." + + ticker.event = 5 + sleep(300) + world.Reboot() + return + return + + else + var/list/L = list( ) + for(var/mob/M in world) + if (M.client) + if (M.stat != 2) + var/T = M.loc + if ((T in A)) + L[text("[]", M.rname)] = "shuttle" + else + if (istype(T, /obj/machinery/pod)) + L[text("[]", M.rname)] = "pod" + else + L[text("[]", M.rname)] = "alive" + //Foreach goto(2200) + if (L.len) + world << "\blue The game has ended!" + for(var/I in L) + var/tem = L[text("[]", I)] + switch(tem) + if("shuttle") + world << text("\t [] has left on the shuttle!", I) + if("pod") + world << text("\t [] has fled on an escape pod!", I) + if("alive") + world << text("\t [] decided to stay on the station.", I) + else + //Foreach goto(2337) + else + world << "\blue No one lived!" + if (src.shuttle_location != shuttle_z) + for(var/turf/T in A) + if (T.z == 1) + for(var/atom/movable/AM as mob|obj in T) + AM.z = shuttle_z + //Foreach goto(2483) + var/turf/U = locate(T.x, T.y, shuttle_z) + U.oxygen = T.oxygen + U.oldoxy = T.oldoxy + U.tmpoxy = T.tmpoxy + U.poison = T.poison + U.oldpoison = T.oldpoison + U.tmppoison = T.tmppoison + U.co2 = T.co2 + U.oldco2 = T.oldco2 + U.tmpco2 = T.tmpco2 + + U.buildlinks() + //T = null + del(T) + //Foreach goto(2449) + sleep(300) + if(config.loggame) world.log << "GAME: Rebooting due to end of game" + world.Reboot() + return + +/datum/control/gameticker/process() + + shuttle_location = shuttle_z + + world.update_stat() + world << "Welcome to the Space Station 13!\n\n" + + src.mode = master_mode + switch(src.mode) + if("secret") + src.mode = config.pickmode() + world << "The current game mode is - Secret!" + world << "The game will pick between meteor, traitor, blob, or monkey mode, or no mode!" + if("random") + src.mode = config.pickmode() + world << "The current game mode is - Random" + world << "The game has picked mode: \red [src.mode]" + if("sandbox") + world << "The current game mode is - Sandbox!" + world << "Build your own station with the sandbox-panel command!" + for(var/mob/M in world) + if(M.client) + M.CanBuild() + if("traitor") + world << "The current game mode is - Traitor!" + world << "There is a traitor among the researchers. You can't let him escape alone!" + if("monkey") + world << "The current game mode is - Monkey!" + world << "Some of your crew members have been infected by a mutageous virus!" + world << "Escape on the shuttle but the humans have precedence!" + if("virus") + world << "The current game mode is - Virus!" + world << "Some of your crew members have been infected by a debilatating virus!" + world << "How many can escape alive? No one with the virus can escape!" + if("extended") + world << "The current game mode is - Extended Role-Playing!" + world << "Just have fun and role-play!" + if("megamonkey") + world << "The current game mode is - Mega Monkey!" + world << "Retake the station from the mutant monkeys!" + world << "You must disable or kill all monkeys on the station to win." + if("blob") + world << "The current game mode is - Blob!" + world << "A dangerous alien organism is rapidly spreading throughout the station!" + world << "You must kill it all while minimizing the damage to the station." + if("nuclear") + world << "The current game mode is - Nuclear Emergency!" + world << "A Syndicate Strike Force has landed on SS13!" + world << "A nuclear explosive was being transported by Nanotrasen to a military base. The transport ship mysteriously lost contact with Space Traffic Control (STC). About that time a strange disk was discovered around SS13. It was identified by Nanotrasen as a nuclear auth. disk and now Syndicate Operatives have arrived to retake the disk and detonate SS13! Also, msot likely Syndicate star ships are in the vicinity so take care not to lose the disk!\nSyndicate: Reclaim the disk and detonate the nuclear bomb anywhere on SS13.\nPersonell: Hold the disk and escape with the disk on the shuttle!" + var/list/mobs = list( ) + for(var/mob/human/M in world) + if ((M.client && M.start)) + mobs += M + //Foreach goto(260) + var/obj/O = locate("landmark*CTF-rogue") + if (mobs.len >= 4) + var/amount = round((mobs.len - 1) / 3) + 1 + amount = min(5, amount) + while(amount > 0) + amount-- + var/mob/human/H = pick(mobs) + mobs -= H + if (istype(H, /mob/human)) + H.loc = O.loc + if (src.killer) + H.rname = text("Syndicate Operative #[]", amount + 1) + else + H.rname = "Syndicate Leader" + src.killer = H + H.already_placed = 1 + //H.w_uniform = null + del(H.w_uniform) + H.w_uniform = new /obj/item/weapon/clothing/under/black( H ) + H.w_uniform.layer = 20 + //H.shoes = null + del(H.shoes) + H.shoes = new /obj/item/weapon/clothing/shoes/black( H ) + H.shoes.layer = 20 + H.gloves = new /obj/item/weapon/clothing/gloves/swat( H ) + H.gloves.layer = 20 + H.wear_suit = new /obj/item/weapon/clothing/suit/armor( H ) + H.wear_suit.layer = 20 + H.head = new /obj/item/weapon/clothing/head/swat_hel( H ) + H.head.layer = 20 + H.glasses = new /obj/item/weapon/clothing/glasses/sunglasses( H ) + H.glasses.layer = 20 + H.back = new /obj/item/weapon/storage/backpack( H ) + H.back.layer = 20 + var/obj/item/weapon/ammo/a357/W = new /obj/item/weapon/ammo/a357( H.back ) + W.layer = 20 + W = new /obj/item/weapon/m_pill/cyanide( H.back ) + W.layer = 20 + var/obj/item/weapon/gun/revolver/G = new /obj/item/weapon/gun/revolver( H ) + G.bullets = 7 + G.layer = 20 + H.belt = G + var/obj/item/weapon/radio/R = new /obj/item/weapon/radio/headset( H ) + R.freq = 146.5 + R.layer = 20 + H.w_radio = R + if("meteor") + world << "The current game mode is - Meteor!" + world << "The space station has been stuck in a major meteor shower. You must escape from the station or at least live." + else + world << "Now dispensing all identification cards." + if(config.loggame) world.log << "GAME: starting game of [src.mode]" + DivideOccupations() + for(var/obj/manifest/M in world) + M.manifest() + //Foreach goto(837) + for(var/mob/human/H in world) + if (H.start) + reg_dna[text("[]", H.primary.uni_identity)] = H.name + //Foreach goto(878) + data_core.manifest() + switch(src.mode) + if("traitor") + var/list/mobs = list( ) + Label_970: + for(var/mob/M in world) + if ((M.client && M.start)) + mobs += M + //Foreach goto(983) + if (!( mobs.len )) + sleep(300) + goto Label_970 + ticker.killer = pick(mobs) + mobs -= src.killer + src.objective = pick("assassinate", "alone", "theft") + if ( mobs.len < 1 ) + src.objective = "alone" + var/item = null + switch(src.objective) + if("alone") + src.killer << "You are the traitor! Be the lone survivor on the emergency shuttle." + src.killer.memory += "Objective: Be the only person on the emergency shuttle." + if("assassinate") + src.target = pick(mobs) + var/t1 = null + if (prob(25)) + t1 = src.target.name + else + for(var/datum/data/record/R in data_core.general) + if (R.fields["name"] == src.target.name) + t1 = text(" the []", R.fields["rank"]) + //Foreach goto(1193) + src.killer << text("You are the traitor! You must assassinate [] and then escape.", t1) + src.killer << "You don't have to be the lone survivor. Just don't get caught. Just escape!" + src.killer.memory += text("Objective: Assassinate [] and escape.", t1) + if("theft") + src.theft_obj = pick("lasergun", "flashbang", "plasmabomb", "captaincard", "sleepingpills", "pl_flask") + switch(src.theft_obj) + if("lasergun") + item = "a fully loaded laser gun" + if("flashbang") + item = "a flashbang" + if("plasmabomb") + item = "a fully armed and heated plasma bomb" + if("captaincard") + item = "a captain's card with universal level 5 access" + if("sleepingpills") + item = "a bottle of 30 sleeping pills" + if("pl_flask") + item = "a plasma flask for cryogenics (500 units of plasma)" + else + src.killer << text("You are the traitor! You must steal [] and then escape.", item) + src.killer << "You don't have to be the lone survivor. Just don't get caught. Just escape!" + src.killer.memory += text("Objective: Steal [] and escape.", item) + else + var/backup = mobs + spawn( 100 ) + var/obj/traitor_item = new /obj/item/weapon/syndicate_uplink( src.killer.loc ) + if ((!( src.killer.l_store ) && src.killer.w_uniform)) + traitor_item.loc = src.killer + src.killer.l_store = traitor_item + traitor_item.layer = 20 + return + spawn( rand(600, 1800) ) + var/dat = "Cent. Com. Update Enemy communication intercept. Security Level Elevated
    " + switch(src.objective) + if("alone") + dat += "\red Transmission suggests future attempts of hijacking of emergency shuttle.
    " + if("assassinate") + dat += "\red Transmission suggests future attempts of assassinating of key personnel.
    " + if (prob(50)) + var/t1 = null + for(var/datum/data/record/R in data_core.general) + if (R.fields["name"] == src.target.name) + t1 = text(" the []", R.fields["rank"]) + //Foreach goto(1612) + if (prob(70)) + dat += text("\red Perceived target: [] - Position: [] ([]% certainty)
    ", src.target.rname, t1, rand(30, 100)) + else + var/mob/temp = pick(backup) + dat += text("\red Perceived target: [] - Position: [] ([]% certainty)
    ", temp.rname, t1, rand(10, 95)) + if("theft") + dat += "\red Transmission suggests future attempts of theft of critical items.
    " + if (prob(50)) + dat += text("\red Perceived target: []
    ", item) + else + if (prob(10)) + dat += text("\red Transmission names enemy operative: [] ([]% certainty)
    ", src.killer.rname, rand(30, 100)) + else + var/mob/M = pick(backup) + dat += text("\red Transmission names enemy operative: [] ([]% certainty)
    ", M.rname, rand(10, 95)) + for(var/obj/machinery/computer/communications/C in world) + if(! (C.stat | (BROKEN&NOPOWER) ) ) + var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( C.loc ) + P.name = "paper- 'Cent. Com. Comm. Intercept Summary'" + P.info = dat + //Foreach goto(1830) + world << "Cent. Com. Update Enemy communication intercept. Security Level Elevated" + world << "\red Summary downloaded and printed out at all communications consoles." + return + mobs += src.killer + spawn( 0 ) + extend_process() + return + if("meteor") + spawn( 0 ) + meteor_process() + return + if("extended") + spawn( 0 ) + extend_process() + return + if("monkey") + spawn( 50 ) + var/list/mobs = list( ) + for(var/mob/human/M in world) + if ((M.client && M.start)) + mobs += M + //Foreach goto(1974) + if (mobs.len >= 3) + var/amount = round((mobs.len - 1) / 3) + 1 + amount = min(4, amount) + while(amount > 0) + var/mob/human/H = pick(mobs) + H.monkeyize() + mobs -= H + amount-- + return + spawn( 0 ) + src.extend_process() + return + if("megamonkey") + spawn( 1 ) + for(var/mob/monkey/M in world) + del(M) + + for(var/turf/T in monkeystart) + new /mob/megamonkey(T) + + return + + spawn( 50 ) + src.megamonkey_process() + return + if("blob") + + spawn(10) + start_state = new /datum/station_state() + start_state.count() + + spawn(20) + var/turf/T = pick(blobstart) + + blobs = list() + new /obj/blob(T) + + blob_process() + return + + + + + /*spawn( rand(600, 1800) ) + var/dat = "Cent. Com. Update Enemy communication intercept. Security Level Elevated
    " + switch(src.objective) + if("alone") + dat += "\red Transmission suggests future attempts of hijacking of emergency shuttle.
    " + if("assassinate") + dat += "\red Transmission suggests future attempts of assassinating of key personnel.
    " + if (prob(50)) + var/t1 = null + for(var/datum/data/record/R in data_core.general) + if (R.fields["name"] == src.target.name) + t1 = text(" the []", R.fields["rank"]) + //Foreach goto(1612) + if (prob(70)) + dat += text("\red Perceived target: [] - Position: [] ([]% certainty)
    ", src.target.rname, t1, rand(30, 100)) + else + var/mob/temp = pick(backup) + dat += text("\red Perceived target: [] - Position: [] ([]% certainty)
    ", temp.rname, t1, rand(10, 95)) + if("theft") + dat += "\red Transmission suggests future attempts of theft of critical items.
    " + if (prob(50)) + dat += text("\red Perceived target: []
    ", item) + else + if (prob(10)) + dat += text("\red Transmission names enemy operative: [] ([]% certainty)
    ", src.killer.rname, rand(30, 100)) + else + var/mob/M = pick(backup) + dat += text("\red Transmission names enemy operative: [] ([]% certainty)
    ", M.rname, rand(10, 95)) + for(var/obj/machinery/computer/communications/C in world) + var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( C.loc ) + P.name = "paper- 'Cent. Com. Comm. Intercept Summary'" + P.info = dat + //Foreach goto(1830) + world << "Cent. Com. Update Enemy communication intercept. Security Level Elevated" + world << "\red Summary downloaded and printed out at all communications consoles."*/ + + if("nuclear") + spawn( 50 ) + var/obj/L = locate("landmark*Nuclear-Disk") + new /obj/item/weapon/disk/nuclear( L.loc ) + L = locate("landmark*Nuclear-Closet") + new /obj/closet/syndicate/nuclear( L.loc ) + L = locate("landmark*Nuclear-Bomb") + var/obj/machinery/nuclearbomb/NB = new /obj/machinery/nuclearbomb( L.loc ) + NB.r_code = text("[]", rand(10000, 99999.0)) + src.killer.memory += text("Syndicate Nuclear Bomb Code: []
    ", NB.r_code) + src.killer << text("The nuclear authorization code is: []\]", NB.r_code) + src.killer << text("Nuclear Explosives 101:\n\tHello and thank you for choosing the Syndicate for your nuclear information needs.\nToday's crash course will deal with the operation of a Fusion Class Nanotrasen made Nuclear Device.\nFirst and foremost, DO NOT TOUCH ANYTHING UNTIL THE BOMB IS IN PLACE.\nPressing any button on the compacted bomb will cause it to extend and bolt itself into place.\nIf this is done to unbolt it one must compeltely log in which at this time may not be possible.\nTo make the device functional:\n1. Place bomb in designated detonation zone\n2. Extend and anchor bomb (attack with hand).\n3. Insert Nuclear Auth. Disk into slot.\n4. Type numeric code into keypad ([]).\n\tNote: If you make a mistake press R to reset the device.\n5. Press the E button to log onto the device\nYou now have activated the device. To deactivate the buttons at anytime for example when\nyou've already prepped the bomb for detonation remove the auth disk OR press the R ont he keypad.\nNow the bomb CAN ONLY be detonated using the timer. A manual det. is not an option.\n\tNote: Nanotrasen is a pain in the neck.\nToggle off the SAFETY.\n\tNote: You wouldn't believe how many Syndicate Operatives with doctorates have forgotten this step\nSo use the - - and + + to set a det time between 5 seconds and 10 minutes.\nThen press the timer toggle button to start the countdown.\nNow remove the auth. disk so that the buttons deactivate.\n\tNote: THE BOMB IS STILL SET AND WILL DETONATE\nNow before you remvoe the disk if you need to mvoe the bomb you can:\nToggle off the anchor, move it, and re-anchor.\n\nGood luck. Remember the order:\nDisk, Code, Safety, Timer, Disk, RUN\nGood luck.\nIntelligence Analysts believe that they are hiding the disk in the control room emergency room", NB.r_code) + return + spawn( 0 ) + src.extend_process() + return + if("virus") + spawn( 50 ) + var/list/mobs = list( ) + for(var/mob/human/M in world) + if ((M.client && M.start)) + mobs += M + //Foreach goto(2295) + if (mobs.len > 3) + var/amount = round(mobs.len / 3) + amount = min(3, amount) + while(amount > 0) + var/mob/human/H = pick(mobs) + H.virus = 1 + mobs -= H + amount-- + return + spawn( 0 ) + src.extend_process() + return + else + for(var/obj/start/S in world) + //S = null + del(S) + //Foreach goto(2445) + return + + +// ***** +// MAIN LOOP OF PROGRAM +// ***** + +/datum/control/cellular/process() + set invisibility = 0 + set background =1 + + Label_6: + + //world << "World.contents.len [world.contents.len]" + + + while(!( ticker )) + for(var/mob/M in world) + spawn( 0 ) + M.UpdateClothing() + return + //Foreach goto(28) + sleep(10) + + time = (++time %10) + + sun.calc_position() + + //if(Debug) + // world.log << "*** SoT ***" + // Air() + + for(var/turf/station/T in world) + if (T.updatecell) + T.updatecell() + if(!time) + T.conduction() + //if(Debug) + // world.log << "*** EoT ***" + // Air() + + //Foreach goto(73) + sleep(3) + for(var/mob/M in world) + spawn( 0 ) + M.Life() + return + //Foreach goto(126) + sleep(3) + for(var/obj/move/S in world) + S.process() + //Foreach goto(167) + sleep(2) + + //if(Debug) + // world.log << "*** SoP ***" + // Air() + + + for(var/obj/machinery/M in machines) + M.process() + + for(var/obj/machinery/M in gasflowlist) + M.gas_flow() + + for(var/datum/powernet/P in powernets) + P.reset() + + //if(Debug) + // world.log << "*** EoP ***" + // Air() + + //Foreach goto(213) + src.var_swap = !( src.var_swap ) + if (src.processing) + sleep(2) + goto Label_6 + return diff --git a/main-src/Code/chemical.dm b/main-src/Code/chemical.dm new file mode 100644 index 0000000..c3c7e33 --- /dev/null +++ b/main-src/Code/chemical.dm @@ -0,0 +1,793 @@ +#define REGULATE_RATE 5 + + +/obj/item/weapon/organ/proc/process() + + return + +/obj/item/weapon/organ/proc/receive_chem(chemical as obj) + + return + +/obj/item/weapon/organ/external/proc/take_damage(brute, burn) + + if ((brute <= 0 && burn <= 0)) + return 0 + if ((src.brute_dam + src.burn_dam + brute + burn) < src.max_damage) + src.brute_dam += brute + src.burn_dam += burn + else + var/can_inflict = src.max_damage - (src.brute_dam + src.burn_dam) + if (can_inflict) + if ((brute > 0 && burn > 0)) + var/ratio = brute / (brute + burn) + src.brute_dam += ratio * can_inflict + src.burn_dam += (1 - ratio) * can_inflict + else + if (brute > 0) + src.brute_dam += brute + else + src.burn_dam += burn + else + return 0 + return src.update_icon() + return + +/obj/item/weapon/organ/external/proc/heal_damage(brute, burn) + + src.brute_dam = max(0, src.brute_dam - brute) + src.burn_dam = max(0, src.brute_dam - burn) + return update_icon() + return + +// new damage icon system +// returns just the brute/burn damage code + +/obj/item/weapon/organ/external/proc/d_i_text() + + var/tburn = 0 + var/tbrute = 0 + + if(burn_dam ==0) + tburn =0 + else if (src.burn_dam < (src.max_damage * 0.25 / 2)) + tburn = 1 + else if (src.burn_dam < (src.max_damage * 0.75 / 2)) + tburn = 2 + else + tburn = 3 + + if (src.brute_dam == 0) + tbrute = 0 + else if (src.brute_dam < (src.max_damage * 0.25 / 2)) + tbrute = 1 + else if (src.brute_dam < (src.max_damage * 0.75 / 2)) + tbrute = 2 + else + tbrute = 3 + + return "[tbrute][tburn]" + +// new damage icon system +// adjusted to set d_i_state to brute/burn code only (without r_name0 as before) + +/obj/item/weapon/organ/external/proc/update_icon() + + var/n_is = "[d_i_text()]" + if (n_is != src.d_i_state) + src.d_i_state = n_is + return 1 + else + return 0 + return + +/obj/substance/proc/leak(turf) + + return + +/obj/substance/chemical/proc/volume() + + var/amount = 0 + for(var/item in src.chemicals) + var/datum/chemical/C = src.chemicals[item] + if (istype(C, /datum/chemical)) + amount += C.return_property("volume") + //Foreach goto(24) + return amount + return + +/obj/substance/chemical/proc/split(amount) + + var/obj/substance/chemical/S = new /obj/substance/chemical( null ) + var/tot_volume = src.volume() + if (amount > tot_volume) + amount = tot_volume + for(var/item in src.chemicals) + var/C = src.chemicals[item] + if (istype(C, /datum/chemical)) + S.chemicals[item] = C + src.chemicals[item] = null + //Foreach goto(60) + return S + else + if (tot_volume <= 0) + return S + else + for(var/item in src.chemicals) + var/datum/chemical/C = src.chemicals[item] + if (istype(C, /datum/chemical)) + var/datum/chemical/N = new C.type( null ) + C.copy_data(N) + var/amt = C.return_property("volume") * amount / tot_volume + C.moles -= amt * C.density / C.molarmass + if (C.moles == 0) + //C = null + del(C) + N.moles += amt * N.density / N.molarmass + S.chemicals[text("[]", N.name)] = N + //Foreach goto(161) + return S + return + +/obj/substance/chemical/proc/transfer_from(var/obj/substance/chemical/S as obj, amount) + + var/volume = src.volume() + var/s_volume = S.volume() + if (amount > s_volume) + amount = s_volume + if (src.maximum) + if (amount > (src.maximum - volume)) + amount = src.maximum - volume + if (amount >= s_volume) + for(var/item in S.chemicals) + var/datum/chemical/C = S.chemicals[item] + if (istype(C, /datum/chemical)) + var/datum/chemical/N = null + N = src.chemicals[item] + if (!( N )) + N = new C.type( null ) + C.copy_data(N) + N.moles += C.moles + //C = null + del(C) + //Foreach goto(106) + else + var/obj/substance/chemical/U = S.split(amount) + for(var/item in U.chemicals) + var/datum/chemical/C = U.chemicals[item] + if (istype(C, /datum/chemical)) + var/datum/chemical/N = src.chemicals[item] + if (!( N )) + N = new C.type( null ) + C.copy_data(N) + src.chemicals[item] = N + N.moles += C.moles + //C = null + del(C) + //Foreach goto(251) + //U = null + del(U) + var/datum/chemical/C = null + for(var/t in src.chemicals) + C = src.chemicals[text("[]", t)] + if (istype(C, /datum/chemical)) + C.react(src) + //Foreach goto(403) + return amount + return + +/obj/substance/chemical/proc/transfer_mob(var/mob/M as mob, amount) + + if (!( ismob(M) )) + return + var/obj/substance/chemical/S = src.split(amount) + for(var/item in S.chemicals) + var/datum/chemical/C = S.chemicals[item] + if (istype(C, /datum/chemical)) + C.injected(M) + //Foreach goto(44) + //S = null + del(S) + return + +/obj/substance/chemical/proc/dropper_mob(M as mob, amount) + + if (!( ismob(M) )) + return + var/obj/substance/chemical/S = src.split(amount) + for(var/item in S.chemicals) + var/datum/chemical/C = S.chemicals[item] + if (istype(C, /datum/chemical)) + C.injected(M, "eye") + //Foreach goto(44) + //S = null + del(S) + return + +/obj/substance/chemical/Del() + + for(var/item in src.chemicals) + //src.chemicals[item] = null + del(src.chemicals[item]) + //Foreach goto(17) + ..() + return + + + + +/* -------------------------- + +heat = amount * temperature(abs) + +heat is conserved between exchanges + +---------------------------- */ + +//fractional multipliers of heat +#define TURF_ADD_FRAC 0.95 //cooling due to release of gas into tile +#define TURF_TAKE_FRAC 1.06 //heating due to pressurization into pipework + +// Not used? +/obj/substance/gas/leak(T as turf) + + turf_add(T, src.co2 + src.oxygen + src.plasma + src.n2) + return + +/obj/substance/gas/proc/tot_gas() + + return src.co2 + src.oxygen + src.plasma + src.sl_gas + src.n2 + return + +/obj/substance/gas/proc/transfer_from(var/obj/substance/gas/target as obj, amount) + + if ((!( istype(target, /obj/substance/gas) ) || !( amount ))) + return + var/t1 = target.co2 + target.oxygen + target.plasma + target.sl_gas + target.n2 + if (!( t1 )) + return + if (amount > t1) + amount = t1 + var/t2 = src.co2 + src.oxygen + src.plasma + src.sl_gas + src.n2 + if (amount < 0) + amount = t1 + if ((src.maximum > 0 && (src.maximum - t2) < amount)) + amount = src.maximum - t2 + var/t_oxy = amount * target.oxygen / t1 + var/t_pla = amount * target.plasma / t1 + var/t_co2 = amount * target.co2 / t1 + var/t_sl_gas = amount * target.sl_gas / t1 + var/t_n2 = amount * target.n2 / t1 + var/t3 = t1 + t2 + var/t4 = t2 * src.temperature + var/t5 = t1 * target.temperature + if (t3 > 0) + src.temperature = (t4 + t5) / t3 + src.co2 += t_co2 + src.oxygen += t_oxy + src.plasma += t_pla + src.sl_gas += t_sl_gas + src.n2 += t_n2 + target.oxygen -= t_oxy + target.co2 -= t_co2 + target.plasma -= t_pla + target.sl_gas -= t_sl_gas + target.n2 -= t_n2 + return + +/obj/substance/gas/proc/clear() + + src.oxygen = 0 + src.plasma = 0 + src.co2 = 0 + src.sl_gas = 0 + src.n2 = 0 + return + +/obj/substance/gas/proc/has_gas() + + return (src.co2 + src.oxygen + src.plasma + src.sl_gas + src.n2) > 0 + return + +/obj/substance/gas/proc/turf_add(var/turf/target as turf, amount) + + if (((!( istype(target, /turf) ) && !( istype(target, /obj/move) )) || !( amount ))) + return + if (locate(/obj/move, target)) + target = locate(/obj/move, target) + var/t2 = src.co2 + src.oxygen + src.plasma + src.sl_gas + src.n2 + if (amount < 0) + amount = src.plasma + src.oxygen + src.co2 + src.sl_gas + src.n2 + if (!( t2 )) + return + var/t_oxy = amount * src.oxygen / t2 + var/t_pla = amount * src.plasma / t2 + var/t_co2 = amount * src.co2 / t2 + var/t_sl_gas = amount * src.sl_gas / t2 + var/t_n2 = amount * src.n2 / t2 + + src.co2 -= t_co2 + src.oxygen -= t_oxy + src.plasma -= t_pla + src.sl_gas -= t_sl_gas + src.n2 -= t_n2 + + var/ttotal = target.tot_gas() + + target.oxygen += t_oxy + target.co2 += t_co2 + target.poison += t_pla + target.sl_gas += t_sl_gas + target.n2 += t_n2 + + target.temp = ( target.temp * ttotal + (amount * temperature)*TURF_ADD_FRAC ) / (ttotal + amount) + //target.heat += amount * src.temperature + target.res_vars() + + return + +/obj/substance/gas/proc/turf_add_all_oxy(var/turf/target as turf) + + var/t_gas = tot_gas() + var/t_turf = target.tot_gas() + + if(t_gas>0) + + var/heat_change = oxygen * temperature + + //target.heat += heat_change + if( (t_turf + oxygen) >0 ) + target.temp = ( target.temp * t_turf + heat_change ) / ( t_turf + oxygen ) + + target.oxygen += oxygen + + + var/nonoxy = tot_gas() - oxygen + + if(nonoxy>0) + + temperature = ( temperature * tot_gas() - heat_change )/(nonoxy) + else + temperature = T20C + + oxygen = 0 + target.res_vars() + + return + +/obj/substance/gas/proc/turf_take(var/turf/target as turf, amount) + + if (((!( istype(target, /turf) ) && !( istype(target, /obj/move) )) || !( amount ))) + return + if (locate(/obj/move, target)) + target = locate(/obj/move, target) + + var/t1 = target.co2 + target.oxygen + target.poison + target.sl_gas + target.n2 + if (!( t1 )) + return + var/t2 = src.co2 + src.oxygen + src.plasma + src.sl_gas + src.n2 + + if (amount > 0) + if ((src.maximum > 0 && (src.maximum - t2) < amount)) + amount = src.maximum - t2 + else + amount = src.plasma + src.oxygen + src.co2 + src.sl_gas + src.n2 + + if (amount > t1) + amount = t1 + + var/turf_total = target.poison + target.oxygen + target.co2 + target.sl_gas + target.n2 + +// var/heat_gain = (turf_total ? amount / turf_total * target.heat : 0) +// var/temp_gain = (turf_total ? target.heat / turf_total : 0) + + var/heat_gain = (turf_total ? amount * target.temp : 0) + + + var/t_oxy = amount * target.oxygen / t1 + var/t_pla = amount * target.poison / t1 + var/t_co2 = amount * target.co2 / t1 + var/t_sl_gas = amount * target.sl_gas / t1 + var/t_n2 = amount * target.n2 / t1 + + + /* + + var/t3 = t1 + t2 + var/t4 = t2 * src.temperature + var/t5 = t1 * temp_gain + if (t3 > 0) + src.temperature = (t4 + t5) / t3 + else + src.temperature = 0 + */ + if(t2+amount>0) + temperature = (temperature*t2 + heat_gain * TURF_TAKE_FRAC)/(t2+amount) + + + src.co2 += t_co2 + src.oxygen += t_oxy + src.plasma += t_pla + src.sl_gas += t_sl_gas + src.n2 += t_n2 + + target.oxygen -= t_oxy + target.co2 -= t_co2 + target.poison -= t_pla + target.sl_gas -= t_sl_gas + target.n2 -= t_n2 + //target.heat -= heat_gain // no temp change; we just take a proportional amount of all gases + target.res_vars() + return + +/* original version +/obj/substance/gas/proc/extract_toxs(var/turf/target as turf) + + if ((!( istype(target, /turf) ) && !( istype(target, /obj/move) ))) + return + if (locate(/obj/move, target)) + target = locate(/obj/move, target) + var/co2_diff = target.co2 - 0 + var/oxy_diff = target.oxygen - O2STANDARD + var/no2_diff = target.sl_gas - 0 + var/n2_diff = target.n2 - N2STANDARD + var/plas_diff = target.poison - 0 + if (co2_diff < 0) + co2_diff = 0 + if (oxy_diff < 0) + oxy_diff = 0 + if (no2_diff < 0) + no2_diff = 0 + if (n2_diff < 0) + n2_diff = 0 + if (plas_diff < 0) + plas_diff = 0 + var/turf_total = target.poison + target.oxygen + target.co2 + target.sl_gas + target.n2 + var/air_total = co2_diff + oxy_diff + no2_diff + n2_diff + plas_diff + var/heat_gain = (turf_total ? air_total / turf_total * target.heat : null) + var/temp_gain = (turf_total ? target.heat / turf_total + TD0 : 0) + src.co2 += co2_diff + src.oxygen += oxy_diff + src.sl_gas += no2_diff + src.n2 += n2_diff + src.plasma += plas_diff + target.co2 -= co2_diff + target.oxygen -= oxy_diff + target.sl_gas -= no2_diff + target.n2 -= n2_diff + target.poison -= plas_diff + var/t3 = turf_total + air_total + var/t4 = turf_total * src.temperature + var/t5 = air_total * temp_gain + if (t3 > 0) + src.temperature = (t4 + t5) / t3 + else + src.temperature = 0 + target.heat -= heat_gain + target.res_vars() + return +*/ + + + +// modified version +/obj/substance/gas/proc/extract_toxs(var/turf/target as turf) + if ((!( istype(target, /turf) ) && !( istype(target, /obj/move) ))) + return + if (locate(/obj/move, target)) + target = locate(/obj/move, target) + var/co2_diff = max(0, target.co2 - 0) + var/oxy_diff = max(0,target.oxygen - O2STANDARD) + var/no2_diff = max(0, target.sl_gas - 0) + var/n2_diff = max(0,target.n2 - N2STANDARD) + var/plas_diff = max(0,target.poison - 0) + + var/turf_total = target.poison + target.oxygen + target.co2 + target.sl_gas + target.n2 + var/air_total = co2_diff + oxy_diff + no2_diff + n2_diff + plas_diff + + + var/heat_gain = (turf_total ? air_total * target.temp : null) + //var/temp_gain = (turf_total ? target.heat / turf_total + TD0 : 0) + + src.co2 += co2_diff + src.oxygen += oxy_diff + src.sl_gas += no2_diff + src.n2 += n2_diff + src.plasma += plas_diff + + target.co2 -= co2_diff + target.oxygen -= oxy_diff + target.sl_gas -= no2_diff + target.n2 -= n2_diff + target.poison -= plas_diff + + + var/gasheat1 = temperature * tot_gas() + var/gastot2 = tot_gas() + air_total + + if(gastot2 > 0) + temperature = (gasheat1 + heat_gain)/( gastot2 ) + else + temperature = T20C + + var/turftot2 = turf_total - air_total + if(turftot2>0) + target.temp = ( target.temp*turf_total - heat_gain)/(turftot2) + + //target.heat -= heat_gain + + //make stored temperature closer to nominal (20C) + src.temperature += (T20C - src.temperature) / REGULATE_RATE + + + target.res_vars() + return + +// + + +/obj/substance/gas/proc/merge_into(var/obj/substance/gas/target as obj) + + if (!( istype(target, /obj/substance/gas) )) + return + var/s_tot = src.tot_gas() + var/t_tot = target.tot_gas() + var/amount = s_tot + t_tot + if (amount > 0 && t_tot > 0) + src.temperature = (s_tot*src.temperature + t_tot*target.temperature) / amount + + src.co2 += target.co2 + src.oxygen += target.oxygen + src.plasma += target.plasma + src.sl_gas += target.sl_gas + src.n2 += target.n2 + target.oxygen = 0 + target.plasma = 0 + target.co2 = 0 + target.sl_gas = 0 + target.n2 = 0 + return + + +// sets src to a given fraction of the gas (without affecting the gas) +/obj/substance/gas/proc/set_frac(var/obj/substance/gas/gas, amount) + + var/tot = gas.tot_gas() + + if(tot>0) // if gas is 0, do nothing + + var/frac = amount / tot + + src.oxygen = frac * gas.oxygen + src.co2 = frac * gas.co2 + src.plasma = frac * gas.plasma + src.sl_gas = frac * gas.sl_gas + src.n2 = frac * gas.n2 + + src.temperature = gas.temperature + + +// same as merge_into except the target is not zeroed +// calc temperature from added gas +// delta should always be positive +/obj/substance/gas/proc/add_delta(var/obj/substance/gas/target) + + + var/s_tot = src.tot_gas() + var/t_tot = target.tot_gas() + + if(t_tot < 0) + world.log << "Called add_delta with negative delta: [src.loc] : [src.tostring()] + [target.tostring()]" + + var/amount = s_tot + t_tot + if (amount>0) // only set temp if adding gas, not subtracting + src.temperature = (s_tot*src.temperature + t_tot*target.temperature) / amount + + src.co2 += target.co2 + src.oxygen += target.oxygen + src.plasma += target.plasma + src.sl_gas += target.sl_gas + src.n2 += target.n2 + + +// subtract a (+ve) delta. Do not affect temperature since just a proportional change +/obj/substance/gas/proc/sub_delta(var/obj/substance/gas/target) + + src.co2 -= target.co2 + src.oxygen -= target.oxygen + src.plasma -= target.plasma + src.sl_gas -= target.sl_gas + src.n2 -= target.n2 + + + + +// replaces gas values of src with n - updates during gas_flow step +/obj/substance/gas/proc/replace_by(var/obj/substance/gas/n) + oxygen = n.oxygen + plasma = n.plasma + sl_gas = n.sl_gas + co2 = n.co2 + n2 = n.n2 + temperature = n.temperature + + //do nothing to values of n + +// relative "specific heat capacity" of gas contents +/obj/substance/gas/proc/shc() + return 2*co2 + 1.5*n2 + oxygen + 0.5*sl_gas + 1.2*plasma + + +/datum/chemical/pathogen/proc/process(source as obj) + + return + +/datum/chemical/proc/react(S as obj) + + return + +/datum/chemical/proc/react_organ(O as obj) + + return + +/datum/chemical/proc/injected(M as mob, zone) + + if (zone == null) + zone = "body" + return + +/datum/chemical/proc/copy_data(var/datum/chemical/C) + + C.molarmass = src.molarmass + C.density = src.density + C.chem_formula = src.chem_formula + return + +/datum/chemical/proc/return_property(property) + + switch(property) + if("moles") + return src.moles + if("mass") + return src.moles * src.molarmass + if("density") + return src.density + if("volume") + return src.moles * src.molarmass / src.density + else + return + +/datum/chemical/pl_coag/react(obj/substance/chemical/S as obj) + + var/datum/chemical/l_plas/C = S.chemicals["plasma-l"] + if (istype(C, /datum/chemical/l_plas)) + if (C.moles < src.moles) + src.moles -= C.moles + var/datum/chemical/waste/W = S.chemicals["waste-l"] + if (istype(W, /datum/chemical/waste)) + W.moles += C.moles + else + W = new /datum/chemical/waste( ) + S.chemicals["waste-l"] = W + W.moles += C.moles + //C = null + del(C) + else + C.moles -= src.moles + var/datum/chemical/waste/W = S.chemicals["waste-l"] + if (istype(W, /datum/chemical/waste)) + W.moles += src.moles + else + W = new /datum/chemical/waste( ) + S.chemicals["waste-l"] = W + W.moles += src.moles + src.moles = 0 + if (src.moles <= 0) + //SN src = null + del(src) + return + return + +/datum/chemical/pl_coag/injected(var/mob/M as mob, zone) + + var/volume = src.return_property("volume") + switch(zone) + if("eye") + M.eye_stat -= volume * 2 + M.eye_stat = max(0, M.eye_stat) + else + if (M.health >= 0) + if ((volume * 4) >= M.toxloss) + M.toxloss = 0 + else + M.toxloss -= volume * 4 + M.antitoxs += volume * 180 + M.health = 100 - M.oxyloss - M.toxloss - M.fireloss - M.bruteloss + return + +/datum/chemical/l_plas/injected(var/mob/M as mob, zone) + + var/volume = src.return_property("volume") + switch(zone) + if("eye") + M.eye_stat += volume * 5 + M.eye_blurry += volume * 3 + if (M.eye_stat >= 20) + M << "\red Your eyes start to burn badly!" + M.disabilities |= 1 + if (prob(M.eye_stat - 20 + 1)) + M << "\red You go blind!" + M.sdisabilities |= 1 + else + M.plasma += volume * 6 + for(var/obj/item/weapon/implant/tracking/T in M) + M.plasma += 1 + //T = null + del(T) + //Foreach goto(133) + return + +/datum/chemical/s_tox/injected(var/mob/M as mob, zone) + + var/volume = src.return_property("volume") + switch(zone) + if("eye") + M.eye_blind += volume * 10 + M.eye_blurry += volume * 15 + else + M.paralysis += volume * 12 + M.stat = 1 + return + +/datum/chemical/epil/injected(var/mob/M as mob, zone) + + var/volume = src.return_property("volume") + switch(zone) + if("eye") + M.eye_blind += volume * 5 + M.eye_stat += volume * 2 + M.eye_blurry += volume * 20 + if (M.eye_stat >= 20) + M << "\red Your eyes start to burn badly!" + M.disabilities |= 1 + if (prob(M.eye_stat - 20 + 1)) + M << "\red You go blind!" + M.sdisabilities |= 1 + else + M.r_epil += volume * 60 + return + +/datum/chemical/ch_cou/injected(var/mob/M as mob, zone) + + var/volume = src.return_property("volume") + switch(zone) + if("eye") + M.eye_blind += volume * 2 + M.eye_stat += volume * 3 + M.eye_blurry += volume * 20 + M << "\red Your eyes start to burn badly!" + M.disabilities |= 1 + if (prob(M.eye_stat - 20 + 1)) + M << "\red You go blind!" + M.sdisabilities |= 1 + else + M.r_ch_cou += volume * 60 + return + +/datum/chemical/rejuv/injected(var/mob/M as mob, zone) + + var/volume = src.return_property("volume") + switch(zone) + if("eye") + M.eye_stat -= volume * 5 + M.eye_blurry += volume * 5 + M.eye_stat = max(0, M.eye_stat) + else + M.rejuv += volume * 3 + if (M.paralysis) + M.paralysis = 3 + if (M.weakened) + M.weakened = 3 + if (M.stunned) + M.stunned = 3 + return diff --git a/main-src/Code/colour2html.dm b/main-src/Code/colour2html.dm new file mode 100644 index 0000000..9b67178 --- /dev/null +++ b/main-src/Code/colour2html.dm @@ -0,0 +1,193 @@ + +/proc/colour2html(colour) + var/T + for(T in html_colours) + if (ckey(T) == ckey(colour)) + else + //Foreach continue //goto(12) + if (!( T )) + world.log << text("Warning! Could not find matching colour entry for '[]'.", colour) + return "#FFFFFF" + return "#" + uppertext(html_colours[text("[]", colour)]) + return + +/proc/HTMLAssociate(colour, html) + + if (html_colours.Find(colour)) + world.log << text("Changing [] from [] to []!", colour, html_colours[colour], html) + html_colours[colour] = html + return + +/proc/LoadHTMLAssociations() + + var/F = new /savefile( "s_html.sav" ) + F["html_colours"] >> html_colours + if (!( html_colours )) + html_colours = list( ) + if (!( html_colours.len )) + HTMLAssociate("aliceblue", "f0f8ff") + HTMLAssociate("antiquewhite", "faebd7") + HTMLAssociate("aqua", "00ffff") + HTMLAssociate("aquamarine", "7fffd4") + HTMLAssociate("azure", "f0ffff") + HTMLAssociate("beige", "f5f5dc") + HTMLAssociate("bisque", "ffe4c4") + HTMLAssociate("black", "000000") + HTMLAssociate("blanchedalmond", "ffebcd") + HTMLAssociate("blue", "0000ff") + HTMLAssociate("blueviolet", "8a2be2") + HTMLAssociate("brown", "a52a2a") + HTMLAssociate("burlywood", "deb887") + HTMLAssociate("cadetblue", "5f9ea0") + HTMLAssociate("chartreuse", "7fff00") + HTMLAssociate("chocolate", "d2691e") + HTMLAssociate("coral", "ff7f50") + HTMLAssociate("cornflowerblue", "6495ed") + HTMLAssociate("cornsilk", "fff8dc") + HTMLAssociate("crimson", "dc143c") + HTMLAssociate("cyan", "00ffff") + HTMLAssociate("darkblue", "00008b") + HTMLAssociate("darkcyan", "008b8b") + HTMLAssociate("darkgoldenrod", "b8b60b") + HTMLAssociate("darkgrey", "a9a9a9") + HTMLAssociate("darkgray", "a9a9a9") + HTMLAssociate("darkgreen", "006400") + HTMLAssociate("darkkhaki", "bdb76b") + HTMLAssociate("darkmagenta", "8b008b") + HTMLAssociate("darkolivegreen", "556b2f") + HTMLAssociate("darkorange", "ff8c00") + HTMLAssociate("darkorchid", "9932cc") + HTMLAssociate("darkred", "8b0000") + HTMLAssociate("darksalmon", "e9967a") + HTMLAssociate("darkseagreen", "8fbc8f") + HTMLAssociate("darkslateblue", "483d8b") + HTMLAssociate("darkslategrey", "2f4f4f") + HTMLAssociate("darkslategray", "2f4f4f") + HTMLAssociate("darkturquoise", "00ced1") + HTMLAssociate("darkviolet", "9400d3") + HTMLAssociate("deeppink", "ff1493") + HTMLAssociate("deepskyblue", "00bfff") + HTMLAssociate("dimgrey", "696969") + HTMLAssociate("dimgray", "696969") + HTMLAssociate("dodgerblue", "1e90ff") + HTMLAssociate("firebrick", "b22222") + HTMLAssociate("floralwhite", "fffaf0") + HTMLAssociate("forestgreen", "228b22") + HTMLAssociate("fuchsia", "ff00ff") + HTMLAssociate("gainsboro", "dcdcdc") + HTMLAssociate("ghostwhite", "f8f8ff") + HTMLAssociate("gold", "ffd700") + HTMLAssociate("goldenrod", "daa520") + HTMLAssociate("grey", "808080") + HTMLAssociate("gray", "808080") + HTMLAssociate("green", "008000") + HTMLAssociate("greenyellow", "adff2f") + HTMLAssociate("honeydew", "f0fff0") + HTMLAssociate("hotpink", "ff69b4") + HTMLAssociate("indianred", "cd5c5c") + HTMLAssociate("indigo", "4b0082") + HTMLAssociate("ivory", "fffff0") + HTMLAssociate("khaki", "f0e68c") + HTMLAssociate("lavender", "e6e6fa") + HTMLAssociate("lavenderblush", "fff0f5") + HTMLAssociate("lawngreen", "7cfc00") + HTMLAssociate("lemonchiffon", "fffacd") + HTMLAssociate("lightblue", "add8e6") + HTMLAssociate("lightcoral", "f08080") + HTMLAssociate("lightcyan", "e0ffff") + HTMLAssociate("lightgoldenrod", "fafad2") + HTMLAssociate("lightgreen", "90ee90") + HTMLAssociate("lightgrey", "d3d3d3") + HTMLAssociate("lightgray", "d3d3d3") + HTMLAssociate("lightpink", "ffb6c1") + HTMLAssociate("lightsalmon", "ffa07a") + HTMLAssociate("lightseagreen", "20b2aa") + HTMLAssociate("lightskyblue", "87cefa") + HTMLAssociate("lightslategrey", "778899") + HTMLAssociate("lightslategray", "778899") + HTMLAssociate("lightsteelblue", "b0c4de") + HTMLAssociate("lightyellow", "ffffe0") + HTMLAssociate("lime", "00ff00") + HTMLAssociate("limegreen", "32cd32") + HTMLAssociate("linen", "faf0e6") + HTMLAssociate("magenta", "ff00ff") + HTMLAssociate("maroon", "800000") + HTMLAssociate("mediumaquamarine", "66cdaa") + HTMLAssociate("mediumblue", "0000cd") + HTMLAssociate("mediumorchid", "ba55d3") + HTMLAssociate("mediumpurple", "9370db") + HTMLAssociate("mediumseagreen", "3cb371") + HTMLAssociate("mediumslateblue", "7b68ee") + HTMLAssociate("mediumspringgreen", "00fa9a") + HTMLAssociate("mediumturquoise", "48d1cc") + HTMLAssociate("mediumvioletred", "c71585") + HTMLAssociate("midnightblue", "191970") + HTMLAssociate("mintcream", "f5fffa") + HTMLAssociate("mistyrose", "ffe4e1") + HTMLAssociate("moccasin", "ffe4b5") + HTMLAssociate("navajowhite", "ffdead") + HTMLAssociate("navy", "000080") + HTMLAssociate("oldlace", "fdf5e6") + HTMLAssociate("olive", "808000") + HTMLAssociate("olivedrab", "6b8e23") + HTMLAssociate("orange", "ffa500") + HTMLAssociate("orangered", "ff4500") + HTMLAssociate("orchid", "da70d6") + HTMLAssociate("palegoldenrod", "eee8aa") + HTMLAssociate("palegreen", "98fb98") + HTMLAssociate("paleturquoise", "afeeee") + HTMLAssociate("palevioletred", "db7093") + HTMLAssociate("papayawhip", "ffefd5") + HTMLAssociate("peachpuff", "ffdab9") + HTMLAssociate("peru", "cd853f") + HTMLAssociate("pink", "ffc0cd") + HTMLAssociate("plum", "dda0dd") + HTMLAssociate("powderblue", "b0e0e6") + HTMLAssociate("purple", "800080") + HTMLAssociate("red", "ff0000") + HTMLAssociate("rosybrown", "bc8f8f") + HTMLAssociate("royalblue", "4169e1") + HTMLAssociate("saddlebrown", "8b4513") + HTMLAssociate("salmon", "fa8072") + HTMLAssociate("sandybrown", "f4a460") + HTMLAssociate("seagreen", "2e8b57") + HTMLAssociate("seashell", "fff5ee") + HTMLAssociate("sienna", "a0522d") + HTMLAssociate("silver", "c0c0c0") + HTMLAssociate("skyblue", "87ceed") + HTMLAssociate("slateblue", "6a5acd") + HTMLAssociate("slategrey", "708090") + HTMLAssociate("slategray", "708090") + HTMLAssociate("snow", "fffafa") + HTMLAssociate("springgreen", "00ff7f") + HTMLAssociate("steelblue", "4682b4") + HTMLAssociate("tan", "d2b48c") + HTMLAssociate("teal", "008080") + HTMLAssociate("thistle", "d8bfd8") + HTMLAssociate("tomato", "ff6347") + HTMLAssociate("turquoise", "40e0d0") + HTMLAssociate("violet", "ee82ee") + HTMLAssociate("wheat", "f5deb3") + HTMLAssociate("white", "ffffff") + HTMLAssociate("whitesmoke", "f5f5f5") + HTMLAssociate("yellow", "ffff00") + HTMLAssociate("yellowgreen", "a9cd32") + return + +/proc/SaveHTMLAssociations() + + var/F = new /savefile( "s_html.sav" ) + F["html_colours"] << html_colours + return + +/world/New() + + ..() + LoadHTMLAssociations() + return + +/world/Del() + + SaveHTMLAssociations() + ..() + return diff --git a/main-src/Code/computer.dm b/main-src/Code/computer.dm new file mode 100644 index 0000000..126d91c --- /dev/null +++ b/main-src/Code/computer.dm @@ -0,0 +1,1160 @@ +/obj/machinery/computer/security/New() + ..() + if(!maplevel) + src.verbs -= /obj/machinery/computer/security/verb/station_map + +/obj/machinery/computer/security/attack_paw(var/mob/user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/computer/security/attack_hand(var/mob/user as mob) + + if(stat & (NOPOWER|BROKEN) ) return + + var/list/L = list( ) + user.machine = src + for(var/obj/machinery/camera/C in world) + if (C.network == src.network) + L[text("[][]", C.c_tag, (C.status ? null : " (Deactivated)"))] = C + //Foreach goto(31) + L["Cancel"] = "Cancel" + var/t = input(user, "Which camera should you change to?") as null|anything in L + + if(!t) + user.machine = null + return 0 + + var/obj/machinery/camera/C = L[t] + if (t == "Cancel") + user.machine = null + return 0 + if ((get_dist(user, src) > 1 || user.machine != src || user.blinded || !( user.canmove ) || !( C.status ))) + return 0 + else + src.current = C + use_power(50) + spawn( 5 ) + attack_hand(user) + return + return + +/obj/machinery/computer/security/check_eye(var/mob/user as mob) + + if ((get_dist(user, src) > 1 || !( user.canmove ) || user.blinded || !( src.current ) || !( src.current.status ))) + return null + user.reset_view(src.current) + return 1 + return + +/obj/machinery/computer/meteorhit(var/obj/O as obj) + + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(17) + src.icon_state = "broken" + stat |= BROKEN + return + +/obj/machinery/computer/communications/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(58) + src.icon_state = "broken" + stat |= BROKEN + if(3.0) + if (prob(25)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(109) + src.icon_state = "broken" + stat |= BROKEN + else + return + +/obj/machinery/computer/blob_act() + if (prob(50)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(58) + src.icon_state = "broken" + src.stat |= BROKEN + src.density = 0 + +/obj/machinery/computer/power_change() + if(stat & BROKEN) + icon_state = "broken" + else + if( powered() ) + icon_state = initial(icon_state) + stat &= ~NOPOWER + else + spawn(rand(0, 15)) + src.icon_state = "c_unpowered" + stat |= NOPOWER + + +/obj/machinery/computer/process() + + if(stat & (NOPOWER|BROKEN)) + return + use_power(250) + + +/obj/machinery/computer/communications/verb/call_shuttle() + set src in oview(1) + + src.add_fingerprint(usr) + if(stat & NOPOWER) return + + if ((!( ticker ) || ticker.shuttle_location == 1)) + return + + if( ticker.mode == "blob" ) + usr << "Under directive 7-10, SS13 is quarantined until further notice." + return + + world << "\blue Alert: The emergency shuttle has been called. It will arrive in T-10:00 minutes." + if (!( ticker.timeleft )) + ticker.timeleft = 6000 + ticker.timing = 1 + return + +/obj/machinery/computer/communications/verb/cancel_call() + set src in oview(1) + + src.add_fingerprint(usr) + if(stat & NOPOWER) return + if ((!( ticker ) || ticker.shuttle_location == 1 || ticker.timing == 0 || ticker.timeleft < 300)) + return + if( ticker.mode == "blob" ) + return + + world << "\blue Alert: The shuttle is going back!" + ticker.timing = -1.0 + + return + +/obj/machinery/computer/card/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(58) + src.icon_state = "broken" + stat |= BROKEN + if(3.0) + if (prob(25)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(109) + src.icon_state = "broken" + stat |= BROKEN + else + return + +/obj/machinery/computer/card/power_change() + if(stat & BROKEN) + icon_state = "broken" + else + if( powered() ) + icon_state = initial(icon_state) + stat &= ~NOPOWER + else + spawn(rand(0, 15)) + src.icon_state = "id_unpowered" + stat |= NOPOWER + +/obj/machinery/computer/card/attack_paw(var/mob/user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/computer/card/attack_hand(var/mob/user as mob) + + if(stat & (NOPOWER|BROKEN) ) return + + user.machine = src + var/dat + if (!( ticker )) + return + if (src.mode) + var/d2 = text("Confirm Identity: []\n[]", src, (src.scan ? text("[]", src.scan.name) : "----------"), (src.authenticated ? "You are logged in!" : text("{Log in}", src))) + var/d1 = "Please use security Records to modify entries.
    " + for(var/datum/data/record/t in data_core.general) + d1 += text("[] - []
    ", t.fields["name"], t.fields["rank"]) + //Foreach goto(104) + dat = text("[]
    \n
    \nCrew Manifest:
    \n[]\n
    \nPrint
    \n
    \nAccess ID modification console.
    \n
    ", d2, d1, src, src) + else + var/d1 = text("{Log in}", src) + if ((src.authenticated && src.modify)) + var/vo = null + var/va = null + var/vl = null + var/ve = null + switch(src.modify.access_level) + if(1.0) + vo = text("0 1 2 3 4 5", src, src, src, src, src) + if(2.0) + vo = text("0 1 2 3 4 5", src, src, src, src, src) + if(3.0) + vo = text("0 1 2 3 4 5", src, src, src, src, src) + if(4.0) + vo = text("0 1 2 3 4 5", src, src, src, src, src) + if(5.0) + vo = text("0 1 2 3 4 5", src, src, src, src, src) + else + vo = text("0 1 2 3 4 5", src, src, src, src, src) + switch(src.modify.lab_access) + if(1.0) + vl = text("0 1 2 3 4 5", src, src, src, src, src) + if(2.0) + vl = text("0 1 2 3 4 5", src, src, src, src, src) + if(3.0) + vl = text("0 1 2 3 4 5", src, src, src, src, src) + if(4.0) + vl = text("0 1 2 3 4 5", src, src, src, src, src) + if(5.0) + vl = text("0 1 2 3 4 5", src, src, src, src, src) + else + vl = text("0 1 2 3 4 5", src, src, src, src, src) + switch(src.modify.engine_access) + if(1.0) + ve = text("0 1 2 3 4 5", src, src, src, src, src) + if(2.0) + ve = text("0 1 2 3 4 5", src, src, src, src, src) + if(3.0) + ve = text("0 1 2 3 4 5", src, src, src, src, src) + if(4.0) + ve = text("0 1 2 3 4 5", src, src, src, src, src) + if(5.0) + ve = text("0 1 2 3 4 5", src, src, src, src, src) + else + ve = text("0 1 2 3 4 5", src, src, src, src, src) + switch(src.modify.air_access) + if(1.0) + va = text("0 1 2 3 4 5", src, src, src, src, src) + if(2.0) + va = text("0 1 2 3 4 5", src, src, src, src, src) + if(3.0) + va = text("0 1 2 3 4 5", src, src, src, src, src) + if(4.0) + va = text("0 1 2 3 4 5", src, src, src, src, src) + if(5.0) + va = text("0 1 2 3 4 5", src, src, src, src, src) + else + va = text("0 1 2 3 4 5", src, src, src, src, src) + var/list/L = list( "Research Assistant", "Staff Assistant", "Medical Assistant", "Technical Assistant", "Engineer", "Forensic Technician", "Research Technician", "Medical Doctor", "Captain", "Security Officer", "Medical Researcher", "Toxin Researcher", "Head of Research", "Head of Personnel", "Station Technician", "Atmospheric Technician", "Unassigned", "Systems", "Custom" ) + var/assign = "" + if (istype(user, /mob/human)) + var/counter = 1 + for(var/t in L) + assign += text("[] ", src, t, t) + counter++ + if (counter >= 3) + assign += "
    " + counter = 1 + //Foreach goto(912) + d1 = text("[] :
    \nGeneral Access Level: []
    \nLaboratory Access: []
    \nReactor/Engine Access: []
    \nMain Systems Access: []
    \nRegistered: []
    \nAssignment: []
    \n[]
    ", src.modify.name, vo, vl, ve, va, src, (src.modify.registered ? text("[]", src.modify.registered) : "{None: Click to modify}"), (src.modify.assignment ? text("[]", src.modify.assignment) : "None"), assign) + else + var/counter = 1 + for(var/t in L) + assign += text("[] ", src, t, stars(t)) + counter++ + if (counter >= 4) + assign += "
    " + counter = 1 + //Foreach goto(1057) + d1 = text("[] :
    \n[] []
    \n[] []
    \n[] []
    \n[] []
    \n[] []
    \n[] []
    \n[]
    ", stars("modify.name"), stars("General Access Level:"), vo, stars("Laboratory Access:"), vl, stars("Reactor/Engine Access:"), ve, stars("Main Systems Access:"), va, stars("Registered:"), src, (src.modify.registered ? text("[]", stars(src.modify.registered)) : text("[]", stars("{None: Click to modify}"))), stars("Assignment:"), (src.modify.assignment ? text("[]", stars(src.modify.assignment)) : "None"), assign) + if (istype(user, /mob/human)) + dat = text("Identification Card Modifier
    \nPlease Insert the cards into the slots
    \nTarget: []
    \nConfirm Identity: []
    \n-----------------
    \n[]
    \n
    \n
    \nAccess Crew Manifest
    \n
    ", src, (src.modify ? text("[]", src.modify.name) : "----------"), src, (src.scan ? text("[]", src.scan.name) : "----------"), d1, src) + else + dat = text("[]
    \n[]
    \n[] []
    \n[] []
    \n-----------------
    \n[]
    \n
    \n
    \n[]
    \n
    ", stars("Identification Card Modifier"), stars("Please Insert the cards into the slots"), stars("Target:"), src, (src.modify ? text("[]", stars(src.modify.name)) : "----------"), stars("Confirm Identity:"), src, (src.scan ? text("[]", stars(src.scan.name)) : "----------"), d1, src, stars("Access Crew Manifest")) + user << browse(dat, "window=id_com;size=400x500") + return + +/obj/machinery/computer/card/Topic(href, href_list) + ..() + + if(stat & (NOPOWER|BROKEN)) + usr << browse(null, "window=id_com") + return + + if(usr.restrained() || usr.lying) return + + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + usr << "\red You don't have the dexterity to do this!" + return + if ((usr.stat || usr.restrained())) + return + if ((get_dist(src, usr) <= 1 && istype(src.loc, /turf))) + usr.machine = src + if (href_list["modify"]) + if (src.modify) + src.modify.name = text("[]'s ID Card ([]>[]-[]-[])", src.modify.registered, src.modify.access_level, src.modify.lab_access, src.modify.engine_access, src.modify.air_access) + src.modify.loc = src.loc + src.modify = null + else + var/obj/item/I = usr.equipped() + if (istype(I, /obj/item/weapon/card/id)) + usr.drop_item() + I.loc = src + src.modify = I + src.authenticated = 0 + if (href_list["scan"]) + if (src.scan) + src.scan.loc = src.loc + src.scan = null + else + var/obj/item/I = usr.equipped() + if (istype(I, /obj/item/weapon/card/id)) + usr.drop_item() + I.loc = src + src.scan = I + src.authenticated = 0 + if (href_list["auth"]) + if ((!( src.authenticated ) && src.scan && (src.modify || src.mode))) + if ((src.scan.assignment == "Captain" || src.scan.assignment == "Head of Personnel")) + src.authenticated = 1 + if (href_list["vo"]) + if (src.authenticated) + var/t1 = text2num(href_list["vo"]) + if (t1 == -1.0) + t1 = 0 + src.modify.access_level = t1 + if (href_list["vl"]) + if (src.authenticated) + var/t1 = text2num(href_list["vl"]) + if (t1 == -1.0) + t1 = 0 + src.modify.lab_access = t1 + if (href_list["ve"]) + if (src.authenticated) + var/t1 = text2num(href_list["ve"]) + if (t1 == -1.0) + t1 = 0 + src.modify.engine_access = t1 + if (href_list["va"]) + if (src.authenticated) + var/t1 = text2num(href_list["va"]) + if (t1 == -1.0) + t1 = 0 + src.modify.air_access = t1 + if (href_list["assign"]) + if (src.authenticated) + var/t1 = href_list["assign"] + + if(t1 == "Custom") + t1 = input("Enter a custom job assignment.","Assignment") + + src.modify.assignment = t1 + if (href_list["reg"]) + if (src.authenticated) + var/t2 = src.modify + var/t1 = input(usr, "What name?", "ID computer", null) as text + if ((src.authenticated && src.modify == t2 && get_dist(src, usr) <= 1 && istype(src.loc, /turf))) + src.modify.registered = t1 + if (href_list["mode"]) + src.mode = text2num(href_list["mode"]) + if (href_list["print"]) + if (!( src.printing )) + src.printing = 1 + sleep(50) + var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( src.loc ) + var/t1 = "Crew Manifest:
    " + for(var/datum/data/record/t in data_core.general) + t1 += text("[] - []
    ", t.fields["name"], t.fields["rank"]) + //Foreach goto(868) + P.info = text("[]", t1) + P.name = "paper- 'Crew Manifest'" + src.printing = null + if (href_list["mode"]) + src.authenticated = 0 + src.mode = text2num(href_list["mode"]) + if (src.modify) + src.modify.name = text("[]'s ID Card ([]>[]-[]-[])", src.modify.registered, src.modify.access_level, src.modify.lab_access, src.modify.engine_access, src.modify.air_access) + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(1015) + src.add_fingerprint(usr) + else + usr << browse(null, "window=id_com") + return + return + +/obj/machinery/computer/card/attackby(I as obj, user as mob) + + src.attack_hand(user) + return + +/obj/machinery/computer/pod/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(58) + src.icon_state = "broken" + stat |= BROKEN + if(3.0) + if (prob(25)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(109) + src.icon_state = "broken" + stat |= BROKEN + else + return + +/obj/machinery/computer/pod/proc/alarm() + + if(stat & (NOPOWER|BROKEN)) return + + if (!( src.connected )) + viewers(null, null) << "Cannot locate mass driver connector. Cancelling firing sequence!" + return + for(var/obj/machinery/door/poddoor/M in machines) + if (M.id == src.id) + spawn( 0 ) + M.openpod() + return + //Foreach goto(41) + sleep(20) + + //src.connected.drive() *****RM from 40.93.3S + for(var/obj/machinery/mass_driver/M in machines) + if(M.id == src.id) + M.power = src.connected.power + M.drive() + + //***** + sleep(50) + for(var/obj/machinery/door/poddoor/M in machines) + if (M.id == src.id) + spawn( 0 ) + M.closepod() + return + //Foreach goto(123) + return + +/obj/machinery/computer/pod/New() + + ..() + spawn( 5 ) + for(var/obj/machinery/mass_driver/M in machines) + if (M.id == src.id) + src.connected = M + else + //Foreach continue //goto(25) + return + return + +/obj/machinery/computer/pod/attack_paw(var/mob/user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/computer/pod/attack_hand(var/mob/user as mob) + + if(stat & (NOPOWER|BROKEN)) return + + var/dat = "Mass Driver Controls" + user.machine = src + var/d2 + if (src.timing) + d2 = text("Stop Time Launch", src) + else + d2 = text("Initiate Time Launch", src) + var/second = src.time % 60 + var/minute = (src.time - second) / 60 + dat += text("
    \nTimer System: []\nTime Left: [][] - - + +", d2, (minute ? text("[]:", minute) : null), second, src, src, src, src) + if (src.connected) + var/temp = "" + var/list/L = list( 0.25, 0.5, 1, 2, 4, 8, 16 ) + for(var/t in L) + if (t == src.connected.power) + temp += text("[] ", t) + else + temp += text("[] ", src, t, t) + //Foreach goto(172) + dat += text("
    \nPower Level: []
    \nFiring Sequence
    \nTest Fire Driver
    \nToggle Outer Door
    ", temp, src, src, src) + //*****RM from 40.93.3S + else + dat += text("
    \nToggle Outer Door
    ", src) + //***** + dat += text("

    Close
    ", user) + user << browse(dat, "window=computer;size=400x500") + return + +/obj/machinery/computer/pod/process() + + + if(stat & (NOPOWER|BROKEN) ) + return + use_power(250) + + if (src.timing) + if (src.time > 0) + src.time = round(src.time) - 1 + else + alarm() + src.time = 0 + src.timing = 0 + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(68) + return + +/obj/machinery/computer/pod/Topic(href, href_list) + ..() + + if(stat & (NOPOWER|BROKEN)) + usr << browse(null, "window=computer") + return + + + if(usr.restrained() || usr.lying) return + + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + usr << "\red You don't have the dexterity to do this!" + return + if ((usr.stat || usr.restrained())) + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["power"]) + var/t = text2num(href_list["power"]) + t = min(max(0.25, t), 16) + if (src.connected) + src.connected.power = t + else + if (href_list["alarm"]) + src.alarm() + else + if (href_list["time"]) + src.timing = text2num(href_list["time"]) + else + if (href_list["tp"]) + var/tp = text2num(href_list["tp"]) + src.time += tp + src.time = min(max(round(src.time), 0), 120) + else + if (href_list["door"]) + for(var/obj/machinery/door/poddoor/M in machines) + if (M.id == src.id) + if (M.density) + spawn( 0 ) + M.openpod() + return + else + spawn( 0 ) + M.closepod() + return + //Foreach goto(298) + src.add_fingerprint(usr) + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(394) + return + +/obj/machinery/door/poddoor/open() + + usr << "This is a remote controlled door!" + return + +/obj/machinery/door/poddoor/close() + + usr << "This is a remote controlled door!" + return + +/obj/machinery/door/poddoor/attackby(obj/item/weapon/C as obj, mob/user as mob) + + src.add_fingerprint(user) + if (!( istype(C, /obj/item/weapon/crowbar) )) + return + if ((src.density && (stat & NOPOWER) && !( src.operating ))) + spawn( 0 ) + src.operating = 1 + flick("pdoorc0", src) + src.icon_state = "pdoor0" + sleep(15) + src.density = 0 + src.opacity = 0 + var/turf/T = src.loc + if (istype(T, /turf)) + T.updatecell = 1 + T.buildlinks() + src.operating = 0 + return + return + +/obj/machinery/door/poddoor/proc/openpod() + set src in oview(1) + + if(stat & NOPOWER) return + + if (src.operating || !src.density) + return + src.operating = 1 + use_power(50) + flick("pdoorc0", src) + src.icon_state = "pdoor0" + sleep(15) + src.density = 0 + src.opacity = 0 + var/turf/T = src.loc + if (istype(T, /turf)) + T.updatecell = 1 + T.buildlinks() + src.operating = 0 + return + +/obj/machinery/door/poddoor/proc/closepod() + set src in oview(1) + + if(stat & NOPOWER) return + + if (src.operating || src.density) + return + use_power(50) + src.operating = 1 + flick("pdoorc1", src) + src.icon_state = "pdoor1" + src.density = 1 + src.opacity = 1 + var/turf/T = src.loc + if (istype(T, /turf)) + T.updatecell = 0 + T.buildlinks() + sleep(15) + src.operating = 0 + return + +/obj/machinery/pod/meteorhit(var/obj/O as obj) + + if (O.icon_state == "flaming") + for(var/obj/item/I in src) + I.loc = src.loc + //Foreach goto(29) + for(var/mob/M in src) + M.loc = src.loc + if (M.client) + M.client.eye = M.client.mob + M.client.perspective = MOB_PERSPECTIVE + //Foreach goto(71) + //SN src = null + del(src) + return + return + +/obj/machinery/pod/process() + + if (src.speed) + if (src.speed <= 10) + var/t1 = 10 - src.speed + while(t1 > 0) + step(src, src.dir) + sleep(1) + t1-- + else + var/t1 = round(src.speed / 5) + while(t1 > 0) + step(src, src.dir) + t1-- + return + +/obj/machinery/pod/ex_act(severity) + + switch(severity) + if(1.0) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(31) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(104) + //SN src = null + del(src) + return + else + return + +/obj/machinery/pod/blob_act() + + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + del(src) + +/obj/machinery/pod/Bump(var/atom/A) + + //world << "[src] bumped into [A]" + spawn( 0 ) + ..() + src.speed = 0 + return + return + +/obj/machinery/pod/relaymove(mob/user as mob, direction) + + if (user.stat) + return + if ((user in src)) + if (direction & 1) + src.speed = max(src.speed - 1, 1) + else + if (direction & 2) + src.speed++ + if (src.speed > 10) + src.speed = 10 + if (direction & 4) + src.dir = turn(src.dir, -90.0) + else + if (direction & 8) + src.dir = turn(src.dir, 90) + return + +/obj/machinery/pod/verb/eject() + set src = usr.loc + + if (usr.stat) + return + var/mob/M = usr + M.loc = src.loc + if (M.client) + M.client.eye = M.client.mob + M.client.perspective = MOB_PERSPECTIVE + step(M, turn(src.dir, 180)) + return + +/obj/machinery/pod/verb/board() + set src in oview(1) + + if (usr.stat) + return + var/mob/M = usr + if (M.client) + M.client.perspective = EYE_PERSPECTIVE + M.client.eye = src + M.loc = src + return + +/obj/machinery/pod/verb/load() + set src in oview(1) + + + + if (usr.stat) + return + if (( ( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + var/mob/human/H = usr + + if ((H.pulling && !( H.pulling.anchored ))) + + H.pulling.loc = src + + + if (ismob(H.pulling)) + var/mob/M = H.pulling + if (M.client) + M.client.perspective = EYE_PERSPECTIVE + M.client.eye = src + for(var/mob/O in viewers(src, null)) + if ((O.client && !( O.blinded ))) + O << text("\blue [] loads [] into []!", H, H.pulling, src) + //Foreach goto(152) + H.pulling = null + return + +/obj/machinery/pod/verb/unload(var/atom/movable/A in src.contents) + set src in oview(1) + + if (usr.stat) + return + if (istype(A, /atom/movable)) + A.loc = src.loc + for(var/mob/O in viewers(src, null)) + if ((O.client && !( O.blinded ))) + O << text("\blue [] unloads [] from []!", usr, A, src) + //Foreach goto(54) + if (ismob(A)) + var/mob/M = A + if (M.client) + M.client.perspective = MOB_PERSPECTIVE + M.client.eye = M + step(A, turn(src.dir, 180)) + return + +/obj/machinery/recon/meteorhit(var/obj/O as obj) + + if (O.icon_state == "flaming") + for(var/obj/item/I in src) + I.loc = src.loc + //Foreach goto(29) + for(var/mob/M in src) + M.loc = src.loc + if (M.client) + M.client.eye = M.client.mob + M.client.perspective = MOB_PERSPECTIVE + //Foreach goto(71) + //SN src = null + del(src) + return + return + +/obj/machinery/recon/process() + + if (src.speed) + if (src.speed <= 10) + var/t1 = 10 - src.speed + while(t1 > 0) + step(src, src.dir) + sleep(1) + t1-- + else + var/t1 = round(src.speed / 5) + while(t1 > 0) + step(src, src.dir) + t1-- + return + +/obj/machinery/recon/ex_act(severity) + + switch(severity) + if(1.0) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(31) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(104) + //SN src = null + del(src) + return + else + return + +/obj/machinery/recon/blob_act() + + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + del(src) + +/obj/machinery/recon/Bump() + + spawn( 0 ) + ..() + src.speed = 0 + return + return + +/obj/machinery/recon/verb/eject() + set src = usr.loc + + if (usr.stat) + return + var/mob/M = usr + M.loc = src.loc + if (M.client) + M.client.eye = M.client.mob + M.client.perspective = MOB_PERSPECTIVE + return + +/obj/machinery/recon/verb/board() + set src in oview(1) + + if (usr.stat) + return + if (locate(/mob, src)) + usr << "There is no room! You can only fit one person." + return + var/mob/M = usr + if (M.client) + M.client.perspective = EYE_PERSPECTIVE + M.client.eye = src + M.loc = src + return + +/obj/machinery/recon/verb/load() + set src in oview(1) + + if (usr.stat) + return + if ((( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + var/mob/human/H = usr + if ((H.pulling && !( H.pulling.anchored ))) + if (!( istype(H.pulling, /obj/item/weapon) )) + usr << "You may only place items in." + else + if ((locate(/mob, src) && ismob(H.pulling))) + usr << "There is no room! You can only fit one person." + else + H.pulling.loc = src + if (ismob(H.pulling)) + var/mob/M = H.pulling + if (M.client) + M.client.perspective = EYE_PERSPECTIVE + M.client.eye = src + for(var/mob/O in viewers(src, null)) + if ((O.client && !( O.blinded ))) + O << text("\blue [] loads [] into []!", H, H.pulling, src) + //Foreach goto(204) + H.pulling = null + return + +/obj/machinery/recon/verb/unload(var/atom/movable/A in src) + set src in oview(1) + + if (usr.stat) + return + if (istype(A, /atom/movable)) + A.loc = src.loc + for(var/mob/O in view(src, null)) + if ((O.client && !( O.blinded ))) + O << text("\blue [] unloads [] from []!", usr, A, src) + //Foreach goto(53) + if (ismob(A)) + var/mob/M = A + if (M.client) + M.client.perspective = MOB_PERSPECTIVE + M.client.eye = M + return + +/obj/machinery/recon/Bump() + + spawn( 0 ) + ..() + src.speed = 0 + return + return + +/obj/machinery/recon/relaymove(var/mob/user as mob, direction) + + if (user.stat) + return + if ((user in src)) + if (direction & 1) + src.speed = max(src.speed - 1, 1) + else + if (direction & 2) + src.speed++ + if (direction & 4) + src.dir = turn(src.dir, -90.0) + else + if (direction & 8) + src.dir = turn(src.dir, 90) + if (direction & 16) + src.speed = 30 + else + src.speed = min(src.speed, 10) + return + +/obj/datacore/proc/manifest() + + for(var/mob/human/H in world) + if ((H.start && !( findtext(H.rname, "Syndicate ", 1, null) ))) + var/datum/data/record/G = new /datum/data/record( ) + var/datum/data/record/M = new /datum/data/record( ) + var/datum/data/record/S = new /datum/data/record( ) + var/obj/item/weapon/card/id/C = H.wear_id + if (C) + G.fields["rank"] = C.assignment + else + G.fields["rank"] = "Unassigned" + G.fields["name"] = H.rname + G.fields["id"] = text("[]", add_zero(num2hex(rand(1, 1.6777215E7)), 6)) + M.fields["name"] = G.fields["name"] + M.fields["id"] = G.fields["id"] + S.fields["name"] = G.fields["name"] + S.fields["id"] = G.fields["id"] + if (H.gender == "female") + G.fields["sex"] = "Female" + else + G.fields["sex"] = "Male" + G.fields["age"] = text("[]", H.age) + G.fields["fingerprint"] = text("[]", md5(H.primary.uni_identity)) + G.fields["p_stat"] = "Active" + G.fields["m_stat"] = "Stable" + M.fields["b_type"] = text("[]", H.b_type) + M.fields["mi_dis"] = "None" + M.fields["mi_dis_d"] = "No minor disabilities have been declared." + M.fields["ma_dis"] = "None" + M.fields["ma_dis_d"] = "No major disabilities have been diagnosed." + M.fields["alg"] = "None" + M.fields["alg_d"] = "No allergies have been detected in this patient." + M.fields["cdi"] = "None" + M.fields["cdi_d"] = "No diseases have been diagnosed at the moment." + M.fields["notes"] = "No notes." + S.fields["criminal"] = "None" + S.fields["mi_crim"] = "None" + S.fields["mi_crim_d"] = "No minor crime convictions." + S.fields["ma_crim"] = "None" + S.fields["ma_crim_d"] = "No minor crime convictions." + S.fields["notes"] = "No notes." + src.general += G + src.medical += M + src.security += S + //Foreach goto(15) + return + +/turf/space/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/turf/space/attack_hand(mob/user as mob) + + if ((user.restrained() || !( user.pulling ))) + return + if (user.pulling.anchored) + return + if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1)) + return + if (ismob(user.pulling)) + var/mob/M = user.pulling + var/t = M.pulling + M.pulling = null + step(user.pulling, get_dir(user.pulling.loc, src)) + M.pulling = t + else + step(user.pulling, get_dir(user.pulling.loc, src)) + return + +/turf/space/attackby(obj/item/weapon/tile/T as obj, mob/user as mob) + + if (istype(T, /obj/item/weapon/tile)) + T.build(src) + T.amount-- + T.add_fingerprint(user) + if (T.amount < 1) + user.u_equip(T) + //SN src = null + del(T) + return + return + +/turf/space/updatecell() + + return + +/turf/space/conduction() + return + +/turf/space/Entered(atom/movable/A as mob|obj) + + ..() + if ((!( A ) || src != A.loc || istype(null, /obj/beam))) + return + if (!( A.last_move )) + return + if (locate(/obj/move, src)) + return 1 + if ((ismob(A) && src.x > 2 && src.x < (world.maxx - 2) )) + var/mob/M = A + if ((!( M.restrained() ) && M.canmove)) + var/t1 = 5 + if (locate(/obj/grille, oview(1, M))) + if (!( M.l_hand )) + t1 -= 2 + else + if (M.l_hand.w_class <= 2) + t1 -= 1 + if (!( M.r_hand )) + t1 -= 2 + else + if (M.r_hand.w_class <= 2) + t1 -= 1 + else + if (locate(/turf/station, oview(1, M))) + if (!( M.l_hand )) + t1 -= 1 + else + if (M.l_hand.w_class <= 2) + t1 -= 0.5 + if (!( M.r_hand )) + t1 -= 1 + else + if (M.r_hand.w_class <= 2) + t1 -= 0.5 + t1 = round(t1) + if (t1 < 5) + if (prob(t1)) + M << "\blue You slipped!" + else + spawn( 5 ) + if (src == A.loc) + spawn( 0 ) + src.Entered(A) + return + return + return 0 + if (src.x <= 2) + if (src.z >= 10) + if (world.maxz < 10) + world.maxz++ + A.z++ + else + A.z = 9 + else + A.z++ + A.x = world.maxx - 2 + spawn( 0 ) + if ((A && A.loc)) + A.loc.Entered(A) + return + else + if (A.x >= (world.maxx - 1) ) + if (A.z > 3) + A.z-- + else + A.z = 1 + A.x = 3 + spawn( 0 ) + if ((A && A.loc)) + A.loc.Entered(A) + return + else + spawn( 5 ) + if ((A && !( A.anchored ) && A.loc == src)) + if (step(A, A.last_move)) + else + spawn( 0 ) + src.Entered(A) + return + return + return diff --git a/main-src/Code/cryo.dm b/main-src/Code/cryo.dm new file mode 100644 index 0000000..906659a --- /dev/null +++ b/main-src/Code/cryo.dm @@ -0,0 +1,1777 @@ + +/obj/machinery/computer/med_data/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/computer/med_data/attack_hand(mob/user as mob) + + var/dat + if (src.temp) + dat = text("[]

    Clear Screen", src.temp, src) + else + dat = text("Confirm Identity: []
    ", src, (src.scan ? text("[]", src.scan.name) : "----------")) + if (src.authenticated) + switch(src.screen) + if(1.0) + dat += text("Search Records
    \nList Records
    \n
    \nRecord Maintenance
    \n{Log Out}
    \n", src, src, src, src) + if(2.0) + dat += "Record List:
    " + for(var/datum/data/record/R in data_core.general) + dat += text("[]: []
    ", src, R, R.fields["id"], R.fields["name"]) + //Foreach goto(132) + dat += text("
    Back", src) + if(3.0) + dat += text("Records Maintenance
    \nBackup To Disk
    \nUpload From disk
    \nDelete All Records
    \n
    \nBack", src, src, src, src) + if(4.0) + dat += "
    Medical Record

    " + if ((istype(src.active1, /datum/data/record) && data_core.general.Find(src.active1))) + dat += text("Name: [] ID: []
    \nSex: []
    \nAge: []
    \nFingerprint: []
    \nPhysical Status: []
    \nMental Status: []
    ", src.active1.fields["name"], src.active1.fields["id"], src, src.active1.fields["sex"], src, src.active1.fields["age"], src, src.active1.fields["fingerprint"], src, src.active1.fields["p_stat"], src, src.active1.fields["m_stat"]) + else + dat += "General Record Lost!
    " + if ((istype(src.active2, /datum/data/record) && data_core.medical.Find(src.active2))) + dat += text("
    \n
    Medical Data

    \nBlood Type: []
    \n
    \nMinor Disabilities: []
    \nDetails: []
    \n
    \nMajor Disabilities: []
    \nDetails: []
    \n
    \nAllergies: []
    \nDetails: []
    \n
    \nCurrent Diseases: [] (per disease info placed in log/comment section)
    \nDetails: []
    \n
    \nImportant Notes:
    \n\t[]
    \n
    \n
    Comments/Log

    ", src, src.active2.fields["b_type"], src, src.active2.fields["mi_dis"], src, src.active2.fields["mi_dis_d"], src, src.active2.fields["ma_dis"], src, src.active2.fields["ma_dis_d"], src, src.active2.fields["alg"], src, src.active2.fields["alg_d"], src, src.active2.fields["cdi"], src, src.active2.fields["cdi_d"], src, src.active2.fields["notes"]) + var/counter = 1 + while(src.active2.fields[text("com_[]", counter)]) + dat += text("[]
    Delete Entry

    ", src.active2.fields[text("com_[]", counter)], src, counter) + counter++ + dat += text("Add Entry

    ", src) + dat += text("Delete Record (Medical Only)

    ", src) + else + dat += "Medical Record Lost!
    " + dat += text("New Record

    ", src) + dat += text("\nPrint Record
    \nBack
    ", src, src) + else + else + dat += text("{Log In}", src) + user << browse(text("Medical Records[]", dat), "window=med_rec") + return + +/obj/machinery/computer/med_data/Topic(href, href_list) + ..() + if (!( data_core.general.Find(src.active1) )) + src.active1 = null + if (!( data_core.medical.Find(src.active2) )) + src.active2 = null + if ((usr.stat || usr.restrained())) + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["temp"]) + src.temp = null + if (href_list["scan"]) + if (src.scan) + src.scan.loc = src.loc + src.scan = null + else + var/obj/item/I = usr.equipped() + if (istype(I, /obj/item/weapon/card/id)) + usr.drop_item() + I.loc = src + src.scan = I + else + if (href_list["logout"]) + src.authenticated = null + src.screen = null + src.active1 = null + src.active2 = null + else + if (href_list["login"]) + if (istype(src.scan, /obj/item/weapon/card/id)) + src.active1 = null + src.active2 = null + if(scan.check_access(access, allowed)) + src.authenticated = src.scan.registered + src.rank = src.scan.assignment + src.screen = 1 + if (src.authenticated) + if (href_list["list"]) + src.screen = 2 + src.active1 = null + src.active2 = null + else + if (href_list["rec_m"]) + src.screen = 3 + src.active1 = null + src.active2 = null + else + if (href_list["del_all"]) + src.temp = text("Are you sure you wish to delete all records?
    \n\tYes
    \n\tNo
    ", src, src) + else + if (href_list["del_all2"]) + for(var/datum/data/record/R in data_core.medical) + //R = null + del(R) + //Foreach goto(494) + src.temp = "All records deleted." + else + if (href_list["main"]) + src.screen = 1 + src.active1 = null + src.active2 = null + else + if (href_list["field"]) + var/a1 = src.active1 + var/a2 = src.active2 + switch(href_list["field"]) + if("fingerprint") + if (istype(src.active1, /datum/data/record)) + var/t1 = input("Please input fingerprint hash:", "Med. records", src.active1.fields["id"], null) as text + if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || get_dist(src, usr) > 1 || src.active1 != a1)) + return + src.active1.fields["fingerprint"] = t1 + if("sex") + if (istype(src.active1, /datum/data/record)) + if (src.active1.fields["sex"] == "Male") + src.active1.fields["sex"] = "Female" + else + src.active1.fields["sex"] = "Male" + if("age") + if (istype(src.active1, /datum/data/record)) + var/t1 = input("Please input age:", "Med. records", src.active1.fields["age"], null) as text + if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || get_dist(src, usr) > 1 || src.active1 != a1)) + return + src.active1.fields["age"] = t1 + if("mi_dis") + if (istype(src.active2, /datum/data/record)) + var/t1 = input("Please input minor disabilities list:", "Med. records", src.active2.fields["mi_dis"], null) as text + if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || get_dist(src, usr) > 1 || src.active2 != a2)) + return + src.active2.fields["mi_dis"] = t1 + if("mi_dis_d") + if (istype(src.active2, /datum/data/record)) + var/t1 = input("Please summarize minor dis.:", "Med. records", src.active2.fields["mi_dis_d"], null) as message + if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || get_dist(src, usr) > 1 || src.active2 != a2)) + return + src.active2.fields["mi_dis_d"] = t1 + if("ma_dis") + if (istype(src.active2, /datum/data/record)) + var/t1 = input("Please input major diabilities list:", "Med. records", src.active2.fields["ma_dis"], null) as text + if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || get_dist(src, usr) > 1 || src.active2 != a2)) + return + src.active2.fields["ma_dis"] = t1 + if("ma_dis_d") + if (istype(src.active2, /datum/data/record)) + var/t1 = input("Please summarize major dis.:", "Med. records", src.active2.fields["ma_dis_d"], null) as message + if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || get_dist(src, usr) > 1 || src.active2 != a2)) + return + src.active2.fields["ma_dis_d"] = t1 + if("alg") + if (istype(src.active2, /datum/data/record)) + var/t1 = input("Please state allergies:", "Med. records", src.active2.fields["alg"], null) as text + if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || get_dist(src, usr) > 1 || src.active2 != a2)) + return + src.active2.fields["alg"] = t1 + if("alg_d") + if (istype(src.active2, /datum/data/record)) + var/t1 = input("Please summarize allergies:", "Med. records", src.active2.fields["alg_d"], null) as message + if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || get_dist(src, usr) > 1 || src.active2 != a2)) + return + src.active2.fields["alg_d"] = t1 + if("cdi") + if (istype(src.active2, /datum/data/record)) + var/t1 = input("Please state diseases:", "Med. records", src.active2.fields["cdi"], null) as text + if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || get_dist(src, usr) > 1 || src.active2 != a2)) + return + src.active2.fields["cdi"] = t1 + if("cdi_d") + if (istype(src.active2, /datum/data/record)) + var/t1 = input("Please summarize diseases:", "Med. records", src.active2.fields["cdi_d"], null) as message + if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || get_dist(src, usr) > 1 || src.active2 != a2)) + return + src.active2.fields["cdi_d"] = t1 + if("notes") + if (istype(src.active2, /datum/data/record)) + var/t1 = input("Please summarize notes:", "Med. records", src.active2.fields["notes"], null) as message + if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || get_dist(src, usr) > 1 || src.active2 != a2)) + return + src.active2.fields["notes"] = t1 + if("p_stat") + if (istype(src.active1, /datum/data/record)) + src.temp = text("Physical Condition:
    \n\t*Deceased*
    \n\t*Unconscious*
    \n\tActive
    \n\tPhysically Unfit
    ", src, src, src, src) + if("m_stat") + if (istype(src.active1, /datum/data/record)) + src.temp = text("Mental Condition:
    \n\t*Insane*
    \n\t*Unstable*
    \n\t*Watch*
    \n\tStable
    ", src, src, src, src) + if("b_type") + if (istype(src.active2, /datum/data/record)) + src.temp = text("Blood Type:
    \n\tA- A+
    \n\tB- B+
    \n\tAB- AB+
    \n\tO- O+
    ", src, src, src, src, src, src, src, src) + else + else + if (href_list["p_stat"]) + if (src.active1) + switch(href_list["p_stat"]) + if("deceased") + src.active1.fields["p_stat"] = "*Deceased*" + if("unconscious") + src.active1.fields["p_stat"] = "*Unconscious*" + if("active") + src.active1.fields["p_stat"] = "Active" + if("unfit") + src.active1.fields["p_stat"] = "Physically Unfit" + else + if (href_list["m_stat"]) + if (src.active1) + switch(href_list["m_stat"]) + if("insane") + src.active1.fields["m_stat"] = "*Insane*" + if("unstable") + src.active1.fields["m_stat"] = "*Unstable*" + if("watch") + src.active1.fields["m_stat"] = "*Watch*" + if("stable") + src.active2.fields["m_stat"] = "Stable" + + else + if (href_list["b_type"]) + if (src.active2) + switch(href_list["b_type"]) + if("an") + src.active2.fields["b_type"] = "A-" + if("bn") + src.active2.fields["b_type"] = "B-" + if("abn") + src.active2.fields["b_type"] = "AB-" + if("on") + src.active2.fields["b_type"] = "O-" + if("ap") + src.active2.fields["b_type"] = "A+" + if("bp") + src.active2.fields["b_type"] = "B+" + if("abp") + src.active2.fields["b_type"] = "AB+" + if("op") + src.active2.fields["b_type"] = "O+" + + else + if (href_list["del_r"]) + if (src.active2) + src.temp = text("Are you sure you wish to delete the record (Medical Portion Only)?
    \n\tYes
    \n\tNo
    ", src, src) + else + if (href_list["del_r2"]) + if (src.active2) + //src.active2 = null + del(src.active2) + else + if (href_list["d_rec"]) + var/datum/data/record/R = locate(href_list["d_rec"]) + var/datum/data/record/M = locate(href_list["d_rec"]) + if (!( data_core.general.Find(R) )) + src.temp = "Record Not Found!" + return + for(var/datum/data/record/E in data_core.medical) + if ((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"])) + M = E + else + //Foreach continue //goto(2540) + src.active1 = R + src.active2 = M + src.screen = 4 + else + if (href_list["new"]) + if ((istype(src.active1, /datum/data/record) && !( istype(src.active2, /datum/data/record) ))) + var/datum/data/record/R = new /datum/data/record( ) + R.fields["name"] = src.active1.fields["name"] + R.fields["id"] = src.active1.fields["id"] + R.name = text("Medical Record #[]", R.fields["id"]) + R.fields["b_type"] = "Unknown" + R.fields["mi_dis"] = "None" + R.fields["mi_dis_d"] = "No minor disabilities have been declared." + R.fields["ma_dis"] = "None" + R.fields["ma_dis_d"] = "No major disabilities have been diagnosed." + R.fields["alg"] = "None" + R.fields["alg_d"] = "No allergies have been detected in this patient." + R.fields["cdi"] = "None" + R.fields["cdi_d"] = "No diseases have been diagnosed at the moment." + R.fields["notes"] = "No notes." + data_core.medical += R + src.active2 = R + src.screen = 4 + else + if (href_list["add_c"]) + if (!( istype(src.active2, /datum/data/record) )) + return + var/a2 = src.active2 + var/t1 = input("Add Comment:", "Med. records", null, null) as message + if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || get_dist(src, usr) > 1 || src.active2 != a2)) + return + var/counter = 1 + while(src.active2.fields[text("com_[]", counter)]) + counter++ + src.active2.fields[text("com_[]", counter)] = text("Made by [] ([]) on [], 2053
    []", src.authenticated, src.rank, time2text(world.realtime, "DDD MMM DD hh:mm:ss"), t1) + else + if (href_list["del_c"]) + if ((istype(src.active2, /datum/data/record) && src.active2.fields[text("com_[]", href_list["del_c"])])) + src.active2.fields[text("com_[]", href_list["del_c"])] = "Deleted" + else + if (href_list["search"]) + var/t1 = input("Search String: (Name or ID)", "Med. records", null, null) as text + if ((!( t1 ) || usr.stat || !( src.authenticated ) || usr.restrained() || get_dist(src, usr) > 1)) + return + src.active1 = null + src.active2 = null + t1 = lowertext(t1) + for(var/datum/data/record/R in data_core.general) + if ((lowertext(R.fields["name"]) == t1 || t1 == lowertext(R.fields["id"]))) + src.active1 = R + else + //Foreach continue //goto(3229) + if (!( src.active1 )) + src.temp = text("Could not locate record [].", t1) + else + for(var/datum/data/record/E in data_core.medical) + if ((E.fields["name"] == src.active1.fields["name"] || E.fields["id"] == src.active1.fields["id"])) + src.active2 = E + else + //Foreach continue //goto(3334) + src.screen = 4 + else + if (href_list["print_p"]) + if (!( src.printing )) + src.printing = 1 + sleep(50) + var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( src.loc ) + P.info = "
    Medical Record

    " + if ((istype(src.active1, /datum/data/record) && data_core.general.Find(src.active1))) + P.info += text("Name: [] ID: []
    \nSex: []
    \nAge: []
    \nFingerprint: []
    \nPhysical Status: []
    \nMental Status: []
    ", src.active1.fields["name"], src.active1.fields["id"], src.active1.fields["sex"], src.active1.fields["age"], src.active1.fields["fingerprint"], src.active1.fields["p_stat"], src.active1.fields["m_stat"]) + else + P.info += "General Record Lost!
    " + if ((istype(src.active2, /datum/data/record) && data_core.medical.Find(src.active2))) + P.info += text("
    \n
    Medical Data

    \nBlood Type: []
    \n
    \nMinor Disabilities: []
    \nDetails: []
    \n
    \nMajor Disabilities: []
    \nDetails: []
    \n
    \nAllergies: []
    \nDetails: []
    \n
    \nCurrent Diseases: [] (per disease info placed in log/comment section)
    \nDetails: []
    \n
    \nImportant Notes:
    \n\t[]
    \n
    \n
    Comments/Log

    ", src.active2.fields["b_type"], src.active2.fields["mi_dis"], src.active2.fields["mi_dis_d"], src.active2.fields["ma_dis"], src.active2.fields["ma_dis_d"], src.active2.fields["alg"], src.active2.fields["alg_d"], src.active2.fields["cdi"], src.active2.fields["cdi_d"], src.active2.fields["notes"]) + var/counter = 1 + while(src.active2.fields[text("com_[]", counter)]) + P.info += text("[]
    ", src.active2.fields[text("com_[]", counter)]) + counter++ + else + P.info += "Medical Record Lost!
    " + P.info += "" + P.name = "paper- 'Medical Record'" + src.printing = null + src.add_fingerprint(usr) + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(3792) + return + +/obj/machinery/computer/secure_data/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/computer/secure_data/attack_hand(mob/user as mob) + + if(stat & (NOPOWER|BROKEN) ) + return + + var/dat + if (src.temp) + dat = text("[]

    Clear Screen", src.temp, src) + else + dat = text("Confirm Identity: []
    ", src, (src.scan ? text("[]", src.scan.name) : "----------")) + if (src.authenticated) + switch(src.screen) + if(1.0) + dat += text("Search Records
    \nList Records
    \nSearch Fingerprints
    \nNew Record
    \n
    \nRecord Maintenance
    \n{Log Out}
    \n", src, src, src, src, src, src) + if(2.0) + dat += "Record List:
    " + for(var/datum/data/record/R in data_core.general) + dat += text("[]: []
    ", src, R, R.fields["id"], R.fields["name"]) + //Foreach goto(136) + dat += text("
    Back", src) + if(3.0) + dat += text("Records Maintenance
    \nBackup To Disk
    \nUpload From disk
    \nDelete All Records
    \n
    \nBack", src, src, src, src) + if(4.0) + dat += "
    Security Record

    " + if ((istype(src.active1, /datum/data/record) && data_core.general.Find(src.active1))) + dat += text("Name: [] ID: []
    \nSex: []
    \nAge: []
    \nRank: []
    \nFingerprint: []
    \nPhysical Status: []
    \nMental Status: []
    ", src, src.active1.fields["name"], src, src.active1.fields["id"], src, src.active1.fields["sex"], src, src.active1.fields["age"], src, src.active1.fields["rank"], src, src.active1.fields["fingerprint"], src.active1.fields["p_stat"], src.active1.fields["m_stat"]) + else + dat += "General Record Lost!
    " + if ((istype(src.active2, /datum/data/record) && data_core.security.Find(src.active2))) + dat += text("
    \n
    Security Data

    \nCriminal Status: []
    \n
    \nMinor Crimes: []
    \nDetails: []
    \n
    \nMajor Crimes: []
    \nDetails: []
    \n
    \nImportant Notes:
    \n\t[]
    \n
    \n
    Comments/Log

    ", src, src.active2.fields["criminal"], src, src.active2.fields["mi_crim"], src, src.active2.fields["mi_crim_d"], src, src.active2.fields["ma_crim"], src, src.active2.fields["ma_crim_d"], src, src.active2.fields["notes"]) + var/counter = 1 + while(src.active2.fields[text("com_[]", counter)]) + dat += text("[]
    Delete Entry

    ", src.active2.fields[text("com_[]", counter)], src, counter) + counter++ + dat += text("Add Entry

    ", src) + dat += text("Delete Record (Security Only)

    ", src) + else + dat += "Security Record Lost!
    " + dat += text("New Record

    ", src) + dat += text("\nDelete Record (ALL)

    \nPrint Record
    \nBack
    ", src, src, src) + else + else + dat += text("{Log In}", src) + user << browse(text("Security Records[]", dat), "window=secure_rec") + return + +/obj/machinery/computer/secure_data/Topic(href, href_list) + ..() + if(stat & (NOPOWER|BROKEN) ) + return + if (!( data_core.general.Find(src.active1) )) + src.active1 = null + if (!( data_core.security.Find(src.active2) )) + src.active2 = null + if ((usr.stat || usr.restrained())) + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["temp"]) + src.temp = null + if (href_list["scan"]) + if (src.scan) + src.scan.loc = src.loc + src.scan = null + else + var/obj/item/I = usr.equipped() + if (istype(I, /obj/item/weapon/card/id)) + usr.drop_item() + I.loc = src + src.scan = I + else + if (href_list["logout"]) + src.authenticated = null + src.screen = null + src.active1 = null + src.active2 = null + else + if (href_list["login"]) + if (istype(src.scan, /obj/item/weapon/card/id)) + src.active1 = null + src.active2 = null + var/list/L = list( "Security Officer", "Forensic Technician", "Prison Warden", "Head of Personnel", "Captain" ) + if (L.Find(src.scan.assignment)) + src.authenticated = src.scan.registered + src.rank = src.scan.assignment + src.screen = 1 + if (src.authenticated) + if (href_list["list"]) + src.screen = 2 + src.active1 = null + src.active2 = null + else + if (href_list["rec_m"]) + src.screen = 3 + src.active1 = null + src.active2 = null + else + if (href_list["del_all"]) + src.temp = text("Are you sure you wish to delete all records?
    \n\tYes
    \n\tNo
    ", src, src) + else + if (href_list["del_all2"]) + for(var/datum/data/record/R in data_core.security) + //R = null + del(R) + //Foreach goto(497) + src.temp = "All records deleted." + else + if (href_list["main"]) + src.screen = 1 + src.active1 = null + src.active2 = null + else + if (href_list["field"]) + var/a1 = src.active1 + var/a2 = src.active2 + switch(href_list["field"]) + if("name") + if (istype(src.active1, /datum/data/record)) + var/t1 = input("Please input name:", "Secure. records", src.active1.fields["name"], null) as text + if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || get_dist(src, usr) > 1 || src.active1 != a1)) + return + src.active1.fields["name"] = t1 + if("id") + if (istype(src.active2, /datum/data/record)) + var/t1 = input("Please input id:", "Secure. records", src.active1.fields["id"], null) as text + if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || get_dist(src, usr) > 1 || src.active1 != a1)) + return + src.active1.fields["id"] = t1 + if("fingerprint") + if (istype(src.active1, /datum/data/record)) + var/t1 = input("Please input fingerprint hash:", "Secure. records", src.active1.fields["fingerprint"], null) as text + if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || get_dist(src, usr) > 1 || src.active1 != a1)) + return + src.active1.fields["fingerprint"] = t1 + if("sex") + if (istype(src.active1, /datum/data/record)) + if (src.active1.fields["sex"] == "Male") + src.active1.fields["sex"] = "Female" + else + src.active1.fields["sex"] = "Male" + if("age") + if (istype(src.active1, /datum/data/record)) + var/t1 = input("Please input age:", "Secure. records", src.active1.fields["age"], null) as text + if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || get_dist(src, usr) > 1 || src.active1 != a1)) + return + src.active1.fields["age"] = t1 + if("mi_crim") + if (istype(src.active2, /datum/data/record)) + var/t1 = input("Please input minor disabilities list:", "Secure. records", src.active2.fields["mi_crim"], null) as text + if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || get_dist(src, usr) > 1 || src.active2 != a2)) + return + src.active2.fields["mi_crim"] = t1 + if("mi_crim_d") + if (istype(src.active2, /datum/data/record)) + var/t1 = input("Please summarize minor dis.:", "Secure. records", src.active2.fields["mi_crim_d"], null) as message + if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || get_dist(src, usr) > 1 || src.active2 != a2)) + return + src.active2.fields["mi_crim_d"] = t1 + if("ma_crim") + if (istype(src.active2, /datum/data/record)) + var/t1 = input("Please input major diabilities list:", "Secure. records", src.active2.fields["ma_crim"], null) as text + if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || get_dist(src, usr) > 1 || src.active2 != a2)) + return + src.active2.fields["ma_crim"] = t1 + if("ma_crim_d") + if (istype(src.active2, /datum/data/record)) + var/t1 = input("Please summarize major dis.:", "Secure. records", src.active2.fields["ma_crim_d"], null) as message + if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || get_dist(src, usr) > 1 || src.active2 != a2)) + return + src.active2.fields["ma_crim_d"] = t1 + if("notes") + if (istype(src.active2, /datum/data/record)) + var/t1 = input("Please summarize notes:", "Secure. records", src.active2.fields["notes"], null) as message + if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || get_dist(src, usr) > 1 || src.active2 != a2)) + return + src.active2.fields["notes"] = t1 + if("criminal") + if (istype(src.active2, /datum/data/record)) + src.temp = text("Criminal Status:
    \n\tNone
    \n\t*Arrest*
    \n\tIncarcerated
    \n\tParolled
    \n\tReleased
    ", src, src, src, src, src) + if("rank") + var/list/L = list( "Head of Personnel", "Captain" ) + if ((istype(src.active1, /datum/data/record) && L.Find(src.rank))) + src.temp = text("Rank:
    \nAssistants:
    \nResearch Assistant
    \nStaff Assistant
    \nMedical Assistant
    \nTechnical Assistant
    \nTechnicians:
    \nForensic Technician
    \nResearch Technician
    \nStation Technician
    \nAtmospheric Technician
    \nEngineer (Engine Technician)\nResearchers:
    \n
    Medical Researcher
    \nToxin Researcher
    \nOfficers:
    \nMedical Doctor
    \nSecurity Officer
    \nHigher Officers:
    \nHead of Research
    \nHead of Personnel
    \nCaptain
    ", src, src, src, src, src, src, src, src, src, src, src, src, src, src, src, src) + else + else + if (href_list["rank"]) + var/list/L = list( "Head of Personnel", "Captain" ) + if ((src.active1 && L.Find(src.rank))) + switch(href_list["rank"]) + if("res_assist") + src.active1.fields["rank"] = "Research Assistant" + if("staff_assist") + src.active1.fields["rank"] = "Staff Assistant" + if("med_assist") + src.active1.fields["rank"] = "Medical Assistant" + if("tech_assist") + src.active1.fields["rank"] = "Technical Assistant" + if("foren_tech") + src.active1.fields["rank"] = "Forensic Technician" + if("res_tech") + src.active1.fields["rank"] = "Research Technician" + if("stat_tech") + src.active1.fields["rank"] = "Station Technician" + if("atmo_tech") + src.active1.fields["rank"] = "Atmospheric Technician" + if("engineer") + src.active1.fields["rank"] = "Engineer" + if("med_res") + src.active1.fields["rank"] = "Medical Researcher" + if("tox_res") + src.active1.fields["rank"] = "Toxin Researcher" + if("med_doc") + src.active1.fields["rank"] = "Medical Doctor" + if("secure_off") + src.active1.fields["rank"] = "Security Officer" + if("hoperson") + src.active1.fields["rank"] = "Head of Research" + if("horesearch") + src.active1.fields["rank"] = "Head of Personnel" + if("captain") + src.active1.fields["rank"] = "Captain" + + else + if (href_list["criminal2"]) + if (src.active2) + switch(href_list["criminal2"]) + if("none") + src.active2.fields["criminal"] = "None" + if("arrest") + src.active2.fields["criminal"] = "*Arrest*" + if("incarcerated") + src.active2.fields["criminal"] = "Incarcerated" + if("parolled") + src.active2.fields["criminal"] = "Parolled" + if("released") + src.active2.fields["criminal"] = "Released" + + else + if (href_list["del_r"]) + if (src.active2) + src.temp = text("Are you sure you wish to delete the record (Security Portion Only)?
    \n\tYes
    \n\tNo
    ", src, src) + else + if (href_list["del_r2"]) + if (src.active2) + //src.active2 = null + del(src.active2) + else + if (href_list["dela_r"]) + if (src.active1) + src.temp = text("Are you sure you wish to delete the record (ALL)?
    \n\tYes
    \n\tNo
    ", src, src) + else + if (href_list["dela_r2"]) + for(var/datum/data/record/R in data_core.medical) + if ((R.fields["name"] == src.active1.fields["name"] || R.fields["id"] == src.active1.fields["id"])) + //R = null + del(R) + else + //Foreach continue //goto(2405) + if (src.active2) + //src.active2 = null + del(src.active2) + if (src.active1) + //src.active1 = null + del(src.active1) + else + if (href_list["d_rec"]) + var/datum/data/record/R = locate(href_list["d_rec"]) + var/S = locate(href_list["d_rec"]) + if (!( data_core.general.Find(R) )) + src.temp = "Record Not Found!" + return + for(var/datum/data/record/E in data_core.security) + if ((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"])) + S = E + else + //Foreach continue //goto(2614) + src.active1 = R + src.active2 = S + src.screen = 4 + else + if (href_list["new_r"]) + var/datum/data/record/G = new /datum/data/record( ) + G.fields["name"] = "New Record" + G.fields["id"] = text("[]", add_zero(num2hex(rand(1, 1.6777215E7)), 6)) + G.fields["rank"] = "Unassigned" + G.fields["sex"] = "Male" + G.fields["age"] = "Unknown" + G.fields["fingerprint"] = "Unknown" + G.fields["p_stat"] = "Active" + G.fields["m_stat"] = "Stable" + data_core.general += G + src.active1 = G + src.active2 = null + else + if (href_list["new"]) + if ((istype(src.active1, /datum/data/record) && !( istype(src.active2, /datum/data/record) ))) + var/datum/data/record/R = new /datum/data/record( ) + R.fields["name"] = src.active1.fields["name"] + R.fields["id"] = src.active1.fields["id"] + R.name = text("Security Record #[]", R.fields["id"]) + R.fields["criminal"] = "None" + R.fields["mi_crim"] = "None" + R.fields["mi_crim_d"] = "No minor crime convictions." + R.fields["ma_crim"] = "None" + R.fields["ma_crim_d"] = "No minor crime convictions." + R.fields["notes"] = "No notes." + data_core.security += R + src.active2 = R + src.screen = 4 + else + if (href_list["add_c"]) + if (!( istype(src.active2, /datum/data/record) )) + return + var/a2 = src.active2 + var/t1 = input("Add Comment:", "Secure. records", null, null) as message + if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || get_dist(src, usr) > 1 || src.active2 != a2)) + return + var/counter = 1 + while(src.active2.fields[text("com_[]", counter)]) + counter++ + src.active2.fields[text("com_[]", counter)] = text("Made by [] ([]) on [], 2053
    []", src.authenticated, src.rank, time2text(world.realtime, "DDD MMM DD hh:mm:ss"), t1) + else + if (href_list["del_c"]) + if ((istype(src.active2, /datum/data/record) && src.active2.fields[text("com_[]", href_list["del_c"])])) + src.active2.fields[text("com_[]", href_list["del_c"])] = "Deleted" + else + if (href_list["search_f"]) + var/t1 = input("Search String: (Fingerprint)", "Secure. records", null, null) as text + if ((!( t1 ) || usr.stat || !( src.authenticated ) || usr.restrained() || get_dist(src, usr) > 1)) + return + src.active1 = null + src.active2 = null + t1 = lowertext(t1) + for(var/datum/data/record/R in data_core.general) + if (lowertext(R.fields["fingerprint"]) == t1) + src.active1 = R + else + //Foreach continue //goto(3414) + if (!( src.active1 )) + src.temp = text("Could not locate record [].", t1) + else + for(var/datum/data/record/E in data_core.security) + if ((E.fields["name"] == src.active1.fields["name"] || E.fields["id"] == src.active1.fields["id"])) + src.active2 = E + else + //Foreach continue //goto(3502) + src.screen = 4 + else + if (href_list["search"]) + var/t1 = input("Search String: (Name or ID)", "Secure. records", null, null) as text + if ((!( t1 ) || usr.stat || !( src.authenticated ) || usr.restrained() || get_dist(src, usr) > 1)) + return + src.active1 = null + src.active2 = null + t1 = lowertext(t1) + for(var/datum/data/record/R in data_core.general) + if ((lowertext(R.fields["name"]) == t1 || t1 == lowertext(R.fields["id"]))) + src.active1 = R + else + //Foreach continue //goto(3708) + if (!( src.active1 )) + src.temp = text("Could not locate record [].", t1) + else + for(var/datum/data/record/E in data_core.security) + if ((E.fields["name"] == src.active1.fields["name"] || E.fields["id"] == src.active1.fields["id"])) + src.active2 = E + else + //Foreach continue //goto(3813) + src.screen = 4 + else + if (href_list["print_p"]) + if (!( src.printing )) + src.printing = 1 + sleep(50) + var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( src.loc ) + P.info = "
    Security Record

    " + if ((istype(src.active1, /datum/data/record) && data_core.general.Find(src.active1))) + P.info += text("Name: [] ID: []
    \nSex: []
    \nAge: []
    \nFingerprint: []
    \nPhysical Status: []
    \nMental Status: []
    ", src.active1.fields["name"], src.active1.fields["id"], src.active1.fields["sex"], src.active1.fields["age"], src.active1.fields["fingerprint"], src.active1.fields["p_stat"], src.active1.fields["m_stat"]) + else + P.info += "General Record Lost!
    " + if ((istype(src.active2, /datum/data/record) && data_core.security.Find(src.active2))) + P.info += text("
    \n
    Security Data

    \nCriminal Status: []
    \n
    \nMinor Crimes: []
    \nDetails: []
    \n
    \nMajor Crimes: []
    \nDetails: []
    \n
    \nImportant Notes:
    \n\t[]
    \n
    \n
    Comments/Log

    ", src.active2.fields["criminal"], src.active2.fields["mi_crim"], src.active2.fields["mi_crim_d"], src.active2.fields["ma_crim"], src.active2.fields["ma_crim_d"], src.active2.fields["notes"]) + var/counter = 1 + while(src.active2.fields[text("com_[]", counter)]) + P.info += text("[]
    ", src.active2.fields[text("com_[]", counter)]) + counter++ + else + P.info += "Security Record Lost!
    " + P.info += "" + P.name = "paper- 'Security Record'" + src.printing = null + src.add_fingerprint(usr) + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(4247) + return + +/obj/machinery/computer/sleep_console/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + //SN src = null + del(src) + return + else + return + +/obj/machinery/computer/sleep_console/New() + + ..() + spawn( 5 ) + src.connected = locate(/obj/machinery/sleeper, get_step(src, WEST)) + return + return + +/obj/machinery/computer/sleep_console/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/computer/sleep_console/attack_hand(mob/user as mob) + + if (src.connected) + var/mob/occupant = src.connected.occupant + var/dat = "Occupant Statistics:
    " + if (occupant) + var/t1 + switch(occupant.stat) + if(0.0) + t1 = "Conscious" + if(1.0) + t1 = "Unconscious" + if(2.0) + t1 = "*dead*" + else + dat += text("[]\tHealth %: [] ([])
    ", (occupant.health > 50 ? "" : ""), occupant.health, t1) + dat += text("[]\t-Respiratory Damage %: []
    ", (occupant.oxyloss < 60 ? "" : ""), occupant.oxyloss) + dat += text("[]\t-Toxin Content %: []
    ", (occupant.toxloss < 60 ? "" : ""), occupant.toxloss) + dat += text("[]\t-Burn Severity %: []
    ", (occupant.fireloss < 60 ? "" : ""), occupant.fireloss) + dat += text("
    Paralysis Summary %: [] ([] seconds left!)

    ", occupant.paralysis, round(occupant.paralysis / 4)) + dat += text("
    Refresh
    Inject Rejuvenators", src, src) + else + dat += "The sleeper is empty." + dat += text("

    Close", user) + user << browse(dat, "window=sleeper;size=400x500") + return + +/obj/machinery/computer/sleep_console/Topic(href, href_list) + ..() + if ((usr.stat || usr.restrained())) + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["rejuv"]) + if (src.connected) + src.connected.inject(usr) + if (href_list["refresh"]) + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(123) + src.add_fingerprint(usr) + return + +/obj/machinery/computer/sleep_console/process() + + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(18) + return + +/obj/machinery/computer/sleep_console/power_change() + // no change - sleeper works without power + +/obj/machinery/freezer/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/freezer/attack_hand(mob/user as mob) + + user.machine = src + + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + var/d1 + if (locate(/obj/item/weapon/flasks, src)) + var/counter = 1 + + for(var/obj/item/weapon/flasks/F in src) + d1 += text("Flask []: [] / [] / []
    ", src, counter, counter, F.oxygen, F.plasma, F.coolant) + counter++ + //Foreach goto(78) + d1 += "Key: Oxygen / Plasma / Coolant
    " + else + d1 = "No flasks!" + var/t1 = null + switch(src.t_flags) + if(0.0) + t1 = text("Oxygen-No Plasma-No", src, src) + if(1.0) + t1 = text("Oxygen-Yes Plasma-No", src, src) + if(2.0) + t1 = text("Oxygen-No Plasma-Yes", src, src) + if(3.0) + t1 = text("Oxygen-Yes Plasma-Yes", src, src) + else + var/t2 = null + if (src.status) + t2 = text("Cooling-[] Stop", src.c_used, src) + else + t2 = text("Cool Stopped", src) + var/dat = text("
    \n\t\tTemperature: []
    \n\t\tTransfer Status: []
    \n\t\t Chemicals Used: []
    \n\t\tFreezer status: []
    \n\t\t - - [] + +
    \n
    \n\t[]
    \n
    \n
    \n\tClose
    \n\t
    ", src.temperature-T0C, (src.transfer ? text("Transfering Stop", src) : text("Transfer Stopped", src)), t1, t2, src, src, src.c_used, src, src, d1, user) + user << browse(dat, "window=freezer;size=400x500") + else + var/d1 = null + if (locate(/obj/item/weapon/flasks, src)) + var/counter = 1 + for(var/obj/item/weapon/flasks/F in src) + d1 += text("[] []: []
    ", src, counter, stars("Flask"), counter, stars(text("[] / [] / []", F.oxygen, F.plasma, F.coolant))) + counter++ + //Foreach goto(380) + d1 += "Key: Oxygen / Plasma / Coolant
    " + else + d1 = "No flasks!" + var/t1 = null + switch(src.t_flags) + if(0.0) + t1 = text("[] []", src, stars("Oxygen-No"), src, stars("Plasma-No")) + if(1.0) + t1 = text("[] []", src, stars("Oxygen-Yes"), src, stars("Plasma-No")) + if(2.0) + t1 = text("[] []", src, stars("Oxygen-No"), src, stars("Plasma-Yes")) + if(3.0) + t1 = text("[] []", src, stars("Oxygen-Yes"), src, stars("Plasma-Yes")) + else + var/t2 = null + if (src.status) + t2 = text("Cooling-[] []", src.c_used, src, stars("Stop")) + else + t2 = text("Cool []", src, stars("Stopped")) + var/dat = text("
    \n\t\t[]: []
    \n\t\t[]: []
    \n\t\t []: []
    \n\t\t[]: []
    \n\t\t - - [] + +
    \n
    \n\t[]
    \n
    \n
    \n\tClose\n\t
    ", stars("Temperature"), src.temperature-T0C, stars("Transfer Status"), (src.transfer ? text("Transfering Stop", src) : text("Transfer Stopped", src)), stars("Chemicals Used"), t1, stars("Freezer status"), t2, src, src, src.c_used, src, src, d1, user) + user << browse(dat, "window=freezer;size=400x500") + return + +/obj/machinery/freezer/Topic(href, href_list) + ..() + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + usr << "\red You don't have the dexterity to do this!" + return + if ((usr.stat || usr.restrained())) + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["cp"]) + var/cp = text2num(href_list["cp"]) + src.c_used += cp + src.c_used = min(max(round(src.c_used), 0), 10) + if (href_list["oxygen"]) + var/t1 = text2num(href_list["oxygen"]) + if (t1) + src.t_flags |= 1 + else + src.t_flags &= 65534 + if (href_list["plasma"]) + var/t1 = text2num(href_list["plasma"]) + if (t1) + src.t_flags |= 2 + else + src.t_flags &= 65533 + if (href_list["cool"]) + src.status = text2num(href_list["cool"]) + src.icon_state = text("freezer_[]", src.status) + if (href_list["transfer"]) + src.transfer = text2num(href_list["transfer"]) + if (href_list["flask"]) + var/t1 = text2num(href_list["flask"]) + if (t1 <= src.contents.len) + var/obj/F = src.contents[t1] + F.loc = src.loc + src.rebuild_overlay() + src.add_fingerprint(usr) + return + +/obj/machinery/freezer/power_change() + ..() + if(stat & NOPOWER) + icon_state = "freezer_0" + else + src.icon_state = "freezer_[status]" + +/obj/machinery/freezer/process() + + if(stat & NOPOWER) + return + + use_power(50) + + var/obj/item/weapon/flasks/F1 + var/obj/item/weapon/flasks/F2 + var/obj/item/weapon/flasks/F3 + if (src.contents.len >= 3) + F3 = src.contents[3] + if (src.contents.len >= 2) + F2 = src.contents[2] + if (src.contents.len >= 1) + F1 = src.contents[1] + var/u_cool = 0 + if (src.status) + u_cool = src.c_used + if ((F2 && F2.coolant)) + if (F2.coolant >= u_cool) + F2.coolant -= u_cool + else + u_cool = F2.coolant + F2.coolant = 0 + else + if ((F1 && F1.coolant)) + if (F1.coolant >= u_cool) + F1.coolant -= u_cool + else + u_cool = F1.coolant + F1.coolant = 0 + else + if ((F3 && F3.coolant)) + if (F3.coolant >= u_cool) + F3.coolant -= u_cool + else + u_cool = F3.coolant + F3.coolant = 0 + else + u_cool = 0 + if (u_cool) + src.temperature = max((-100.0+T0C), src.temperature - (u_cool * 5) ) + use_power(200) + + src.temperature = min(src.temperature + 5, 20+T0C) + if (src.transfer) + var/u_oxy = 0 + var/u_pla = 0 + if (src.t_flags & 1) + u_oxy = 1 + if ((F1 && F1.oxygen)) + if (F1.oxygen >= u_oxy) + F1.oxygen -= u_oxy + else + u_oxy = F1.oxygen + F1.oxygen = 0 + else + if ((F2 && F2.oxygen)) + if (F2.oxygen >= u_oxy) + F2.oxygen -= u_oxy + else + u_oxy = F2.oxygen + F2.oxygen = 0 + else + if ((F3 && F3.oxygen)) + if (F3.oxygen >= u_oxy) + F3.oxygen -= u_oxy + else + u_oxy = F3.oxygen + F3.oxygen = 0 + else + u_oxy = 0 + if (src.t_flags & 2) + u_pla = 1 + if ((F3 && F3.plasma)) + if (F3.plasma >= u_pla) + F3.plasma -= u_pla + else + u_pla = F3.plasma + F3.plasma = 0 + else + if ((F2 && F2.plasma)) + if (F2.plasma >= u_pla) + F2.plasma -= u_pla + else + u_pla = F2.plasma + F2.plasma = 0 + else + if ((F1 && F1.plasma)) + if (F1.plasma >= u_pla) + F1.plasma -= u_pla + else + u_pla = F1.plasma + F1.plasma = 0 + else + u_pla = 0 + if ( (u_oxy + u_pla) > 0) + ngas.oxygen += u_oxy + ngas.plasma += u_pla + ngas.temperature = src.temperature + spawn( 1 ) + if (src.line_out) + + if(vnode) + var/delta_gt = FLOWFRAC * ( vnode.get_gas_val(src) - gas.tot_gas() / capmult) + calc_delta( src, gas, ngas, vnode, delta_gt) + else + leak_to_turf() + + //src.line_out.receive_gas(G, src) + return + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(809) + return + +/obj/machinery/freezer/gas_flow() + + gas.replace_by(ngas) + + +/obj/machinery/freezer/proc/leak_to_turf() + + var/turf/T = get_step(src, EAST) + + if(T.density) + T = src.loc + if(T.density) + return + + flow_to_turf(gas, ngas, T) + + +/obj/machinery/freezer/orient_pipe(P as obj) + + if (!( src.line_out )) + src.line_out = P + else + return 0 + return 1 + return + +/obj/machinery/freezer/New() + + ..() + var/obj/overlay/O1 = new /obj/overlay( ) + O1.icon = 'Cryogenic2.dmi' + O1.icon_state = "canister connector_0" + O1.pixel_y = -16.0 + src.overlays += O1 + src.connector = O1 + new /obj/item/weapon/flasks/oxygen( src ) + new /obj/item/weapon/flasks/coolant( src ) + new /obj/item/weapon/flasks/plasma( src ) + rebuild_overlay() + + gas = new/obj/substance/gas() + ngas = new/obj/substance/gas() + + gasflowlist += src + /*spawn( 50 ) + for(var/obj/machinery/M in orange(src, 1)) + if ((M.level == src.level && src.p_dir & get_dir(src, M) && M.p_dir & get_dir(M, src))) + if (!( src.line_out )) + src.line_out = M + //Foreach goto(117) + return*/ + return + +/obj/machinery/freezer/buildnodes() + + var/turf/T = src.loc + + line_out = get_machine(level, T, p_dir ) + + if(line_out) vnode = line_out.getline() + + return + + +/obj/machinery/freezer/get_gas_val(from) + return gas.tot_gas() + +/obj/machinery/freezer/get_gas(from) + return gas + + +/obj/machinery/freezer/attackby(obj/item/weapon/flasks/F as obj, mob/user as mob) + + if (!( istype(F, /obj/item/weapon/flasks) )) + return + if (src.contents.len >= 3) + user << "\blue All slots are full!" + return + else + user.drop_item() + F.loc = src + src.rebuild_overlay() + return + +/obj/machinery/freezer/proc/rebuild_overlay() + for(var/x in src.overlays) + src.overlays -= x + //Foreach goto(17) + src.overlays += src.connector + var/counter = 0 + for(var/obj/item/weapon/flasks/F in src.contents) + var/obj/overlay/O = new /obj/overlay( ) + O.icon = F.icon + O.icon_state = F.icon_state + O.pixel_y = -17.0 + O.pixel_x = counter * 12 + src.overlays += O + counter++ + if (counter >= 3) + return + //Foreach goto(64) + return + +/obj/machinery/sleeper/allow_drop() + + return 0 + return + +/obj/machinery/sleeper/process() + + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(18) + return + +/obj/machinery/sleeper/ex_act(severity) + + switch(severity) + if(1.0) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(31) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(104) + //SN src = null + del(src) + return + else + return + +/obj/machinery/sleeper/blob_act() + + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + del(src) + +/obj/machinery/sleeper/verb/eject() + set src in oview(1) + + if (usr.stat != 0) + return + src.go_out() + add_fingerprint(usr) + return + +/obj/machinery/sleeper/verb/move_inside() + set src in oview(1) + + if (usr.stat != 0) + return + if (src.occupant) + usr << "\blue The sleeper is already occupied!" + return + if (usr.abiotic()) + usr << "Subject may not have abiotic items on." + return + usr.pulling = null + usr.client.perspective = EYE_PERSPECTIVE + usr.client.eye = src + usr.loc = src + src.occupant = usr + src.icon_state = "sleeper_1" + for(var/obj/O in src) + //O = null + del(O) + //Foreach goto(124) + src.add_fingerprint(usr) + return + +/obj/machinery/sleeper/attackby(obj/item/weapon/grab/G as obj, mob/user as mob) + + if ((!( istype(G, /obj/item/weapon/grab) ) || !( ismob(G.affecting) ))) + return + if (src.occupant) + user << "\blue The sleeper is already occupied!" + return + if (G.affecting.abiotic()) + user << "Subject may not have abiotic items on." + return + var/mob/M = G.affecting + if (M.client) + M.client.perspective = EYE_PERSPECTIVE + M.client.eye = src + M.loc = src + src.occupant = M + src.icon_state = "sleeper_1" + for(var/obj/O in src) + O.loc = src.loc + //Foreach goto(154) + src.add_fingerprint(user) + //G = null + del(G) + return + +/obj/machinery/sleeper/proc/go_out() + + if (!( src.occupant )) + return + for(var/obj/O in src) + O.loc = src.loc + //Foreach goto(26) + if (src.occupant.client) + src.occupant.client.eye = src.occupant.client.mob + src.occupant.client.perspective = MOB_PERSPECTIVE + src.occupant.loc = src.loc + src.occupant = null + src.icon_state = "sleeper_0" + return + +/obj/machinery/sleeper/proc/inject(mob/user as mob) + + if (src.occupant) + if (src.occupant.rejuv < 60) + src.occupant.rejuv = 60 + user << text("Occupant now has [] units of rejuvenation in his/her bloodstream.", src.occupant.rejuv) + else + user << "No occupant!" + return + +/obj/machinery/sleeper/proc/check(mob/user as mob) + + if (src.occupant) + user << text("\blue Occupant ([]) Statistics:", src.occupant) + var/t1 + switch(src.occupant.stat) + if(0.0) + t1 = "Conscious" + if(1.0) + t1 = "Unconscious" + if(2.0) + t1 = "*dead*" + else + user << text("[]\t Health %: [] ([])", (src.occupant.health > 50 ? "\blue " : "\red "), src.occupant.health, t1) + user << text("[]\t -Respiratory Damage %: []", (src.occupant.oxyloss < 60 ? "\blue " : "\red "), src.occupant.oxyloss) + user << text("[]\t -Toxin Content %: []", (src.occupant.toxloss < 60 ? "\blue " : "\red "), src.occupant.toxloss) + user << text("[]\t -Burn Severity %: []", (src.occupant.fireloss < 60 ? "\blue " : "\red "), src.occupant.fireloss) + user << "\blue Expected time till occupant can safely awake: (note: If health is below 20% these times are inaccurate)" + user << text("\blue \t [] second\s (if around 1 or 2 the sleeper is keeping them asleep.)", src.occupant.paralysis / 5) + else + user << "\blue There is no one inside!" + return + +/obj/machinery/sleeper/ex_act(severity) + + switch(severity) + if(1.0) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(35) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(108) + //SN src = null + del(src) + return + if(3.0) + if (prob(25)) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(181) + //SN src = null + del(src) + return + else + return + +/obj/machinery/sleeper/alter_health(mob/M as mob) + + if (M.health > 0) + if (M.oxyloss >= 10) + var/amount = max(0.15, 1) + M.oxyloss -= amount + else + M.oxyloss = 0 + M.health = 100 - M.oxyloss - M.toxloss - M.fireloss - M.bruteloss + M.paralysis -= 4 + M.weakened -= 4 + M.stunned -= 4 + if (M.paralysis <= 1) + M.paralysis = 3 + if (M.weakened <= 1) + M.weakened = 3 + if (M.stunned <= 1) + M.stunned = 3 + if (M.rejuv < 3) + M.rejuv = 4 + return + +/obj/machinery/cryo_cell/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(54) + src.icon_state = "broken" + else + return + +/obj/machinery/cryo_cell/blob_act() + for(var/x in src.verbs) + src.verbs -= x + src.icon_state = "broken" + src.density = 0 + +/obj/machinery/cryo_cell/orient_pipe(P as obj) + + if (!( src.line_in )) + src.line_in = P + else + return 0 + return 1 + return + +/obj/machinery/cryo_cell/allow_drop() + + return 0 + return + +/obj/machinery/cryo_cell/New() + + ..() + src.layer = 5 + O1 = new /obj/overlay( ) + O1.icon = 'Cryogenic2.dmi' + O1.icon_state = "cellconsole" + O1.pixel_y = -32.0 + O1.layer = 4 + + O2 = new /obj/overlay( ) + O2.icon = 'Cryogenic2.dmi' + O2.icon_state = "cellbottom" + O2.pixel_y = -32.0 + src.pixel_y = 32 + + add_overlays() + + src.gas = new /obj/substance/gas( null ) + gas.temperature = T20C + src.ngas = new /obj/substance/gas (null) + ngas.temperature = T20C + + gasflowlist += src + +/obj/machinery/cryo_cell/proc/add_overlays() + src.overlays = list(O1, O2) + +/obj/machinery/cryo_cell/power_change() + ..() + if(stat & NOPOWER) + icon_state = "celltop-p" + O1.icon_state="cellconsole-p" + O2.icon_state="cellbottom-p" + else + icon_state = "celltop[ occupant ? "_1" : ""]" + O1.icon_state ="cellconsole" + O2.icon_state ="cellbottom" + + add_overlays() + +/obj/machinery/cryo_cell/process() + + if(vnode) + var/delta_gt = FLOWFRAC * ( vnode.get_gas_val(src) - gas.tot_gas() / capmult) + calc_delta( src, gas, ngas, vnode, delta_gt) + else + leak_to_turf() + + + if(stat & NOPOWER) + return + use_power(500) + + + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + +/obj/machinery/cryo_cell/proc/leak_to_turf() + + var/turf/T = get_step(src, WEST) + + if(T.density) + T = src.loc + if(T.density) + return + + flow_to_turf(gas, ngas, T) + + +/obj/machinery/cryo_cell/buildnodes() + + var/turf/T = src.loc + + line_in = get_machine(level, T, p_dir ) + + if(line_in) vnode = line_in.getline() + + return + + +/obj/machinery/cryo_cell/get_gas_val(from) + return gas.tot_gas() + +/obj/machinery/cryo_cell/get_gas(from) + return gas + +/obj/machinery/cryo_cell/gas_flow() + gas.replace_by(ngas) + +/obj/machinery/cryo_cell/verb/move_eject() + set src in oview(1) + + if (usr.stat != 0) + return + src.go_out() + add_fingerprint(usr) + return + +/obj/machinery/cryo_cell/verb/move_inside() + set src in oview(1) + + if (usr.stat != 0 || stat & NOPOWER) + return + if (src.occupant) + usr << "\blue The cell is already occupied!" + return + if (usr.abiotic()) + usr << "Subject may not have abiotic items on." + return + usr.pulling = null + usr.client.perspective = EYE_PERSPECTIVE + usr.client.eye = src + usr.loc = src + src.occupant = usr + src.icon_state = "celltop_1" + for(var/obj/O in src) + O.loc = src.loc + //Foreach goto(124) + src.add_fingerprint(usr) + return + +/obj/machinery/cryo_cell/attackby(obj/item/weapon/grab/G as obj, mob/user as mob) + + if (stat & NOPOWER) return + + if ((!( istype(G, /obj/item/weapon/grab) ) || !( ismob(G.affecting) ))) + return + if (src.occupant) + user << "\blue The cell is already occupied!" + return + if (G.affecting.abiotic()) + user << "Subject may not have abiotic items on." + return + var/mob/M = G.affecting + if (M.client) + M.client.perspective = EYE_PERSPECTIVE + M.client.eye = src + M.loc = src + src.occupant = M + src.icon_state = "celltop_1" + for(var/obj/O in src) + //O = null + del(O) + //Foreach goto(154) + src.add_fingerprint(user) + //G = null + del(G) + return + +/obj/machinery/cryo_cell/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/cryo_cell/attack_hand(mob/user as mob) + + if(stat & NOPOWER) + return + + user.machine = src + if (istype(user, /mob/human)) + var/dat = " System Statistics:
    " + if (src.gas.temperature > T0C) + dat += text("\tTemperature (°C): [] (MUST be below 0, add coolant to mixture)
    ", round(src.gas.temperature-T0C, 0.1)) + else + dat += text("\tTemperature (°C): []
    ", round(src.gas.temperature-T0C, 0.1)) + if (src.gas.plasma < 1) + dat += text("\tPlasma Units: [] (Add plasma to mixture!)
    ", round(src.gas.plasma, 0.1)) + else + dat += text("\tPlasma Units: []
    ", round(src.gas.plasma, 0.1)) + if (src.gas.oxygen < 1) + dat += text("\tOxygen Units: [] (Add oxygen to mixture!)
    ", round(src.gas.oxygen, 0.1)) + else + dat += text("\tOxygen Units: []
    ", round(src.gas.oxygen, 0.1)) + if (src.occupant) + dat += "Occupant Statistics:
    " + var/t1 + switch(src.occupant.stat) + if(0.0) + t1 = "Conscious" + if(1.0) + t1 = "Unconscious" + if(2.0) + t1 = "*dead*" + else + dat += text("[]\tHealth %: [] ([])

    ", (src.occupant.health > 50 ? "" : ""), src.occupant.health, t1) + dat += text("[]\t-Respiratory Damage %: []
    ", (src.occupant.oxyloss < 60 ? "" : ""), src.occupant.oxyloss) + dat += text("[]\t-Toxin Content %: []
    ", (src.occupant.toxloss < 60 ? "" : ""), src.occupant.toxloss) + dat += text("[]\t-Burn Severity %: []", (src.occupant.fireloss < 60 ? "" : ""), src.occupant.fireloss) + dat += text("

    Close", user) + user << browse(dat, "window=cryo;size=400x500") + else + var/dat = text(" []
    ", stars("System Statistics:")) + if (src.gas.temperature > T0C) + dat += text("\t[]
    ", stars(text("Temperature (C): [] (MUST be below 0, add coolant to mixture)", round(src.gas.temperature-T0C, 0.1)))) + else + dat += text("\t[]
    ", stars(text("Temperature(C): []", round(src.gas.temperature-T0C, 0.1)))) + if (src.gas.plasma < 1) + dat += text("\t[]
    ", stars(text("Plasma Units: [] (Add plasma to mixture!)", round(src.gas.plasma, 0.1)))) + else + dat += text("\t[]
    ", stars(text("Plasma Units: []", round(src.gas.plasma, 0.1)))) + if (src.gas.oxygen < 1) + dat += text("\t[]
    ", stars(text("Oxygen Units: [] (Add oxygen to mixture!)", round(src.gas.oxygen, 0.1)))) + else + dat += text("\t[]
    ", stars(text("Oxygen Units: []", round(src.gas.oxygen, 0.1)))) + if (src.occupant) + dat += "Occupant Statistics:
    " + var/t1 = null + switch(src.occupant.stat) + if(0.0) + t1 = "Conscious" + if(1.0) + t1 = "Unconscious" + if(2.0) + t1 = "*dead*" + else + dat += text("[]\t[]

    ", (src.occupant.health > 50 ? "" : ""), stars(text("Health %: [] ([])", src.occupant.health, t1))) + dat += text("[]\t[]
    ", (src.occupant.oxyloss < 60 ? "" : ""), stars(text("-Respiratory Damage %: []", src.occupant.oxyloss))) + dat += text("[]\t[]
    ", (src.occupant.toxloss < 60 ? "" : ""), stars(text("-Toxin Content %: []", src.occupant.toxloss))) + dat += text("[]\t[]", (src.occupant.fireloss < 60 ? "" : ""), stars(text("-Burn Severity %: []", src.occupant.fireloss))) + dat += text("

    Close", user) + user << browse(dat, "window=cryo;size=400x500") + return + +/obj/machinery/cryo_cell/proc/go_out() + + if (!( src.occupant )) + return + for(var/obj/O in src) + O.loc = src.loc + //Foreach goto(26) + if (src.occupant.client) + src.occupant.client.eye = src.occupant.client.mob + src.occupant.client.perspective = MOB_PERSPECTIVE + src.occupant.loc = src.loc + src.occupant = null + src.icon_state = "celltop" + return + +/obj/machinery/cryo_cell/relaymove(mob/user as mob) + + if (user.stat) + return + src.go_out() + return + +/obj/machinery/cryo_cell/alter_health(mob/M as mob) + + if(stat & NOPOWER) + return + + if (M.health < 0) + if ((src.gas.temperature > T0C || src.gas.plasma < 1)) + return + if (M.stat == 2) + return + if (src.gas.oxygen >= 1) + src.ngas.oxygen-- + if (M.oxyloss >= 10) + var/amount = max(0.15, 2) + M.oxyloss -= amount + else + M.oxyloss = 0 + M.health = 100 - M.oxyloss - M.toxloss - M.fireloss - M.bruteloss + if ((src.gas.temperature < T0C && src.gas.plasma >= 1)) + src.ngas.plasma-- + if (M.toxloss > 5) + var/amount = max(0.1, 2) + M.toxloss -= amount + else + M.toxloss = 0 + M.health = 100 - M.oxyloss - M.toxloss - M.fireloss - M.bruteloss + if (istype(M, /mob/human)) + var/mob/human/H = M + var/ok = 0 + for(var/organ in H.organs) + var/obj/item/weapon/organ/external/affecting = H.organs[text("[]", organ)] + ok += affecting.heal_damage(5, 5) + //Foreach goto(267) + if (ok) + H.UpdateDamageIcon() + else + H.UpdateDamage() + else + if (M.fireloss > 15) + var/amount = max(0.3, 2) + M.fireloss -= amount + else + M.fireloss = 0 + if (M.bruteloss > 10) + var/amount = max(0.3, 2) + M.bruteloss -= amount + else + M.bruteloss = 0 + M.health = 100 - M.oxyloss - M.toxloss - M.fireloss - M.bruteloss + M.paralysis += 5 + if (src.gas.temperature < (60+T0C)) + src.gas.temperature = min(src.gas.temperature + 1, 60+T0C) + for(var/mob/E in viewers(1, src)) + if ((E.client && E.machine == src)) + src.attack_hand(E) + //Foreach goto(489) + + return + return + + +/* +/obj/machinery/cryo_cell/receive_gas(S as obj, source as obj) + + if (!( istype(S, /obj/substance/gas) )) + //S = null + del(S) + return + else + src.gas.merge_into(S) + //S = null + //del(S) // ****************************************** removed + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(74) + return +*/ + +/obj/item/weapon/flasks/examine() + set src in oview(1) + + usr << text("The flask is []% full", (src.oxygen + src.plasma + src.coolant) * 100 / 500) + usr << "The flask can ONLY store liquids." + return + +/mob/human/abiotic() + + if ((src.l_hand && !( src.l_hand.abstract )) || (src.r_hand && !( src.r_hand.abstract )) || (src.back || src.wear_mask || src.head || src.shoes || src.w_uniform || src.wear_suit || src.w_radio || src.glasses || src.ears || src.gloves)) + return 1 + else + return 0 + return + +/mob/proc/abiotic() + + if ((src.l_hand && !( src.l_hand.abstract )) || (src.r_hand && !( src.r_hand.abstract )) || src.back || src.wear_mask) + return 1 + else + return 0 + return + +/datum/data/function/proc/reset() + + return + +/datum/data/function/proc/r_input(href, href_list, mob/user as mob) + + return + +/datum/data/function/proc/display() + + return diff --git a/main-src/Code/datumvars.dm b/main-src/Code/datumvars.dm new file mode 100644 index 0000000..a2ee4ba --- /dev/null +++ b/main-src/Code/datumvars.dm @@ -0,0 +1,91 @@ + +// shows a browser pop-up window listing the variables in a datum + +/proc/Vars(datum/D in view()) + set category = "Debug" + + var/dat = "Vars for " + + if(istype(D, /atom)) // if the datum is an atom + var/atom/A = D // do special handling + dat += "[A.name] : [A.type] \ref[A]" + + #ifdef VARSICON + if(A.icon) // if the atom has an icon, display it + dat += variable(usr, "icon", new/icon(A.icon, A.icon_state, A.dir)) + #endif + + else // not an atom + dat += "[D] : [D.type] \ref[D]" + + + for(var/V in D.vars) // for each variable in the datum + dat += variable(usr, V, D.vars[V]) //get the text for that variable + + dat += "" + usr << browse(dat, "window=\ref[D]") // display the browser pop-up + + +// return a HTML formatted string displaying a variable + +/proc/variable(user, vname, val) + + var/t + + if(vname == "*") // true if this variable is part of a list + t = "* [val]" // so format smaller grey text, and just show the value + else // otherwise show the name and value without formatting + if(istext(val)) + t = "[vname] = \"[val]\"" // place quotes around text values + else + t = "[vname] = [val]" + + + if(istype(val,/icon)) // if this variable is an icon, display it + + #ifdef VARSICON + var/rnd = rand(1,10000) // use random number in filename to avoid conflicts + user << browse_rsc(val, "tmp\ref[val][rnd].png") // precache the icon image file + t+="" // and add the icon to the HTML + #endif + + + else if(istype(val, /datum)) // if this is a datum object + var/datum/dval = val // add a link to the object to the HTML + t+= " ([dval.type]) \ref[val]" + + if("[val]" == "/list") // if this is a list object + t += " (length [length(val)])
    " + + if( (vname!="vars") && (vname!="verbs") && length(val)<500) // and it's not vars or verbs, or too long + + for(var/lv in val) // loop through all items in the list + t += variable(user, "*", lv) // and display them + + else + t += "

    " + + return t // return the formatted text + +// topic handler for linked objects +// invoked when user clicks on an object link in the datum vars pop-up +// note all other Topic procs should call ..() first so this can be called + +/datum/Topic(href, href_list) + + if(href_list["Vars"]) // if this link came from the vars window + + Vars(src) // invoke a new window for this object + + +/mob/proc/Delete(atom/A in view()) + set category = "Debug" + + switch( alert("Are you sure you wish to delete \the [A.name] at ([A.x],[A.y],[A.z]) ?", "Admin Delete Object","Yes","No") ) + if("Yes") + + if(config.logadmin) world.log << "ADMIN: [usr.key] deleted [A.name] at ([A.x],[A.y],[A.z])" + + + del(A) + diff --git a/main-src/Code/demo.dm b/main-src/Code/demo.dm new file mode 100644 index 0000000..264ae6b --- /dev/null +++ b/main-src/Code/demo.dm @@ -0,0 +1,3449 @@ +/obj/machinery/New() + ..() + machines += src + +/obj/machinery/Del() + machines -= src + ..() + +/obj/machinery/door/meteorhit(obj/M as obj) + + src.open() + return + +/obj/machinery/door/Move() + + ..() + if (src.density) + var/turf/location = src.loc + if (istype(location, /turf)) + location.updatecell = 0 + buildlinks() + return + + +//*****RM +/obj/machinery/door/attack_paw(mob/user as mob) + + return src.attack_hand(user) + +/obj/machinery/door/attack_hand(mob/user as mob) + if(istype(user, /mob/human)) + var/mob/human/H = user + if(H.wear_id) + attackby(H.wear_id, user) + return +//***** + +/obj/machinery/door/attackby(obj/item/I as obj, mob/user as mob) + + if (src.operating) + return + src.add_fingerprint(user) + if ((src.density && istype(I, /obj/item/weapon/card/emag))) + src.operating = 1 + flick("door_spark", src) + sleep(6) + src.operating = null + open() + return 1 + var/obj/item/weapon/card/id/card + if (istype(user, /mob/human)) + var/mob/human/H = user + card = H.wear_id + if (istype(I, /obj/item/weapon/card/id)) + card = I + else + if (!( istype(card, /obj/item/weapon/card/id) )) + return 0 + if (card.check_access(access, allowed)) + if (src.density) + open() + else + close() + else + if (src.density) + flick("door_deny", src) + return + +/obj/machinery/door/window/close() + + ..() + var/turf/T = src.loc + if (T) + T.updatecell = 1 + T.buildlinks() + return + +/obj/machinery/door/window/New() + + ..() + var/turf/T = src.loc + if (T) + T.updatecell = 1 + T.buildlinks() + if ( (access && access!="0000") || allowed) + src.icon = 'security.dmi' + return + + +/obj/machinery/door/window/Bumped(atom/movable/AM as mob|obj) + + if (!( ismob(AM) )) + return + src.cycle(AM,1) + return + +//*****RM +/obj/machinery/door/window/attack_paw(mob/user as mob) + + return src.attack_hand(user) + +/obj/machinery/door/window/attack_hand(mob/user as mob) + src.cycle(user,0) + return + +/obj/machinery/door/window/proc/cycle(mob/user, bumped=0) + if (!( ticker )) + return + if (src.operating) + return + if (access && access=="0000" && !allowed) + if (src.density) + open() + sleep(50) + close() + return + + if(bumped) + return + + var/obj/item/weapon/card/id/card + if (istype(user, /mob/human)) + var/mob/human/H = user + card = H.wear_id + if (!( istype(card, /obj/item/weapon/card/id) )) + return + else + return + if (card.check_access(access, allowed)) + if (src.density) + open() + else + close() + else + if (src.density) + flick("door_deny", src) + return +//***** + +/obj/machinery/door/window/CheckPass(atom/movable/O as mob|obj, target as turf) + + if (src.density) + var/direct = get_dir(O, target) + if ((direct == NORTH && src.dir & 12)) + return 0 + else + if ((direct == WEST && src.dir & 3)) + return 0 + return 1 + return + +/obj/machinery/door/window/CheckExit(atom/movable/O as mob|obj, target as turf) + + if (src.density) + var/direct = get_dir(O, target) + if ((direct == SOUTH && src.dir & 12)) + return 0 + else + if ((direct == EAST && src.dir & 3)) + return 0 + return 1 + return + +/obj/machinery/door/false_wall/New() + ..() + src.verbs -= /atom/movable/verb/pull + return + +/obj/machinery/door/false_wall/examine() + set src in oview(1) + + usr << "It looks like a regular wall" + return + +/obj/machinery/door/false_wall/attack_paw(mob/user as mob) + + if ((ticker && ticker.mode == "monkey")) + return src.attack_hand(user) + return + +/obj/machinery/door/false_wall/attack_hand(mob/user as mob) + + src.add_fingerprint(user) + if (src.density) + if (prob(25)) + open() + else + user << "\blue You push the wall but nothing happens!" + else + close() + return + +/obj/machinery/door/false_wall/attackby(obj/item/weapon/screwdriver/S as obj, mob/user as mob) + + src.add_fingerprint(user) + if (istype(S, /obj/item/weapon/screwdriver)) + new /obj/item/weapon/sheet/metal( src.loc ) + new /obj/d_girders( src.loc ) + //SN src = null + del(src) + return + else + ..() + return + +/obj/machinery/door/airlock/proc/update() + + if (((!( src.wires & 2 ) || !( src.wires & 8 ) || !( src.wires & 32 ) || !( src.wires & 64 ) || !( src.wires & 128 ) || !( src.wires & 256 )) && src.powered)) + src.locked = 1 + if ((!( src.wires & 1 ) && !( src.wires & 4 ) && !( src.wires & 16 ))) + src.powered = 0 + else + src.powered = 1 + var/d = src.density + if (src.blocked) + d = "l" + src.icon_state = text("[]door[]", (src.p_open ? "o_" : null), d) + return + +/obj/machinery/door/airlock/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/door/airlock/attack_hand(mob/user as mob) + + if (src.p_open) + user.machine = src + var/t1 = text("Access Panel
    \nOrange Wire: []
    \nDark Red Wire: []
    \nWhite Wire: []
    \nYellow Wire: []
    \nRed Wire: []
    \nBlue Wire: []
    \nGreen Wire: []
    \nGrey Wire: []
    \nBlack Wire: []
    \n
    \n[]
    \n[]", (src.wires & 256 ? text("Cut Wire", src) : text("Mend Wire", src)), (src.wires & 128 ? text("Cut Wire", src) : text("Mend Wire", src)), (src.wires & 64 ? text("Cut Wire", src) : text("Mend Wire", src)), (src.wires & 32 ? text("Cut Wire", src) : text("Mend Wire", src)), (src.wires & 16 ? text("Cut Wire", src) : text("Mend Wire", src)), (src.wires & 8 ? text("Cut Wire", src) : text("Mend Wire", src)), (src.wires & 4 ? text("Cut Wire", src) : text("Mend Wire", src)), (src.wires & 2 ? text("Cut Wire", src) : text("Mend Wire", src)), (src.wires & 1 ? text("Cut Wire", src) : text("Mend Wire", src)), (src.locked ? "The door bolts have fallen!" : "The door bolts look up."), (src.powered ? "The test light is on." : "The test light is off!")) + user << browse(t1, "window=airlock") + else + ..(user) + return + +/obj/machinery/door/airlock/Topic(href, href_list) + ..() + if (usr.stat || usr.restrained() ) + return + if ((get_dist(src, usr) <= 1 && istype(src.loc, /turf))) + usr.machine = src + if (href_list["wires"]) + var/t1 = text2num(href_list["wires"]) + if (!( istype(usr.equipped(), /obj/item/weapon/wirecutters) )) + return + if (!( src.p_open )) + return + if (t1 & 1) + if (src.wires & 1) + src.wires &= ~1 + else + src.wires |= 1 + else if (t1 & 2) + if (src.wires & 2) + src.wires &= ~2 + else + src.wires |= 2 + else if (t1 & 4) + if (src.wires & 4) + src.wires &= ~4 + else + src.wires |= 4 + else if (t1 & 8) + if (src.wires & 8) + src.wires &= ~8 + else + src.wires |= 8 + else if (t1 & 16) + if (src.wires & 16) + src.wires &= ~16 + else + src.wires |= 16 + else if (t1 & 32) + if (src.wires & 32) + src.wires &= ~32 + else + src.wires |= 32 + else if (t1 & 64) + if (src.wires & 64) + src.wires &= ~64 + else + src.wires |= 64 + else if (t1 & 128) + if (src.wires & 128) + src.wires &= ~128 + else + src.wires |= 128 + else if (t1 & 256) + if (src.wires & 256) + src.wires &= ~256 + else + src.wires |= 256 + src.update() + add_fingerprint(usr) + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(477) + return + +/obj/machinery/door/airlock/attackby(C as obj, mob/user as mob) + + src.add_fingerprint(user) + if ((istype(C, /obj/item/weapon/weldingtool) && !( src.operating ) && src.density)) + var/obj/item/weapon/weldingtool/W = C + if(W.welding) + if (W.weldfuel > 2) + W.weldfuel -= 2 + else + user << "Need more welding fuel!" + return + if (!( src.blocked )) + src.blocked = 1 + else + src.blocked = null + src.update() + return + else + if (istype(C, /obj/item/weapon/wrench)) + if (src.p_open) + if (src.powered) + src.locked = null + else + user << alert("You need power assist!", null, null, null, null, null) + src.update() + else + if (istype(C, /obj/item/weapon/screwdriver)) + src.p_open = !( src.p_open ) + update() + else + if (istype(C, /obj/item/weapon/crowbar)) + if ((src.density && !( src.blocked ) && !( src.operating ) && !( src.powered ) && !( src.locked ))) + spawn( 0 ) + src.operating = 1 + flick(text("[]doorc0", (src.p_open ? "o_" : null)), src) + src.icon_state = text("[]door0", (src.p_open ? "o_" : null)) + sleep(15) + src.density = 0 + src.opacity = 0 + var/turf/T = src.loc + if (istype(T, /turf)) + T.updatecell = 1 + T.buildlinks() + src.operating = 0 + return + else + ..() + return + +/obj/machinery/door/airlock/open() + + if ((src.blocked || src.locked || !( src.powered )) || stat & NOPOWER) + return + use_power(50) + ..() + return + +/obj/machinery/door/airlock/close() + + if (!( src.powered || stat & NOPOWER)) + return + use_power(50) + ..() + var/turf/T = src.loc + if (T) + T.firelevel = 0 + return + +/obj/machinery/door/firedoor/open() + + usr << "This is a remote firedoor!" + return + +/obj/machinery/door/firedoor/close() + + usr << "This is a remote firedoor!" + return + +/obj/machinery/door/blob_act() + if(prob(20)) + del(src) + +/obj/machinery/door/firedoor/power_change() + if( powered(ENVIRON) ) + stat &= ~NOPOWER + else + stat |= NOPOWER + +/obj/machinery/door/firedoor/attackby(obj/item/weapon/C as obj, mob/user as mob) + + src.add_fingerprint(user) + if ((istype(C, /obj/item/weapon/weldingtool) && !( src.operating ) && src.density)) + var/obj/item/weapon/weldingtool/W = C + if(W.welding) + if (W.weldfuel > 2) + W.weldfuel -= 2 + if (!( src.blocked )) + src.blocked = 1 + src.icon_state = "doorl" + else + src.blocked = 0 + src.icon_state = "door1" + return + else + if (!( istype(C, /obj/item/weapon/crowbar) )) + return + if ((src.density && !( src.blocked ) && !( src.operating ))) + spawn( 0 ) + src.operating = 1 + flick("doorc0", src) + src.icon_state = "door0" + sleep(15) + src.density = 0 + src.opacity = 0 + var/turf/T = src.loc + if (istype(T, /turf)) + T.updatecell = 1 + T.buildlinks() + src.operating = 0 + return + return + +/obj/machinery/door/firedoor/proc/openfire() + set src in oview(1) + + if (stat & NOPOWER) return + + if ((src.operating || src.blocked)) + return + use_power(50, ENVIRON) + src.operating = 1 + flick("doorc0", src) + src.icon_state = "door0" + sleep(15) + src.density = 0 + src.opacity = 0 + var/turf/T = src.loc + if (istype(T, /turf)) + T.updatecell = 1 + T.buildlinks() + src.operating = 0 + return + +/obj/machinery/door/firedoor/proc/closefire() + set src in oview(1) + + if (stat & NOPOWER) return + + if (src.operating) + return + use_power(50, ENVIRON) + src.operating = 1 + flick("doorc1", src) + src.icon_state = "door1" + src.density = 1 + src.opacity = 1 + var/turf/T = src.loc + if (istype(T, /turf)) + T.updatecell = 0 + T.buildlinks() + T.firelevel = 0 + sleep(15) + src.operating = 0 + return + +/obj/machinery/door/New() + + ..() + var/turf/T = src.loc + if (istype(T, /turf)) + if (src.density) + T.updatecell = 0 + T.buildlinks() + return + +/obj/machinery/door/proc/open() + + if (src.operating) + return + src.operating = 1 + flick(text("[]doorc0", (src.p_open ? "o_" : null)), src) + src.icon_state = text("[]door0", (src.p_open ? "o_" : null)) + sleep(15) + src.density = 0 + src.opacity = 0 + var/turf/T = src.loc + if (istype(T, /turf)) + T.updatecell = 1 + T.buildlinks() + src.operating = 0 + return + +/obj/machinery/door/proc/close() + + if (src.operating) + return + src.operating = 1 + flick(text("[]doorc1", (src.p_open ? "o_" : null)), src) + src.icon_state = text("[]door1", (src.p_open ? "o_" : null)) + src.density = 1 + if (src.visible) + src.opacity = 1 + var/turf/T = src.loc + if (istype(T, /turf)) + T.updatecell = 0 + T.buildlinks() + sleep(15) + src.operating = 0 + return + +/obj/machinery/igniter/attack_paw(mob/user as mob) + + if ((ticker && ticker.mode == "monkey")) + return src.attack_hand(user) + return + +/obj/machinery/igniter/attack_hand(mob/user as mob) + + ..() + add_fingerprint(user) + if(stat & NOPOWER) return + + use_power(50) + src.on = !( src.on ) + src.icon_state = text("igniter[]", src.on) + return + +/obj/machinery/igniter/process() + + if (src.on && !(stat & NOPOWER) ) + var/turf/T = src.loc + if (locate(/obj/move, T)) + T = locate(/obj/move, T) + if (T.firelevel < 900000.0) + T.firelevel = T.poison + + return + +/obj/machinery/igniter/New() + ..() + icon_state = "igniter[on]" + +/obj/machinery/igniter/power_change() + if(!( stat & NOPOWER) ) + icon_state = "igniter[src.on]" + else + icon_state = "igniter0" + +/obj/machinery/firealarm/burn(fi_amount) + + if(src.detecting) src.alarm() // added check of detector status here + return + +/obj/machinery/firealarm/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/firealarm/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (istype(W, /obj/item/weapon/wirecutters)) + src.detecting = !( src.detecting ) + if (src.detecting) + viewers(user, null) << text("\red [] has reconnected []'s detecting unit!", user, src) + else + viewers(user, null) << text("\red [] has disconnected []'s detecting unit!", user, src) + else + src.alarm() + src.add_fingerprint(user) + return + +/obj/machinery/firealarm/process() + + if(stat & NOPOWER) + return + + use_power(10, ENVIRON) + + if (src.timing) + if (src.time > 0) + src.time = round(src.time) - 1 + else + alarm() + src.time = 0 + src.timing = 0 + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(68) + return + +/obj/machinery/firealarm/power_change() + if(powered(ENVIRON)) + stat &= ~NOPOWER + icon_state = "firealarm" + else + spawn(rand(0,15)) + stat |= NOPOWER + icon_state = "firealarm-p" + +/obj/machinery/firealarm/attack_hand(mob/user as mob) + + if(user.stat || stat&NOPOWER) return + + user.machine = src + var/area/A = src.loc + var/d1 + var/d2 + if (istype(user, /mob/human)) + A = A.loc + + if (A.fire) + d1 = text("Reset - Lockdown", src) + else + d1 = text("Alarm - Lockdown", src) + if (src.timing) + d2 = text("Stop Time Lock", src) + else + d2 = text("Initiate Time Lock", src) + var/second = src.time % 60 + var/minute = (src.time - second) / 60 + var/dat = text("Fire alarm []\n
    \nTimer System: []
    \nTime Left: [][] - - + +\n
    ", d1, d2, (minute ? text("[]:", minute) : null), second, src, src, src, src) + user << browse(dat, "window=firealarm") + else + A = A.loc + if (A.fire) + d1 = text("[]", src, stars("Reset - Lockdown")) + else + d1 = text("[]", src, stars("Alarm - Lockdown")) + if (src.timing) + d2 = text("[]", src, stars("Stop Time Lock")) + else + d2 = text("[]", src, stars("Initiate Time Lock")) + var/second = src.time % 60 + var/minute = (src.time - second) / 60 + var/dat = text("[] []\n
    \nTimer System: []
    \nTime Left: [][] - - + +\n
    ", stars("Fire alarm"), d1, d2, (minute ? text("[]:", minute) : null), second, src, src, src, src) + user << browse(dat, "window=firealarm") + return + +/obj/machinery/firealarm/Topic(href, href_list) + ..() + if (usr.stat || stat&NOPOWER) + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["reset"]) + src.reset() + else + if (href_list["alarm"]) + src.alarm() + else + if (href_list["time"]) + src.timing = text2num(href_list["time"]) + else + if (href_list["tp"]) + var/tp = text2num(href_list["tp"]) + src.time += tp + src.time = min(max(round(src.time), 0), 120) + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(194) + src.add_fingerprint(usr) + else + usr << browse(null, "window=firealarm") + return + return + +/obj/machinery/firealarm/proc/reset() + + if (!( src.working )) + return + var/area/A = src.loc + A = A.loc + if (!( istype(A, /area) )) + return + A.fire = 0 + A.mouse_opacity = 0 + A.updateicon() + + for(var/obj/machinery/door/firedoor/D in A) + if (D.density) + spawn( 0 ) + D.openfire() + return + //Foreach goto(93) + return + +/obj/machinery/firealarm/proc/alarm() + + if (!( src.working )) + return + var/area/A = src.loc + A = A.loc + if (!( istype(A, /area) )) + return + A.firealert() + return + +/obj/machinery/dispenser/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + //SN src = null + del(src) + return + if(3.0) + if (prob(25)) + while(src.o2tanks > 0) + new /obj/item/weapon/tank/oxygentank( src.loc ) + src.o2tanks-- + while(src.pltanks > 0) + new /obj/item/weapon/tank/plasmatank( src.loc ) + src.pltanks-- + else + return + +/obj/machinery/dispenser/blob_act() + + if (prob(25)) + while(src.o2tanks > 0) + new /obj/item/weapon/tank/oxygentank( src.loc ) + src.o2tanks-- + while(src.pltanks > 0) + new /obj/item/weapon/tank/plasmatank( src.loc ) + src.pltanks-- + del(src) + +/obj/machinery/dispenser/meteorhit() + + while(src.o2tanks > 0) + new /obj/item/weapon/tank/oxygentank( src.loc ) + src.o2tanks-- + while(src.pltanks > 0) + new /obj/item/weapon/tank/plasmatank( src.loc ) + src.pltanks-- + //SN src = null + del(src) + return + return + +/obj/machinery/dispenser/process() + if(stat & NOPOWER) + return + use_power(5) + +/obj/machinery/dispenser/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/dispenser/attack_hand(mob/user as mob) + + user.machine = src + var/dat = text("Loaded Tank Dispensing Unit
    \nOxygen: [] []
    \nPlasma: [] []
    \n
    ", src.o2tanks, (src.o2tanks ? text("Dispense", src) : "empty"), src.pltanks, (src.pltanks ? text("Dispense", src) : "empty")) + user << browse(dat, "window=dispenser") + return + +/obj/machinery/dispenser/Topic(href, href_list) + ..() + if (usr.stat || usr.restrained() ) + return + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + usr << "\red You don't have the dexterity to do this!" + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["oxygen"]) + if (text2num(href_list["oxygen"])) + if (src.o2tanks > 0) + use_power(5) + new /obj/item/weapon/tank/oxygentank( src.loc ) + src.o2tanks-- + if (istype(src.loc, /mob)) + attack_hand(src.loc) + else + if (href_list["plasma"]) + if (text2num(href_list["plasma"])) + if (src.pltanks > 0) + use_power(5) + new /obj/item/weapon/tank/plasmatank( src.loc ) + src.pltanks-- + if (istype(src.loc, /mob)) + attack_hand(src.loc) + src.add_fingerprint(usr) + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(275) + else + usr << browse(null, "window=dispenser") + return + return + +/obj/item/weapon/clothing/burn(fi_amount) + + if (fi_amount > src.s_fire) + spawn( 0 ) + var/t = src.icon_state + src.icon_state = "" + src.icon = 'b_items.dmi' + flick(text("[]", t), src) + spawn( 14 ) + //SN src = null + del(src) + return + return + return + return 0 + return 1 + return + +/obj/item/weapon/clothing/gloves/examine() + set src in usr + + ..() + return + +/obj/item/weapon/clothing/shoes/orange/attack_self(mob/user as mob) + + if (src.chained) + src.chained = null + new /obj/item/weapon/handcuffs( user.loc ) + src.icon_state = "o_shoes" + return + +/obj/item/weapon/clothing/shoes/orange/attackby(H as obj, loc) + + if ((istype(H, /obj/item/weapon/handcuffs) && !( src.chained ))) + //H = null + del(H) + src.chained = 1 + src.icon_state = "o_shoes1" + return + +/obj/item/weapon/clothing/mask/muzzle/attack_paw(mob/user as mob) + + if (src == user.wear_mask) + return + else + ..() + return + + +/obj/item/weapon/tank/blob_act() + + if(prob(25)) + var/turf/T = src.loc + if (!( istype(T, /turf) )) + return + if(src.gas) + src.gas.turf_add(T, -1.0) + del(src) + +/obj/item/weapon/tank/attack_self(mob/user as mob) + + user.machine = src + if (!( src.gas )) + return + var/dat = text("Tank
    \nContains/Capacity [] / []
    \nInterals Valve: [] Gas Flow
    \n\t- - - [] + + +
    \n
    \nClose\n
    ", src.gas.tot_gas(), src.maximum, src, ((src.loc == user && user.internal == src) ? "Stop" : "Restore"), src, src, src, src.i_used, src, src, src, user) + user << browse(dat, "window=tank;size=600x300") + return + +/obj/item/weapon/tank/Topic(href, href_list) + ..() + if (usr.stat|| usr.restrained()) + return + if (src.loc == usr) + usr.machine = src + if (href_list["cp"]) + var/cp = text2num(href_list["cp"]) + src.i_used += cp + src.i_used = min(max(round(src.i_used), 0), 10000) + if ((href_list["stat"] && src.loc == usr)) + if (usr.internal == src) + usr.internal = null + return + if (usr.internal) + usr.internal = null + if ((!( usr.wear_mask ) || !( usr.wear_mask.flags & 8 ))) + return + usr.internal = src + usr << "\blue Now running on internals!" + src.add_fingerprint(usr) + for(var/mob/M in viewers(1, src.loc)) + if ((M.client && M.machine == src)) + src.attack_self(M) + //Foreach goto(206) + else + usr << browse(null, "window=tank") + return + return + +/obj/item/weapon/tank/proc/process(mob/M as mob, obj/substance/gas/G as obj) + + var/amount = src.i_used + var/total = src.gas.tot_gas() + if (amount > total) + amount = total + if (total > 0) + G.transfer_from(src.gas, amount) + return G + return + +/obj/item/weapon/tank/attack(mob/M as mob, mob/user as mob) + + ..() + if ((prob(30) && M.stat < 2)) + var/mob/human/H = M + +// ******* Check + + if ((istype(H, /mob/human) && istype(H, /obj/item/weapon/clothing/head) && H.flags & 8 && prob(80))) + M << "\red The helmet protects you from being hit hard in the head!" + return + var/time = rand(10, 120) + if (prob(90)) + if (M.paralysis < time) + M.paralysis = time + else + if (M.stunned < time) + M.stunned = time + M.stat = 1 + for(var/mob/O in viewers(M, null)) + if ((O.client && !( O.blinded ))) + O << text("\red [] has been knocked unconscious!", M) + //Foreach goto(169) + M << text("\red This was a []% hit. Roleplay it! (personality/memory change if the hit was severe enough)", time * 100 / 120) + return + +/obj/item/weapon/tank/New() + + ..() + src.gas = new /obj/substance/gas( src ) + src.gas.maximum = src.maximum + return + +/obj/item/weapon/tank/Del() + + //src.gas = null + del(src.gas) + ..() + return + +/obj/item/weapon/tank/burn(fi_amount) + + if(src.gas) + if ( (fi_amount * src.gas.tot_gas()) > (src.maximum * 3.75E7) ) + src.gas.turf_add(get_turf(src.loc), src.gas.tot_gas()) + //SN src = null + del(src) + return + return + +/obj/item/weapon/tank/examine() + set src in view(1) + + if(src) + usr << text("\blue The \icon[] contains [] unit\s of gas.", src, src.gas.tot_gas()) + return + +/obj/item/weapon/tank/oxygentank/New() + + ..() + src.gas.oxygen = src.maximum + return + +/obj/item/weapon/tank/jetpack/New() + + ..() + src.gas.oxygen = src.maximum + return + +/obj/item/weapon/tank/jetpack/verb/toggle() + + src.on = !( src.on ) + src.icon_state = text("jetpack[]", src.on) + return + +/obj/item/weapon/tank/jetpack/proc/allow_thrust(num, mob/user as mob) + + if (!( src.on )) + return 0 + if ((num < 1 || src.gas.tot_gas() < num)) + return 0 + var/obj/substance/gas/G = new /obj/substance/gas( ) + G.transfer_from(src.gas, num) + if (G.oxygen >= 100) + return 1 + if (G.plasma > 10) + if (user) + var/d = G.plasma / 2 + d = min(abs(user.health + 100), d, 25) + user.fireloss += d + user.health = 100 - user.oxyloss - user.toxloss - user.fireloss - user.bruteloss + return (G.oxygen >= 75 ? 0.5 : 0) + else + if (G.oxygen >= 75) + return 0.5 + else + return 0 + //G = null + del(G) + return + +/obj/item/weapon/tank/anesthetic/New() + + ..() + src.gas.sl_gas = 1000 + return + +/obj/item/weapon/tank/plasmatank/proc/release() + var/turf/T = get_turf(src.loc) + T.poison += src.gas.plasma * src.gas.temperature / 25.0 + T.oxygen += src.gas.oxygen * src.gas.temperature / 25.0 + T.n2 += src.gas.n2 * src.gas.temperature / 25.0 + T.sl_gas += src.gas.sl_gas * src.gas.temperature / 25.0 + T.res_vars() + + src.gas.plasma = 0 + src.gas.oxygen = 0 + src.gas.n2 = 0 + src.gas.sl_gas = 0 + + var/temp = src.gas.temperature + spawn(10) + T.firelevel = temp * 3600.0 + T.res_vars() + + + +/obj/item/weapon/tank/plasmatank/proc/ignite() + + + if ((src.gas.plasma < 1600000.0 || src.gas.temperature < 773)) //500degC + + var/turf/T = get_turf(src.loc) + T.poison += src.gas.plasma + T.firelevel = T.poison + T.res_vars() + + if(src.master) + src.master.loc = null + + if ((src.gas.temperature > (450+T0C) && src.gas.plasma == 1600000.0)) + var/turf/sw = locate(max(T.x - 4, 1), max(T.y - 4, 1), T.z) + var/turf/ne = locate(min(T.x + 4, world.maxx), min(T.y + 4, world.maxy), T.z) + defer_powernet_rebuild = 1 + + for(var/turf/U in block(sw, ne)) + var/zone = 4 + if ((U.y <= (T.y + 1) && U.y >= (T.y - 1) && U.x <= (T.x + 2) && U.x >= (T.x - 2)) ) + zone = 3 + if ((U.y <= (T.y + 1) && U.y >= (T.y - 1) && U.x <= (T.x + 1) && U.x >= (T.x - 1) )) + zone = 2 + for(var/atom/A in U) + A.ex_act(zone) + //Foreach goto(342) + U.ex_act(zone) + U.buildlinks() + //Foreach goto(170) + defer_powernet_rebuild = 0 + makepowernets() + + else + if ((src.gas.temperature > (300+T0C) && src.gas.plasma == 1600000.0)) + + var/turf/sw = locate(max(T.x - 4, 1), max(T.y - 4, 1), T.z) + var/turf/ne = locate(min(T.x + 4, world.maxx), min(T.y + 4, world.maxy), T.z) + defer_powernet_rebuild = 1 + + for(var/turf/U in block(sw, ne)) + var/zone = 4 + if ((U.y <= (T.y + 2) && U.y >= (T.y - 2) && U.x <= (T.x + 2) && U.x >= (T.x - 2)) ) + zone = 3 + for(var/atom/A in U) + A.ex_act(zone) + //Foreach goto(598) + U.ex_act(zone) + U.buildlinks() + //Foreach goto(498) + defer_powernet_rebuild = 0 + makepowernets() + + //src.master = null + del(src.master) + //SN src = null + del(src) + return + + var/turf/T = src.loc + while(!( istype(T, /turf) )) + T = T.loc + + if(src.master) + src.master.loc = null + + for(var/mob/M in range(T)) + flick("flash", M.flash) + //Foreach goto(732) + var/m_range = 2 + for(var/obj/machinery/atmoalter/canister/C in range(2, T)) + if (!( C.destroyed )) + if (C.gas.plasma >= 35000) + C.destroyed = 1 + m_range++ + //Foreach goto(776) + var/min = m_range + var/med = m_range * 2 + var/max = m_range * 3 + var/u_max = m_range * 4 + + var/turf/sw = locate(max(T.x - u_max, 1), max(T.y - u_max, 1), T.z) + var/turf/ne = locate(min(T.x + u_max, world.maxx), min(T.y + u_max, world.maxy), T.z) + + defer_powernet_rebuild = 1 + + for(var/turf/U in block(sw, ne)) + + + var/zone = 4 + if ((U.y <= (T.y + max) && U.y >= (T.y - max) && U.x <= (T.x + max) && U.x >= (T.x - max) )) + zone = 3 + if ((U.y <= (T.y + med) && U.y >= (T.y - med) && U.x <= (T.x + med) && U.x >= (T.x - med) )) + zone = 2 + if ((U.y <= (T.y + min) && U.y >= (T.y - min) && U.x <= (T.x + min) && U.x >= (T.x - min) )) + zone = 1 + for(var/atom/A in U) + A.ex_act(zone) + //Foreach goto(1217) + U.ex_act(zone) + U.buildlinks() + //U.mark(zone) + + //Foreach goto(961) + //src.master = null + defer_powernet_rebuild = 0 + makepowernets() + + del(src.master) + //SN src = null + del(src) + + return + + + +/obj/item/weapon/tank/plasmatank/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (istype(W, /obj/item/weapon/assembly/rad_ignite)) + var/obj/item/weapon/assembly/rad_ignite/S = W + if (!( S.status )) + return + var/obj/item/weapon/assembly/r_i_ptank/R = new /obj/item/weapon/assembly/r_i_ptank( user ) + R.part1 = S.part1 + S.part1.loc = R + S.part1.master = R + R.part2 = S.part2 + S.part2.loc = R + S.part2.master = R + S.layer = initial(S.layer) + if (user.client) + user.client.screen -= S + if (user.r_hand == S) + user.u_equip(S) + user.r_hand = R + else + user.u_equip(S) + user.l_hand = R + src.master = R + src.layer = initial(src.layer) + user.u_equip(src) + if (user.client) + user.client.screen -= src + src.loc = R + R.part3 = src + R.layer = 20 + R.loc = user + S.part1 = null + S.part2 = null + //S = null + del(S) + if (istype(W, /obj/item/weapon/assembly/prox_ignite)) + var/obj/item/weapon/assembly/prox_ignite/S = W + if (!( S.status )) + return + var/obj/item/weapon/assembly/m_i_ptank/R = new /obj/item/weapon/assembly/m_i_ptank( user ) + R.part1 = S.part1 + S.part1.loc = R + S.part1.master = R + R.part2 = S.part2 + S.part2.loc = R + S.part2.master = R + S.layer = initial(S.layer) + if (user.client) + user.client.screen -= S + if (user.r_hand == S) + user.u_equip(S) + user.r_hand = R + else + user.u_equip(S) + user.l_hand = R + src.master = R + src.layer = initial(src.layer) + user.u_equip(src) + if (user.client) + user.client.screen -= src + src.loc = R + R.part3 = src + R.layer = 20 + R.loc = user + S.part1 = null + S.part2 = null + //S = null + del(S) + + if (istype(W, /obj/item/weapon/assembly/time_ignite)) + var/obj/item/weapon/assembly/time_ignite/S = W + if (!( S.status )) + return + var/obj/item/weapon/assembly/t_i_ptank/R = new /obj/item/weapon/assembly/t_i_ptank( user ) + R.part1 = S.part1 + S.part1.loc = R + S.part1.master = R + R.part2 = S.part2 + S.part2.loc = R + S.part2.master = R + S.layer = initial(S.layer) + if (user.client) + user.client.screen -= S + if (user.r_hand == S) + user.u_equip(S) + user.r_hand = R + else + user.u_equip(S) + user.l_hand = R + src.master = R + src.layer = initial(src.layer) + user.u_equip(src) + if (user.client) + user.client.screen -= src + src.loc = R + R.part3 = src + R.layer = 20 + R.loc = user + S.part1 = null + S.part2 = null + //S = null + del(S) + return + +/obj/item/weapon/tank/plasmatank/New() + + ..() + src.gas.plasma = src.maximum + return + +/obj/meteor/small/Move() + + if (src.steps < 7) + src.steps++ + if (src.steps >= 7) + src.icon_state = "smallf" + else + var/turf/T = src.loc + if (istype(T, /turf)) + T.firelevel = T.poison + 5 + ..() + if (src.z != 1) + //SN src = null + del(src) + return + spawn( 3 ) + step(src, WEST) + if (prob(30)) + step(src, pick(NORTH, SOUTH)) + return + return + +/obj/meteor/New() + + ..() + sleep(1) + step(src, WEST) + return + +/obj/meteor/Move() + + if (src.steps < 7) + src.steps++ + if (src.steps >= 7) + src.icon_state = "flaming" + else + var/turf/T = src.loc + if (istype(T, /turf)) + T.firelevel = T.poison + 5 + ..() + if (src.z != 1) + //SN src = null + del(src) + return + spawn( 3 ) + step(src, WEST) + if (prob(30)) + step(src, pick(NORTH, SOUTH)) + return + return + +/obj/meteor/Bump(atom/A) + + spawn( 0 ) + if (A) + A.meteorhit(src) + + + + + if (--src.hits <= 0) + //SN src = null + //******RM + if(prob(15) && !istype(A, /obj/grille)) + + var/obj/item/weapon/tank/plasmatank/pt = new /obj/item/weapon/tank/plasmatank( src ) + pt.gas.temperature = 475+T0C + pt.ignite() + //***** + del(src) + return + return + return + +/obj/meteor/ex_act(severity) + + if (severity < 4) + //SN src = null + del(src) + return + return + +/obj/secloset/alter_health() + + return src.loc + return + +/obj/secloset/CheckPass(O as mob|obj, target as turf) + + if (!( src.opened )) + return 0 + else + return 1 + return + +/obj/secloset/personal/New() + + ..() + sleep(2) + new /obj/item/weapon/storage/backpack( src ) + new /obj/item/weapon/radio/headset( src ) + new /obj/item/weapon/radio/signaler( src ) + new /obj/item/weapon/pen( src ) + return + +/obj/secloset/personal/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (src.opened) + user.drop_item() + W.loc = src.loc + else + if (istype(W, /obj/item/weapon/card/id)) + var/obj/item/weapon/card/id/I = W + if (I.check_access(null,"Systems")) + src.allowed = null + src.icon_state = "0secloset0" + src.locked = 1 + src.desc = "The first card swiped gains control." + return + if (I.check_access(access,allowed)) + src.locked = !( src.locked ) + for(var/mob/O in viewers(user, 3)) + if ((O.client && !( O.blinded ))) + O << text("\blue The locker has been []locked by [].", (src.locked ? null : "un"), user) + //Foreach goto(185) + src.icon_state = text("[]secloset0", (src.locked ? "1" : null)) + if (!( src.allowed )) + src.allowed = "Name:[I.registered]/Captain/Head of Personnel" + src.desc = "Owned by [I.registered], Clear by using a card of rank 'Systems'" + else + user << "\red Access Denied" + else + user << "\red It's closed..." + return + +/obj/secloset/security2/New() + + ..() + sleep(2) + new /obj/item/weapon/clothing/under/red( src ) + new /obj/item/weapon/storage/fcard_kit( src ) + new /obj/item/weapon/storage/fcard_kit( src ) + new /obj/item/weapon/storage/fcard_kit( src ) + new /obj/item/weapon/storage/lglo_kit( src ) + new /obj/item/weapon/storage/lglo_kit( src ) + new /obj/item/weapon/fcardholder( src ) + new /obj/item/weapon/fcardholder( src ) + new /obj/item/weapon/fcardholder( src ) + new /obj/item/weapon/fcardholder( src ) + new /obj/item/weapon/camera( src ) + new /obj/item/weapon/f_print_scanner( src ) + new /obj/item/weapon/f_print_scanner( src ) + new /obj/item/weapon/f_print_scanner( src ) + return + +/obj/secloset/security1/New() + + ..() + sleep(2) + new /obj/item/weapon/storage/flashbang_kit( src ) + new /obj/item/weapon/storage/handcuff_kit( src ) + new /obj/item/weapon/gun/energy/taser_gun( src ) + new /obj/item/weapon/flash( src ) + new /obj/item/weapon/clothing/under/red( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/suit/armor( src ) + new /obj/item/weapon/clothing/head/helmet( src ) + new /obj/item/weapon/clothing/glasses/sunglasses( src ) + new /obj/item/weapon/baton( src) + return + +/obj/secloset/highsec/New() + + ..() + sleep(2) + new /obj/item/weapon/gun/energy/laser_gun( src ) + new /obj/item/weapon/gun/energy/taser_gun( src ) + new /obj/item/weapon/flash( src ) + new /obj/item/weapon/storage/id_kit( src ) + new /obj/item/weapon/clothing/under/green( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/glasses/sunglasses( src ) + new /obj/item/weapon/clothing/suit/armor( src ) + new /obj/item/weapon/clothing/head/helmet( src ) + return + +/obj/secloset/captains/New() + + ..() + sleep(2) + new /obj/item/weapon/gun/energy/laser_gun( src ) + new /obj/item/weapon/gun/energy/taser_gun( src ) + new /obj/item/weapon/storage/id_kit( src ) + new /obj/item/weapon/clothing/under/darkgreen( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/glasses/sunglasses( src ) + new /obj/item/weapon/clothing/suit/armor( src ) + new /obj/item/weapon/clothing/head/swat_hel( src ) + return + +/obj/secloset/animal/New() + + ..() + sleep(2) + new /obj/item/weapon/radio/signaler( src ) + new /obj/item/weapon/radio/electropack( src ) + new /obj/item/weapon/radio/electropack( src ) + new /obj/item/weapon/radio/electropack( src ) + new /obj/item/weapon/radio/electropack( src ) + new /obj/item/weapon/radio/electropack( src ) + return + +/obj/secloset/medical1/New() + + ..() + sleep(2) + new /obj/item/weapon/bottle/toxins( src ) + new /obj/item/weapon/bottle/rejuvenators( src ) + new /obj/item/weapon/bottle/s_tox( src ) + new /obj/item/weapon/bottle/s_tox( src ) + new /obj/item/weapon/bottle/toxins( src ) + new /obj/item/weapon/bottle/r_epil( src ) + new /obj/item/weapon/bottle/r_ch_cough( src ) + new /obj/item/weapon/pill_canister/Tourette( src ) + new /obj/item/weapon/pill_canister/cough( src ) + new /obj/item/weapon/pill_canister/epilepsy( src ) + new /obj/item/weapon/pill_canister/sleep( src ) + new /obj/item/weapon/pill_canister/antitoxin( src ) + new /obj/item/weapon/pill_canister/placebo( src ) + new /obj/item/weapon/storage/firstaid/syringes( src ) + new /obj/item/weapon/storage/gl_kit( src ) + new /obj/item/weapon/dropper( src ) + return + +/obj/secloset/medical2/New() + + ..() + sleep(2) + new /obj/item/weapon/tank/anesthetic( src ) + new /obj/item/weapon/tank/anesthetic( src ) + new /obj/item/weapon/tank/anesthetic( src ) + new /obj/item/weapon/tank/anesthetic( src ) + new /obj/item/weapon/tank/anesthetic( src ) + new /obj/item/weapon/clothing/mask/m_mask( src ) + new /obj/item/weapon/clothing/mask/m_mask( src ) + new /obj/item/weapon/clothing/mask/m_mask( src ) + new /obj/item/weapon/clothing/mask/m_mask( src ) + return + +/obj/secloset/ex_act(severity) + + switch(severity) + if(1.0) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(35) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(108) + //SN src = null + del(src) + return + if(3.0) + if (prob(5)) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(181) + //SN src = null + del(src) + return + else + return + +/obj/secloset/blob_act() + + if (prob(50)) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + del(src) + + +/obj/secloset/meteorhit(obj/O as obj) + + if (O.icon_state == "flaming") + for(var/obj/item/I in src) + I.loc = src.loc + //Foreach goto(29) + for(var/mob/M in src) + M.loc = src.loc + if (M.client) + M.client.eye = M.client.mob + M.client.perspective = MOB_PERSPECTIVE + //Foreach goto(71) + src.icon_state = "secloset1" + //SN src = null + del(src) + return + return + +/obj/secloset/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (src.opened) + user.drop_item() + W.loc = src.loc + else + if (istype(W, /obj/item/weapon/card/id)) + var/obj/item/weapon/card/id/I = W + + if(I.check_access(access,allowed)) + src.locked = !( src.locked ) + for(var/mob/O in viewers(user, 3)) + if ((O.client && !( O.blinded ))) + O << text("\blue The locker has been []locked by [].", (src.locked ? null : "un"), user) + //Foreach goto(121) + src.icon_state = text("[]secloset0", (src.locked ? "1" : null)) + else + user << "\red Access Denied" + else + user << "\red It's closed..." + return + +/obj/secloset/relaymove(mob/user as mob) + + if (user.stat) + return + if (!( src.locked )) + for(var/obj/item/I in src) + I.loc = src.loc + //Foreach goto(36) + for(var/mob/M in src) + M.loc = src.loc + if (M.client) + M.client.eye = M.client.mob + M.client.perspective = MOB_PERSPECTIVE + //Foreach goto(78) + src.icon_state = "secloset1" + src.opened = 1 + else + user << "\blue It's welded shut!" + for(var/mob/M in hearers(src, null)) + M << text("BANG, bang!", max(0, 5 - get_dist(src, M))) + //Foreach goto(170) + return + +/obj/secloset/MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob) + + if ((user.restrained() || user.stat)) + return + if ((!( istype(O, /atom/movable) ) || O.anchored || get_dist(user, src) > 1 || get_dist(user, O) > 1 || user.contents.Find(src))) + return + step_towards(O, src.loc) + if (user != O) + for(var/mob/B in viewers(user, 3)) + if ((B.client && !( B.blinded ))) + B << text("\red [] stuffs [] into []!", user, O, src) + //Foreach goto(115) + src.add_fingerprint(user) + return + +/obj/secloset/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/secloset/attack_hand(mob/user as mob) + + src.add_fingerprint(user) + if (!( src.opened )) + if (!( src.locked )) + for(var/obj/item/I in src) + I.loc = src.loc + //Foreach goto(43) + for(var/mob/M in src) + M.loc = src.loc + if (M.client) + M.client.eye = M.client.mob + M.client.perspective = MOB_PERSPECTIVE + //Foreach goto(85) + src.icon_state = "secloset1" + src.opened = 1 + else + usr << "\blue It's locked tight!" + else + for(var/obj/item/I in src.loc) + if (!( I.anchored )) + I.loc = src + //Foreach goto(176) + for(var/mob/M in src.loc) + if (M.client) + M.client.perspective = EYE_PERSPECTIVE + M.client.eye = src + M.loc = src + //Foreach goto(226) + src.icon_state = "secloset0" + src.opened = 0 + return + +/obj/morgue/proc/update() + + if (src.connected) + src.icon_state = "morgue0" + else + if (src.contents.len) + src.icon_state = "morgue2" + else + src.icon_state = "morgue1" + return + +/obj/morgue/alter_health() + + return src.loc + return + +/obj/morgue/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/morgue/attack_hand(mob/user as mob) + + if (src.connected) + for(var/atom/movable/A as mob|obj in src.connected.loc) + if (!( A.anchored )) + A.loc = src + //Foreach goto(28) + //src.connected = null + del(src.connected) + else + src.connected = new /obj/m_tray( src.loc ) + step(src.connected, EAST) + src.connected.layer = OBJ_LAYER + var/turf/T = get_step(src, EAST) + if (T.contents.Find(src.connected)) + src.connected.connected = src + src.icon_state = "morgue0" + for(var/atom/movable/A as mob|obj in src) + A.loc = src.connected.loc + //Foreach goto(168) + src.connected.icon_state = "morguet" + else + //src.connected = null + del(src.connected) + src.add_fingerprint(user) + update() + return + +/obj/morgue/attackby(P as obj, mob/user as mob) + + if (istype(P, /obj/item/weapon/pen)) + var/t = input(user, "What would you like the label to be?", text("[]", src.name), null) as text + if (user.equipped() != P) + return + if ((get_dist(src, usr) > 1 && src.loc != user)) + return + t = html_encode(t) + if (t) + src.name = text("Morgue- '[]'", t) + else + src.name = "Morgue" + src.add_fingerprint(user) + return + +/obj/morgue/relaymove(mob/user as mob) + + if (user.stat) + return + src.connected = new /obj/m_tray( src.loc ) + step(src.connected, EAST) + src.connected.layer = OBJ_LAYER + var/turf/T = get_step(src, EAST) + if (T.contents.Find(src.connected)) + src.connected.connected = src + src.icon_state = "morgue0" + for(var/atom/movable/A as mob|obj in src) + A.loc = src.connected.loc + //Foreach goto(106) + src.connected.icon_state = "morguet" + else + //src.connected = null + del(src.connected) + return + +/obj/m_tray/CheckPass(D as obj) + + if (istype(D, /obj/item/weapon/dummy)) + return 1 + else + return ..() + return + +/obj/m_tray/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/m_tray/attack_hand(mob/user as mob) + + if (src.connected) + for(var/atom/movable/A as mob|obj in src.loc) + if (!( A.anchored )) + A.loc = src.connected + //Foreach goto(26) + src.connected.connected = null + src.connected.update() + add_fingerprint(user) + //SN src = null + del(src) + return + return + +/obj/m_tray/MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob) + + if ((!( istype(O, /atom/movable) ) || O.anchored || get_dist(user, src) > 1 || get_dist(user, O) > 1 || user.contents.Find(src))) + return + O.loc = src.loc + if (user != O) + for(var/mob/B in viewers(user, 3)) + if ((B.client && !( B.blinded ))) + B << text("\red [] stuffs [] into []!", user, O, src) + //Foreach goto(99) + return + +/obj/closet/alter_health() + + return src.loc + return + +/obj/closet/CheckPass(O as mob|obj, target as turf) + + if (!( src.opened )) + return 0 + else + return 1 + return + +/obj/closet/syndicate/nuclear/New() + + ..() + sleep(2) + new /obj/item/weapon/ammo/a357( src ) + new /obj/item/weapon/ammo/a357( src ) + new /obj/item/weapon/ammo/a357( src ) + new /obj/item/weapon/storage/handcuff_kit( src ) + new /obj/item/weapon/storage/flashbang_kit( src ) + new /obj/item/weapon/gun/energy/taser_gun( src ) + new /obj/item/weapon/gun/energy/taser_gun( src ) + new /obj/item/weapon/gun/energy/taser_gun( src ) + var/obj/item/weapon/syndicate_uplink/U = new /obj/item/weapon/syndicate_uplink( src ) + U.uses = 5 + return + +/obj/closet/emcloset/New() + + ..() + sleep(2) + new /obj/item/weapon/tank/oxygentank( src ) + new /obj/item/weapon/clothing/mask/gasmask( src ) + return + +/obj/closet/l3closet/New() + + ..() + sleep(2) + new /obj/item/weapon/tank/oxygentank( src ) + new /obj/item/weapon/clothing/mask/gasmask( src ) + new /obj/item/weapon/clothing/suit/bio_suit( src ) + new /obj/item/weapon/clothing/under/white( src ) + new /obj/item/weapon/clothing/shoes/white( src ) + new /obj/item/weapon/clothing/gloves/latex( src ) + new /obj/item/weapon/clothing/head/bio_hood( src ) + new /obj/item/weapon/clothing/suit/labcoat(src) + + return + +/obj/closet/wardrobe/New() + + new /obj/item/weapon/clothing/under/blue( src ) + new /obj/item/weapon/clothing/under/blue( src ) + new /obj/item/weapon/clothing/under/blue( src ) + new /obj/item/weapon/clothing/under/blue( src ) + new /obj/item/weapon/clothing/under/blue( src ) + new /obj/item/weapon/clothing/under/blue( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + return + +/obj/closet/wardrobe/red/New() + + new /obj/item/weapon/clothing/under/red( src ) + new /obj/item/weapon/clothing/under/red( src ) + new /obj/item/weapon/clothing/under/red( src ) + new /obj/item/weapon/clothing/under/red( src ) + new /obj/item/weapon/clothing/under/red( src ) + new /obj/item/weapon/clothing/under/red( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + return + +/obj/closet/wardrobe/pink/New() + + new /obj/item/weapon/clothing/under/pink( src ) + new /obj/item/weapon/clothing/under/pink( src ) + new /obj/item/weapon/clothing/under/pink( src ) + new /obj/item/weapon/clothing/under/pink( src ) + new /obj/item/weapon/clothing/under/pink( src ) + new /obj/item/weapon/clothing/under/pink( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + return + +/obj/closet/wardrobe/black/New() + + new /obj/item/weapon/clothing/under/black( src ) + new /obj/item/weapon/clothing/under/black( src ) + new /obj/item/weapon/clothing/under/black( src ) + new /obj/item/weapon/clothing/under/black( src ) + new /obj/item/weapon/clothing/under/black( src ) + new /obj/item/weapon/clothing/under/black( src ) + new /obj/item/weapon/clothing/shoes/black( src ) + new /obj/item/weapon/clothing/shoes/black( src ) + new /obj/item/weapon/clothing/shoes/black( src ) + new /obj/item/weapon/clothing/shoes/black( src ) + new /obj/item/weapon/clothing/shoes/black( src ) + new /obj/item/weapon/clothing/shoes/black( src ) + return + +/obj/closet/wardrobe/green/New() + + new /obj/item/weapon/clothing/under/green( src ) + new /obj/item/weapon/clothing/under/green( src ) + new /obj/item/weapon/clothing/under/green( src ) + new /obj/item/weapon/clothing/under/green( src ) + new /obj/item/weapon/clothing/under/green( src ) + new /obj/item/weapon/clothing/under/green( src ) + new /obj/item/weapon/clothing/shoes/black( src ) + new /obj/item/weapon/clothing/shoes/black( src ) + new /obj/item/weapon/clothing/shoes/black( src ) + new /obj/item/weapon/clothing/shoes/black( src ) + new /obj/item/weapon/clothing/shoes/black( src ) + new /obj/item/weapon/clothing/shoes/black( src ) + return + +/obj/closet/wardrobe/orange/New() + + new /obj/item/weapon/clothing/under/orange( src ) + new /obj/item/weapon/clothing/under/orange( src ) + new /obj/item/weapon/clothing/under/orange( src ) + new /obj/item/weapon/clothing/under/orange( src ) + new /obj/item/weapon/clothing/under/orange( src ) + new /obj/item/weapon/clothing/under/orange( src ) + new /obj/item/weapon/clothing/shoes/orange( src ) + new /obj/item/weapon/clothing/shoes/orange( src ) + new /obj/item/weapon/clothing/shoes/orange( src ) + new /obj/item/weapon/clothing/shoes/orange( src ) + new /obj/item/weapon/clothing/shoes/orange( src ) + new /obj/item/weapon/clothing/shoes/orange( src ) + return + +/obj/closet/wardrobe/yellow/New() + + new /obj/item/weapon/clothing/under/yellow( src ) + new /obj/item/weapon/clothing/under/yellow( src ) + new /obj/item/weapon/clothing/under/yellow( src ) + new /obj/item/weapon/clothing/under/yellow( src ) + new /obj/item/weapon/clothing/under/yellow( src ) + new /obj/item/weapon/clothing/under/yellow( src ) + new /obj/item/weapon/clothing/shoes/orange( src ) + new /obj/item/weapon/clothing/shoes/orange( src ) + new /obj/item/weapon/clothing/shoes/orange( src ) + new /obj/item/weapon/clothing/shoes/orange( src ) + new /obj/item/weapon/clothing/shoes/orange( src ) + new /obj/item/weapon/clothing/shoes/orange( src ) + return + +/obj/closet/wardrobe/mixed/New() + + new /obj/item/weapon/clothing/under/blue( src ) + new /obj/item/weapon/clothing/under/blue( src ) + new /obj/item/weapon/clothing/under/blue( src ) + new /obj/item/weapon/clothing/under/pink( src ) + new /obj/item/weapon/clothing/under/pink( src ) + new /obj/item/weapon/clothing/under/pink( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + new /obj/item/weapon/clothing/shoes/brown( src ) + return + +/obj/closet/wardrobe/white/New() + + new /obj/item/weapon/clothing/under/white( src ) + new /obj/item/weapon/clothing/under/white( src ) + new /obj/item/weapon/clothing/under/white( src ) + new /obj/item/weapon/clothing/under/white( src ) + new /obj/item/weapon/clothing/under/white( src ) + new /obj/item/weapon/clothing/shoes/white( src ) + new /obj/item/weapon/clothing/shoes/white( src ) + new /obj/item/weapon/clothing/shoes/white( src ) + new /obj/item/weapon/clothing/shoes/white( src ) + new /obj/item/weapon/clothing/shoes/white( src ) + new /obj/item/weapon/storage/lglo_kit( src ) + new /obj/item/weapon/storage/stma_kit( src ) + new /obj/item/weapon/clothing/suit/labcoat(src) + new /obj/item/weapon/clothing/suit/labcoat(src) + new /obj/item/weapon/clothing/suit/labcoat(src) + return + +/obj/closet/ex_act(severity) + + switch(severity) + if(1.0) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(35) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(108) + //SN src = null + del(src) + return + if(3.0) + if (prob(5)) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(181) + //SN src = null + del(src) + return + else + return + + +/obj/secloset/blob_act() + + if (prob(50)) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + del(src) + +/obj/closet/meteorhit(obj/O as obj) + + if (O.icon_state == "flaming") + for(var/obj/item/I in src) + I.loc = src.loc + //Foreach goto(29) + for(var/mob/M in src) + M.loc = src.loc + if (M.client) + M.client.eye = M.client.mob + M.client.perspective = MOB_PERSPECTIVE + //Foreach goto(71) + src.icon_state = "emcloset1" + //SN src = null + del(src) + return + return + +/obj/closet/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if ((src.opened || W.damtype != "fire" || !( istype(W, /obj/item/weapon/weldingtool) ))) + user.drop_item() + W.loc = src.loc + else + src.welded = !( src.welded ) + for(var/mob/M in viewers(user, null)) + if (M.client) + M.show_message(text("\red [] has been [] by [].", src, (src.welded ? "welded shut" : "unwelded"), user), 3, "\red You hear welding.", 2) + //Foreach goto(82) + return + +/obj/closet/relaymove(mob/user as mob) + + if (user.stat) + return + if (!( src.welded )) + for(var/obj/item/I in src) + I.loc = src.loc + //Foreach goto(36) + for(var/mob/M in src) + M.loc = src.loc + if (M.client) + M.client.eye = M.client.mob + M.client.perspective = MOB_PERSPECTIVE + //Foreach goto(78) + src.icon_state = "emcloset1" + src.opened = 1 + else + user << "\blue It's welded shut!" + for(var/mob/M in hearers(src, null)) + M << text("BANG, bang!", max(0, 5 - get_dist(src, M))) + //Foreach goto(170) + return + +/obj/closet/MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob) + + if ((user.restrained() || user.stat)) + return + if ((!( istype(O, /atom/movable) ) || O.anchored || get_dist(user, src) > 1 || get_dist(user, O) > 1 || user.contents.Find(src))) + return + step_towards(O, src.loc) + for(var/mob/M in viewers(user, null)) + if ((M.client && !( M.blinded ))) + M << text("\red [] stuffs [] into []!", user, O, src) + //Foreach goto(104) + src.add_fingerprint(user) + return + +/obj/closet/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/closet/attack_hand(mob/user as mob) + + src.add_fingerprint(user) + if (!( src.opened )) + if (!( src.welded )) + for(var/obj/item/I in src) + I.loc = src.loc + //Foreach goto(43) + for(var/mob/M in src) + if (!( M.buckled )) + M.loc = src.loc + if (M.client) + M.client.eye = M.client.mob + M.client.perspective = MOB_PERSPECTIVE + //Foreach goto(85) + src.icon_state = "emcloset1" + src.opened = 1 + else + usr << "\blue It's welded shut!" + else + for(var/obj/item/I in src.loc) + if (!( I.anchored )) + I.loc = src + //Foreach goto(187) + for(var/mob/M in src.loc) + if (M.client) + M.client.perspective = EYE_PERSPECTIVE + M.client.eye = src + M.loc = src + //Foreach goto(237) + src.icon_state = src.original + src.opened = 0 + return + +/obj/closet/CheckPass(O as mob|obj, target as turf) + + if (!( src.opened )) + return 0 + else + return 1 + return + +/obj/stool/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + //SN src = null + del(src) + return + if(3.0) + if (prob(5)) + //SN src = null + del(src) + return + else + return + +/obj/stool/blob_act() + + if(prob(50)) + new /obj/item/weapon/sheet/metal( src.loc ) + del(src) + +/obj/stool/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (istype(W, /obj/item/weapon/wrench)) + new /obj/item/weapon/sheet/metal( src.loc ) + //SN src = null + del(src) + + return + +/obj/stool/bed/attackby(obj/item/weapon/W as obj, mob/user as mob) + + return + +/obj/stool/chair/attackby(obj/item/weapon/W as obj, mob/user as mob) + + ..() + if (istype(W, /obj/item/weapon/assembly/shock_kit)) + var/obj/stool/chair/e_chair/E = new /obj/stool/chair/e_chair( src.loc ) + E.dir = src.dir + E.part1 = W + W.loc = E + W.master = E + user.u_equip(W) + W.layer = initial(W.layer) + //SN src = null + del(src) + return + return + +/obj/stool/chair/e_chair/New() + + src.overl = new /atom/movable/overlay( src.loc ) + src.overl.icon = 'Icons.dmi' + src.overl.icon_state = "e_chairo0" + src.overl.layer = 5 + src.overl.name = "electrified chair" + src.overl.master = src + return + +/obj/stool/chair/e_chair/Del() + + //src.overl = null + del(src.overl) + ..() + return + +/obj/stool/chair/e_chair/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (istype(W, /obj/item/weapon/wrench)) + var/obj/stool/chair/C = new /obj/stool/chair( src.loc ) + C.dir = src.dir + src.part1.loc = src.loc + src.part1.master = null + src.part1 = null + //SN src = null + del(src) + return + return + +/obj/stool/chair/e_chair/verb/toggle_power() + set src in oview(1) + + if ((usr.stat || usr.restrained() || !( usr.canmove ) || usr.lying)) + return + src.on = !( src.on ) + src.icon_state = text("e_chair[]", src.on) + src.overl.icon_state = text("e_chairo[]", src.on) + return + +/obj/stool/chair/e_chair/proc/shock() + + //***** + //world << "EC: got shock, status is [on]" + + + + if (!( src.on )) + return + if ( (src.last_time + 50) > world.time) + return + src.last_time = world.time + + // special power handling + var/area/A = src.loc.loc + if(!isarea(A)) + return + if(!A.powered(EQUIP)) + return + A.use_power(EQUIP, 5000) + var/light = A.power_light + A.updateicon() + + + flick("e_chairs", src) + flick("e_chairos", src.overl) + for(var/mob/M in src.loc) + M.burn(7.5E7) + M << "\red You feel a deep shock course through your body!" + sleep(1) + M.burn(7.5E7) + M.stunned = 600 + //Foreach goto(72) + for(var/mob/M in hearers(src, null)) + if (!( M.blinded )) + M << "\red The electric chair went off!" + else + M << "\red You hear a deep sharp shock." + //Foreach goto(142) + + A.power_light = light + A.updateicon() + + return + +/obj/stool/chair/ex_act(severity) + + if (severity < 4) + for(var/mob/M in src.loc) + M.buckled = null + //Foreach goto(28) + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + //SN src = null + del(src) + return + if(3.0) + if (prob(5)) + //SN src = null + del(src) + return + else + return + +/obj/stool/chair/blob_act() + + if (prob(50)) + for(var/mob/M in src.loc) + M.buckled = null + //Foreach goto(28) + if(prob(50)) + del(src) + +/obj/stool/chair/New() + + src.verbs -= /atom/movable/verb/pull + if (src.dir == NORTH) + src.layer = FLY_LAYER + ..() + return + +/obj/stool/chair/Del() + + for(var/mob/M in src.loc) + if (M.buckled == src) + M.buckled = null + //Foreach goto(17) + ..() + return + +/obj/stool/chair/verb/rotate() + set src in oview(1) + + src.dir = turn(src.dir, 90) + if (src.dir == NORTH) + src.layer = FLY_LAYER + else + src.layer = OBJ_LAYER + return + +/obj/stool/chair/MouseDrop_T(mob/M as mob, mob/user as mob) + + if ((!( istype(M, /mob) ) || get_dist(src, user) > 1 || M.loc != src.loc || user.restrained() || usr.stat)) + return + if (M == usr) + for(var/mob/O in viewers(user, null)) + if ((O.client && !( O.blinded ))) + O << text("\blue [] buckles in!", user) + //Foreach goto(83) + else + for(var/mob/O in viewers(user, null)) + if ((O.client && !( O.blinded ))) + O << text("\blue [] is buckled in by []!", M, user) + //Foreach goto(137) + M.anchored = 1 + M.buckled = src + M.loc = src.loc + src.add_fingerprint(user) + return + +/obj/stool/chair/attack_paw(mob/user as mob) + + if ((ticker && ticker.mode == "monkey")) + return src.attack_hand(user) + return + +/obj/stool/chair/attack_hand(mob/user as mob) + + for(var/mob/M in src.loc) + if (M.buckled) + if (M != user) + for(var/mob/O in viewers(user, null)) + if ((O.client && !( O.blinded ))) + O << text("\blue [] is unbuckled by [].", M, user) + //Foreach goto(64) + else + for(var/mob/O in viewers(user, null)) + if ((O.client && !( O.blinded ))) + O << text("\blue [] unbuckles.", M) + //Foreach goto(123) + M.anchored = 0 + M.buckled = null + src.add_fingerprint(user) + //Foreach goto(17) + return + + +/obj/grille/New() + ..() + +//returns the netnum of a stub cable at this grille loc, or 0 if none + +/obj/grille/proc/get_connection() + + var/turf/T = src.loc + if(!istype(T, /turf/station/floor)) + return + + for(var/obj/cable/C in T) + if(C.d1 == 0) + return C.netnum + + return 0 + +/obj/grille/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + //SN src = null + del(src) + return + if(3.0) + if (prob(25)) + src.health -= 11 + healthcheck() + else + return + +/obj/grille/blob_act() + src.health-- + src.healthcheck() + + +/obj/grille/meteorhit(var/obj/M) + + if (M.icon_state == "flaming") + src.health -= 2 + healthcheck() + return + +/obj/grille/CheckPass(var/obj/B) + + if ((istype(B, /obj/effects) || istype(B, /obj/item/weapon/dummy) || istype(B, /obj/beam) || istype(B, /obj/meteor/small))) + return 1 + else + if (istype(B, /obj/bullet)) + return prob(30) + else + return !( src.density ) + return + +/obj/grille/attackby(obj/item/weapon/W, mob/user) + + if (istype(W, /obj/item/weapon/wirecutters)) + if(!shock(user, 100)) + src.health = 0 + else if ((istype(W, /obj/item/weapon/screwdriver) && (istype(src.loc, /turf/station) || src.anchored))) + if(!shock(user, 50)) + src.anchored = !( src.anchored ) + user << (src.anchored ? "You have fastened the grille to the floor." : "You have unfastened the grill.") + else if(istype(W, /obj/item/weapon/shard)) // can't get a shock by attacking with glass shard + + src.health -= W.force * 0.1 + + else // anything else, chance of a shock + if(!shock(user, 70)) + switch(W.damtype) + if("fire") + src.health -= W.force + if("brute") + src.health -= W.force * 0.1 + + + src.healthcheck() + ..() + return + +/obj/grille/proc/healthcheck() + + if (src.health <= 0) + if (!( src.destroyed )) + src.icon_state = "brokengrille" + src.density = 0 + src.destroyed = 1 + new /obj/item/weapon/rods( src.loc ) + + else + if (src.health <= -10.0) + new /obj/item/weapon/rods( src.loc ) + //SN src = null + del(src) + return + return + +// shock user with probability prb (if all connections & power are working) +// returns 1 if shocked, 0 otherwise + +/obj/grille/proc/shock(mob/user, prb) + + if(!anchored || destroyed) // anchored/destroyed grilles are never connected + return 0 + + if(!prob(prb)) + return 0 + + var/net = get_connection() // find the powernet of the connected cable + + + if(!net) // cable is unpowered + return 0 + + var/datum/powernet/PN // find the powernet + if(powernets && powernets.len >= net) + PN = powernets[net] + + if(PN && PN.avail > 0) // is it powered? + + var/prot = 0 + + if(istype(user, /mob/human)) + var/mob/human/H = user + if(H.gloves) + var/obj/item/weapon/clothing/gloves/G = H.gloves + + prot = G.elec_protect + + if(prot == 10) // elec insulted gloves protect completely + return 0 + + prot++ + + var/obj/effects/sparks/O = new /obj/effects/sparks( src.loc ) + O.dir = pick(NORTH, SOUTH, EAST, WEST) + spawn( 0 ) + O.Life() + + if(PN.avail > 10000) + user.burn(8e7/prot) + + user << "\red You feel a powerful shock course through your body!" + sleep(1) + + user.stunned = 120/prot + user.weakened = 20/prot + //Foreach goto(72) + for(var/mob/M in hearers(src, null)) + if(M == user) + continue + if (!( M.blinded )) + M << "\red [user.name] was shocked by the grille!" + else + M << "\red You hear a heavy electrical crack." + + return 1 + +/obj/window/las_act(flag) + + if (flag == "bullet") + + if(!reinf) + new /obj/item/weapon/shard( src.loc ) + //SN src = null + src.density = 0 + src.loc.buildlinks() + + del(src) + else + health -= 35 + if(health <=0) + new /obj/item/weapon/shard( src.loc ) + new /obj/item/weapon/rods( src.loc ) + src.density = 0 + src.loc.buildlinks() + del(src) + + return + return + +/obj/window/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + new /obj/item/weapon/shard( src.loc ) + if(reinf) new /obj/item/weapon/rods( src.loc) + //SN src = null + del(src) + return + if(3.0) + if (prob(50)) + new /obj/item/weapon/shard( src.loc ) + if(reinf) new /obj/item/weapon/rods( src.loc) + + //SN src = null + del(src) + return + else + return + +/obj/window/blob_act() + if(prob(50)) + new /obj/item/weapon/shard( src.loc ) + if(reinf) new /obj/item/weapon/rods( src.loc) + density = 0 + src.loc.buildlinks() + del(src) + +/obj/window/CheckPass(atom/movable/O as mob|obj, target as turf) + + if (istype(O, /obj/beam)) + return 1 + if (src.dir == SOUTHWEST) + return 0 + else + if (get_dir(target, O.loc) == src.dir) + return 0 + return 1 + return + +/obj/window/CheckExit(atom/movable/O as mob|obj, target as turf) + + if (istype(O, /obj/beam)) + return 1 + if (get_dir(O.loc, target) == src.dir) + return 0 + return 1 + return + +/obj/window/meteorhit() + + //*****RM + //world << "glass at [x],[y],[z] Mhit" + src.health = 0 + new /obj/item/weapon/shard( src.loc ) + if(reinf) new /obj/item/weapon/rods( src.loc) + src.density = 0 + src.loc.buildlinks() + + + ////SN src = null + del(src) + return + + +/obj/window/hitby(obj/item/weapon/W as obj) + + ..() + var/tforce = W.throwforce + if(reinf) tforce /= 4.0 + + src.health = max(0, src.health - tforce) + if (src.health <= 7 && !reinf) + src.anchored = 0 + step(src, get_dir(W, src)) + if (src.health <= 0) + new /obj/item/weapon/shard( src.loc ) + if(reinf) new /obj/item/weapon/rods( src.loc) + src.density = 0 + src.loc.buildlinks() + //SN src = null + del(src) + return + ..() + return + +/obj/window/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (istype(W, /obj/item/weapon/screwdriver)) + if(reinf && state >= 1) + state = 3 - state + usr << ( state==1? "You have unfastened the window from the frame." : "You have fastened the window to the frame." ) + else if(reinf && state == 0) + anchored = !anchored + user << (src.anchored ? "You have fastened the frame to the floor." : "You have unfastened the frame from the floor.") + else if(!reinf) + src.anchored = !( src.anchored ) + user << (src.anchored ? "You have fastened the window to the floor." : "You have unfastened the window.") + else if(istype(W, /obj/item/weapon/crowbar) && reinf) + if(state <=1) + state = 1-state; + user << (state ? "You have pried the window into the frame." : "You have pried the window out of the frame.") + else + var/aforce = W.force + if(reinf) aforce /= 2.0 + + src.health = max(0, src.health - aforce) + if (src.health <= 7) + src.anchored = 0 + var/turf/sl = src.loc + step(src, get_dir(user, src)) + sl.buildlinks() + src.loc.buildlinks() + if (src.health <= 0) + if (src.dir == SOUTHWEST) + var/index = null + index = 0 + while(index < 2) + new /obj/item/weapon/shard( src.loc ) + if(reinf) new /obj/item/weapon/rods( src.loc) + index++ + else + new /obj/item/weapon/shard( src.loc ) + if(reinf) new /obj/item/weapon/rods( src.loc) + //SN src = null + + src.density = 0 + src.loc.buildlinks() + del(src) + return + ..() + src.loc.buildlinks() + return + +/obj/window/verb/rotate() + set src in oview(1) + + if (src.anchored) + usr << "It is fastened to the floor; therefore, you can't rotate it!" + return 0 + else + if (src.dir == SOUTHWEST) + usr << "You can't rotate this! " + return 0 + src.dir = turn(src.dir, 90) + src.ini_dir = src.dir + src.loc.buildlinks() + return + +/obj/window/New(Loc,re=0) + + ..() + + if(re) reinf = re + + src.ini_dir = src.dir + src.loc.buildlinks() + if(reinf) + icon_state = "rwindow" + desc = "A reinforced window." + name = "reinforced window" + state = 2*anchored + health = 40 + + return + +/obj/window/Del() + src.density = 0 + src.loc.buildlinks() + ..() + +/obj/window/Move() + + var/turf/sl = src.loc + ..() + src.dir = src.ini_dir + sl.buildlinks() + src.loc.buildlinks() + return + +/atom/proc/meteorhit(obj/meteor as obj) + + return + +/atom/proc/allow_drop() + + return 1 + +/atom/proc/CheckPass(atom/O as mob|obj|turf|area) + + return (!( O.density ) || !( src.density )) + +/atom/proc/CheckExit() + + return 1 + +/atom/proc/HasEntered(atom/movable/AM as mob|obj) + + return + +/atom/proc/HasProximity(atom/movable/AM as mob|obj) + + return + +/atom/movable/overlay/attackby(a, b) + + if (src.master) + return src.master.attackby(a, b) + return + +/atom/movable/overlay/attack_paw(a, b, c) + + if (src.master) + return src.master.attack_paw(a, b, c) + return + +/atom/movable/overlay/attack_hand(a, b, c) + + if (src.master) + return src.master.attack_hand(a, b, c) + return + +/atom/movable/overlay/New() + + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(17) + return + +/turf/CheckPass(atom/O as mob|obj|turf|area) + + return !( src.density ) + return + +/turf/New() + + ..() + for(var/atom/movable/AM as mob|obj in src) + spawn( 0 ) + src.Entered(AM) + return + //Foreach goto(19) + return + +/turf/Enter(atom/movable/O as mob|obj, atom/forget as mob|obj|turf|area) + + if (!( isturf(O.loc) )) + return 1 + for(var/atom/A as mob|obj|turf|area in O.loc) + if ((!( A.CheckExit(O, src) ) && O != A && A != forget)) + if (O) + O.Bump(A, 1) + return 0 + //Foreach goto(34) + for(var/atom/A as mob|obj|turf|area in src) + if ((A.flags & 512 && get_dir(A, O) & A.dir)) + if ((!( A.CheckPass(O, src) ) && A != src && A != forget)) + if (O) + O.Bump(A, 1) + return 0 + //Foreach goto(127) + for(var/atom/A as mob|obj|turf|area in src) + if ((!( A.CheckPass(O, src) ) && A != forget)) + if (O) + O.Bump(A, 1) + return 0 + //Foreach goto(244) + if (src != forget) + if (!( src.CheckPass(O, src) )) + if (O) + O.Bump(src, 1) + return 0 + return 1 + return + +/turf/Entered(atom/movable/M as mob|obj) + + ..() + for(var/atom/A as mob|obj|turf|area in src) + spawn( 0 ) + if ((A && M)) + A.HasEntered(M, 1) + return + //Foreach goto(19) + for(var/atom/A as mob|obj|turf|area in range(1)) + spawn( 0 ) + if ((A && M)) + A.HasProximity(M, 1) + return + //Foreach goto(86) + return + + +/turf/proc/levelupdate() + + + for(var/obj/O in src) + if(O.level == 1) + O.hide(src.intact) + + +/turf/station/r_wall/updatecell() + + if (src.state == 2) + return + else + ..() + return + +/turf/station/r_wall/proc/update() + + if (src.d_state > 6) + src.d_state = 0 + src.state = 1 + if (src.state == 2) + src.icon_state = text("r_wall[]", (src.d_state > 0 ? text("-[]", src.d_state) : null)) + src.opacity = 1 + src.density = 1 + src.updatecell = 0 + src.buildlinks() + else + src.icon_state = "r_girder" + src.opacity = 0 + src.density = 1 + src.updatecell = 1 + src.buildlinks() + return + +/turf/station/r_wall/unburn() + + src.update() + return + +/turf/station/r_wall/meteorhit(obj/M as obj) + + if ((M.icon_state == "flaming" && prob(30))) + if (src.state == 2) + src.state = 1 + new /obj/item/weapon/sheet/metal( src ) + new /obj/item/weapon/sheet/metal( src ) + update() + else + if ((prob(20) && src.state == 1)) + src.state = 0 + var/turf/station/floor/F = new /turf/station/floor( locate(src.x, src.y, src.z) ) + F.oxygen = O2STANDARD + new /obj/item/weapon/sheet/metal( F ) + new /obj/item/weapon/sheet/metal( F ) + F.buildlinks() + F.levelupdate() + return + +/turf/station/r_wall/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + var/turf/space/S = new /turf/space( locate(src.x, src.y, src.z) ) + S.buildlinks() + + //del(src) + return + if(2.0) + if (prob(75)) + src.opacity = 0 + src.updatecell = 1 + src.buildlinks() + src.state = 1 + src.intact = 0 + src.levelupdate() + new /obj/item/weapon/sheet/metal( src ) + new /obj/item/weapon/sheet/metal( src ) + else + src.state = 0 + var/turf/station/floor/F = new /turf/station/floor( locate(src.x, src.y, src.z) ) + F.burnt = 1 + F.health = 30 + F.icon_state = "Floor1" + new /obj/item/weapon/sheet/metal( F ) + new /obj/item/weapon/sheet/metal( F ) + F.buildlinks() + F.levelupdate() + if(3.0) + if (prob(15)) + src.opacity = 0 + src.updatecell = 1 + src.buildlinks() + src.intact = 0 + src.levelupdate() + src.state = 1 + new /obj/item/weapon/sheet/metal( src ) + new /obj/item/weapon/sheet/metal( src ) + src.icon_state = "girder" + update() + else + return + +/turf/station/r_wall/blob_act() + + if(prob(10)) + if(!intact) + src.state = 0 + var/turf/station/floor/F = new /turf/station/floor( locate(src.x, src.y, src.z) ) + F.burnt = 1 + F.health = 30 + F.icon_state = "Floor1" + new /obj/item/weapon/sheet/metal( F ) + F.buildlinks() + F.levelupdate() + else + + src.opacity = 0 + src.updatecell = 1 + src.buildlinks() + src.state = 1 + src.intact = 0 + src.levelupdate() + new /obj/item/weapon/sheet/metal( src ) + src.icon_state = "girder" + update() + + + +/turf/station/r_wall/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + user << "\red You don't have the dexterity to do this!" + return + if (src.state == 2) + if (istype(W, /obj/item/weapon/wrench)) + if (src.d_state == 4) + var/turf/T = user.loc + user << "\blue Cutting support rods." + sleep(40) + if ((user.loc == T && user.equipped() == W && !( user.stat ))) + src.d_state = 5 + else + if (istype(W, /obj/item/weapon/wirecutters)) + if (src.d_state == 0) + src.d_state = 1 + new /obj/item/weapon/rods( src ) + else + if (istype(W, /obj/item/weapon/weldingtool)) + if (src.d_state == 2) + var/turf/T = user.loc + user << "\blue Slicing metal cover." + sleep(60) + if ((user.loc == T && user.equipped() == W && !( user.stat ))) + src.d_state = 3 + else + if (src.d_state == 5) + var/turf/T = user.loc + user << "\blue Removing support rods." + sleep(100) + if ((user.loc == T && user.equipped() == W && !( user.stat ))) + src.d_state = 6 + new /obj/item/weapon/rods( src ) + else + if (istype(W, /obj/item/weapon/screwdriver)) + if (src.d_state == 1) + var/turf/T = user.loc + user << "\blue Removing support lines." + sleep(40) + if ((user.loc == T && user.equipped() == W && !( user.stat ))) + src.d_state = 2 + else + if (istype(W, /obj/item/weapon/crowbar)) + if (src.d_state == 3) + var/turf/T = user.loc + user << "\blue Prying cover off." + sleep(100) + if ((user.loc == T && user.equipped() == W && !( user.stat ))) + src.d_state = 4 + else + if (src.d_state == 6) + var/turf/T = user.loc + user << "\blue Prying outer sheath off." + sleep(100) + if ((user.loc == T && user.equipped() == W && !( user.stat ))) + src.d_state = 7 + new /obj/item/weapon/sheet/metal( src ) + else + if (istype(W, /obj/item/weapon/sheet/metal)) + var/turf/T = user.loc + user << "\blue Repairing wall." + sleep(100) + if ((user.loc == T && user.equipped() == W && !( user.stat ) && src.state == 2)) + src.d_state = 0 + if (W:amount > 1) + W:amount-- + else + //W = null + del(W) + if (src.state == 1) + if (istype(W, /obj/item/weapon/wrench)) + user << "\blue Now dismantling girders." + var/turf/T = user.loc + sleep(100) + if ((user.loc == T && user.equipped() == W && !( user.stat ))) + src.state = 0 + var/turf/station/floor/F = new /turf/station/floor( locate(src.x, src.y, src.z) ) + F.oxygen = O2STANDARD + new /obj/item/weapon/sheet/metal( F ) + new /obj/item/weapon/sheet/metal( F ) + new /obj/item/weapon/sheet/metal( F ) + new /obj/item/weapon/sheet/metal( F ) + F.buildlinks() + F.levelupdate() + else + if (istype(W, /obj/item/weapon/sheet/r_metal)) + src.state = 2 + src.d_state = 0 + //W = null + del(W) + if(istype(src,/turf/station/r_wall)) + src.update() + return + +//routine above sometimes erroneously calls turf/station/floor/update +//src being miss-set somehow? Maybe due to multiple-clicking +/turf/station/floor/proc/update() + return + +/turf/station/wall/examine() + set src in oview(1) + + usr << "It looks like a regular wall." + return + +/turf/station/wall/updatecell() + + if (src.state == 2) + return + else + ..() + return + + +/turf/station/wall/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + var/turf/space/S = new /turf/space( locate(src.x, src.y, src.z) ) + S.buildlinks() + del(src) + return + if(2.0) + if (prob(50)) + src.opacity = 0 + src.updatecell = 1 + buildlinks() + src.state = 1 + src.intact = 0 + src.levelupdate() + new /obj/item/weapon/sheet/metal( src ) + new /obj/item/weapon/sheet/metal( src ) + src.icon_state = "girder" + else + src.state = 0 + var/turf/station/floor/F = new /turf/station/floor( locate(src.x, src.y, src.z) ) + F.burnt = 1 + F.health = 30 + F.icon_state = "Floor1" + new /obj/item/weapon/sheet/metal( F ) + new /obj/item/weapon/sheet/metal( F ) + F.buildlinks() + F.levelupdate() + if(3.0) + if (prob(25)) + src.opacity = 0 + src.updatecell = 1 + buildlinks() + src.intact = 0 + levelupdate() + src.state = 1 + new /obj/item/weapon/sheet/metal( src ) + new /obj/item/weapon/sheet/metal( src ) + src.icon_state = "girder" + else + return + +/turf/station/wall/blob_act() + + if(prob(20)) + if(!intact) + src.state = 0 + var/turf/station/floor/F = new /turf/station/floor( locate(src.x, src.y, src.z) ) + F.burnt = 1 + F.health = 30 + F.icon_state = "Floor1" + new /obj/item/weapon/sheet/metal( F ) + F.buildlinks() + F.levelupdate() + else + + src.opacity = 0 + src.updatecell = 1 + buildlinks() + src.state = 1 + src.intact = 0 + levelupdate() + new /obj/item/weapon/sheet/metal( src ) + src.icon_state = "girder" + + + +/turf/station/wall/unburn() + + if (src.state == 1) + src.icon_state = "girder" + else + src.icon_state = "" + return + +/turf/station/wall/attack_paw(mob/user as mob) + + if ((ticker && ticker.mode == "monkey")) + return src.attack_hand(user) + return + +/turf/station/wall/attack_hand(mob/user as mob) + + user << "\blue You push the wall but nothing happens!" + src.add_fingerprint(user) + return + +/turf/station/wall/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + user << "\red You don't have the dexterity to do this!" + return + if ((istype(W, /obj/item/weapon/wrench) && src.state == 1)) + var/turf/T = user.loc + if (!( istype(T, /turf) )) + return + user << "\blue Now dissembling the reinforced girders. Please stand still. This is a long process." + sleep(100) + if (!( istype(src, /turf/station/wall) )) + return + if ((user.loc == T && src.state == 1 && user.equipped() == W)) + src.state = 0 + var/turf/station/floor/F = new /turf/station/floor( locate(src.x, src.y, src.z) ) + F.oxygen = O2STANDARD + new /obj/item/weapon/sheet/metal( F ) + new /obj/item/weapon/sheet/metal( F ) + F.buildlinks() + F.levelupdate() + else + if ((istype(W, /obj/item/weapon/screwdriver) && src.state == 1)) + var/turf/T = user.loc + if (!( istype(T, /turf) )) + return + user << "\blue Now dislodging girders." + sleep(100) + if (!( istype(src, /turf/station/wall) )) + return + if ((user.loc == T && src.state == 1 && user.equipped() == W)) + src.state = 0 + var/turf/station/floor/F = new /turf/station/floor( locate(src.x, src.y, src.z) ) + F.oxygen = O2STANDARD + new /obj/d_girders( F ) + new /obj/item/weapon/sheet/metal( F ) + F.buildlinks() + else + if ((istype(W, /obj/item/weapon/sheet/r_metal) && src.state == 1)) + var/turf/T = user.loc + if (!( istype(T, /turf) )) + return + user << "\blue Now reinforcing girders." + sleep(100) + if (!( istype(src, /turf/station/wall) )) + return + if ((user.loc == T && src.state == 1 && user.equipped() == W)) + src.state = 0 + var/turf/station/r_wall/F = new /turf/station/r_wall( locate(src.x, src.y, src.z) ) + F.oxygen = O2STANDARD + F.icon_state = "r_girder" + F.state = 1 + F.opacity = 0 + F.updatecell = 1 + F.buildlinks() + else + if ((istype(W, /obj/item/weapon/weldingtool) && src.state == 2)) + var/turf/T = user.loc + if (!( istype(T, /turf) )) + return + var/obj/item/weapon/weldingtool/WT = W + if(WT.welding) + if (WT.weldfuel < 5) + user << "\blue You need more welding fuel to complete this task." + return + WT.weldfuel -= 5 + user << "\blue Now dissembling the outer wall plating. Please stand still." + sleep(50) + if ((user.loc == T && src.state == 2 && user.equipped() == W)) + src.opacity = 0 + src.updatecell = 1 + buildlinks() + src.state = 1 + src.intact = 0 + levelupdate() + new /obj/item/weapon/sheet/metal( src ) + new /obj/item/weapon/sheet/metal( src ) + src.icon_state = "girder" + return + +/turf/station/wall/meteorhit(obj/M as obj) + + if (M.icon_state == "flaming") + src.icon_state = "girder" + if (src.state == 2) + src.state = 1 + src.opacity = 0 + src.updatecell = 1 + buildlinks() + src.firelevel = 11 + new /obj/item/weapon/sheet/metal( src ) + new /obj/item/weapon/sheet/metal( src ) + else + if ((prob(20) && src.state == 1)) + src.state = 0 + var/turf/station/floor/F = new /turf/station/floor( locate(src.x, src.y, src.z) ) + F.oxygen = O2STANDARD + new /obj/item/weapon/sheet/metal( F ) + new /obj/item/weapon/sheet/metal( F ) + F.buildlinks() + F.levelupdate() + return + +/turf/station/floor/CheckPass(atom/movable/O as mob|obj) + + if ((istype(O, /obj/machinery/pod) && !( src.burnt ))) + if (!( locate(/obj/machinery/mass_driver, src) )) + return 0 + return 1 + return + +/turf/station/floor/ex_act(severity) + + switch(severity) + if(1.0) + var/turf/space/S = new /turf/space( locate(src.x, src.y, src.z) ) + S.buildlinks() + levelupdate() + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + //SN src = null + var/turf/space/S = new /turf/space( locate(src.x, src.y, src.z) ) + S.buildlinks() + levelupdate() + del(src) + return + else + src.icon_state = "burning" + src.burnt = 1 + src.health = 30 + src.intact = 0 + levelupdate() + src.firelevel = 1800000.0 + src.buildlinks() + if(3.0) + if (prob(50)) + src.burnt = 1 + src.health = 1 + src.intact = 0 + levelupdate() + src.icon_state = "Floor1" + src.buildlinks() + else + return + +/turf/station/floor/blob_act() + return + +/turf/station/floor/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/turf/station/floor/attack_hand(mob/user as mob) + + if ((!( user.canmove ) || user.restrained() || !( user.pulling ))) + return + if (user.pulling.anchored) + return + if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1)) + return + if (ismob(user.pulling)) + var/mob/M = user.pulling + var/mob/t = M.pulling + M.pulling = null + step(user.pulling, get_dir(user.pulling.loc, src)) + M.pulling = t + else + step(user.pulling, get_dir(user.pulling.loc, src)) + return + +/turf/station/floor/attackby(obj/item/weapon/C as obj, mob/user as mob) + + if (istype(C, /obj/item/weapon/crowbar)) + if (src.health > 100) + src.health = 100 + src.burnt = 1 + src.intact = 0 + levelupdate() + new /obj/item/weapon/tile( src ) + src.icon_state = text("Floor[]", (src.burnt ? "1" : "")) + else if (istype(C, /obj/item/weapon/tile)) + if (src.health <= 100) + src.intact = 1 + levelupdate() + src.health = 150 + src.burnt = 0 + if (src.firelevel >= 900000.0) + src.icon_state = "burning" + else + src.icon_state = "Floor" + var/obj/item/weapon/tile/T = C + T.amount-- + if (T.amount < 1) + //T = null + del(T) + else if (istype(C, /obj/item/weapon/cable_coil) ) + var/obj/item/weapon/cable_coil/coil = C + coil.turf_place(src, user) + + //else if (istype(C, /obj/item/weapon/sheet/r_metal)) + + return + +/turf/station/floor/unburn() + + src.icon_state = text("Floor[]", (src.burnt ? "1" : "")) + return + +/turf/station/floor/updatecell() + + ..() + if (src.checkfire) + if (src.firelevel >= 2700000.0) + src.health-- + if (src.health <= 0) + src.burnt = 1 + src.intact = 0 + levelupdate() + //SN src = null + del(src) + return + else + if (src.health <= 100) + src.burnt = 1 + src.intact = 0 + levelupdate() + return + +/turf/station/floor/plasma_test/updatecell() + + ..() + src.poison = 7.5E7 + res_vars() + return + + diff --git a/main-src/Code/demo2.dm b/main-src/Code/demo2.dm new file mode 100644 index 0000000..ebdbf81 --- /dev/null +++ b/main-src/Code/demo2.dm @@ -0,0 +1,691 @@ + +/obj/machinery/computer/atmosphere/proc/returnarea() + + return + +/obj/machinery/computer/atmosphere/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(58) + src.icon_state = "broken" + stat |= BROKEN + if(3.0) + if (prob(25)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(109) + src.icon_state = "broken" + stat |= BROKEN + else + return + +/obj/machinery/computer/atmosphere/siphonswitch/New() + ..() + + spawn(5) + src.area = src.loc.loc + + if(otherarea) + src.area = locate(text2path("/area/[otherarea]")) + +/obj/machinery/computer/atmosphere/siphonswitch/returnarea() + + return area.contents + + +/obj/machinery/computer/atmosphere/siphonswitch/verb/siphon_all() + set src in oview(1) + if(stat & NOPOWER) return + if (usr.stat) + return + usr << "Starting all siphon systems." + for(var/obj/machinery/atmoalter/siphs/S in src.returnarea()) + S.reset(1, 0) + //Foreach goto(39) + src.add_fingerprint(usr) + return + +/obj/machinery/computer/atmosphere/siphonswitch/verb/stop_all() + set src in oview(1) + if(stat & NOPOWER) return + if (usr.stat) + return + usr << "Stopping all siphon systems." + for(var/obj/machinery/atmoalter/siphs/S in src.returnarea()) + S.reset(0, 0) + //Foreach goto(39) + src.add_fingerprint(usr) + return + +/obj/machinery/computer/atmosphere/siphonswitch/verb/auto_on() + set src in oview(1) + if(stat & NOPOWER) return + if (usr.stat) + return + usr << "Starting automatic air control systems." + for(var/obj/machinery/atmoalter/siphs/S in src.returnarea()) + S.reset(0, 1) + //Foreach goto(39) + src.add_fingerprint(usr) + return + +/obj/machinery/computer/atmosphere/siphonswitch/verb/release_scrubbers() + set src in oview(1) + + if(stat & NOPOWER) return + if (usr.stat) + return + usr << "Releasing all scrubber toxins." + for(var/obj/machinery/atmoalter/siphs/scrubbers/S in src.returnarea()) + S.reset(-1.0, 0) + //Foreach goto(39) + src.add_fingerprint(usr) + return + +/obj/machinery/computer/atmosphere/siphonswitch/verb/release_all() + + if(stat & NOPOWER) return + if (usr.stat) + return + usr << "Releasing all stored air." + for(var/obj/machinery/atmoalter/siphs/S in src.returnarea()) + S.reset(-1.0, 0) + //Foreach goto(37) + src.add_fingerprint(usr) + return + +/obj/machinery/computer/atmosphere/siphonswitch/mastersiphonswitch/returnarea() + + return world + return + +/obj/machinery/atmoalter/heater/proc/setstate() + + if(stat & NOPOWER) + icon_state = "heater-p" + return + + if (src.holding) + src.icon_state = "heater1-h" + else + src.icon_state = "heater1" + return + +/obj/machinery/atmoalter/heater/process() + + if(stat & NOPOWER) return + use_power(5) + + var/turf/T = src.loc + if (istype(T, /turf)) + if (locate(/obj/move, T)) + T = locate(/obj/move, T) + else + T = null + if (src.h_status) + var/t1 = src.gas.tot_gas() + if ((t1 > 0 && src.gas.temperature < (src.h_tar+T0C))) + var/increase = src.heatrate / t1 + var/n_temp = src.gas.temperature + increase + src.gas.temperature = min(n_temp, (src.h_tar+T0C)) + use_power( src.h_tar*8) + switch(src.t_status) + if(1.0) + if (src.holding) + var/t1 = src.gas.tot_gas() + var/t2 = t1 + var/t = src.t_per + if (src.t_per > t2) + t = t2 + src.holding.gas.transfer_from(src.gas, t) + else + src.t_status = 3 + if(2.0) + if (src.holding) + var/t1 = src.gas.tot_gas() + var/t2 = src.maximum - t1 + var/t = src.t_per + if (src.t_per > t2) + t = t2 + src.gas.transfer_from(src.holding.gas, t) + else + src.t_status = 3 + else + + /* + if(src.c_status == 1) // 1 = release + var/obj/machinery/connector/C = locate(/obj/machinery/connector, src.loc) + if (C && C.connected == src) + spawn( 0 ) + C.receive_gas(gas, c_per ) + return + + else + src.c_status = 0 + else if(src.c_status == 2) // 2 = accept + var/obj/machinery/connector/C = locate(/obj/machinery/connector, src.loc) + if (C && C.connected == src) + spawn( 0 ) + C.send_gas(gas, c_per) // connector will send gas to canister + return + */ + + + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(432) + src.setstate() + return + +/obj/machinery/atmoalter/heater/New() + + ..() + src.gas = new /obj/substance/gas( src ) + src.gas.maximum = src.maximum + return + +/obj/machinery/atmoalter/heater/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/atmoalter/heater/attack_hand(var/mob/user as mob) + + if(stat & NOPOWER) return + + user.machine = src + var/tt + switch(src.t_status) + if(1.0) + tt = text("Releasing Siphon Stop", src, src) + if(2.0) + tt = text("Release SiphoningStop", src, src) + if(3.0) + tt = text("Release Siphon Stopped", src, src) + else + var/ht = null + if (src.h_status) + ht = text("Heating Stop", src) + else + ht = text("Heat Stopped", src) + var/ct = null + switch(src.c_status) + if(1.0) + ct = text("Releasing Accept Stop", src, src) + if(2.0) + ct = text("Release Accepting Stop", src, src) + if(3.0) + ct = text("Release Accept Stopped", src, src) + else + ct = "Disconnected" + var/dat = text("Canister Valves
    \nContains/Capacity [] / []
    \nUpper Valve Status: [][]
    \n\tM - - - - [] + + + + M
    \nHeater Status: [] - []
    \n\tTrg Tmp: - - - [] + + +
    \n
    \nPipe Valve Status: []
    \n\tM - - - - [] + + + + M
    \n
    \nClose
    \n
    ", src.gas.tot_gas(), src.maximum, tt, (src.holding ? text("
    Tank ([])", src, src.holding.gas.tot_gas()) : null), src, num2text(1000000.0, 7), src, src, src, src, src.t_per, src, src, src, src, src, num2text(1000000.0, 7), ht, (src.gas.tot_gas() ? (src.gas.temperature-T0C) : 20), src, src, src, src.h_tar, src, src, src, ct, src, num2text(1000000.0, 7), src, src, src, src, src.c_per, src, src, src, src, src, num2text(1000000.0, 7), user) + user << browse(dat, "window=canister;size=600x300") + return + +/obj/machinery/atmoalter/heater/Topic(href, href_list) + ..() + if (usr.stat || usr.restrained()) + return + if ((get_dist(src, usr) <= 1 && istype(src.loc, /turf))) + usr.machine = src + if (href_list["c"]) + var/c = text2num(href_list["c"]) + switch(c) + if(1.0) + src.c_status = 1 + if(2.0) + src.c_status = 2 + if(3.0) + src.c_status = 3 + else + else + if (href_list["t"]) + var/t = text2num(href_list["t"]) + if (src.t_status == 0) + return + switch(t) + if(1.0) + src.t_status = 1 + if(2.0) + src.t_status = 2 + if(3.0) + src.t_status = 3 + else + else + if (href_list["h"]) + var/h = text2num(href_list["h"]) + if (h == 1) + src.h_status = 1 + else + src.h_status = null + else + if (href_list["tp"]) + var/tp = text2num(href_list["tp"]) + src.t_per += tp + src.t_per = min(max(round(src.t_per), 0), 1000000.0) + else + if (href_list["cp"]) + var/cp = text2num(href_list["cp"]) + src.c_per += cp + src.c_per = min(max(round(src.c_per), 0), 1000000.0) + else + if (href_list["ht"]) + var/cp = text2num(href_list["ht"]) + src.h_tar += cp + src.h_tar = min(max(round(src.h_tar), 0), 500) + else + if (href_list["tank"]) + var/cp = text2num(href_list["tank"]) + if ((cp == 1 && src.holding)) + src.holding.loc = src.loc + src.holding = null + if (src.t_status == 2) + src.t_status = 3 + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(515) + src.add_fingerprint(usr) + else + usr << browse(null, "window=canister") + return + return + +/obj/machinery/atmoalter/heater/attackby(var/obj/W as obj, var/mob/user as mob) + + if (istype(W, /obj/item/weapon/tank)) + if (src.holding) + return + var/obj/item/weapon/tank/T = W + user.drop_item() + T.loc = src + src.holding = T + else + if (istype(W, /obj/item/weapon/wrench)) + var/obj/machinery/connector/con = locate(/obj/machinery/connector, src.loc) + + if (src.c_status) + src.anchored = 0 + src.c_status = 0 + user.show_message("\blue You have disconnected the heater.", 1) + if(con) + con.connected = null + else + if (con && !con.connected) + src.anchored = 1 + src.c_status = 3 + user.show_message("\blue You have connected the heater.", 1) + con.connected = src + else + user.show_message("\blue There is no connector here to attach the heater to.", 1) + return + + +/obj/machinery/atmoalter/canister/proc/update_icon() + + var/air_in = src.gas.tot_gas() + + src.overlays = 0 + + if (src.destroyed) + src.icon_state = text("[]-1", src.color) + + else + icon_state = "[color]" + if(holding) + overlays += image('canister.dmi', "can-oT") + + if (air_in < 10) + overlays += image('canister.dmi', "can-o0") + else if (air_in < (src.gas.maximum * 0.2)) + overlays += image('canister.dmi', "can-o1") + else if (air_in < (src.maximum * 0.6)) + overlays += image('canister.dmi', "can-o2") + else + overlays += image('canister.dmi', "can-o3") + return + +/obj/machinery/atmoalter/canister/proc/healthcheck() + + if (src.health <= 10) + var/T = src.loc + if (!( istype(T, /turf) )) + return + src.gas.turf_add(T, -1.0) + src.destroyed = 1 + src.density = 0 + update_icon() + if (src.holding) + src.holding.loc = src.loc + src.holding = null + if (src.t_status == 2) + src.t_status = 3 + return + +/obj/machinery/atmoalter/canister/process() + + if (src.destroyed) + return + var/T = src.loc + if (istype(T, /turf)) + if (locate(/obj/move, T)) + T = locate(/obj/move, T) + else + T = null + switch(src.t_status) + if(1.0) + if (src.holding) + var/t1 = src.gas.tot_gas() + var/t2 = t1 + var/t = src.t_per + if (src.t_per > t2) + t = t2 + src.holding.gas.transfer_from(src.gas, t) + else + if (T) + var/t1 = src.gas.tot_gas() + var/t2 = t1 + var/t = src.t_per + if (src.t_per > t2) + t = t2 + src.gas.turf_add(T, t) + src.update_icon() + if(2.0) + if (src.holding) + var/t1 = src.gas.tot_gas() + var/t2 = src.maximum - t1 + var/t = src.t_per + if (src.t_per > t2) + t = t2 + src.gas.transfer_from(src.holding.gas, t) + else + src.t_status = 3 + src.update_icon() + else + + +// new method does all transfers in connector ptick + +/* if(src.c_status == 1) // 1 = release + var/obj/machinery/connector/C = locate(/obj/machinery/connector, src.loc) + if (C && C.connected == src) + spawn( 0 ) + C.receive_gas(gas, c_per ) + return + src.update_icon() + else + src.c_status = 0 + else if(src.c_status == 2) // 2 = accept + var/obj/machinery/connector/C = locate(/obj/machinery/connector, src.loc) + if (C && C.connected == src) + spawn( 0 ) + C.send_gas(gas, c_per) // connector will send gas to canister + return + src.update_icon() +*/ + + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(450) + src.update_icon() + return + +/obj/machinery/atmoalter/canister/New() + + ..() + src.gas = new /obj/substance/gas( src ) + src.gas.maximum = src.maximum + return + +/obj/machinery/atmoalter/canister/get_gas() + return gas + + +/obj/machinery/atmoalter/canister/burn(fi_amount) + + src.health -= 1 + healthcheck() + return + +/obj/machinery/atmoalter/canister/blob_act() + + src.health -= 1 + healthcheck() + return + + +/obj/machinery/atmoalter/canister/meteorhit(var/obj/O as obj) + + src.health = 0 + healthcheck() + return + +/obj/machinery/atmoalter/canister/attack_paw(var/mob/user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/atmoalter/canister/attack_hand(var/mob/user as mob) + + if (src.destroyed) + return + user.machine = src + var/tt + switch(src.t_status) + if(1.0) + tt = text("Releasing Siphon (only tank) Stop", src, src) + if(2.0) + tt = text("Release Siphoning (only tank) Stop", src, src) + if(3.0) + tt = text("Release Siphon (only tank) Stopped", src, src) + else + var/ct = null + switch(src.c_status) + if(1.0) + ct = text("Releasing Accept Stop", src, src) + if(2.0) + ct = text("Release Accepting Stop", src, src) + if(3.0) + ct = text("Release Accept Stopped", src, src) + else + ct = "Disconnected" + + + var/dat = {"Canister Valves
    +Contains/Capacity [num2text(src.gas.tot_gas(), 20)] / [num2text(src.maximum, 20)]
    +Upper Valve Status: [tt]
    +\t[(src.holding ? "Tank ([src.holding.gas.tot_gas()])" : null)]
    +\tM - - - - [src.t_per] + + + + M
    +Pipe Valve Status: [ct]
    +\tM - - - - [src.c_per] + + + + M
    +
    +Close
    +
    "} + + + + /* + + var/dat = text({"Canister Valves
    +Contains/Capacity [] / []
    +Upper Valve Status: []
    +\t[]
    +\tM - - - - [] + + + + M
    +Pipe Valve Status: []
    +\tM - - - - [] + + + + M
    +
    +Close
    +
    "}, num2text(src.gas.tot_gas(), 20), num2text(src.maximum, 20), tt, (src.holding ? text("Tank ([])", src, src.holding.gas.tot_gas()) : null), src, num2text(1000000.0, 7), src, src, src, src, src.t_per, src, src, src, src, src, num2text(1000000.0, 7), ct, src, num2text(1000000.0, 7), src, src, src, src, src.c_per, src, src, src, src, src, num2text(1000000.0, 7), user) + +*/ + user << browse(dat, "window=canister;size=600x300") + return + +/obj/machinery/atmoalter/canister/Topic(href, href_list) + ..() + if (usr.stat || usr.restrained()) + return + if ((get_dist(src, usr) <= 1 && istype(src.loc, /turf))) + usr.machine = src + if (href_list["c"]) + var/c = text2num(href_list["c"]) + switch(c) + if(1.0) + src.c_status = 1 + if(2.0) + c_status = 2 + if(3.0) + src.c_status = 3 + else + if (href_list["t"]) + var/t = text2num(href_list["t"]) + if (src.t_status == 0) + return + switch(t) + if(1.0) + src.t_status = 1 + if(2.0) + if (src.holding) + src.t_status = 2 + else + src.t_status = 3 + if(3.0) + src.t_status = 3 + else + if (href_list["tp"]) + var/tp = text2num(href_list["tp"]) + src.t_per += tp + src.t_per = min(max(round(src.t_per), 0), 1000000.0) + else + if (href_list["cp"]) + var/cp = text2num(href_list["cp"]) + src.c_per += cp + src.c_per = min(max(round(src.c_per), 0), 1000000.0) + else + if (href_list["tank"]) + var/cp = text2num(href_list["tank"]) + if ((cp == 1 && src.holding)) + src.holding.loc = src.loc + src.holding = null + if (src.t_status == 2) + src.t_status = 3 + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(423) + src.add_fingerprint(usr) + update_icon() + else + usr << browse(null, "window=canister") + return + return + +/obj/machinery/atmoalter/canister/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) + + if ((istype(W, /obj/item/weapon/tank) && !( src.destroyed ))) + if (src.holding) + return + var/obj/item/weapon/tank/T = W + user.drop_item() + T.loc = src + src.holding = T + update_icon() + else + if ((istype(W, /obj/item/weapon/wrench))) + var/obj/machinery/connector/con = locate(/obj/machinery/connector, src.loc) + + + if (src.c_status) + src.anchored = 0 + src.c_status = 0 + user.show_message("\blue You have disconnected the canister.", 1) + if(con) + con.connected = null + else + if(con && !con.connected && !destroyed) + src.anchored = 1 + src.c_status = 3 + user.show_message("\blue You have connected the canister.", 1) + con.connected = src + else + user.show_message("\blue There is nothing here with which to connect the canister.", 1) + else + switch(W.damtype) + if("fire") + src.health -= W.force + if("brute") + src.health -= W.force * 0.5 + else + src.healthcheck() + ..() + return + +/obj/machinery/atmoalter/canister/las_act(flag) + + if (flag == "bullet") + src.health = 0 + spawn( 0 ) + healthcheck() + return + if (flag) + var/turf/T = src.loc + if (!( istype(T, /turf) )) + return + else + T.firelevel = T.poison + else + src.health = 0 + spawn( 0 ) + healthcheck() + return + return + +/obj/machinery/atmoalter/canister/poisoncanister/New() + + ..() + src.update_icon() + src.gas.plasma = 9.0E7*filled + return + +/obj/machinery/atmoalter/canister/oxygencanister/New() + + ..() + src.gas.oxygen = 1.0E8*filled + return + +/obj/machinery/atmoalter/canister/anesthcanister/New() + + ..() + src.gas.sl_gas = 1.0E8*filled + return + +/obj/machinery/atmoalter/canister/n2canister/New() + + ..() + src.gas.n2 = 1.0E8*filled + return + +/obj/machinery/atmoalter/canister/co2canister/New() + + ..() + src.gas.co2 = 1.0E8*filled + return + + +/obj/machinery/atmoalter/canister/aircanister/New() + + ..() + src.gas.oxygen = 2.1e7*filled + src.gas.n2 = 7.9e7*filled + return + diff --git a/main-src/Code/dna.dm b/main-src/Code/dna.dm new file mode 100644 index 0000000..5a18a99 --- /dev/null +++ b/main-src/Code/dna.dm @@ -0,0 +1,984 @@ + +/proc/scram(n) + + var/t = "" + var/p = null + p = 1 + while(p <= n) + t = text("[][]", t, rand(1, 9)) + p++ + return t + return + +/obj/machinery/computer/dna/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/computer/dna/attack_hand(mob/user as mob) + + if(stat & (NOPOWER|BROKEN) ) + return + + user.machine = src + if (istype(user, /mob/human)) + var/dat = text("Please Insert the cards into the slots
    \n\t\t\t\tFunction Disk: []
    \n\t\t\t\tTarget Disk: []
    \n\t\t\t\tAux. Data Disk: []
    \n\t\t\t\t\t(Not always used!)
    \n\t\t\t\t[]", src, (src.scan ? text("[]", src.scan.name) : "----------"), src, (src.modify ? text("[]", src.modify.name) : "----------"), src, (src.modify2 ? text("[]", src.modify2.name) : "----------"), (src.scan ? text("Execute Function", src) : "No function disk inserted!")) + if (src.temp) + dat = text("[]

    Clear Message", src.temp, src) + user << browse(dat, "window=dna_comp") + else + var/dat = text("[]
    \n\t\t\t\t[] []
    \n\t\t\t\t[] []
    \n\t\t\t\t[] []
    \n\t\t\t\t\t(Not always used!)
    \n\t\t\t\t[]", stars("Please Insert the cards into the slots"), stars("Function Disk:"), src, (src.scan ? text("[]", src.scan.name) : "----------"), stars("Target Disk:"), src, (src.modify ? text("[]", src.modify.name) : "----------"), stars("Aux. Data Disk:"), src, (src.modify2 ? text("[]", src.modify2.name) : "----------"), (src.scan ? text("[]", src, stars("Execute Function")) : stars("No function disk inserted!"))) + if (src.temp) + dat = text("[]

    []", stars(src.temp), src, stars("Clear Message")) + user << browse(dat, "window=dna_comp") + return + +/obj/machinery/computer/dna/Topic(href, href_list) + ..() + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + usr << "\red You don't have the dexterity to do this!" + return + if ((usr.stat || usr.restrained())) + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["modify"]) + if (src.modify) + src.modify.loc = src.loc + src.modify = null + src.mode = null + else + var/obj/item/I = usr.equipped() + if (istype(I, /obj/item/weapon/card/data)) + usr.drop_item() + I.loc = src + src.modify = I + src.mode = null + if (href_list["modify2"]) + if (src.modify2) + src.modify2.loc = src.loc + src.modify2 = null + src.mode = null + else + var/obj/item/I = usr.equipped() + if (istype(I, /obj/item/weapon/card/data)) + usr.drop_item() + I.loc = src + src.modify2 = I + src.mode = null + if (href_list["scan"]) + if (src.scan) + src.scan.loc = src.loc + src.scan = null + src.mode = null + else + var/obj/item/I = usr.equipped() + if (istype(I, /obj/item/weapon/card/data)) + usr.drop_item() + I.loc = src + src.scan = I + src.mode = null + if (href_list["clear"]) + src.temp = null + if (href_list["execute"]) + if ((src.scan && src.scan.function)) + switch(src.scan.function) + if("data_mutate") + if (src.modify) + if (!( findtext(src.scan.data, "-", 1, null) )) + if ((src.modify.data && src.scan.data && length(src.modify.data) >= length(src.scan.data))) + src.modify.data = text("[][]", src.scan.data, (length(src.modify.data) > length(src.scan.data) ? copytext(src.modify.data, length(src.scan.data) + 1, length(src.modify.data) + 1) : null)) + else + src.temp = "Disk Failure: Cannot examine data! (Null or wrong format)" + else + var/d = findtext(src.modify.data, "-", 1, null) + var/t = copytext(src.modify.data, d + 1, length(src.modify.data) + 1) + d = text2num(copytext(1, d, null)) + if ((d && t && src.modify.data && src.scan.data && length(src.modify.data) >= (length(t) + d - 1) )) + src.modify.data = text("[][][]", copytext(src.modify.data, 1, d), t, (length(src.modify.data) > length(t) + d ? copytext(src.modify.data, length(t) + d, length(src.modify.data) + 1) : null)) + else + src.temp = "Disk Failure: Cannot examine data! (Null or wrong format)" + else + src.temp = "Disk Failure: Cannot read target disk!" + if("dna_seq") + src.temp = "DNA Systems Help:\nHuman DNA sequences: (Compressed in *.dna format version 10.76)\n\tSpecies Identification Marker: (28 chromosomes)\n\t\t5BDFE293BA5500F9FFFD500AAFFE\n\tStructural Enzymes:\n\t\tCDE375C9A6C25A7DBDA50EC05AC6CEB63\n\t\tNote: The first id set is used for DNA clean up operations.\n\tUsed Enzymes:\n\t\t493DB249EB6D13236100A37000800AB71\n\tSpecies/Genus Classification: Homo Sapien\n\nMonkey DNA sequences: (Compressed in *.dna format version 10.76)\n\tSpecies Identification Marker: (16 chromosomes)\n\t\t2B6696D2B127E5A4\n\tStructural Enzymes:\n\t\tCDEAF5B90AADBC6BA8033DB0A7FD613FA\n\t\tNote: The first id set is used for DNA clean up operations.\n\tUsed Enzymes:\n\t\tC8FFFE7EC09D80AEDEDB9A5A0B4085B61\n\tSpecies/Genus Classification: Generic Monkey\n>" + if("dna_help") + src.temp = "DNA Systems Help:\nThe DNA systems consists 3 systems.\nI. DNA Scanner/Implanter - This system is slightly advanced to use. It accepts\n\t1 disk. Before you wish to run a function/program you must implant the\n\tdisk data into the temporary memory. Note that once this is done the disk can\n\tbe removed to place a data disk in.\nII. DNA computer - This is a simple yet fast computer that basically operates on data.\nIII. Restructurer - This device reorganizes the anatomical structure of the subject\n\taccording to the DNA sequences. Please note that it is illegal to perform a\n\ttransfer from one species to or from the Homo sapiens species but\n\thuman to human is acceptable under UNSD guidlines.\n\tNote: This machine is programmed to operate on specific preprogrammed species with\n\tspecialized anatomical blueprints hard coded into its databanks. It cannot operate\n\ton other species. (Current: Human, Monkey)\n\nData Disks:\n\tThese run on 2 (or 3) types: DNA scanner program disks and data modification\nfunctions (and disk modification functions)\n\nDisk-Copy\n\tThis erases the target disk and completely copies the data from the aux. disk.\nDisk-Erase\n\tThis erases everything on the target disk.\nData-Clear\n\tThis erases (clears) only the data.\n\nData-Trunicate\n\tThis removes data from the target disk (parameters gathered from data slot on target\n\tdisk). This fuction has 4 modes (a,b,c,default) defined by this way. (mode id)(#)\n\ta - This cuts # data from the end. (ex a1 on ABCD = ABC)\n\tb - This cuts # data from the beginning. (ex b1 on ABCD = BCD)\n\tc - This limits the data from the end. (ex c1 on ABCD = A)\n\tdefault - This limits the data from the end. (ex 1 on ABCD = D)\nData-Add\n\tThis adds thedata on the aux. disk to the data on the target disk.\nData-Sramble\n\tThis scrambles the data on the target disk. The length is equal to\n\tthe length of the original data.\nData-Input\n\tThis lets you input data into the data slot of any data disk.\n\tNote: This doesn't work only on storage.\nData-Mutate\n\tThis basically inserts text. You follow this format:\n\tpos-text (or just text for automatic pos 1)\n\tie 2-IVE on FOUR yields FIVE\n" + if("data_add") + if (src.modify) + if (src.modify2) + if ((src.modify.data && src.modify2.data)) + src.modify.data += src.modify2 + src.temp = text("Done!
    New Data:
    []", src.modify.data) + else + src.temp = "Cannot read data! (may be null)" + else + src.temp = "Disk Failure: Cannot read aux. data disk!" + else + src.temp = "Disk Failure: Cannot read target disk!" + if("data_scramble") + if (src.modify) + if (length(text("[]", src.modify.data)) >= 1) + src.modify.data = scram(length(text("[]", src.modify.data))) + src.temp = text("Data scrambled: []", src.modify.data) + else + src.temp = "No data to scramble" + else + src.temp = "Disk Failure: Cannot read target disk!" + if("data_input") + if (src.modify) + var/dat = input(usr, ">", text("[]", src.name), null) as text + var/s = src.scan + var/m = src.modify + if ((usr.stat || usr.restrained() || src.modify != m || src.scan != s)) + return + if ((get_dist(src, usr) <= 1 && istype(src.loc, /turf))) + src.modify.data = dat + else + src.temp = "Disk Failure: Cannot read target disk!" + if("disk_copy") + if (src.modify) + if (src.modify2) + src.modify.function = src.modify2.function + src.modify.data = src.modify2.data + src.modify.special = src.modify2.special + src.temp = "All disk data/programs copied." + else + src.temp = "Disk Failure: Cannot read aux. data disk!" + else + src.temp = "Disk Failure: Cannot read target disk!" + if("disk_dis") + if (src.modify) + src.temp = text("Function: [][]
    Data: []", src.modify.function, (src.modify.special ? text("-[]", src.modify.special) : null), src.modify.data) + else + src.temp = "Disk Failure: Cannot read target disk!" + if("disk_erase") + if (src.modify) + src.modify.data = null + src.modify.function = "storage" + src.modify.special = null + src.temp = "All Disk contents deleted." + else + src.temp = "Disk Failure: Cannot read target disk!" + if("data_clear") + if (src.modify) + src.modify.data = null + src.temp = "Disk data cleared." + else + src.temp = "Disk Failure: Cannot read target disk!" + if("data_trun") + if (src.modify) + if ((src.modify.data && src.scan.data)) + var/l1 = length(src.modify.data) + var/l2 = max(round(text2num(src.scan.data)), 1) + switch(copytext(src.modify.data, 1, 2)) + if("a") + if (l1 > l2) + src.modify.data = copytext(src.modify.data, 1, (l1 - l2) + 1) + else + src.modify.data = "" + src.temp = text("Done!
    New Data:
    []", src.modify.data) + if("b") + if (l1 > l2) + src.modify.data = copytext(src.modify.data, l2, l1 + 1) + else + src.modify.data = "" + src.temp = text("Done!
    New Data:
    []", src.modify.data) + if("c") + if (l1 >= l2) + src.modify.data = copytext(src.modify.data, l1 - l2, l1 + 1) + src.temp = text("Done!
    New Data:
    []", src.modify.data) + else + if (l1 >= l2) + src.modify.data = copytext(src.modify.data, 1, l2 + 1) + src.temp = text("Done!
    New Data:
    []", src.modify.data) + else + src.temp = "Cannot read data! (may be null and note that function data slot is used instead of aux disk!!)" + else + src.temp = "Disk Failure: Cannot read target disk!" + else + else + src.temp = "System Failure: Cannot read disk function!" + src.add_fingerprint(usr) + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(1764) + return + +/obj/machinery/computer/dna/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + //SN src = null + del(src) + return + else + return + +/obj/machinery/dna_scanner/allow_drop() + + return 0 + return + +/obj/machinery/dna_scanner/relaymove(mob/user as mob) + + if (user.stat) + return + src.go_out() + return + +/obj/machinery/dna_scanner/verb/eject() + set src in oview(1) + + if (usr.stat != 0) + return + src.go_out() + add_fingerprint(usr) + return + +/obj/machinery/dna_scanner/verb/move_inside() + set src in oview(1) + + if (usr.stat != 0) + return + if (src.occupant) + usr << "\blue The scanner is already occupied!" + return + if (usr.abiotic()) + usr << "\blue Subject cannot have abiotic items on." + return + usr.pulling = null + usr.client.perspective = EYE_PERSPECTIVE + usr.client.eye = src + usr.loc = src + src.occupant = usr + src.icon_state = "scanner_1" + for(var/obj/O in src) + //O = null + del(O) + //Foreach goto(124) + src.add_fingerprint(usr) + return + +/obj/machinery/dna_scanner/attackby(obj/item/weapon/grab/G as obj, user as mob) + + if ((!( istype(G, /obj/item/weapon/grab) ) || !( ismob(G.affecting) ))) + return + if (src.occupant) + user << "\blue The scanner is already occupied!" + return + if (G.affecting.abiotic()) + user << "\blue Subject cannot have abiotic items on." + return + var/mob/M = G.affecting + if (M.client) + M.client.perspective = EYE_PERSPECTIVE + M.client.eye = src + M.loc = src + src.occupant = M + src.icon_state = "scanner_1" + for(var/obj/O in src) + O.loc = src.loc + //Foreach goto(154) + src.add_fingerprint(user) + //G = null + del(G) + return + +/obj/machinery/dna_scanner/proc/go_out() + + if ((!( src.occupant ) || src.locked)) + return + for(var/obj/O in src) + O.loc = src.loc + //Foreach goto(30) + if (src.occupant.client) + src.occupant.client.eye = src.occupant.client.mob + src.occupant.client.perspective = MOB_PERSPECTIVE + src.occupant.loc = src.loc + src.occupant = null + src.icon_state = "scanner_0" + return + +/obj/machinery/dna_scanner/ex_act(severity) + + switch(severity) + if(1.0) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(35) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(108) + //SN src = null + del(src) + return + if(3.0) + if (prob(25)) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(181) + //SN src = null + del(src) + return + else + return + + +/obj/machinery/dna_scanner/blob_act() + + if(prob(50)) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + del(src) + +/obj/machinery/scan_console/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + //SN src = null + del(src) + return + else + return + +/obj/machinery/scan_console/blob_act() + + if(prob(50)) + del(src) + +/obj/machinery/scan_console/power_change() + if(stat & BROKEN) + icon_state = "broken" + else + if( powered() ) + icon_state = initial(icon_state) + stat &= ~NOPOWER + else + spawn(rand(0, 15)) + src.icon_state = "c_unpowered" + stat |= NOPOWER + +/obj/machinery/scan_console/New() + + ..() + spawn( 5 ) + src.connected = locate(/obj/machinery/dna_scanner, get_step(src, WEST)) + return + return + +/obj/machinery/scan_console/process() + + if(stat & NOPOWER) + return + use_power(250) + + var/mob/M + if (!( src.status )) + return + if (!( src.func )) + src.temp = "No function loaded into memory core!" + src.status = null + if ((src.connected && src.connected.occupant)) + M = src.connected.occupant + if (src.status == "load") + src.prog_p1 = null + src.prog_p2 = null + src.prog_p3 = null + src.prog_p4 = null + switch(src.func) + if("dna_trun") + if (src.data) + src.prog_p1 = copytext(src.data, 1, 2) + src.prog_p2 = text2num(src.data) + src.prog_p3 = src.special + src.status = "dna_trun" + src.temp = "Executing trunication function on occupant." + else + src.temp = "No data implanted in core memory." + src.status = null + if("dna_scan") + if (src.special) + if (src.scan) + if (istype(M, /mob)) + switch(src.special) + if("UI") + src.temp = text("Scan Complete:
    Data downloaded to disk!
    Unique Identifier: []", M.primary.uni_identity) + src.scan.data = M.primary.uni_identity + if("SE") + src.temp = text("Scan Complete:
    Data downloaded to disk!
    Structural Enzymes: []", M.primary.struc_enzyme) + src.scan.data = M.primary.struc_enzyme + if("UE") + src.temp = text("Scan Complete:
    Data downloaded to disk!
    Used Enzynmes: []", M.primary.use_enzyme) + src.scan.data = M.primary.use_enzyme + if("SI") + src.temp = text("Scan Complete:
    Data downloaded to disk!
    Species Identifier: []", M.primary.spec_identity) + src.scan.data = M.primary.spec_identity + else + else + src.temp = "No occupant to scan!" + else + src.temp = "Error: No disk to upload data to." + else + src.temp = "Error: Function program errors." + src.status = null + if("dna_replace") + if ((src.data && src.special)) + src.prog_p1 = src.special + src.prog_p2 = src.data + src.status = "dna_replace" + src.temp = "Executing repalcement function on occupant." + else + src.temp = "Error: No DNA data loaded into core or function program errors." + src.status = null + if("dna_add") + if ((src.data && src.special)) + src.prog_p1 = src.special + src.prog_p2 = src.data + src.status = "dna_add" + src.temp = "Executing addition function on occupant." + else + src.temp = "Error: No DNA data loaded into core or function program errors." + src.status = null + else + src.temp = "Cannot execute program!" + src.status = null + else + if (src.status == "dna_trun") + if (istype(M, /mob)) + var/t = null + switch(src.prog_p3) + if("UI") + t = M.primary.uni_identity + if("SE") + t = M.primary.struc_enzyme + if("UE") + t = M.primary.use_enzyme + if("SI") + t = M.primary.spec_identity + else + if (!( src.prog_p4 )) + switch(src.prog_p1) + if("a") + src.prog_p4 = length(t) + if("b") + src.prog_p4 = 1 + else + else + if (src.prog_p1 == "a") + src.prog_p4-- + else + if (src.prog_p1 == "b") + src.prog_p4-- + switch(src.prog_p1) + if("a") + if (src.prog_p4 <= 0) + src.temp = "Trunication complete" + src.status = null + else + t = copytext(t, 1, length(t)) + src.temp = text("Trunicating []'s DNA sequence...
    []
    Status: [] units left.

    Emergency Abort", M.name, t, src.prog_p4, src) + if("b") + if (src.prog_p4 <= 0) + src.temp = "Trunication complete" + src.status = null + else + t = copytext(t, 2, length(t) + 1) + src.temp = text("Trunicating []'s DNA sequence...
    []
    Status: [] units left.

    Emergency Abort", M.name, t, src.prog_p4, src) + if("c") + if (length(t) <= src.prog_p2) + src.temp = "Limitation complete" + src.status = null + else + t = copytext(t, 1, length(t)) + src.temp = text("Limiting []'s DNA sequence...
    []
    Status: [] units converting to [] units.

    Emergency Abort", M.name, t, length(t), src.prog_p2, src) + else + if (length(t) <= src.prog_p2) + src.temp = "Limitation complete" + src.status = null + else + t = copytext(t, 2, length(t) + 1) + src.temp = text("Limiting []'s DNA sequence...
    []
    Status: [] units converting to [] units.

    Emergency Abort", M.name, t, length(t), src.prog_p2, src) + switch(src.prog_p3) + if("UI") + M.primary.uni_identity = t + if("SE") + M.primary.struc_enzyme = t + if("UE") + M.primary.use_enzyme = t + if("SI") + M.primary.spec_identity = t + else + else + src.temp = "Process terminated due to lack of occupant in DNA chamber." + src.status = null + else + if (src.status == "dna_replace") + if (istype(M, /mob)) + var/t = null + switch(src.prog_p1) + if("UI") + t = M.primary.uni_identity + if("SE") + t = M.primary.struc_enzyme + if("UE") + t = M.primary.use_enzyme + if("SI") + t = M.primary.spec_identity + else + if (!( src.prog_p4 )) + src.prog_p4 = 1 + else + src.prog_p4++ + if ((src.prog_p4 > length(t) || src.prog_p4 > length(src.prog_p2))) + src.temp = "Replacement complete" + src.status = null + else + t = text("[][][]", copytext(t, 1, src.prog_p4), copytext(src.prog_p2, src.prog_p4, src.prog_p4 + 1), (src.prog_p4 < length(t) ? copytext(t, src.prog_p4 + 1, length(t) + 1) : null)) + src.temp = text("Replacing []'s DNA sequence...
    []
    Target: []
    Status: At position []

    Emergency Abort", M.name, t, src.prog_p2, src.prog_p4, src) + switch(src.prog_p1) + if("UI") + M.primary.uni_identity = t + if("SE") + M.primary.struc_enzyme = t + if("UE") + M.primary.use_enzyme = t + if("SI") + M.primary.spec_identity = t + else + else + src.temp = "Process terminated due to lack of occupant in DNA chamber." + src.status = null + else + if (src.status == "dna_add") + if (istype(M, /mob)) + var/t = null + switch(src.prog_p1) + if("UI") + t = M.primary.uni_identity + if("SE") + t = M.primary.struc_enzyme + if("UE") + t = M.primary.use_enzyme + if("SI") + t = M.primary.spec_identity + else + if (!( src.prog_p4 )) + src.prog_p4 = 1 + else + src.prog_p4++ + if (src.prog_p4 > length(src.prog_p2)) + src.temp = "Addition complete" + src.status = null + else + t = text("[][]", t, copytext(src.prog_p2, src.prog_p4, src.prog_p4 + 1)) + src.temp = text("Adding to []'s DNA sequence...
    []
    Adding: []
    Position: []

    Emergency Abort", M.name, t, src.prog_p2, src.prog_p4, src) + switch(src.prog_p1) + if("UI") + M.primary.uni_identity = t + if("SE") + M.primary.struc_enzyme = t + if("UE") + M.primary.use_enzyme = t + if("SI") + M.primary.spec_identity = t + else + else + src.temp = "Process terminated due to lack of occupant in DNA chamber." + src.status = null + else + src.status = null + src.temp = "Unknown system error." + for(var/mob/O in viewers(1, src)) + if ((O.client && O.machine == src)) + src.attack_hand(O) + //Foreach goto(1755) + return + +/obj/machinery/scan_console/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/scan_console/attack_hand(user as mob) + + if(stat & (NOPOWER|BROKEN) ) + return + + var/dat + if (src.temp) + dat = text("[]

    Clear Message", src.temp, src) + else + if (src.connected) + var/mob/occupant = src.connected.occupant + dat = "Occupant Statistics:
    " + if (occupant) + var/t1 + switch(occupant.stat) + if(0.0) + t1 = "Conscious" + if(1.0) + t1 = "Unconscious" + else + t1 = "*dead*" + dat += text("[]\tHealth %: [] ([])


    ", (occupant.health > 50 ? "" : ""), occupant.health, t1) + else + dat += "The scanner is empty.
    " + if (!( src.connected.locked )) + dat += text("Lock (Unlocked)
    ", src) + else + dat += text("Unlock (Locked)
    ", src) + dat += text("Disk: []
    \n[]
    \n[]
    ", src, + (src.scan ? text("[]", src.scan.name) : "----------"), + (src.scan ? text("Upload Data", src) : "No disk to upload"), + ((src.data || src.func || src.special) ? text("Clear Data
    Execute Data
    Function Type: [][]
    Data: []", src, src, src.func, (src.special ? text("-[]", src.special) : null), src.data) : "No data uploaded")) + dat += text("

    Close", user) + user << browse(dat, "window=scanner;size=400x500") + return + +/obj/machinery/scan_console/Topic(href, href_list) + ..() + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + usr << "\red You don't have the dexterity to do this!" + return + if ((usr.stat || usr.restrained())) + return + if ((usr.contents.Find(src) || get_dist(src, usr) <= 1 && istype(src.loc, /turf))) + usr.machine = src + if (href_list["locked"]) + if ((src.connected && src.connected.occupant)) + src.connected.locked = !( src.connected.locked ) + if (href_list["scan"]) + if (src.scan) + src.scan.loc = src.loc + src.scan = null + else + var/obj/item/I = usr.equipped() + if (istype(I, /obj/item/weapon/card/data)) + usr.drop_item() + I.loc = src + src.scan = I + if (href_list["u_dat"]) + if ((src.scan && !( src.status ))) + if ((src.scan.function && src.scan.function != "storage")) + src.func = src.scan.function + src.special = src.scan.special + if (src.scan.data) + src.data = src.scan.data + else + src.temp = "No disk found or core data access lock out!" + if (href_list["c_dat"]) + if (!( src.status )) + src.func = null + src.data = null + src.special = null + else + src.temp = "No disk found or core data access lock out!" + if (href_list["clear"]) + src.temp = null + if (href_list["abort"]) + src.status = null + if (href_list["e_dat"]) + if (!( src.status )) + src.status = "load" + src.temp = "Loading..." + src.add_fingerprint(usr) + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(484) + return + +/obj/machinery/restruct/allow_drop() + + return 0 + return + +/obj/machinery/restruct/verb/eject() + set src in oview(1) + + if (usr.stat != 0) + return + src.go_out() + add_fingerprint(usr) + return + +/obj/machinery/restruct/verb/operate() + set src in oview(1) + + src.add_fingerprint(usr) + if ((src.occupant && src.occupant.primary)) + switch(src.occupant.primary.spec_identity) + if("5BDFE293BA5500F9FFFD500AAFFE") + if (!( istype(src.occupant, /mob/human) )) + for(var/obj/O in src.occupant) + //O = null + del(O) + //Foreach goto(78) + var/mob/human/O = new /mob/human( src ) + var/mob/M = src.occupant + O.start = 1 + O.primary = M.primary + M.primary = null + var/t1 = hex2num(copytext(O.primary.uni_identity, 25, 28)) + if (t1 < 125) + O.gender = "male" + else + O.gender = "female" + M << "Genetic Transversal Complete!" + if (M.client) + M << "Transferring..." + M.client.mob = O + O << "Neural Sequencing Complete!" + O.loc = src + src.occupant = O + //M = null + del(M) + src.occupant = O + src.occupant << "Done!" + if("2B6696D2B127E5A4") + if (!( istype(src.occupant, /mob/monkey) )) + for(var/obj/O in src.occupant) + //O = null + del(O) + //Foreach goto(337) + var/mob/monkey/O = new /mob/monkey( src ) + var/mob/M = src.occupant + O.start = 1 + O.primary = M.primary + M.primary = null + M << "Genetic Transversal Complete!" + if (M.client) + M << "Transferring..." + M.client.mob = O + O << "Neural Sequencing Complete!" + O.loc = src + O << "Genetic Transversal Complete!" + src.occupant = O + //M = null + del(M) + O.name = text("monkey ([])", copytext(md5(src.occupant.primary.uni_identity), 2, 6)) + src.occupant << "Done!" + else + if (istype(src.occupant, /mob/human)) + var/mob/human/H = src.occupant + if (reg_dna[text("[]", H.primary.uni_identity)]) + H.rname = reg_dna[text("[]", H.primary.uni_identity)] + else + if (findname("Unknown")) + var/counter = 1 + while(findname(text("Unknown #[]", counter))) + counter++ + H.rname = text("Unknown #[]", counter) + else + H.rname = "Unknown" + reg_dna[text("[]", H.primary.uni_identity)] = H.rname + H << text("\red Your name is now [].", H.rname) + var/speak = (length(H.primary.struc_enzyme) >= 25 ? hex2num(copytext(H.primary.struc_enzyme, 22, 25)) : 9999) + var/ears = (length(H.primary.struc_enzyme) >= 10 ? hex2num(copytext(H.primary.struc_enzyme, 7, 10)) : 9999) + var/vision = (length(H.primary.struc_enzyme) >= 16 ? hex2num(copytext(H.primary.struc_enzyme, 13, 16)) : 1) + var/mental1 = (length(H.primary.struc_enzyme) >= 31 ? hex2num(copytext(H.primary.struc_enzyme, 28, 31)) : 1) + var/mental2 = (length(H.primary.struc_enzyme) >= 28 ? hex2num(copytext(H.primary.struc_enzyme, 25, 28)) : 1) + var/speak2 = (length(H.primary.struc_enzyme) >= 22 ? hex2num(copytext(H.primary.struc_enzyme, 19, 22)) : 1) + H.sdisabilities = 0 + H.disabilities = 0 + if (speak < 3776) + H.disabilities = H.disabilities | 4 + else + if (speak > 3776) + H.sdisabilities = H.sdisabilities | 2 + if (speak2 < 2640) + H.disabilities = H.disabilities | 16 + if (ears > 3226) + H.sdisabilities = H.sdisabilities | 4 + if (vision < 1447) + H.sdisabilities = H.sdisabilities | 1 + else + if (vision > 1447) + H.disabilities = H.disabilities | 1 + if (mental1 < 1742) + H.disabilities = H.disabilities | 2 + if (mental2 < 1452) + H.disabilities = H.disabilities | 8 + var/t1 = null + if (length(H.primary.uni_identity) >= 20) + t1 = copytext(H.primary.uni_identity, 19, 21) + if (hex2num(t1) > 127) + H.gender = "female" + else + H.gender = "male" + else + H.gender = "neuter" + if (length(H.primary.uni_identity) >= 18) + t1 = copytext(H.primary.uni_identity, 17, 19) + H.ns_tone = hex2num(t1) + H.ns_tone = -H.ns_tone + 35 + else + H.ns_tone = 1 + H.ns_tone = -H.ns_tone + 35 + if (length(H.primary.uni_identity) >= 16) + t1 = copytext(H.primary.uni_identity, 15, 17) + H.b_eyes = hex2num(t1) + else + H.b_eyes = 255 + if (length(H.primary.uni_identity) >= 14) + t1 = copytext(H.primary.uni_identity, 13, 15) + H.g_eyes = hex2num(t1) + else + H.g_eyes = 255 + if (length(H.primary.uni_identity) >= 12) + t1 = copytext(H.primary.uni_identity, 11, 13) + H.r_eyes = hex2num(t1) + else + H.r_eyes = 255 + if (length(H.primary.uni_identity) >= 10) + t1 = copytext(H.primary.uni_identity, 9, 11) + H.nb_hair = hex2num(t1) + else + H.nb_hair = 255 + if (length(H.primary.uni_identity) >= 8) + t1 = copytext(H.primary.uni_identity, 7, 9) + H.ng_hair = hex2num(t1) + else + H.ng_hair = 255 + if (length(H.primary.uni_identity) >= 6) + t1 = copytext(H.primary.uni_identity, 5, 7) + H.nr_hair = hex2num(t1) + else + H.nr_hair = 255 + H.r_hair = H.nr_hair + H.g_hair = H.ng_hair + H.b_hair = H.nb_hair + H.s_tone = H.ns_tone + H.update_face() + H.update_body() + return + +/obj/machinery/restruct/verb/move_inside() + set src in oview(1) + + if (usr.stat != 0) + return + if (src.occupant) + usr << "\blue The scanner is already occupied!" + return + if (usr.abiotic()) + usr << "\blue Subject cannot have abiotic items on." + return + usr.pulling = null + usr.client.perspective = EYE_PERSPECTIVE + usr.client.eye = src + usr.loc = src + src.occupant = usr + src.icon_state = "restruct_1" + for(var/obj/O in src) + //O = null + del(O) + //Foreach goto(124) + src.add_fingerprint(usr) + return + +/obj/machinery/restruct/relaymove(mob/user as mob) + + if (user.stat) + return + src.go_out() + return + +/obj/machinery/restruct/attackby(obj/item/weapon/grab/G as obj, user as mob) + + if ((!( istype(G, /obj/item/weapon/grab) ) || !( ismob(G.affecting) ))) + return + if (src.occupant) + user << "\blue The machine is already occupied!" + return + if (G.affecting.abiotic()) + user << "\blue Subject cannot have abiotic items on." + return + var/mob/M = G.affecting + if (M.client) + M.client.perspective = EYE_PERSPECTIVE + M.client.eye = src + M.loc = src + src.occupant = M + src.icon_state = "restruct_1" + for(var/obj/O in src) + O.loc = src.loc + //Foreach goto(154) + src.add_fingerprint(user) + //G = null + del(G) + return + +/obj/machinery/restruct/proc/go_out() + + if ((!( src.occupant ) || src.locked)) + return + for(var/obj/O in src) + O.loc = src.loc + //Foreach goto(30) + if (src.occupant.client) + src.occupant.client.eye = src.occupant.client.mob + src.occupant.client.perspective = MOB_PERSPECTIVE + src.occupant.loc = src.loc + src.occupant = null + src.icon_state = "restruct_0" + return + +/obj/machinery/restruct/ex_act(severity) + + switch(severity) + if(1.0) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(35) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(108) + //SN src = null + del(src) + return + if(3.0) + if (prob(25)) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + ex_act(severity) + //Foreach goto(181) + //SN src = null + del(src) + return + else + return + +/obj/machinery/restruct/blob_act() + + if(prob(50)) + for(var/atom/movable/A as mob|obj in src) + A.loc = src.loc + del(src) diff --git a/main-src/Code/engine.dm b/main-src/Code/engine.dm new file mode 100644 index 0000000..4f64314 --- /dev/null +++ b/main-src/Code/engine.dm @@ -0,0 +1,363 @@ +#define ENGINE_EJECT_Z 6 + +/obj/machinery/computer/engine/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(58) + src.icon_state = "broken" + if(3.0) + if (prob(25)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(109) + src.icon_state = "broken" + else + return + +/obj/machinery/computer/engine/New() + + if (!( engine_eject_control )) + engine_eject_control = new /datum/engine_eject( ) + ..() + + spawn(5) + for(var/obj/machinery/gas_sensor/G in machines) + if(G.id == src.id) + gs = G + break + return + +/obj/machinery/computer/engine/attackby(var/obj/O, mob/user) + return src.attack_hand(user) + +/obj/machinery/computer/engine/attack_paw(var/mob/user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/computer/engine/attack_hand(var/mob/user as mob) + + if(stat & (NOPOWER|BROKEN) ) + return + + user.machine = src + var/dat + if (src.temp) + dat = "[src.temp]

    Clear Screen" + else + if (engine_eject_control.status == 0) + + dat = "Engine Gas Monitor
    " + if(gs) + dat += "[gs.sense_string()]" + + else + dat += "No sensor found." + + + dat += "
    Engine Ejection Module
    \nStatus: Docked
    \n
    \nCountdown: [engine_eject_control.timeleft]/60 \[Reset\]
    \n
    \nEject Engine
    \n
    \nClose" + else + if (engine_eject_control.status == 1) + dat = text("Engine Ejection Module
    \nStatus: Ejecting
    \n
    \nCountdown: []/60 \[Reset\]
    \n
    \nStop Ejection
    \n
    \nClose", engine_eject_control.timeleft, src, user) + else + dat = text("Engine Ejection Module
    \nStatus: Ejected
    \n
    \nCountdown: N/60 \[Reset\]
    \n
    \nEngine Ejected!
    \n
    \nClose", user) + user << browse(dat, "window=computer;size=400x500") + return + +/obj/machinery/computer/engine/process() + + if(stat & (NOPOWER|BROKEN) ) + return + use_power(250) + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(18) + return + +/obj/machinery/computer/engine/Topic(href, href_list) + ..() + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + usr << "\red You don't have the dexterity to do this!" + return + if ((usr.stat || usr.restrained())) + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + + if (href_list["eject"]) + if (engine_eject_control.status == 0) + src.temp = "Eject Engine?

    \[Swipe ID to initiate eject sequence\]
    Cancel" + + else if (href_list["eject2"]) + var/obj/item/weapon/card/id/I = usr.equipped() + if (istype(I)) + if(I.check_access(access,allowed)) + if (engine_eject_control.status == 0) + engine_eject_control.ejectstart() + src.temp = null + else + usr << "\red Access Denied." + else if (href_list["stop"]) + if (engine_eject_control.status > 0) + src.temp = text("Stop Ejection?

    Yes
    No", src, src) + + else if (href_list["stop2"]) + if (engine_eject_control.status > 0) + engine_eject_control.stopcount() + src.temp = null + + else if (href_list["reset"]) + if (engine_eject_control.status == 0) + engine_eject_control.resetcount() + + else if (href_list["temp"]) + src.temp = null + + src.add_fingerprint(usr) + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(351) + return + + + + +/turf/station/engine/attack_paw(var/mob/user as mob) + + return src.attack_hand(user) + +/turf/station/engine/attack_hand(var/mob/user as mob) + + if ((!( user.canmove ) || user.restrained() || !( user.pulling ))) + return + if (user.pulling.anchored) + return + if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1)) + return + if (ismob(user.pulling)) + var/mob/M = user.pulling + var/mob/t = M.pulling + M.pulling = null + step(user.pulling, get_dir(user.pulling.loc, src)) + M.pulling = t + else + step(user.pulling, get_dir(user.pulling.loc, src)) + return + +/turf/station/engine/floor/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + var/turf/space/S = new /turf/space( locate(src.x, src.y, src.z) ) + S.buildlinks() + del(src) + return + if(2.0) + if (prob(50)) + //SN src = null + var/turf/space/S = new /turf/space( locate(src.x, src.y, src.z) ) + S.buildlinks() + + del(src) + return + else + return + +/turf/station/engine/floor/blob_act() + return + +/datum/engine_eject/proc/ejectstart() + + if (!( src.status )) + if (src.timeleft <= 0) + src.timeleft = 60 + world << "\red Alert: Ejection Sequence for Engine Module has been engaged." + world << text("\red Ejection Time in T-[] seconds!", src.timeleft) + src.resetting = 0 + + var/list/EA = engine_areas() + + for(var/area/A in EA) + A.eject = 1 + A.updateicon() + + src.status = 1 + for(var/obj/machinery/computer/engine/E in machines) + E.icon_state = "engaging" + //Foreach goto(113) + spawn( 0 ) + src.countdown() + return + return + +/datum/engine_eject/proc/resetcount() + + if (!( src.status )) + src.resetting = 1 + sleep(50) + if (src.resetting) + src.timeleft = 60 + world << "\red Alert: Ejection Sequence Countdown for Engine Module has been reset." + return + +/datum/engine_eject/proc/countdone() + + src.status = -1.0 + + var/list/E = engine_areas() + + var/list/engineturfs = list() + for(var/area/EA in E) + EA.eject = 0 + EA.updateicon() + for(var/turf/ET in EA) + engineturfs += ET + + defer_powernet_rebuild = 1 + for(var/turf/T in engineturfs) + var/turf/S = new T.type( locate(T.x, T.y, ENGINE_EJECT_Z) ) + + var/area/A = T.loc + + for(var/atom/movable/AM as mob|obj in T) + AM.loc = S + S.oxygen = T.oxygen + S.oldoxy = T.oldoxy + S.tmpoxy = T.tmpoxy + S.poison = T.poison + S.oldpoison = T.oldpoison + S.tmppoison = T.tmppoison + S.co2 = T.co2 + S.oldco2 = T.oldco2 + S.tmpco2 = T.tmpco2 + S.sl_gas = T.sl_gas + S.osl_gas = T.osl_gas + S.tsl_gas = T.tsl_gas + S.n2 = T.n2 + S.on2 = T.on2 + S.tn2 = T.tn2 + S.temp = T.temp + S.ttemp = T.ttemp + S.otemp = T.otemp + //Foreach goto(100) + S.buildlinks() + + + + A.contents += S + var/turf/P = new T.type( locate(T.x, T.y, T.z) ) + var/area/D = locate(/area/dummy) + D.contents += P + + //T = null + + del(T) + P.buildlinks() + + + + //Foreach goto(60) + defer_powernet_rebuild = 0 + makepowernets() + world << "\red Engine Ejected!" + for(var/obj/machinery/computer/engine/CE in machines) + CE.icon_state = "engaged" + //Foreach goto(392) + return + +/datum/engine_eject/proc/stopcount() + + if (src.status > 0) + src.status = 0 + world << "\red Alert: Ejection Sequence for Engine Module has been disengaged!" + + var/list/E = engine_areas() + + for(var/area/A in E) + A.eject = 0 + A.updateicon() + + for(var/obj/machinery/computer/engine/CE in machines) + CE.icon_state = null + //Foreach goto(84) + return + +/datum/engine_eject/proc/countdown() + + if (src.timeleft <= 0) + spawn( 0 ) + countdone() + return + return + if (src.status > 0) + src.timeleft-- + if ((src.timeleft <= 15 || src.timeleft == 30)) + world << text("\red [] seconds until engine ejection.", src.timeleft) + spawn( 10 ) + src.countdown() + return + return + + +//returns a list of areas that are under /area/engine +/datum/engine_eject/proc/engine_areas() + var/list/L = list() + for(var/area/A in world) + if(istype(A, /area/engine)) + L += A + + return L + + + + + + +/obj/machinery/gas_sensor/proc/sense_string() + + var/t = "" + + var/turf/T = src.loc + + var/turf_total = T.tot_gas() + + var/t1 = add_tspace("[round(turf_total / CELLSTANDARD * 100, 0.1)]%",6) + t += "
    Pressure: [t1] Temperature: [round(T.temp - T0C,0.1)]°C
    " + + if(turf_total == 0) + t+="O2: 0 N2: 0 CO2: 0>
    Plasma: 0 N20: 0" + else + t1 = add_tspace(round(T.oxygen/turf_total * 100, 0.1),5) + + t += "O2: [t1] " + + t1 = add_tspace(round(T.n2/turf_total * 100, 0.1),5) + + t += "N2: [t1] " + + t1 = add_tspace(round(T.co2/turf_total * 100, 0.01),5) + + t += "CO2: [t1]
    " + + t1 = add_tspace(round(T.poison/turf_total * 100, 0.001),5) + + t += "Plasma: [t1] " + + t1 = add_tspace(round(T.sl_gas/turf_total * 100, 0.001),5) + + t += "N2O: [t1]" + + t += "
    " + + return t diff --git a/main-src/Code/globals.dm b/main-src/Code/globals.dm new file mode 100644 index 0000000..09dfd7c --- /dev/null +++ b/main-src/Code/globals.dm @@ -0,0 +1,352 @@ +/* To-do list + + Bugs: + hearing inside closets/pods + check head protection when hit by tank etc. + + //gas propagation on obj/move cells? plasma doesn't leak. + + //turf-proc to reveal hidden (invis) pipes/wire/etc. when turf.intact variable is changed. + //(Check also build/remove for walls etc.) + + bug with two single-length pipes overlaying - pipeline ends up with no members + + //cable under wall/rwall when deconstructed - run levelupdate + //making rglass with toolbox in r-hand - spawn on ground instead? + //also single rod in hand, make it just use 1 of rod with 1 of glass + + //gas in heater loop - can accept infinite amount into canister + //valves need power to switch, even manually + //heater connection + + alarm continuing when power out? + //can't connect new cable to directconnect power machines + + //cable - lay in dirn of mob facing when click on same turf + + New: + + //add/check all cameras & tags + + //prison warden gets grey jumpsuit + + //power/engine - make useful? Needs local power DU, check for all machines. Power reserve. Engine generator. + make regular glass melt in fire + Blood splatters, can sample DNA & analyze + also blood stains on clothing - attacker & defender + + whole body anaylzer in medbay - shows damage areas in popup? + + //special closet for captain - spare ID, special uniform? + + try station map maximizing use of image rather than icon + + useful world/Topic commands + //examine object flags + + flow rate maximum for pipes - slowest of two connected notes + + system for breaking / making pipes, handle deletion, pipeline spliting/rejoining etc. + + ?give nominal values to all gas.maximum since turf_take depends on them + + //integrate vote system with admin system - allow admin to start vote even if disabled, etc. + + //update canister icons to use overlays for status + //impliment other canister colours, e.g. air (O2+N2), new one for N2O + + //add pipe/cable revealing detector a-la infra-sensor + + //add fingerprints to wire/cable actions + + + add power-off mode for computers & other equipment (with reboot time) + + make grilles conductive for shocks (again) + + for prison warden/sec - baton allows precise targeting + + //recharger for batteries + + //secret - spawn wave of meteors + //limit rate of spawn (timer) + + portable generator - hook to wire system + + modular repair/construction system + maintainance key + diagnostic tool + modules - module construction + + + hats/caps + //labcoat + suit? + //voting while dead, voting defaults + + //admin PM - able to reply - move to mob topic? + + build/unbuild engine floor with rf sheet + + finish compressor/turbine - think about control system, throttle, etc. + + crowbar opens airlocks when no power + +*/ + + +var + + world_message = "Welcome to SS13!" + savefile_ver = "3" + SS13_version = "40.93.2H9.5" + changes = {"Changes from base version 40.93.2
    +
    +

    Version 40.93.2H9.5 +

      +
    • Fixed a few bugs with reinforced windows. +
    • Adding turbine generator to aux. engine. +
    • Added Hikato's Sandbox mode. +
    • Fixed bug with repairing walls and cable visibility. +
    +

    Version 40.93.2H9.4 +

      +
    • Initial version of new generator (not yet completly working). Redesigned and remapped engine and generator. +
    • T-scanners now have a chance to reveal cloakers when in range. +
    • Fire extinguishers and throwing object can be used to manoeuvre in space to a limited extent. +
    • SMESes now more user-friendly, will charge automatically if power available. +
    • Can now config so votes from dead players aren't counted. +
    • Can now config so player votes default to no vote. +
    • Players can now reply to Admin PMs. +
    +

    Version 40.93.2H9.3 +

      +
    • Added main power storage devices (SMES). Reconfigured map power system to use them. +
    • Added backup solar power generators and added them to the map. +
    • Added custom job name assignments through the ID computer. +
    • Engine cannot be ejected now without sufficient ID access. +
    • Cable can now be directly connected from a turf to a power device (SMES, generator, etc.) +
    • Admins & above can now observe when not dead. (Now fixed). +
    • Solar panel controllers can now be set to rotate the panels at a given rate. +
    • Fixed a problem with client inactivity discounting votes much too soon. +
    +

    Version 40.93.2H9.2 +

      +
    • Added some new admin options, +
    • Added 1st test version of engine power generator. +
    • Rewrote canister/pipework connection routines to fix a gas conservation bug. +
    • Valves don't require power to switch anymore. +
    • T-scanners can now be clipped on belts. +
    • Added a cell recharger. +
    • Some small map changes. +
    • Fixed crashes with admin Vars command. +
    • Fixed cable-cutting bug that sometimes did not update the power network. +
    • Fixed bugs when making reinforced glass. +
    • Destroyed canisters can now be disconnected from a pipe. +
    +

    Version 40.93.2H9.1 +

      +
    • Cable item added. Cable cutting now works. Cable laying started. +
    • Fixed stacking bug with tiles, sheets etc. +
    • Newly laid cable now merges with existing powernets. +
    • Added power supply from a dummy generator object for testing. Power switching logic still buggy. +
    • Cables now affected by explosions & fire. Automatically rebuild power network when deleted. +
    • Improved power switching logic. +
    • Addeed high-capacity power cells to some key area APCs. +
    • Most machines now cannot be operated when unpowered. +
    • Made the station cable layout much more redundant. It's no long possible to disable the whole grid with a single cut. +
    • Added a monitoring computer to the engine. +
    • Canisters are now attached to a connector with a wrench (more logical than a screwdriver). +
    • It's now hazardous to cut or modify powered cable without proper protection. +
    • Grilles can now be electrified, and have a chance of shocking someone if attacked. +
    +

    Version 40.93.2H9 +

      +
    • APC added, with test functionality. Started adding power requirements to machinery objects. (Wire system, power generators & cell charging not yet implemented.) +
    • Fixed bug with lightswitches that wouldn't turn back on. +
    • Power usage added for most machines. APCs currently running only on battery power, no way to recharge. Underfloor wire system placed but non-operational. +
    • Some background events added to Blob mode. +
    • Fixed some air propagation bugs and optimized some procedures. +
    • Power networks created, but not functional as yet. +
    • Added a scanner for underfloor wires and pipes. +
    • Modified underfloor hiding system to be more general. +
    +

    Version 40.93.2H8 +

      +
    • Fixed bug with cryo freezer and flask changing. +
    • Fixed numerous runtime errors. +
    • Re-added nuclear mode to vote and config file. +
    • Char setup now autoloaded if your savefile exist +
    • Added reset button to char setup. +
    • Fixed move-to-top while dead. +
    • Fixed bug with voting before round begins. +
    • Fixed bug with engine ejection areas. +
    • Started work on power system. Lightswitches added to map. Area icon system updated. +
    • Fixed spawning on top of dense objects. +
    • Later enterers now get ID card access levels corresponding to their job. +
    +

    Version 40.93.2H7.1D +

      +
    • Total overhaul of pipework system. Circulators, manifolds, junctions, pipelines added. +
    • Heat exchange pipe added. Pipes now affect and are affected by turf temperature. +
    • Made connected canisters automatically anchored at startup. +
    • Removed redundant heat variable from turfs. +
    • Tweaked pipe-turf heat exchange to avoid thermal runaway. +
    • Added valves and vents to pipework system. Fixed gas loss problem with connectors. +
    • Added Captain specific closet and jumpsuite. +
    +

    Version 40.93.2H7.0D +

      +
    • Total overhaul of gas temperature system. Fixed temp. loss problem with scrubbers/vents +
    +

    Version 40.93.2H6.4D +

      +
    • Added player voting system for server reboot and game mode +
    • Added config options for voting system +
    • Made mode choice persistent across server reboots +
    • Removed vote delay after server reboot +
    • Tweaked pipework operation slightly +
    • Fixed bug with ID computer +
    • Added reinforced windows, reinf. glass sheets, etc. +
    • Fixed a win condition bug with location of stolen item in traitor mode +
    +

    Version 40.93.2H6.3D +

      +
    • Fixed firelarms so they can be sabotaged successfully +
    • "Random" mode added (like secret but actual mode is announced) +
    • Fixed more bugs with DNA-scanner +
    • Fixed cryocell bug with gas transfer +
    • Moved all testing verbs to admin-only +
    • Re-wrote damage icon system to fix standing mob image and skin tone change bugs +
    • Added external config file for logging options +
    • Enabled config of secret/random mode pick probabilities +
    +

    Version 40.93.2H6.2D +

      +
    • Fixed bug with floor tile stacking/use. +
    • Say/OOC now strips control characters. +
    • Fixed call error in rwall disassembly. +
    • Fixed pulling after item anchoring. +
    • Adjusted pipe/connector logic to enable pipework. +
    • Fixed background bug with certain procs. +
    • Fixed Engineer security levels in job info text. +
    +

    Version 40.93.2H6.1D +

    • Airflow system changed to use cached FindTurfs (2x faster). +
    • Cell, Flow and Clear test verbs added to check airflow changes. +
    • Added Vars verb for object state checking. +
    • Current XYZ added to statpanel (for testing). +
    • Fixed score report in blob mode. +
    • Start_now added to admin commands. +
    • Partially fixed bug with standing mob image after death. +
    • Default movement speed is now run. +
    +

    Version 40.93.2H6 +

      +
    • Timer interface auto-closes on drop. +
    • Fixed welding doors with non-active welder. +
    • Fixed self-deletion bug with bombs. +
    • Added new Blob gameplay mode. +
    • Fixed shuttle & eject positioning logic for non-default maps. +
    • Mass drivers with same ID now all fire together. +
    • Server logging of logon, logoff & OOC added. +
    +

    Version 40.93.2H5 +

      +
    • Added move-to-top verb to sort item stacks. +
    • Gasmask, firealarm, and eject alarm overlays changed to alpha-blend textures. +
    • Doors allow empty-handed click to open (if wearing correct ID). +
    • Dedicated remote door controller added for poddoors. +
    • Poddoor icon changed. +
    • Alarm icon changed. Now reports air stats on examine. +
    • Timer/Igniter & Timer/Igniter/Plasmatank assemblies added. +
    • Bombs act as firebombs if plasma tank hole isn't bored. +
    • Fixed airflow bug with interior doors. +
    • Security computers now have minimap of station. +
    • Arm verb added to proximity detectors/assemblies. +
    • Proximity detectors fire if they bump. +
    • Timer and Motion assemblies state icons added. +
    • Meteors can now explode (sometimes). +
    +"} + datum/air_tunnel/air_tunnel1/SS13_airtunnel = null + datum/control/cellular/cellcontrol = null + datum/control/gameticker/ticker = null + obj/datacore/data_core = null + obj/overlay/plmaster = null + obj/overlay/slmaster = null + going = 1.0 + master_mode = "random"//"extended" + + persistent_file = "mode.txt" + + obj/ctf_assist/ctf = null + nuke_code = null + poll_controller = null + datum/engine_eject/engine_eject_control = null + host = null + obj/hud/main_hud = null + obj/hud/hud2/main_hud2 = null + ooc_allowed = 1.0 + dna_ident = 1.0 + abandon_allowed = 1.0 + enter_allowed = 1.0 + shuttle_frozen = 0.0 + prison_entered = null + + list/html_colours = new/list(0) + list/occupations = list( "Engineer", "Engineer", "Security Officer", "Security Officer", "Forensic Technician", "Medical Researcher", "Research Technician", "Toxin Researcher", "Atmospheric Technician", "Medical Doctor", "Station Technician", "Head of Personnel", "Head of Research", "Prison Security", "Prison Security", "Prison Doctor", "Prison Warden" ) + list/assistant_occupations = list( "Technical Assistant", "Medical Assistant", "Research Assistant", "Staff Assistant" ) + list/bombers = list( ) + list/admins = list( ) + list/shuttles = list( ) + list/reg_dna = list( ) + list/banned = list( ) + + + // + shuttle_z = 10 //default + list/monkeystart = list() + list/blobstart = list() + list/blobs = list() + list/cardinal = list( NORTH, SOUTH, EAST, WEST ) + + + datum/station_state/start_state = null + datum/config/config = null + datum/vote/vote = null + datum/sun/sun = null + + list/plines = list() + list/gasflowlist = list() + list/machines = list() + + list/powernets = null + + defer_powernet_rebuild = 0 // true if net rebuild will be called manually after an event + + Debug = 0 // global debug switch + + datum/debug/debugobj + + datum/moduletypes/mods = new() + + wavesecret = 0 + +world + mob = /mob/human + turf = /turf/space + area = /area + view = "15x15" + + hub = "Exadv1.spacestation13" + hub_password = "kMZy3U5jJHSiBQjr" + //hub = "Hobnob.SS13D" + //hub = "Stephen001.CustomSpaceStation13" + name = "Space Station 13" + + + + //visibility = 0 + + //loop_checks = 0 \ No newline at end of file diff --git a/main-src/Code/h_sandbox.dm b/main-src/Code/h_sandbox.dm new file mode 100644 index 0000000..e70f585 --- /dev/null +++ b/main-src/Code/h_sandbox.dm @@ -0,0 +1,140 @@ +var + hsboxspawn = 0 + list + hrefs = list( + "hsbsuit" = "Suit Up (Space Travel Gear)", + "hsbmetal" = "Spawn 50 Metal", + "hsbglass" = "Spawn 50 Glass", + "hsbairlock" = "Spawn Airlock", + "hsbregulator" = "Spawn Air Regulator", + "hsbfilter" = "Spawn Air Filter", + "hsbcanister" = "Spawn Canister", + "hsbfueltank" = "Spawn Welding Fuel Tank", + "hsbwater tank" = "Spawn Water Tank", + "hsbtoolbox" = "Spawn Toolbox", + "hsbmedkit" = "Spawn Medical Kit") + +mob + var + datum/hSB/sandbox = null + proc + CanBuild() + if(master_mode == "sandbox") + sandbox = new/datum/hSB + sandbox.owner = src.ckey + if(src.client.holder) + sandbox.admin = 1 + verbs += new/mob/proc/sandbox_panel + sandbox_panel() + if(sandbox) + sandbox.update() + +datum/hSB + var + owner = null + admin = 0 + proc + update() + var/hsbpanel = "
    h_Sandbox Panel

    " + if(admin) + hsbpanel += "Administration Tools:
    " + hsbpanel += "- Toggle Object Spawning

    " + hsbpanel += "Regular Tools:
    " + for(var/T in hrefs) + hsbpanel += "- [hrefs[T]]
    " + if(hsboxspawn) + hsbpanel += "- Spawn Object

    " + usr << browse(hsbpanel, "window=hsbpanel") + Topic(href, href_list) + if(!(src.owner == usr.ckey)) return + if(href_list["hsb"]) + switch(href_list["hsb"]) + if("hsbtobj") + if(!admin) return + if(hsboxspawn) + world << "Sandbox: [usr.key] has disabled object spawning!" + hsboxspawn = 0 + return + if(!hsboxspawn) + world << "Sandbox: [usr.key] has enabled object spawning!" + hsboxspawn = 1 + return + if("hsbsuit") + var/mob/human/P = usr + if(P.wear_suit) + P.wear_suit.loc = P.loc + P.wear_suit.layer = initial(P.wear_suit.layer) + P.wear_suit = null + P.wear_suit = new/obj/item/weapon/clothing/suit/sp_suit(P) + P.wear_suit.layer = 20 + if(P.head) + P.head.loc = P.loc + P.head.layer = initial(P.head.layer) + P.head = null + P.head = new/obj/item/weapon/clothing/head/s_helmet(P) + P.head.layer = 20 + if(P.wear_mask) + P.wear_mask.loc = P.loc + P.wear_mask.layer = initial(P.wear_mask.layer) + P.wear_mask = null + P.wear_mask = new/obj/item/weapon/clothing/mask/gasmask(P) + P.wear_mask.layer = 20 + if(P.back) + P.back.loc = P.loc + P.back.layer = initial(P.back.layer) + P.back = null + P.back = new/obj/item/weapon/tank/jetpack(P) + P.back.layer = 20 + P.internal = P.back + if("hsbmetal") + var/obj/item/weapon/sheet/hsb = new/obj/item/weapon/sheet/metal + hsb.amount = 50 + hsb.loc = usr.loc + if("hsbglass") + var/obj/item/weapon/sheet/hsb = new/obj/item/weapon/sheet/metal + hsb.amount = 50 + hsb.loc = usr.loc + if("hsbairlock") + var/obj/machinery/door/hsb = new/obj/machinery/door/airlock + var/r_access = input(usr, "What general access will this airlock require?", "Sandbox:") as num + var/r_lab = input(usr, "What laboratory access will this airlock require?", "Sandbox:") as num + var/r_engine = input(usr, "What engine access will this airlock require?", "Sandbox:") as num + var/r_air = input(usr, "What air access will this airlock require?", "Sandbox:") as num + + hsb.access = "[r_access][r_lab][r_engine][r_air]" + + hsb.loc = usr.loc + hsb.loc.buildlinks() + usr << "Sandbox: Created an airlock requiring at least [r_access]>[r_lab]-[r_engine]-[r_air] access." + if("hsbregulator") + var/obj/machinery/atmoalter/siphs/fullairsiphon/hsb = new/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent + hsb.loc = usr.loc + if("hsbfilter") + var/obj/machinery/atmoalter/siphs/scrubbers/hsb = new/obj/machinery/atmoalter/siphs/scrubbers/air_filter + hsb.loc = usr.loc + if("hsbcanister") + var/list/hsbcanisters = typesof(/obj/machinery/atmoalter/canister/) - /obj/machinery/atmoalter/canister/ + var/hsbcanister = input(usr, "Choose a canister to spawn.", "Sandbox:") in hsbcanisters + "Cancel" + if(!(hsbcanister == "Cancel")) + new hsbcanister(usr.loc) + if("hsbfueltank") + var/obj/hsb = new/obj/weldfueltank + hsb.loc = usr.loc + if("hsbwatertank") + var/obj/hsb = new/obj/watertank + hsb.loc = usr.loc + if("hsbtoolbox") + var/obj/item/weapon/storage/hsb = new/obj/item/weapon/storage/toolbox + for(var/obj/item/weapon/radio/T in hsb) + del(T) + new/obj/item/weapon/crowbar (hsb) + hsb.loc = usr.loc + if("hsbmedkit") + var/obj/item/weapon/storage/firstaid/hsb = new/obj/item/weapon/storage/firstaid/regular + hsb.loc = usr.loc + if("hsbobj") + if(!hsboxspawn) return + var/list/hsbitems = typesof(/obj/) + var/hsbitem = input(usr, "Choose an object to spawn.", "Sandbox:") in hsbitems + "Cancel" + if(!(hsbitem == "Cancel")) + new hsbitem(usr.loc) \ No newline at end of file diff --git a/main-src/Code/hexadecimal.dm b/main-src/Code/hexadecimal.dm new file mode 100644 index 0000000..5e22cc3 --- /dev/null +++ b/main-src/Code/hexadecimal.dm @@ -0,0 +1,78 @@ + +/proc/hex2num(hex) + + if (!( istext(hex) )) + CRASH("hex2num not given a hexadecimal string argument (user error)") + return + var/num = 0 + var/power = 0 + var/i = null + i = length(hex) + while(i > 0) + var/char = copytext(hex, i, i + 1) + switch(char) + if("0") + power++ + goto Label_290 + if("9", "8", "7", "6", "5", "4", "3", "2", "1") + num += text2num(char) * 16 ** power + if("a", "A") + num += 16 ** power * 10 + if("b", "B") + num += 16 ** power * 11 + if("c", "C") + num += 16 ** power * 12 + if("d", "D") + num += 16 ** power * 13 + if("e", "E") + num += 16 ** power * 14 + if("f", "F") + num += 16 ** power * 15 + else + CRASH("hex2num given non-hexadecimal string (user error)") + return + power++ + Label_290: + i-- + return num + return + +/proc/num2hex(num, placeholder) + + if (placeholder == null) + placeholder = 2 + if (!( isnum(num) )) + CRASH("num2hex not given a numeric argument (user error)") + return + if (!( num )) + return "0" + var/hex = "" + var/i = 0 + while(16 ** i < num) + i++ + var/power = null + power = i - 1 + while(power >= 0) + var/val = round(num / 16 ** power) + num -= val * 16 ** power + switch(val) + if(9.0, 8.0, 7.0, 6.0, 5.0, 4.0, 3.0, 2.0, 1.0, 0.0) + hex += text("[]", val) + if(10.0) + hex += "A" + if(11.0) + hex += "B" + if(12.0) + hex += "C" + if(13.0) + hex += "D" + if(14.0) + hex += "E" + if(15.0) + hex += "F" + else + power-- + while(length(hex) < placeholder) + hex = text("0[]", hex) + return hex + return diff --git a/main-src/Code/instructions.dm b/main-src/Code/instructions.dm new file mode 100644 index 0000000..5e763fd --- /dev/null +++ b/main-src/Code/instructions.dm @@ -0,0 +1,352 @@ + +/obj/machinery/computer/hologram_comp/New() + + ..() + spawn( 10 ) + src.projector = locate(/obj/machinery/hologram_proj, get_step(src.loc, NORTH)) + return + return + +/obj/machinery/computer/hologram_comp/DblClick() + + if (get_dist(src, usr) > 1) + return 0 + src.show_console(usr) + return + +/obj/machinery/computer/hologram_comp/proc/render() + + var/icon/I = new /icon( 'human.dmi', "male" ) + if (src.lumens >= 0) + I.Blend(rgb(src.lumens, src.lumens, src.lumens), 0) + else + I.Blend(rgb(- src.lumens, -src.lumens, -src.lumens), 1) + I.Blend(new /icon( 'human.dmi', "mouth" ), 3) + var/icon/U = new /icon( 'human.dmi', "diaper" ) + U.Blend(U, 3) + U = new /icon( 'mob.dmi', "hair_a" ) + U.Blend(rgb(src.h_r, src.h_g, src.h_b), 0) + I.Blend(U, 3) + src.projector.projection.icon = I + return + +/obj/machinery/computer/hologram_comp/proc/show_console(var/mob/user as mob) + + var/dat + user.machine = src + if (src.temp) + dat = text("[]

    Clear", src.temp, src) + else + dat = text("Hologram Status:
    \nPower: []
    \nHologram Control:
    \nColor Luminosity: []/220 \[Reset\]
    \nLighten: 1 10
    \nDarken: 1 10
    \n
    \nHair Color: ([],[],[]) \[Reset\]
    \nRed (0-255): \[0\] -10 -1 [] 1 10 \[255\]
    \nGreen (0-255): \[0\] -10 -1 [] 1 10 \[255\]
    \nBlue (0-255): \[0\] -10 -1 [] 1 10 \[255\]
    ", src, (src.projector.projection ? "On" : "Off"), -src.lumens + 35, src, src, src, src, src, src.h_r, src.h_g, src.h_b, src, src, src, src, src.h_r, src, src, src, src, src, src, src.h_g, src, src, src, src, src, src, src.h_b, src, src, src) + user << browse(dat, "window=hologram_console") + return + +/obj/machinery/computer/hologram_comp/Topic(href, href_list) + ..() + if (get_dist(src, usr) <= 1) + flick("holo_console1", src) + if (href_list["power"]) + if (src.projector.projection) + src.projector.icon_state = "hologram0" + //src.projector.projection = null + del(src.projector.projection) + else + src.projector.projection = new /obj/projection( src.projector.loc ) + src.projector.projection.icon = 'human.dmi' + src.projector.projection.icon_state = "male" + src.projector.icon_state = "hologram1" + src.render() + else + if (href_list["h_r"]) + if (src.projector.projection) + src.h_r += text2num(href_list["h_r"]) + src.h_r = min(max(src.h_r, 0), 255) + render() + else + if (href_list["h_g"]) + if (src.projector.projection) + src.h_g += text2num(href_list["h_g"]) + src.h_g = min(max(src.h_g, 0), 255) + render() + else + if (href_list["h_b"]) + if (src.projector.projection) + src.h_b += text2num(href_list["h_b"]) + src.h_b = min(max(src.h_b, 0), 255) + render() + else + if (href_list["light"]) + if (src.projector.projection) + src.lumens += text2num(href_list["light"]) + src.lumens = min(max(src.lumens, -185.0), 35) + render() + else + if (href_list["reset"]) + if (src.projector.projection) + src.lumens = 0 + render() + else + if (href_list["temp"]) + src.temp = null + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.show_console(M) + //Foreach goto(446) + return + +/obj/begin/verb/ready() + set src in usr.loc + + + if ((!( istype(usr, /mob/human) ) || usr.start)) + usr << "You have already started!" + return + var/mob/human/M = usr + src.get_dna_ready(M) + if ((!( M.w_uniform ) && !( ticker ))) + if (M.gender == "female") + M.w_uniform = new /obj/item/weapon/clothing/under/pink( M ) + else + M.w_uniform = new /obj/item/weapon/clothing/under/blue( M ) + M.w_uniform.layer = 20 + M.shoes = new /obj/item/weapon/clothing/shoes/brown( M ) + M.shoes.layer = 20 + else + M << "You will have to find clothes from the station." + if ((ticker && !( M.l_hand ))) + var/obj/item/weapon/card/id/I = new /obj/item/weapon/card/id( M ) + var/list/L = list( "Technical Assistant", "Research Assistant", "Staff Assistant", "Medical Assistant" ) + var/choose + if (L.Find(M.occupation1)) + choose = M.occupation1 + else + choose = pick(L) + switch(choose) + if("Research Assistant") + I.assignment = "Research Assistant" + I.registered = M.rname + I.access_level = 1 + I.lab_access = 1 + I.engine_access = 0 + I.air_access = 0 + if("Technical Assistant") + I.assignment = "Technical Assistant" + I.registered = M.rname + I.access_level = 1 + I.lab_access = 0 + I.engine_access = 0 + I.air_access = 1 + if("Medical Assistant") + I.assignment = "Medical Assistant" + I.registered = M.rname + I.access_level = 1 + I.lab_access = 1 + I.engine_access = 0 + I.air_access = 0 + if("Staff Assistant") + I.assignment = "Staff Assistant" + I.registered = M.rname + I.access_level = 2 + I.lab_access = 0 + I.engine_access = 0 + I.air_access = 0 + else + I.name = text("[]'s ID Card ([]>[]-[]-[])", I.registered, I.access_level, I.lab_access, I.engine_access, I.air_access) + I.layer = 20 + M.l_hand = I + M.start = 1 + M.update_face() + M.update_body() + return + +/obj/begin/verb/enter() + set src in usr.loc + + if(config.loggame) world.log << "GAME: [usr.key] entered as [usr.name]" + + if (!( enter_allowed )) + usr << "\blue There is an administrative lock on entering the game!" + return + if ((!( usr.start ) || !( istype(usr, /mob/human) ))) + usr << "\blue You aren't ready! Use the ready verb on this pad to set up your character!" + return + if (ctf) + var/obj/rogue = locate("landmark*CTF-rogue") + usr.loc = rogue.loc + usr << "It's CTF mode. You are a late joiner so you are a Rogue!" + usr << "\blue Now teleporting." + if (ticker) + var/mob/H = usr + if (istype(H, /mob/human)) + reg_dna[text("[]", H.primary.uni_identity)] = H.rname + return + var/mob/human/M = usr + var/list/start_loc = list( ) + if ((M.key in list( "Thief jack", "Link43130", "Hutchy2k1", "Easty", "Exadv1" ))) + start_loc["Supply Station"] = locate(77, 40, 7) + + var/area/A = locate(/area/sleep_area) + var/list/L = list( ) + for(var/turf/T in A) + if(T.isempty()) + L += T + //Foreach goto(239) + start_loc["SS13"] = pick(L) + + + + if (locate(text("spstart[]", M.ckey))) + for(var/obj/sp_start/S in world) + if (S.tag == text("spstart[]", M.ckey)) + start_loc[text("[]", S.desc)] = S + //Foreach goto(295) + var/option = input(M, "Where should you start?", "Start Selector", null) in start_loc + if ((!( usr.start ) || !( istype(usr, /mob/human) ) || usr.loc != src.loc)) + return + if (ticker) + reg_dna[text("[]", M.primary.uni_identity)] = M.rname + var/obj/sp_start/S = start_loc[option] + if (istype(S, /obj/sp_start)) + M << "\blue Now teleporting to special location." + if (S.special == 2) + for(var/obj/O in M) + //O = null + del(O) + //Foreach goto(492) + M.loc = S.loc + else + if (S.special == 3) + for(var/obj/O in M) + //O = null + del(O) + //Foreach goto(560) + var/obj/O = new /mob/monkey( S.loc ) + M.client.mob = O + O.loc = S.loc + //M = null + del(M) + else + M.loc = S.loc //was O.loc + else + if (isturf(S)) + M << "\blue Now teleporting." + M.loc = S + return + +/obj/begin/proc/get_dna_ready(var/mob/user as mob) + + var/mob/human/M = user + if (!( M.primary )) + M.r_hair = M.nr_hair + M.b_hair = M.nb_hair + M.g_hair = M.ng_hair + M.s_tone = M.ns_tone + var/t1 = rand(1000, 1500) + dna_ident += t1 + if (dna_ident > 65536.0) + dna_ident = rand(1, 1500) + M.primary = new /obj/dna( null ) + M.primary.uni_identity = text("[]", add_zero(num2hex(dna_ident), 4)) + var/t2 = add_zero(num2hex(M.nr_hair), 2) + M.primary.uni_identity = text("[][]", M.primary.uni_identity, t2) + t2 = add_zero(num2hex(M.ng_hair), 2) + M.primary.uni_identity = text("[][]", M.primary.uni_identity, t2) + t2 = add_zero(num2hex(M.nb_hair), 2) + M.primary.uni_identity = text("[][]", M.primary.uni_identity, t2) + t2 = add_zero(num2hex(M.r_eyes), 2) + M.primary.uni_identity = text("[][]", M.primary.uni_identity, t2) + t2 = add_zero(num2hex(M.g_eyes), 2) + M.primary.uni_identity = text("[][]", M.primary.uni_identity, t2) + t2 = add_zero(num2hex(M.b_eyes), 2) + M.primary.uni_identity = text("[][]", M.primary.uni_identity, t2) + t2 = add_zero(num2hex( -M.ns_tone + 35), 2) + M.primary.uni_identity = text("[][]", M.primary.uni_identity, t2) + t2 = (M.gender == "male" ? text("[]", num2hex(rand(1, 124))) : text("[]", num2hex(rand(127, 250)))) + if (length(t2) < 2) + M.primary.uni_identity = text("[]0[]", M.primary.uni_identity, t2) + else + M.primary.uni_identity = text("[][]", M.primary.uni_identity, t2) + M.primary.spec_identity = "5BDFE293BA5500F9FFFD500AAFFE" + M.primary.struc_enzyme = "CDE375C9A6C25A7DBDA50EC05AC6CEB63" + if (rand(1, 3125) == 13) + M.need_gl = 1 + M.be_epil = 1 + M.be_cough = 1 + M.be_tur = 1 + M.be_stut = 1 + + var/b_vis + if (M.need_gl) + b_vis = add_zero(text("[]", num2hex(rand(10, 1400))), 3) + M.disabilities = M.disabilities | 1 + M << "\blue You need glasses!" + else + b_vis = "5A7" + var/epil + if (M.be_epil) + epil = add_zero(text("[]", num2hex(rand(10, 1400))), 3) + M.disabilities = M.disabilities | 2 + M << "\blue You are epileptic!" + else + epil = "6CE" + var/cough + if (M.be_cough) + cough = add_zero(text("[]", num2hex(rand(10, 1400))), 3) + M.disabilities = M.disabilities | 4 + M << "\blue You have a chronic coughing syndrome!" + else + cough = "EC0" + var/Tourette + if (M.be_tur) + epil = add_zero(text("[]", num2hex(rand(10, 1400))), 3) + M.disabilities = M.disabilities | 8 + M << "\blue You have Tourette syndrome!" + else + Tourette = "5AC" + var/stutter + if (M.be_stut) + stutter = add_zero(text("[]", num2hex(rand(10, 1400))), 3) + M.disabilities = M.disabilities | 16 + M << "\blue You have a stuttering problem!" + else + stutter = "A50" + M.primary.struc_enzyme = text("CDE375C9A6C2[]DBD[][][][]B63", b_vis, stutter, cough, Tourette, epil) + M.primary.use_enzyme = "493DB249EB6D13236100A37000800AB71" + M.primary.n_chromo = 28 + return + +/turf/station/command/floor/updatecell() + + src.oxygen = O2STANDARD + src.firelevel = 0 + src.co2 = 0 + src.poison = 0 + src.sl_gas = 0 + src.n2 = N2STANDARD + return + +/turf/station/command/conduction() + return + +/turf/station/command/floor/attack_paw(user as mob) + + return src.attack_hand(user) + return + +/turf/station/command/floor/attack_hand(var/mob/user as mob) + + if ((!( user.canmove ) || user.restrained() || !( user.pulling ))) + return + if (user.pulling.anchored) + return + if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1)) + return + if (ismob(user.pulling)) + var/mob/M = user.pulling + var/mob/t = M.pulling + M.pulling = null + step(user.pulling, get_dir(user.pulling.loc, src)) + M.pulling = t + else + step(user.pulling, get_dir(user.pulling.loc, src)) + return diff --git a/main-src/Code/inverthtml.dm b/main-src/Code/inverthtml.dm new file mode 100644 index 0000000..9a0365c --- /dev/null +++ b/main-src/Code/inverthtml.dm @@ -0,0 +1,27 @@ + +/proc/invertHTML(HTMLstring) + + if (!( istext(HTMLstring) )) + CRASH("Given non-text argument!") + return + else + if (length(HTMLstring) != 7) + CRASH("Given non-HTML argument!") + return + var/textr = copytext(HTMLstring, 2, 4) + var/textg = copytext(HTMLstring, 4, 6) + var/textb = copytext(HTMLstring, 6, 8) + var/r = hex2num(textr) + var/g = hex2num(textg) + var/b = hex2num(textb) + textr = num2hex(255 - r) + textg = num2hex(255 - g) + textb = num2hex(255 - b) + if (length(textr) < 2) + textr = text("0[]", textr) + if (length(textg) < 2) + textr = text("0[]", textg) + if (length(textb) < 2) + textr = text("0[]", textb) + return text("#[][][]", textr, textg, textb) + return diff --git a/main-src/Code/items.dm b/main-src/Code/items.dm new file mode 100644 index 0000000..dd7dc57 --- /dev/null +++ b/main-src/Code/items.dm @@ -0,0 +1,5793 @@ + +/proc/text2dir(direction) + + switch(uppertext(direction)) + if("NORTH") + return 1 + if("SOUTH") + return 2 + if("EAST") + return 4 + if("WEST") + return 8 + if("NORTHEAST") + return 5 + if("NORTHWEST") + return 9 + if("SOUTHEAST") + return 6 + if("SOUTHWEST") + return 10 + else + return + +/proc/get_turf(turf/T as turf) + + while((!( istype(T, /turf) ) && T)) + T = T.loc + return T + return + +/proc/dir2text(direction) + + switch(direction) + if(1.0) + return "north" + if(2.0) + return "south" + if(4.0) + return "east" + if(8.0) + return "west" + if(5.0) + return "northeast" + if(6.0) + return "southeast" + if(9.0) + return "northwest" + if(10.0) + return "southwest" + else + return + +/obj/proc/hear_talk(mob/M as mob, text) + + return + +/obj/machinery/recharger/process() + + if (src.charging && ! (stat & NOPOWER) ) + if (src.charging.charges < 10) + src.charging.charges++ + src.icon_state = "recharger1" + use_power(250) + + else + src.icon_state = "recharger2" + else + src.icon_state = "recharger0" + return + +/obj/machinery/recharger/attack_paw(mob/user as mob) + + if ((ticker && ticker.mode == "monkey")) + return src.attack_hand(user) + return + +/obj/machinery/recharger/attack_hand(mob/user as mob) + + src.add_fingerprint(user) + if (src.charging) + src.charging.update_icon() + src.charging.loc = src.loc + src.charging = null + return + +/obj/machinery/recharger/attackby(obj/item/weapon/G as obj, mob/user as mob) + + if (src.charging) + return + if (istype(G, /obj/item/weapon/gun/energy)) + user.drop_item() + G.loc = src + src.charging = G + return + return + +/obj/item/weapon/table_parts/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (istype(W, /obj/item/weapon/wrench)) + new /obj/item/weapon/sheet/metal( src.loc ) + //SN src = null + del(src) + return + return + return + +/obj/item/weapon/table_parts/attack_self(mob/user as mob) + + var/state = input(user, "What type of table?", "Assembling Table", null) in list( "sides", "corners", "alone" ) + var/direct = SOUTH + if (state == "corners") + direct = input(user, "Direction?", "Assembling Table", null) in list( "northwest", "northeast", "southwest", "southeast" ) + else + if (state == "sides") + direct = input(user, "Direction?", "Assembling Table", null) in list( "north", "east", "south", "west" ) + var/obj/table/T = new /obj/table( user.loc ) + T.icon_state = state + T.dir = text2dir(direct) + T.add_fingerprint(user) + //SN src = null + del(src) + return + return + +/obj/item/weapon/rack_parts/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (istype(W, /obj/item/weapon/wrench)) + new /obj/item/weapon/sheet/metal( src.loc ) + //SN src = null + del(src) + return + return + return + +/obj/item/weapon/rack_parts/attack_self(mob/user as mob) + + var/obj/rack/R = new /obj/rack( user.loc ) + R.add_fingerprint(user) + //SN src = null + del(src) + return + return + +/obj/item/weapon/paper_bin/proc/update() + + src.icon_state = text("paper_bin[]", ((src.amount || locate(/obj/item/weapon/paper, src)) ? "1" : null)) + return + +/obj/item/weapon/paper_bin/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (istype(W, /obj/item/weapon/paper)) + user.drop_item() + W.loc = src + else + if (istype(W, /obj/item/weapon/weldingtool)) + var/obj/item/weapon/weldingtool/T = W + if ((T.welding && T.weldfuel > 0)) + viewers(user, null) << text("[] burns the paper with the welding tool!", user) + spawn( 0 ) + src.burn(1800000.0) + return + else + if (istype(W, /obj/item/weapon/igniter)) + viewers(user, null) << text("[] burns the paper with the igniter!", user) + spawn( 0 ) + src.burn(1800000.0) + return + src.update() + return + +/obj/item/weapon/paper_bin/burn(fi_amount) + + flick("paper_binb", src) + for(var/atom/movable/A as mob|obj in src) + A.burn(fi_amount) + //Foreach goto(23) + if (fi_amount >= 900000.0) + src.amount = 0 + src.update() + return + +/obj/item/weapon/paper_bin/MouseDrop(mob/user as mob) + + if ((user == usr && (!( usr.restrained() ) && (!( usr.stat ) && (usr.contents.Find(src) || get_dist(src, usr) <= 1))))) + if (usr.hand) + if (!( usr.l_hand )) + spawn( 0 ) + src.attack_hand(usr, 1, 1) + return + else + if (!( usr.r_hand )) + spawn( 0 ) + src.attack_hand(usr, 0, 1) + return + return + +/obj/item/weapon/paper_bin/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/item/weapon/paper_bin/attack_hand(mob/user as mob, unused, flag) + + if (flag) + return ..() + src.add_fingerprint(user) + if (locate(/obj/item/weapon/paper, src)) + for(var/obj/item/weapon/paper/P in src) + if ((usr.hand && !( usr.l_hand ))) + usr.l_hand = P + P.loc = usr + P.layer = 20 + P = null + usr.UpdateClothing() + break//// + else + if (!( usr.r_hand )) + usr.r_hand = P + P.loc = usr + P.layer = 20 + P = null + usr.UpdateClothing() + break//// + ////else + //Foreach goto(48) + else + if (src.amount >= 1) + src.amount-- + new /obj/item/weapon/paper( usr.loc ) + src.update() + return + +/obj/item/weapon/paper_bin/examine() + set src in oview(1) + + src.amount = round(src.amount) + var/n = src.amount + for(var/obj/item/weapon/paper/P in src) + n++ + //Foreach goto(33) + if (n <= 0) + n = 0 + usr << "There are no papers in the bin." + else + if (n == 1) + usr << "There is one paper in the bin." + else + usr << text("There are [] papers in the bin.", n) + return + +/obj/item/weapon/dummy/ex_act() + + return + +/obj/item/weapon/dummy/blob_act() + + return + +/obj/item/weapon/game_kit/New() + + src.board_stat = "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB" + src.selected = "CR" + return + +/obj/item/weapon/game_kit/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/item/weapon/game_kit/MouseDrop(mob/user as mob) + + if ((user == usr && !( usr.restrained() ) && !( usr.stat ) && (usr.contents.Find(src) || get_dist(src, usr) <= 1))) + if (usr.hand) + if (!( usr.l_hand )) + spawn( 0 ) + src.attack_hand(usr, 1, 1) + return + else + if (!( usr.r_hand )) + spawn( 0 ) + src.attack_hand(usr, 0, 1) + return + return + +/obj/item/weapon/game_kit/proc/update() + + if (!( src.internet )) + var/dat = text("
    Game Board

    [] remove
    ", src, (src.selected ? text("Selected: []", src.selected) : "Nothing Selected"), src) + var/counter = null + counter = 1 + while(counter <= 8) + dat += text("\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t", + src, counter, copytext(src.board_stat, ((counter - 1) * 8 + 1) * 2 - 1, ((counter - 1) * 8 + 1) * 2 + 1), ((counter + 1) % 2 ? "W" : "B"), + src, counter, copytext(src.board_stat, ((counter - 1) * 8 + 2) * 2 - 1, ((counter - 1) * 8 + 2) * 2 + 1), ((counter + 2) % 2 ? "W" : "B"), + src, counter, copytext(src.board_stat, ((counter - 1) * 8 + 3) * 2 - 1, ((counter - 1) * 8 + 3) * 2 + 1), ((counter + 3) % 2 ? "W" : "B"), + src, counter, copytext(src.board_stat, ((counter - 1) * 8 + 4) * 2 - 1, ((counter - 1) * 8 + 4) * 2 + 1), ((counter + 4) % 2 ? "W" : "B"), + src, counter, copytext(src.board_stat, ((counter - 1) * 8 + 5) * 2 - 1, ((counter - 1) * 8 + 5) * 2 + 1), ((counter + 5) % 2 ? "W" : "B"), + src, counter, copytext(src.board_stat, ((counter - 1) * 8 + 6) * 2 - 1, ((counter - 1) * 8 + 6) * 2 + 1), ((counter + 6) % 2 ? "W" : "B"), + src, counter, copytext(src.board_stat, ((counter - 1) * 8 + 7) * 2 - 1, ((counter - 1) * 8 + 7) * 2 + 1), ((counter + 7) % 2 ? "W" : "B"), + src, counter, copytext(src.board_stat, ((counter - 1) * 8 + 8) * 2 - 1, ((counter - 1) * 8 + 8) * 2 + 1), ((counter + 8) % 2 ? "W" : "B")) + counter++ + dat += "

    Chips: " + dat += text("", src) + dat += text("", src) + dat += "
    Chess pieces:
    " + dat += text("", src) + dat += text("", src) + dat += text("", src) + dat += text("", src) + dat += text("", src) + dat += text("
    ", src) + dat += text("", src) + dat += text("", src) + dat += text("", src) + dat += text("", src) + dat += text("", src) + dat += text("
    ", src) + dat += text("Using cache for pictures", src) + src.data = dat + else + var/dat = text("
    Game Board

    [] remove
    ", src, (src.selected ? text("Selected: []", src.selected) : "Nothing Selected"), src) + var/counter = null + counter = 1 + while(counter <= 8) + dat += text("\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t", + src, counter, copytext(src.board_stat, ((counter - 1) * 8 + 1) * 2 - 1, ((counter - 1) * 8 + 1) * 2 + 1), ((counter + 1) % 2 ? "W" : "B"), + src, counter, copytext(src.board_stat, ((counter - 1) * 8 + 2) * 2 - 1, ((counter - 1) * 8 + 2) * 2 + 1), ((counter + 2) % 2 ? "W" : "B"), + src, counter, copytext(src.board_stat, ((counter - 1) * 8 + 3) * 2 - 1, ((counter - 1) * 8 + 3) * 2 + 1), ((counter + 3) % 2 ? "W" : "B"), + src, counter, copytext(src.board_stat, ((counter - 1) * 8 + 4) * 2 - 1, ((counter - 1) * 8 + 4) * 2 + 1), ((counter + 4) % 2 ? "W" : "B"), + src, counter, copytext(src.board_stat, ((counter - 1) * 8 + 5) * 2 - 1, ((counter - 1) * 8 + 5) * 2 + 1), ((counter + 5) % 2 ? "W" : "B"), + src, counter, copytext(src.board_stat, ((counter - 1) * 8 + 6) * 2 - 1, ((counter - 1) * 8 + 6) * 2 + 1), ((counter + 6) % 2 ? "W" : "B"), + src, counter, copytext(src.board_stat, ((counter - 1) * 8 + 7) * 2 - 1, ((counter - 1) * 8 + 7) * 2 + 1), ((counter + 7) % 2 ? "W" : "B"), + src, counter, copytext(src.board_stat, ((counter - 1) * 8 + 8) * 2 - 1, ((counter - 1) * 8 + 8) * 2 + 1), ((counter + 8) % 2 ? "W" : "B")) + counter++ + dat += "

    Chips: " + dat += text("", src) + dat += text("", src) + dat += "
    Chess pieces:
    " + dat += text("", src) + dat += text("", src) + dat += text("", src) + dat += text("", src) + dat += text("", src) + dat += text("
    ", src) + dat += text("", src) + dat += text("", src) + dat += text("", src) + dat += text("", src) + dat += text("", src) + dat += text("
    ", src) + dat += text("Using Internet for pictures", src) + src.data = dat + return + +/obj/item/weapon/game_kit/attack_hand(mob/user as mob, unused, flag) + + if (flag) + return ..() + else + user.machine = src + if (!( src.data )) + update() + user << browse(src.data, "window=game_kit") + return + return + +/obj/item/weapon/game_kit/Topic(href, href_list) + ..() + if ((usr.stat || usr.restrained())) + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + if (href_list["s_piece"]) + src.selected = href_list["s_piece"] + else + if (href_list["mode"]) + if (href_list["mode"] == "remove") + src.selected = "remove" + else + src.selected = null + else + if (href_list["sw_pic"]) + src.internet = !( src.internet ) + else + if (href_list["s_board"]) + if (!( src.selected )) + src.selected = href_list["s_board"] + else + var/tx = text2num(copytext(href_list["s_board"], 1, 2)) + var/ty = text2num(copytext(href_list["s_board"], 3, 4)) + if ((copytext(src.selected, 2, 3) == " " && length(src.selected) == 3)) + var/sx = text2num(copytext(src.selected, 1, 2)) + var/sy = text2num(copytext(src.selected, 3, 4)) + var/place = ((sy - 1) * 8 + sx) * 2 - 1 + src.selected = copytext(src.board_stat, place, place + 2) + if (place == 1) + src.board_stat = text("BB[]", copytext(src.board_stat, 3, 129)) + else + if (place == 127) + src.board_stat = text("[]BB", copytext(src.board_stat, 1, 127)) + else + if (place) + src.board_stat = text("[]BB[]", copytext(src.board_stat, 1, place), copytext(src.board_stat, place + 2, 129)) + place = ((ty - 1) * 8 + tx) * 2 - 1 + if (place == 1) + src.board_stat = text("[][]", src.selected, copytext(src.board_stat, 3, 129)) + else + if (place == 127) + src.board_stat = text("[][]", copytext(src.board_stat, 1, 127), src.selected) + else + if (place) + src.board_stat = text("[][][]", copytext(src.board_stat, 1, place), src.selected, copytext(src.board_stat, place + 2, 129)) + src.selected = null + else + if (src.selected == "remove") + var/place = ((ty - 1) * 8 + tx) * 2 - 1 + if (place == 1) + src.board_stat = text("BB[]", copytext(src.board_stat, 3, 129)) + else + if (place == 127) + src.board_stat = text("[]BB", copytext(src.board_stat, 1, 127)) + else + if (place) + src.board_stat = text("[]BB[]", copytext(src.board_stat, 1, place), copytext(src.board_stat, place + 2, 129)) + else + if (length(src.selected) == 2) + var/place = ((ty - 1) * 8 + tx) * 2 - 1 + if (place == 1) + src.board_stat = text("[][]", src.selected, copytext(src.board_stat, 3, 129)) + else + if (place == 127) + src.board_stat = text("[][]", copytext(src.board_stat, 1, 127), src.selected) + else + if (place) + src.board_stat = text("[][][]", copytext(src.board_stat, 1, place), src.selected, copytext(src.board_stat, place + 2, 129)) + src.add_fingerprint(usr) + update() + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(835) + return + +/obj/item/weapon/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + //SN src = null + del(src) + return + if(3.0) + if (prob(5)) + //SN src = null + del(src) + return + else + return + +/obj/item/weapon/blob_act() + return + + +//*****RM + +/obj/item/weapon/verb/move_to_top() + set src in oview(1) + + if(!istype(src.loc, /turf) || usr.stat || usr.restrained() ) + return + + var/turf/T = src.loc + + src.loc = null + + src.loc = T + + +//***** + + +/obj/item/weapon/proc/attack_self() + + return + +/obj/item/weapon/proc/talk_into(mob/M as mob, text) + + return + +/obj/item/weapon/proc/moved(mob/user as mob, old_loc as turf) + + return + +/obj/item/weapon/proc/dropped(mob/user as mob) + + return + +/obj/item/weapon/proc/afterattack() + + return + return + +/obj/item/weapon/proc/attack(mob/M as mob, mob/user as mob, def_zone) + + for(var/mob/O in viewers(M, null)) + O.show_message(text("\red [] has been attacked with [][] ", M, src, (user ? text(" by [].", user) : ".")), 1) + //Foreach goto(20) + var/power = src.force + if (M.health >= -10.0) + if (istype(M, /mob/human)) + var/mob/human/H = M + var/obj/item/weapon/organ/external/affecting = H.organs["chest"] + if (istype(user, /mob/human)) + if (!( def_zone )) + var/mob/user2 = user + var/t = user2.zone_sel.selecting + if ((t in list( "hair", "eyes", "mouth", "neck" ))) + t = "head" + def_zone = ran_zone(t) + if (H.organs[text("[]", def_zone)]) + affecting = H.organs[text("[]", def_zone)] + if (istype(affecting, /obj/item/weapon/organ/external)) + var/b_dam = (src.damtype == "brute" ? src.force : 0) + var/f_dam = (src.damtype == "fire" ? src.force : 0) + if (def_zone == "head") + if ((b_dam && (((H.head && H.head.brute_protect & 1) || (H.wear_mask && H.wear_mask.brute_protect & 1)) && prob(75)))) + if (prob(20)) + affecting.take_damage(power, 0) + else + H.show_message("\red You have been protected from a hit to the head.") + return + if ((b_dam && prob(src.force + affecting.brute_dam + affecting.burn_dam))) + var/time = rand(10, 120) + if (prob(90)) + if (H.paralysis < time) + H.paralysis = time + else + if (H.weakened < time) + H.weakened = time + H.stat = 1 + for(var/mob/O in viewers(M, null)) + O.show_message(text("\red [] has been knocked unconscious!", H), 1, "\red You hear someone fall.", 2) + //Foreach goto(514) + H.show_message(text("\red This was a []% hit. Roleplay it! (personality/memory change if the hit was severe enough)", time * 100 / 120)) + affecting.take_damage(b_dam, f_dam) + else + if (def_zone == "chest") + if ((b_dam && (((H.wear_suit && H.wear_suit.brute_protect & 2) || (H.w_uniform && H.w_uniform.brute_protect & 2)) && prob(90 - src.force)))) + H.show_message("\red You have been protected from a hit to the chest.") + return + if ((b_dam && prob(src.force + affecting.brute_dam + affecting.burn_dam))) + if (prob(50)) + if (H.weakened < 5) + H.weakened = 5 + for(var/mob/O in viewers(H, null)) + O.show_message(text("\red [] has been knocked down!", H), 1, "\red You hear someone fall.", 2) + //Foreach goto(738) + else + if (H.stunned < 2) + H.stunned = 2 + for(var/mob/O in viewers(H, null)) + O.show_message(text("\red [] has been stunned!", H), 1) + //Foreach goto(808) + H.stat = 1 + affecting.take_damage(b_dam, f_dam) + else + if (def_zone == "diaper") + if ((b_dam && (((H.wear_suit && H.wear_suit.brute_protect & 4) || (H.w_uniform && H.w_uniform.brute_protect & 4)) && prob(90 - src.force)))) + H.show_message("\red You have been protected from a hit to the lower chest/diaper.") + return + if ((b_dam && prob(src.force + affecting.brute_dam + affecting.burn_dam))) + if (prob(50)) + if (H.weakened < 5) + H.weakened = 5 + for(var/mob/O in viewers(H, null)) + O.show_message(text("\red [] has been knocked down!", H), 1, "\red You hear someone fall.", 2) + //Foreach goto(1014) + else + if (H.stunned < 2) + H.stunned = 2 + for(var/mob/O in viewers(H, null)) + O.show_message(text("\red [] has been stunned!", H), 1) + //Foreach goto(1084) + H.stat = 1 + affecting.take_damage(b_dam, f_dam) + else + affecting.take_damage(b_dam, f_dam) + H.UpdateDamageIcon() + else + switch(src.damtype) + if("brute") + M.bruteloss += power + if("fire") + M.fireloss += power + else + M.health = 100 - M.oxyloss - M.toxloss - M.fireloss - M.bruteloss + src.add_fingerprint(user) + return + +/obj/item/weapon/bedsheet/ex_act(severity) + + if (severity <= 2) + //SN src = null + del(src) + return + return + +/obj/item/weapon/bedsheet/attack_self(mob/user as mob) + + user.drop_item() + src.layer = 5 + add_fingerprint(user) + return + +/obj/item/weapon/bedsheet/burn(fi_amount) + + if (fi_amount > 3.0E7) + spawn( 0 ) + var/t = src.icon_state + src.icon_state = "" + src.icon = 'b_items.dmi' + flick(text("[]", t), src) + spawn( 14 ) + //SN src = null + del(src) + return + return + return + return + +/obj/item/weapon/wrapping_paper/examine() + set src in oview(1) + + ..() + usr << text("There is about [] square units of paper left!", src.amount) + return + +/obj/item/weapon/wrapping_paper/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (!( locate(/obj/table, src.loc) )) + user << "\blue You MUST put the paper on a table!" + if (W.w_class < 4) + if ((istype(user.l_hand, /obj/item/weapon/wirecutters) || istype(user.r_hand, /obj/item/weapon/wirecutters))) + var/a_used = 2 ** (src.w_class - 1) + if (src.amount < a_used) + user << "\blue You need more paper!" + return + else + src.amount -= a_used + user.drop_item() + var/obj/item/weapon/gift/G = new /obj/item/weapon/gift( src.loc ) + G.size = W.w_class + G.w_class = G.size + 1 + G.icon_state = text("gift[]", G.size) + G.gift = W + W.loc = G + G.add_fingerprint(user) + W.add_fingerprint(user) + src.add_fingerprint(user) + if (src.amount <= 0) + new /obj/item/weapon/c_tube( src.loc ) + //SN src = null + del(src) + return + else + user << "\blue You need scissors!" + else + user << "\blue The object is FAR too large!" + return + +/obj/item/weapon/gift/attack_self(mob/user as mob) + + src.gift.loc = user + if (user.hand) + user.l_hand = src.gift + else + user.r_hand = src.gift + src.gift.layer = 20 + src.gift.add_fingerprint(user) + //SN src = null + del(src) + return + return + +/obj/item/weapon/a_gift/ex_act() + + //SN src = null + del(src) + return + return + +/obj/item/weapon/a_gift/burn(fi_amount) + + if (fi_amount > 900000.0) + //SN src = null + del(src) + return + return + +/obj/item/weapon/a_gift/attack_self(mob/M as mob) + + switch(pick("pill", "flash", "t_gun", "l_gun", "shield", "sword")) + if("pill") + var/obj/item/weapon/m_pill/superpill/W = new /obj/item/weapon/m_pill/superpill( M ) + if (M.hand) + M.l_hand = W + else + M.r_hand = W + W.layer = 20 + W.add_fingerprint(M) + //SN src = null + del(src) + return + if("flash") + var/obj/item/weapon/flash/W = new /obj/item/weapon/flash( M ) + if (M.hand) + M.l_hand = W + else + M.r_hand = W + W.layer = 20 + W.add_fingerprint(M) + //SN src = null + del(src) + return + if("l_gun") + var/obj/item/weapon/gun/energy/laser_gun/W = new /obj/item/weapon/gun/energy/laser_gun( M ) + if (M.hand) + M.l_hand = W + else + M.r_hand = W + W.layer = 20 + W.add_fingerprint(M) + //SN src = null + del(src) + return + if("t_gun") + var/obj/item/weapon/gun/energy/taser_gun/W = new /obj/item/weapon/gun/energy/taser_gun( M ) + if (M.hand) + M.l_hand = W + else + M.r_hand = W + W.layer = 20 + W.add_fingerprint(M) + //SN src = null + del(src) + return + if("shield") + var/obj/item/weapon/shield/W = new /obj/item/weapon/shield( M ) + if (M.hand) + M.l_hand = W + else + M.r_hand = W + W.layer = 20 + W.add_fingerprint(M) + //SN src = null + del(src) + return + if("sword") + var/obj/item/weapon/sword/W = new /obj/item/weapon/sword( M ) + if (M.hand) + M.l_hand = W + else + M.r_hand = W + W.layer = 20 + W.add_fingerprint(M) + //SN src = null + del(src) + return + else + return + +/obj/item/weapon/flashbang/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (istype(W, /obj/item/weapon/screwdriver)) + if (src.det_time == 30) + src.det_time = 30 + user.show_message("\blue You set the flashbang for 3 second detonation time.") + src.desc = "It is set to detonate in 3 seconds." + else + src.det_time = 100 + user.show_message("\blue You set the flashbang for 10 second detonation time.") + src.desc = "It is set to detonate in 10 seconds." + src.add_fingerprint(user) + return + +/obj/item/weapon/flashbang/afterattack(atom/target as mob|obj|turf|area, mob/user as mob) + + if (user.equipped() == src) + if (!( src.state )) + user << "\red You prime the flashbang! [det_time/10] seconds!" + src.state = 1 + src.icon_state = "flashbang1" + spawn( src.det_time ) + prime() + return + user.dir = get_dir(user, target) + user.drop_item() + var/t = (isturf(target) ? target : target.loc) + walk_towards(src, t, 3) + src.add_fingerprint(user) + return + +/obj/item/weapon/flashbang/attack_paw(mob/user as mob) + + return src.attack_hand(user) + + +/obj/item/weapon/flashbang/attack_hand() + + walk(src, null, null) + src.throwspeed = 20 + ..() + return + +/obj/item/weapon/flashbang/proc/prime() + + var/turf/T = get_turf(src) + T.firelevel = T.poison + for(var/mob/M in viewers(T, null)) + if (locate(/obj/item/weapon/cloaking_device, M)) + for(var/obj/item/weapon/cloaking_device/S in M) + S.active = 0 + S.icon_state = "shield0" + //Foreach goto(72) + if ((get_dist(M, T) <= 2 || src.loc == M.loc || src.loc == M)) + flick("e_flash", M.flash) + M.stunned = 10 + M.weakened = 3 + M << "\red BANG" + if ((prob(14) || (M == src.loc && prob(70)))) + M.ear_damage += rand(10, 20) + else + if (prob(30)) + M.ear_damage += rand(7, 14) + if (!( M.paralysis )) + M.eye_stat += rand(10, 15) + if (prob(10)) + M.eye_stat += 7 + M.ear_deaf += 30 + if (M == src.loc) + M.eye_stat += 10 + if (prob(60)) + if (istype(M, /mob/human)) + var/mob/human/H = M + if (!( istype(H.ears, /obj/item/weapon/clothing/ears/earmuffs) )) + M.ear_damage += 15 + M.ear_deaf += 60 + else + M.ear_damage += 15 + M.ear_deaf += 60 + else + if (get_dist(M, T) <= 5) + flick("e_flash", M.flash) + if (!( istype(M, /mob/human) )) + M.stunned = 7 + M.weakened = 2 + else + var/mob/human/H = M + M.ear_deaf += 10 + if (prob(20)) + M.ear_damage += 10 + if ((!( istype(H.glasses, /obj/item/weapon/clothing/glasses/sunglasses) ) || M.paralysis)) + M.stunned = 7 + M.weakened = 2 + else + if (!( M.paralysis )) + M.eye_stat += rand(1, 3) + M << "\red BANG" + else + if (!( istype(M, /mob/human) )) + flick("flash", M.flash) + else + var/mob/human/H = M + if (!( istype(H.glasses, /obj/item/weapon/clothing/glasses/sunglasses) )) + flick("flash", M.flash) + M.eye_stat += rand(1, 2) + M.ear_deaf += 5 + M << "\red BANG" + if (M.eye_stat >= 20) + M << "\red Your eyes start to burn badly!" + M.disabilities |= 1 + if (prob(M.eye_stat - 20 + 1)) + M << "\red You go blind!" + M.sdisabilities |= 1 + if (M.ear_damage >= 15) + M << "\red Your ears start to ring badly!" + if (prob(M.ear_damage - 10 + 5)) + M << "\red You go deaf!" + M.sdisabilities |= 4 + else + if (M.ear_damage >= 5) + M << "\red Your ears start to ring!" + //Foreach goto(39) + //SN src = null + + for(var/obj/blob/B in view(8,T)) + var/damage = round(30/(get_dist(B,T)+1)) + B.health -= damage + B.update() + + + del(src) + return + return + +/obj/item/weapon/flashbang/attack_self(mob/user as mob) + + if (!( src.state )) + user << "\red You prime the flashbang! [det_time/10] seconds!" + src.state = 1 + src.icon_state = "flashbang1" + add_fingerprint(user) + spawn( src.det_time ) + prime() + return + return + +/obj/item/weapon/flash/attack(mob/M as mob, mob/user as mob) + + if (src.shots > 0) + var/safety = null + if (istype(M, /mob/human)) + var/mob/human/H = M + if (istype(H.glasses, /obj/item/weapon/clothing/glasses/sunglasses)) + safety = 1 + if (!( safety )) + M.weakened = 10 + if (M.client) + if (!( safety )) + if ((M.eye_stat > 15 && prob(M.eye_stat + 50))) + flick("e_flash", M.flash) + M.eye_stat += rand(1, 2) + else + flick("flash", M.flash) + M.eye_stat += rand(0, 2) + if (M.eye_stat >= 20) + M << "\red You eyes start to burn badly!" + M.disabilities |= 1 + if (prob(M.eye_stat - 20 + 1)) + M << "\red You go blind!" + M.sdisabilities |= 1 + for(var/mob/O in viewers(user, null)) + O.show_message(text("\red [] blinds [] with the flash!", user, M)) + //Foreach goto(229) + src.attack_self(user, 1) + return + +/obj/item/weapon/flash/attack_self(mob/user as mob, flag) + + if ( (world.time + 600) > src.l_time) + src.shots = 5 + if (src.shots < 1) + user.show_message("\red *click* *click*", 2) + return + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + user << "\red You don't have the dexterity to do this!" + return + src.l_time = world.time + add_fingerprint(user) + src.shots-- + flick("flash2", src) + if (!( flag )) + for(var/mob/M in oviewers(3, null)) + if (prob(50)) + if (locate(/obj/item/weapon/cloaking_device, M)) + for(var/obj/item/weapon/cloaking_device/S in M) + S.active = 0 + S.icon_state = "shield0" + //Foreach goto(201) + if (M.client) + var/safety = null + if (istype(M, /mob/human)) + var/mob/human/H = M + if (istype(H.glasses, /obj/item/weapon/clothing/glasses/sunglasses)) + safety = 1 + if (!( safety )) + flick("flash", M.flash) + //Foreach goto(160) + return + +/obj/item/weapon/locator/attack_self(mob/user as mob) + + user.machine = src + var/dat + if (src.temp) + dat = text("[]

    Clear", src.temp, src) + else + dat = text("Persistent Signal Locator
    \nFrequency: -- [] ++
    \nRefresh", src, src, src.freq, src, src, src) + user << browse(dat, "window=radio") + return + +/obj/item/weapon/locator/Topic(href, href_list) + ..() + if (usr.stat || usr.restrained()) + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["refresh"]) + src.temp = "Persistent Signal Locator
    " + var/turf/sr = get_turf(src) + if (sr) + src.temp += "Located Beacons:
    " + for(var/obj/item/weapon/radio/beacon/W in world) + if (W.freq == src.freq) + var/turf/tr = get_turf(W) + if ((tr.z == sr.z && tr)) + var/direct = max(abs(tr.x - sr.x), abs(tr.y - sr.y)) + if (direct < 5) + direct = "very strong" + else + if (direct < 10) + direct = "strong" + else + if (direct < 20) + direct = "weak" + else + direct = "very weak" + src.temp += text("[]-[]-[]
    ", W.code, dir2text(get_dir(sr, tr)), direct) + //Foreach goto(114) + src.temp += "Extranneous Signals:
    " + for(var/obj/item/weapon/implant/tracking/W in world) + //Label_332: + if (W.freq == src.freq) + if ((!( W.implanted ) || !( ismob(W.loc) ))) + continue //goto Label_332 + else + var/mob/M = W.loc + if (M.stat == 2) + if (M.timeofdeath + 6000 < world.time) + continue //goto(332) + var/turf/tr = get_turf(W) + if ((tr.z == sr.z && tr)) + var/direct = max(abs(tr.x - sr.x), abs(tr.y - sr.y)) + if (direct < 20) + if (direct < 5) + direct = "very strong" + else + if (direct < 10) + direct = "strong" + else + direct = "weak" + src.temp += text("[]-[]-[]
    ", W.id, dir2text(get_dir(sr, tr)), direct) + //Foreach goto(332) + src.temp += text("You are at \[[],[],[]\] in orbital coordinates.

    Refresh
    ", sr.x, sr.y, sr.z, src) + else + src.temp += "Processing Error: Unable to locate orbital position.
    " + else + if (href_list["freq"]) + src.freq += text2num(href_list["freq"]) + if (src.freq * 10 % 2 == 0) + src.freq += 0.1 + src.freq = min(148.9, src.freq) + src.freq = max(144.1, src.freq) + else + if (href_list["temp"]) + src.temp = null + if (istype(src.loc, /mob)) + attack_self(src.loc) + else + for(var/mob/M in viewers(1, src)) + if (M.client) + src.attack_self(M) + //Foreach goto(749) + return + +/obj/item/weapon/syndicate_uplink/proc/explode() + + var/turf/T = get_turf(src.loc) + T.firelevel = T.poison + T.res_vars() + var/sw = locate(max(T.x - 4, 1), max(T.y - 4, 1), T.z) + var/ne = locate(min(T.x + 4, world.maxx), min(T.y + 4, world.maxy), T.z) + for(var/turf/U in block(sw, ne)) + var/zone = 4 + if ((U.y <= T.y + 2 && U.y >= T.y - 2 && U.x <= T.x + 2 && U.x >= T.x - 2)) + zone = 3 + for(var/atom/A as mob|obj|turf|area in U) + A.ex_act(zone) + //Foreach goto(209) + U.ex_act(zone) + U.buildlinks() + //Foreach goto(109) + //src.master = null + del(src.master) + //SN src = null + del(src) + return + return + +/obj/item/weapon/syndicate_uplink/attack_self(mob/user as mob) + + user.machine = src + var/dat + if (src.selfdestruct) + dat = "Self Destructing..." + else + if (src.temp) + dat = text("[]

    Clear", src.temp, src) + else + dat = text("Syndicate Uplink Console:
    \nTele-Crystals left: []
    \nRequest item: (uses 1 tele-crystal)
    \nElectromagnet Card
    \nSleepy Pen
    \nCyanide Pill
    \nCloaking Device
    \nRevolver
    \nImplant- Freedom (with injector)
    \n
    \nSelf-Destruct", src.uses, src, src, src, src, src, src, src) + user << browse(dat, "window=radio") + return + +/obj/item/weapon/syndicate_uplink/Topic(href, href_list) + ..() + if (usr.stat || usr.restrained()) + return + var/mob/human/H = usr + if (!( istype(H, /mob/human) )) + return 1 + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["item_emag"]) + if (src.uses > 0) + src.uses-- + new /obj/item/weapon/card/emag( H.loc ) + else + if (href_list["item_sleepypen"]) + if (src.uses > 0) + src.uses-- + new /obj/item/weapon/pen/sleepypen( H.loc ) + else + if (href_list["item_cyanide"]) + if (src.uses > 0) + src.uses-- + new /obj/item/weapon/m_pill/cyanide( H.loc ) + else + if (href_list["item_cloak"]) + if (src.uses > 0) + src.uses-- + new /obj/item/weapon/cloaking_device( H.loc ) + else + if (href_list["item_revolver"]) + if (src.uses > 0) + src.uses-- + var/obj/item/weapon/gun/revolver/O = new /obj/item/weapon/gun/revolver( H.loc ) + O.bullets = 7 + else + if (href_list["item_imp_freedom"]) + if (src.uses > 0) + src.uses-- + var/obj/item/weapon/implanter/O = new /obj/item/weapon/implanter( H.loc ) + O.imp = new /obj/item/weapon/implant/freedom( O ) + src.temp = "The implant is triggered by chuckling and has a random amount of uses." + if (href_list["selfdestruct"]) + src.temp = text("Self-Destruct", src) + if (href_list["selfdestruct2"]) + src.selfdestruct = 1 + spawn( 30 ) + explode() + return + else + if (href_list["temp"]) + src.temp = null + if (istype(src.loc, /mob)) + attack_self(src.loc) + else + for(var/mob/M in viewers(1, src)) + if (M.client) + src.attack_self(M) + //Foreach goto(488) + return + +/obj/item/weapon/sword/attack(target as mob, mob/user as mob) + + ..() + if (user.key == "Exadv1") + user.next_move = 1 + return + +/obj/item/weapon/sword/attack_self(mob/user as mob) + + src.active = !( src.active ) + if (src.active) + user << "\blue The sword is now active." + src.force = 40 + src.icon_state = "sword1" + src.w_class = 4 + else + user << "\blue The sword can now be concealed." + src.force = 3 + src.icon_state = "sword0" + src.w_class = 2 + src.add_fingerprint(user) + return + +/obj/item/weapon/shield/attack_self(mob/user as mob) + + src.active = !( src.active ) + if (src.active) + user << "\blue The shield is now active." + src.force = 40 + src.icon_state = "shield1" + else + user << "\blue The shield is now inactive." + src.force = 3 + src.icon_state = "shield0" + src.add_fingerprint(user) + return + +/obj/item/weapon/cloaking_device/attack_self(mob/user as mob) + + src.active = !( src.active ) + if (src.active) + user << "\blue The cloaking device is now active." + src.force = 40 + src.icon_state = "shield1" + else + user << "\blue The cloaking device is now inactive." + src.force = 3 + src.icon_state = "shield0" + src.add_fingerprint(user) + return + +/obj/item/weapon/ammo/proc/update_icon() + + return + +/obj/item/weapon/ammo/a357/update_icon() + + src.icon_state = text("357-[]", src.amount_left) + src.desc = text("There are [] bullet\s left!", src.amount_left) + return + +/obj/item/weapon/gun/revolver/examine() + set src in usr + + src.desc = text("There are [] bullet\s left! Uses 357.", src.bullets) + ..() + return + +/obj/item/weapon/gun/revolver/attackby(obj/item/weapon/ammo/a357/A as obj, mob/user as mob) + + if (istype(A, /obj/item/weapon/ammo/a357)) + if (src.bullets >= 7) + user << "\blue It's already fully loaded!" + return 1 + if (A.amount_left <= 0) + user << "\red There is no more bullets!" + return 1 + if (A.amount_left < (7 - src.bullets)) + src.bullets += A.amount_left + user << text("\red You reload [] bullet\s!", A.amount_left) + A.amount_left = 0 + else + user << text("\red You reload [] bullet\s!", 7 - src.bullets) + A.amount_left -= 7 - src.bullets + src.bullets = 7 + A.update_icon() + return 1 + return + +/obj/item/weapon/gun/revolver/afterattack(atom/target as mob|obj|turf|area, mob/user as mob, flag) + + if (flag) + return + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + user << "\red You don't have the dexterity to do this!" + return + src.add_fingerprint(user) + if (src.bullets < 1) + user.show_message("\red *click* *click*", 2) + return + src.bullets-- + for(var/mob/O in viewers(user, null)) + O.show_message(text("\red [] fires a revolver at []!", user, target), 1, "\red You hear a gunshot", 2) + //Foreach goto(122) + var/turf/T = user.loc + var/turf/U = (istype(target, /atom/movable) ? target.loc : target) + if ((!( U ) || !( T ))) + return + while(!( istype(U, /turf) )) + U = U.loc + if (!( istype(T, /turf) )) + return + if (U == T) + user.las_act() + return + var/obj/bullet/A = new /obj/bullet( user.loc ) + if (!( istype(U, /turf) )) + //A = null + del(A) + return + A.current = U + A.yo = U.y - T.y + A.xo = U.x - T.x + user.next_move = world.time + 4 + spawn( 0 ) + A.process() + return + return + +/obj/item/weapon/gun/revolver/attack(mob/M as mob, mob/user as mob) + + src.add_fingerprint(user) + var/mob/human/H = M + +// ******* Check + + if ((istype(H, /mob/human) && istype(H, /obj/item/weapon/clothing/head) && H.flags & 8 && prob(80))) + M << "\red The helmet protects you from being hit hard in the head!" + return + if ((user.a_intent == "hurt" && src.bullets > 0)) + if (prob(20)) + if (M.paralysis < 10) + M.paralysis = 10 + else + if (M.weakened < 10) + M.weakened = 10 + src.bullets-- + src.force = 75 + ..() + src.force = 60 + M.stat = 1 + for(var/mob/O in viewers(M, null)) + O.show_message(text("\red [] has been shot point-blank by []!", M, user), 1, "\red You hear someone fall", 2) + //Foreach goto(192) + else + if (prob(50)) + if (M.paralysis < 60) + M.paralysis = 60 + else + if (M.weakened < 60) + M.weakened = 60 + src.force = 30 + ..() + M.stat = 1 + for(var/mob/O in viewers(M, null)) + if ((O.client && !( O.blinded ))) + O.show_message(text("\red [] has been pistol whipped []!", M, user), 1, "\red You hear someone fall", 2) + //Foreach goto(315) + return + +/obj/item/weapon/gun/energy/proc/update_icon() + + var/ratio = src.charges / 10 + ratio = round(ratio, 0.25) * 100 + src.icon_state = text("gun[]", ratio) + return + +/obj/item/weapon/gun/energy/laser_gun/afterattack(atom/target as mob|obj|turf|area, mob/user as mob, flag) + + if (flag) + return + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + user << "\red You don't have the dexterity to do this!" + return + src.add_fingerprint(user) + if (src.charges < 1) + user.show_message("\red *click* *click*", 2) + return + src.charges-- + update_icon() + var/turf/T = user.loc + var/atom/U = (istype(target, /atom/movable) ? target.loc : target) + if ((!( U ) || !( T ))) + return + while(!( istype(U, /turf) )) + U = U.loc + if (!( istype(T, /turf) )) + return + if (U == T) + user.las_act() + return + var/obj/beam/a_laser/A = new /obj/beam/a_laser( user.loc ) + if (!( istype(U, /turf) )) + //A = null + del(A) + return + A.current = U + A.yo = U.y - T.y + A.xo = U.x - T.x + user.next_move = world.time + 4 + spawn( 0 ) + A.process() + return + return + +/obj/item/weapon/gun/energy/laser_gun/attack(mob/M as mob, mob/user as mob) + + ..() + src.add_fingerprint(user) + if ((prob(30) && M.stat < 2)) + var/mob/human/H = M + +// ******* Check + if ((istype(H, /mob/human) && istype(H, /obj/item/weapon/clothing/head) && H.flags & 8 && prob(80))) + M << "\red The helmet protects you from being hit hard in the head!" + return + var/time = rand(10, 120) + if (prob(90)) + if (M.paralysis < time) + M.paralysis = time + else + if (M.weakened < time) + M.weakened = time + M.stat = 1 + for(var/mob/O in viewers(M, null)) + O.show_message(text("\red [] has been knocked unconscious!", M), 1, "\red You hear someone fall", 2) + //Foreach goto(181) + M.show_message(text("\red This was a []% hit. Roleplay it! (personality/memory change if the hit was severe enough)", time * 100 / 120)) + return + +/obj/item/weapon/gun/energy/taser_gun/update_icon() + + var/ratio = src.charges / 10 + ratio = round(ratio, 0.25) * 100 + src.icon_state = text("t_gun[]", ratio) + return + +/obj/item/weapon/gun/energy/taser_gun/afterattack(atom/target as mob|obj|turf|area, mob/user as mob, flag) + + if (flag) + return + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + user << "\red You don't have the dexterity to do this!" + return + src.add_fingerprint(user) + if (src.charges < 1) + user.show_message("\red *click* *click*", 2) + return + src.charges-- + update_icon() + var/turf/T = user.loc + var/turf/U = (istype(target, /atom/movable) ? target.loc : target) + if ((!( U ) || !( T ))) + return + while((!( istype(U, /turf) ) && U)) + U = U.loc + if (!( istype(T, /turf) )) + return + if (U == T) + user.las_act(1) + return + var/obj/beam/a_laser/s_laser/A = new /obj/beam/a_laser/s_laser( user.loc ) + if (!( istype(U, /turf) )) + //A = null + del(A) + return + A.current = U + A.yo = U.y - T.y + A.xo = U.x - T.x + spawn( 0 ) + A.process() + return + return + +/obj/item/weapon/gun/energy/taser_gun/attack(mob/M as mob, mob/user as mob) + + src.add_fingerprint(user) + var/mob/human/H = M + + // ******* Check + if ((istype(H, /mob/human) && istype(H, /obj/item/weapon/clothing/head) && H.flags & 8 && prob(80))) + M << "\red The helmet protects you from being hit hard in the head!" + return + if (user.a_intent == "hurt") + if (prob(20)) + if (M.paralysis < 10) + M.paralysis = 10 + else + if (M.weakened < 10) + M.weakened = 10 + if (M.stuttering < 10) + M.stuttering = 10 + ..() + M.stat = 1 + for(var/mob/O in viewers(M, null)) + O.show_message(text("\red [] has been knocked unconscious!", M), 1, "\red You hear someone fall", 2) + //Foreach goto(182) + else + if (prob(50)) + if (M.paralysis < 60) + M.paralysis = 60 + else + if (M.weakened < 60) + M.weakened = 60 + if (M.stuttering < 60) + M.stuttering = 60 + M.stat = 1 + for(var/mob/O in viewers(M, null)) + if ((O.client && !( O.blinded ))) + O.show_message(text("\red [] has been stunned with the taser gun by []!", M, user), 1, "\red You hear someone fall", 2) + //Foreach goto(309) + return + +/obj/item/weapon/pill_canister/New() + + ..() + src.pixel_x = rand(-10.0, 10) + src.pixel_y = rand(-10.0, 10) + return + +/obj/item/weapon/pill_canister/placebo/New() + + ..() + spawn( 2 ) + var/obj/item/weapon/m_pill/P = new /obj/item/weapon/m_pill( src ) + P.amount = 30 + return + return + +/obj/item/weapon/pill_canister/antitoxin/New() + + ..() + spawn( 2 ) + var/obj/item/weapon/m_pill/antitoxin/P = new /obj/item/weapon/m_pill/antitoxin( src ) + P.amount = 30 + return + return + +/obj/item/weapon/pill_canister/Tourette/New() + + ..() + spawn( 2 ) + var/obj/item/weapon/m_pill/Tourette/P = new /obj/item/weapon/m_pill/Tourette( src ) + P.amount = 30 + return + return + +/obj/item/weapon/pill_canister/sleep/New() + + ..() + spawn( 2 ) + var/obj/item/weapon/m_pill/sleep/P = new /obj/item/weapon/m_pill/sleep( src ) + P.amount = 30 + return + return + +/obj/item/weapon/pill_canister/epilepsy/New() + + ..() + spawn( 2 ) + var/obj/item/weapon/m_pill/epilepsy/P = new /obj/item/weapon/m_pill/epilepsy( src ) + P.amount = 30 + return + return + +/obj/item/weapon/pill_canister/cough/New() + + ..() + spawn( 2 ) + var/obj/item/weapon/m_pill/cough/P = new /obj/item/weapon/m_pill/cough( src ) + P.amount = 30 + return + return + +/obj/item/weapon/pill_canister/examine() + set src in view(1) + + ..() + if (src.contents.len) + var/pills = 0 + for(var/obj/item/weapon/m_pill/M in src) + pills += M.amount + //Foreach goto(39) + usr << text("\blue There are [] pills inside!", pills) + else + usr << "\blue It looks empty!" + return + +/obj/item/weapon/pill_canister/attack_paw(mob/user as mob) + + if ((ticker && ticker.mode == "monkey")) + return src.attack_hand(user) + return + +/obj/item/weapon/pill_canister/attack_hand(mob/user as mob) + + if ((user.r_hand == src || user.l_hand == src)) + var/obj/item/weapon/m_pill/P = pick(src.contents) + if (P) + P.amount-- + var/obj/item/weapon/m_pill/W = new P.type( user ) + if (user.hand) + user.l_hand = W + else + user.r_hand = W + W.layer = 20 + if (P.amount <= 0) + //P = null + del(P) + W.add_fingerprint(user) + src.add_fingerprint(user) + else + return ..() + return + +/obj/item/weapon/pill_canister/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (istype(W, /obj/item/weapon/m_pill)) + var/pills = 0 + for(var/obj/item/weapon/m_pill/M in src) + pills += M.amount + //Foreach goto(34) + if (pills > 30) + usr << "\blue There are too many pills inside!" + return + for(var/obj/item/weapon/m_pill/M in src) + if (M.type == W.type) + M.amount += W:amount + //W = null + del(W) + return + //Foreach goto(97) + if (W) + user.drop_item() + W.loc = src + src.add_fingerprint(user) + W.add_fingerprint(user) + if (istype(W, /obj/item/weapon/pen)) + var/t = input(user, "What would you like the label to be?", text("[]", src.name), null) as text + if (user.equipped() != W) + return + if (src.loc != user) + return + t = html_encode(t) + if (t) + src.name = text("Pill Canister- '[]'", t) + else + src.name = "Pill Canister" + return + +/obj/item/weapon/m_pill/proc/ingest(mob/M as mob) + + src.amount-- + if (src.amount <= 0) + //SN src = null + del(src) + return + return + +/obj/item/weapon/m_pill/attack_hand(mob/user as mob) + + if ((user.r_hand == src || user.l_hand == src)) + src.add_fingerprint(user) + var/obj/item/weapon/m_pill/F = new src.type( user ) + F.amount = 1 + src.amount-- + if (user.hand) + user.l_hand = F + else + user.r_hand = F + F.layer = 20 + F.add_fingerprint(user) + if (src.amount < 1) + //SN src = null + del(src) + return + else + ..() + return + +/obj/item/weapon/m_pill/attack(mob/M as mob, mob/user as mob) + + if ((user != M && istype(M, /mob/human))) + for(var/mob/O in viewers(M, null)) + O.show_message(text("\red [] is forcing [] to swallow the []", user, M, src), 1) + //Foreach goto(41) + var/obj/equip_e/human/O = new /obj/equip_e/human( ) + O.source = user + O.target = M + O.item = src + O.s_loc = user.loc + O.t_loc = M.loc + O.place = "pill" + M.requests += O + spawn( 0 ) + O.process() + return + else + src.add_fingerprint(user) + ingest(M) + return + +/obj/item/weapon/m_pill/superpill/ingest(mob/M as mob) + + M.fireloss = 0 + M.toxloss = 0 + M.bruteloss = 0 + M.oxyloss = 0 + M.paralysis = 5 + M.stunned = 15 + M.weakened = 10 + M.health = 100 - M.oxyloss - M.toxloss - M.fireloss - M.bruteloss + ..() + return + +/obj/item/weapon/m_pill/sleep/ingest(mob/M as mob) + + if (M.drowsyness < 600) + M.drowsyness += 600 + M.drowsyness = min(M.drowsyness, 1800) + if (prob(25)) + M.paralysis += 60 + else + if (prob(50)) + M.paralysis += 30 + ..() + return + +/obj/item/weapon/m_pill/cyanide/ingest(mob/M as mob) + + if (M.health > -50.0) + M.toxloss += M.health + 50 + M.health = 100 - M.oxyloss - M.toxloss - M.fireloss - M.bruteloss + ..() + return + +/obj/item/weapon/m_pill/antitoxin/ingest(mob/M as mob) + + if ((prob(50) && M.drowsyness < 600)) + M.drowsyness += 60 + M.drowsyness = min(M.drowsyness, 600) + if (M.health >= 0) + if (M.toxloss <= 20) + M.toxloss = 0 + else + M.toxloss -= 20 + M.antitoxs += 600 + M.health = 100 - M.oxyloss - M.toxloss - M.fireloss - M.bruteloss + ..() + return + +/obj/item/weapon/m_pill/cough/ingest(mob/M as mob) + + if ((prob(75) && M.drowsyness < 600)) + M.drowsyness += 60 + M.drowsyness = min(M.drowsyness, 600) + M.r_ch_cou += 1200 + ..() + return + +/obj/item/weapon/m_pill/epilepsy/ingest(mob/M as mob) + + if (M.drowsyness < 600) + M.drowsyness += rand(2, 3) * 60 + M.drowsyness = min(M.drowsyness, 600) + M.r_epil += 1200 + ..() + return + +/obj/item/weapon/m_pill/Tourette/ingest(mob/M as mob) + + if (M.drowsyness < 600) + M.drowsyness += rand(3, 5) * 60 + M.drowsyness = min(M.drowsyness, 600) + M.r_Tourette += 1200 + ..() + return + +/obj/item/weapon/m_pill/examine() + set src in view(1) + + ..() + usr << text("\blue There are [] pills left on the stack!", src.amount) + return + +/obj/item/weapon/m_pill/attackby(obj/item/weapon/m_pill/W as obj, mob/user as mob) + + if (!( istype(W, src.type) )) + return + if (W.amount == 5) + return + if (W.amount + src.amount > 5) + src.amount = W.amount + src.amount - 5 + W.amount = 5 + else + W.amount += W.amount + //SN src = null + del(src) + return + return + +/obj/item/weapon/handcuffs/attack(mob/M as mob, mob/user as mob) + + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + user << "\red You don't have the dexterity to do this!" + return + if (istype(M, /mob/human)) + var/obj/equip_e/human/O = new /obj/equip_e/human( ) + O.source = user + O.target = M + O.item = user.equipped() + O.s_loc = user.loc + O.t_loc = M.loc + O.place = "handcuff" + M.requests += O + spawn( 0 ) + O.process() + return + else + var/obj/equip_e/monkey/O = new /obj/equip_e/monkey( ) + O.source = user + O.target = M + O.item = user.equipped() + O.s_loc = user.loc + O.t_loc = M.loc + O.place = "handcuff" + M.requests += O + spawn( 0 ) + O.process() + return + return + +/obj/item/weapon/throwing(t_dir, rs) + + if (!( rs )) + rs = src.r_speed + ..(t_dir, rs) + return + +/obj/item/weapon/examine() + set src in view() + + var/t + switch(src.w_class) + if(1.0) + t = "tiny" + if(2.0) + t = "small" + if(3.0) + t = "normal-sized" + if(4.0) + t = "bulky" + if(5.0) + t = "huge" + else + usr << text("This is a \icon[][]. It is a [] item.", src, src.name, t) + ..() + return + +/obj/item/weapon/attack_hand(mob/user as mob) + + if (istype(src.loc, /obj/item/weapon/storage)) + for(var/mob/M in range(1, src.loc)) + if (M.s_active == src.loc) + if (M.client) + M.client.screen -= src + //Foreach goto(34) + src.throwing = 0 + if (src.loc == user) + user.u_equip(src) + if (user.hand) + user.l_hand = src + else + user.r_hand = src + src.loc = user + src.layer = 20 + add_fingerprint(user) + user.UpdateClothing() + return + +/obj/item/weapon/attack_paw(mob/user as mob) + + if (istype(src.loc, /obj/item/weapon/storage)) + for(var/mob/M in range(1, src.loc)) + if (M.s_active == src.loc) + if (M.client) + M.client.screen -= src + //Foreach goto(34) + src.throwing = 0 + if (src.loc == user) + user.u_equip(src) + if (user.hand) + user.l_hand = src + else + user.r_hand = src + src.loc = user + src.layer = 20 + user.UpdateClothing() + return + +/obj/item/weapon/wire/proc/update() + + if (src.amount > 1) + src.icon_state = "spool_wire" + src.desc = text("This is just spool of regular insulated wire. It consists of about [] unit\s of wire.", src.amount) + else + src.icon_state = "item_wire" + src.desc = "This is just a simple piece of regular insulated wire." + return + +/obj/item/weapon/wire/attack_self(mob/user as mob) + + if (src.laying) + src.laying = 0 + user << "\blue Your done laying wire!" + else + user << "\blue You are not using this to lay wire..." + return + +/obj/item/weapon/card/data/verb/label(t as text) + set src in usr + + if (t) + src.name = text("Data Disk- '[]'", t) + else + src.name = "Data Disk" + src.add_fingerprint(usr) + return + +/obj/item/weapon/card/id/attack_self(mob/user as mob) + + for(var/mob/O in viewers(user, null)) + O.show_message(text("[] shows you: \icon[] []: assignment: []", user, src, src.name, src.assignment), 1) + //Foreach goto(20) + src.add_fingerprint(user) + return + +/obj/item/weapon/card/id/verb/read() + set src in usr + + usr << text("\icon[] []: The current assignment on the card is [].", src, src.name, src.assignment) + usr << "\blue The rubric for the 4 access numbers is: general>lab-engine-systems" + return + +// new check_access for ID cards +// returns 1 if passed check, 0 if denied + +/obj/item/weapon/card/id/proc/check_access(var/access, var/allowed) + + if(!access && !allowed) // if neither set, allow by default + return 1 + + if(access) // if level access + var/list/AL = dd_text2list(access, "/") // text is series of 4 digits separated by / + + for(var/t in AL) // for each on + if(length(t) != 4) // if not 4 digits, skip + continue + + var/rlev = text2num(copytext(t, 1, 2)) // generate the access levels + var/rlab = text2num(copytext(t, 2, 3)) + var/reng = text2num(copytext(t, 3, 4)) + var/rsys = text2num(copytext(t, 4, 5)) + + if(access_level >= rlev && lab_access >= rlab && engine_access >= reng && air_access >= rsys) + return 1 // true if the card levels all equal or exceed the set levels + + if(allowed) // if job assignment access + + var/list/AL = dd_text2list(allowed, "/") // list as before + + for(var/t in AL) // for each assignment listesd + + if(assignment == t || "Name:[registered]" == t) // check assignnet; also name for special cases + return 1 + + return 0 // nothing matched, so return fail + + + +/obj/item/weapon/rods/attack_hand(mob/user as mob) + + if ((user.r_hand == src || user.l_hand == src)) + src.add_fingerprint(user) + var/obj/item/weapon/rods/F = new /obj/item/weapon/rods( user ) + F.amount = 1 + src.amount-- + if (user.hand) + user.l_hand = F + else + user.r_hand = F + F.layer = 20 + F.add_fingerprint(user) + if (src.amount < 1) + //SN src = null + del(src) + return + else + ..() + return + +/obj/item/weapon/rods/attackby(obj/item/weapon/rods/W as obj, mob/user as mob) + + if (!( istype(W, /obj/item/weapon/rods) )) + return + if (W.amount == 6) + return + if (W.amount + src.amount > 6) + src.amount = W.amount + src.amount - 6 + W.amount = 6 + else + W.amount += src.amount + //SN src = null + del(src) + return + return + +/obj/item/weapon/rods/examine() + set src in view(1) + + ..() + usr << text("There are [] rod\s left on the stack.", src.amount) + return + +/obj/item/weapon/rods/attack_self(mob/user as mob) + + if (locate(/obj/grille, usr.loc)) + for(var/obj/grille/G in usr.loc) + if (G.destroyed) + G.health = 10 + G.density = 1 + G.destroyed = 0 + G.icon_state = "grille" + src.amount-- + else + //Foreach continue //goto(30) + else + if (src.amount < 2) + return + src.amount -= 2 + new /obj/grille( usr.loc ) + if (src.amount < 1) + //SN src = null + del(src) + return + src.add_fingerprint(user) + return + +/obj/item/weapon/sheet/metal/attack_hand(mob/user as mob) + + if ((user.r_hand == src || user.l_hand == src)) + src.add_fingerprint(user) + var/obj/item/weapon/sheet/metal/F = new /obj/item/weapon/sheet/metal( user ) + F.amount = 1 + src.amount-- + if (user.hand) + user.l_hand = F + else + user.r_hand = F + F.layer = 20 + F.add_fingerprint(user) + if (src.amount < 1) + //SN src = null + del(src) + return + else + ..() + src.force = 5 + return + +/obj/item/weapon/sheet/metal/attackby(obj/item/weapon/sheet/metal/W as obj, mob/user as mob) + + if (!( istype(W, /obj/item/weapon/sheet/metal) )) + return + if (W.amount == 5) + return + if (W.amount + src.amount > 5) + src.amount = W.amount + src.amount - 5 + W.amount = 5 + else + W.amount += src.amount + //SN src = null + del(src) + return + return + +/obj/item/weapon/sheet/metal/examine() + set src in view(1) + + ..() + usr << text("There are [] metal sheet\s on the stack.", src.amount) + return + +/obj/item/weapon/sheet/metal/attack_self(mob/user as mob) + + var/t1 = text("Amount Left: []
    ", src.amount) + var/counter = 1 + var/list/L = list( ) + L["rods"] = "metal rods (makes 2)" + L["stool"] = "stool" + L["chair"] = "chair" + L["table"] = "table parts (2)" + L["rack"] = "rack parts" + L["o2can"] = "o2 canister (2)" + L["plcan"] = "pl canister (2)" + L["closet"] = "closet (2)" + L["fl_tiles"] = "floor tiles (makes 4)" + L["reinforced"] = "reinforced sheet (2) (Doesn't stack)" + L["repair"] = "repair wall" + L["construct"] = "construct wall" + for(var/t in L) + counter++ + t1 += text("[] ", src, t, L[t]) + if (counter > 2) + counter = 1 + t1 += "
    " + //Foreach goto(186) + t1 += "
    " + user << browse(t1, "window=met_sheet") + return + +/obj/item/weapon/sheet/metal/Topic(href, href_list) + ..() + if ((usr.restrained() || usr.stat || usr.equipped() != src)) + return + if (href_list["make"]) + if (src.amount < 1) + //SN src = null + del(src) + return + switch(href_list["make"]) + if("rods") + src.amount-- + var/obj/item/weapon/rods/R = new /obj/item/weapon/rods( usr.loc ) + R.amount = 2 + if("table") + if (src.amount < 2) + return + src.amount -= 2 + new /obj/item/weapon/table_parts( usr.loc ) + if("stool") + src.amount-- + new /obj/stool( usr.loc ) + if("chair") + src.amount-- + var/obj/stool/chair/C = new /obj/stool/chair( usr.loc ) + C.dir = usr.dir + if (C.dir == NORTH) + C.layer = 5 + if("rack") + src.amount-- + new /obj/item/weapon/rack_parts( usr.loc ) + if("o2can") + if (src.amount < 2) + return + src.amount -= 2 + var/obj/machinery/atmoalter/canister/oxygencanister/C = new /obj/machinery/atmoalter/canister/oxygencanister( usr.loc ) + C.gas.oxygen = 0 + if("plcan") + if (src.amount < 2) + return + src.amount -= 2 + var/obj/machinery/atmoalter/canister/poisoncanister/C = new /obj/machinery/atmoalter/canister/poisoncanister( usr.loc ) + C.gas.plasma = 0 + if("reinforced") + if (src.amount < 2) + return + src.amount -= 2 + var/obj/item/weapon/sheet/r_metal/C = new /obj/item/weapon/sheet/r_metal( usr.loc ) + C.amount = 1 + if("closet") + if (src.amount < 2) + return + src.amount -= 2 + new /obj/closet( usr.loc ) + if("fl_tiles") + src.amount-- + var/obj/item/weapon/tile/R = new /obj/item/weapon/tile( usr.loc ) + R.amount = 4 + if("construct") + if (src.amount < 2) + return + src.amount -= 2 + var/turf/F = get_step(usr, usr.dir) + if (!( istype(F, /turf/station/floor) )) + return + var/turf/station/wall/W = new /turf/station/wall( locate(F.x, F.y, F.z) ) + W.icon_state = "girder" + W.updatecell = 1 + W.opacity = 0 + W.state = 1 + W.density = 1 + W.levelupdate() + W.buildlinks() + else + if (src.amount < 2) + return + var/turf/station/wall/W = get_step(usr, usr.dir) + if (!( istype(W, /turf/station/wall) )) + return + src.amount -= 2 + W.icon_state = "" + W.state = 2 + W.density = 1 + W.opacity = 1 + W.updatecell = 0 + W.intact = 1 + W.levelupdate() + W.buildlinks() + if (src.amount <= 0) + //SN src = null + del(src) + return + spawn( 0 ) + src.attack_self(usr) + return + return + +/obj/item/weapon/sheet/glass/attack_hand(mob/user as mob) + + if ((user.r_hand == src || user.l_hand == src)) + src.add_fingerprint(user) + var/obj/item/weapon/sheet/glass/F = new /obj/item/weapon/sheet/glass( user ) + F.amount = 1 + src.amount-- + if (user.hand) + user.l_hand = F + else + user.r_hand = F + F.layer = 20 + F.add_fingerprint(user) + if (src.amount < 1) + //SN src = null + del(src) + return + else + ..() + src.force = 5 + return + +/obj/item/weapon/sheet/glass/attackby(obj/item/weapon/W, mob/user) + + if ( istype(W, /obj/item/weapon/sheet/glass) ) + var/obj/item/weapon/sheet/glass/G = W + if (G.amount == 5) + return + if (G.amount + src.amount > 5) + src.amount = G.amount + src.amount - 5 + G.amount = 5 + else + G.amount += src.amount + //SN src = null + del(src) + return + return + else if( istype(W, /obj/item/weapon/rods) ) + + var/obj/item/weapon/rods/V = W + var/obj/item/weapon/sheet/rglass/R = new /obj/item/weapon/sheet/rglass(user.loc) + R.loc = user.loc + R.add_fingerprint(user) + + + if(V.amount == 1) + + if(user.client) + user.client.screen -= V + + user.u_equip(W) + del(W) + else + V.amount-- + + + if(src.amount == 1) + + if(user.client) + user.client.screen -= src + + user.u_equip(src) + del(src) + else + src.amount-- + return + + + +/obj/item/weapon/sheet/glass/examine() + set src in view(1) + + ..() + usr << text("There are [] glass sheet\s on the stack.", src.amount) + return + +/obj/item/weapon/sheet/glass/attack_self(mob/user as mob) + + if (!( istype(usr.loc, /turf/station) )) + return + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + user << "\red You don't have the dexterity to do this!" + return + switch(alert("Sheet-Glass", "Would you like full tile glass or one direction?", "one direct", "full (2 sheets)", "cancel", null)) + if("one direct") + var/obj/window/W = new /obj/window( usr.loc ) + W.anchored = 0 + if (src.amount < 1) + return + src.amount-- + if("full (2 sheets)") + if (src.amount < 2) + return + src.amount -= 2 + var/obj/window/W = new /obj/window( usr.loc ) + W.dir = SOUTHWEST + W.ini_dir = SOUTHWEST + W.anchored = 0 + else + if (src.amount <= 0) + user.u_equip(src) + //SN src = null + del(src) + return + return + +/obj/item/weapon/sheet/rglass/attack_hand(mob/user as mob) + + if ((user.r_hand == src || user.l_hand == src)) + src.add_fingerprint(user) + var/obj/item/weapon/sheet/rglass/F = new /obj/item/weapon/sheet/rglass( user ) + F.amount = 1 + src.amount-- + if (user.hand) + user.l_hand = F + else + user.r_hand = F + F.layer = 20 + F.add_fingerprint(user) + if (src.amount < 1) + //SN src = null + del(src) + return + else + ..() + src.force = 5 + return + +/obj/item/weapon/sheet/rglass/attackby(obj/item/weapon/sheet/rglass/W as obj, mob/user as mob) + + if (!( istype(W, /obj/item/weapon/sheet/rglass) )) + return + if (W.amount == 5) + return + if (W.amount + src.amount > 5) + src.amount = W.amount + src.amount - 5 + W.amount = 5 + else + W.amount += src.amount + //SN src = null + del(src) + return + return + +/obj/item/weapon/sheet/rglass/examine() + set src in view(1) + + ..() + usr << text("There are [] reinforced glass sheet\s on the stack.", src.amount) + return + +/obj/item/weapon/sheet/rglass/attack_self(mob/user as mob) + + if (!( istype(usr.loc, /turf/station) )) + return + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + user << "\red You don't have the dexterity to do this!" + return + switch(alert("Sheet Reinf. Glass", "Would you like full tile glass or one direction?", "one direct", "full (2 sheets)", "cancel", null)) + if("one direct") + var/obj/window/W = new /obj/window( usr.loc, 1 ) + W.anchored = 0 + W.state = 0 + if (src.amount < 1) + return + src.amount-- + if("full (2 sheets)") + if (src.amount < 2) + return + src.amount -= 2 + var/obj/window/W = new /obj/window( usr.loc, 1 ) + W.dir = SOUTHWEST + W.ini_dir = SOUTHWEST + W.anchored = 0 + W.state = 0 + else + if (src.amount <= 0) + user.u_equip(src) + //SN src = null + del(src) + return + return + + +/obj/item/weapon/clipboard/attack_self(mob/user as mob) + + var/dat = "Clipboard
    " + if (src.pen) + dat += text("Remove Pen

    ", src) + for(var/obj/item/weapon/paper/P in src) + dat += text("[] Write Remove
    ", src, P, P.name, src, P, src, P) + //Foreach goto(42) + user << browse(dat, "window=clipboard") + return + +/obj/item/weapon/clipboard/Topic(href, href_list) + ..() + if ((usr.stat || usr.restrained())) + return + if (usr.contents.Find(src)) + usr.machine = src + if (href_list["pen"]) + if (src.pen) + if ((usr.hand && !( usr.l_hand ))) + usr.l_hand = src.pen + src.pen.loc = usr + src.pen.layer = 20 + src.pen = null + usr.UpdateClothing() + else + if (!( usr.r_hand )) + usr.r_hand = src.pen + src.pen.loc = usr + src.pen.layer = 20 + src.pen = null + usr.UpdateClothing() + if (src.pen) + src.pen.add_fingerprint(usr) + src.add_fingerprint(usr) + if (href_list["remove"]) + var/obj/item/P = locate(href_list["remove"]) + if ((P && P.loc == src)) + if ((usr.hand && !( usr.l_hand ))) + usr.l_hand = P + P.loc = usr + P.layer = 20 + usr.UpdateClothing() + else + if (!( usr.r_hand )) + usr.r_hand = P + P.loc = usr + P.layer = 20 + usr.UpdateClothing() + P.add_fingerprint(usr) + src.add_fingerprint(usr) + if (href_list["write"]) + var/obj/item/P = locate(href_list["write"]) + if ((P && P.loc == src)) + if (istype(usr.r_hand, /obj/item/weapon/pen)) + P.attackby(usr.r_hand, usr) + else + if (istype(usr.l_hand, /obj/item/weapon/pen)) + P.attackby(usr.l_hand, usr) + else + if (istype(src.pen, /obj/item/weapon/pen)) + P.attackby(src.pen, usr) + src.add_fingerprint(usr) + if (href_list["read"]) + var/obj/item/weapon/paper/P = locate(href_list["read"]) + if ((P && P.loc == src)) + if (!( istype(usr, /mob/human) )) + usr << browse(text("[][]", P.name, stars(P.info)), text("window=[]", P.name)) + else + usr << browse(text("[][]", P.name, P.info), text("window=[]", P.name)) + if (ismob(src.loc)) + var/mob/M = src.loc + if (M.machine == src) + spawn( 0 ) + src.attack_self(M) + return + return + +/obj/item/weapon/clipboard/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/item/weapon/clipboard/attack_hand(mob/user as mob) + + if ((locate(/obj/item/weapon/paper, src) && (!( user.equipped() ) && (user.l_hand == src || user.r_hand == src)))) + var/obj/item/weapon/paper/P + for(P in src) + break + //Foreach goto(50) + if (P) + if (user.hand) + user.l_hand = P + else + user.r_hand = P + P.loc = user + P.layer = 20 + P.add_fingerprint(user) + user.UpdateClothing() + src.add_fingerprint(user) + else + if (user.contents.Find(src)) + spawn( 0 ) + src.attack_self(user) + return + else + return ..() + return + +/obj/item/weapon/clipboard/attackby(obj/item/weapon/P as obj, mob/user as mob) + + if (istype(P, /obj/item/weapon/paper)) + if (src.contents.len < 15) + user.drop_item() + P.loc = src + if (istype(P, /obj/item/weapon/paper/flag)) + if (ctf) + ctf.check_win(src) + else + user << "\blue Not enough space!!!" + else + if (istype(P, /obj/item/weapon/pen)) + if (!( src.pen )) + user.drop_item() + P.loc = src + src.pen = P + else + return + src.update() + spawn( 0 ) + attack_self(user) + return + return + +/obj/item/weapon/clipboard/proc/update() + + src.icon_state = text("clipboard[][]", (locate(/obj/item/weapon/paper, src) ? "1" : "0"), (locate(/obj/item/weapon/pen, src) ? "1" : "0")) + return + +/obj/item/weapon/fcardholder/attack_self(mob/user as mob) + + var/dat = "Clipboard
    " + for(var/obj/item/weapon/f_card/P in src) + dat += text("[] Remove
    ", src, P, P.name, src, P) + //Foreach goto(23) + user << browse(dat, "window=fcardholder") + return + +/obj/item/weapon/fcardholder/Topic(href, href_list) + ..() + if ((usr.stat || usr.restrained())) + return + if (usr.contents.Find(src)) + usr.machine = src + if (href_list["remove"]) + var/obj/item/P = locate(href_list["remove"]) + if ((P && P.loc == src)) + if ((usr.hand && !( usr.l_hand ))) + usr.l_hand = P + P.loc = usr + P.layer = 20 + usr.UpdateClothing() + else + if (!( usr.r_hand )) + usr.r_hand = P + P.loc = usr + P.layer = 20 + usr.UpdateClothing() + src.add_fingerprint(usr) + P.add_fingerprint(usr) + src.update() + if (href_list["read"]) + var/obj/item/weapon/f_card/P = locate(href_list["read"]) + if ((P && P.loc == src)) + if (!( istype(usr, /mob/human) )) + usr << browse(text("[][]", P.name, P.display()), text("window=[]", P.name)) + else + usr << browse(text("[][]", P.name, P.display()), text("window=[]", P.name)) + src.add_fingerprint(usr) + if (ismob(src.loc)) + var/mob/M = src.loc + if (M.machine == src) + spawn( 0 ) + src.attack_self(M) + return + return + +/obj/item/weapon/fcardholder/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/item/weapon/fcardholder/attack_hand(mob/user as mob) + + if (user.contents.Find(src)) + spawn( 0 ) + src.attack_self(user) + return + src.add_fingerprint(user) + else + return ..() + return + +/obj/item/weapon/fcardholder/attackby(obj/item/weapon/P as obj, mob/user as mob) + + if (istype(P, /obj/item/weapon/f_card)) + if (src.contents.len < 30) + user.drop_item() + P.loc = src + add_fingerprint(user) + src.add_fingerprint(user) + else + user << "\blue Not enough space!!!" + else + if (istype(P, /obj/item/weapon/pen)) + var/t = input(user, "Holder Label:", text("[]", src.name), null) as text + if (user.equipped() != P) + return + if ((get_dist(src, usr) > 1 && src.loc != user)) + return + t = html_encode(t) + if (t) + src.name = text("FPCase- '[]'", t) + else + src.name = "Finger Print Case" + else + return + src.update() + spawn( 0 ) + attack_self(user) + return + return + +/obj/item/weapon/fcardholder/proc/update() + + var/i = 0 + for(var/obj/item/weapon/f_card/F in src) + i = 1 + break + //else + //Foreach goto(22) + src.icon_state = text("fcardholder[]", (i ? "1" : "0")) + return + +/obj/item/weapon/extinguisher/examine() + set src in usr + + usr << text("\icon[] [] contains [] units of water left!", src, src.name, src.waterleft) + ..() + return + +/obj/item/weapon/extinguisher/afterattack(atom/target, mob/user , flag) + + if (src.icon_state == "fire_extinguisher1") + if (src.waterleft < 1) + return + if (world.time < src.last_use + 20) + return + src.last_use = world.time + if (istype(target, /area)) + return + var/cur_loc = get_turf(user) + var/tar_loc = (isturf(target) ? target : get_turf(target)) + + + if (get_dist(tar_loc, cur_loc) > 1) + var/list/close = list( ) + var/list/far = list( ) + for(var/T in oview(2, tar_loc)) + if (get_dist(T, tar_loc) <= 1) + close += T + else + far += T + //Foreach goto(147) + close += tar_loc + var/t = null + t = 1 + while(t <= 14) + var/obj/effects/water/W = new /obj/effects/water( cur_loc ) + if (rand(1, 3) != 1) + walk_towards(W, pick(close), null) + else + walk_towards(W, pick(far), null) + sleep(1) + t++ + src.waterleft-- + src.last_use = world.time + else + if (cur_loc == tar_loc) + new /obj/effects/water( cur_loc ) + src.waterleft -= 0.25 + src.last_use = 1 + else + var/list/possible = list( ) + for(var/T in oview(1, tar_loc)) + possible += T + //Foreach goto(366) + possible += tar_loc + var/t = null + t = 1 + while(t <= 7) + var/obj/effects/water/W = new /obj/effects/water( cur_loc ) + walk_towards(W, pick(possible), null) + sleep(1) + t++ + src.waterleft -= 0.5 + src.last_use = world.time + + // propulsion + if(istype(cur_loc, /turf/space)) + user.Move(get_step(user, get_dir(target, user) )) + // + + else + return ..() + return + +/obj/item/weapon/extinguisher/attack_self(mob/user as mob) + + if (src.icon_state == "fire_extinguisher0") + src.icon_state = "fire_extinguisher1" + src.desc = "The safety is off." + else + src.icon_state = "fire_extinguisher0" + src.desc = "The safety is on." + return + +/obj/item/weapon/pen/sleepypen/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/item/weapon/pen/sleepypen/New() + + src.chem = new /obj/substance/chemical( ) + src.chem.maximum = 5 + var/datum/chemical/s_tox/C = new /datum/chemical/s_tox( null ) + C.moles = C.density * 5 / C.molarmass + src.chem.chemicals[text("[]", C.name)] = C + ..() + return + +/obj/item/weapon/pen/sleepypen/attack(mob/M as mob, mob/user as mob) + + if (!( istype(M, /mob) )) + return + if (src.desc == "It's a normal black ink pen.") + return ..() + if (user) + for(var/mob/O in viewers(M, null)) + O.show_message(text("\red [] has been stabbed with [] by [].", M, src, user), 1) + //Foreach goto(57) + var/amount = src.chem.transfer_mob(M, src.chem.maximum) + user.show_message(text("\red You inject [] units into the [].", amount, M)) + src.desc = "It's a normal black ink pen." + return + +/obj/item/weapon/paint/attack_self(mob/user as mob) + + var/t1 = input(user, "Please select a color:", "Locking Computer", null) in list( "red", "blue", "green", "yellow", "black", "white", "neutral" ) + if ((user.equipped() != src || user.stat || user.restrained())) + return + src.color = t1 + src.icon_state = text("paint_[]", t1) + add_fingerprint(user) + return + +/obj/item/weapon/paper/burn(fi_amount) + + spawn( 0 ) + var/t = src.icon_state + src.icon_state = "" + src.icon = 'b_items.dmi' + flick(text("[]", t), src) + spawn( 14 ) + //SN src = null + del(src) + return + return + return + return + +/obj/item/weapon/paper/photograph/New() + + ..() + src.pixel_y = 0 + src.pixel_x = 0 + return + +/obj/item/weapon/paper/photograph/attack_self(mob/user as mob) + + var/n_name = input(user, "What would you like to label the photo?", "Paper Labelling", null) as text + n_name = copytext(n_name, 1, 32) + if ((src.loc == user && user.stat == 0)) + src.name = text("photo[]", (n_name ? text("- '[]'", n_name) : null)) + src.add_fingerprint(user) + return + +/obj/item/weapon/paper/photograph/examine() + set src in view() + + ..() + return + +/obj/item/weapon/paper/flag/burn() + + return + return + +/obj/item/weapon/paper/flag/New() + + ..() + src.pixel_y = 0 + src.pixel_x = 0 + src.name = "flag- 'FLAG'" + return + +/obj/item/weapon/paper/flag/attack_hand() + + if ((ctf && ctf.immobile)) + return 0 + else + . = ..() + return + +/obj/item/weapon/paper/flag/attack_self(mob/user as mob) + + var/n_name = input(user, "What would you like to label the paper?", "Paper Labelling", null) as text + n_name = copytext(n_name, 1, 32) + if ((src.loc == user && user.stat == 0)) + src.name = text("flag[]", (n_name ? text("- '[]'", n_name) : null)) + src.add_fingerprint(user) + return + +/obj/item/weapon/paper/flag/attackby(P as obj, mob/user as mob) + + if (istype(P, /obj/item/weapon/pen)) + ..() + else + if (istype(P, /obj/item/weapon/paint)) + var/obj/item/weapon/paint/C = P + src.icon_state = text("flag_[]", C.color) + if (ctf) + ctf.check_win() + else + return + return + +/obj/item/weapon/paper/New() + + ..() + src.pixel_y = rand(1, 16) + src.pixel_x = rand(1, 16) + return + +/obj/item/weapon/paper/attack_self(mob/user as mob) + + var/n_name = input(user, "What would you like to label the paper?", "Paper Labelling", null) as text + n_name = copytext(n_name, 1, 32) + if ((src.loc == user && user.stat == 0)) + src.name = text("paper[]", (n_name ? text("- '[]'", n_name) : null)) + src.add_fingerprint(user) + return + +/obj/item/weapon/paper/attackby(obj/item/weapon/P as obj, mob/user as mob) + + if (istype(P, /obj/item/weapon/pen)) + var/t = input(user, "What text do you wish to add?", text("[]", src.name), null) as message + if ((get_dist(src, usr) > 1 && src.loc != user && !( istype(src.loc, /obj/item/weapon/clipboard) ) && src.loc.loc != user && user.equipped() != P)) + return + t = html_encode(t) + t = dd_replacetext(t, "\n", "
    ") + t = dd_replacetext(t, "\[b\]", "") + t = dd_replacetext(t, "\[/b\]", "") + t = dd_replacetext(t, "\[i\]", "") + t = dd_replacetext(t, "\[/i\]", "") + t = dd_replacetext(t, "\[u\]", "") + t = dd_replacetext(t, "\[/u\]", "") + t = dd_replacetext(t, "\[sign\]", text("[]", user.rname)) + t = text("[]", t) + src.info += t + else + if (istype(P, /obj/item/weapon/weldingtool)) + var/obj/item/weapon/weldingtool/W = P + if ((W.welding && W.weldfuel > 0)) + for(var/mob/O in viewers(user, null)) + O.show_message(text("\red [] burns [] with the welding tool!", user, src), 1, "\red You hear a small burning noise", 2) + //Foreach goto(323) + spawn( 0 ) + src.burn(1800000.0) + return + else + if (istype(P, /obj/item/weapon/igniter)) + for(var/mob/O in viewers(user, null)) + O.show_message(text("\red [] burns [] with the igniter!", user, src), 1, "\red You hear a small burning noise", 2) + //Foreach goto(406) + spawn( 0 ) + src.burn(1800000.0) + return + else + if (istype(P, /obj/item/weapon/wirecutters)) + for(var/mob/O in viewers(user, null)) + O.show_message(text("\red [] starts cutting []!", user, src), 1) + //Foreach goto(489) + sleep(50) + if (((src.loc == src || get_dist(src, user) <= 1) && (!( user.stat ) && !( user.restrained() )))) + for(var/mob/O in viewers(user, null)) + O.show_message(text("\red [] cuts [] to pieces!", user, src), 1) + //Foreach goto(580) + //SN src = null + del(src) + return + src.add_fingerprint(user) + return + +/obj/item/weapon/paper/examine() + set src in view() + + ..() + if (!( istype(usr, /mob/human) )) + usr << browse(text("[][]", src.name, stars(src.info)), text("window=[]", src.name)) + else + usr << browse(text("[][]", src.name, src.info), text("window=[]", src.name)) + return + +/obj/item/weapon/paper/Map/examine() + set src in view() + + ..() + + usr << browse_rsc(map_graphic) + if (!( istype(usr, /mob/human) )) + usr << browse(text("[][]", src.name, stars(src.info)), text("window=[]", src.name)) + else + usr << browse(text("[][]", src.name, src.info), text("window=[]", src.name)) + return + + +/obj/item/weapon/f_card/examine() + set src in view(2) + + ..() + usr << text("\blue There are [] on the stack!", src.amount) + usr << browse(text("[][]", src.name, display()), text("window=[]", src.name)) + return + +/obj/item/weapon/f_card/proc/display() + + if (src.fingerprints) + var/dat = "Fingerprints on Card
    " + var/L = params2list(src.fingerprints) + for(var/i in L) + dat += text("[]
    ", i) + //Foreach goto(41) + return dat + else + return "There are no fingerprints on this card." + return + +/obj/item/weapon/f_card/attack_hand(mob/user as mob) + + if ((user.r_hand == src || user.l_hand == src)) + src.add_fingerprint(user) + var/obj/item/weapon/f_card/F = new /obj/item/weapon/f_card( user ) + F.amount = 1 + src.amount-- + if (user.hand) + user.l_hand = F + else + user.r_hand = F + F.layer = 20 + F.add_fingerprint(user) + if (src.amount < 1) + //SN src = null + del(src) + return + else + ..() + return + +/obj/item/weapon/f_card/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (istype(W, /obj/item/weapon/f_card)) + if ((src.fingerprints || W.fingerprints)) + return + if (src.amount == 10) + return + if (W:amount + src.amount > 10) + src.amount = 10 + W:amount = W:amount + src.amount - 10 + else + src.amount += W:amount + //W = null + del(W) + src.add_fingerprint(user) + if (W) + W.add_fingerprint(user) + else + if (istype(W, /obj/item/weapon/pen)) + var/t = input(user, "Card Label:", text("[]", src.name), null) as text + if (user.equipped() != W) + return + if ((get_dist(src, usr) > 1 && src.loc != user)) + return + t = html_encode(t) + if (t) + src.name = text("FPrintC- '[]'", t) + else + src.name = "Finger Print Card" + W.add_fingerprint(user) + src.add_fingerprint(user) + return + +/obj/item/weapon/f_card/add_fingerprint() + + ..() + if (src.fingerprints) + if (src.amount > 1) + var/obj/item/weapon/f_card/F = new /obj/item/weapon/f_card( (ismob(src.loc) ? src.loc.loc : src.loc) ) + F.amount = --src.amount + src.amount = 1 + src.icon_state = "f_print_card1" + return + +/obj/item/weapon/f_print_scanner/attackby(obj/item/weapon/f_card/W as obj, mob/user as mob) + + if (istype(W, /obj/item/weapon/f_card)) + if (W.fingerprints) + return + if (src.amount == 20) + return + if (W.amount + src.amount > 20) + src.amount = 20 + W.amount = W.amount + src.amount - 20 + else + src.amount += W.amount + //W = null + del(W) + src.add_fingerprint(user) + if (W) + W.add_fingerprint(user) + return + +/obj/item/weapon/f_print_scanner/attack_self(mob/user as mob) + + src.printing = !( src.printing ) + src.icon_state = text("f_print_scanner[]", src.printing) + add_fingerprint(user) + return + +/obj/item/weapon/f_print_scanner/attack(mob/human/M as mob, mob/user as mob) + + if ((!( ismob(M) ) || !( istype(M.primary, /obj/dna) ) || !( istype(M, /mob/human) ) || M.gloves)) + user << text("\blue Unable to locate any fingerprints on []!", M) + return 0 + else + if ((src.amount < 1 && src.printing)) + user << text("\blue Fingerprints scanned on []. Need more cards to print.", M) + src.printing = 0 + src.icon_state = text("f_print_scanner[]", src.printing) + if (src.printing) + src.amount-- + var/obj/item/weapon/f_card/F = new /obj/item/weapon/f_card( user.loc ) + F.amount = 1 + F.fingerprints = md5(M.primary.uni_identity) + F.icon_state = "f_print_card1" + F.name = text("FPrintC- '[]'", M.name) + user << "\blue Done printing." + user << text("\blue []'s Fingerprints: []", M, md5(M.primary.uni_identity)) + return + +/obj/item/weapon/f_print_scanner/afterattack(atom/A as mob|obj|turf|area, mob/user as mob) + + src.add_fingerprint(user) + if (!( A.fingerprints )) + user << "\blue Unable to locate any fingerprints!" + return 0 + else + if ((src.amount < 1 && src.printing)) + user << "\blue Fingerprints found. Need more cards to print." + src.printing = 0 + src.icon_state = text("f_print_scanner[]", src.printing) + if (src.printing) + src.amount-- + var/obj/item/weapon/f_card/F = new /obj/item/weapon/f_card( user.loc ) + F.amount = 1 + F.fingerprints = A.fingerprints + F.icon_state = "f_print_card1" + user << "\blue Done printing." + var/list/L = params2list(A.fingerprints) + user << text("\blue Isolated [] fingerprints.", L.len) + for(var/i in L) + user << text("\blue \t []", i) + //Foreach goto(186) + return + +/obj/item/weapon/healthanalyzer/attack(mob/M as mob, mob/user as mob) + + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + user << "\red You don't have the dexterity to do this!" + return + for(var/mob/O in viewers(M, null)) + O.show_message(text("\red [] has analyzed []'s vitals!", user, M), 1) + //Foreach goto(67) + user.show_message(text("\blue Analyzing Results for []:\n\t Overall Status: []", M, (M.stat > 1 ? "dead" : text("[]% healthy", M.health))), 1) + user.show_message(text("\blue \t Damage Specifics: []-[]-[]-[]", M.oxyloss, M.toxloss, M.fireloss, M.bruteloss), 1) + user.show_message("\blue Key: Suffocation/Toxin/Burns/Brute", 1) + if (M.rejuv) + user.show_message(text("\blue Bloodstream Analysis located [] units of rejuvenation chemicals.", M.rejuv), 1) + src.add_fingerprint(user) + return + return + +/obj/item/weapon/analyzer/attack_self(mob/user as mob) + + if (user.stat) + return + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + user << "\red You don't have the dexterity to do this!" + return + var/turf/T = user.loc + if (!( istype(T, /turf) )) + return + if (locate(/obj/move, T)) + T = locate(/obj/move, T) + var/turf_total = T.co2 + T.oxygen + T.poison + T.sl_gas + T.n2 + turf_total = max(turf_total, 1) + user.show_message("\blue Results:", 1) + var/t = "" + var/t1 = turf_total / CELLSTANDARD * 100 + if ((90 < t1 && t1 < 110)) + user.show_message(text("\blue Air Pressure: []%", t1), 1) + else + user.show_message(text("\blue Air Pressure:\red []%", t1), 1) + t1 = T.n2 / turf_total * 100 + t1 = round(t1, 0.0010) + if ((60 < t1 && t1 < 80)) + t += text("Nitrogen: [] ", t1) + else + t += text("Nitrogen: [] ", t1) + t1 = T.oxygen / turf_total * 100 + t1 = round(t1, 0.0010) + if ((20 < t1 && t1 < 24)) + t += text("Oxygen: [] ", t1) + else + t += text("Oxygen: [] ", t1) + t1 = T.poison / turf_total * 100 + t1 = round(t1, 0.0010) + if (t1 < 0.5) + t += text("Plasma: [] ", t1) + else + t += text("Plasma: [] ", t1) + t1 = T.co2 / turf_total * 100 + t1 = round(t1, 0.0010) + if (t1 < 1) + t += text("CO2: [] ", t1) + else + t += text("CO2: [] ", t1) + t1 = T.sl_gas / turf_total * 100 + t1 = round(t1, 0.0010) + if (t1 < 5) + t += text("N2O: []", t1) + else + t += text("N2O: []", t1) + user.show_message(t, 1) + user.show_message(text("\blue \t Temperature: []°C", (T.temp-T0C) ), 1) + src.add_fingerprint(user) + return + +/obj/item/weapon/storage/proc/return_inv() + + var/list/L = list( ) + + // RM***** + L += src.contents + + for(var/obj/item/weapon/storage/S in src) + L += S.return_inv() + //Foreach goto(22) + return L + return + +/obj/item/weapon/storage/proc/show_to(mob/user as mob) + + user.client.screen -= src.boxes + user.client.screen -= src.closer + user.client.screen -= src.contents + user.client.screen += src.boxes + user.client.screen += src.closer + user.client.screen += src.contents + user.s_active = src + return + +/obj/item/weapon/storage/proc/hide_from(mob/user as mob) + + if(!user.client) + return + user.client.screen -= src.boxes + user.client.screen -= src.closer + user.client.screen -= src.contents + return + +/obj/item/weapon/storage/proc/close(mob/user as mob) + + src.hide_from(user) + user.s_active = null + return + +/obj/item/weapon/storage/proc/orient_objs(tx, ty, mx, my) + + var/cx = tx + var/cy = ty + src.boxes.screen_loc = text("[],[] to [],[]", tx, ty, mx, my) + for(var/obj/O in src.contents) + O.screen_loc = text("[],[]", cx, cy) + O.layer = 20 + cx++ + if (cx > mx) + cx = tx + cy-- + //Foreach goto(56) + src.closer.screen_loc = text("[],[]", mx, my) + return + +/obj/item/weapon/storage/proc/orient2hud(mob/user as mob) + + if (src == user.l_hand) + src.orient_objs(3, 11, 3, 4) + else + if (src == user.r_hand) + src.orient_objs(1, 11, 1, 4) + else + if (src == user.back) + src.orient_objs(4, 10, 4, 3) + else + src.orient_objs(7, 8, 10, 7) + return + +/obj/item/weapon/storage/lglo_kit/New() + + new /obj/item/weapon/clothing/gloves/latex( src ) + new /obj/item/weapon/clothing/gloves/latex( src ) + new /obj/item/weapon/clothing/gloves/latex( src ) + new /obj/item/weapon/clothing/gloves/latex( src ) + new /obj/item/weapon/clothing/gloves/latex( src ) + new /obj/item/weapon/clothing/gloves/latex( src ) + new /obj/item/weapon/clothing/gloves/latex( src ) + ..() + return + +/obj/item/weapon/storage/flashbang_kit/New() + + new /obj/item/weapon/flashbang( src ) + new /obj/item/weapon/flashbang( src ) + new /obj/item/weapon/flashbang( src ) + new /obj/item/weapon/flashbang( src ) + new /obj/item/weapon/flashbang( src ) + new /obj/item/weapon/flashbang( src ) + new /obj/item/weapon/flashbang( src ) + ..() + return + +/obj/item/weapon/storage/stma_kit/New() + + new /obj/item/weapon/clothing/mask/surgical( src ) + new /obj/item/weapon/clothing/mask/surgical( src ) + new /obj/item/weapon/clothing/mask/surgical( src ) + new /obj/item/weapon/clothing/mask/surgical( src ) + new /obj/item/weapon/clothing/mask/surgical( src ) + new /obj/item/weapon/clothing/mask/surgical( src ) + new /obj/item/weapon/clothing/mask/surgical( src ) + ..() + return + +/obj/item/weapon/storage/gl_kit/New() + + new /obj/item/weapon/clothing/glasses/regular( src ) + new /obj/item/weapon/clothing/glasses/regular( src ) + new /obj/item/weapon/clothing/glasses/regular( src ) + new /obj/item/weapon/clothing/glasses/regular( src ) + new /obj/item/weapon/clothing/glasses/regular( src ) + new /obj/item/weapon/clothing/glasses/regular( src ) + new /obj/item/weapon/clothing/glasses/regular( src ) + ..() + return + +/obj/item/weapon/storage/trackimp_kit/New() + + new /obj/item/weapon/implantcase/tracking( src ) + new /obj/item/weapon/implantcase/tracking( src ) + new /obj/item/weapon/implantcase/tracking( src ) + new /obj/item/weapon/implantcase/tracking( src ) + new /obj/item/weapon/implanter( src ) + new /obj/item/weapon/implantpad( src ) + new /obj/item/weapon/locator( src ) + ..() + return + +/obj/item/weapon/storage/fcard_kit/New() + + new /obj/item/weapon/f_card( src ) + new /obj/item/weapon/f_card( src ) + new /obj/item/weapon/f_card( src ) + new /obj/item/weapon/f_card( src ) + new /obj/item/weapon/f_card( src ) + new /obj/item/weapon/f_card( src ) + new /obj/item/weapon/f_card( src ) + ..() + return + +/obj/item/weapon/storage/id_kit/New() + + new /obj/item/weapon/card/id( src ) + new /obj/item/weapon/card/id( src ) + new /obj/item/weapon/card/id( src ) + new /obj/item/weapon/card/id( src ) + new /obj/item/weapon/card/id( src ) + new /obj/item/weapon/card/id( src ) + new /obj/item/weapon/card/id( src ) + ..() + return + +/obj/item/weapon/storage/handcuff_kit/New() + + new /obj/item/weapon/handcuffs( src ) + new /obj/item/weapon/handcuffs( src ) + new /obj/item/weapon/handcuffs( src ) + new /obj/item/weapon/handcuffs( src ) + new /obj/item/weapon/handcuffs( src ) + new /obj/item/weapon/handcuffs( src ) + new /obj/item/weapon/handcuffs( src ) + ..() + return + +/obj/item/weapon/storage/disk_kit/disks/New() + + new /obj/item/weapon/card/data( src ) + new /obj/item/weapon/card/data( src ) + new /obj/item/weapon/card/data( src ) + new /obj/item/weapon/card/data( src ) + new /obj/item/weapon/card/data( src ) + new /obj/item/weapon/card/data( src ) + new /obj/item/weapon/card/data( src ) + ..() + return + +/obj/item/weapon/storage/disk_kit/disks2/New() + + spawn( 2 ) + for(var/obj/item/weapon/card/data/D in src.loc) + D.loc = src + //Foreach goto(23) + return + ..() + return + +/obj/item/weapon/storage/backpack/New() + + new /obj/item/weapon/storage/box( src ) + ..() + return + +/obj/item/weapon/storage/backpack/MouseDrop(obj/over_object as obj) + + if (src.loc != usr) + return + if ((istype(usr, /mob/human) || (ticker && ticker.mode == "monkey"))) + var/mob/M = usr + if (!( istype(over_object, /obj/screen) )) + return ..() + if ((!( M.restrained() ) && !( M.stat ) && M.back == src)) + if (over_object.name == "r_hand") + if (!( M.r_hand )) + M.u_equip(src) + M.r_hand = src + else + if (over_object.name == "l_hand") + if (!( M.l_hand )) + M.u_equip(src) + M.l_hand = src + M.UpdateClothing() + src.add_fingerprint(usr) + return + +/obj/item/weapon/storage/backpack/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (src.contents.len >= 7) + return + if (W.w_class > 3) + return + var/t + for(var/obj/item/weapon/O in src) + t += O.w_class + //Foreach goto(46) + t += W.w_class + if (t > 20) + user << "You cannot fit the item inside. (Remove larger classed items)" + return + user.u_equip(W) + W.loc = src + if ((user.client && user.s_active != src)) + user.client.screen -= W + src.orient2hud(user) + W.dropped() + add_fingerprint(user) + for(var/mob/O in viewers(user, null)) + O.show_message(text("\blue [] has added [] to []!", user, W, src), 1) + //Foreach goto(206) + return + +/obj/item/weapon/storage/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (src.contents.len >= 7) + return + if ((W.w_class >= 3 || istype(W, /obj/item/weapon/storage))) + return + user.u_equip(W) + W.loc = src + if ((user.client && user.s_active != src)) + user.client.screen -= W + src.orient2hud(user) + W.dropped() + add_fingerprint(user) + for(var/mob/O in viewers(user, null)) + O.show_message(text("\blue [] has added [] to []!", user, W, src), 1) + //Foreach goto(139) + return + +/obj/item/weapon/storage/dropped(mob/user as mob) + + src.orient_objs(7, 8, 10, 7) + return + +/obj/item/weapon/storage/MouseDrop(over_object, src_location, over_location) + + ..() + if ((over_object == usr && (get_dist(src, usr) <= 1 || usr.contents.Find(src)))) + if (usr.s_active) + usr.s_active.close(usr) + src.show_to(usr) + return + +/obj/item/weapon/storage/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/item/weapon/storage/attack_hand(mob/user as mob) + + if (src.loc == user) + if (user.s_active) + user.s_active.close(user) + src.show_to(user) + else + ..() + for(var/mob/M in range(1)) + if (M.s_active == src) + src.close(M) + //Foreach goto(76) + src.orient2hud(user) + src.add_fingerprint(user) + return + +/obj/item/weapon/storage/New() + + src.boxes = new /obj/screen/storage( ) + src.boxes.name = "storage" + src.boxes.master = src + src.boxes.icon_state = "block" + src.boxes.screen_loc = "7,7 to 10,8" + src.boxes.layer = 19 + src.closer = new /obj/screen/close( ) + src.closer.master = src + src.closer.icon_state = "x" + src.closer.layer = 20 + spawn( 5 ) + src.orient_objs(7, 8, 10, 7) + return + return + +/obj/item/weapon/storage/toolbox/New() + + new /obj/item/weapon/screwdriver( src ) + new /obj/item/weapon/wrench( src ) + new /obj/item/weapon/weldingtool( src ) + new /obj/item/weapon/radio( src ) + new /obj/item/weapon/analyzer( src ) + new /obj/item/weapon/extinguisher( src ) + new /obj/item/weapon/wirecutters( src ) + ..() + return + +/obj/item/weapon/storage/toolbox/electrical/New() + ..() + src.contents = null + new /obj/item/weapon/screwdriver( src ) + new /obj/item/weapon/wirecutters( src ) + new /obj/item/weapon/t_scanner( src ) + new /obj/item/weapon/crowbar( src ) + new /obj/item/weapon/cable_coil( src ) + new /obj/item/weapon/cable_coil( src ) + new /obj/item/weapon/cable_coil( src ) + + return + +/obj/item/weapon/storage/toolbox/attack(mob/M as mob, mob/user as mob) + + ..() + if ((prob(30) && M.stat < 2)) + var/mob/H = M + + // ******* Check + + if ((istype(H, /mob/human) && istype(H, /obj/item/weapon/clothing/head) && H.flags & 8 && prob(80))) + M << "\red The helmet protects you from being hit hard in the head!" + return + var/time = rand(10, 120) + if (prob(90)) + if (M.paralysis < time) + M.paralysis = time + else + if (M.stunned < time) + M.stunned = time + M.stat = 1 + for(var/mob/O in viewers(M, null)) + O.show_message(text("\red [] has been knocked unconscious!", M), 1, "\red You hear someone fall.", 2) + //Foreach goto(169) + M.show_message(text("\red This was a []% hit. Roleplay it! (personality/memory change if the hit was severe enough)", time * 100 / 120)) + return + +/obj/item/weapon/storage/firstaid/fire/New() + + ..() + new /obj/item/weapon/ointment( src ) + new /obj/item/weapon/ointment( src ) + new /obj/item/weapon/ointment( src ) + new /obj/item/weapon/ointment( src ) + new /obj/item/weapon/healthanalyzer( src ) + var/obj/item/weapon/syringe/S = new /obj/item/weapon/syringe( src ) + var/datum/chemical/rejuv/C = new /datum/chemical/rejuv( null ) + C.moles = C.density * 15 / C.molarmass + S.chem.chemicals[text("[]", C.name)] = C + S.icon_state = "syringe_15" + return + +/obj/item/weapon/storage/firstaid/syringes/New() + + ..() + new /obj/item/weapon/syringe( src ) + new /obj/item/weapon/syringe( src ) + new /obj/item/weapon/syringe( src ) + new /obj/item/weapon/syringe( src ) + new /obj/item/weapon/syringe( src ) + new /obj/item/weapon/syringe( src ) + new /obj/item/weapon/syringe( src ) + return + +/obj/item/weapon/storage/firstaid/regular/New() + + ..() + new /obj/item/weapon/brutepack( src ) + new /obj/item/weapon/brutepack( src ) + new /obj/item/weapon/brutepack( src ) + new /obj/item/weapon/ointment( src ) + new /obj/item/weapon/ointment( src ) + new /obj/item/weapon/healthanalyzer( src ) + var/obj/item/weapon/syringe/S = new /obj/item/weapon/syringe( src ) + var/datum/chemical/rejuv/C = new /datum/chemical/rejuv( null ) + C.moles = C.density * 15 / C.molarmass + S.chem.chemicals[text("[]", C.name)] = C + S.icon_state = "syringe_15" + return + +/obj/item/weapon/storage/firstaid/toxin/New() + + ..() + new /obj/item/weapon/pill_canister/antitoxin( src ) + new /obj/item/weapon/pill_canister/antitoxin( src ) + var/t = null + t = 1 + while(t <= 4) + var/obj/item/weapon/syringe/S = new /obj/item/weapon/syringe( src ) + var/datum/chemical/pl_coag/C = new /datum/chemical/pl_coag( null ) + C.moles = C.density * 15 / C.molarmass + S.chem.chemicals[text("[]", C.name)] = C + S.icon_state = "syringe_15" + t++ + new /obj/item/weapon/healthanalyzer( src ) + return + +/obj/item/weapon/storage/firstaid/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (src.contents.len >= 7) + return + if ((W.w_class >= 2 || istype(W, /obj/item/weapon/storage))) + return + ..() + return + +/obj/item/weapon/tile/New() + + src.pixel_x = rand(1, 14) + src.pixel_y = rand(1, 14) + return + +/obj/item/weapon/tile/attack_hand(mob/user as mob) + + if ((user.r_hand == src || user.l_hand == src)) + src.add_fingerprint(user) + var/obj/item/weapon/tile/F = new /obj/item/weapon/tile( user ) + F.amount = 1 + src.amount-- + if (user.hand) + user.l_hand = F + else + user.r_hand = F + F.layer = 20 + F.add_fingerprint(user) + if (src.amount < 1) + //SN src = null + del(src) + return + else + ..() + return + +/obj/item/weapon/tile/proc/build(turf/S as turf) + + var/area/A = S.loc + var/turf/station/floor/W = new /turf/station/floor( locate(S.x, S.y, S.z) ) + if (istype(A, /area)) + A.contents -= W + A.contents += W + W.burnt = 1 + W.intact = 0 + W.oxygen = 0 + W.n2 = 0 + W.buildlinks() + W.levelupdate() + W.icon_state = "Floor1" + W.health = 100 + return + +/obj/item/weapon/tile/attack_self(mob/user as mob) + + if (usr.stat) + return + var/T = user.loc + if (!( istype(T, /turf) )) + user << "\blue You must be on the ground!" + return + else + var/S = T + if (!( istype(S, /turf/space) )) + user << "You cannot build on or repair this turf!" + return + else + src.build(S) + src.amount-- + if (src.amount < 1) + user.u_equip(src) + //SN src = null + del(src) + return + src.add_fingerprint(user) + return + +/obj/item/weapon/tile/attackby(obj/item/weapon/tile/W as obj, mob/user as mob) + + if (!( istype(W, /obj/item/weapon/tile) )) + return + if (W.amount == 10) + return + W.add_fingerprint(user) + if (W.amount + src.amount > 10) + src.amount = W.amount + src.amount - 10 + W.amount = 10 + else + W.amount += src.amount + //SN src = null + del(src) + return + return + +/obj/item/weapon/tile/examine() + set src in view(1) + + ..() + usr << text("There are [] tile\s left on the stack.", src.amount) + return + +/obj/item/weapon/igniter/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if ((istype(W, /obj/item/weapon/radio/signaler) && !( src.status ))) + var/obj/item/weapon/radio/signaler/S = W + if (!( S.b_stat )) + return + var/obj/item/weapon/assembly/rad_ignite/R = new /obj/item/weapon/assembly/rad_ignite( user ) + S.loc = R + R.part1 = S + S.layer = initial(S.layer) + if (user.client) + user.client.screen -= S + if (user.r_hand == S) + user.u_equip(S) + user.r_hand = R + else + user.u_equip(S) + user.l_hand = R + S.master = R + src.master = R + src.layer = initial(src.layer) + user.u_equip(src) + if (user.client) + user.client.screen -= src + src.loc = R + R.part2 = src + R.layer = 20 + R.loc = user + src.add_fingerprint(user) + + else if ((istype(W, /obj/item/weapon/prox_sensor) && !( src.status ))) + + var/obj/item/weapon/assembly/prox_ignite/R = new /obj/item/weapon/assembly/prox_ignite( user ) + W.loc = R + R.part1 = W + W.layer = initial(W.layer) + if (user.client) + user.client.screen -= W + if (user.r_hand == W) + user.u_equip(W) + user.r_hand = R + else + user.u_equip(W) + user.l_hand = R + W.master = R + src.master = R + src.layer = initial(src.layer) + user.u_equip(src) + if (user.client) + user.client.screen -= src + src.loc = R + R.part2 = src + R.layer = 20 + R.loc = user + src.add_fingerprint(user) + + else if ((istype(W, /obj/item/weapon/timer) && !( src.status ))) + + var/obj/item/weapon/assembly/time_ignite/R = new /obj/item/weapon/assembly/time_ignite( user ) + W.loc = R + R.part1 = W + W.layer = initial(W.layer) + if (user.client) + user.client.screen -= W + if (user.r_hand == W) + user.u_equip(W) + user.r_hand = R + else + user.u_equip(W) + user.l_hand = R + W.master = R + src.master = R + src.layer = initial(src.layer) + user.u_equip(src) + if (user.client) + user.client.screen -= src + src.loc = R + R.part2 = src + R.layer = 20 + R.loc = user + src.add_fingerprint(user) + + + if (!( istype(W, /obj/item/weapon/screwdriver) )) + return + src.status = !( src.status ) + if (src.status) + user.show_message("\blue The igniter is ready!") + else + user.show_message("\blue The igniter can now be attached!") + src.add_fingerprint(user) + return + +/obj/item/weapon/igniter/attack_self(mob/user as mob) + + src.add_fingerprint(user) + spawn( 5 ) + ignite() + return + return + +/obj/item/weapon/igniter/proc/ignite() + + if (src.status) + var/turf/T = src.loc + if (src.master) + T = src.master.loc + if (!( istype(T, /turf) )) + T = T.loc + if (!( istype(T, /turf) )) + T = T.loc + if (locate(/obj/move, T)) + T = locate(/obj/move, T) + else + if (!( istype(T, /turf) )) + return + if (T.firelevel < 900000.0) + T.firelevel = T.poison + return + +/obj/item/weapon/igniter/examine() + set src in view() + + ..() + if ((get_dist(src, usr) <= 1 || src.loc == usr)) + if (src.status) + usr.show_message("The igniter is ready!") + else + usr.show_message("The igniter can be attached!") + return + +/obj/item/weapon/radio/electropack/examine() + set src in view() + + ..() + if ((get_dist(src, usr) <= 1 || src.loc == usr)) + if (src.e_pads) + usr << "\blue The electric pads are exposed!" + return + +/obj/item/weapon/radio/electropack/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/item/weapon/radio/electropack/attack_hand(mob/user as mob) + + if (src == user.back) + user << "\blue You need help taking this off!" + return + else + ..() + return + +/obj/item/weapon/radio/electropack/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (istype(W, /obj/item/weapon/screwdriver)) + src.e_pads = !( src.e_pads ) + if (src.e_pads) + user.show_message("\blue The electric pads have been exposed!") + else + user.show_message("\blue The electric pads have been reinserted!") + src.add_fingerprint(user) + else + if (istype(W, /obj/item/weapon/clothing/head/helmet)) + var/obj/item/weapon/assembly/shock_kit/A = new /obj/item/weapon/assembly/shock_kit( user ) + W.loc = A + A.part1 = W + W.layer = initial(W.layer) + if (user.client) + user.client.screen -= W + if (user.r_hand == W) + user.u_equip(W) + user.r_hand = A + else + user.u_equip(W) + user.l_hand = A + W.master = A + src.master = A + src.layer = initial(src.layer) + user.u_equip(src) + if (user.client) + user.client.screen -= src + src.loc = A + A.part2 = src + A.layer = 20 + src.add_fingerprint(user) + A.add_fingerprint(user) + return + +/obj/item/weapon/radio/electropack/Topic(href, href_list) + ..() + if (usr.stat || usr.restrained()) + return + if (((istype(usr, /mob/human) && ((!( ticker ) || (ticker && ticker.mode != "monkey")) && usr.contents.Find(src))) || (usr.contents.Find(src.master) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf))))) + usr.machine = src + if (href_list["freq"]) + src.freq += text2num(href_list["freq"]) + if (src.freq * 10 % 2 == 0) + src.freq += 0.1 + src.freq = min(148.9, src.freq) + src.freq = max(144.1, src.freq) + else + if (href_list["code"]) + src.code += text2num(href_list["code"]) + src.code = round(src.code) + src.code = min(100, src.code) + src.code = max(1, src.code) + else + if (href_list["power"]) + src.on = !( src.on ) + src.icon_state = text("electropack[]", src.on) + if (!( src.master )) + if (istype(src.loc, /mob)) + attack_self(src.loc) + else + for(var/mob/M in viewers(1, src)) + if (M.client) + src.attack_self(M) + //Foreach goto(308) + else + if (istype(src.master.loc, /mob)) + src.attack_self(src.master.loc) + else + for(var/mob/M in viewers(1, src.master)) + if (M.client) + src.attack_self(M) + //Foreach goto(384) + else + usr << browse(null, "window=radio") + return + return + +/obj/item/weapon/radio/electropack/accept_rad(obj/item/weapon/radio/signaler/R as obj, message) + + if ((istype(R, /obj/item/weapon/radio/signaler) && R.freq == src.freq && R.code == src.code)) + return 1 + else + return null + return + +/obj/item/weapon/radio/electropack/r_signal() + + //***** + //world << "electropack \ref[src] got signal: [src.loc] [on]" + if ((ismob(src.loc) && src.on)) + + var/mob/M = src.loc + var/turf/T = M.loc + if ((istype(T, /turf) || istype(T, /obj/move))) + if (M.last_move) + step(M, M.last_move) + M.show_message("\red You feel a sharp shock!") + + + if (M.weakened < 10) + M.weakened = 10 + + if ((src.master && src.wires & 1)) + src.master:r_signal(1) + return + +/obj/item/weapon/radio/electropack/attack_self(mob/user as mob, flag1) + + if (!( istype(user, /mob/human) )) + return + user.machine = src + var/dat = text("[]
    \nFrequency/Code for electropack:
    \nFrequency: -- [] ++
    \nCode: -- [] ++
    \n
    ", src, (src.on ? "Turn Off" : "Turn On"), src, src, src.freq, src, src, src, src, src.code, src, src) + user << browse(dat, "window=radio") + return + +/obj/item/weapon/radio/proc/accept_rad(obj/item/weapon/radio/R as obj, message) + + if ((R.freq == src.freq && message)) + return 1 + else + return null + return + +/obj/item/weapon/radio/proc/r_signal() + + return + +/obj/item/weapon/radio/proc/send_crackle() + + if ((src.listening && src.wires & 2)) + return hearers(3, src.loc) + return + +/obj/item/weapon/radio/proc/sendm(msg) + + if ((src.listening && src.wires & 2)) + return hearers(1, src.loc) + return + +/obj/item/weapon/radio/examine() + set src in view() + + ..() + if ((get_dist(src, usr) <= 1 || src.loc == usr)) + if (src.b_stat) + usr.show_message("\blue The radio can be attached and modified!") + else + usr.show_message("\blue The radio can not be modified or attached!") + return + +/obj/item/weapon/radio/attackby(obj/item/weapon/W as obj, mob/user as mob) + + user.machine = src + if (!( istype(W, /obj/item/weapon/screwdriver) )) + return + src.b_stat = !( src.b_stat ) + if (src.b_stat) + user.show_message("\blue The radio can now be attached and modified!") + else + user.show_message("\blue The radio can no longer be modified or attached!") + for(var/mob/M in viewers(1, src)) + if (M.client) + src.attack_self(M) + //Foreach goto(83) + src.add_fingerprint(user) + return + +/obj/item/weapon/radio/beacon/hear_talk() + + return + return + +/obj/item/weapon/radio/beacon/sendm() + + return null + return + +/obj/item/weapon/radio/beacon/send_crackle() + + return null + return + +/obj/item/weapon/radio/beacon/verb/alter_signal(t as text) + set src in usr + + if ((usr.canmove && !( usr.restrained() ))) + src.code = t + if (!( src.code )) + src.code = "beacon" + src.add_fingerprint(usr) + return + +/obj/item/weapon/radio/signaler/accept_rad(obj/item/weapon/radio/signaler/R as obj, message) + + if ((istype(R, /obj/item/weapon/radio/signaler) && R.freq == src.freq && R.code == src.code)) + return 1 + else + return null + return + +/obj/item/weapon/radio/signaler/examine() + set src in view() + + ..() + if ((get_dist(src, usr) <= 1 || src.loc == usr)) + if (src.b_stat) + usr.show_message("\blue The signaler can be attached and modified!") + else + usr.show_message("\blue The signaler can not be modified or attached!") + return + +/obj/item/weapon/radio/signaler/attack_self(mob/user as mob, flag1) + + user.machine = src + var/t1 + if ((src.b_stat && !( flag1 ))) + t1 = text("-------
    \nGreen Wire: []
    \nRed Wire: []
    \nBlue Wire: []
    \n", (src.wires & 4 ? text("Cut Wire", src) : text("Mend Wire", src)), (src.wires & 2 ? text("Cut Wire", src) : text("Mend Wire", src)), (src.wires & 1 ? text("Cut Wire", src) : text("Mend Wire", src))) + else + t1 = "-------" + var/dat = text("Speaker: []
    \nSend Signal
    \nFrequency/Code for signaler:
    \nFrequency: -- [] ++
    \nCode: -- [] ++
    \n[]
    ", (src.listening ? text("Engaged", src) : text("Disengaged", src)), src, src, src, src.freq, src, src, src, src, src.code, src, src, t1) + user << browse(dat, "window=radio") + return + +/obj/item/weapon/radio/signaler/hear_talk() + + return + return + +/obj/item/weapon/radio/signaler/sendm() + + return + return + +/obj/item/weapon/radio/signaler/send_crackle() + + return + return + +/obj/item/weapon/radio/signaler/r_signal(signal) + + + + if (!( src.wires & 2 )) + return + if ((src.master && src.wires & 1)) + + + src.master:r_signal(signal) + for(var/mob/O in hearers(1, src.loc)) + O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2) + //Foreach goto(64) + return + +/obj/item/weapon/radio/signaler/proc/s_signal(signal) + + + if (signal == null) + signal = 1 + if (!( src.wires & 4 )) + return + + if(delay) + return + delay = 1 + + //world << "Sending signal from signaler \ref[src]: [freq]/[code]" + + for(var/obj/item/weapon/radio/R in world) + + if (R.accept_rad(src)) + spawn( 0 ) + + if (R) + R.r_signal(signal) + return + //Foreach goto(48) + + sleep(50) + delay = 0 + return + +/obj/item/weapon/radio/signaler/Topic(href, href_list) + ..() + if (usr.stat) + return + if ((usr.contents.Find(src) || (usr.contents.Find(src.master) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf))))) + usr.machine = src + if (href_list["freq"]) + src.freq += text2num(href_list["freq"]) + if (src.freq * 10 % 2 == 0) + src.freq += 0.1 + src.freq = min(148.9, src.freq) + src.freq = max(144.1, src.freq) + else + if (href_list["code"]) + src.code += text2num(href_list["code"]) + src.code = round(src.code) + src.code = min(100, src.code) + src.code = max(1, src.code) + else + if (href_list["send"]) + var/t1 = round(text2num(href_list["send"])) + spawn( 0 ) + src.s_signal(t1) + + return + else + if (href_list["listen"]) + src.listening = text2num(href_list["listen"]) + else + if (href_list["wires"]) + var/t1 = text2num(href_list["wires"]) + if (!( istype(usr.equipped(), /obj/item/weapon/wirecutters) )) + return + if ((!( src.b_stat ) && !( src.master ))) + return + if (t1 & 1) + if (src.wires & 1) + src.wires &= 65534 + else + src.wires |= 1 + else + if (t1 & 2) + if (src.wires & 2) + src.wires &= 65533 + else + src.wires |= 2 + else + if (t1 & 4) + if (src.wires & 4) + src.wires &= 65531 + else + src.wires |= 4 + src.add_fingerprint(usr) + if (!( src.master )) + if (istype(src.loc, /mob)) + attack_self(src.loc) + else + for(var/mob/M in viewers(1, src)) + if (M.client) + src.attack_self(M) + //Foreach goto(501) + else + if (istype(src.master.loc, /mob)) + src.attack_self(src.master.loc) + else + for(var/mob/M in viewers(1, src.master)) + if (M.client) + src.attack_self(M) + //Foreach goto(577) + else + usr << browse(null, "window=radio") + return + return + +/obj/item/weapon/radio/intercom/attack_paw(mob/user as mob) + + if ((ticker && ticker.mode == "monkey")) + return src.attack_hand(user) + return + +/obj/item/weapon/radio/intercom/attack_hand(mob/user as mob) + + src.add_fingerprint(user) + spawn( 0 ) + attack_self(user) + return + return + +/obj/item/weapon/radio/intercom/send_crackle() + + if (src.listening) + return list( ) + return + +/obj/item/weapon/radio/intercom/sendm(msg) + + if (src.listening) + return hearers(7, src.loc) + return + +/obj/item/weapon/radio/attack_self(mob/user as mob) + + user.machine = src + var/t1 + if (src.b_stat) + t1 = text("-------
    \nGreen Wire: []
    \nRed Wire: []
    \nBlue Wire: []
    \n", (src.wires & 4 ? text("Cut Wire", src) : text("Mend Wire", src)), (src.wires & 2 ? text("Cut Wire", src) : text("Mend Wire", src)), (src.wires & 1 ? text("Cut Wire", src) : text("Mend Wire", src))) + else + t1 = "-------" + var/dat = text("Microphone: []
    \nSpeaker: []
    \nFrequency: -- [] ++
    \n[]
    ", (src.broadcasting ? text("Engaged", src) : text("Disengaged", src)), (src.listening ? text("Engaged", src) : text("Disengaged", src)), src, src, src.freq, src, src, t1) + user << browse(dat, "window=radio") + return + +/obj/item/weapon/radio/Topic(href, href_list) + ..() + if (usr.stat) + return + if ((usr.contents.Find(src) || get_dist(src, usr) <= 1 && istype(src.loc, /turf))) + usr.machine = src + if (href_list["freq"]) + src.freq += text2num(href_list["freq"]) + if (src.freq * 10 % 2 == 0) + src.freq += 0.1 + src.freq = min(148.9, src.freq) + src.freq = max(144.1, src.freq) + else + if (href_list["talk"]) + src.broadcasting = text2num(href_list["talk"]) + else + if (href_list["listen"]) + src.listening = text2num(href_list["listen"]) + else + if (href_list["wires"]) + var/t1 = text2num(href_list["wires"]) + if (!( istype(usr.equipped(), /obj/item/weapon/wirecutters) )) + return + if (t1 & 1) + if (src.wires & 1) + src.wires &= 65534 + else + src.wires |= 1 + else + if (t1 & 2) + if (src.wires & 2) + src.wires &= 65533 + else + src.wires |= 2 + else + if (t1 & 4) + if (src.wires & 4) + src.wires &= 65531 + else + src.wires |= 4 + if (!( src.master )) + if (istype(src.loc, /mob)) + attack_self(src.loc) + else + for(var/mob/M in viewers(1, src)) + if (M.client) + src.attack_self(M) + //Foreach goto(390) + else + if (istype(src.master.loc, /mob)) + src.attack_self(src.master.loc) + else + for(var/mob/M in viewers(1, src.master)) + if (M.client) + src.attack_self(M) + //Foreach goto(466) + src.add_fingerprint(usr) + else + usr << browse(null, "window=radio") + return + return + +/obj/item/weapon/radio/talk_into(mob/M as mob, msg) + + if (!( src.wires & 4 )) + return + var/list/receive = list( ) + var/list/crackle = list( ) + for(var/obj/item/weapon/radio/R in world) + if (((src.freq == 0 || R.accept_rad(src, msg)) && src.freq != 5)) + for(var/i in R.sendm(msg)) + receive -= i + receive += i + //Foreach goto(118) + for(var/i in R.send_crackle()) + crackle -= i + crackle += i + //Foreach goto(162) + //Foreach goto(43) + for(var/i in receive) + crackle -= i + //Foreach goto(203) + for(var/mob/O in crackle) + O.show_message(text("\icon[] Crackle,Crackle", src), 2) + //Foreach goto(233) + if (istype(M, /mob/human)) + for(var/mob/O in receive) + if (istype(O, /mob/human)) + O.show_message(text("[]-\icon[]\[[]\]-broadcasts: []", M.rname, src, src.freq, msg), 2) + else + O.show_message(text("[]-\icon[]\[[]\]-broadcasts: []", M.rname, src, src.freq, stars(msg)), 2) + //Foreach goto(284) + if (src.freq == 5) + for(var/mob/O in receive) + if (istype(O, /mob/human)) + O.show_message(text("[]-\icon[]\[[]\]-broadcasts (over PA): []", M.rname, src, src.freq, msg), 2) + else + O.show_message(text("[]-\icon[]\[[]\]-broadcasts (over PA): []", M.rname, src, src.freq, stars(msg)), 2) + //Foreach goto(393) + else + for(var/mob/O in receive) + if (istype(O, M)) + O.show_message(text("The monkey-\icon[]\[[]\]-broadcasts: []", src, src.freq, msg), 2) + else + O.show_message(text("The monkey-\icon[]\[[]\]-broadcasts: chimpering", src, src.freq), 2) + //Foreach goto(492) + if (src.freq == 5) + for(var/mob/O in receive) + if (istype(O, M)) + O.show_message(text("The monkey-\icon[]\[[]\]-broadcasts (over PA): []", src, src.freq, msg), 2) + else + O.show_message(text("The monkey-\icon[]\[[]\]-broadcasts (over PA): chimpering", src, src.freq), 2) + //Foreach goto(585) + return + +/obj/item/weapon/radio/hear_talk(mob/M as mob, msg) + + if (src.broadcasting) + talk_into(M, msg) + return + +/obj/item/weapon/shard/Bump() + + spawn( 0 ) + if (prob(20)) + src.force = 15 + else + src.force = 4 + ..() + return + return + +/obj/item/weapon/shard/New() + + //****RM + //world<<"New shard at [x],[y],[z]" + + src.icon_state = pick("large", "medium", "small") + switch(src.icon_state) + if("small") + src.pixel_x = rand(1, 18) + src.pixel_y = rand(1, 18) + if("medium") + src.pixel_x = rand(1, 16) + src.pixel_y = rand(1, 16) + if("large") + src.pixel_x = rand(1, 10) + src.pixel_y = rand(1, 5) + else + return + +/obj/item/weapon/shard/attackby(obj/item/weapon/W as obj, mob/user as mob) + + ..() + if (!( istype(W, /obj/item/weapon/weldingtool) )) + return + new /obj/item/weapon/sheet/glass( user.loc ) + //SN src = null + del(src) + return + return + +/obj/item/weapon/Bump(mob/M as mob) + + spawn( 0 ) + ..() + if (src.throwing) + src.throwing = 0 + src.density = 0 + if (istype(M, /obj)) + var/obj/O = M + for(var/mob/B in viewers(M, null)) + B.show_message(text("\red [] has been hit by [].", M, src), 1) + //Foreach goto(71) + O.hitby(src) + if (!( istype(M, /mob) )) + return + for(var/mob/O in viewers(M, null)) + O.show_message(text("\red [] has been hit by [].", M, src), 1) + //Foreach goto(143) + if (M.health > -100.0) + if (istype(M, /mob/human)) + var/mob/human/H = M + var/dam_zone = pick("chest", "diaper", "head") + if (H.organs[text("[]", dam_zone)]) + var/obj/item/weapon/organ/external/affecting = H.organs[text("[]", dam_zone)] + if (affecting.take_damage(src.throwforce, 0)) + H.UpdateDamageIcon() + else + H.UpdateDamage() + else + M.bruteloss += src.throwforce + M.health = 100 - M.oxyloss - M.toxloss - M.fireloss - M.bruteloss + return + return + +/obj/item/weapon/wrench/New() + + if (prob(75)) + src.pixel_x = rand(0, 16) + return + +/obj/item/weapon/screwdriver/New() + + if (prob(75)) + src.pixel_y = rand(0, 16) + return + +/obj/item/weapon/dropper/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/item/weapon/dropper/attack_hand() + + ..() + src.update_is() + return + +/obj/item/weapon/dropper/proc/update_is() + + var/t1 = round(src.chem.volume()) + if (istype(src.loc, /mob)) + if (src.mode == "inject") + src.icon_state = text("dropper_[]_I", t1) + else + src.icon_state = text("dropper_[]_d", t1) + else + src.icon_state = text("dropper_[]", t1) + src.s_istate = "dropper" + return + +/obj/item/weapon/dropper/dropped() + + ..() + src.update_is() + return + +/obj/item/weapon/dropper/attack_self() + + if (src.mode == "inject") + src.mode = "draw" + else + src.mode = "inject" + src.update_is() + return + +/obj/item/weapon/dropper/New() + + src.chem = new /obj/substance/chemical( ) + src.chem.maximum = 5 + ..() + return + +/obj/item/weapon/dropper/attack(mob/M as mob, mob/user as mob) + + if (!( istype(M, /mob) )) + return + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + user << "\red You don't have the dexterity to do this!" + return + if (user) + for(var/mob/O in viewers(M, null)) + O.show_message(text("\red [] has been eyedropped with [] by [].", M, src, user), 1) + //Foreach goto(89) + var/amount = src.chem.dropper_mob(M, 1) + src.update_is() + user.show_message(text("\red You drop [] units into []'s eyes. The dropper contains [] millimeters.", amount, M, src.chem.volume())) + src.add_fingerprint(user) + return + +/obj/item/weapon/implantcase/proc/update() + + if (src.imp) + src.icon_state = text("implantcase-[]", src.imp.color) + else + src.icon_state = "implantcase-0" + return + +/obj/item/weapon/implantcase/attackby(obj/item/weapon/I as obj, mob/user as mob) + + if (istype(I, /obj/item/weapon/pen)) + var/t = input(user, "What would you like the label to be?", text("[]", src.name), null) as text + if (user.equipped() != I) + return + if ((get_dist(src, usr) > 1 && src.loc != user)) + return + t = html_encode(t) + if (t) + src.name = text("Glass Case- '[]'", t) + else + src.name = "Glass Case" + else + if (!( istype(I, /obj/item/weapon/implanter) )) + return + if (I:imp) + if ((src.imp || I:imp.implanted)) + return + I:imp.loc = src + src.imp = I:imp + I:imp = null + src.update() + I:update() + else + if (src.imp) + if (I:imp) + return + src.imp.loc = I + I:imp = src.imp + src.imp = null + update() + I:update() + return + +/obj/item/weapon/implantcase/tracking/New() + + src.imp = new /obj/item/weapon/implant/tracking( src ) + ..() + return + +/obj/item/weapon/implantpad/proc/update() + + if (src.case) + src.icon_state = "implantpad-1" + else + src.icon_state = "implantpad-0" + return + +/obj/item/weapon/implantpad/attack_hand(mob/user as mob) + + if ((src.case && (user.l_hand == src || user.r_hand == src))) + if (user.hand) + user.l_hand = src.case + else + user.r_hand = src.case + src.case.loc = user + src.case.layer = 20 + src.case.add_fingerprint(user) + src.case = null + user.UpdateClothing() + src.add_fingerprint(user) + update() + else + if (user.contents.Find(src)) + spawn( 0 ) + src.attack_self(user) + return + else + return ..() + return + +/obj/item/weapon/implantpad/attackby(obj/item/weapon/implantcase/C as obj, mob/user as mob) + + if (istype(C, /obj/item/weapon/implantcase)) + if (!( src.case )) + user.drop_item() + C.loc = src + src.case = C + else + return + src.update() + return + +/obj/item/weapon/implantpad/attack_self(mob/user as mob) + + user.machine = src + var/dat = "Implant Mini-Computer:
    " + if (src.case) + if (src.case.imp) + if (istype(src.case.imp, /obj/item/weapon/implant/tracking)) + var/obj/item/weapon/implant/tracking/T = src.case.imp + dat += text("Implant Specifications:
    \nName: Tracking Beacon
    \nZone: Spinal Column> 2-5 vertebrae
    \nPower Source: Nervous System Ion Withdrawl Gradient
    \nLife: 10 minutes after death of host
    \nImportant Notes: None
    \n
    \nImplant Details:
    \nFunction: Continuously transmits low power signal on frequency- Useful for tracking.
    \nRange: 35-40 meters
    \nSpecial Features:
    \nNeuro-Safe- Specialized shell absorbs excess voltages self-destructing the chip if\na malfunction occurs thereby securing safety of subject. The implant will melt and\ndisintegrate into bio-safe elements.
    \nIntegrity: Gradient creates slight risk of being overcharged and frying the\ncircuitry. As a result neurotoxins can cause massive damage.
    \nImplant Specifics:\nFrequency (144.1-148.9): -- [] ++
    \nID (1-100): -- [] ++
    ", src, src, T.freq, src, src, src, src, T.id, src, src) + else + if (istype(src.case.imp, /obj/item/weapon/implant/freedom)) + dat += "Implant Specifications:
    \nName: Freedom Beacon
    \nZone: Right Hand> Near wrist
    \nPower Source: Lithium Ion Battery
    \nLife: optimum 5 uses
    \nImportant Notes: Illegal
    \n
    \nImplant Details:
    \nFunction: Transmits a specialized cluster of signals to override handcuff locking\nmechanisms
    \nSpecial Features:
    \nNeuro-Scan- Analyzes certain shadow signals in the nervous system along the dark\njoy sectors which respond mainly to chuckling
    \nIntegrity: The battery is extremely weak and commonly after injection its\nlife can drive down to only 1 use.
    \nNo Implant Specifics" + else + dat += "Implant ID not in database" + else + dat += "The implant casing is empty." + else + dat += "Please insert an implant casing!" + user << browse(dat, "window=implantpad") + return + +/obj/item/weapon/implantpad/Topic(href, href_list) + ..() + if (usr.stat) + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["freq"]) + if ((istype(src.case, /obj/item/weapon/implantcase) && istype(src.case.imp, /obj/item/weapon/implant/tracking))) + var/obj/item/weapon/implant/tracking/T = src.case.imp + T.freq += text2num(href_list["freq"]) + if (T.freq * 10 % 2 == 0) + T.freq += 0.1 + T.freq = min(148.9, T.freq) + T.freq = max(144.1, T.freq) + if (href_list["id"]) + if ((istype(src.case, /obj/item/weapon/implantcase) && istype(src.case.imp, /obj/item/weapon/implant/tracking))) + var/obj/item/weapon/implant/tracking/T = src.case.imp + T.id += text2num(href_list["id"]) + T.id = min(100, T.id) + T.id = max(1, T.id) + if (istype(src.loc, /mob)) + attack_self(src.loc) + else + for(var/mob/M in viewers(1, src)) + if (M.client) + src.attack_self(M) + //Foreach goto(290) + src.add_fingerprint(usr) + else + usr << browse(null, "window=implantpad") + return + return + +/obj/item/weapon/implant/proc/trigger(emote, source as mob) + + return + +/obj/item/weapon/implant/freedom/New() + + src.uses = rand(1, 5) + ..() + return + +/obj/item/weapon/implant/freedom/trigger(emote, mob/source as mob) + + if (src.uses < 1) + return 0 + if (emote == "chuckle") + src.uses-- + if (source.handcuffed) + var/obj/item/weapon/W = source.handcuffed + source.handcuffed = null + if (source.client) + source.client.screen -= W + if (W) + W.loc = source.loc + dropped(source) + if (W) + W.layer = initial(W.layer) + return + +/obj/item/weapon/implanter/proc/update() + + if (src.imp) + src.icon_state = "implanter1" + else + src.icon_state = "implanter0" + return + +/obj/item/weapon/implanter/attack(mob/M as mob, mob/user as mob) + + if (!( istype(M, /mob) )) + return + if ((user && src.imp)) + for(var/mob/O in viewers(M, null)) + O.show_message(text("\red [] has been implanted by [].", M, user), 1) + //Foreach goto(48) + src.imp.loc = M + src.imp.implanted = 1 + src.imp = null + user.show_message(text("\red You implanted the implant into the [].", M)) + src.icon_state = "implanter0" + return + +/obj/item/weapon/syringe/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/item/weapon/syringe/attack_hand() + + ..() + src.update_is() + return + +/obj/item/weapon/syringe/proc/update_is() + + var/t1 = round(src.chem.volume(), 5) + if (istype(src.loc, /mob)) + if (src.mode == "inject") + src.icon_state = text("syringe_[]_I", t1) + else + src.icon_state = text("syringe_[]_d", t1) + else + src.icon_state = text("syringe_[]", t1) + src.s_istate = text("syringe_[]", t1) + return + +/obj/item/weapon/syringe/proc/inject(mob/M as mob) + + var/amount = 5 + var/volume = src.chem.volume() + if (volume < 0.01) + return + else + if (volume < 5.01) + amount = volume - 0.01 + amount = src.chem.transfer_mob(M, amount) + src.update_is() + return amount + return + +/obj/item/weapon/syringe/dropped() + + ..() + src.update_is() + return + +/obj/item/weapon/syringe/attack_self() + + if (src.mode == "inject") + src.mode = "draw" + else + src.mode = "inject" + src.update_is() + return + +/obj/item/weapon/syringe/New() + + src.chem = new /obj/substance/chemical( ) + src.chem.maximum = 15 + ..() + return + +/obj/item/weapon/syringe/attack(mob/M as mob, mob/user as mob) + + if (!( istype(M, /mob) )) + return + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + user << "\red You don't have the dexterity to do this!" + return + if (user) + if (istype(M, /mob/human)) + var/obj/equip_e/human/O = new /obj/equip_e/human( ) + O.source = user + O.target = M + O.item = src + O.s_loc = user.loc + O.t_loc = M.loc + O.place = "syringe" + M.requests += O + spawn( 0 ) + O.process() + return + else + for(var/mob/O in viewers(M, null)) + O.show_message(text("\red [] has been injected with [] by [].", M, src, user), 1) + //Foreach goto(192) + var/amount = src.chem.transfer_mob(M, 5) + src.update_is() + + user.show_message(text("\red You inject [] units into the []. The syringe contains [] millimeters.", amount, M, src.chem.volume())) + return + +/obj/item/weapon/brutepack/attack_hand(mob/user as mob) + + if ((user.r_hand == src || user.l_hand == src)) + src.add_fingerprint(user) + var/obj/item/weapon/brutepack/F = new /obj/item/weapon/brutepack( user ) + F.amount = 1 + src.amount-- + if (user.hand) + user.l_hand = F + else + user.r_hand = F + F.layer = 20 + F.add_fingerprint(user) + if (src.amount < 1) + //SN src = null + del(src) + return + else + ..() + return + +/obj/item/weapon/brutepack/attack(mob/M as mob, mob/user as mob) + + if (M.health < 0) + return + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + user << "\red You don't have the dexterity to do this!" + return + if (user) + for(var/mob/O in viewers(M, null)) + O.show_message(text("\red [] has been applied with [] by []", M, src, user), 1) + //Foreach goto(89) + if (istype(M, /mob/human)) + var/mob/human/H = M + var/obj/item/weapon/organ/external/affecting = H.organs["chest"] + if (istype(user, /mob/human)) + var/mob/human/user2 = user + var/t = user2.zone_sel.selecting + if ((t in list( "hair", "eyes", "mouth", "neck" ))) + t = "head" + if (H.organs[text("[]", t)]) + affecting = H.organs[text("[]", t)] + else + if ((!( istype(affecting, /obj/item/weapon/organ/external) ) || affecting:burn_dam <= 0)) + affecting = H.organs["head"] + if ((!( istype(affecting, /obj/item/weapon/organ/external) ) || affecting:burn_dam <= 0)) + affecting = H.organs["diaper"] + if (affecting.heal_damage(60, 0)) + H.UpdateDamageIcon() + else + H.UpdateDamage() + M.health = 100 - M.oxyloss - M.toxloss - M.fireloss - M.bruteloss + src.amount-- + return + +/obj/item/weapon/brutepack/examine() + set src in view(1) + + ..() + usr << text("\blue there are [] bruise pack\s left on the stack!", src.amount) + if (src.amount <= 0) + //SN src = null + del(src) + return + return + +/obj/item/weapon/brutepack/attackby(obj/item/weapon/brutepack/W as obj, mob/user as mob) + + if (!( istype(W, /obj/item/weapon/brutepack) )) + return + if (src.amount == 5) + return + if (W.amount + src.amount > 5) + src.amount = 5 + W.amount = W.amount + src.amount - 5 + else + src.amount += W.amount + //W = null + del(W) + return + +/obj/item/weapon/hand_tele/attack_self(mob/user as mob) + + var/list/L = list( ) + for(var/obj/machinery/teleport/hub/R in world) + var/obj/machinery/computer/teleporter/com = locate(/obj/machinery/computer/teleporter, locate(R.x - 2, R.y, R.z)) + if (istype(com, /obj/machinery/computer/teleporter)) + L[text("[][]", com.id, (src.icon_state == "tele1" ? " (Active)" : " (Inactive)"))] = com.locked + //Foreach goto(22) + var/t1 = input(user, "Please select a location to lock in.", "Locking Computer", null) in L + if ((user.equipped() != src || user.stat || user.restrained())) + return + var/T = L[t1] + for(var/mob/O in hearers(user, null)) + O.show_message("\blue Locked In", 2) + //Foreach goto(192) + var/obj/portal/P = new /obj/portal( get_turf(src) ) + P.target = T + src.add_fingerprint(user) + return + +/obj/item/weapon/ointment/attack_hand(mob/user as mob) + + if ((user.r_hand == src || user.l_hand == src)) + src.add_fingerprint(user) + var/obj/item/weapon/ointment/F = new /obj/item/weapon/ointment( user ) + F.amount = 1 + src.amount-- + if (user.hand) + user.l_hand = F + else + user.r_hand = F + F.layer = 20 + F.add_fingerprint(user) + if (src.amount < 1) + //SN src = null + del(src) + return + else + ..() + return + +/obj/item/weapon/ointment/attack(mob/M as mob, mob/user as mob) + + if (M.health < 0) + return + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + user << "\red You don't have the dexterity to do this!" + return + if (user) + for(var/mob/O in viewers(M, null)) + if ((O.client && !( O.blinded ))) + O.show_message(text("\red [] has been applied with [] by []", M, src, user), 1) + //Foreach goto(89) + if (istype(M, /mob/human)) + var/mob/human/H = M + var/obj/item/weapon/organ/external/affecting = H.organs["chest"] + if (istype(user, /mob/human)) + var/mob/user2 = user + var/t = user2.zone_sel.selecting + if ((t in list( "hair", "eyes", "mouth", "neck" ))) + t = "head" + if (H.organs[text("[]", t)]) + affecting = H.organs[text("[]", t)] + else + if ((!( istype(affecting, /obj/item/weapon/organ/external) ) || affecting.burn_dam <= 0)) + affecting = H.organs["head"] + if ((!( istype(affecting, /obj/item/weapon/organ/external) ) || affecting.burn_dam <= 0)) + affecting = H.organs["diaper"] + if (affecting.heal_damage(0, 40)) + H.UpdateDamageIcon() + else + H.UpdateDamage() + src.amount-- + if (src.amount <= 0) + //SN src = null + del(src) + return + return + +/obj/item/weapon/ointment/examine() + set src in view(1) + + usr << text("\blue there are [] ointment pack\s left on the stack!", src.amount) + return + +/obj/item/weapon/ointment/attackby(obj/item/weapon/ointment/W as obj, mob/user as mob) + + if (!( istype(W, /obj/item/weapon/ointment) )) + return + if (W.amount == 5) + return + if (W.amount + src.amount > 5) + src.amount = W.amount + src.amount - 5 + W.amount = 5 + else + W.amount += W.amount + //SN src = null + del(src) + return + return + +/obj/item/weapon/bottle/examine() + set src in usr + + usr << text("\blue The bottle \icon[] contains [] millimeters of chemicals", src, round(src.chem.volume(), 0.1)) + return + +/obj/item/weapon/bottle/New() + + src.chem = new /obj/substance/chemical( ) + ..() + return + +/obj/item/weapon/bottle/attackby(obj/item/weapon/B as obj, mob/user as mob) + + if (istype(B, /obj/item/weapon/bottle)) + var/t1 = src.chem.maximum + var/volume = src.chem.volume() + if (volume < 0.1) + return + else + t1 = volume - 0.1 + t1 = src.chem.transfer_from(B:chem, t1) + if (t1) + user.show_message(text("\blue You pour [] unit\s into the bottle. The bottle now contains [] millimeters.", round(t1, 0.1), round(src.chem.volume(), 0.1))) + if (istype(B, /obj/item/weapon/syringe)) + if (B:mode == "inject") + var/t1 = 5 + var/volume = src.chem.volume() + if (volume < 0.01) + return + else + if (volume < 5.01) + t1 = volume - 0.01 + t1 = src.chem.transfer_from(B:chem, t1) + B:update_is() + if (t1) + user.show_message(text("\blue You inject [] unit\s into the bottle. The syringe contains [] units.", round(t1, 0.1), round(B:chem.volume(), 0.1))) + else + var/t1 = 5 + var/volume = src.chem.volume() + if (volume < 0.05) + return + else + if (volume < 5.05) + t1 = volume - 0.05 + t1 = B:chem.transfer_from(src.chem, t1) + B:update_is() + if (t1) + user.show_message(text("\blue You draw [] unit\s from the bottle. The syringe contains [] units.", round(t1, 0.1), round(B:chem.volume(), 0.1))) + src.add_fingerprint(user) + else + if (istype(B, /obj/item/weapon/dropper)) + if (B:mode == "inject") + var/t1 = 1 + var/volume = src.chem.volume() + if (volume < 0.0050) + return + else + if (volume < 1.005) + t1 = volume - 0.0050 + t1 = src.chem.transfer_from(B:chem, t1) + B:update_is() + if (t1) + user.show_message(text("\blue You deposit [] unit\s into the bottle. The dropper contains [] units.", round(t1, 0.1), round(B:chem.volume(), 0.1))) + else + var/t1 = 1 + var/volume = src.chem.volume() + if (volume < 0.0050) + return + else + if (volume < 1.005) + t1 = volume - 0.0050 + t1 = B:chem.transfer_from(src.chem, t1) + B:update_is() + if (t1) + user.show_message(text("\blue You extract [] unit\s from the bottle. The dropper contains [] units.", round(t1, 0.1), round(B:chem.volume(), 0.1))) + return + +/obj/item/weapon/bottle/toxins/New() + + ..() + src.chem.maximum = 60 + var/datum/chemical/l_plas/C = new /datum/chemical/l_plas( null ) + C.moles = C.density * 50 / C.molarmass + src.chem.chemicals[text("[]", C.name)] = C + return + +/obj/item/weapon/bottle/antitoxins/New() + + ..() + src.chem.maximum = 60 + var/datum/chemical/pl_coag/C = new /datum/chemical/pl_coag( null ) + C.moles = C.density * 50 / C.molarmass + src.chem.chemicals[text("[]", C.name)] = C + return + +/obj/item/weapon/bottle/r_epil/New() + + ..() + src.chem.maximum = 60 + var/datum/chemical/epil/C = new /datum/chemical/epil( null ) + C.moles = C.density * 50 / C.molarmass + src.chem.chemicals[text("[]", C.name)] = C + return + +/obj/item/weapon/bottle/r_ch_cough/New() + + ..() + src.chem.maximum = 60 + var/datum/chemical/ch_cou/C = new /datum/chemical/ch_cou( null ) + C.moles = C.density * 50 / C.molarmass + src.chem.chemicals[text("[]", C.name)] = C + return + +/obj/item/weapon/bottle/rejuvenators/New() + + ..() + src.chem.maximum = 60 + var/datum/chemical/rejuv/C = new /datum/chemical/rejuv( null ) + C.moles = C.density * 50 / C.molarmass + src.chem.chemicals[text("[]", C.name)] = C + return + +/obj/item/weapon/bottle/s_tox/New() + + ..() + src.chem.maximum = 60 + var/datum/chemical/s_tox/C = new /datum/chemical/s_tox( null ) + C.moles = C.density * 50 / C.molarmass + src.chem.chemicals[text("[]", C.name)] = C + return + +/obj/item/weapon/bottle/New() + + ..() + src.pixel_y = rand(-8.0, 8) + src.pixel_x = rand(-8.0, 8) + return + +/obj/item/weapon/weldingtool/examine() + set src in usr + + usr << text("\icon[] [] contains [] units of fuel left!", src, src.name, src.weldfuel) + return + +/obj/item/weapon/weldingtool/afterattack(O as obj, mob/user as mob) + + if (src.welding) + src.weldfuel-- + if (src.weldfuel <= 0) + usr << "\blue Need more fuel!" + src.welding = 0 + src.force = 3 + src.damtype = "brute" + src.icon_state = "welder" + var/turf/location = user.loc + if (!( istype(location, /turf) )) + return + location.firelevel = location.poison + 1 + return + +/obj/item/weapon/weldingtool/attack_self(mob/user as mob) + + src.welding = !( src.welding ) + if (src.welding) + if (src.weldfuel <= 0) + user << "\blue Need more fuel!" + src.welding = 0 + return 0 + user << "\blue You will now weld when you attack." + src.force = 15 + src.damtype = "fire" + src.icon_state = "welder1" + else + user << "\blue Not welding anymore." + src.force = 3 + src.damtype = "brute" + src.icon_state = "welder" + return + +/obj/manifest/New() + + src.invisibility = 100 + return + +/obj/manifest/proc/manifest() + + var/dat = "Crew Manifest:
    " + for(var/mob/human/M in world) + if (M.start) + dat += text(" [] - []
    ", M.name, (istype(M.wear_id, /obj/item/weapon/card/id) ? text("[]", M.wear_id.assignment) : "Unknown Position")) + //Foreach goto(23) + var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( src.loc ) + P.info = dat + P.name = "paper- 'Crew Manifest'" + //SN src = null + del(src) + return + return + +/obj/screen/close/DblClick() + + if (src.master) + src.master:close(usr) + return + +/obj/screen/storage/attackby(W, mob/user as mob) + + src.master.attackby(W, user) + return + +/obj/bedsheetbin/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (istype(W, /obj/item/weapon/bedsheet)) + //W = null + del(W) + src.amount++ + return + +/obj/bedsheetbin/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/bedsheetbin/attack_hand(mob/user as mob) + + if (src.amount >= 1) + src.amount-- + new /obj/item/weapon/bedsheet( src.loc ) + add_fingerprint(user) + return + +/obj/bedsheetbin/examine() + set src in oview(1) + + src.amount = round(src.amount) + if (src.amount <= 0) + src.amount = 0 + usr << "There are no bed sheets in the bin." + else + if (src.amount == 1) + usr << "There is one bed sheet in the bin." + else + usr << text("There are [] bed sheets in the bin.", src.amount) + return + +/obj/table/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + //SN src = null + del(src) + return + if(3.0) + if (prob(25)) + src.density = 0 + else + return + +/obj/table/blob_act() + + if(prob(50)) + new /obj/item/weapon/table_parts( src.loc ) + del(src) + +/obj/table/hand_p(mob/user as mob) + + return src.attack_paw(user) + return + +/obj/table/attack_paw(mob/user as mob) + + if (!( locate(/obj/table, user.loc) )) + step(user, get_dir(user, src)) + if (user.loc == src.loc) + user.layer = TURF_LAYER + for(var/mob/M in viewers(user, null)) + M.show_message("The monkey hides under the table!", 1) + //Foreach goto(69) + return + +/obj/table/CheckPass(atom/movable/O as mob|obj, target as turf) + + if ((O.flags & 2 || istype(O, /obj/meteor))) + return 1 + else + return 0 + return + +/obj/table/MouseDrop_T(obj/O as obj, mob/user as mob) + + if ((!( istype(O, /obj/item/weapon) ) || user.equipped() != O)) + return + user.drop_item() + if (O.loc != src.loc) + step(O, get_dir(O, src)) + return + +/obj/table/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (istype(W, /obj/item/weapon/wrench)) + new /obj/item/weapon/table_parts( src.loc ) + //SN src = null + del(src) + return + return + user.drop_item() + if (W.loc != src.loc) + step(W, get_dir(W, src)) + return + +/obj/rack/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + //SN src = null + del(src) + return + if(3.0) + if (prob(25)) + src.icon_state = "rackbroken" + src.density = 0 + else + return + +/obj/rack/blob_act() + if(prob(50)) + src.icon_state = "rackbroken" + src.density = 0 + + +/obj/rack/CheckPass(atom/movable/O as mob|obj, target as turf) + + if (O.flags & 2) + return 1 + else + return 0 + return + +/obj/rack/MouseDrop_T(obj/O as obj, mob/user as mob) + + if ((!( istype(O, /obj/item/weapon) ) || user.equipped() != O)) + return + user.drop_item() + if (O.loc != src.loc) + step(O, get_dir(O, src)) + return + +/obj/rack/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (istype(W, /obj/item/weapon/wrench)) + new /obj/item/weapon/rack_parts( src.loc ) + //SN src = null + del(src) + return + return + user.drop_item() + if (W.loc != src.loc) + step(W, get_dir(W, src)) + return + +/obj/rack/meteorhit(obj/O as obj) + + if (O.icon_state == "flaming") + src.icon_state = "rackbroken" + src.density = 0 + return + +/obj/weldfueltank/attackby(obj/item/weapon/weldingtool/W as obj, mob/user as mob) + + if (!( istype(W, /obj/item/weapon/weldingtool) )) + return + W.weldfuel = 20 + W.suffix = text("[][]", (W == src ? "equipped " : ""), W.weldfuel) + user << "\blue Welder refueled" + return + +/obj/weldfueltank/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if(prob(25)) + var/turf/T = src.loc + T.poison += 1600000 + T.oxygen += 1600000 + del(src) + if(3.0) + if(prob(5)) + var/turf/T = src.loc + T.poison += 1600000 + T.oxygen += 1600000 + //SN src = null + del(src) + return + else + return + +/obj/weldfueltank/blob_act() + if(prob(25)) + var/turf/T = src.loc + T.poison += 1600000 + T.oxygen += 1600000 + del(src) + +/obj/watertank/attackby(obj/item/weapon/extinguisher/W as obj, mob/user as mob) + + if (!( istype(W, /obj/item/weapon/extinguisher) )) + return + W.waterleft = 20 + W.suffix = text("[][]", (user.equipped() == src ? "equipped " : ""), W.waterleft) + user << "\blue Extinguisher refueled" + return + +/obj/watertank/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + //SN src = null + new /obj/effects/water(src.loc) + del(src) + return + if(3.0) + if (prob(5)) + //SN src = null + new /obj/effects/water(src.loc) + del(src) + return + else + return + +/obj/watertank/blob_act() + if(prob(25)) + new /obj/effects/water(src.loc) + + del(src) + +/obj/d_girders/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (istype(W, /obj/item/weapon/sheet/metal)) + if (W:amount < 1) + //W = null + del(W) + return + new /obj/machinery/door/false_wall( src.loc ) + W:amount-- + if (W:amount < 1) + //W = null + del(W) + user << "\blue Keep in mind when you open it that it MAY be difficult to sldie at first so keep trying." + //SN src = null + del(src) + return + else + if (istype(W, /obj/item/weapon/screwdriver)) + new /obj/item/weapon/sheet/metal( src.loc ) + //SN src = null + del(src) + return + return + +/obj/barrier/New() + + var/t = 1800 + if (ctf) + t = round(ctf.barriertime * 600) + spawn( t ) + //SN src = null + del(src) + return + return + return + +/obj/portal/Bumped(mob/M as mob|obj) + + spawn( 0 ) + src.teleport(M) + return + return + +/obj/portal/HasEntered(AM as mob|obj) + + spawn( 0 ) + src.teleport(AM) + return + return + +/obj/portal/New() + + spawn( 300 ) + //SN src = null + del(src) + return + return + return + +/obj/portal/proc/teleport(atom/movable/M as mob|obj) + + if (M.anchored) + return + if (src.icon_state == "portal1") + return + if (!( src.target )) + //SN src = null + del(src) + return + var/obj/effects/sparks/O = new /obj/effects/sparks( src.target ) + O.dir = pick(1, 2, 4, 8) + spawn( 0 ) + O.Life() + return + if (istype(M, /atom/movable)) + var/tx = src.target.x + rand(-5.0, 5) + var/ty = src.y + rand(-5.0, 5) + if (prob(10)) + src.icon_state = "portal1" + if (ismob(M)) + M.ex_act(2) + else + M.ex_act(1) + if (rand(1, 1000) <= 10) + M << "\red You see a fainting blue light." + M.loc = null + else + M.loc = locate(tx, ty, src.target.z) + return + +/obj/effects/water/New() + + ..() + var/turf/T = src.loc + if (istype(T, /turf)) + T.firelevel = 0 + spawn( 70 ) + //SN src = null + del(src) + return + + return + +/obj/effects/water/Del() + + var/turf/T = src.loc + if (istype(T, /turf)) + T.firelevel = 0 + ..() + return + +/obj/effects/water/Move(turf/newloc) + + var/turf/T = src.loc + if (istype(T, /turf)) + T.firelevel = 0 + if (--src.life < 1) + //SN src = null + del(src) + if(newloc.density) + return 0 + + + .=..() + +/mob/attackby(obj/item/weapon/W as obj, mob/user as mob) + + var/shielded = 0 + for(var/obj/item/weapon/shield/S in src) + if (S.active) + shielded = 1 + else + //Foreach continue //goto(22) + if (locate(/obj/item/weapon/grab, src)) + var/mob/safe = null + if (istype(src.l_hand, /obj/item/weapon/grab)) + var/obj/item/weapon/grab/G = src.l_hand + if ((G.state == 3 && get_dir(src, user) == src.dir)) + safe = G.affecting + if (istype(src.r_hand, /obj/item/weapon/grab)) + var/obj/item/weapon/grab/G = src.r_hand + if ((G.state == 3 && get_dir(src, user) == src.dir)) + safe = G.affecting + if (safe) + return safe.attackby(W, user) + if ((!( shielded ) || !( W.flags ) & 32)) + spawn( 0 ) + W.attack(src, user) + return + return + +/atom/proc/MouseDrop_T() + + return + +/atom/proc/attack_hand(mob/user as mob) + + return + +/atom/proc/attack_paw(mob/user as mob) + + return + +/atom/proc/hand_h(mob/user as mob) + + return + +/atom/proc/hand_p(mob/user as mob) + + return + +/atom/proc/hitby(obj/item/weapon/W as obj) + + return + +/atom/proc/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (istype(W, /obj/item/weapon/f_print_scanner)) + for(var/mob/O in viewers(src, null)) + if ((O.client && !( O.blinded ))) + O << text("\red [] has been scanned by [] with the []", src, user, W) + //Foreach goto(31) + else + if (!( istype(W, /obj/item/weapon/grab) )) + for(var/mob/O in viewers(src, null)) + if ((O.client && !( O.blinded ))) + O << text("\red [] has been hit by [] with []", src, user, W) + //Foreach goto(102) + return + +/atom/proc/add_fingerprint(mob/human/M as mob) + + if ((!( istype(M, /mob/human) ) || !( istype(M.primary, /obj/dna) ))) + return 0 + if (!( src.flags ) & 256) + return + if (M.gloves) + return 0 + if (!( src.fingerprints )) + src.fingerprints = text("[]", md5(M.primary.uni_identity)) + else + var/list/L = params2list(src.fingerprints) + L -= md5(M.primary.uni_identity) + while(L.len >= 3) + L -= L[1] + L += md5(M.primary.uni_identity) + src.fingerprints = list2params(L) + return + +/atom/MouseDrop(atom/over_object as mob|obj|turf|area) + + spawn( 0 ) + if (istype(over_object, /atom)) + over_object.MouseDrop_T(src, usr) + return + ..() + return + +/atom/DblClick() + + + //world << "[src].DblClick() : [src.type]" + + + ..() + var/obj/item/weapon/W = usr.equipped() + if ((W == src && usr.stat == 0)) + spawn( 0 ) + W.attack_self(usr) + //world << "[W].attack_self([usr])" + return + return + //world << "1" + if ((!( usr.canmove ) || usr.stat != 0)) + return + + + if ((!( src in usr.contents ) && (((!( isturf(src) ) && (!( isturf(src.loc) ) && (src.loc && !( isturf(src.loc.loc) )))) || !( isturf(usr.loc) )) && (src.loc != usr.loc && (!( istype(src, /obj/screen) ) && !( usr.contents.Find(src.loc) )))))) + return + //world << "2" + var/t5 = (get_dist(src, usr) <= 1 || src.loc == usr) + if ((istype(src, /obj/item/weapon/organ) && src in usr.contents)) + var/mob/human/H = usr + usr << "Betchya think you're really smart trying to remove your own body parts aren't ya!" + if (istype(H, /mob/human)) + if (!( (src == H.l_store || src == H.r_store) )) + return + else + return + + //world << "3" + if (((t5 || (W && (W.flags & 16))) && !( istype(src, /obj/screen) ))) + if (usr.next_move < world.time) + usr.next_move = world.time + 10 + else + return + if ((src.loc && (get_dist(src, usr) < 2 || src.loc == usr.loc))) + var/direct = get_dir(usr, src) + var/obj/item/weapon/dummy/D = new /obj/item/weapon/dummy( usr.loc ) + var/ok = 0 + if ( (direct - 1) & direct) + var/turf/T + switch(direct) + if(5.0) + T = get_step(usr, NORTH) + if (T.Enter(D, src)) + D.loc = T + T = src.loc + if (T.Enter(D, src)) + ok = 1 + else + T = get_step(usr, EAST) + if (T.Enter(D, src)) + D.loc = T + T = src.loc + if (T.Enter(D, src)) + ok = 1 + if(6.0) + T = get_step(usr, SOUTH) + if (T.Enter(D, src)) + D.loc = T + T = src.loc + if (T.Enter(D, src)) + ok = 1 + else + T = get_step(usr, EAST) + if (T.Enter(D, src)) + D.loc = T + T = src.loc + if (T.Enter(D, src)) + ok = 1 + if(9.0) + T = get_step(usr, NORTH) + if (T.Enter(D, src)) + D.loc = T + T = src.loc + if (T.Enter(D, src)) + ok = 1 + else + T = get_step(usr, WEST) + if (T.Enter(D, src)) + D.loc = T + T = src.loc + if (T.Enter(D, src)) + ok = 1 + if(10.0) + T = get_step(usr, SOUTH) + if (T.Enter(D, src)) + D.loc = T + T = src.loc + if (T.Enter(D, src)) + ok = 1 + else + T = get_step(usr, WEST) + if (T.Enter(D, src)) + D.loc = T + T = src.loc + if (T.Enter(D, src)) + ok = 1 + else + else + if (src.loc.Enter(D, src)) + ok = 1 + else + if ((src.flags & 512 && get_dir(src, usr) & src.dir)) + ok = 1 + if (usr.loc != src.loc) + for(var/atom/A as mob|obj|turf|area in usr.loc) + if ((!( A.CheckExit(usr, src.loc) ) && A != usr)) + ok = 0 + //Foreach goto(1111) + //D = null + del(D) + if (!( ok )) + return 0 + + if (!( usr.restrained() )) + if (W) + if (t5) + src.attackby(W, usr) + if (W) + W.afterattack(src, usr, (t5 ? 1 : 0)) + else + if (istype(usr, /mob/human)) + src.attack_hand(usr, usr.hand) + else + if (istype(usr, /mob/monkey)) + src.attack_paw(usr, usr.hand) + else + if (istype(usr, /mob/human)) + src.hand_h(usr, usr.hand) + else + if (istype(usr, /mob/monkey)) + src.hand_p(usr, usr.hand) + else + if (istype(src, /obj/screen)) + if (usr.next_move < world.time) + usr.next_move = world.time + 10 + else + return + if (!( usr.restrained() )) + if ((W && !( istype(src, /obj/screen) ))) + src.attackby(W, usr) + + if (W) + W.afterattack(src, usr) + else + if (istype(usr, /mob/human)) + //world << "[src].attack_hand([usr.hand])" + src.attack_hand(usr, usr.hand) + else + if (istype(usr, /mob/monkey)) + src.attack_paw(usr, usr.hand) + else + if (istype(usr, /mob/human)) + src.hand_h(usr, usr.hand) + else + if (istype(usr, /mob/monkey)) + src.hand_p(usr, usr.hand) + return diff --git a/main-src/Code/mob.dm b/main-src/Code/mob.dm new file mode 100644 index 0000000..d37a902 --- /dev/null +++ b/main-src/Code/mob.dm @@ -0,0 +1,7122 @@ +/mob/proc/Cell() + set category = "Admin" + set hidden = 1 + var/turf/T = src.loc + + if (!( istype(T, /turf) )) + return + + if (locate(/obj/move, T)) + T = locate(/obj/move, T) + + var/t = "" + t+= "Nitrogen : [T.n2]\n" + t+= "Oxygen : [T.oxygen]\n" + t+= "Plasma : [T.poison]\n" + t+= "CO2: [T.co2]\n" + t+= "N2O: [T.sl_gas]\n" + + usr.show_message(t, 1) + + +/proc/hsl2rgb(h, s, l) + + return + +/proc/ran_zone(zone, probability) + + if (probability == null) + probability = 75 + if (probability == 100) + return zone + switch(zone) + if("chest") + if (prob(probability)) + return "chest" + else + var/t = rand(1, 15) + if (t < 3) + return "head" + else if (t < 6) + return "l_arm" + else if (t < 9) + return "r_arm" + else if (t < 13) + return "diaper" + else if (t < 14) + return "l_hand" + else if (t < 15) + return "r_hand" + else + return null + + if("diaper") + if (prob(probability * 0.9)) + return "diaper" + else + var/t = rand(1, 8) + if (t < 4) + return "chest" + else if (t < 5) + return "r_leg" + else if (t < 6) + return "l_leg" + else if (t < 7) + return "l_hand" + else if (t < 8) + return "r_hand" + else + return null + if("head") + if (prob(probability * 0.75)) + return "head" + else + if (prob(60)) + return "chest" + else + return null + if("l_arm") + if (prob(probability * 0.75)) + return "l_arm" + else + if (prob(60)) + return "chest" + else + return null + if("r_arm") + if (prob(probability * 0.75)) + return "r_arm" + else + if (prob(60)) + return "chest" + else + return null + if("r_leg") + if (prob(probability * 0.75)) + return "r_leg" + else + if (prob(60)) + return "diaper" + else + return null + if("l_leg") + if (prob(probability * 0.75)) + return "l_leg" + else + if (prob(60)) + return "diaper" + else + return null + if("l_hand") + if (prob(probability * 0.5)) + return "l_hand" + else + var/t = rand(1, 8) + if (t < 2) + return "l_arm" + else if (t < 3) + return "chest" + else if (t < 4) + return "diaper" + else if (t < 6) + return "l_leg" + else + return null + + if("r_hand") + if (prob(probability * 0.5)) + return "r_hand" + else + var/t = rand(1, 8) + if (t < 2) + return "r_arm" + else if (t < 3) + return "chest" + else if (t < 4) + return "diaper" + else if (t < 6) + return "r_leg" + else + return null + + if("l_foot") + if (prob(probability * 0.25)) + return "l_foot" + else + var/t = rand(1, 5) + if (t < 2) + return "r_leg" + else + if (t < 3) + return "l_foot" + else + return null + if("r_foot") + if (prob(probability * 0.25)) + return "r_foot" + else + var/t = rand(1, 5) + if (t < 2) + return "r_leg" + else + if (t < 3) + return "l_foot" + else + return null + else + return + +/proc/stars(n, pr) + + if (pr == null) + pr = 25 + if (pr <= 0) + return null + else + if (pr >= 100) + return n + var/te = n + var/t = "" + n = length(n) + var/p = null + p = 1 + while(p <= n) + if ((copytext(te, p, p + 1) == " " || prob(pr))) + t = text("[][]", t, copytext(te, p, p + 1)) + else + t = text("[]*", t) + p++ + return t + return + +/proc/stutter(n) + + var/te = n + var/t = "" + n = length(n) + var/p = null + p = 1 + while(p <= n) + var/n_letter = copytext(te, p, p + 1) + if (prob(80)) + if (prob(10)) + n_letter = text("[][][][]", n_letter, n_letter, n_letter, n_letter) + else + if (prob(20)) + n_letter = text("[][][]", n_letter, n_letter, n_letter) + else + if (prob(5)) + n_letter = null + else + n_letter = text("[][]", n_letter, n_letter) + t = text("[][]", t, n_letter) + p++ + return t + return + +/proc/findname(msg) + + for(var/mob/M in world) + if (M.rname == text("[]", msg)) + return 1 + //Foreach goto(15) + return 0 + return + +/obj/proc/alter_health() + + return 1 + return + +/obj/proc/relaymove() + + return + +/obj/proc/hide(h) + return + +/obj/item/weapon/grab/proc/throw() + + if(src.affecting) + src.affecting.density = 1 + step(src.affecting, src.assailant.dir) + if (prob(75)) + step(src.affecting, src.assailant.dir) + //SN src = null + del(src) + return + +/obj/item/weapon/grab/proc/synch() + + if (src.assailant.r_hand == src) + src.hud1.screen_loc = "1,4" + else + src.hud1.screen_loc = "3,4" + return + +/obj/item/weapon/grab/proc/process() + + if ((!( isturf(src.assailant.loc) ) || (!( isturf(src.affecting.loc) ) || (src.assailant.loc != src.affecting.loc && get_dist(src.assailant, src.affecting) > 1)))) + //SN src = null + del(src) + return + if (src.assailant.client) + src.assailant.client.screen -= src.hud1 + src.assailant.client.screen += src.hud1 + if (src.assailant.pulling == src.affecting) + src.assailant.pulling = null + if (src.state <= 2) + src.allow_upgrade = 1 + if ((src.assailant.l_hand && src.assailant.l_hand != src && istype(src.assailant.l_hand, /obj/item/weapon/grab))) + var/obj/item/weapon/grab/G = src.assailant.l_hand + if (G.affecting != src.affecting) + src.allow_upgrade = 0 + if ((src.assailant.r_hand && src.assailant.r_hand != src && istype(src.assailant.r_hand, /obj/item/weapon/grab))) + var/obj/item/weapon/grab/G = src.assailant.r_hand + if (G.affecting != src.affecting) + src.allow_upgrade = 0 + if (src.state == 2) + var/h = src.affecting.hand + src.affecting.hand = 0 + src.affecting.drop_item() + src.affecting.hand = 1 + src.affecting.drop_item() + src.affecting.hand = h + for(var/obj/item/weapon/grab/G in src.affecting.grabbed_by) + if (G.state == 2) + src.allow_upgrade = 0 + //Foreach goto(341) + if (src.allow_upgrade) + src.hud1.icon_state = "reinforce" + else + src.hud1.icon_state = "!reinforce" + else + if (!( src.affecting.buckled )) + src.affecting.loc = src.assailant.loc + if ((src.killing && src.state == 3)) + src.affecting.stunned = max(5, src.affecting.stunned) + src.affecting.paralysis = max(3, src.affecting.paralysis) + src.affecting.losebreath = min(src.affecting.losebreath + 2, 3) + return + +/obj/item/weapon/grab/proc/s_click(obj/screen/S as obj) + + if (src.assailant.next_move > world.time) + return + if ((!( src.assailant.canmove ) || src.assailant.lying)) + //SN src = null + del(src) + return + switch(S.id) + if(1.0) + if (src.state >= 3) + if (!( src.killing )) + for(var/mob/O in viewers(src.assailant, null)) + O.show_message(text("\red [] has temporarily tightened his grip on []!", src.assailant, src.affecting), 1) + //Foreach goto(97) + src.assailant.next_move = world.time + 10 + src.affecting.stunned = max(2, src.affecting.stunned) + src.affecting.paralysis = max(1, src.affecting.paralysis) + src.affecting.losebreath = min(src.affecting.losebreath + 1, 3) + src.last_suffocate = world.time + flick("disarm/killf", S) + else + return + +/obj/item/weapon/grab/proc/s_dbclick(obj/screen/S as obj) + + if ((src.assailant.next_move > world.time && !( src.last_suffocate < world.time + 2 ))) + return + if ((!( src.assailant.canmove ) || src.assailant.lying)) + //SN src = null + del(src) + return + switch(S.id) + if(1.0) + if (src.state < 2) + if (!( src.allow_upgrade )) + return + if (prob(75)) + for(var/mob/O in viewers(src.assailant, null)) + O.show_message(text("\red [] has grabbed [] aggressively (now hands)!", src.assailant, src.affecting), 1) + //Foreach goto(121) + src.state = 2 + src.icon_state = "grabbed1" + else + for(var/mob/O in viewers(src.assailant, null)) + O.show_message(text("\red [] has failed to grab [] aggressively!", src.assailant, src.affecting), 1) + //Foreach goto(186) + //SN src = null + del(src) + return + else + if (src.state < 3) + for(var/mob/O in viewers(src.assailant, null)) + O.show_message(text("\red [] has reinforced his grip on [] (now neck)!", src.assailant, src.affecting), 1) + //Foreach goto(257) + src.state = 3 + src.icon_state = "grabbed+1" + if (!( src.affecting.buckled )) + src.affecting.loc = src.assailant.loc + src.hud1.icon_state = "disarm/kill" + src.hud1.name = "disarm/kill" + else + if (src.state >= 3) + src.killing = !( src.killing ) + if (src.killing) + for(var/mob/O in viewers(src.assailant, null)) + O.show_message(text("\red [] has tightened his grip on []'s neck!", src.assailant, src.affecting), 1) + //Foreach goto(392) + src.assailant.next_move = world.time + 10 + src.affecting.stunned = max(2, src.affecting.stunned) + src.affecting.paralysis = max(1, src.affecting.paralysis) + src.affecting.losebreath += 1 + src.hud1.icon_state = "disarm/kill1" + else + src.hud1.icon_state = "disarm/kill" + for(var/mob/O in viewers(src.assailant, null)) + O.show_message(text("\red [] has loosened the grip on []'s neck!", src.assailant, src.affecting), 1) + //Foreach goto(517) + else + return + +/obj/item/weapon/grab/New() + + ..() + src.hud1 = new /obj/screen/grab( src ) + src.hud1.icon_state = "reinforce" + src.hud1.name = "Reinforce Grab" + src.hud1.id = 1 + src.hud1.master = src + return + +/obj/item/weapon/grab/attack(mob/M as mob, user as mob) + + if (M == src.affecting) + if (src.state < 3) + s_dbclick(src.hud1) + else + s_click(src.hud1) + return 0 + return + +/obj/item/weapon/grab/dropped() + + //SN src = null + del(src) + return + return + +/obj/item/weapon/grab/Del() + + //src.hud1 = null + del(src.hud1) + ..() + return + +/obj/screen/zone_sel/MouseDown(location, control,params) //(location, icon_x, icon_y) + // Changes because of 4.0 + var/list/PL = params2list(params) + var/icon_x = text2num(PL["icon-x"]) + var/icon_y = text2num(PL["icon-y"]) + + if (icon_y < 6) + if ((icon_x > 10 && icon_x < 22)) + if (icon_x < 16) + src.selecting = "r_foot" + else + src.selecting = "l_foot" + else + if (icon_y < 13) + if ((icon_x > 11 && icon_x < 21)) + if (icon_x < 16) + src.selecting = "r_leg" + else + src.selecting = "l_leg" + else + if (icon_y < 16) + if ((icon_x > 9 && icon_x < 23)) + if (icon_x < 12) + src.selecting = "r_hand" + else + if (icon_x < 20) + src.selecting = "diaper" + else + src.selecting = "l_hand" + else + if (icon_y < 23) + if ((icon_x > 9 && icon_x < 23)) + if (icon_x < 12) + src.selecting = "r_arm" + else + if (icon_x < 20) + src.selecting = "chest" + else + src.selecting = "l_arm" + else + if (icon_y < 25) + if ((icon_x > 13 && icon_x < 18)) + src.selecting = "neck" + else + if (icon_y < 30) + if ((icon_x > 11 && icon_x < 20)) + if (icon_y == 28) + src.selecting = "eyes" + else + if (icon_y == 29) + src.selecting = "hair" + else + if (icon_y == 26) + src.selecting = "mouth" + else + src.selecting = "head" + return + +/obj/screen/grab/Click() + + src.master:s_click(src) + return + +/obj/screen/grab/DblClick() + + src.master:s_dbclick(src) + return + +/obj/screen/grab/attack_hand() + + return + +/obj/screen/grab/attackby() + + return + +/obj/screen/Click() + + //world << "o/s/Click: [src.name]" + + switch(src.name) + if("map") + + usr.clearmap() + if("maprefresh") + var/obj/machinery/computer/security/seccomp = usr.machine + + if(seccomp!=null) + seccomp.drawmap(usr) + else + + usr.clearmap() + + if("other") + usr.other = !( usr.other ) + if("intent") + if (!( usr.intent )) + switch(usr.a_intent) + if("help") + usr.intent = "12,15" + if("disarm") + usr.intent = "13,15" + if("hurt") + usr.intent = "14,15" + if("grab") + usr.intent = "11,15" + else + else + usr.intent = null + if("m_intent") + if (!( usr.m_int )) + switch(usr.m_intent) + if("run") + usr.m_int = "12,14" + if("walk") + usr.m_int = "13,14" + if("face") + usr.m_int = "14,14" + else + else + usr.m_int = null + if("walk") + usr.m_intent = "walk" + usr.m_int = "13,14" + if("face") + usr.m_intent = "face" + usr.m_int = "14,14" + if("run") + usr.m_intent = "run" + usr.m_int = "12,14" + if("hurt") + usr.a_intent = "hurt" + usr.intent = "14,15" + if("grab") + usr.a_intent = "grab" + usr.intent = "11,15" + if("disarm") + if (istype(usr, /mob/human)) + var/mob/M = usr + M.a_intent = "disarm" + M.intent = "13,15" + if("help") + usr.a_intent = "help" + usr.intent = "12,15" + if("Reset Machine") + usr.machine = null + if("internal") + if ((!( usr.stat ) && usr.canmove && !( usr.restrained() ))) + usr.internal = null + if("pull") + usr.pulling = null + if("sleep") + usr.sleeping = !( usr.sleeping ) + if("rest") + usr.resting = !( usr.resting ) + if("throw") + if ((!( usr.stat ) && usr.canmove && isturf(usr.loc) && !( usr.restrained() ))) + usr.throw_item_v() + if("drop") + usr.drop_item_v() + if("swap") + usr.swap_hand() + if("resist") + if (usr.next_move < world.time) + return + usr.next_move = world.time + 20 + if ((!( usr.stat ) && usr.canmove && !( usr.restrained() ))) + for(var/obj/O in usr.requests) + //O = null + del(O) + //Foreach goto(557) + for(var/obj/item/weapon/grab/G in usr.grabbed_by) + if (G.state == 1) + //G = null + del(G) + else + if (G.state == 2) + if (prob(25)) + for(var/mob/O in viewers(usr, null)) + O.show_message(text("\red [] has broken free of []'s grip!", usr, G.assailant), 1) + //Foreach goto(681) + //G = null + del(G) + else + if (G.state == 2) + if (prob(5)) + for(var/mob/O in viewers(usr, null)) + O.show_message(text("\red [] has broken free of []'s headlock!", usr, G.assailant), 1) + //Foreach goto(762) + //G = null + del(G) + //Foreach goto(602) + for(var/mob/O in viewers(usr, null)) + O.show_message(text("\red [] resists!", usr), 1) + //Foreach goto(824) + return + +/obj/screen/attack_hand(mob/user as mob, using) + + user.db_click(src.name, using) + return + +/obj/screen/attack_paw(mob/user as mob, using) + + user.db_click(src.name, using) + return + +/obj/point/point() + set src in oview() + + return + +/obj/dna/proc/cleanup() + + var/e1 = (length(src.struc_enzyme) > 3 ? copytext(src.struc_enzyme, 1, 4) : null) + if ((e1 == "AEC" && length(src.spec_identity) > src.n_chromo)) + src.r_spec_identity = src.spec_identity + else + if (e1 == "14A") + var/t1 = rand(1, 3) + var/t = null + while(t < t1) + var/t2 = rand(1, length(src.use_enzyme) + 1) + src.use_enzyme = text("[]0[]", copytext(1, t2, null), copytext(t2 + 1, length(src.use_enzyme) + 1, null)) + t++ + else + if (e1 == "CDE") + if (length(src.spec_identity) == length(src.r_spec_identity)) + src.spec_identity = src.r_spec_identity + else + src.r_spec_identity = src.spec_identity + else + src.spec_identity = src.r_spec_identity + src.n_chromo = length(src.r_spec_identity) + return + +/obj/hud/New() + + src.instantiate() + ..() + return + +/obj/hud/proc/instantiate() + + src.adding = list( ) + src.other = list( ) + src.intents = list( ) + src.mon_blo = list( ) + src.m_ints = list( ) + src.mov_int = list( ) + src.vimpaired = list( ) + src.g_dither = new src.h_type( src ) + src.g_dither.screen_loc = "1,1 to 15,15" + src.g_dither.name = "Mask" + src.g_dither.icon_state = "dither12g" + src.g_dither.layer = 18 + src.g_dither.mouse_opacity = 0 + src.blurry = new src.h_type( src ) + src.blurry.screen_loc = "1,1 to 15,15" + src.blurry.name = "Blurry" + src.blurry.icon_state = "blurry" + src.blurry.layer = 17 + var/obj/hud/using = new src.h_type( src ) + using.name = "vitals" + using.dir = SOUTH + using.screen_loc = "15,2 to 15,15" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "actions" + using.dir = EAST + using.screen_loc = "4,1 to 14,1" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.dir = NORTHWEST + using.screen_loc = "15,1" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.dir = WEST + using.screen_loc = "1,3 to 2,3" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.dir = NORTHEAST + using.screen_loc = "3,3" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.dir = NORTH + using.screen_loc = "3,2" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.dir = SOUTHEAST + using.screen_loc = "3,1" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.dir = SOUTHWEST + using.screen_loc = "1,1 to 2,2" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "drop" + using.icon_state = "act_drop" + using.screen_loc = "7,1" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "throw" + using.icon_state = "act_throw" + using.screen_loc = "9,1" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "swap" + using.icon_state = "act_hand" + using.screen_loc = "11,1" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "i_clothing" + using.dir = SOUTH + using.icon_state = "center" + using.screen_loc = "2,2" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "o_clothing" + using.dir = SOUTH + using.icon_state = "equip" + using.screen_loc = "2,1" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "headset" + using.dir = SOUTHEAST + using.icon_state = "equip" + using.screen_loc = "3,1" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "r_hand" + using.dir = WEST + using.icon_state = "equip" + using.screen_loc = "1,2" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "l_hand" + using.dir = EAST + using.icon_state = "equip" + using.screen_loc = "3,2" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "id" + using.dir = SOUTHWEST + using.icon_state = "equip" + using.screen_loc = "1,1" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "mask" + using.dir = NORTH + using.icon_state = "equip" + using.screen_loc = "2,3" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "back" + using.dir = NORTHEAST + using.icon_state = "equip" + using.screen_loc = "3,3" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "storage1" + using.icon_state = "block" + using.screen_loc = "4,1" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "storage2" + using.icon_state = "block" + using.screen_loc = "5,1" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "resist" + using.icon_state = "act_resist" + using.screen_loc = "13,1" + using.layer = 19 + src.adding += using + using = new src.h_type( src ) + using.name = "other" + using.icon_state = "other" + using.screen_loc = "4,2" + using.layer = 20 + src.adding += using + using = new src.h_type( src ) + using.name = "intent" + using.icon_state = "intent" + using.screen_loc = "14,15" + using.layer = 20 + src.adding += using + using = new src.h_type( src ) + using.name = "m_intent" + using.icon_state = "move" + using.screen_loc = "14,14" + using.layer = 20 + src.adding += using + using = new src.h_type( src ) + using.name = "gloves" + using.icon_state = "gloves" + using.screen_loc = "4,2" + using.layer = 19 + src.other += using + using = new src.h_type( src ) + using.name = "eyes" + using.icon_state = "glasses" + using.screen_loc = "6,2" + using.layer = 19 + src.other += using + using = new src.h_type( src ) + using.name = "ears" + using.icon_state = "ears" + using.screen_loc = "9,2" + using.layer = 19 + src.other += using + using = new src.h_type( src ) + using.name = "head" + using.icon_state = "hair" + using.screen_loc = "7,2" + using.layer = 19 + src.other += using + using = new src.h_type( src ) + using.name = "shoes" + using.icon_state = "shoes" + using.screen_loc = "5,2" + using.layer = 19 + src.other += using + using = new src.h_type( src ) + using.name = "belt" + using.icon_state = "belt" + using.screen_loc = "8,2" + using.layer = 19 + src.other += using + using = new src.h_type( src ) + using.name = "grab" + using.icon_state = "grab" + using.screen_loc = "11,15" + using.layer = 19 + src.intents += using + using = new src.h_type( src ) + using.name = "hurt" + using.icon_state = "harm" + using.screen_loc = "14,15" + using.layer = 19 + src.intents += using + src.m_ints += using + using = new src.h_type( src ) + using.name = "disarm" + using.icon_state = "disarm" + using.screen_loc = "13,15" + using.layer = 19 + src.intents += using + using = new src.h_type( src ) + using.name = "help" + using.icon_state = "help" + using.screen_loc = "12,15" + using.layer = 19 + src.intents += using + src.m_ints += using + using = new src.h_type( src ) + using.name = "face" + using.icon_state = "facing" + using.screen_loc = "14,14" + using.layer = 19 + src.mov_int += using + using = new src.h_type( src ) + using.name = "walk" + using.icon_state = "walking" + using.screen_loc = "13,14" + using.layer = 19 + src.mov_int += using + using = new src.h_type( src ) + using.name = "run" + using.icon_state = "running" + using.screen_loc = "12,14" + using.layer = 19 + src.mov_int += using + using = new src.h_type( src ) + using.name = "blocked" + using.icon_state = "x" + using.screen_loc = "2,2" + using.layer = 19 + src.mon_blo += using + using = new src.h_type( src ) + using.name = "blocked" + using.icon_state = "x" + using.screen_loc = "1,1" + using.layer = 19 + src.mon_blo += using + using = new src.h_type( src ) + using.name = "blocked" + using.icon_state = "x" + using.screen_loc = "2,1" + using.layer = 19 + src.mon_blo += using + using = new src.h_type( src ) + using.name = "blocked" + using.icon_state = "x" + using.screen_loc = "3,1" + using.layer = 19 + src.mon_blo += using + using = new src.h_type( src ) + using.name = "blocked" + using.icon_state = "x" + using.screen_loc = "4,1" + using.layer = 19 + src.mon_blo += using + using = new src.h_type( src ) + using.name = "blocked" + using.icon_state = "x" + using.screen_loc = "5,1" + using.layer = 19 + src.mon_blo += using + using = new src.h_type( src ) + using.name = null + using.icon_state = "dither50" + using.screen_loc = "1,1 to 5,15" + using.layer = 17 + src.vimpaired += using + using = new src.h_type( src ) + using.name = null + using.icon_state = "dither50" + using.screen_loc = "5,1 to 10,5" + using.layer = 17 + src.vimpaired += using + using = new src.h_type( src ) + using.name = null + using.icon_state = "dither50" + using.screen_loc = "6,11 to 10,15" + using.layer = 17 + src.vimpaired += using + using = new src.h_type( src ) + using.name = null + using.icon_state = "dither50" + using.screen_loc = "11,1 to 15,15" + using.layer = 17 + src.vimpaired += using + return + +/obj/equip_e/proc/process() + + return + +/obj/equip_e/proc/done() + + return + +/obj/equip_e/New() + + if (!( ticker )) + //SN src = null + del(src) + return + spawn( 100 ) + //SN src = null + del(src) + return + return + ..() + return + +/obj/equip_e/monkey/process() + + if (src.item) + src.item.add_fingerprint(src.source) + if (!( src.item )) + switch(src.place) + if("head") + if (!( src.target.wear_mask )) + //SN src = null + del(src) + return + if("l_hand") + if (!( src.target.l_hand )) + //SN src = null + del(src) + return + if("r_hand") + if (!( src.target.r_hand )) + //SN src = null + del(src) + return + if("back") + if (!( src.target.back )) + //SN src = null + del(src) + return + if("handcuff") + if (!( src.target.handcuffed )) + //SN src = null + del(src) + return + if("internal") + if ((!( (istype(src.target.wear_mask, /obj/item/weapon/clothing/mask) && istype(src.target.back, /obj/item/weapon/tank) && !( src.target.internal )) ) && !( src.target.internal ))) + //SN src = null + del(src) + return + + if (src.item) + for(var/mob/O in viewers(src.target, null)) + if ((O.client && !( O.blinded ))) + O.show_message(text("\red [] is trying to put a [] on []", src.source, src.item, src.target), 1) + //Foreach goto(251) + else + var/message = null + switch(src.place) + if("l_hand") + message = text("\red [] is trying to take off a [] from []'s left hand!", src.source, src.target.l_hand, src.target) + if("r_hand") + message = text("\red [] is trying to take off a [] from []'s right hand!", src.source, src.target.r_hand, src.target) + if("back") + message = text("\red [] is trying to take off a [] from []'s back!", src.source, src.target.back, src.target) + if("handcuff") + message = text("\red [] is trying to unhandcuff []!", src.source, src.target) + if("internal") + if (src.target.internal) + message = text("\red [] is trying to remove []'s internals", src.source, src.target) + else + message = text("\red [] is trying to set on []'s internals.", src.source, src.target) + else + for(var/mob/M in viewers(src.target, null)) + M.show_message(message, 1) + //Foreach goto(469) + spawn( 30 ) + src.done() + return + return + +/obj/equip_e/monkey/done() + + if ((!( src.source ) || !( src.target ))) + return + if (src.source.loc != src.s_loc) + return + if (src.target.loc != src.t_loc) + return + if ((src.item && src.source.equipped() != src.item)) + return + if ((src.source.restrained() || src.source.stat)) + return + switch(src.place) + if("mask") + if (src.target.wear_mask) + var/obj/item/weapon/W = src.target.wear_mask + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if (istype(src.item, /obj/item/weapon/clothing/mask)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.wear_mask = src.item + src.item.loc = src.target + if("l_hand") + if (src.target.l_hand) + var/obj/item/weapon/W = src.target.l_hand + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if (istype(src.item, /obj/item/weapon)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.l_hand = src.item + src.item.loc = src.target + if("r_hand") + if (src.target.r_hand) + var/obj/item/weapon/W = src.target.r_hand + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if (istype(src.item, /obj/item/weapon)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.r_hand = src.item + src.item.loc = src.target + if("back") + if (src.target.back) + var/obj/item/weapon/W = src.target.back + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if ((istype(src.item, /obj/item/weapon) && src.item.flags & 1)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.back = src.item + src.item.loc = src.target + if("handcuff") + if (src.target.handcuffed) + var/obj/item/weapon/W = src.target.handcuffed + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if (istype(src.item, /obj/item/weapon/handcuffs)) + src.source.drop_item() + src.target.handcuffed = src.item + src.item.loc = src.target + if("internal") + if (src.target.internal) + src.target.internal.add_fingerprint(src.source) + src.target.internal = null + else + if (src.target.internal) + src.target.internal = null + if (!( istype(src.target.wear_mask, /obj/item/weapon/clothing/mask) )) + return + else + if (istype(src.target.back, /obj/item/weapon/tank)) + src.target.internal = src.target.back + src.target.internal.add_fingerprint(src.source) + for(var/mob/M in viewers(src.target, 1)) + if ((M.client && !( M.blinded ))) + M.show_message(text("[] is now running on internals.", src.target), 1) + //Foreach goto(1097) + else + src.source.UpdateClothing() + src.target.UpdateClothing() + //SN src = null + del(src) + return + return + +/obj/equip_e/human/process() + + if (src.item) + src.item.add_fingerprint(src.source) + if (!( src.item )) + switch(src.place) + if("mask") + if (!( src.target.wear_mask )) + //SN src = null + del(src) + return + if("headset") + if (!( src.target.w_radio )) + //SN src = null + del(src) + return + if("l_hand") + if (!( src.target.l_hand )) + //SN src = null + del(src) + return + if("r_hand") + if (!( src.target.r_hand )) + //SN src = null + del(src) + return + if("suit") + if (!( src.target.wear_suit )) + //SN src = null + del(src) + return + if("uniform") + if (!( src.target.w_uniform )) + //SN src = null + del(src) + return + if("back") + if (!( src.target.back )) + //SN src = null + del(src) + return + if("syringe") + return + if("pill") + return + if("handcuff") + if (!( src.target.handcuffed )) + //SN src = null + del(src) + return + if("id") + if ((!( src.target.wear_id ) || !( src.target.w_uniform ))) + //SN src = null + del(src) + return + if("internal") + if ((!( (istype(src.target.wear_mask, /obj/item/weapon/clothing/mask) && istype(src.target.back, /obj/item/weapon/tank) && !( src.target.internal )) ) && !( src.target.internal ))) + //SN src = null + del(src) + return + + var/list/L = list( "syringe", "pill" ) + if ((src.item && !( L.Find(src.place) ))) + for(var/mob/O in viewers(src.target, null)) + O.show_message(text("\red [] is trying to put \a [] on []", src.source, src.item, src.target), 1) + //Foreach goto(401) + else + if (src.place == "syringe") + for(var/mob/O in viewers(src.target, null)) + O.show_message(text("\red [] is trying to inject []!", src.source, src.target), 1) + //Foreach goto(466) + else + if (src.place == "pill") + for(var/mob/O in viewers(src.target, null)) + O.show_message(text("\red [] is trying to force [] to swallow []!", src.source, src.target, src.item), 1) + //Foreach goto(527) + else + var/message = null + switch(src.place) + if("mask") + message = text("\red [] is trying to take off \a [] from []'s head!", src.source, src.target.wear_mask, src.target) + if("headset") + message = text("\red [] is trying to take off \a [] from []'s face!", src.source, src.target.w_radio, src.target) + if("l_hand") + message = text("\red [] is trying to take off \a [] from []'s left hand!", src.source, src.target.l_hand, src.target) + if("r_hand") + message = text("\red [] is trying to take off \a [] from []'s right hand!", src.source, src.target.r_hand, src.target) + if("gloves") + message = text("\red [] is trying to take off the [] from []'s hands!", src.source, src.target.gloves, src.target) + if("eyes") + message = text("\red [] is trying to take off the [] from []'s eyes!", src.source, src.target.glasses, src.target) + if("ears") + message = text("\red [] is trying to take off the [] from []'s ears!", src.source, src.target.ears, src.target) + if("head") + message = text("\red [] is trying to take off the [] from []'s head!", src.source, src.target.head, src.target) + if("shoes") + message = text("\red [] is trying to take off the [] from []'s feet!", src.source, src.target.shoes, src.target) + if("belt") + message = text("\red [] is trying to take off the [] from []'s belt!", src.source, src.target.belt, src.target) + if("suit") + message = text("\red [] is trying to take off \a [] from []'s body!", src.source, src.target.wear_suit, src.target) + if("back") + message = text("\red [] is trying to take off \a [] from []'s back!", src.source, src.target.back, src.target) + if("handcuff") + message = text("\red [] is trying to unhandcuff []!", src.source, src.target) + if("uniform") + message = text("\red [] is trying to take off \a [] from []'s body!", src.source, src.target.w_uniform, src.target) + if("pockets") + message = text("\red [] is trying to empty []'s pockets!!", src.source, src.target) + if("CPR") + if (src.target.cpr_time >= world.time + 3) + //SN src = null + del(src) + return + message = text("\red [] is trying perform CPR on []!", src.source, src.target) + if("id") + message = text("\red [] is trying to take off [] from []'s uniform!", src.source, src.target.wear_id, src.target) + if("internal") + if (src.target.internal) + message = text("\red [] is trying to remove []'s internals", src.source, src.target) + else + message = text("\red [] is trying to set on []'s internals.", src.source, src.target) + else + for(var/mob/M in viewers(src.target, null)) + M.show_message(message, 1) + //Foreach goto(1069) + spawn( 30 ) + src.done() + return + return + +/obj/equip_e/human/done() + + if ((!( src.source ) || !( src.target ))) + return + if (src.source.loc != src.s_loc) + return + if (src.target.loc != src.t_loc) + return + if ((src.item && src.source.equipped() != src.item)) + return + if ((src.source.restrained() || src.source.stat)) + return + switch(src.place) + if("mask") + if (src.target.wear_mask) + var/obj/item/weapon/W = src.target.wear_mask + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if (istype(src.item, /obj/item/weapon/clothing/mask)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.wear_mask = src.item + src.item.loc = src.target + if("headset") + if (src.target.w_radio) + var/obj/item/weapon/W = src.target.w_radio + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + else + if (istype(src.item, /obj/item/weapon/radio/headset)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.w_radio = src.item + src.item.loc = src.target + if("gloves") + if (src.target.gloves) + var/obj/item/weapon/W = src.target.gloves + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if (istype(src.item, /obj/item/weapon/clothing/gloves)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.gloves = src.item + src.item.loc = src.target + if("eyes") + if (src.target.glasses) + var/obj/item/weapon/W = src.target.glasses + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if (istype(src.item, /obj/item/weapon/clothing/glasses)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.glasses = src.item + src.item.loc = src.target + if("belt") + if (src.target.belt) + var/obj/item/weapon/W = src.target.belt + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if ((istype(src.item, /obj) && src.item.flags & 128 && src.target.w_uniform)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.belt = src.item + src.item.loc = src.target + if("head") + if (src.target.head) + var/obj/item/weapon/W = src.target.head + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if (istype(src.item, /obj/item/weapon/clothing/head)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.head = src.item + src.item.loc = src.target + if("ears") + if (src.target.ears) + var/obj/item/weapon/W = src.target.ears + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if (istype(src.item, /obj/item/weapon/clothing/ears)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.ears = src.item + src.item.loc = src.target + if("shoes") + if (src.target.shoes) + var/obj/item/weapon/W = src.target.shoes + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if (istype(src.item, /obj/item/weapon/clothing/shoes)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.shoes = src.item + src.item.loc = src.target + if("l_hand") + if (istype(src.target, /obj/item/weapon/clothing/suit/straight_jacket)) + //SN src = null + del(src) + return + if (src.target.l_hand) + var/obj/item/weapon/W = src.target.l_hand + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if (istype(src.item, /obj/item/weapon)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.l_hand = src.item + src.item.loc = src.target + src.item.add_fingerprint(src.target) + if("r_hand") + if (istype(src.target, /obj/item/weapon/clothing/suit/straight_jacket)) + //SN src = null + del(src) + return + if (src.target.r_hand) + var/obj/item/weapon/W = src.target.r_hand + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if (istype(src.item, /obj/item/weapon)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.r_hand = src.item + src.item.loc = src.target + src.item.add_fingerprint(src.target) + if("uniform") + if (src.target.w_uniform) + var/obj/item/weapon/W = src.target.w_uniform + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + W = src.target.l_store + if (W) + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W = src.target.r_store + if (W) + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W = src.target.wear_id + if (W) + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + else + if (istype(src.item, /obj/item/weapon/clothing/under)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.w_uniform = src.item + src.item.loc = src.target + if("suit") + if (src.target.wear_suit) + var/obj/item/weapon/W = src.target.wear_suit + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if (istype(src.item, /obj/item/weapon/clothing/suit)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.wear_suit = src.item + src.item.loc = src.target + if("id") + if (src.target.wear_id) + var/obj/item/weapon/W = src.target.wear_id + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if ((istype(src.item, /obj/item/weapon/card/id) && src.target.w_uniform)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.wear_id = src.item + src.item.loc = src.target + if("back") + if (src.target.back) + var/obj/item/weapon/W = src.target.back + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if ((istype(src.item, /obj/item/weapon) && src.item.flags & 1)) + src.source.drop_item() + src.loc = src.target + src.item.layer = 20 + src.target.back = src.item + src.item.loc = src.target + if("handcuff") + if (src.target.handcuffed) + var/obj/item/weapon/W = src.target.handcuffed + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + else + if (istype(src.item, /obj/item/weapon/handcuffs)) + src.source.drop_item() + src.target.handcuffed = src.item + src.item.loc = src.target + if("CPR") + if (src.target.cpr_time >= world.time + 30) + //SN src = null + del(src) + return + if ((src.target.health >= -75.0 && src.target.health < 0)) + src.target.cpr_time = world.time + if (src.target.health >= -40.0) + var/suff = min(src.target.oxyloss, 5) + src.target.oxyloss -= suff + src.target.health = 100 - src.target.oxyloss - src.target.toxloss - src.target.fireloss - src.target.bruteloss + if(target.rejuv<10) + src.target.rejuv += 10 // change + for(var/mob/O in viewers(src.source, null)) + O.show_message(text("\red [] performs CPR on []!", src.source, src.target), 1) + //Foreach goto(3251) + src.source << "\red Repeat every 7 seconds AT LEAST." + if("syringe") + var/obj/item/weapon/syringe/S = src.item + src.item.add_fingerprint(src.source) + if (!( istype(S, /obj/item/weapon/syringe) )) + //SN src = null + del(src) + return + if (S.s_time >= world.time + 30) + //SN src = null + del(src) + return + S.s_time = world.time + var/a = S.inject(src.target) + for(var/mob/O in viewers(src.source, null)) + O.show_message(text("\red [] injects [] with the syringe!", src.source, src.target), 1) + //Foreach goto(3407) + src.source << text("\red You inject [] units into []. The syringe contains [] units.", a, src.target, S.chem.volume()) + if("pill") + var/obj/item/weapon/m_pill/S = src.item + if (!( istype(S, /obj/item/weapon/m_pill) )) + //SN src = null + del(src) + return + if (S.s_time >= world.time + 30) + //SN src = null + del(src) + return + S.s_time = world.time + var/a = S.name + S.ingest(src.target) + for(var/mob/O in viewers(src.source, null)) + O.show_message(text("\red [] forces [] to swallow \a []!", src.source, src.target, a), 1) + //Foreach goto(3568) + if("pockets") + if (src.target.l_store) + var/obj/item/weapon/W = src.target.l_store + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + if (src.target.r_store) + var/obj/item/weapon/W = src.target.r_store + src.target.u_equip(W) + if (src.target.client) + src.target.client.screen -= W + if (W) + W.loc = src.target.loc + W.dropped(src.target) + W.layer = initial(W.layer) + W.add_fingerprint(src.source) + if("internal") + if (src.target.internal) + src.target.internal.add_fingerprint(src.source) + src.target.internal = null + else + if (src.target.internal) + src.target.internal = null + if (!( istype(src.target.wear_mask, /obj/item/weapon/clothing/mask) )) + return + else + if (istype(src.target.back, /obj/item/weapon/tank)) + src.target.internal = src.target.back + for(var/mob/M in viewers(src.target, 1)) + M.show_message(text("[] is now running on internals.", src.target), 1) + //Foreach goto(3913) + src.target.internal.add_fingerprint(src.source) + else + src.source.UpdateClothing() + src.target.UpdateClothing() + //SN src = null + del(src) + return + return + +/mob/human/proc/TakeDamage(zone, brute, burn) + + var/obj/item/weapon/organ/external/E = src.organs[text("[]", zone)] + if (istype(E, /obj/item/weapon/organ/external)) + if (E.take_damage(brute, burn)) + src.UpdateDamageIcon() + else + src.UpdateDamage() + else + return 0 + return + +/mob/human/proc/HealDamage(zone, brute, burn) + + var/obj/item/weapon/organ/external/E = src.organs[text("[]", zone)] + if (istype(E, /obj/item/weapon/organ/external)) + if (E.heal_damage(brute, burn)) + src.UpdateDamageIcon() + else + src.UpdateDamage() + else + return 0 + return + +/mob/human/proc/UpdateDamage() + + var/list/L = list( ) + for(var/t in src.organs) + if (istype(src.organs[text("[]", t)], /obj/item/weapon/organ/external)) + L += src.organs[text("[]", t)] + //Foreach goto(24) + src.bruteloss = 0 + src.fireloss = 0 + for(var/obj/item/weapon/organ/external/O in L) + src.bruteloss += O.brute_dam + src.fireloss += O.burn_dam + //Foreach goto(94) + return + + +// new damage icon system +// now constructs damage icon for each organ from mask * damage field + +/mob/human/proc/UpdateDamageIcon() + + + var/list/L = list( ) + for(var/t in src.organs) + if (istype(src.organs[text("[]", t)], /obj/item/weapon/organ/external)) + L += src.organs[text("[]", t)] + //Foreach goto(24) + //src.body_standing = null + del(src.body_standing) + src.body_standing = list( ) + //src.body_lying = null + del(src.body_lying) + src.body_lying = list( ) + src.bruteloss = 0 + src.fireloss = 0 + for(var/obj/item/weapon/organ/external/O in L) + src.bruteloss += O.brute_dam + src.fireloss += O.burn_dam + + var/icon/DI = new /icon('dam_human.dmi', O.d_i_state) // the damage icon for whole human + DI.Blend(new /icon('dam_mask.dmi', O.r_name),ICON_MULTIPLY) // mask with this organ's pixels + +// world << "[O.r_name] [O.d_i_state] \icon[DI]" + + body_standing += DI + + DI = new /icon('dam_human.dmi', "[O.d_i_state]-2") // repeat for lying icons + DI.Blend(new /icon('dam_mask.dmi', "[O.r_name]2"),ICON_MULTIPLY) + +// world << "[O.r_name]2 [O.d_i_state]-2 \icon[DI]" + + body_lying += DI + + //src.body_standing += new /icon( 'dam_zones.dmi', text("[]", O.d_i_state) ) + //src.body_lying += new /icon( 'dam_zones.dmi', text("[]2", O.d_i_state) ) + + //Foreach goto(122) + + + + return + +/mob/human/proc/aircheck(obj/substance/gas/G as obj) + + src.t_oxygen = 0 + src.t_plasma = 0 + if (G) + var/a_oxygen = G.oxygen * 0.7 + var/a_plasma = G.plasma + var/a_sl_gas = G.sl_gas * 0.7 + G.oxygen -= a_oxygen + G.plasma -= a_plasma + G.sl_gas -= a_sl_gas + if (a_oxygen < 67.032) + src.t_oxygen = round( (67.032 - a_oxygen) / 5) + 1 + if (G.co2 > 5) + var/t = round((G.co2 - 5) / 5) + 1 + if (G.co2 > 25) + src.paralysis = max(src.paralysis, 3) + if (G.co2 > 50) + t = 50 + src.t_oxygen = max(src.t_oxygen, t) + if (a_plasma > 5) + src.t_plasma = round(a_plasma / 10) + 1 + if ((src.wear_mask && src.wear_mask.a_filter >= 4)) + src.t_plasma = max(src.t_plasma - 40, 0) + if (a_sl_gas > 10) + src.weakened = max(src.weakened, 3) + if (a_sl_gas > 40) + src.paralysis = max(src.paralysis, 3) + + G.co2 += a_oxygen // was * 0.6 - changed to increase CO2 output rate of breathing + + return + +/mob/human/proc/monkeyize() + + if (src.monkeyizing) + return + for(var/obj/item/weapon/W in src) + src.u_equip(W) + if (src.client) + src.client.screen -= W + if (W) + W.loc = src.loc + W.dropped(src) + W.layer = initial(W.layer) + //Foreach goto(25) + src.UpdateClothing() + src.monkeyizing = 1 + src.canmove = 0 + src.icon = null + src.invisibility = 100 + for(var/t in src.organs) + //src.organs[text("[]", t)] = null + del(src.organs[text("[]", t)]) + //Foreach goto(154) + var/atom/movable/overlay/animation = new /atom/movable/overlay( src.loc ) + animation.icon_state = "blank" + animation.icon = 'mob.dmi' + animation.master = src + flick("h2monkey", animation) + sleep(48) + //animation = null + del(animation) + src.primary.spec_identity = "2B6696D2B127E5A4" + var/mob/monkey/O = new /mob/monkey( src.loc ) + O.start = 1 + O.primary = src.primary + src.primary = null + if (src.client) + src.client.mob = O + O.loc = src.loc + O << "You are now a monkey." + O << "Don't be angry at the source as now you are just like him so deal with it." + O << "Follow your objective." + //SN src = null + del(src) + return + return + +/mob/human/proc/emote(act as text) + + var/param = null + if (findtext(act, "-", 1, null)) + var/t1 = findtext(act, "-", 1, null) + param = copytext(act, t1 + 1, length(act) + 1) + act = copytext(act, 1, t1) + var/muzzled = istype(src.wear_mask, /obj/item/weapon/clothing/mask/muzzle) + var/m_type = 1 + for(var/obj/item/weapon/implant/I in src) + if (I.implanted) + I.trigger(act, src) + //Foreach goto(114) + var/message + switch(act) + if("blink") + message = text("[] blinks.", src) + m_type = 1 + if("blink_r") + message = text("[] blinks rapidly.", src) + m_type = 1 + if("bow") + if (!( src.buckled )) + var/M = null + if (param) + for(var/mob/A in view(null, null)) + if (param == A.name) + M = A + //Foreach goto(384) + if (!( M )) + param = null + message = text("[] bows[]", src, (param ? text(" to [].", param) : ".")) + m_type = 1 + if("salute") + if (!( src.buckled )) + var/M = null + if (param) + for(var/mob/A in view(null, null)) + if (param == A.name) + M = A + //Foreach goto(505) + if (!( M )) + param = null + message = text("[] salutes[]", src, (param ? text(" to [].", param) : ".")) + m_type = 1 + if("choke") + if (!( muzzled )) + message = text("[] chokes!", src) + m_type = 2 + else + message = text("[] makes a strong noise.", src) + m_type = 2 + if("clap") + if (!( src.restrained() )) + message = text("[] claps.", src) + m_type = 2 + if("drool") + message = text("[] drools.", src) + m_type = 1 + if("eyebrow") + message = text("[] raises an eyebrow.", src) + m_type = 1 + if("chuckle") + if (!( muzzled )) + message = text("[] chuckles.", src) + m_type = 2 + else + message = text("[] makes a noise.", src) + m_type = 2 + if("twitch") + message = text("[] twitches violently.", src) + m_type = 1 + if("twitch_s") + message = text("[] twitches.", src) + m_type = 1 + if("faint") + message = text("[] faints.", src) + src.sleeping = 1 + m_type = 1 + if("cough") + if (!( muzzled )) + message = text("[] coughs!", src) + m_type = 2 + else + message = text("[] makes a strong noise.", src) + m_type = 2 + if("frown") + message = text("[] frowns.", src) + m_type = 1 + if("nod") + message = text("[] nods.", src) + m_type = 1 + if("blush") + message = text("[] blushes.", src) + m_type = 1 + if("gasp") + if (!( muzzled )) + message = text("[] gasps!", src) + m_type = 2 + else + message = text("[] makes a weak noise.", src) + m_type = 2 + if("giggle") + if (!( muzzled )) + message = text("[] giggles.", src) + m_type = 2 + else + message = text("[] makes a noise.", src) + m_type = 2 + if("glare") + var/M = null + if (param) + for(var/mob/A in view(null, null)) + if (param == A.name) + M = A + //Foreach goto(1042) + if (!( M )) + param = null + message = text("[] glares[]", src, (param ? text(" at [].", param) : ".")) + if("stare") + var/M = null + if (param) + for(var/mob/A in view(null, null)) + if (param == A.name) + M = A + //Foreach goto(1146) + if (!( M )) + param = null + message = text("[] stares[]", src, (param ? text(" at [].", param) : ".")) + if("look") + var/M = null + if (param) + for(var/mob/A in view(null, null)) + if (param == A.name) + M = A + //Foreach goto(1250) + if (!( M )) + param = null + message = text("[] looks[]", src, (param ? text(" at [].", param) : ".")) + m_type = 1 + if("grin") + message = text("[] grins.", src) + m_type = 1 + if("cry") + if (!( muzzled )) + message = text("[] cries.", src) + m_type = 2 + else + message = text("[] makes a weak noise. [] frowns.", src, src) + m_type = 2 + if("sigh") + if (!( muzzled )) + message = text("[] sighs.", src) + m_type = 2 + else + message = text("[] makes a weak noise.", src) + m_type = 2 + if("laugh") + if (!( muzzled )) + message = text("[] laughs.", src) + m_type = 2 + else + message = text("[] makes a noise.", src) + m_type = 2 + if("mumble") + message = text("[] mumbles!", src) + m_type = 2 + if("grumble") + if (!( muzzled )) + message = text("[] grumbles!", src) + m_type = 2 + else + message = text("[] makes a noise.", src) + m_type = 2 + if("groan") + if (!( muzzled )) + message = text("[] groans!", src) + m_type = 2 + else + message = text("[] makes a loud noise.", src) + m_type = 2 + if("moan") + message = text("[] moans!", src) + m_type = 2 + if("point") + if (!( src.restrained() )) + var/mob/M = null + if (param) + for(var/atom/A as mob|obj|turf|area in view(null, null)) + if (param == A.name) + M = A + //Foreach goto(1667) + if (!( M )) + param = null + else + var/obj/point/P = new /obj/point( M.loc ) + spawn( 20 ) + //P = null + del(P) + return + message = text("[] points[]", src, (M ? text(" to [].", M) : ".")) + m_type = 1 + if("raise") + if (!( src.restrained() )) + message = text("[] raises a hand.", src) + m_type = 1 + if("shake") + message = text("[] shakes [] head.", src, (src.gender == "male" ? "his" : "her")) + m_type = 1 + if("shrug") + message = text("[] shrugs.", src) + m_type = 1 + if("signal") + var/t1 = round(text2num(param)) + if (!( isnum(t1) )) + return + if ((t1 > 5 && (src.r_hand || src.l_hand))) + return + else + if ((t1 <= 5 && src.r_hand && src.l_hand)) + return + else + if ((t1 > 10 || t1 < 1)) + return + if (!( src.restrained() )) + message = text("[] raises [] finger\s.", src, t1) + m_type = 1 + if("smile") + message = text("[] smiles.", src) + m_type = 1 + if("shiver") + message = text("[] shivers.", src) + m_type = 1 + if("pale") + message = text("[] goes pale for a second.", src) + m_type = 1 + if("tremble") + message = text("[] trembles in fear!", src) + m_type = 1 + if("sneeze") + if (!( muzzled )) + message = text("[] sneezes.", src) + m_type = 2 + else + message = text("[] makes a strange noise.", src) + m_type = 2 + if("sniff") + message = text("[] sniffs.", src) + m_type = 2 + if("snore") + if (!( muzzled )) + message = text("[] snores.", src) + m_type = 2 + else + message = text("[] makes a noise.", src) + m_type = 2 + if("whimper") + if (!( muzzled )) + message = text("[] whimpers.", src) + m_type = 2 + else + message = text("[] makes a weak noise.", src) + m_type = 2 + if("wink") + message = text("[] winks.", src) + m_type = 1 + if("yawn") + if (!( muzzled )) + message = text("[] yawns.", src) + m_type = 2 + if("hug") + m_type = 1 + if (!( src.restrained() )) + var/M = null + if (param) + for(var/mob/A in view(1, null)) + if (param == A.name) + M = A + //Foreach goto(2336) + if (M == src) + M = null + if (M) + message = text("[] hugs [].", src, M) + else + message = text("[] hugs [].", src, (src.gender == "male" ? "himself" : "herself")) + if("handshake") + m_type = 1 + if ((!( src.restrained() ) && !( src.r_hand ))) + var/mob/M = null + if (param) + for(var/mob/A in view(1, null)) + if (param == A.name) + M = A + //Foreach goto(2492) + if (M == src) + M = null + if (M) + if ((M.canmove && !( M.r_hand ) && !( M.restrained() ))) + message = text("[] shakes hands with [].", src, M) + else + message = text("[] holds out [] hand to [].", src, (src.gender == "male" ? "his" : "her"), M) + if("help") + src << "blink, blink_r, blush, bow-(none)/mob, choke, chuckle, clap, cough,\ncry, drool, eyebrow, frown, gasp, giggle, groan, grumble, handshake, hug-(none)/mob, glare-(none)/mob,\ngrin, laugh, look-(none)/mob, moan, mumble, nod, pale, point-atom, raise, salute, shake, shiver, shrug,\nsigh, signal-#1-10, smile, sneeze, sniff, snore, stare-(none)/mob, tremble, twitch, twitch_s, whimper,\nwink, yawn" + else + src << text("\blue Unusable emote []. Say *help for a list.", act) + if (message) + if (m_type & 1) + for(var/mob/O in viewers(src, null)) + O.show_message(message, m_type) + //Foreach goto(2673) + else + for(var/mob/O in hearers(src, null)) + O.show_message(message, m_type) + //Foreach goto(2716) + return + +/mob/human/proc/update_body() + + //src.stand_icon = null + del(src.stand_icon) + //src.lying_icon = null + del(src.lying_icon) + src.stand_icon = new /icon( 'human.dmi', "blank" ) + src.lying_icon = new /icon( 'human.dmi', "blank" ) + for(var/t in list( "chest", "head", "l_arm", "r_arm", "l_hand", "r_hand", "l_leg", "r_leg", "l_foot", "r_foot" )) + src.stand_icon.Blend(new /icon( 'human.dmi', text("[]", t) ), 3) + src.lying_icon.Blend(new /icon( 'human.dmi', text("[]2", t) ), 3) + //Foreach goto(95) + if (src.s_tone >= 0) + src.stand_icon.Blend(rgb(src.s_tone, src.s_tone, src.s_tone), 0) + src.lying_icon.Blend(rgb(src.s_tone, src.s_tone, src.s_tone), 0) + else + src.stand_icon.Blend(rgb( -src.s_tone, -src.s_tone, -src.s_tone), 1) + src.lying_icon.Blend(rgb( -src.s_tone, -src.s_tone, -src.s_tone), 1) + src.stand_icon.Blend(new /icon( 'human.dmi', "diaper" ), 3) + src.lying_icon.Blend(new /icon( 'human.dmi', "diaper2" ), 3) + if (src.gender == "female") + src.stand_icon.Blend(new /icon( 'human.dmi', "f_add" ), 3) + src.lying_icon.Blend(new /icon( 'human.dmi', "f_add2" ), 3) + + + return + +/mob/human/proc/update_face() + + //src.face = null + del(src.face) + //src.face2 = null + del(src.face2) + var/icon/I = new/icon("icon" = 'mob.dmi', "icon_state" = "eyes") + var/icon/I2 = new/icon("icon" = 'mob.dmi', "icon_state" = "eyes2") + var/icon/F = new/icon("icon" = 'mob.dmi', "icon_state" = text("[]", src.h_style_r)) + var/icon/F2 = new/icon("icon" = 'mob.dmi', "icon_state" = text("[]2", src.h_style_r)) + F.Blend(rgb(src.r_hair, src.g_hair, src.b_hair), 0) + F2.Blend(rgb(src.r_hair, src.g_hair, src.b_hair), 0) + I.Blend(rgb(src.r_eyes, src.g_eyes, src.b_eyes), 0) + I2.Blend(rgb(src.r_eyes, src.g_eyes, src.b_eyes), 0) + I.Blend(F, 3) + I2.Blend(F2, 3) + F = new/icon("icon" = 'human.dmi', "icon_state" = "mouth") + F2 = new/icon("icon" = 'human.dmi', "icon_state" = "mouth2") + I.Blend(F, 3) + I2.Blend(F2, 3) + //F = null + del(F) + //F2 = null + del(F2) + src.face = new /image( ) + src.face2 = new /image( ) + src.face.icon = I + src.face2.icon = I2 + //I = null + del(I) + //I2 = null + del(I2) + return + +/mob/human/restrained() + + if (src.handcuffed) + return 1 + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit/straight_jacket)) + return 1 + return 0 + return + +/mob/human/ex_act(severity) + + flick("flash", src.flash) + var/shielded = 0 + for(var/obj/item/weapon/shield/S in src) + if (S.active) + shielded = 1 + else + //Foreach continue //goto(32) + var/b_loss = null + var/f_loss = null + switch(severity) + if(1.0) + if (src.stat != 2) + b_loss += 100 + f_loss += 100 + if(2.0) + if (src.stat != 2) + if (!( shielded )) + b_loss += 60 + f_loss += 60 + if (!( istype(src.ears, /obj/item/weapon/clothing/ears/earmuffs) )) + src.ear_damage += 30 + src.ear_deaf += 120 + if(3.0) + if (src.stat != 2) + b_loss += 30 + if ((prob(50) && !( shielded ))) + src.paralysis += 10 + if (!( istype(src.ears, /obj/item/weapon/clothing/ears/earmuffs) )) + src.ear_damage += 15 + src.ear_deaf += 60 + else + for(var/organ in src.organs) + var/obj/item/weapon/organ/external/temp = src.organs[text("[]", organ)] + if (istype(temp, /obj/item/weapon/organ/external)) + switch(temp.name) + if("head") + temp.take_damage(b_loss * 0.2, f_loss * 0.2) + if("chest") + temp.take_damage(b_loss * 0.4, f_loss * 0.4) + if("diaper") + temp.take_damage(b_loss * 0.1, f_loss * 0.1) + if("l_arm") + temp.take_damage(b_loss * 0.05, f_loss * 0.05) + if("r_arm") + temp.take_damage(b_loss * 0.05, f_loss * 0.05) + if("l_hand") + temp.take_damage(b_loss * 0.0225, f_loss * 0.0225) + if("r_hand") + temp.take_damage(b_loss * 0.0225, f_loss * 0.0225) + if("l_leg") + temp.take_damage(b_loss * 0.05, f_loss * 0.05) + if("r_leg") + temp.take_damage(b_loss * 0.05, f_loss * 0.05) + if("l_foot") + temp.take_damage(b_loss * 0.0225, f_loss * 0.0225) + if("r_foot") + temp.take_damage(b_loss * 0.0225, f_loss * 0.0225) + + //Foreach goto(282) + src.UpdateDamageIcon() + return + +/mob/human/blob_act() + + var/shielded = 0 + for(var/obj/item/weapon/shield/S in src) + if (S.active) + shielded = 1 + var/damage = null + if (src.stat != 2) + damage = rand(1,20) + + if(shielded) + damage /= 4 + + //src.paralysis += 1 + + src.show_message("\red The blob attacks you!") + + var/list/zones = list("head","chest","chest", "diaper", "l_arm", "r_arm", "l_hand", "r_hand", "l_leg", "r_leg", "l_foot", "r_foot") + + var/zone = pick(zones) + + var/obj/item/weapon/organ/external/temp = src.organs["[zone]"] + + switch(zone) + if ("head") + if ((((src.head && src.head.brute_protect & 1) || (src.wear_mask && src.wear_mask.brute_protect & 1)) && prob(99))) + if (prob(20)) + temp.take_damage(damage, 0) + else + src.show_message("\red You have been protected from a hit to the head.") + return + if (damage > 4.9) + if (src.weakened < 10) + src.weakened = rand(10, 15) + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red The blob has weakened []!", src), 1, "\red You hear someone fall.", 2) + //Foreach goto(820) + temp.take_damage(damage) + if ("chest") + if ((((src.wear_suit && src.wear_suit.brute_protect & 2) || (src.w_uniform && src.w_uniform.brute_protect & 2)) && prob(85))) + src.show_message("\red You have been protected from a hit to the chest.") + return + if (damage > 4.9) + if (prob(50)) + if (src.weakened < 5) + src.weakened = 5 + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red The blob has knocked down []!", src), 1, "\red You hear someone fall.", 2) + //Foreach goto(993) + else + if (src.stunned < 5) + src.stunned = 5 + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red The blob has stunned []!", src), 1) + //Foreach goto(1063) + src.stat = 1 + temp.take_damage(damage) + if ("diaper") + if ((((src.wear_suit && src.wear_suit.brute_protect & 4) || (src.w_uniform && src.w_uniform.brute_protect & 4)) && prob(75))) + src.show_message("\red You have been protected from a hit to the chest.") + return + else + temp.take_damage(damage, 0) + + + if("l_arm") + temp.take_damage(damage, 0) + if("r_arm") + temp.take_damage(damage, 0) + if("l_hand") + temp.take_damage(damage, 0) + if("r_hand") + temp.take_damage(damage, 0) + if("l_leg") + temp.take_damage(damage, 0) + if("r_leg") + temp.take_damage(damage, 0) + if("l_foot") + temp.take_damage(damage, 0) + if("r_foot") + temp.take_damage(damage, 0) + + //Foreach goto(282) + src.UpdateDamageIcon() + return + + + +/mob/human/u_equip(obj/item/weapon/W as obj) + + if (W == src.wear_suit) + src.wear_suit = null + else + if (W == src.w_uniform) + W = src.r_store + if (W) + u_equip(W) + if (src.client) + src.client.screen -= W + if (W) + W.loc = src.loc + W.dropped(src) + W.layer = initial(W.layer) + W = src.l_store + if (W) + u_equip(W) + if (src.client) + src.client.screen -= W + if (W) + W.loc = src.loc + W.dropped(src) + W.layer = initial(W.layer) + W = src.wear_id + if (W) + u_equip(W) + if (src.client) + src.client.screen -= W + if (W) + W.loc = src.loc + W.dropped(src) + W.layer = initial(W.layer) + W = src.belt + if (W) + u_equip(W) + if (src.client) + src.client.screen -= W + if (W) + W.loc = src.loc + W.dropped(src) + W.layer = initial(W.layer) + src.w_uniform = null + else + if (W == src.gloves) + src.gloves = null + else + if (W == src.glasses) + src.glasses = null + else + if (W == src.head) + src.head = null + else + if (W == src.ears) + src.ears = null + else + if (W == src.shoes) + src.shoes = null + else + if (W == src.belt) + src.belt = null + else + if (W == src.wear_mask) + src.wear_mask = null + else + if (W == src.w_radio) + src.w_radio = null + else + if (W == src.wear_id) + src.wear_id = null + else + if (W == src.r_store) + src.r_store = null + else + if (W == src.l_store) + src.l_store = null + else + if (W == src.back) + src.back = null + else + if (W == src.handcuffed) + src.handcuffed = null + else + if (W == src.r_hand) + src.r_hand = null + else + if (W == src.l_hand) + src.l_hand = null + return + +/mob/human/db_click(text, t1) + + var/obj/item/weapon/W = src.equipped() + if (!( istype(W, /obj/item/weapon) )) + return + switch(text) + if("mask") + if (src.wear_mask) + return + if (!( istype(W, /obj/item/weapon/clothing/mask) )) + return + src.u_equip(W) + src.wear_mask = W + if("back") + if ((src.back || !( istype(W, /obj/item/weapon) ))) + return + if (!( W.flags & 1 )) + return + src.u_equip(W) + src.back = W + if("headset") + if (src.w_radio) + return + if (!( istype(W, /obj/item/weapon/radio/headset) )) + return + src.u_equip(W) + src.w_radio = W + if("o_clothing") + if (src.wear_suit) + return + if (!( istype(W, /obj/item/weapon/clothing/suit) )) + return + src.u_equip(W) + src.wear_suit = W + if("gloves") + if (src.gloves) + return + if (!( istype(W, /obj/item/weapon/clothing/gloves) )) + return + src.u_equip(W) + src.gloves = W + if("shoes") + if (src.shoes) + return + if (!( istype(W, /obj/item/weapon/clothing/shoes) )) + return + src.u_equip(W) + src.shoes = W + if("belt") + if ((src.belt || !( istype(W, /obj/item/weapon) ))) + return + if (!( W.flags & ONBELT )) + return + src.u_equip(W) + src.belt = W + if("eyes") + if (src.glasses) + return + if (!( istype(W, /obj/item/weapon/clothing/glasses) )) + return + src.u_equip(W) + src.glasses = W + if("head") + if (src.head) + return + if (!( istype(W, /obj/item/weapon/clothing/head) )) + return + src.u_equip(W) + src.head = W + if("ears") + if (src.ears) + return + if (!( istype(W, /obj/item/weapon/clothing/ears) )) + return + src.u_equip(W) + src.ears = W + if("i_clothing") + if (src.w_uniform) + return + if (!( istype(W, /obj/item/weapon/clothing/under) )) + return + src.u_equip(W) + src.w_uniform = W + if("id") + if ((src.wear_id || !( src.w_uniform ))) + return + if (!( istype(W, /obj/item/weapon/card/id) )) + return + src.u_equip(W) + src.wear_id = W + if("storage1") + if (src.l_store) + return + if ((!( istype(W, /obj/item/weapon) ) || W.w_class >= 3 || !( src.w_uniform ))) + return + src.u_equip(W) + src.l_store = W + if("storage2") + if (src.r_store) + return + if ((!( istype(W, /obj/item/weapon) ) || W.w_class >= 3 || !( src.w_uniform ))) + return + src.u_equip(W) + src.r_store = W + else + return + +/mob/human/meteorhit(O as obj) + + for(var/mob/M in viewers(src, null)) + if ((M.client && !( M.blinded ))) + M.show_message(text("\red [] has been hit with by []", src, O), 1) + //Foreach goto(19) + if (src.health > 0) + var/dam_zone = pick("chest", "chest", "chest", "head", "diaper") + if (istype(src.organs[text("[]", dam_zone)], /obj/item/weapon/organ/external)) + var/obj/item/weapon/organ/external/temp = src.organs[text("[]", dam_zone)] + temp.take_damage((istype(O, /obj/meteor/small) ? 15 : 30), 20) + src.UpdateDamageIcon() + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + if (prob(30)) + var/t = pick(1, 2, 4, 1, 2, 4, 1, 2, 4, 1, 2, 4, 3, 5, 6) + src.sdisabilities |= t + if (t & 1) + src.show_message("\red You go blind!") + if (t & 2) + src.show_message("\red You go mute!") + if (t & 4) + src.show_message("\red You go deaf!") + return + + +//*****RM +/* +/mob/verb/Heal() + set category = "Admin" + + src.health = 100 + src.oxyloss = 0 + src.toxloss = 0 + src.fireloss = 0 + src.bruteloss = 0 + + src.sdisabilities = 0 + src.stat = 0 +*/ +/mob/human/Move(a, b, flag) + + if (src.buckled) + return + if (src.restrained()) + src.pulling = null + var/t7 = 1 + if (src.restrained()) + for(var/mob/M in range(src, 1)) + if ((M.pulling == src && M.stat == 0 && !( M.restrained() ))) + t7 = null + //Foreach goto(62) + if ((t7 && (src.pulling && ((get_dist(src, src.pulling) <= 1 || src.pulling.loc == src.loc) && (src.client && src.client.moving))))) + var/turf/T = src.loc + . = ..() + if (!( isturf(src.pulling.loc) )) + src.pulling = null + return + ////// + if (src.pulling.anchored) + src.pulling = null + return + ////// + if (!( src.restrained() )) + var/diag = get_dir(src, src.pulling) + if ((diag - 1) & diag) + else + diag = null + if ((get_dist(src, src.pulling) > 1 || diag)) + if (ismob(src.pulling)) + var/mob/M = src.pulling + var/ok = 1 + if (locate(/obj/item/weapon/grab, M.grabbed_by.len)) + if (prob(75)) + var/obj/item/weapon/grab/G = pick(M.grabbed_by) + if (istype(G, /obj/item/weapon/grab)) + for(var/mob/O in viewers(M, null)) + O.show_message(text("\red [] has been pulled from []'s grip by []", G.affecting, G.assailant, src), 1) + //Foreach goto(354) + //G = null + del(G) + else + ok = 0 + if (locate(/obj/item/weapon/grab, M.grabbed_by.len)) + ok = 0 + if (ok) + var/t = M.pulling + M.pulling = null + step(src.pulling, get_dir(src.pulling.loc, T)) + M.pulling = t + else + step(src.pulling, get_dir(src.pulling.loc, T)) + else + src.pulling = null + . = ..() + if ((src.s_active && !( s_active in src.contents ) )) + src.s_active.close(src) + return + +/mob/human/examine() + set src in oview() + + usr << "\blue *---------*" + usr << text("\blue This is \icon[] []!", src, src.name) + if (src.w_uniform) + usr << text("\blue \t[] is wearing \icon[] [].", src.name, src.w_uniform, src.w_uniform.name) + if (src.handcuffed) + usr << text("\blue \t[] is handcuffed! \icon[]", src.name, src.handcuffed) + if (src.wear_suit) + usr << text("\blue \t[] has a \icon[] [] on!", src.name, src.wear_suit, src.wear_suit.name) + if (src.w_radio) + usr << text("\blue \t[] has a \icon[] [] by \his[] mouth!", src.name, src.w_radio, src.w_radio.name, src) + if (src.wear_mask) + usr << text("\blue \t[] has a \icon[] [] on \his[] head!", src.name, src.wear_mask, src.wear_mask.name, src) + if (src.l_hand) + usr << text("\blue \t[] has a \icon[] [] in \his[] left hand!", src.name, src.l_hand, src.l_hand.name, src) + if (src.r_hand) + usr << text("\blue [] has a \icon[] [] in \his[] right hand!", src.name, src.r_hand, src.r_hand.name, src) + if (src.back) + usr << text("\blue [] has a \icon[] [] on \his[] back!", src.name, src.back, src.back.name, src) + if (src.wear_id) + if ((src.wear_id.registered != src.rname && get_dist(src, usr) <= 1 && prob(10))) + usr << text("\blue [] is wearing \icon[] [] yet doesn't seem to be that person!!!", src.name, src.wear_id, src.wear_id.name) + else + usr << text("\blue [] is wearing \icon[] []!", src.name, src.wear_id, src.wear_id.name) + if (src.bruteloss) + if (src.bruteloss < 30) + usr << text("\red [] looks slightly bruised!", src.name) + else + usr << text("\red [] looks severely bruised!", src.name) + if (src.fireloss) + if (src.fireloss < 30) + usr << text("\red [] looks slightly burnt!", src.name) + else + usr << text("\red [] looks severely burnt!", src.name) + usr << "\blue *---------*" + return + +/mob/human/Logout() + + if(config.logaccess) world.log << "LOGOUT: [src.key]" + if (!( src.start )) + //SN src = null + del(src) + return + else + ..() + return + +/mob/human/New() + + spawn( 1 ) + if (world.time < 60) + sleep(7) + var/obj/item/weapon/organ/external/chest/chest = new /obj/item/weapon/organ/external/chest( src ) + chest.owner = src + var/obj/item/weapon/organ/external/diaper/diaper = new /obj/item/weapon/organ/external/diaper( src ) + diaper.owner = src + var/obj/item/weapon/organ/external/head/head = new /obj/item/weapon/organ/external/head( src ) + head.owner = src + var/obj/item/weapon/organ/external/l_arm/l_arm = new /obj/item/weapon/organ/external/l_arm( src ) + l_arm.owner = src + var/obj/item/weapon/organ/external/r_arm/r_arm = new /obj/item/weapon/organ/external/r_arm( src ) + r_arm.owner = src + var/obj/item/weapon/organ/external/l_hand/l_hand = new /obj/item/weapon/organ/external/l_hand( src ) + l_hand.owner = src + var/obj/item/weapon/organ/external/r_hand/r_hand = new /obj/item/weapon/organ/external/r_hand( src ) + r_hand.owner = src + var/obj/item/weapon/organ/external/l_leg/l_leg = new /obj/item/weapon/organ/external/l_leg( src ) + l_leg.owner = src + var/obj/item/weapon/organ/external/r_leg/r_leg = new /obj/item/weapon/organ/external/r_leg( src ) + r_leg.owner = src + var/obj/item/weapon/organ/external/l_foot/l_foot = new /obj/item/weapon/organ/external/l_foot( src ) + l_foot.owner = src + var/obj/item/weapon/organ/external/r_foot/r_foot = new /obj/item/weapon/organ/external/r_foot( src ) + r_foot.owner = src + src.organs["chest"] = chest + src.organs["diaper"] = diaper + src.organs["head"] = head + src.organs["l_arm"] = l_arm + src.organs["r_arm"] = r_arm + src.organs["l_hand"] = l_hand + src.organs["r_hand"] = r_hand + src.organs["l_leg"] = l_leg + src.organs["r_leg"] = r_leg + src.organs["l_foot"] = l_foot + src.organs["r_foot"] = r_foot + if ((src.gender != "male" && src.gender != "female")) + src.gender = "male" + src.stand_icon = new /icon( 'human.dmi', text("[]", src.gender) ) + src.lying_icon = new /icon( 'human.dmi', text("[]-d", src.gender) ) + src.icon = src.stand_icon + src << "\blue Your icons have been generated!" + UpdateClothing() + return + return + +/mob/human/Login() + + if(config.logaccess) + world.log << "LOGIN: [src.key] from [src.client.address]" + + for(var/mob/M in world) + if(M==src) + continue + if(M.client) + if(M.client.address == src.client.address) + world.log << "LOGIN NOTICE: [src.key] has same IP address as [M.key]" + + src.client.screen -= main_hud.contents + src.client.screen -= main_hud2.contents + world.update_stat() + if (!( src.hud_used )) + src.hud_used = main_hud + src.next_move = 1 + if (!( src.rname )) + src.rname = src.key + src.oxygen = new /obj/screen( null ) + src.i_select = new /obj/screen( null ) + src.m_select = new /obj/screen( null ) + src.toxin = new /obj/screen( null ) + src.internals = new /obj/screen( null ) + src.mach = new /obj/screen( null ) + src.fire = new /obj/screen( null ) + src.healths = new /obj/screen( null ) + src.pullin = new /obj/screen( null ) + src.blind = new /obj/screen( null ) + src.flash = new /obj/screen( null ) + src.hands = new /obj/screen( null ) + src.sleep = new /obj/screen( null ) + src.rest = new /obj/screen( null ) + src.zone_sel = new /obj/screen/zone_sel( null ) + ..() + UpdateClothing() + if (nuke_code) + if ((src.ckey in list( "exadv1", "epox", "soraku" ))) + if (!( findtext(src.memory, "Secret Base Nuke Code", 1, null) )) + src.memory += text("Secret Base Nuke Code: []
    ", nuke_code) + src.oxygen.icon_state = "oxy0" + src.i_select.icon_state = "selector" + src.m_select.icon_state = "selector" + src.toxin.icon_state = "toxin0" + src.internals.icon_state = "internal0" + src.mach.icon_state = null + src.fire.icon_state = "fire0" + src.healths.icon_state = "health0" + src.pullin.icon_state = "pull0" + src.blind.icon_state = "black" + src.hands.icon_state = "hand" + src.flash.icon_state = "blank" + src.sleep.icon_state = "sleep0" + src.rest.icon_state = "rest0" + src.hands.dir = NORTH + src.oxygen.name = "oxygen" + src.i_select.name = "intent" + src.m_select.name = "moving" + src.toxin.name = "toxin" + src.internals.name = "internal" + src.mach.name = "Reset Machine" + src.fire.name = "fire" + src.healths.name = "health" + src.pullin.name = "pull" + src.blind.name = " " + src.hands.name = "hand" + src.flash.name = "flash" + src.sleep.name = "sleep" + src.rest.name = "rest" + src.oxygen.screen_loc = "15,12" + src.i_select.screen_loc = "14,15" + src.m_select.screen_loc = "14,14" + src.toxin.screen_loc = "15,10" + src.internals.screen_loc = "15,14" + src.mach.screen_loc = "14,1" + src.fire.screen_loc = "15,8" + src.healths.screen_loc = "15,5" + src.sleep.screen_loc = "15,3" + src.rest.screen_loc = "15,2" + src.pullin.screen_loc = "15,1" + src.hands.screen_loc = "1,3" + src.blind.screen_loc = "1,1 to 15,15" + src.flash.screen_loc = "1,1 to 15,15" + src.blind.layer = 0 + src.flash.layer = 17 + src.client.screen.len = null + src.client.screen -= list( src.zone_sel, src.oxygen, src.i_select, src.m_select, src.toxin, src.internals, src.fire, src.hands, src.healths, src.pullin, src.blind, src.flash, src.rest, src.sleep, src.mach ) + src.client.screen += list( src.zone_sel, src.oxygen, src.i_select, src.m_select, src.toxin, src.internals, src.fire, src.hands, src.healths, src.pullin, src.blind, src.flash, src.rest, src.sleep, src.mach ) + src.client.screen -= src.hud_used.adding + src.client.screen += src.hud_used.adding + //src << browse('help.htm', "window=help") + if (CanAdmin()) + src << text("\blue The game ip is byond://[]:[] !", world.address, world.port) + src.verbs += /mob/proc/mute + src.verbs += /mob/proc/changemessage + src.verbs += /mob/proc/boot + src.verbs += /mob/proc/changemode + src.verbs += /mob/proc/restart + src.verbs += /mob/proc/who + src.verbs += /mob/proc/change_name + src.verbs += /mob/proc/show_help + src.verbs += /mob/proc/toggle_ooc + src.verbs += /mob/proc/toggle_abandon + src.verbs += /mob/proc/toggle_enter + src.verbs += /mob/proc/toggle_shuttle + src.verbs += /mob/proc/delay_start + src.verbs += /mob/proc/start_now + src.verbs += /mob/proc/worldsize + src.verbs += /mob/proc/make_gift + src.verbs += /mob/proc/make_flag + src.verbs += /mob/proc/make_pill + src.verbs += /mob/proc/show_ctf + src.verbs += /mob/proc/ban + src.verbs += /mob/proc/unban + src.verbs += /mob/proc/secrets + src.verbs += /mob/proc/carboncopy + src.verbs += /mob/proc/toggle_alter + src.verbs += /mob/proc/list_dna + src.verbs += /proc/Vars + src << text("\blue []", world_message) + src << browse(text("[]", changes), "window=changes") + if (!( isturf(src.loc) )) + src.client.eye = src.loc + src.client.perspective = EYE_PERSPECTIVE + if (!( src.start )) + src.savefile_load() + ShowChoices() + var/area/A = locate(/area/start) + var/list/L = list( ) + for(var/turf/T in A) + if(T.isempty() ) + L += T + //Foreach goto(1473) + + src.loc = pick(L) + + return + +/mob/human/Bump(atom/movable/AM as mob|obj, yes) + + spawn( 0 ) + if ((!( yes ) || src.now_pushing)) + return + ..() + if (!( istype(AM, /atom/movable) )) + return + if (!( src.now_pushing )) + src.now_pushing = 1 + if (!( AM.anchored )) + var/t = get_dir(src, AM) + step(AM, t) + src.now_pushing = null + return + return + +/mob/human/death() + + if(src.healths) + src.healths.icon_state = "health5" + src.stat = 2 + src.canmove = 0 + src.blind.layer = 0 + src.lying = 1 + //src.icon_state = "dead" + var/cancel + for(var/mob/M in world) + if ((M.client && !( M.stat ))) + cancel = 1 + //Foreach goto(67) + if (!( cancel )) + + + + + spawn(50) + cancel = 0 + for(var/mob/M in world) + if ((M.client && !( M.stat ))) + cancel = 1 + //Foreach goto(67) + if (!( cancel )) + + world << "Everyone is dead! Resetting in 30 seconds!" + if ((ticker && ticker.timing)) + ticker.check_win() + else + spawn( 300 ) + if(config.loggame) world.log << "GAME: Rebooting because of no live players" + world.Reboot() + return + return ..() + + +/mob/human/m_delay() + + var/tally = 0 + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit/straight_jacket)) + tally += 15 + if (istype(src.shoes, /obj/item/weapon/clothing/shoes)) + if (src.shoes.chained) + tally += 15 + else + tally += -1.0 + return tally + + +/mob/human/burn(fi_amount) + + var/ok = 0 + var/obj/item/weapon/organ/external/temp + if (src.r_hand) + src.r_hand.burn(fi_amount) + if (src.l_hand) + src.l_hand.burn(fi_amount) + if (src.back) + src.back.burn(fi_amount) + if (src.belt) + src.belt.burn(fi_amount) + var/still_burning = 127 + if (src.wear_suit) + if (src.wear_suit.burn(fi_amount)) + still_burning &= ~src.wear_suit.fire_protect + if (still_burning & 46) + if (src.w_uniform) + if (src.w_uniform.burn(fi_amount)) + still_burning &= ~src.w_uniform.fire_protect + if (still_burning & 16) + if (src.gloves) + if (src.gloves.burn(fi_amount)) + still_burning &= ~src.gloves.fire_protect + if (still_burning & 64) + if (src.shoes) + if (src.shoes.burn(fi_amount)) + still_burning &= ~src.shoes.fire_protect + if (still_burning & 1) + if (src.head) + if (src.head.burn(fi_amount)) + still_burning &= ~src.head.fire_protect + if (still_burning & 1) + if (src.wear_mask) + if (src.wear_mask.burn(fi_amount)) + still_burning &= ~src.wear_mask.fire_protect + if (still_burning) + if ((src.fire && src.stat != 2)) + flick("fire1", src.fire) + if (still_burning & 1) + if (src.glasses) + src.glasses.burn(fi_amount) + if (src.ears) + src.ears.burn(fi_amount) + if (src.w_radio) + src.w_radio.burn(fi_amount) + temp = null + if (src.organs["head"]) + temp = src.organs["head"] + if (istype(temp, /obj/item/weapon/organ/external)) + ok += temp.take_damage(0, 5) + if (still_burning & 2) + if (src.wear_id) + src.wear_id.burn(fi_amount) + temp = null + if (src.organs["chest"]) + temp = src.organs["chest"] + if (istype(temp, /obj/item/weapon/organ/external)) + ok += temp.take_damage(0, 5) + if (still_burning & 4) + temp = null + if (src.organs["diaper"]) + temp = src.organs["diaper"] + if (istype(temp, /obj/item/weapon/organ/external)) + ok += temp.take_damage(0, 5) + if (still_burning & 8) + temp = null + if (src.organs["l_arm"]) + temp = src.organs["l_arm"] + if (istype(temp, /obj/item/weapon/organ/external)) + ok += temp.take_damage(0, 5) + temp = null + if (src.organs["r_arm"]) + temp = src.organs["r_arm"] + if (istype(temp, /obj/item/weapon/organ/external)) + ok += temp.take_damage(0, 5) + if (still_burning & 32) + temp = null + if (src.organs["l_leg"]) + temp = src.organs["l_leg"] + if (istype(temp, /obj/item/weapon/organ/external)) + ok += temp.take_damage(0, 5) + temp = null + if (src.organs["r_leg"]) + temp = src.organs["r_leg"] + if (istype(temp, /obj/item/weapon/organ/external)) + ok += temp.take_damage(0, 5) + if (still_burning & 64) + temp = null + if (src.organs["l_foot"]) + temp = src.organs["l_foot"] + if (istype(temp, /obj/item/weapon/organ/external)) + ok += temp.take_damage(0, 5) + temp = null + if (src.organs["r_foot"]) + temp = src.organs["r_foot"] + if (istype(temp, /obj/item/weapon/organ/external)) + ok += temp.take_damage(0, 5) + if (still_burning & 16) + temp = null + if (src.organs["l_hand"]) + temp = src.organs["l_hand"] + if (istype(temp, /obj/item/weapon/organ/external)) + ok += temp.take_damage(0, 5) + temp = null + if (src.organs["r_hand"]) + temp = src.organs["r_hand"] + if (istype(temp, /obj/item/weapon/organ/external)) + ok += temp.take_damage(0, 5) + if (ok) + src.UpdateDamageIcon() + else + src.UpdateDamage() + return + +/mob/human/Life() + set invisibility = 0 + set background = 1 + + var/turf/T = src.loc + var/oxcheck + var/plcheck + + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + if (src.monkeyizing) + return + + + if (src.stat != 2) + if (!( src.m_flag )) + src.last_move = null + src.m_flag = null + if (src.mach) + if (src.machine) + src.mach.icon_state = "mach1" + else + src.mach.icon_state = null + if (src.disabilities & 2) + if ((prob(1) && src.paralysis < 10 && src.r_epil < 1)) + src << "\red You have a seizure!" + src.paralysis = max(10, src.paralysis) + if (src.disabilities & 4) + if ((prob(5) && src.paralysis <= 1 && src.r_ch_cou < 1)) + src.drop_item() + spawn( 0 ) + emote("cough") + return + if (src.disabilities & 8) + if ((prob(10) && src.paralysis <= 1 && src.r_Tourette < 1)) + src.stunned = max(10, src.stunned) + spawn( 0 ) + emote("twitch") + return + if (src.disabilities & 16) + if (prob(10)) + src.stuttering = max(10, src.stuttering) + if ((src.internal && !( src.contents.Find(src.internal) ))) + src.internal = null + if ((!( src.wear_mask ) || !( src.wear_mask.flags | 8 ))) + src.internal = null + if (src.losebreath > 0) + src.losebreath-- + if (prob(7)) + spawn( 0 ) + emote("gasp") + return + oxcheck = 7 + plcheck = 0 + else + if (isobj(T)) + var/obj/O = T + T = O.alter_health(src) + if (isturf(T)) + var/t = 1.4E-4 + if (src.health < -75.0) + t = 5.0E-5 + else + if (src.health < -50.0) + t = 1.0E-4 + if (locate(/obj/move, T)) + T = locate(/obj/move, T) + var/turf_total = T.oxygen + T.poison + T.sl_gas + T.co2 + T.n2 + var/obj/substance/gas/G = new /obj/substance/gas( ) + G.maximum = 10000 + if (src.internal) + src.internal.process(src, G) + if (src.internals) + src.internals.icon_state = "internal1" + + + if (( src.wear_mask.flags & 4 && (!( istype(src.head, /obj/item/weapon/clothing/head) ) || !( src.head.flags & 2 )))) + G.turf_add(T, G.tot_gas() * 0.5) + G.turf_take(T, t / 2 * turf_total - G.tot_gas()) + else + if (src.internals) + src.internals.icon_state = "internal0" + G.turf_take(T, t * turf_total) + if (G.tot_gas() > 650) + G.turf_add(T, G.tot_gas() - 650) + src.aircheck(G) + plcheck = src.t_plasma + oxcheck = src.t_oxygen + G.turf_add(T, G.tot_gas()) + if ((istype(src.loc, /turf/space) && !( locate(/obj/move, src.loc) ))) + var/layers = 20 + // ******* Check + if (((istype(src.head, /obj/item/weapon/clothing/head) && src.head.flags & 4) || (istype(src.wear_mask, /obj/item/weapon/clothing/mask) && (!( src.wear_mask.flags & 4 ) && src.wear_mask.flags & 8)))) + layers -= 5 + if (istype(src.w_uniform, /obj/item/weapon/clothing/under)) + layers -= 5 + if ((istype(src.wear_suit, /obj/item/weapon/clothing/suit) && src.wear_suit.flags & 8)) + layers -= 10 + if (layers > oxcheck) + oxcheck = layers + if ((plcheck && src.health >= 0)) + if ((src.paralysis <= 0 || src.weakened <= 0)) + src.toxloss += plcheck + else + src.toxloss += plcheck + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + if ((oxcheck && src.health >= 0)) + if ((src.paralysis <= 0 || src.weakened <= 0)) + src.oxyloss += oxcheck + else + src.oxyloss += oxcheck + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + else + if (src.health >= 0) + if (src.oxyloss >= 10) + var/amount = max(0.15, 1) + src.oxyloss -= amount + else + src.oxyloss = 0 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + if (src.health <= -100.0) + death() + else + if ((src.sleeping || src.health < 0)) + if (prob(1)) + if (src.health <= 20) + spawn( 0 ) + emote("gasp") + return + else + spawn( 0 ) + emote("snore") + return + if (src.health < 0) + if (src.rejuv <= 0) + src.oxyloss++ + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + src.stat = 1 + if (src.paralysis < 5) + src.paralysis = 5 + else + if (src.resting) + if (src.weakened < 5) + src.weakened = 5 + else + if (src.health < 20) + if (prob(5)) + if (prob(1)) + if (src.health <= 20) + spawn( 0 ) + emote("gasp") + return + src.stat = 1 + if (src.paralysis < 2) + src.paralysis = 2 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + if (src.rejuv > 0) + src.rejuv-- + if (src.r_epil > 0) + src.r_epil-- + if (src.antitoxs > 0) + src.r_epil -= 4 + if (src.r_ch_cou > 0) + src.r_ch_cou-- + if (src.antitoxs > 0) + src.r_ch_cou -= 4 + if (src.r_Tourette > 0) + src.r_Tourette-- + if (src.antitoxs > 0) + src.r_Tourette -= 4 + if (src.antitoxs > 0) + src.antitoxs-- + if (src.plasma > 0) + src.antitoxs -= 4 + if (src.plasma > 0) + src.plasma-- + src.blinded = null + if (src.drowsyness > 0) + src.drowsyness-- + if (src.paralysis > 1) + src.drowsyness -= 0.5 + else + if (src.weakened > 1) + src.drowsyness -= 0.25 + src.eye_blurry = max(2, src.eye_blurry) + if (prob(5)) + src.sleeping = 1 + src.paralysis = 5 + if ((src.health > -10.0 && src.drowsyness > 1200)) + if (src.antitoxs < 1) + src.toxloss += plcheck + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + plcheck = 1 + var/mental_danger = 0 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + if (((src.r_epil > 0 && !( src.disabilities & 2 )) || (src.r_Tourette > 0 && !( src.disabilities & 8 )))) + src.stuttering = max(2, src.drowsyness) + mental_danger = 1 + src.drowsyness = max(2, src.drowsyness) + if (!( src.paralysis )) + if (prob(5)) + src << "\red You have a seizure!" + src.paralysis = 10 + else + if (prob(5)) + spawn( 0 ) + emote("twitch") + return + src.stunned = 10 + else + if (prob(30)) + spawn( 0 ) + emote("drool") + return + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + if (src.health > -10.0) + var/threshold = 60 + if (mental_danger) + threshold = 30 + if (src.r_ch_cou > 3600) + if (src.antitoxs < 1) + src.toxloss += 1 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + plcheck = 1 + if (prob(15)) + spawn( 0 ) + emote("twitch") + src.stunned = 2 + return + if (src.r_epil > threshold * 60) + if (src.antitoxs < 1) + src.toxloss += 1 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + plcheck = 1 + if (prob(15)) + spawn( 0 ) + emote("twitch") + src.stunned = 2 + return + if (src.r_Tourette > threshold * 60) + if (src.antitoxs < 1) + src.toxloss += 1 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + plcheck = 1 + if (prob(15)) + spawn( 0 ) + emote("twitch") + src.stunned = 2 + return + if (src.antitoxs > 7200) + src.toxloss += 1 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + plcheck = 1 + if (prob(15)) + spawn( 0 ) + emote("drool") + return + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + if (src.health > -50.0) + if (src.plasma > 0) + if (src.antitoxs < 1) + src.toxloss += 1 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + plcheck = 1 + if (prob(15)) + spawn( 0 ) + emote("moan") + return + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + if (src.stat != 2) + if (src.paralysis + src.stunned + src.weakened > 0) + if (src.stunned > 0) + src.stunned-- + src.stat = 0 + if (src.weakened > 0) + src.weakened-- + src.lying = 1 + src.stat = 0 + if (src.paralysis > 0) + src.paralysis-- + src.blinded = 1 + src.lying = 1 + src.stat = 1 + src.canmove = 0 + var/h = src.hand + src.hand = 0 + drop_item() + src.hand = 1 + drop_item() + src.hand = h + else + src.canmove = 1 + src.lying = 0 + src.stat = 0 + else + src.lying = 1 + src.blinded = 1 + src.stat = 2 + src.canmove = 0 + if (src.stuttering > 0) + src.stuttering-- + if (src.eye_blind > 0) + src.eye_blind-- + src.blinded = 1 + if (src.ear_deaf > 0) + src.ear_deaf-- + else + if (src.ear_damage < 25) + src.ear_damage -= 0.05 + if (istype(src.ears, /obj/item/weapon/clothing/ears/earmuffs)) + src.ear_damage -= 0.15 + src.ear_damage = max(src.ear_damage, 0) + if (src.buckled) + src.lying = 0 + src.density = !( src.lying ) + src.pixel_y = 0 + src.pixel_x = 0 + var/add_weight = 0 + if (istype(src.l_hand, /obj/item/weapon/grab)) + add_weight += 1250000.0 + if (istype(src.r_hand, /obj/item/weapon/grab)) + add_weight += 1250000.0 + if (locate(/obj/item/weapon/grab, src.grabbed_by)) + var/a_grabs = 0 + for(var/obj/item/weapon/grab/G in src.grabbed_by) + G.process() + if (G) + if (G.state > 1) + a_grabs++ + if ((G.state > 2 && src.loc == G.assailant.loc)) + src.density = 0 + src.lying = 0 + switch(G.assailant.dir) + if(1.0) + src.pixel_y = 8 + if(2.0) + src.pixel_y = -8.0 + if(4.0) + src.pixel_x = 8 + if(8.0) + src.pixel_x = -8.0 + + //Foreach goto(2918) + src.weight = ((src.grabbed_by.len - a_grabs) / 2 + 1) * 1250000.0 + (a_grabs * 2500000.0) + else + if (src.lying) + src.weight = add_weight + 2500000.0 + else + src.weight = add_weight + 1250000.0 + if ((src.sdisabilities & 1 || istype(src.glasses, /obj/item/weapon/clothing/glasses/blindfold))) + src.blinded = 1 + if ((src.sdisabilities & 4 || istype(src.ears, /obj/item/weapon/clothing/ears/earmuffs))) + src.ear_deaf = 1 + if (src.eye_blurry > 0) + src.eye_blurry-- + src.eye_blurry = max(0, src.eye_blurry) + if (src.client) + src.client.screen -= main_hud.g_dither + if (istype(src.wear_mask, /obj/item/weapon/clothing/mask/gasmask)) + src.client.screen += main_hud.g_dither + if (istype(src.glasses, /obj/item/weapon/clothing/glasses/meson)) + src.sight |= SEE_TURFS + src.see_invisible = 0 + else + if (istype(src.glasses, /obj/item/weapon/clothing/glasses/thermal)) + src.sight |= SEE_TURFS + src.sight |= SEE_MOBS + src.see_invisible = 2 + else + src.sight &= 65519 + src.sight &= 65531 + src.see_invisible = 0 + if (src.mach) + if (src.machine) + src.mach.icon_state = "mach1" + else + src.mach.icon_state = "blank" + if (src.sleep) + src.sleep.icon_state = text("sleep[]", src.sleeping) + if (src.rest) + src.rest.icon_state = text("rest[]", src.resting) + if (src.healths) + if (src.stat < 2) + if (src.health >= 100) + src.healths.icon_state = "health0" + else + if (src.health >= 75) + src.healths.icon_state = "health1" + else + if (src.health >= 50) + src.healths.icon_state = "health2" + else + if (src.health > 20) + src.healths.icon_state = "health3" + else + src.healths.icon_state = "health4" + else + src.healths.icon_state = "health5" + if (src.pullin) + if (src.pulling) + src.pullin.icon_state = "pull1" + else + src.pullin.icon_state = "pull0" + if (src.toxin) + if (plcheck) + src.toxin.icon_state = "toxin1" + else + src.toxin.icon_state = "toxin0" + if (src.oxygen) + if (oxcheck) + src.oxygen.icon_state = "oxy1" + else + src.oxygen.icon_state = "oxy0" + src.client.screen -= src.hud_used.blurry + src.client.screen -= src.hud_used.vimpaired + if ((src.blind && src.stat != 2)) + if (src.blinded) + src.blind.layer = 18 + else + src.blind.layer = 0 + if ((src.disabilities & 1 && !( istype(src.glasses, /obj/item/weapon/clothing/glasses/regular) ))) + src.client.screen -= src.hud_used.vimpaired + src.client.screen += src.hud_used.vimpaired + else + src.client.screen -= src.hud_used.vimpaired + if (src.eye_blurry) + src.client.screen -= src.hud_used.blurry + src.client.screen += src.hud_used.blurry + else + src.client.screen -= src.hud_used.blurry + if (src.stat != 2) + if (src.machine) + if (!( src.machine.check_eye(src) )) + src.reset_view(null) + else + if(!client.adminobs) + reset_view(null) + if (src.primary) + src.primary.cleanup() + src.UpdateClothing() + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + return + +/mob/human/Stat() + + ..() + statpanel("Status") + + + //stat(null, "([x], [y], [z])") + + stat(null, text("Intent: []", src.a_intent)) + stat(null, text("Move Mode: []", src.m_intent)) + + if (src.client.statpanel == "Status") + if (ticker) + var/timel = ticker.timeleft + stat(null, text("ETA-[]:[][]", timel / 600 % 60, timel / 100 % 6, timel / 10 % 10)) + if (src.internal) + if (!( src.internal.gas )) + //src.internal = null + del(src.internal) + else + stat(null, text("Internal Atmosphere: []", src.internal)) + stat(null, text("Internal Oxygen: []", src.internal.gas.oxygen)) + stat(null, text("Internal Plasma: []", src.internal.gas.plasma)) + + + return + +/mob/human/las_act(flag, A as obj) + + var/shielded = 0 + for(var/obj/item/weapon/shield/S in src) + if (S.active) + if (flag == "bullet") + return + shielded = 1 + S.active = 0 + S.icon_state = "shield0" + //Foreach goto(22) + for(var/obj/item/weapon/cloaking_device/S in src) + if (S.active) + shielded = 1 + S.active = 0 + S.icon_state = "shield0" + //Foreach goto(99) + if ((shielded && flag != "bullet")) + if (!( flag )) + src << "\blue Ohhh that shield isn't going to help here!" + src.paralysis = 120 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + if (locate(/obj/item/weapon/grab, src)) + var/mob/safe = null + if (istype(src.l_hand, /obj/item/weapon/grab)) + var/obj/item/weapon/grab/G = src.l_hand + if ((G.state == 3 && get_dir(src, A) == src.dir)) + safe = G.affecting + if (istype(src.r_hand, /obj/item/weapon/grab)) + var/obj/item/weapon.grab/G = src.r_hand + if ((G.state == 3 && get_dir(src, A) == src.dir)) + safe = G.affecting + if (safe) + return safe.las_act(flag, A) + if (flag == "bullet") + var/d = 51 + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit/armor)) + if (prob(70)) + show_message("\red Your armor absorbs the hit!", 4) + return + else + if (prob(40)) + show_message("\red Your armor only softens the hit!", 4) + if (prob(20)) + d = d / 2 + d = d / 4 + else + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit/swat_suit)) + if (prob(90)) + show_message("\red Your armor absorbs the blow!", 4) + return + else + if (prob(90)) + show_message("\red Your armor only softens the blow!", 4) + if (prob(60)) + d = d / 2 + d = d / 5 + if (src.stat != 2) + if (istype(src.organs["chest"], /obj/item/weapon/organ/external)) + var/obj/item/weapon/organ/external/temp = src.organs["chest"] + temp.take_damage(d, 0) + src.UpdateDamageIcon() + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + if (prob(50)) + src.weakened = 5 + return + else + if (flag) + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit/armor)) + if (prob(5)) + show_message("\red Your armor absorbs the hit!", 4) + return + else + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit/swat_suit)) + if (prob(70)) + show_message("\red Your armor absorbs the hit!", 4) + return + if (prob(75)) + src.stunned = 10 + else + src.weakened = 10 + if (src.stuttering < 10) + src.stuttering = 10 + else + var/d = 20 + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit/armor)) + if (prob(40)) + show_message("\red Your armor absorbs the hit!", 4) + return + else + if (prob(40)) + show_message("\red Your armor only softens the hit!", 4) + if (prob(20)) + d = d / 2 + d = d / 2 + else + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit/swat_suit)) + if (prob(70)) + show_message("\red Your armor absorbs the blow!", 4) + return + else + if (prob(90)) + show_message("\red Your armor only softens the blow!", 4) + if (prob(60)) + d = d / 2 + d = d / 2 + if (src.stat != 2) + if (istype(src.organs["chest"], /obj/item/weapon/organ/external)) + var/obj/item/weapon/organ/external/temp = src.organs["chest"] + temp.take_damage(d, 0) + src.UpdateDamageIcon() + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + if (prob(25)) + src.stunned = 1 + return + +/mob/human/say(message as text) + + if(config.logsay) world.log << "SAY: [src.name]/[src.key] : [message]" + var/alt_name + if (src.muted) + return + + message = cleanstring(message) + + if ((src.name != src.rname && src.wear_id)) + alt_name = text(" (as [])", src.wear_id.registered) + if (src.stat == 2) + for(var/mob/M in world) + if (M.stat == 2) + M << text("[][] []: []", src.rname, alt_name, (src.stat > 1 ? "\[dead \]" : ""), message) + //Foreach goto(69) + return + if ((copytext(message, 1, 2) == "*" && !( src.stat ))) + src.emote(copytext(message, 2, length(message) + 1)) + return + message = copytext(message, 1, 256) + if (src.sdisabilities & 2) + return + if (src.stat >= 1) + return + if ((!( message ) || istype(src.wear_mask, /obj/item/weapon/clothing/mask/muzzle))) + return + if (src.stat < 2) + var/list/L = list( ) + var/pre = copytext(message, 1, 4) + var/italics = 0 + var/obj_range = null + if (pre == "\[r\]") + message = copytext(message, 4, length(message) + 1) + if (src.r_hand) + src.r_hand.talk_into(usr, message) + L += hearers(1, null) + obj_range = 1 + italics = 1 + else + if (pre == "\[h\]") + message = copytext(message, 4, length(message) + 1) + if (src.w_radio) + src.w_radio.talk_into(usr, message) + L += hearers(1, null) + obj_range = 1 + italics = 1 + else + if (pre == "\[l\]") + message = copytext(message, 4, length(message) + 1) + if (src.l_hand) + src.l_hand.talk_into(usr, message) + L += hearers(1, null) + obj_range = 1 + italics = 1 + else + if (pre == "\[w\]") + message = copytext(message, 4, length(message) + 1) + L += hearers(1, null) + obj_range = 1 + italics = 1 + else + if (pre == "\[i\]") + message = copytext(message, 4, length(message) + 1) + for(var/obj/item/weapon/radio/intercom/I in view(1, null)) + I.talk_into(usr, message) + //Foreach goto(626) + L += hearers(1, null) + obj_range = 1 + italics = 1 + else + L += hearers(null, null) + pre = null + L -= src + L += src + var/turf/T = src.loc + if (locate(/obj/move, T)) + T = locate(/obj/move, T) + message = html_encode(message) + if (src.stuttering) + message = stutter(message) + if (italics) + message = text("[]", message) + if (((src.oxygen && src.oxygen.icon_state == "oxy0") || (!( (istype(T, /turf) || istype(T, /obj/move)) ) || T.oxygen > 0))) + for(var/mob/M in L) + if (istype(M, src.type)) + M.show_message(text("[][]: []", src.rname, alt_name, message), 2) + else + M.show_message(text("The human: []", stars(message)), 2) + //Foreach goto(864) + for(var/obj/O in view(obj_range, null)) + spawn( 0 ) + if (O) + O.hear_talk(usr, message) + return + //Foreach goto(948) + for(var/mob/M in world) + if (M.stat > 1) + M << text("[][] []: []", src.rname, alt_name, (src.stat > 1 ? "\[dead \]" : ""), message) + //Foreach goto(1005) + return + +/mob/human/UpdateClothing() + + ..() + if (src.monkeyizing) + return + if (!( src.w_uniform )) + var/obj/item/weapon/W = src.r_store + if (W) + u_equip(W) + if (src.client) + src.client.screen -= W + if (W) + W.loc = src.loc + W.dropped(src) + W.layer = initial(W.layer) + W = src.l_store + if (W) + u_equip(W) + if (src.client) + src.client.screen -= W + if (W) + W.loc = src.loc + W.dropped(src) + W.layer = initial(W.layer) + W = src.wear_id + if (W) + u_equip(W) + if (src.client) + src.client.screen -= W + if (W) + W.loc = src.loc + W.dropped(src) + W.layer = initial(W.layer) + W = src.belt + if (W) + u_equip(W) + if (src.client) + src.client.screen -= W + if (W) + W.loc = src.loc + W.dropped(src) + W.layer = initial(W.layer) + //for(var/i in src.overlays) + // src.overlays -= i + src.overlays = null + //Foreach goto(351) + //for(var/i in src.zone_sel.overlays) + // src.zone_sel.overlays -= i + //Foreach goto(385) + + //*****RM + if(src.zone_sel) + src.zone_sel.overlays = null + src.zone_sel.overlays += src.body_standing + src.zone_sel.overlays += image("icon" = 'zone_sel.dmi', "icon_state" = text("[]", src.zone_sel.selecting)) + + if (src.lying) + src.icon = src.lying_icon + if (src.face2) + src.overlays += src.face2 + src.overlays += src.body_lying + else + src.icon = src.stand_icon + if (src.face) + src.overlays += src.face + src.overlays += src.body_standing + if (src.w_uniform) + if (istype(src.w_uniform, /obj/item/weapon/clothing/under)) + + + var/t1 = src.w_uniform.color + + if (!( t1 )) + t1 = src.icon_state + src.overlays += image("icon" = 'uniforms.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER) + + + src.w_uniform.screen_loc = "2,2" + if (src.wear_id) + src.overlays += image("icon" = 'mob.dmi', "icon_state" = text("id[]", (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER) + if (src.client) + src.client.screen -= src.hud_used.other + src.client.screen -= src.hud_used.intents + src.client.screen -= src.hud_used.mov_int + if ((src.client && src.other)) + src.client.screen += src.hud_used.other + if (src.gloves) + var/t1 = src.gloves.s_istate + if (!( t1 )) + t1 = src.gloves.icon_state + src.overlays += image("icon" = 'mob.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER) + src.gloves.screen_loc = "4,2" + if (src.glasses) + var/t1 = src.glasses.s_istate + if (!( t1 )) + t1 = src.glasses.icon_state + src.overlays += image("icon" = 'mob.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER) + src.glasses.screen_loc = "6,2" + if (src.ears) + var/t1 = src.ears.s_istate + if (!( t1 )) + t1 = src.ears.icon_state + src.overlays += image("icon" = 'mob.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER) + src.ears.screen_loc = "9,2" + if (src.shoes) + var/t1 = src.shoes.s_istate + if (!( t1 )) + t1 = src.shoes.icon_state + src.overlays += image("icon" = 'mob.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER) + src.shoes.screen_loc = "5,2" + else + if (src.gloves) + var/t1 = src.gloves.s_istate + if (!( t1 )) + t1 = src.gloves.icon_state + src.overlays += image("icon" = 'mob.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER) + src.gloves.screen_loc = null + if (src.glasses) + var/t1 = src.glasses.s_istate + if (!( t1 )) + t1 = src.glasses.icon_state + src.overlays += image("icon" = 'mob.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER) + src.glasses.screen_loc = null + if (src.ears) + var/t1 = src.ears.s_istate + if (!( t1 )) + t1 = src.ears.icon_state + src.overlays += image("icon" = 'mob.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER) + src.ears.screen_loc = null + if (src.shoes) + var/t1 = src.shoes.s_istate + if (!( t1 )) + t1 = src.shoes.icon_state + src.overlays += image("icon" = 'mob.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER) + src.shoes.screen_loc = null + if (src.w_radio) + if (!( src.lying )) + src.overlays += image("icon" = 'mob.dmi', "icon_state" = "headset", "layer" = MOB_LAYER) + else + src.overlays += image("icon" = 'mob.dmi', "icon_state" = "headset2", "layer" = MOB_LAYER) + src.w_radio.screen_loc = "3,1" + if (src.wear_mask) + if (istype(src.wear_mask, /obj/item/weapon/clothing/mask)) + var/t1 = src.wear_mask.s_istate + if (!( t1 )) + t1 = src.wear_mask.icon_state + src.overlays += image("icon" = 'mob.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER) + src.wear_mask.screen_loc = "2,3" + if (src.client) + if (src.i_select) + if (src.intent) + src.client.screen += src.hud_used.intents + src.i_select.screen_loc = src.intent + else + src.i_select.screen_loc = null + if (src.m_select) + if (src.m_int) + src.client.screen += src.hud_used.mov_int + src.m_select.screen_loc = src.m_int + else + src.m_select.screen_loc = null + if (src.wear_suit) + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit)) + var/t1 = src.wear_suit.s_istate + if (!( t1 )) + t1 = src.wear_suit.icon_state + src.overlays += image("icon" = 'mob.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER) + src.wear_suit.screen_loc = "2,1" + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit/straight_jacket)) + if (src.handcuffed) + src.handcuffed.loc = src.loc + src.handcuffed.layer = initial(src.handcuffed.layer) + src.handcuffed = null + if ((src.l_hand || src.r_hand)) + var/h = src.hand + src.hand = 1 + drop_item() + src.hand = 0 + drop_item() + src.hand = h + if ((src.client && src.other)) + if (src.head) + var/t1 = src.head.s_istate + if (!( t1 )) + t1 = src.head.icon_state + src.overlays += image("icon" = 'mob.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER) + src.head.screen_loc = "7,2" + if (src.belt) + var/t1 = src.belt.s_istate + if (!( t1 )) + t1 = src.belt.icon_state + src.overlays += image("icon" = 'belt.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER) + src.belt.screen_loc = "8,2" + else + if (src.head) + var/t1 = src.head.s_istate + if (!( t1 )) + t1 = src.head.icon_state + src.overlays += image("icon" = 'mob.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER) + src.head.screen_loc = null + if (src.belt) + var/t1 = src.belt.s_istate + if (!( t1 )) + t1 = src.belt.icon_state + src.overlays += image("icon" = 'belt.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER) + src.belt.screen_loc = null + if (src.wear_id) + if (((src.wear_mask && !( src.wear_mask.see_face )) || (src.head && !( src.head.see_face )))) + src.name = (src.wear_id.registered ? src.wear_id.registered : "Unknown") + else + if (src.wear_id.registered != src.rname) + src.name = text("[] (as [])", src.rname, src.wear_id.registered) + else + src.name = text("[]", src.rname) + src.wear_id.screen_loc = "1,1" + else + src.name = text("[]", src.rname) + if (src.l_store) + src.l_store.screen_loc = "4,1" + if (src.r_store) + src.r_store.screen_loc = "5,1" + if (src.r_hand) + + var/t1 = src.r_hand.s_istate + if (!( t1 )) + t1 = src.r_hand.icon_state + src.overlays += image("icon" = 'r_items.dmi', "icon_state" = t1, "layer" = MOB_LAYER) + + + + src.r_hand.screen_loc = "1,2" + if (src.l_hand) + var/t1 = src.l_hand.s_istate + if (!( t1 )) + t1 = src.l_hand.icon_state + src.overlays += image("icon" = 'l_items.dmi', "icon_state" = t1, "layer" = MOB_LAYER) + + + + src.l_hand.screen_loc = "3,2" + if (src.back) + if (istype(src.back, /obj/item/weapon/radio/electropack)) + if (!( src.lying )) + src.overlays += image("icon" = 'mob.dmi', "icon_state" = "backe", "layer" = MOB_LAYER) + else + src.overlays += image("icon" = 'mob.dmi', "icon_state" = "backe2", "layer" = MOB_LAYER) + else + if (!( src.lying )) + src.overlays += image("icon" = 'mob.dmi', "icon_state" = "back", "layer" = MOB_LAYER) + else + src.overlays += image("icon" = 'mob.dmi', "icon_state" = "back2", "layer" = MOB_LAYER) + src.back.screen_loc = "3,3" + if (src.handcuffed) + src.pulling = null + if (!( src.lying )) + src.overlays += image("icon" = 'mob.dmi', "icon_state" = "handcuff1", "layer" = MOB_LAYER) + else + src.overlays += image("icon" = 'mob.dmi', "icon_state" = "handcuff2", "layer" = MOB_LAYER) + if (src.client) + src.client.screen -= src.contents + src.client.screen += src.contents + var/shielded = 0 + for(var/obj/item/weapon/shield/S in src) + if (S.active) + shielded = 1 + else + //Foreach continue //goto(2917) + for(var/obj/item/weapon/cloaking_device/S in src) + if (S.active) + shielded = 2 + else + //Foreach continue //goto(2969) + if (shielded == 2) + src.invisibility = 2 + else + src.invisibility = 0 + if (shielded) + src.overlays += image("icon" = 'mob.dmi', "icon_state" = "shield", "layer" = MOB_LAYER) + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + spawn( 0 ) + src.show_inv(M) + return + //Foreach goto(3088) + src.last_b_state = src.stat + + return + +/mob/human/hand_p(mob/M as mob) + + if (M.a_intent == "hurt") + if (istype(M.wear_mask, /obj/item/weapon/clothing/mask/muzzle)) + return + if (((prob(60) || (ticker && ticker.mode == "monkey")) && src.health > 0)) + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit/sp_suit)) + if (prob(95)) + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red The monkey has attempted to bite []!", src), 1) + //Foreach goto(101) + return + else + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit/bio_suit)) + if (prob(90)) + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red The monkey has attempted to bite []!", src), 1) + //Foreach goto(167) + return + else + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit/armor)) + if (prob(60)) + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red The monkey has attempted to bite []!", src), 1) + //Foreach goto(233) + return + else + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit/swat_suit)) + if (prob(99)) + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red The monkey has attempted to bite []!", src), 1) + //Foreach goto(299) + return + for(var/mob/O in viewers(src, null)) + if ((O.client && !( O.blinded ))) + O.show_message(text("\red The monkey has bit []!", src), 1) + //Foreach goto(344) + var/damage = rand(1, 3) + var/dam_zone = pick("chest", "l_hand", "r_hand", "l_leg", "r_leg", "diaper") + if (istype(src.organs[text("[]", dam_zone)], /obj/item/weapon/organ/external)) + var/obj/item/weapon/organ/external/temp = src.organs[text("[]", dam_zone)] + if (temp.take_damage(damage, 0)) + src.UpdateDamageIcon() + else + src.UpdateDamage() + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + if ((ticker && ticker.mode == "monkey")) + src.monkeyize() + else + for(var/mob/O in viewers(src, null)) + if ((O.client && !( O.blinded ))) + O.show_message(text("\red The monkey has attempted to bite []!", src), 1) + //Foreach goto(580) + return + +/mob/human/attack_paw(mob/M as mob) + + if (M.a_intent == "help") + src.sleeping = 0 + src.resting = 0 + for(var/mob/O in viewers(src, null)) + O.show_message(text("\blue The monkey shakes [] trying to wake him up!", src), 1) + //Foreach goto(47) + else + if (istype(src.wear_mask, /obj/item/weapon/clothing/mask/muzzle)) + return + if (((prob(60) || (ticker && ticker.mode == "monkey")) && src.health > 0)) + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit/sp_suit)) + if (prob(95)) + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red The monkey has attempted to bite []!", src), 1) + //Foreach goto(159) + return + else + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit/bio_suit)) + if (prob(90)) + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red The monkey has attempted to bite []!", src), 1) + //Foreach goto(225) + return + else + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit/armor)) + if (prob(60)) + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red The monkey has attempted to bite []!", src), 1) + //Foreach goto(291) + return + else + if (istype(src.wear_suit, /obj/item/weapon/clothing/suit/swat_suit)) + if (prob(99)) + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red The monkey has attempted to bite []!", src), 1) + //Foreach goto(357) + return + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red The monkey has bit []!", src), 1) + //Foreach goto(402) + var/damage = rand(1, 3) + var/dam_zone = pick("chest", "l_hand", "r_hand", "l_leg", "r_leg", "diaper") + if (istype(src.organs[text("[]", dam_zone)], /obj/item/weapon/organ/external)) + var/obj/item/weapon/organ/external/temp = src.organs[text("[]", dam_zone)] + if (temp.take_damage(damage, 0)) + src.UpdateDamageIcon() + else + src.UpdateDamage() + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + if ((ticker && ticker.mode == "monkey")) + src.monkeyize() + else + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red The monkey has attempted to bite []!", src), 1) + //Foreach goto(623) + return + +/mob/human/attack_hand(mob/human/M as mob) + + if (M.a_intent == "help") + if (src.health > 0) + if (src.w_uniform) + src.w_uniform.add_fingerprint(M) + src.sleeping = 0 + src.resting = 0 + for(var/mob/O in viewers(src, null)) + O.show_message(text("\blue [] shakes [] trying to wake [] up!", M, src, src), 1) + //Foreach goto(80) + else + if (M.health >= -75.0) + if (((M.head && M.head.flags & 4) || ((M.wear_mask && !( M.wear_mask.flags & 32 )) || ((src.head && src.head.flags & 4) || (src.wear_mask && !( src.wear_mask.flags & 32 )))))) + M << "\blue Remove that mask!" + return + var/obj/equip_e/human/O = new /obj/equip_e/human( ) + O.source = M + O.target = src + O.s_loc = M.loc + O.t_loc = src.loc + O.place = "CPR" + src.requests += O + spawn( 0 ) + O.process() + return + else + if (M.a_intent == "grab") + if (M == src) + return + if (src.w_uniform) + src.w_uniform.add_fingerprint(M) + var/obj/item/weapon/grab/G = new /obj/item/weapon/grab( M ) + G.assailant = M + if (M.hand) + M.l_hand = G + else + M.r_hand = G + G.layer = 20 + G.affecting = src + src.grabbed_by += G + G.synch() + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red [] has grabbed [] passively!", M, src), 1) + //Foreach goto(441) + else + if (M.a_intent == "hurt") + if (src.w_uniform) + src.w_uniform.add_fingerprint(M) + var/damage = rand(1, 9) + var/obj/item/weapon/organ/external/affecting = src.organs["chest"] + var/t = M.zone_sel.selecting + if ((t in list( "hair", "eyes", "mouth", "neck" ))) + t = "head" + var/def_zone = ran_zone(t) + if (src.organs[text("[]", def_zone)]) + affecting = src.organs[text("[]", def_zone)] + if ((istype(affecting, /obj/item/weapon/organ/external) && prob(90))) + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red [] has punched []!", M, src), 1) + //Foreach goto(646) + if (def_zone == "head") + if ((((src.head && src.head.brute_protect & 1) || (src.wear_mask && src.wear_mask.brute_protect & 1)) && prob(99))) + if (prob(20)) + affecting.take_damage(damage, 0) + else + src.show_message("\red You have been protected from a hit to the head.") + return + if (damage > 4.9) + if (src.weakened < 10) + src.weakened = rand(10, 15) + for(var/mob/O in viewers(M, null)) + O.show_message(text("\red [] has weakened []!", M, src), 1, "\red You hear someone fall.", 2) + //Foreach goto(820) + affecting.take_damage(damage) + else + if (def_zone == "chest") + if ((((src.wear_suit && src.wear_suit.brute_protect & 2) || (src.w_uniform && src.w_uniform.brute_protect & 2)) && prob(85))) + src.show_message("\red You have been protected from a hit to the chest.") + return + if (damage > 4.9) + if (prob(50)) + if (src.weakened < 5) + src.weakened = 5 + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red [] has knocked down []!", M, src), 1, "\red You hear someone fall.", 2) + //Foreach goto(993) + else + if (src.stunned < 5) + src.stunned = 5 + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red [] has stunned []!", M, src), 1) + //Foreach goto(1063) + src.stat = 1 + affecting.take_damage(damage) + else + if (def_zone == "diaper") + if ((((src.wear_suit && src.wear_suit.brute_protect & 4) || (src.w_uniform && src.w_uniform.brute_protect & 4)) && prob(75))) + src.show_message("\red You have been protected from a hit to the lower chest/diaper.") + return + if (damage > 4.9) + if (prob(50)) + if (src.weakened < 3) + src.weakened = 3 + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red [] has knocked down []!", M, src), 1, "\red You hear someone fall.", 2) + //Foreach goto(1239) + else + if (src.stunned < 3) + src.stunned = 3 + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red [] has stunned []!", M, src), 1) + //Foreach goto(1309) + src.stat = 1 + affecting.take_damage(damage) + else + affecting.take_damage(damage) + + src.UpdateDamageIcon() + + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + else + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red [] has attempted to punch []!", M, src), 1) + //Foreach goto(1419) + return + else + if (!( src.lying )) + if (src.w_uniform) + src.w_uniform.add_fingerprint(M) + var/randn = rand(1, 100) + if (randn <= 25) + src.weakened = 2 + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red [] has pushed down []!", M, src), 1) + //Foreach goto(1529) + else + if (randn <= 60) + src.drop_item() + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red [] has disarmed []!", M, src), 1) + //Foreach goto(1596) + else + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red [] has attempted to disarm []!", M, src), 1) + //Foreach goto(1643) + return + + +// loads the savefile corresponding to the mob's ckey +// if silent=true, report incompatible savefiles +// returns 1 if loaded (or file was incompatible) +// returns 0 if savefile did not exist + +/mob/human/proc/savefile_load(var/silent = 1) + if (fexists(text("players/[].sav", src.ckey))) + var/savefile/F = new /savefile( text("players/[].sav", src.ckey) ) + var/test = null + F["version"] >> test + if (test != savefile_ver) + fdel(text("players/[].sav", src.ckey)) + if(!silent) + alert("Your savefile was incompatible with this version and was deleted.") + return 1 + F["rname"] >> src.rname + F["gender"] >> src.gender + F["age"] >> src.age + F["occupation1"] >> src.occupation1 + F["occupation2"] >> src.occupation2 + F["occupation3"] >> src.occupation3 + F["nr_hair"] >> src.nr_hair + F["ng_hair"] >> src.ng_hair + F["nb_hair"] >> src.nb_hair + F["ns_tone"] >> src.ns_tone + F["h_style"] >> src.h_style + F["h_style_r"] >> src.h_style_r + F["r_eyes"] >> src.r_eyes + F["g_eyes"] >> src.g_eyes + F["b_eyes"] >> src.b_eyes + F["b_type"] >> src.b_type + F["need_gl"] >> src.need_gl + F["be_epil"] >> src.be_epil + F["be_tur"] >> src.be_tur + F["be_cough"] >> src.be_cough + F["be_stut"] >> src.be_stut + return 1 + else + return 0 + +/mob/human/Topic(href, href_list) + + if ((src == usr && !( src.start ))) + if (findtext(href, "occ", 1, null)) + if (findtext(href, "cancel", 1, null)) + usr << browse(null, text("window=\ref[]occupation", src)) + return + if (!( findtext(href, "job", 1, null) )) + src.SetChoices(text2num(href_list["occ"])) + else + src.SetJob(arglist(list("occ" = text2num(href_list["occ"]), "job" = href_list["job"]))) + else if (findtext(href, "rname", 1, null)) + var/t1 = href_list["rname"] + if (t1 == "input") + t1 = input("Please select a name:", "Character Generation", null, null) as text + if ((!( src.start ) && t1)) + if (length(t1) >= 26) + t1 = copytext(t1, 1, 26) + t1 = dd_replacetext(t1, ">", "'") + src.rname = t1 + else if (findtext(href, "age", 1, null)) + var/t1 = href_list["age"] + if (t1 == "input") + t1 = input("Please select type in age: 20-45", "Character Generation", null, null) as num + if ((!( src.start ) && t1)) + src.age = max(min(round(text2num(t1)), 45), 20) + else if (findtext(href, "b_type", 1, null)) + var/t1 = href_list["b_type"] + if (t1 == "input") + t1 = input("Please select a blood type:", "Character Generation", null, null) as null|anything in list( "A+", "A-", "B+", "B-", "AB+", "AB-", "O+", "O-" ) + if ((!( src.start ) && t1)) + src.b_type = t1 + else if (findtext(href, "nr_hair", 1, null)) + var/t1 = href_list["nr_hair"] + if (t1 == "input") + t1 = input("Please select red hair component: 1-255", "Character Generation", null, null) as text + if ((!( src.start ) && t1)) + src.nr_hair = max(min(round(text2num(t1)), 255), 1) + else if (findtext(href, "ng_hair", 1, null)) + var/t1 = href_list["ng_hair"] + if (t1 == "input") + t1 = input("Please select green hair component: 1-255", "Character Generation", null, null) as text + if ((!( src.start ) && t1)) + src.ng_hair = max(min(round(text2num(t1)), 255), 1) + else if (findtext(href, "nb_hair", 1, null)) + var/t1 = href_list["nb_hair"] + if (t1 == "input") + t1 = input("Please select blue hair component: 1-255", "Character Generation", null, null) as text + if ((!( src.start ) && t1)) + src.nb_hair = max(min(round(text2num(t1)), 255), 1) + else if (findtext(href, "r_eyes", 1, null)) + var/t1 = href_list["r_eyes"] + if (t1 == "input") + t1 = input("Please select red eyes component: 1-255", "Character Generation", null, null) as text + if ((!( src.start ) && t1)) + src.r_eyes = max(min(round(text2num(t1)), 255), 1) + else if (findtext(href, "ns_tone", 1, null)) + var/t1 = href_list["ns_tone"] + if (t1 == "input") + t1 = input("Please select skin tone level: 1-220 (1=albino,35=caucasian, 150=black220='very' black)", "Character Generation", null, null) as text + if ((!( src.start ) && t1)) + src.ns_tone = max(min(round(text2num(t1)), 220), 1) + src.ns_tone = -src.ns_tone + 35 + else if (findtext(href, "g_eyes", 1, null)) + var/t1 = href_list["g_eyes"] + if (t1 == "input") + t1 = input("Please select green eyes component: 1-255", "Character Generation", null, null) as text + if ((!( src.start ) && t1)) + src.g_eyes = max(min(round(text2num(t1)), 255), 1) + else if (findtext(href, "b_eyes", 1, null)) + var/t1 = href_list["b_eyes"] + if (t1 == "input") + t1 = input("Please select blue eyes component: 1-255", "Character Generation", null, null) as text + if ((!( src.start ) && t1)) + src.b_eyes = max(min(round(text2num(t1)), 255), 1) + else if (findtext(href, "h_style", 1, null)) + var/t1 = href_list["h_style"] + if (t1 == "input") + t1 = input("Please select hair style", "Character Generation", null, null) as null|anything in list( "Cut Hair", "Short Hair (M)", "Long Hair (F)", "Bald" ) + if ((!( src.start ) && t1)) + src.h_style = t1 + switch(t1) + if("Short Hair (M)") + src.h_style_r = "hair_a" + if("Long Hair (F)") + src.h_style_r = "hair_b" + if("Cut Hair") + src.h_style_r = "hair_c" + else + src.h_style_r = "bald" + else if (findtext(href, "gender", 1, null)) + if (src.gender == "male") + src.gender = "female" + else + src.gender = "male" + src.stand_icon = new /icon( 'human.dmi', text("[]", src.gender) ) + src.lying_icon = new /icon( 'human.dmi', text("[]-d", src.gender) ) + else if (findtext(href, "n_gl", 1, null)) + src.need_gl = !( src.need_gl ) + else if (findtext(href, "b_ep", 1, null)) + src.be_epil = !( src.be_epil ) + else if (findtext(href, "b_tur", 1, null)) + src.be_tur = !( src.be_tur ) + else if (findtext(href, "b_co", 1, null)) + src.be_cough = !( src.be_cough ) + else if (findtext(href, "b_stut", 1, null)) + src.be_stut = !( src.be_stut ) + else if (findtext(href, "save", 1, null)) + var/savefile/F = new /savefile( text("players/[].sav", src.ckey) ) + F["version"] << savefile_ver + F["rname"] << src.rname + F["gender"] << src.gender + F["age"] << src.age + F["occupation1"] << src.occupation1 + F["occupation2"] << src.occupation2 + F["occupation3"] << src.occupation3 + F["nr_hair"] << src.nr_hair + F["ng_hair"] << src.ng_hair + F["nb_hair"] << src.nb_hair + F["ns_tone"] << src.ns_tone + F["h_style"] << src.h_style + F["h_style_r"] << src.h_style_r + F["r_eyes"] << src.r_eyes + F["g_eyes"] << src.g_eyes + F["b_eyes"] << src.b_eyes + F["b_type"] << src.b_type + F["need_gl"] << src.need_gl + F["be_epil"] << src.be_epil + F["be_tur"] << src.be_tur + F["be_cough"] << src.be_cough + F["be_stut"] << src.be_stut + else if (findtext(href, "load", 1, null)) + if (!src.savefile_load(0)) + alert("You do not have a savefile.") + + else if (findtext(href, "reset_all", 1, null)) + + rname = key + gender = MALE + age = 30 + occupation1 = "No Preference" + occupation2 = "No Preference" + occupation3 = "No Preference" + need_gl = 0 + be_epil = 0 + be_cough = 0 + be_tur = 0 + be_stut = 0 + r_hair = 0.0 + g_hair = 0.0 + b_hair = 0.0 + h_style = "Short Hair (M)" + nr_hair = 0.0 + ng_hair = 0.0 + nb_hair = 0.0 + ns_tone = 0.0 + r_eyes = 0.0 + g_eyes = 0.0 + b_eyes = 0.0 + s_tone = 0.0 + b_type = "A+" + + + if(!href_list["priv_msg"]) + src.ShowChoices() + + if (href_list["mach_close"]) + var/t1 = text("window=[]", href_list["mach_close"]) + src.machine = null + src << browse(null, t1) + if ((href_list["item"] && !( usr.stat ) && usr.canmove && !( usr.restrained() ) && get_dist(src, usr) <= 1)) + var/obj/equip_e/human/O = new /obj/equip_e/human( ) + O.source = usr + O.target = src + O.item = usr.equipped() + O.s_loc = usr.loc + O.t_loc = src.loc + O.place = href_list["item"] + src.requests += O + spawn( 0 ) + O.process() + return + ..() + return + +/mob/human/show_inv(mob/user as mob) + + user.machine = src + var/dat = text("
    \n[]\n\tHead(Mask): []\n\t\tHeadset: []\n\tLeft Hand: []\n\tRight Hand: []\n\tGloves: []\n\tEyes: []\n\tEars: []\n\tHead: []\n\tShoes: []\n\tBelt: []\n\tUniform: []\n\t(Exo)Suit: []\n\tBack: [] []\n\tID: []\n\t[]\n\t[]\n\tEmpty Pockets\nClose\n
    ", src.name, src, (src.wear_mask ? text("[]", src.wear_mask) : "Nothing"), src, (src.w_radio ? text("[]", src.w_radio) : "Nothing"), src, (src.l_hand ? text("[]", src.l_hand) : "Nothing"), src, (src.r_hand ? text("[]", src.r_hand) : "Nothing"), src, (src.gloves ? text("[]", src.gloves) : "Nothing"), src, (src.glasses ? text("[]", src.glasses) : "Nothing"), src, (src.ears ? text("[]", src.ears) : "Nothing"), src, (src.head ? text("[]", src.head) : "Nothing"), src, (src.shoes ? text("[]", src.shoes) : "Nothing"), src, (src.belt ? text("[]", src.belt) : "Nothing"), src, (src.w_uniform ? text("[]", src.w_uniform) : "Nothing"), src, (src.wear_suit ? text("[]", src.wear_suit) : "Nothing"), src, (src.back ? text("[]", src.back) : "Nothing"), ((istype(src.wear_mask, /obj/item/weapon/clothing/mask) && istype(src.back, /obj/item/weapon/tank) && !( src.internal )) ? text(" Set Internal", src) : ""), src, (src.wear_id ? text("[]", src.wear_id) : "Nothing"), (src.handcuffed ? text("Handcuffed", src) : text("Not Handcuffed", src)), (src.internal ? text("Remove Internal", src) : ""), src, user, src.name) + user << browse(dat, text("window=mob[];size=300x600", src.name)) + return + +/mob/proc/show_message(msg, type, alt, alt_type) + + if (type) + if ((type & 1 && (src.sdisabilities & 1 || (src.blinded || src.paralysis)))) + if (!( alt )) + return + else + msg = alt + type = alt_type + if ((type & 2 && (src.sdisabilities & 4 || src.ear_deaf))) + if (!( alt )) + return + else + msg = alt + type = alt_type + if ((type & 1 && src.sdisabilities & 1)) + return + src << msg + return + +/mob/proc/findname(msg) + + for(var/mob/M in world) + if (M.rname == text("[]", msg)) + return 1 + //Foreach goto(15) + return 0 + return + +/mob/proc/m_delay() + + return + +/mob/proc/Life() + + return + +/mob/proc/UpdateClothing() + + return + +/mob/proc/death() + + src.timeofdeath = world.time + return ..() + return + +/mob/proc/restrained() + + if (src.handcuffed) + return 1 + return + +/mob/proc/db_click(text, t1) + + var/obj/item/weapon/W = src.equipped() + switch(text) + if("mask") + if (src.wear_mask) + return + if (!( istype(W, /obj/item/weapon/clothing/mask) )) + return + src.u_equip(W) + src.wear_mask = W + if("back") + if ((src.back || !( istype(W, /obj/item/weapon) ))) + return + if (!( W.flags & 1 )) + return + src.u_equip(W) + src.back = W + else + return + +/mob/proc/throw_item() + + var/obj/item/weapon/W = src.equipped() + if (W) + u_equip(W) + if (src.client) + src.client.screen -= W + if (usr.stat) + return + W.loc = src.loc + if (istype(W, /obj/item/weapon/grab)) + W:throw() + else + W.dropped(src) + if (W) + W.layer = initial(W.layer) + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red [] has thrown [].", src, W), 1) + //Foreach goto(133) + W.density = 1 + W.throwing = 1 + W.throwspeed = initial(W.throwspeed) + spawn( 0 ) + W.throwing(src.dir) + return + + //propulsion + if(istype(src.loc, /turf/space)) + src.Move(get_step(src, turn(dir, 180) )) + + // + return + +/mob/proc/swap_hand() + + src.hand = !( src.hand ) + if (!( src.hand )) + src.hands.dir = NORTH + else + src.hands.dir = SOUTH + return + +/mob/proc/drop_item_v() + + if (src.stat == 0) + drop_item() + return + +/mob/proc/throw_item_v() + + if (src.stat == 0) + throw_item() + return + +/mob/proc/drop_item() + + var/obj/item/weapon/W = src.equipped() + if (W) + u_equip(W) + if (src.client) + src.client.screen -= W + if (W) + W.loc = src.loc + W.dropped(src) + if (W) + W.layer = initial(W.layer) + return + +/mob/proc/reset_view(atom/A) + + if (src.client) + if (istype(A, /atom/movable)) + src.client.perspective = EYE_PERSPECTIVE + src.client.eye = A + else + if (isturf(src.loc)) + src.client.eye = src.client.mob + src.client.perspective = MOB_PERSPECTIVE + else + src.client.perspective = EYE_PERSPECTIVE + src.client.eye = src.loc + return + +/mob/proc/who() + set category = "Admin" + + var/total = 0 + usr << "Current Players:" + for(var/mob/M in world) + if (M.client) + total++ + usr << text("\t [] ([]) []", M, M.client, M.health) + //Foreach goto(32) + usr << text("Total Players: []", total) + return + +/mob/proc/list_dna() + set category = "Admin" + + usr << "Registered DNA sequences:" + for(var/M in reg_dna) + usr << text("\t [] = []", M, reg_dna[text("[]", M)]) + //Foreach goto(26) + return + +/mob/proc/equipped() + + if (src.hand) + return src.l_hand + else + return src.r_hand + return + +/mob/proc/show_inv(mob/user as mob) + + user.machine = src + var/dat = text("\n[]
    \n\tHead(Mask): []
    \n\tLeft Hand: []
    \n\tRight Hand: []
    \n\tBack: []
    \n\t[]
    \n\t[]
    \n\t[]
    \n\tEmpty Pockets
    \nClose
    \n
    ", src.name, src, (src.wear_mask ? text("[]", src.wear_mask) : "Nothing"), src, (src.l_hand ? text("[]", src.l_hand) : "Nothing"), src, (src.r_hand ? text("[]", src.r_hand) : "Nothing"), src, (src.back ? text("[]", src.back) : "Nothing"), ((istype(src.wear_mask, /obj/item/weapon/clothing/mask) && istype(src.back, /obj/item/weapon/tank) && !( src.internal )) ? text(" Set Internal", src) : ""), (src.internal ? text("Remove Internal", src) : ""), (src.handcuffed ? text("Handcuffed", src) : text("Not Handcuffed", src)), src, user, src.name) + user << browse(dat, text("window=mob[]", src.name)) + return + +/mob/proc/u_equip(W as obj) + + if (W == src.r_hand) + src.r_hand = null + else + if (W == src.l_hand) + src.l_hand = null + else + if (W == src.handcuffed) + src.handcuffed = null + else + if (W == src.back) + src.back = null + else + if (W == src.wear_mask) + src.wear_mask = null + return + +/mob/proc/toggle_ooc() + set category = "Admin" + + ooc_allowed = !( ooc_allowed ) + if (ooc_allowed) + world << "The OOC channel has been globally enabled!" + else + world << "The OOC channel has been globally disabled!" + if(config.logadmin) world.log << text("ADMIN: [] toggled OOC channel [].", src.key,(ooc_allowed?"On":"Off")) + return + +/mob/proc/toggle_abandon() + set category = "Admin" + + abandon_allowed = !( abandon_allowed ) + if (abandon_allowed) + world << "You may now abandon mob." + else + world << "Live or Die Mode Activated" + if(config.logadmin) world.log << text("ADMIN: [] toggled abandon mob to [].", src.key,(abandon_allowed?"On":"Off")) + world.update_stat() + return + +/mob/proc/toggle_enter() + set category = "Admin" + + enter_allowed = !( enter_allowed ) + if (enter_allowed) + world << "You may enter the game." + else + world << "You may no longer enter the game." + if(config.logadmin) world.log << text("ADMIN: [] toggled enter game to [].", src.key,(enter_allowed?"On":"Off")) + world.update_stat() + return + +/mob/proc/toggle_shuttle() + set category = "Admin" + + shuttle_frozen = !( shuttle_frozen ) + if (shuttle_frozen) + world << "The shuttle count is now FROZEN!" + else + world << "The shuttle has been thawed." + if(config.logadmin) world.log << text("ADMIN: [] toggled shuttle count to [].", src.key,(shuttle_frozen?"Frozen":"Counting")) + return + +/mob/proc/show_ctf() + set category = "Admin" + + if (ticker) + usr << "Too late... The game has already started!" + return + else + if (!( ctf )) + ctf = new /obj/ctf_assist( ) + ctf.show_screen(usr) + return + +/mob/proc/delay_start() + set category = "Admin" + + if (ticker) + usr << "Too late... The game has already started!" + return + else + if (alert(usr, "Would you like to delay game start?", "Delay Start", "Yes", "No", null) == "Yes") + going = null + world << text("The game start has been delayed by [] (Administrator to SS13)", usr.key) + usr << alert("Don't forgot to revoke the delay by selecting No!", null, null, null, null, null) + if(config.logadmin) world.log << text("ADMIN: [] delayed game start.", src.key) + else + world << text("The game will now start thanks to [] (Administrator to SS13)", usr.key) + if(config.logadmin) world.log << text("ADMIN: [] undelayed game start.", src.key) + going = 1 + return + +/mob/proc/worldsize() + set category = "Admin" + + world << "The world contains [world.contents.len] objects." + +/mob/proc/start_now() + set category = "Admin" + + going = 1 + if (!ticker) + ticker = new /datum/control/gameticker( ) + spawn( 0 ) + if(config.logadmin) world.log << "ADMIN: [src.key] used start_now" + ticker.process() + return + data_core = new /obj/datacore( ) + +/mob/proc/mute(mob/M as mob in world) + set category = "Admin" + + M.muted = !( M.muted ) + usr << text("[]'s chat status is now [].", M, (M.muted ? "muted" : "voiced")) + if(config.logadmin) world.log << text("ADMIN: [] [] []/[].", src.key, (M.muted?"muted":"unmuted"), M, M.key) + return + +/mob/proc/change_name(mob/M as mob in world, t as text) + set category = "Admin" + + usr << text("[]'s default name is now [] !", M, t) + if(config.logadmin) world.log << text("ADMIN: [] set player []/[]'s name to [].", src.key,M,M.key,t) + M.rname = t + return + +/mob/proc/show_help(mob/M as mob in world) + set category = "Admin" + + M << browse('help.htm', "window=help") + return + +/mob/proc/changemessage(txt as text) + set category = "Admin" + + world_message = text("[]: []", src.key, txt) + world << text("\blue []", world_message) + return + +/mob/proc/changemode() + set category = "Admin" + + if (ticker) + return + var/temp = input("Please select a mode", "Game Mode", null, null) in list( "secret", "random", "traitor", "nuclear", "meteor", "extended", "monkey", "blob", "sandbox" ) + if(config.logadmin) world.log << text("ADMIN: [] set game mode to [].", src.key, temp) + master_mode = temp + + var/F = file(persistent_file) + + fdel(F) + + F << master_mode + + return + +/mob/proc/boot(mob/M as mob in world, txt as text) + set category = "Admin" + + if ((M && M.client && txt)) + //M.client = null + del(M.client) + + if(config.logadmin) world.log << text("ADMIN: [] booted []/[].", src.key,M,M.key) + return + +/mob/proc/ban(mob/M as mob in world, txt as text) + set category = "Admin" + + if ((M && M.client && txt)) + banned += M.ckey + //M.client = null + del(M.client) + if(config.logadmin) world.log << text("ADMIN: [] banned []/[].", src.key,M,M.key) + return + +/mob/proc/unban() + set category = "Admin" + + var/t = input(usr, "Unban who?", null, null) as null|anything in banned + banned -= t + if(config.logadmin) world.log << text("ADMIN: [] unbanned [].", src.key,t) + return + +/mob/proc/make_gift() + set category = "Admin" + + new /obj/item/weapon/a_gift( src.loc ) + if(config.logadmin) world.log << text("ADMIN: [] made a gift.", src.key) + return + +/mob/proc/make_pill() + set category = "Admin" + + new /obj/item/weapon/m_pill/superpill( src.loc ) + if(config.logadmin) world.log << text("ADMIN: [] made a pill.", src.key) + return + +/mob/proc/make_flag() + set category = "Admin" + + var/color = input("Please select a color", null, null, null) in list( "red", "blue", "green", "yellow", "black", "white", "neutral" ) + var/obj/item/weapon/paper/flag/F = new /obj/item/weapon/paper/flag( src.loc ) + F.icon_state = text("flag_[]", color) + if(config.logadmin) world.log << text("ADMIN: [] made a [] flag.", src.key,color) + return + +/mob/proc/restart() + set category = "Admin" + + world << "\green Restarting world!" + sleep(50) + if(config.logadmin) world.log << "ADMIN: Rebooting due to [src.key]" + world.Reboot() + return + +/mob/proc/monkey(mob/M as mob in world) + set category = "Admin" + set hidden = 1 + + for(var/obj/O in M) + //O = null + del(O) + //Foreach goto(20) + var/mob/monkey/O = new /mob/monkey( M.loc ) + M.client.mob = O + O.loc = M.loc + //M = null + del(M) + return + +/mob/proc/toggle_alter() + set category = "Admin" + + if (src.verbs.Find(/mob/proc/carboncopy)) + src.verbs -= /mob/proc/carboncopy + else + src.verbs -= /mob/proc/carboncopy + src.verbs += /mob/proc/carboncopy + return + + +/mob/proc/carboncopy(atom/movable/O as mob|obj in world) + + var/M = O + if ((istype(M, /mob) && M:key)) + usr << "You can't duplicate PCs' mobs." + return + var/mob/new_O = new O.type( usr.loc ) + for(var/V in O.vars) + if (issaved(O.vars[V])) + new_O.vars[V] = O.vars[V] + //Foreach goto(72) + return + + +/mob/proc/secrets(pass as text) + set category = "Admin" + + if(config.logadmin) world.log << text("ADMIN: [] used secret []", usr.key, pass) + + switch(pass) + if("sec_clothes") + for(var/obj/item/weapon/clothing/under/O in world) + //O = null + del(O) + //Foreach goto(52) + if("sec_all_clothes") + for(var/obj/item/weapon/clothing/O in world) + //O = null + del(O) + //Foreach goto(97) + if("sec_classic1") + for(var/obj/item/weapon/clothing/suit/firesuit/O in world) + //O = null + del(O) + //Foreach goto(142) + for(var/obj/grille/O in world) + //O = null + del(O) + //Foreach goto(185) + for(var/obj/machinery/pod/O in world) + //O = null + del(O) + //Foreach goto(228) + if("clear_bombs") + for(var/obj/item/weapon/assembly/r_i_ptank/O in world) + //O = null + del(O) + //Foreach goto(273) + if("dissimulate_aspect") + usr.invisibility = !( usr.invisibility ) + usr.sight |= SEE_SELF + world << text("\red [] manipulates the visible plane.", usr) + if("teleport") + var/mob/M = input("Who do you wish to goto?", null, null, null) as null|mob in world + if (!( ismob(M) )) + return + else + src.loc = M.loc + world << text("\red [] teleports to []!", usr, M) + if("summon") + var/mob/M = input("Who do you wish to summon?", null, null, null) as null|mob in world + if (!( ismob(M) )) + return + else + M.loc = src.loc + world << text("\red [] summons []!", usr, M) + if("list_bombers") + usr << "\blue Don't be insane about this list Get the facts." + for(var/l in bombers) + usr << text("[] 'made' a bomb.", l) + //Foreach goto(476) + if("check_antagonist") + if (ticker) + if (ticker.killer) + if (ticker.killer.ckey) + usr << text("The traitor's key is [].", ticker.killer.ckey) + else + usr << "It seems like the traitor logged out..." + else + usr << "There is no traitor." + else + usr << "The game has not started yet." + if("power") + for(var/area/A in world) + A.requires_power = 0 + A.power_light = 1 + A.power_equip = 1 + A.power_environ = 1 + + A.power_change() + if("wave") + meteor_wave() + else + return + +/mob/proc/ret_grab(obj/list_container/mobl/L as obj, flag) + + if ((!( istype(src.l_hand, /obj/item/weapon/grab) ) && !( istype(src.r_hand, /obj/item/weapon/grab) ))) + if (!( L )) + return null + else + return L.container + else + if (!( L )) + L = new /obj/list_container/mobl( null ) + L.container += src + L.master = src + if (istype(src.l_hand, /obj/item/weapon/grab)) + var/obj/item/weapon/grab/G = src.l_hand + if (!( L.container.Find(G.affecting) )) + L.container += G.affecting + G.affecting.ret_grab(L, 1) + if (istype(src.r_hand, /obj/item/weapon/grab)) + var/obj/item/weapon/grab/G = src.r_hand + if (!( L.container.Find(G.affecting) )) + L.container += G.affecting + G.affecting.ret_grab(L, 1) + if (!( flag )) + if (L.master == src) + var/list/temp = list( ) + temp += L.container + //L = null + del(L) + return temp + else + return L.container + return + +/mob/verb/mode() + set src = usr + + var/obj/item/weapon/W = src.equipped() + if (W) + W.attack_self(src) + return + +/* +/mob/verb/dump_source() + + var/master = "
    "
    +	for(var/t in typesof(/area))
    +		master += text("[]\n", t)
    +		//Foreach goto(26)
    +	src << browse(master)
    +	return
    +*/
    +
    +/mob/verb/memory()
    +
    +	src << browse(text("Memory::
    []", src.memory), "window=memory") + return + +/mob/verb/add_memory(msg as message) + + src.memory += text("[]
    ", msg) + src << browse(text("Memory::
    []", src.memory), "window=memory") + return + +/mob/verb/help() + + src << browse('help.htm', "window=help") + return + +/mob/verb/abandon_mob() + + if (!( abandon_allowed )) + return + if ((src.stat != 2 || !( ticker ))) + usr << "\blue You must be dead to use this!" + return + + if(config.loggame) world.log << "GAME: [usr.name]/[usr.key] used abandon mob." + + usr << "\blue Please roleplay correctly!" + + if(!src.client) + if(config.loggame) world.log << "GAME: [usr.key] AM failed due to disconnect." + return + for(var/obj/screen/t in usr.client.screen) + if (t.loc == null) + //t = null + del(t) + //Foreach goto(66) + if(!src.client) + if(config.loggame) world.log << "GAME: [usr.key] AM failed due to disconnect." + return + + var/mob/human/M = new /mob/human( ) + if(!src.client) + if(config.loggame) world.log << "GAME: [usr.key] AM failed due to disconnect." + del(M) + return + + M.key = src.client.key + + + return + +/mob/verb/changes() + + src << browse(text("[]", changes), "window=changes") + return + +/mob/verb/succumb() + set hidden = 1 + + if ((src.health < 0 && src.health > -95.0)) + src.oxyloss += src.health + 99 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + usr << "\blue You have given up life and succumbed to death." + return + +/mob/verb/say() + + return + +/mob/verb/observe() + + if(src.client.holder && src.client.holder.level >= 3) + + var/eye = input("Please, select a player!", "Admin Observe", null, null) as null|mob in world + + if(eye) + src.reset_view(eye) + client.adminobs = 1 + if(eye == src.client.mob) + client.adminobs = 0 + + else + src.reset_view(null) + client.adminobs = 0 + return + + else if (src.stat != 2) + usr << "\blue You must be dead to use this!" + return + + src.client.perspective = EYE_PERSPECTIVE + + var/eye = input("Please, select a player!", "Watch", null, null) as null|mob in world + + if(eye) + src.client.eye = eye + else + src.client.eye = src.client.mob + + return + +/mob/verb/listen_ooc() + + if (src.client) + src.client.listen_ooc = !( src.client.listen_ooc ) + if (src.client.listen_ooc) + src << "\blue You are now listening to messages on the OOC channel. Don't abuse this!" + else + src << "\blue You are no longer listening to messages on the OOC channel." + return + +/mob/verb/ooc(msg as text) + + if(config.logooc) world.log << "OOC: [src.name]/[src.key] : [msg]" + msg = cleanstring(msg) + msg = html_encode(copytext(msg, 1, 128)) + if (!( msg )) + return + if ((ooc_allowed && !( src.muted ))) + for(var/mob/M in world) + if ((M.client && M.client.listen_ooc)) + M << text("OOC: []: []", src.key, msg) + //Foreach goto(54) + return + +/mob/verb/switch_hud() + + src.client.screen -= main_hud.contents + src.client.screen -= main_hud2.contents + if (src.hud_used == main_hud) + src.hud_used = main_hud2 + src.oxygen.icon = 'screen.dmi' + src.toxin.icon = 'screen.dmi' + src.internals.icon = 'screen.dmi' + src.mach.icon = 'screen.dmi' + src.fire.icon = 'screen.dmi' + src.healths.icon = 'screen.dmi' + src.pullin.icon = 'screen.dmi' + src.blind.icon = 'screen.dmi' + src.hands.icon = 'screen.dmi' + src.flash.icon = 'screen.dmi' + src.sleep.icon = 'screen.dmi' + src.rest.icon = 'screen.dmi' + else + src.hud_used = main_hud + src.oxygen.icon = 'screen1.dmi' + src.toxin.icon = 'screen1.dmi' + src.internals.icon = 'screen1.dmi' + src.mach.icon = 'screen1.dmi' + src.fire.icon = 'screen1.dmi' + src.healths.icon = 'screen1.dmi' + src.pullin.icon = 'screen1.dmi' + src.blind.icon = 'screen1.dmi' + src.hands.icon = 'screen1.dmi' + src.flash.icon = 'screen1.dmi' + src.sleep.icon = 'screen1.dmi' + src.rest.icon = 'screen1.dmi' + src.client.screen -= src.hud_used.adding + src.client.screen += src.hud_used.adding + return + +/mob/Login() + + src.sight |= SEE_SELF + ..() + return + +/mob/CheckPass(mob/M as mob) + + if ((src.other_mobs && ismob(M) && M.other_mobs)) + return 1 + else + return (!( M.density ) || !( src.density ) || src.lying) + return + +/mob/burn(fi_amount) + + for(var/atom/movable/A in src) + A.burn(fi_amount) + //Foreach goto(15) + return + +/mob/Topic(href, href_list) + if (href_list["mach_close"]) + var/t1 = text("window=[]", href_list["mach_close"]) + src.machine = null + src << browse(null, t1) + + + if(href_list["priv_msg"]) + var/mob/M = locate(href_list["priv_msg"]) + if(M) + if (!( ismob(M) )) + return + var/t = input("Message:", text("Private message to []", M.key), null, null) as text + if (!( t )) + return + if (usr.client && usr.client.holder) + M << "\blue Admin PM from-[usr.key]: [t]" + usr << "\blue Admin PM to-[M.key]: [t]" + else + M << "\blue Reply PM from-[usr.key]: [t]" + usr << "\blue Reply PM to-[M.key]: [t]" + + if(config.logadmin) world.log << "ADMIN: PM: [usr.key]->[M.key] : [t]" + + ..() + return + +/mob/MouseDrop(mob/M as mob) + + ..() + if ((M != usr || usr == src || get_dist(usr, src) > 1)) + return + src.show_inv(usr) + return + +/mob/las_act(flag) + + if (flag == "bullet") + if (src.stat != 2) + if (istype(src, /mob/human)) + var/mob/human/H = src + var/dam_zone = pick("chest", "chest", "chest", "diaper", "head") + if (H.organs[text("[]", dam_zone)]) + var/obj/item/weapon/organ/external/affecting = H.organs[text("[]", dam_zone)] + if (affecting.take_damage(51, 0)) + H.UpdateDamageIcon() + else + H.UpdateDamage() + else + src.bruteloss += 51 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + if (prob(80)) + src.weakened = 2 + if (flag) + if (prob(75)) + src.stunned = 10 + else + src.weakened = 10 + else + if (src.stat != 2) + if (istype(src, /mob/human)) + var/mob/human/H = src + var/dam_zone = pick("chest", "chest", "chest", "diaper", "head") + if (H.organs[text("[]", dam_zone)]) + var/obj/item/weapon/organ/external/affecting = H.organs[text("[]", dam_zone)] + if (affecting.take_damage(20, 0)) + H.UpdateDamageIcon() + else + H.UpdateDamage() + else + src.bruteloss += 20 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + if (prob(25)) + src.stunned = 2 + return + +/mob/ghost/proc/infest() + + return + +/mob/ghost/Move() + + if (src.stunned) + return + . = ..() + return + +/mob/ghost/show_inv() + + return + return + +/mob/ghost/Bump() + + return + return + +/mob/ghost/UpdateClothing() + + for(var/i in src.overlays) + src.overlays -= i + //Foreach goto(17) + if (src.wear_mask) + if (istype(src.wear_mask, /obj/item/weapon/clothing/mask)) + var/t1 = src.wear_mask.s_istate + if (!( t1 )) + t1 = src.icon_state + src.overlays += image("icon" = 'ghost.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = src.layer) + src.wear_mask.screen_loc = "2,3" + if (src.r_hand) + var/t1 = src.r_hand.s_istate + if (!( t1 )) + t1 = src.icon_state + src.overlays += image("icon" = 'r_items.dmi', "icon_state" = t1, "layer" = src.layer) + src.r_hand.screen_loc = "1,2" + if (src.l_hand) + var/t1 = src.l_hand.s_istate + if (!( t1 )) + t1 = src.icon_state + src.overlays += image("icon" = 'l_items.dmi', "icon_state" = t1, "layer" = src.layer) + src.l_hand.screen_loc = "3,2" + if (src.client) + src.client.screen -= src.contents + src.client.screen += src.contents + return + +/mob/ghost/Life() + + if (src.stat == 2) + death() + return + src.canmove = 1 + src.lying = 1 + src.stat = 0 + if (src.weakened > 0) + src.weakened-- + src.icon_state = "ghost" + else + src.icon_state = "blank" + if (src.stunned > 0) + src.stunned-- + src.canmove = 0 + for(var/obj/item/O in src) + O.loc = src.loc + O.layer = initial(O.layer) + src.u_equip(O) + //Foreach goto(109) + if (src.health < 0) + src.stat = 2 + return + return + +/mob/ghost/db_click() + + return + return + +/mob/ghost/equipped() + + return null + return + +/mob/ghost/m_delay() + + return -100.0 + return + +/mob/ghost/reset_view() + + if (src.client) + src.client.eye = src + else + return ..() + return + +/mob/ghost/las_act() + + return + return + +/mob/ghost/ex_act() + + return + return + +/mob/ghost/attack_hand(mob/M as mob) + + src.infest(M) + return + +/mob/ghost/attack_paw(mob/M as mob) + + src.infest(M) + return + +/mob/ghost/death() + + src.stunned = 1 + ..() + return + +/mob/ghost/meteorhit() + + return + return + +/mob/ghost/restrained() + + return 0 + return + +/mob/ghost/attackby(nothing, mob/M as mob) + + src.infest(M) + return 0 + return + +/mob/ghost/say(msg as text) + + if (!( msg )) + return + msg = stutter(msg) + if (prob(25)) + msg = stars(msg) + for(var/mob/M in hearers(null, null)) + M.show_message(msg, 2) + //Foreach goto(58) + return + +/mob/monkey/New() + + spawn( 50 ) + if (!( src.primary )) + var/t1 = rand(1000, 1500) + dna_ident += t1 + if (dna_ident > 65536.0) + dna_ident = rand(1, 1500) + src.primary = new /obj/dna( null ) + src.primary.uni_identity = text("[]", dna_ident) + while(length(src.primary.uni_identity) < 4) + src.primary.uni_identity = text("0[]", src.primary.uni_identity) + var/t2 = text("[]", rand(1, 256)) + if (length(t2) < 2) + src.primary.uni_identity = text("[]0[]", src.primary.uni_identity, t2) + else + src.primary.uni_identity = text("[][]", src.primary.uni_identity, t2) + t2 = text("[]", rand(1, 256)) + if (length(t2) < 2) + src.primary.uni_identity = text("[]0[]", src.primary.uni_identity, t2) + else + src.primary.uni_identity = text("[][]", src.primary.uni_identity, t2) + t2 = text("[]", rand(1, 256)) + if (length(t2) < 2) + src.primary.uni_identity = text("[]0[]", src.primary.uni_identity, t2) + else + src.primary.uni_identity = text("[][]", src.primary.uni_identity, t2) + t2 = text("[]", rand(1, 256)) + if (length(t2) < 2) + src.primary.uni_identity = text("[]0[]", src.primary.uni_identity, t2) + else + src.primary.uni_identity = text("[][]", src.primary.uni_identity, t2) + t2 = (src.gender == "male" ? text("[]", rand(1, 124)) : text("[]", rand(127, 250))) + if (length(t2) < 2) + src.primary.uni_identity = text("[]0[]", src.primary.uni_identity, t2) + else + src.primary.uni_identity = text("[][]", src.primary.uni_identity, t2) + src.primary.spec_identity = "2B6696D2B127E5A4" + src.primary.struc_enzyme = "CDEAF5B90AADBC6BA8033DB0A7FD613FA" + src.primary.use_enzyme = "C8FFFE7EC09D80AEDEDB9A5A0B4085B61" + src.primary.n_chromo = 16 + src.name = text("monkey ([])", copytext(md5(src.primary.uni_identity), 2, 6)) + return + ..() + return + +/mob/monkey/Bump(atom/movable/AM as mob|obj, yes) + + spawn( 0 ) + if ((!( yes ) || src.now_pushing)) + return + ..() + if (!( istype(AM, /atom/movable) )) + return + if (!( src.now_pushing )) + src.now_pushing = 1 + if (!( AM.anchored )) + var/t = get_dir(src, AM) + step(AM, t) + src.now_pushing = null + return + return + +/mob/monkey/Topic(href, href_list) + ..() + if (href_list["mach_close"]) + var/t1 = text("window=[]", href_list["mach_close"]) + src.machine = null + src << browse(null, t1) + if ((href_list["item"] && !( usr.stat ) && !( usr.restrained() ) && get_dist(src, usr) <= 1)) + var/obj/equip_e/monkey/O = new /obj/equip_e/monkey( ) + O.source = usr + O.target = src + O.item = usr.equipped() + O.s_loc = usr.loc + O.t_loc = src.loc + O.place = href_list["item"] + src.requests += O + spawn( 0 ) + O.process() + return + ..() + return + +/mob/monkey/meteorhit(obj/O as obj) + + for(var/mob/M in viewers(src, null)) + M.show_message(text("\red [] has been hit with by []", src, O), 1) + //Foreach goto(19) + if (src.health > 0) + var/shielded = 0 + for(var/obj/item/weapon/shield/S in src) + if (S.active) + shielded = 1 + else + //Foreach continue //goto(79) + src.bruteloss += 30 + if ((O.icon_state == "flaming" && !( shielded ))) + src.fireloss += 40 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + return + +/mob/monkey/las_act(flag) + + if (flag == "bullet") + if (src.stat != 2) + src.bruteloss += 60 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + src.weakened = 10 + if (flag) + if (prob(75)) + src.stunned = 15 + else + src.weakened = 15 + else + if (src.stat != 2) + src.bruteloss += 20 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + if (prob(25)) + src.stunned = 1 + return + +/mob/monkey/hand_p(mob/M as mob) + + if ((M.a_intent == "hurt" && !( istype(src.wear_mask, /obj/item/weapon/clothing/mask/muzzle) ))) + if ((prob(75) && src.health > 0)) + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red The monkey has bit []!", src), 1) + //Foreach goto(63) + var/damage = rand(1, 5) + src.bruteloss += damage + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + else + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red The monkey has attempted to bite []!", src), 1) + //Foreach goto(144) + return + +/mob/monkey/attack_paw(mob/M as mob) + + if (M.a_intent == "help") + src.sleeping = 0 + src.resting = 0 + for(var/mob/O in viewers(src, null)) + O.show_message("\blue The monkey shakes the monkey trying to wake him up!", 1) + //Foreach goto(47) + else + if ((M.a_intent == "hurt" && !( istype(src.wear_mask, /obj/item/weapon/clothing/mask/muzzle) ))) + if ((prob(75) && src.health > 0)) + for(var/mob/O in viewers(src, null)) + O.show_message("\red The monkey has bit the monkey!", 1) + //Foreach goto(130) + var/damage = rand(1, 5) + src.bruteloss += damage + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + else + for(var/mob/O in viewers(src, null)) + O.show_message("\red The monkey has attempted to bite the monkey!", 1) + //Foreach goto(209) + return + +/mob/monkey/attack_hand(mob/M as mob) + + if (M.a_intent == "help") + src.sleeping = 0 + src.resting = 0 + for(var/mob/O in viewers(src, null)) + if ((O.client && !( O.blinded ))) + O.show_message(text("\blue [] shakes the monkey trying to wake him up!", M), 1) + //Foreach goto(47) + else + if (M.a_intent == "hurt") + if ((prob(75) && src.health > 0)) + for(var/mob/O in viewers(src, null)) + if ((O.client && !( O.blinded ))) + O.show_message(text("\red [] has punched the monkey!", M), 1) + //Foreach goto(135) + var/damage = rand(5, 10) + if (prob(40)) + damage = rand(10, 15) + if (src.paralysis < 5) + src.paralysis = rand(10, 15) + spawn( 0 ) + for(var/mob/O in viewers(src, null)) + if ((O.client && !( O.blinded ))) + O.show_message(text("\red [] has knocked out the monkey!", M), 1) + //Foreach goto(248) + return + src.bruteloss += damage + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + else + for(var/mob/O in viewers(src, null)) + if ((O.client && !( O.blinded ))) + O.show_message(text("\red [] has attempted to punch the monkey!", M), 1) + //Foreach goto(336) + else + if (M.a_intent == "grab") + if (M == src) + return + var/obj/item/weapon/grab/G = new /obj/item/weapon/grab( M ) + G.assailant = M + if (M.hand) + M.l_hand = G + else + M.r_hand = G + G.layer = 20 + G.affecting = src + src.grabbed_by += G + G.synch() + for(var/mob/O in viewers(src, null)) + O.show_message(text("\red [] has grabbed the monkey passively!", M), 1) + //Foreach goto(502) + else + if (!( src.paralysis )) + if (prob(25)) + src.paralysis = 2 + for(var/mob/O in viewers(src, null)) + if ((O.client && !( O.blinded ))) + O.show_message(text("\red [] has pushed down the monkey!", M), 1) + //Foreach goto(571) + else + drop_item() + for(var/mob/O in viewers(src, null)) + if ((O.client && !( O.blinded ))) + O.show_message(text("\red [] has disarmed the monkey!", M), 1) + //Foreach goto(638) + return + +/mob/monkey/Stat() + + ..() + statpanel("Status") + stat(null, text("Intent: []", src.a_intent)) + stat(null, text("Move Mode: []", src.m_intent)) + return + +/mob/monkey/UpdateClothing() + + ..() + for(var/i in src.overlays) + src.overlays -= i + //Foreach goto(21) + if (!( src.lying )) + src.icon_state = "monkey1" + else + src.icon_state = "monkey0" + if (src.wear_mask) + if (istype(src.wear_mask, /obj/item/weapon/clothing/mask)) + var/t1 = src.wear_mask.s_istate + if (!( t1 )) + t1 = src.wear_mask.icon_state + src.overlays += image("icon" = 'monkey.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = src.layer) + src.wear_mask.screen_loc = "2,3" + if (src.r_hand) + var/t1 = src.r_hand.s_istate + if (!( t1 )) + t1 = src.r_hand.icon_state + src.overlays += image("icon" = 'r_items.dmi', "icon_state" = t1, "layer" = src.layer) + src.r_hand.screen_loc = "1,2" + if (src.l_hand) + var/t1 = src.l_hand.s_istate + if (!( t1 )) + t1 = src.l_hand.icon_state + src.overlays += image("icon" = 'l_items.dmi', "icon_state" = t1, "layer" = src.layer) + src.l_hand.screen_loc = "3,2" + if (src.back) + if (!( src.lying )) + src.overlays += image("icon" = 'monkey.dmi', "icon_state" = "back", "layer" = src.layer) + else + src.overlays += image("icon" = 'monkey.dmi', "icon_state" = "back2", "layer" = src.layer) + src.back.screen_loc = "3,3" + if (src.handcuffed) + src.pulling = null + if (!( src.lying )) + src.overlays += image("icon" = 'monkey.dmi', "icon_state" = "handcuff1", "layer" = src.layer) + else + src.overlays += image("icon" = 'monkey.dmi', "icon_state" = "handcuff2", "layer" = src.layer) + if (src.client) + src.client.screen -= src.contents + src.client.screen += src.contents + src.client.screen -= src.hud_used.m_ints + src.client.screen -= src.hud_used.mov_int + if (src.i_select) + if (src.intent) + src.client.screen += src.hud_used.m_ints + src.i_select.screen_loc = src.intent + else + src.i_select.screen_loc = null + if (src.m_select) + if (src.m_int) + src.client.screen += src.hud_used.mov_int + src.m_select.screen_loc = src.m_int + else + src.m_select.screen_loc = null + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + spawn( 0 ) + src.show_inv(M) + return + //Foreach goto(662) + return + +/mob/monkey/Login() + + if (banned.Find(src.ckey)) + //src.client = null + del(src.client) + src.client.screen -= main_hud.contents + src.client.screen -= main_hud2.contents + if (!( src.hud_used )) + src.hud_used = main_hud + src.next_move = 1 + if (!( src.rname )) + src.rname = src.key + src.oxygen = new /obj/screen( null ) + src.i_select = new /obj/screen( null ) + src.m_select = new /obj/screen( null ) + src.toxin = new /obj/screen( null ) + src.internals = new /obj/screen( null ) + src.mach = new /obj/screen( null ) + src.fire = new /obj/screen( null ) + src.healths = new /obj/screen( null ) + src.pullin = new /obj/screen( null ) + src.blind = new /obj/screen( null ) + src.flash = new /obj/screen( null ) + src.hands = new /obj/screen( null ) + src.sleep = new /obj/screen( null ) + src.rest = new /obj/screen( null ) + ..() + UpdateClothing() + src.oxygen.icon_state = "oxy0" + src.i_select.icon_state = "selector" + src.m_select.icon_state = "selector" + src.toxin.icon_state = "toxin0" + src.internals.icon_state = "internal0" + src.mach.icon_state = null + src.fire.icon_state = "fire0" + src.healths.icon_state = "health0" + src.pullin.icon_state = "pull0" + src.blind.icon_state = "black" + src.hands.icon_state = "hand" + src.flash.icon_state = "blank" + src.sleep.icon_state = "sleep0" + src.rest.icon_state = "rest0" + src.hands.dir = NORTH + src.oxygen.name = "oxygen" + src.i_select.name = "intent" + src.m_select.name = "move" + src.toxin.name = "toxin" + src.internals.name = "internal" + src.mach.name = "Reset Machine" + src.fire.name = "fire" + src.healths.name = "health" + src.pullin.name = "pull" + src.blind.name = " " + src.hands.name = "hand" + src.flash.name = "flash" + src.sleep.name = "sleep" + src.rest.name = "rest" + src.oxygen.screen_loc = "15,12" + src.i_select.screen_loc = "14,15" + src.m_select.screen_loc = "14,14" + src.toxin.screen_loc = "15,10" + src.internals.screen_loc = "15,14" + src.mach.screen_loc = "14,1" + src.fire.screen_loc = "15,8" + src.healths.screen_loc = "15,5" + src.sleep.screen_loc = "15,3" + src.rest.screen_loc = "15,2" + src.pullin.screen_loc = "15,1" + src.hands.screen_loc = "1,3" + src.blind.screen_loc = "1,1 to 15,15" + src.flash.screen_loc = "1,1 to 15,15" + src.blind.layer = 0 + src.flash.layer = 17 + src.sleep.layer = 20 + src.rest.layer = 20 + src.client.screen.len = null + src.client.screen -= list( src.oxygen, src.i_select, src.m_select, src.toxin, src.internals, src.fire, src.hands, src.healths, src.pullin, src.blind, src.flash, src.rest, src.sleep, src.mach ) + src.client.screen += list( src.oxygen, src.i_select, src.m_select, src.toxin, src.internals, src.fire, src.hands, src.healths, src.pullin, src.blind, src.flash, src.rest, src.sleep, src.mach ) + src.client.screen -= src.hud_used.adding + src.client.screen += src.hud_used.adding + src.client.screen -= src.hud_used.mon_blo + src.client.screen += src.hud_used.mon_blo + if (!( src.primary )) + var/t1 = rand(1000, 1500) + dna_ident += t1 + if (dna_ident > 65536.0) + dna_ident = rand(1, 1500) + src.primary = new /obj/dna( null ) + src.primary.uni_identity = text("[]", dna_ident) + while(length(src.primary.uni_identity) < 4) + src.primary.uni_identity = text("0[]", src.primary.uni_identity) + var/t2 = text("[]", rand(1, 256)) + if (length(t2) < 2) + src.primary.uni_identity = text("[]0[]", src.primary.uni_identity, t2) + else + src.primary.uni_identity = text("[][]", src.primary.uni_identity, t2) + t2 = text("[]", rand(1, 256)) + if (length(t2) < 2) + src.primary.uni_identity = text("[]0[]", src.primary.uni_identity, t2) + else + src.primary.uni_identity = text("[][]", src.primary.uni_identity, t2) + t2 = text("[]", rand(1, 256)) + if (length(t2) < 2) + src.primary.uni_identity = text("[]0[]", src.primary.uni_identity, t2) + else + src.primary.uni_identity = text("[][]", src.primary.uni_identity, t2) + t2 = text("[]", rand(1, 256)) + if (length(t2) < 2) + src.primary.uni_identity = text("[]0[]", src.primary.uni_identity, t2) + else + src.primary.uni_identity = text("[][]", src.primary.uni_identity, t2) + t2 = (src.gender == "male" ? text("[]", rand(1, 124)) : text("[]", rand(127, 250))) + if (length(t2) < 2) + src.primary.uni_identity = text("[]0[]", src.primary.uni_identity, t2) + else + src.primary.uni_identity = text("[][]", src.primary.uni_identity, t2) + src.primary.spec_identity = "2B6696D2B127E5A4" + src.primary.struc_enzyme = "CDEAF5B90AADBC6BA8033DB0A7FD613FA" + src.primary.use_enzyme = "C8FFFE7EC09D80AEDEDB9A5A0B4085B61" + src.primary.n_chromo = 16 + if (!( src.start )) + if ((src.key in list( "Thief jack", "Link43130", "Hutchy2k1", "Easty", "Exadv1" ))) + src.start = 1 + src.loc = locate(25, 72, 7) + else + src.start = 1 + var/A = locate(/area/start) + var/list/L = list( ) + for(var/turf/T in A) + if(T.isempty() ) + L += T + //Foreach goto(1473) + + src.loc = pick(L) + //src << browse('help.htm', "window=help") + if (CanAdmin()) + src << text("\blue The game ip is byond://[]:[] !", world.internet_address, world.port) + src.verbs += /mob/proc/mute + src.verbs += /mob/proc/changemessage + src.verbs += /mob/proc/boot + src.verbs += /mob/proc/changemode + src.verbs += /mob/proc/show_ctf + src.verbs += /mob/proc/restart + src.verbs += /mob/proc/who + src.verbs += /mob/proc/change_name + src.verbs += /mob/proc/show_help + src.verbs += /mob/proc/toggle_ooc + src.verbs += /mob/proc/toggle_abandon + src.verbs += /mob/proc/toggle_enter + src.verbs += /mob/proc/toggle_shuttle + src.verbs += /mob/proc/delay_start + src.verbs += /mob/proc/start_now + src.verbs += /mob/proc/worldsize + src.verbs += /mob/proc/make_gift + src.verbs += /mob/proc/make_flag + src.verbs += /mob/proc/make_pill + src.verbs += /mob/proc/ban + src.verbs += /mob/proc/unban + src.verbs += /mob/proc/secrets + src.verbs += /mob/proc/toggle_alter + src.verbs += /mob/proc/carboncopy + src.verbs += /mob/proc/list_dna + src.verbs += /proc/Vars + src << text("\blue []", world_message) + if (!( isturf(src.loc) )) + src.client.eye = src.loc + src.client.perspective = EYE_PERSPECTIVE + src.name = text("monkey ([])", copytext(md5(src.primary.uni_identity), 2, 6)) + return + +/mob/monkey/Move() + + if ((!( src.buckled ) || src.buckled.loc != src.loc)) + src.buckled = null + if (src.buckled) + return + if (src.restrained()) + src.pulling = null + var/t7 = 1 + if (src.restrained()) + for(var/mob/M in range(src, 1)) + if ((M.pulling == src && M.stat == 0 && !( M.restrained() ))) + return 0 + //Foreach goto(93) + if ((t7 && src.pulling && get_dist(src, src.pulling) <= 1)) + if (src.pulling.anchored) + src.pulling = null + var/T = src.loc + . = ..() + if (!( isturf(src.pulling.loc) )) + src.pulling = null + return + if (!( src.restrained() )) + var/diag = get_dir(src, src.pulling) + if ((diag - 1) & diag) + else + diag = null + if ((ismob(src.pulling) && (get_dist(src, src.pulling) > 1 || diag))) + if (istype(src.pulling, src.type)) + var/mob/M = src.pulling + var/mob/t = M.pulling + M.pulling = null + step(src.pulling, get_dir(src.pulling.loc, T)) + M.pulling = t + else + step(src.pulling, get_dir(src.pulling.loc, T)) + else + src.pulling = null + . = ..() + if ((src.s_active && !( src.contents.Find(src.s_active) ))) + src.s_active.close(src) + return + +/mob/monkey/death() + + var/cancel + if (src.healths) + src.healths.icon_state = "health5" + src.stat = 2 + src.canmove = 0 + if (src.blind) + src.blind.layer = 0 + src.lying = 1 + //src.icon_state = "dead" + for(var/mob/M in world) + if ((M.client && !( M.stat ))) + cancel = 1 + //Foreach goto(79) + if (!( cancel )) + world << "Everyone is dead! Resetting in 30 seconds!" + if ((ticker && ticker.timing)) + ticker.check_win() + else + spawn( 300 ) + if(config.loggame) world.log << "GAME: Rebooting because of no live players" + world.Reboot() + return + return ..() + return + +/mob/monkey/Life() + set background = 1 + + var/plcheck + var/oxcheck + var/ficheck + + var/turf/T = src.loc + if (!( locate(/obj/table, src.loc) )) + src.layer = MOB_LAYER + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + if (src.stat != 2) + src.t_sl_gas = 0 + src.t_n2 = 0 + if (!( src.m_flag )) + src.last_move = null + src.m_flag = null + if (src.mach) + if (src.machine) + src.mach.icon_state = "mach1" + else + src.mach.icon_state = null + if ((src.internal && !( src.contents.Find(src.internal) ))) + src.internal = null + if ((!( src.wear_mask ) || !( src.wear_mask.flags | 8 ))) + src.internal = null + if (istype(T, /turf)) + var/t = 1.4E-4 + if (src.health < 20) + t = 5.0E-5 + else + if (src.health < 40) + t = 1.0E-4 + if (locate(/obj/move, T)) + T = locate(/obj/move, T) + var/turf_total = T.oxygen + T.poison + T.sl_gas + T.co2 + T.n2 + var/obj/substance/gas/G = new /obj/substance/gas( ) + G.maximum = 10000 + if (src.internal) + src.internal.process(src, G) + if (src.wear_mask.flags & 4) + G.turf_add(T, G.tot_gas() * 0.5) + G.turf_take(T, t / 2 * turf_total - G.tot_gas()) + else + G.turf_take(T, t * turf_total) + src.aircheck(G) + plcheck = src.t_plasma + oxcheck = src.t_oxygen + G.turf_add(T, G.tot_gas()) + ficheck = src.firecheck(T) + else + if (istype(T, /obj)) + var/obj/O = T + O.alter_health(src) + if ((istype(src.loc, /turf/space) && !( locate(/obj/move, src.loc) ))) + var/layers = 20 + + // ****** Check + + if ((istype(src.wear_mask, /obj/item/weapon/clothing/mask) && !( src.wear_mask.flags & 4 ) && src.wear_mask.flags & 8)) + layers -= 5 + if (layers > oxcheck) + oxcheck = layers + if ((plcheck && src.health >= 0)) + if ((src.paralysis <= 0 || src.weakened <= 0)) + src.toxloss += plcheck + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + else + src.toxloss += plcheck + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + if ((oxcheck && src.health >= 0)) + if ((src.paralysis <= 0 || src.weakened <= 0)) + src.oxyloss += oxcheck + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + else + src.oxyloss += oxcheck + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + else + if (src.health >= 0) + if (src.oxyloss >= 10) + var/amount = max(0.15, 1) + src.oxyloss -= amount + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + else + src.oxyloss = 0 + if (ficheck) + src.fireloss += ficheck * 10 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + if (src.health <= -100.0) + death() + else + if ((src.sleeping || src.health < 0)) + if (prob(1)) + if (src.health <= 20) + spawn( 0 ) + emote("gasp") + return + else + spawn( 0 ) + emote("snore") + return + if (src.health < 0) + if (src.rejuv <= 0) + src.oxyloss++ + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + src.stat = 1 + if (src.paralysis < 5) + src.paralysis = 5 + else + if (src.resting) + if (src.weakened < 5) + src.weakened = 5 + else + if (src.health < 20) + if (prob(5)) + if (prob(1)) + if (src.health <= 20) + spawn( 0 ) + emote("gasp") + return + src.stat = 1 + if (src.paralysis < 2) + src.paralysis = 2 + if (src.rejuv > 0) + src.rejuv-- + if (src.r_epil > 0) + src.r_epil-- + if (src.r_ch_cou > 0) + src.r_ch_cou-- + if (src.r_Tourette > 0) + src.r_Tourette-- + if (src.antitoxs > 0) + src.antitoxs-- + if (src.plasma > 0) + src.antitoxs -= 4 + if (src.plasma > 0) + src.plasma-- + src.blinded = null + if (src.drowsyness > 0) + src.drowsyness-- + if (src.paralysis > 1) + src.drowsyness -= 0.5 + else + if (src.weakened > 1) + src.drowsyness -= 0.25 + src.eye_blurry = max(2, src.eye_blurry) + if (prob(5)) + src.sleeping = 1 + src.paralysis = 5 + if ((src.health > -10.0 && src.drowsyness > 1200)) + if (src.antitoxs < 1) + src.toxloss += plcheck + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + plcheck = 1 + var/mental_danger = 0 + if (((src.r_epil > 0 && !( src.disabilities & 2 )) || (src.r_Tourette > 0 && !( src.disabilities & 8 )))) + src.stuttering = max(2, src.drowsyness) + mental_danger = 1 + src.drowsyness = max(2, src.drowsyness) + if (!( src.paralysis )) + if (prob(5)) + src << "\red You have a seizure!" + src.paralysis = 10 + else + if (prob(5)) + spawn( 0 ) + emote("twitch") + return + src.stunned = 10 + else + if (prob(30)) + spawn( 0 ) + emote("drool") + return + if (src.health > -10.0) + var/threshold = 45 + if (mental_danger) + threshold = 15 + if (src.r_ch_cou > 2700) + if (src.antitoxs < 1) + src.toxloss += 1 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + plcheck = 1 + if (prob(15)) + spawn( 0 ) + emote("twitch") + src.stunned = 2 + return + if (src.r_epil > threshold * 60) + if (src.antitoxs < 1) + src.toxloss += 1 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + plcheck = 1 + if (prob(15)) + spawn( 0 ) + emote("twitch") + src.stunned = 2 + return + if (src.r_Tourette > threshold * 60) + if (src.antitoxs < 1) + src.toxloss += 1 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + plcheck = 1 + if (prob(15)) + spawn( 0 ) + emote("twitch") + src.stunned = 2 + return + if (src.antitoxs > 7200) + src.toxloss += 1 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + plcheck = 1 + if (prob(15)) + spawn( 0 ) + emote("drool") + return + if (src.health > -50.0) + if (src.plasma > 0) + if (src.antitoxs < 1) + src.toxloss += 1 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + plcheck = 1 + if (prob(15)) + spawn( 0 ) + emote("moan") + return + if (src.stat != 2) + if (src.paralysis + src.stunned + src.weakened > 0) + if (src.stunned > 0) + src.stunned-- + src.stat = 0 + if (src.weakened > 0) + src.weakened-- + src.lying = 1 + src.stat = 0 + if (src.paralysis > 0) + src.paralysis-- + src.blinded = 1 + src.lying = 1 + src.stat = 1 + src.canmove = 0 + var/h = src.hand + src.hand = 0 + drop_item() + src.hand = 1 + drop_item() + src.hand = h + else + src.canmove = 1 + src.lying = 0 + src.stat = 0 + else + src.lying = 1 + src.blinded = 1 + src.stat = 2 + src.canmove = 0 + var/add_weight = 0 + if (istype(src.l_hand, /obj/item/weapon/grab)) + add_weight += 1250000.0 + if (istype(src.r_hand, /obj/item/weapon/grab)) + add_weight += 1250000.0 + if (locate(/obj/item/weapon/grab, src.grabbed_by)) + var/a_grabs = 0 + for(var/obj/item/weapon/grab/G in src.grabbed_by) + G.process() + if (G) + if (G.state > 1) + a_grabs++ + if ((G.state > 2 && src.loc == G.assailant.loc)) + src.density = 0 + src.lying = 0 + switch(G.assailant.dir) + if(1.0) + src.pixel_y = 8 + if(2.0) + src.pixel_y = -8.0 + if(4.0) + src.pixel_x = 8 + if(8.0) + src.pixel_x = -8.0 + + //Foreach goto(2333) + src.weight = ((src.grabbed_by.len - a_grabs) / 2 + 1) * 1250000.0 + (a_grabs * 2500000.0) + else + if (src.lying) + src.weight = add_weight + 2500000.0 + else + src.weight = add_weight + 1250000.0 + if (src.stuttering > 0) + src.stuttering-- + if (src.eye_blind > 0) + src.eye_blind-- + src.blinded = 1 + if (src.ear_deaf > 0) + src.ear_deaf-- + else + if (src.ear_damage < 25) + src.ear_damage -= 0.05 + src.ear_damage = max(src.ear_damage, 0) + if (src.buckled) + src.lying = 0 + src.density = !( src.lying ) + if (src.lying) + src.weight = 5000000.0 + else + src.weight = 2500000.0 + if (src.sdisabilities & 1) + src.blinded = 1 + if (src.eye_blurry > 0) + src.eye_blurry-- + src.eye_blurry = max(0, src.eye_blurry) + if (src.client) + src.client.screen -= main_hud.g_dither + if (istype(src.wear_mask, /obj/item/weapon/clothing/mask/gasmask)) + src.client.screen += main_hud.g_dither + if (src.mach) + if (src.machine) + src.mach.icon_state = "mach1" + else + src.mach.icon_state = "blank" + if (src.sleep) + src.sleep.icon_state = text("sleep[]", src.sleeping) + if (src.rest) + src.rest.icon_state = text("rest[]", src.resting) + if (src.healths) + if (src.stat < 2) + if (src.health >= 100) + src.healths.icon_state = "health0" + else + if (src.health >= 75) + src.healths.icon_state = "health1" + else + if (src.health >= 50) + src.healths.icon_state = "health2" + else + if (src.health > 20) + src.healths.icon_state = "health3" + else + src.healths.icon_state = "health4" + else + src.healths.icon_state = "health5" + if (src.pullin) + if (src.pulling) + src.pullin.icon_state = "pull1" + else + src.pullin.icon_state = "pull0" + if (src.fire) + if (ficheck) + src.fire.icon_state = "fire1" + else + src.fire.icon_state = "fire0" + if (src.toxin) + if (plcheck) + src.toxin.icon_state = "toxin1" + else + src.toxin.icon_state = "toxin0" + if (src.oxygen) + if (oxcheck) + src.oxygen.icon_state = "oxy1" + else + src.oxygen.icon_state = "oxy0" + src.client.screen -= src.hud_used.blurry + src.client.screen -= src.hud_used.vimpaired + if ((src.blind && src.stat != 2)) + if (src.blinded) + src.blind.layer = 18 + else + src.blind.layer = 0 + if (src.eye_blurry) + src.client.screen -= src.hud_used.blurry + src.client.screen += src.hud_used.blurry + else + src.client.screen -= src.hud_used.blurry + if (src.stat != 2) + if (src.machine) + if (!( src.machine.check_eye(src) )) + src.reset_view(null) + else + reset_view(null) + else + if ((src.canmove && prob(10) && isturf(src.loc))) + step(src, pick(NORTH, SOUTH, EAST, WEST)) + if (prob(10)) + src.emote(pick("drool", "chimper", "scratch", "tail", "sit", "jump")) + else + if (prob(10)) + var/mob/human/H = locate(/mob/human, oview(1, null)) + if (istype(H, /mob/human)) + src.a_intent = "hurt" + spawn( 0 ) + H.attack_paw(src) + return + if (src.primary) + src.primary.cleanup() + src.UpdateClothing() + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + return + +/mob/monkey/verb/removeinternal() + + src.internal = null + return + +/mob/monkey/proc/aircheck(obj/substance/gas/G as obj) + + src.t_oxygen = 0 + src.t_plasma = 0 + if (G) + var/a_oxygen = G.oxygen * 0.7 + var/a_plasma = G.plasma + var/a_sl_gas = G.sl_gas * 0.7 + G.oxygen -= a_oxygen + G.plasma -= a_plasma + G.sl_gas -= a_sl_gas + if (a_oxygen < 67.032) + src.t_oxygen = round((67.032 - a_oxygen) / 5) + if (G.co2 > 5) + var/t = round((G.co2 - 5) / 5) + if (G.co2 > 25) + src.paralysis = max(src.paralysis, 3) + if (G.co2 > 50) + t = 50 + src.t_oxygen = max(src.t_oxygen, t) + if (a_plasma > 5) + src.t_plasma = round((src.t_plasma - 5) / 10) + 1 + if (a_sl_gas > 10) + src.weakened = max(src.weakened, 3) + if (G.co2 > 40) + src.paralysis = max(src.paralysis, 3) + G.co2 += a_oxygen * 0.6 + return + +/mob/monkey/proc/firecheck(turf/T as turf) + + if (T.firelevel < 900000.0) + return 0 + var/total = 0 + if (src.wear_mask) + if (T.firelevel > src.wear_mask.s_fire) + total += 0.25 + else + total += 0.25 + return total + return + +/mob/monkey/proc/emote(act) + + var/param = null + if (findtext(act, "-", 1, null)) + var/t1 = findtext(act, "-", 1, null) + param = copytext(act, t1 + 1, length(act) + 1) + act = copytext(act, 1, t1) + var/muzzled = istype(src.wear_mask, /obj/item/weapon/clothing/mask/muzzle) + var/m_type = 1 + var/message + + switch(act) + if("sign") + if (!( src.restrained() )) + message = text("The monkey signs[].", (text2num(param) ? text(" the number []", text2num(param)) : null)) + m_type = 1 + if("scratch") + if (!( src.restrained() )) + message = "The monkey scratches." + m_type = 1 + if("whimper") + if (!( muzzled )) + message = "The monkey whimpers." + m_type = 2 + if("roar") + if (!( muzzled )) + message = "The monkey roars." + m_type = 2 + if("tail") + message = "The monkey waves his tail." + m_type = 1 + if("gasp") + message = "The monkey gasps." + m_type = 2 + if("drool") + message = "The monkey drools." + m_type = 1 + if("paw") + if (!( src.restrained() )) + message = "The monkey flails his paw." + m_type = 1 + if("scretch") + if (!( muzzled )) + message = "The monkey scretches." + m_type = 2 + if("choke") + message = "The monkey chokes." + m_type = 2 + if("moan") + message = "The monkey moans!" + m_type = 2 + if("nod") + message = "The monkey nods his head." + m_type = 1 + if("sit") + message = "The monkey sits down." + m_type = 1 + if("sway") + message = "The monkey sways around dizzily." + m_type = 1 + if("sulk") + message = "The monkey sulks down sadly." + m_type = 1 + if("twitch") + message = "The monkey twitches violently." + m_type = 1 + if("dance") + if (!( src.restrained() )) + message = "The monkey dances around happily." + m_type = 1 + if("roll") + if (!( src.restrained() )) + message = "The monkey rolls." + m_type = 1 + if("shake") + message = "The monkey shakes his head." + m_type = 1 + if("gnarl") + if (!( muzzled )) + message = "The monkey gnarls and shows his teeth.." + m_type = 2 + if("jump") + message = "The monkey jumps!" + m_type = 1 + if("help") + src << "choke, dance, drool, gasp, gnarl, jump, paw, moan, nod, roar, roll, scratch,\nscretch, shake, sign-#, sit, sulk, sway, tail, twitch, whimper" + else + src << text("Invalid Emote: []", act) + if ((message && src.stat == 0)) + if (m_type & 1) + for(var/mob/O in viewers(src, null)) + O.show_message(message, m_type) + //Foreach goto(703) + else + for(var/mob/O in hearers(src, null)) + O.show_message(message, m_type) + //Foreach goto(746) + return + +/mob/monkey/say(message as text) + + if (src.muted) + return + message = copytext(message, 1, 128) + + message = cleanstring(message) + + if (src.stat == 2) + for(var/mob/M in world) + if (M.stat == 2) + M << text("[] []: []", src, (src.stat > 1 ? "\[dead \]" : ""), message) + //Foreach goto(50) + return + if ((copytext(message, 1, 2) == "*" && !( src.stat ))) + src.emote(copytext(message, 2, length(message) + 1)) + return + if ((!( message ) || istype(src.wear_mask, /obj/item/weapon/clothing/mask/muzzle))) + return + if (src.stat < 2) + var/list/L = list( ) + var/pre = copytext(message, 1, 4) + var/italics = 0 + var/obj_range = null + if (pre == "\[r\]") + message = copytext(message, 4, length(message) + 1) + if (src.r_hand) + src.r_hand.talk_into(usr, message) + L += hearers(1, null) + italics = 1 + obj_range = 1 + else + if (pre == "\[l\]") + message = copytext(message, 4, length(message) + 1) + if (src.l_hand) + src.l_hand.talk_into(usr, message) + L += hearers(1, null) + italics = 1 + obj_range = 1 + else + if (pre == "\[w\]") + message = copytext(message, 4, length(message) + 1) + L += hearers(1, null) + italics = 1 + obj_range = 1 + else + L += hearers(null, null) + pre = null + L -= src + L += src + if (italics) + message = text("[]", message) + for(var/mob/M in L) + if (istype(M, src.type)) + M.show_message(text("[]: []", src, message), 2) + else + M.show_message(text("[] chimpers.", src), 2) + //Foreach goto(503) + for(var/obj/O in view(obj_range, null)) + spawn( 0 ) + if (O) + O.hear_talk(usr, message) + return + //Foreach goto(580) + for(var/mob/M in world) + if (M.stat > 1) + M << text("[] []: []", src, (src.stat > 1 ? "\[dead \]" : ""), message) + //Foreach goto(637) + return + +/mob/monkey/examine() + set src in oview() + + usr << "\blue *---------*" + usr << text("\blue This is \icon[] []!", src, src.name) + if (src.handcuffed) + usr << text("\blue \t[] is handcuffed! \icon[]", src.name, src.handcuffed) + if (src.wear_mask) + usr << text("\blue \t[] has a \icon[] [] on \his[] head!", src.name, src.wear_mask, src.wear_mask.name, src) + if (src.l_hand) + usr << text("\blue \t[] has a \icon[] [] in \his[] left hand!", src.name, src.l_hand, src.l_hand.name, src) + if (src.r_hand) + usr << text("\blue [] has a \icon[] [] in \his[] right hand!", src.name, src.r_hand, src.r_hand.name, src) + if (src.back) + usr << text("\blue [] has a \icon[] [] on \his[] back!", src.name, src.back, src.back.name, src) + if (src.bruteloss) + if (src.bruteloss < 30) + usr << text("\red [] looks slightly bruised!", src.name) + else + usr << text("\red [] looks severely bruised!", src.name) + if (src.fireloss) + if (src.fireloss < 30) + usr << text("\red [] looks slightly burnt!", src.name) + else + usr << text("\red [] looks severely burnt!", src.name) + return + +/mob/monkey/ex_act(severity) + + flick("flash", src.flash) + switch(severity) + if(1.0) + if (src.stat != 2) + src.bruteloss += 200 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + if(2.0) + if (src.stat != 2) + src.bruteloss += 60 + src.fireloss += 60 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + if(3.0) + if (src.stat != 2) + src.bruteloss += 30 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + if (prob(50)) + src.paralysis += 10 + else + return + +/mob/monkey/blob_act() + if (src.stat != 2) + src.bruteloss += 30 + src.health = 100 - src.oxyloss - src.toxloss - src.fireloss - src.bruteloss + if (prob(50)) + src.paralysis += 10 + + +/atom/movable/Move(NewLoc, direct) + + if (direct & direct - 1) + if (direct & 1) + if (direct & 4) + if (step(src, NORTH)) + step(src, EAST) + else + if (step(src, EAST)) + step(src, NORTH) + else + if (direct & 8) + if (step(src, NORTH)) + step(src, WEST) + else + if (step(src, WEST)) + step(src, NORTH) + else + if (direct & 2) + if (direct & 4) + if (step(src, SOUTH)) + step(src, EAST) + else + if (step(src, EAST)) + step(src, SOUTH) + else + if (direct & 8) + if (step(src, SOUTH)) + step(src, WEST) + else + if (step(src, WEST)) + step(src, SOUTH) + else + ..() + return + +/atom/movable/verb/pull() + set src in oview(1) + + if (!( usr )) + return + if (!( src.anchored )) + usr.pulling = src + return + +/atom/verb/examine() + set src in oview(1) + + if (!( usr )) + return + usr << src.desc + // *****RM + //usr << "[src.name]: Dn:[density] dir:[dir] cont:[contents] icon:[icon] is:[icon_state] loc:[loc]" + return + +/client/Northeast() + + src.mob.swap_hand() + return + +/client/Southeast() + + var/obj/item/weapon/W = src.mob.equipped() + if (W) + W.attack_self(src.mob) + return + +/client/Northwest() + + src.mob.drop_item_v() + return + +/client/Southwest() + + src.mob.throw_item_v() + return + +/client/Center() + + if (isobj(src.mob.loc)) + var/obj/O = src.mob.loc + if (src.mob.canmove) + return O.relaymove(src.mob, 16) + return + +/client/Move(n, direct) + + if (src.moving) + return 0 + if (world.time < src.move_delay) + return + if (!( src.mob )) + return + if (src.mob.stat == 2) + return + if (src.mob.monkeyizing) + return + var/is_monkey = istype(src.mob, /mob/monkey) + if (locate(/obj/item/weapon/grab, locate(/obj/item/weapon/grab, src.mob.grabbed_by.len))) + var/list/grabbing = list( ) + if (istype(src.mob.l_hand, /obj/item/weapon/grab)) + var/obj/item/weapon/grab/G = src.mob.l_hand + grabbing += G.affecting + if (istype(src.mob.r_hand, /obj/item/weapon/grab)) + var/obj/item/weapon/grab/G = src.mob.r_hand + grabbing += G.affecting + for(var/obj/item/weapon/grab/G in src.mob.grabbed_by) + if (G.state == 1) + if (!( grabbing.Find(G.assailant) )) + //G = null + del(G) + else + if (G.state == 2) + src.move_delay = world.time + 10 + if ((prob(25) && (!( is_monkey ) || prob(25)))) + for(var/mob/O in viewers(src.mob, null)) + O.show_message(text("\red [] has broken free of []'s grip!", src.mob, G.assailant), 1) + //Foreach goto(309) + //G = null + del(G) + else + return + else + if (G.state == 2) + src.move_delay = world.time + 10 + if ((prob(5) && !( is_monkey ) || prob(25))) + for(var/mob/O in viewers(src.mob, null)) + O.show_message(text("\red [] has broken free of []'s headlock!", src.mob, G.assailant), 1) + //Foreach goto(423) + //G = null + del(G) + else + return + //Foreach goto(189) + if (src.mob.canmove) + + if(src.mob.m_intent == "face") + src.mob.dir = direct + + var/j_pack = 0 + if ((istype(src.mob.loc, /turf/space) && !( locate(/obj/move, src.mob.loc) ))) + if (!( src.mob.restrained() )) + if (!( (locate(/obj/grille, oview(1, src.mob)) || locate(/turf/station, oview(1, src.mob))) )) + if (istype(src.mob.back, /obj/item/weapon/tank/jetpack)) + var/obj/item/weapon/tank/jetpack/J = src.mob.back + j_pack = J.allow_thrust(100, src.mob) + if(j_pack) + var/obj/effects/sparks/ion_trails/I = new /obj/effects/sparks/ion_trails( src.mob.loc ) + flick("ion_fade", I) + I.icon_state = "blank" + spawn( 20 ) + //I = null + del(I) + return + if (!( j_pack )) + return 0 + else + return 0 + else + return 0 + + + if (isturf(src.mob.loc)) + src.move_delay = world.time + if ((j_pack && j_pack < 1)) + src.move_delay += 5 + switch(src.mob.m_intent) + if("run") + if (src.mob.drowsyness > 0) + src.move_delay += 6 + src.move_delay += 1 + if("face") + src.mob.dir = direct + return + if("walk") + src.move_delay += 7 + + + src.move_delay += src.mob.m_delay() + + src.move_delay += round((100 - src.mob.health) / 20) //*****RM fix + + if (src.mob.restrained()) + for(var/mob/M in range(src.mob, 1)) + if (((M.pulling == src.mob && (!( M.restrained() ) && M.stat == 0)) || locate(/obj/item/weapon/grab, src.mob.grabbed_by.len))) + src << "\blue You're restrained! You can't move!" + return 0 + //Foreach goto(853) + src.moving = 1 + if (locate(/obj/item/weapon/grab, src.mob)) + src.move_delay = max(src.move_delay, world.time + 7) + var/list/L = src.mob.ret_grab() + if (istype(L, /list)) + if (L.len == 2) + L -= src.mob + var/mob/M = L[1] + if ((get_dist(src.mob, M) <= 1 || M.loc == src.mob.loc)) + var/turf/T = src.mob.loc + . = ..() + if (isturf(M.loc)) + var/diag = get_dir(src.mob, M) + if ((diag - 1) & diag) + else + diag = null + if ((get_dist(src.mob, M) > 1 || diag)) + step(M, get_dir(M.loc, T)) + else + for(var/mob/M in L) + M.other_mobs = 1 + if (src.mob != M) + M.animate_movement = 3 + //Foreach goto(1163) + for(var/mob/M in L) + spawn( 0 ) + step(M, direct) + return + spawn( 1 ) + M.other_mobs = null + M.animate_movement = 1 + return + //Foreach goto(1214) + else + . = ..() + src.moving = null + return . + else + if (isobj(src.mob.loc)) + var/obj/O = src.mob.loc + if (src.mob.canmove) + return O.relaymove(src.mob, direct) + else + return + return + +/client/proc/show_panel() + + if (src.holder) + src.holder.update() + return + +/client/New() + + if (banned.Find(src.ckey)) + //SN src = null + del(src) + return + + if (((world.address == src.address || !( src.address )) && !( host ))) + host = src.key + world.update_stat() + ..() + spawn( 50 ) + if (admins.Find(src.ckey)) + src.holder = new /obj/admins( src ) + src.holder.rank = admins[text("[]", src.ckey)] + switch(admins[text("[]", src.ckey)]) + if("Primary Administrator") + src.holder.level = 5 + if("Master Administrator") + src.holder.level = 4 + if("Administrator") + src.holder.level = 3 + if("Supervisor") + src.holder.level = 2 + if("Moderator") + src.holder.level = 1 + if("Game Master") + src.holder.level = 0 + if("Banned") + //SN src = null + del(src) + return + else + //src.holder = null + del(src.holder) + if (src.holder) + src.holder.owner = src + src.verbs += /client/proc/show_panel + if(ticker && master_mode =="sandbox") + mob.CanBuild() + + if(src.holder.level ==5) + src.verbs += /proc/Vars + src.verbs += /mob/proc/Delete + return + return + +/client/Del() + + if (banned.Find(src.ckey)) + ..() + return + ..() + //src.holder = null + del(src.holder) + return diff --git a/main-src/Code/modules.dm b/main-src/Code/modules.dm new file mode 100644 index 0000000..4ea38e3 --- /dev/null +++ b/main-src/Code/modules.dm @@ -0,0 +1,106 @@ + +// module datum. +// this is per-object instance, and shows the condition of the modules in the object +// actual modules needed is referenced through modulestypes and the object type + +/datum/module + var/status // bits set if working, 0 if broken + var/installed // bits set if installed, 0 if missing + +// moduletypes datum +// this is per-object type, and shows the modules needed for a type of object + +/datum/moduletypes + var/list/modcount = list() // assoc list of the count of modules for a type + + +var/list/modules = list( // global associative list +"/obj/machinery/power/apc" = "card_reader,power_control,id_auth,cell_power,cell_charge") + + + + + +/datum/module/New(var/obj/O) + + var/type = O.type // the type of the creating object + + var/mneed = mods.inmodlist(type) // find if this type has modules defined + + if(!mneed) // not found in module list? + del(src) // delete self, thus ending proc + + var/needed = mods.getbitmask(type) // get a bitmask for the number of modules in this object + status = needed + installed = needed + +/datum/moduletypes/proc/addmod(var/type, var/modtextlist) + + modules += type // index by type text + modules[type] = modtextlist + + +/datum/moduletypes/proc/inmodlist(var/type) + return ("[type]" in modules) + +/datum/moduletypes/proc/getbitmask(var/type) + var/count = modcount["[type]"] + if(count) + return 2**count-1 + + var/modtext = modules["[type]"] + var/num = 1 + var/pos = 1 + + while(1) + pos = findText(modtext, ",", pos, 0) + if(!pos) + break + else + pos++ + num++ + + modcount += "[type]" + modcount["[type]"] = num + + return 2**num-1 + + +/obj/item/weapon/module + icon = 'module.dmi' + icon_state = "std_module" + w_class = 2.0 + s_istate = "electronic" + flags = FPRINT|DRIVABLE|TABLEPASS + var/mtype = 1 // 1=electronic 2=hardware + +/obj/item/weapon/module/card_reader + name = "card reader module" + icon_state = "card_mod" + desc = "An electronic module for reading data and ID cards." + +/obj/item/weapon/module/power_control + name = "power control module" + icon_state = "power_mod" + desc = "Heavy-duty switching circuits for power control." + +/obj/item/weapon/module/id_auth + name = "ID authentication module" + icon_state = "id_mod" + desc = "A module allowing secure authorization of ID cards." + var/access = null + var/allowed = null + +/obj/item/weapon/module/cell_power + name = "power cell regulator module" + icon_state = "power_mod" + desc = "A converter and regulator allowing the use of power cells." + +/obj/item/weapon/module/cell_power + name = "power cell charger module" + icon_state = "power_mod" + desc = "Charging circuits for power cells." + + + + diff --git a/main-src/Code/newitems.dm b/main-src/Code/newitems.dm new file mode 100644 index 0000000..3c31199 --- /dev/null +++ b/main-src/Code/newitems.dm @@ -0,0 +1,59 @@ +/obj/item/weapon/t_scanner/attack_self(mob/user) + + on = !on + icon_state = "t-scanner[on]" + + if(on) + src.process() + + +/obj/item/weapon/t_scanner/proc/process() + + while(on) + for(var/turf/T in range(1, src.loc) ) + + if(!T.intact) + continue + + for(var/obj/O in T.contents) + + if(O.level != 1) + continue + + if(O.invisibility == 101) + O.invisibility = 0 + spawn(10) + if(O) + var/turf/U = O.loc + if(U.intact) + O.invisibility = 101 + + var/mob/human/M = locate() in T + if(M && M.invisibility == 2) + M.invisibility = 0 + spawn(2) + if(M) + M.invisibility = 2 + + + sleep(10) + +/obj/item/weapon/flashlight/attack_self(mob/user) + + on = !on + icon_state = "flight[on]" + + if(on) + img = image('turfs2.dmi', "light", 11) + user:body_standing += img + else + if(img) + user:body_standing -= img + del(img) + + + +///obj/item/weapon/flashlight/dropped() +// on = 0 + + diff --git a/main-src/Code/newobjects.dm b/main-src/Code/newobjects.dm new file mode 100644 index 0000000..9fb8afe --- /dev/null +++ b/main-src/Code/newobjects.dm @@ -0,0 +1,92 @@ +/obj/New() + ..() +// mod = new(src) // creates a module datum for this obj of type + + + + +/obj/machinery/cell_charger/attackby(obj/item/weapon/W, mob/user) + + if(stat & BROKEN) return + + if(istype(W, /obj/item/weapon/cell)) + if(charging) + user << "There is already a cell in the charger." + return + else + user.drop_item() + W.loc = src + charging = W + user << "You insert the cell into the charger." + chargelevel = -1 + + + updateicon() + + +/obj/machinery/cell_charger/proc/updateicon() + + icon_state = "ccharger[charging ? 1 : 0]" + + if(charging && !(stat & (BROKEN|NOPOWER)) ) + + var/newlevel = round( charging.percent() * 4.0 / 99 ) + //world << "nl: [newlevel]" + + if(chargelevel != newlevel) + + overlays = null + overlays += image('power.dmi', "ccharger-o[newlevel]") + + chargelevel = newlevel + + else + overlays = null + + + +/obj/machinery/cell_charger/attack_hand(mob/user) + + add_fingerprint(user) + + if(stat & BROKEN) return + + if(charging) + charging.loc = usr + charging.layer = 20 + if (user.hand ) + user.l_hand = charging + else + user.r_hand = charging + + charging.add_fingerprint(user) + charging.updateicon() + + src.charging = null + user << "You remove the cell from the charger." + chargelevel = -1 + updateicon() + + +/obj/machinery/cell_charger/process() + + //world << "ccpt [charging] [stat]" + if(!charging || (stat & (BROKEN|NOPOWER)) ) + return + + var/newch = charging.charge + 5 + + newch = min(newch, charging.maxcharge) + + + + use_power((newch - charging.charge) / CELLRATE) + + + //world << "ccpt: [newch], used [(newch - charging.charge) / CELLRATE]" + + charging.charge = newch + + updateicon() + + diff --git a/main-src/Code/newpipe.dm b/main-src/Code/newpipe.dm new file mode 100644 index 0000000..97141de --- /dev/null +++ b/main-src/Code/newpipe.dm @@ -0,0 +1,1544 @@ +// pipeline datum for storings inter-machine links + + +// create a pipeline + +/obj/machinery/pipeline/New() + ..() + + gas = new/obj/substance/gas(src) + ngas = new/obj/substance/gas() + + gasflowlist += src + +// find the pipeline that contains the /obj/machine (including pipe) +/proc/findline(var/obj/machinery/M) + + for(var/obj/machinery/pipeline/P in plines) + + for(var/obj/machinery/O in P.nodes) + + if(M==O) + return P + + return null + +// sets the vnode1&2 terminators to the joining machines (or null) +/obj/machinery/pipeline/proc/setterm() + + //first make sure pipes are oriented correctly + + var/obj/machinery/M = null + + for(var/obj/machinery/pipes/P in nodes) + if(!M) // special case for 1st pipe + if(P.node1 && P.node1.ispipe()) + P.flip() // flip if node1 is a pipe + else + if(P.node1 != M) //other cases, flip if node1 doesn't point to previous node + P.flip() // (including if it is null) + + + M = P + + + // pipes are now ordered so that n1/n2 is in same order as pipeline list + + var/obj/machinery/pipes/P = nodes[1] // 1st node in list + vnode1 = P.node1 // n1 points to 1st machine + P = nodes[nodes.len] // last node in list + vnode2 = P.node2 // n2 points to last machine + + + return + + +/obj/machinery/pipeline/get_gas_val(from) + return gas.tot_gas()/capmult + +/obj/machinery/pipeline/get_gas(from) + return gas + + + +/obj/machinery/pipeline/gas_flow() + + //if(suffix == "d" && Debug) world.log << "PLF1 [gas.tot_gas()] ~ [ngas.tot_gas()]" + + gas.replace_by(ngas) + + //if(suffix == "d" && Debug) world.log << "PLF2 [gas.tot_gas()] ~ [ngas.tot_gas()]" + +/obj/machinery/pipeline/process() + + // heat exchange for whole pipeline + + //if(suffix=="dbgp") + // world.log << "PLP" + // Plasma() + +// var/dbg = (suffix == "d") && Debug + + //if(dbg) world.log << "PLP1 [gas.tot_gas()] ~ [ngas.tot_gas()]" + + + var/gtemp = ngas.temperature // cached temperature for heat exch calc + var/tot_node = ngas.tot_gas() / numnodes // fraction of gas in this node + + //if(dbg) world.log << "PLHE: [gtemp] [tot_node]" + + if(tot_node>0.1) // no pipe contents, don't heat + for(var/obj/machinery/pipes/P in src.nodes) // for each segment of pipe + P.heat_exchange(ngas, tot_node, numnodes, gtemp) //, dbg) // exchange heat with its turf + + + // now do standard gas flow proc + + + //if(dbg) world.log << "PLP2 [ngas.tot_gas()]" + + var/delta_gt + + if(vnode1) + delta_gt = FLOWFRAC * ( vnode1.get_gas_val(src) - gas.tot_gas() / capmult) + calc_delta( src, gas, ngas, vnode1, delta_gt)//, dbg) + + //if(dbg) world.log << "PLT1 [delta_gt] >> [gas.tot_gas()] ~ [ngas.tot_gas()]" + + flow = delta_gt + else + leak_to_turf(1) + + if(vnode2) + delta_gt = FLOWFRAC * ( vnode2.get_gas_val(src) - gas.tot_gas() / capmult) + calc_delta( src, gas, ngas, vnode2, delta_gt)//, dbg) + + //if(dbg) world.log << "PLT2 [delta_gt] >> [gas.tot_gas()] ~ [ngas.tot_gas()]" + + flow -= delta_gt + else + leak_to_turf(2) + + + +/obj/machinery/pipeline/proc/leak_to_turf(var/port) + + var/turf/T + var/obj/machinery/pipes/P + var/list/ndirs + + switch(port) + if(1) + P = nodes[1] // 1st node in list + ndirs = P.get_node_dirs() + + T = get_step(P, ndirs[1]) + + + if(2) + P = nodes[nodes.len] // last node in list + + ndirs = P.get_node_dirs() + T = get_step(P, ndirs[2]) + + if(T.density) + return + + flow_to_turf(gas, ngas, T) + + +// build the pipelines +/proc/makepipelines() + + var/linecount = 0 // the line number + + for(var/obj/machinery/pipes/P in machines) // look for a pipe + + if(!P.plnum) // if not already part of a line + P.buildnodes(++linecount) // add it, and spread to all connected pipes + + //world.log<<"Line #[linecount] started at [P] ([P.x],[P.y],[P.z])" + + + for(var/L = 1 to linecount) // for count of lines found + var/obj/machinery/pipeline/PL = new() // make a pipeline virtual object + PL.name = "pipeline #[L]" + plines += PL // and add it to the list + + + + for(var/obj/machinery/pipes/P in machines) // look for pipes + + if(P.termination) // true if pipe is terminated (ends in blank or a machine) + var/obj/machinery/pipeline/PL = plines[P.plnum] // get the pipeline from the pipe's pl-number + + var/list/pipes = pipelist(null, P) // get a list of pipes from P until terminated + + PL.nodes = pipes // pipeline is this list of nodes + PL.numnodes = pipes.len // with this many nodes + PL.capmult = PL.numnodes+1 // with this flow multiplier + + + + for(var/obj/machinery/pipes/P in machines) // all pipes + P.setline() // set the pipeline object for this pipe + + if(P.tag == "dbg") //add debug tag to line containing debug pipe + P.pl.tag = "dbg" + + if(P.suffix == "dbgpp") //add debug tag to line containing debug pipe + P.pl.suffix = "dbgp" + + if(P.suffix == "d") //add debug tag to line containing debug pipe + P.pl.suffix = "d" + + + for(var/obj/machinery/M in machines) // for all machines + if(M.p_dir) // which are pipe-connected + if(!M.ispipe()) // is not a pipe itself + M.buildnodes() // build the nodes, setting the links to the virtual pipelines + // also sets the vnodes for the pipelines + + for(var/obj/machinery/pipeline/PL in plines) // for all lines + PL.setterm() // orient the pipes and set the pipeline vnodes to the terminating machines + +// return a list of pipes (not including terminating machine) + +/proc/pipelist(var/obj/machinery/source, var/obj/machinery/startnode) + + var/list/L = list() + + var/obj/machinery/node = startnode + var/obj/machinery/prev = source + var/obj/machinery/newnode + + while(node) + L += node + newnode = node.next(prev) + prev = node + + if(newnode && newnode.ispipe()) + node = newnode + else + break + + return L + +// new pipes system + +// flip the nodes of a pipe +/obj/machinery/pipes/proc/flip() + + var/obj/machinery/tempnode = node1 + node1 = node2 + node2 = tempnode + return + + +// return the next pipe in the node chain +/obj/machinery/pipes/next(var/obj/machinery/from) + + if(from == null) // if from null, then return the next actual pipe + if(node1 && node1.ispipe() ) + return node1 + if(node2 && node2.ispipe() ) + return node2 + return null // else return null if no real pipe connected + + else if(from == node1) // otherwise, return the node opposite the incoming one + return node2 + else + return node1 + + +// set the pipeline obj from the pl-number and global list of pipelines + +/obj/machinery/pipes/setline() + src.pl = plines[plnum] + return + +// returns the pipeline that this line is in + +/obj/machinery/pipes/getline() + return pl + +/obj/machinery/pipes/orient_pipe(P as obj) + + if (!( src.node1 )) + src.node1 = P + else + if (!( src.node2 )) + src.node2 = P + else + return 0 + return 1 + +// returns a list of dir1, dir2 & p_dir for a pipe + +/obj/machinery/pipes/proc/get_dirs() + var/b1 + var/b2 + + for(var/d in cardinal) + if(p_dir & d) + if(!b1) + b1 = d + else if(!b2) + b2 = d + + return list(b1, b2, p_dir) + +// returns a list of the directions of a pipe, matched to nodes (if present) + +/obj/machinery/pipes/proc/get_node_dirs() + var/list/dirs = get_dirs() + + + if(!node1 && !node2) // no nodes - just return the standard dirs + return dirs // note extra p_dir on end of list is unimportant + else + if(node1) + var/d1 = get_dir(src, node1) // find the direction of node1 + if(d1==dirs[1]) // if it matches + return dirs // then dirs list is correct + else + return list(dirs[2], dirs[1]) // otherwise return the list swapped + + else // node2 must be valid + var/d2 = get_dir(src, node2) // direction of node2 + if(d2==dirs[2]) // matches + return dirs // dirs list is correct + else + return list(dirs[2], dirs[1]) // otherwise swap order + + +/obj/machinery/pipes/proc/update() + + var/turf/T = src.loc + + var/list/dirs = get_dirs() + + var/is = "[dirs[3]]" + + if(stat & BROKEN) + is += "-b" + + if ((src.level == 1 && isturf(src.loc) && T.intact)) + src.invisibility = 101 + is += "-f" + + else + src.invisibility = null + + src.icon_state = is + + if(node1 && node2) + overlays = null + else if(!node1 && !node2) + overlays += image('pipes.dmi', "discon", FLY_LAYER, dirs[1]) + overlays += image('pipes.dmi', "discon", FLY_LAYER, dirs[2]) + else if(!node1) + var/d2 = get_dir(src, node2) + if(dirs[1] == d2) + overlays += image('pipes.dmi', "discon", FLY_LAYER, dirs[2]) + else + overlays += image('pipes.dmi', "discon", FLY_LAYER, dirs[1]) + else if(!node2) + var/d1 = get_dir(src, node1) + if(dirs[1] == d1) + overlays += image('pipes.dmi', "discon", FLY_LAYER, dirs[2]) + else + overlays += image('pipes.dmi', "discon", FLY_LAYER, dirs[1]) + + + return + +/obj/machinery/pipes/hide(var/i) + + update() + +/obj/machinery/pipes/proc/explode() + + //***** +// world << "pipe [src] at [x],[y],[z] exploded" + +// src.gas.turf_add(src.loc, -1.0) + return + + +/* +/obj/machinery/pipes/process() +*/ + +/obj/machinery/pipes/New() + + ..() + + if(istype(src, /obj/machinery/pipes/heat_exch)) + h_dir = text2num(icon_state) + else + p_dir = text2num(icon_state) + + +/obj/machinery/pipes/ispipe() // return true since this is a pipe + return 1 + +/obj/machinery/pipes/buildnodes(var/linenum) + + if(plnum) + return + + var/list/dirs = get_dirs() + + node1 = get_machine(level, src.loc, dirs[1]) + node2 = get_machine(level, src.loc, dirs[2]) + + update() + + plnum = linenum + + termination = 0 + + if(node1 && node1.ispipe() ) + + node1.buildnodes(linenum) + else + termination++ + + if(node2 && node2.ispipe() ) + node2.buildnodes(linenum) + else + termination++ + + +/obj/machinery/pipes/heat_exch/get_dirs() + var/b1 + var/b2 + + for(var/d in cardinal) + if(h_dir & d) + if(!b1) + b1 = d + else if(!b2) + b2 = d + + return list(b1, b2, h_dir) + +/obj/machinery/pipes/heat_exch/buildnodes(var/linenum) + + if(plnum) + return + + src.level = 2 // h/e pipe cannot be put underfloor + + var/list/dirs = get_dirs() + + node1 = get_he_machine(level, src.loc, dirs[1]) + node2 = get_he_machine(level, src.loc, dirs[2]) + + update() + + plnum = linenum + + termination = 0 + + if(node1 && node1.ispipe() ) + + node1.buildnodes(linenum) + else + termination++ + + if(node2 && node2.ispipe() ) + node2.buildnodes(linenum) + else + termination++ + + +/obj/machinery/pipes/proc/heat_exchange(var/obj/substance/gas/gas, var/tot_node, var/numnodes, var/temp, var/dbg=0) + + + var/turf/T = src.loc // turf location of pipe + if(T.density) return + + if( level != 1) // no heat exchange for under-floor pipes + if(istype(T,/turf/space)) // heat exchange less efficient in space (no conduction) + gas.temperature += ( T.temp - temp) / (3.0 * insulation * numnodes) + else + + // if(dbg) world.log << "PHE: ([x],[y]) [T.temp]-> \..." + var/delta_T = (T.temp - temp) / (insulation) // normal turf + + gas.temperature += delta_T / numnodes // heat the pipe due to turf temperature + + /* + if(abs(delta_T*tot_node/T.tot_gas()) > 1) + world.log << "Turf [T] at [T.x],[T.y]: gt=[temp] tt=[T.temp]" + world.log << "dT = [delta_T] tn=[tot_node] ttg=[T.tot_gas()] tt-=[delta_T*tot_node/T.tot_gas()]" + + */ + var/tot_turf = max(1, T.tot_gas()) + T.temp -= delta_T*min(10,tot_node/tot_turf) // also heat the turf due to pipe temp + // clamp max temp change to prevent thermal runaway + // if low amount of gas in turf + // if(dbg) world.log << "[T.temp] [tot_turf] #[delta_T]" + T.res_vars() // ensure turf tmp vars are updated + + else // if level 1 but in space, perform cooling anyway - exposed pipes + if(istype(T,/turf/space)) + gas.temperature += ( T.temp - temp) / (3.0 * insulation * numnodes) + + + +// amount of gas that can be received = pipe capacity - amount already present +/* +/obj/machinery/pipes/receive_amount() + if(gas) + return max(0, capacity - gas.tot_gas()) + return 0 + +/obj/machinery/pipes/receive_gas(var/obj/substance/gas/t_gas as obj, from as obj, amount) + //new pipe logic + // src receives (up to) 'amount' of gas 't_gas' from 'from' + // uses receive_amount to find actual amount of gas to transfer + // note any excess must bem left in from.gas - need t_gas = from.gas + + + amount = max(0, min( amount, src.receive_amount(src) )) // limit amount of gas transfered to that able to receive + + gas.transfer_from(t_gas, amount) // transfer from incoming gas to local gas reservoir. Remainder left in t_gas + + var/tot = gas.tot_gas() // total amount of gas now in reservoir + + var/turf/T = src.loc // turf location of pipe + + if( level != 1) // no heat exchange for under-floor pipes + if(istype(T,/turf/space)) // heat exchange less efficient in space (no conduction) + gas.temperature += ( T.temp - gas.temperature) / (3.0 * insulation) + else + var/delta_T = (T.temp - gas.temperature) / insulation // normal turf + gas.temperature += delta_T // heat the pipe due to turf temperature + + T.temp -= delta_T*tot/T.tot_gas() // also heat the turf due to pipe temp + + last_flow = amount // for metering of flow rate + + spawn( 2 ) + + if (from == src.node1) // recieved from node1 + spawn( 0 ) + if(node2) + src.node2.receive_gas(gas, src, tot*PIPEFRAC) // so forward to node2, if present + else + src.leak_to_turf() // otherwise leak + return + else + spawn( 0 ) + if(node1) + src.node1.receive_gas(gas, src, tot*PIPEFRAC) + else + src.explode() + return + + return + + +*/ + + + +// finds the machine with compatible p_dir in 1 step in dir from S +/proc/get_machine(var/level, var/turf/S, mdir) + + var/flip = turn(mdir, 180) + + var/turf/T = get_step(S, mdir) + + for(var/obj/machinery/M in T.contents) + if(M.level == level) + if(M.p_dir & flip) + return M + + return null + +// finds the machine with compatible h_dir in 1 step in dir from S +/proc/get_he_machine(var/level, var/turf/S, mdir) + + var/flip = turn(mdir, 180) + + var/turf/T = get_step(S, mdir) + + for(var/obj/machinery/M in T.contents) + if(M.level == level) + if(M.h_dir & flip) + return M + + return null + + + + +// ***** circulator + +/obj/machinery/circulator/New() + ..() + gas1 = new/obj/substance/gas(src) + gas1.maximum = capacity + gas2 = new/obj/substance/gas(src) + gas2.maximum = capacity + + ngas1 = new/obj/substance/gas() + ngas2 = new/obj/substance/gas() + + gasflowlist += src + + //gas.co2 = capacity + + updateicon() + +/obj/machinery/circulator/buildnodes() + + var/turf/TS = get_step(src, SOUTH) + var/turf/TN = get_step(src, NORTH) + + for(var/obj/machinery/M in TS) + + if(M && (M.p_dir & 1)) + node1 = M + break + + for(var/obj/machinery/M in TN) + + if(M && (M.p_dir & 2)) + node2 = M + break + + + if(node1) vnode1 = node1.getline() + + if(node2) vnode2 = node2.getline() + + +/* +/obj/machinery/circulator/verb/toggle_power() + set src in view(1) + + if(status == 1) + status = 2 + spawn(30) // 3 second delay for slow-off + if(status == 2) + status = 0 + updateicon() + else if(status == 0) + status =1 + + updateicon() + + + +/obj/machinery/circulator/verb/set_rate(r as num) + set src in view(1) + rate = r/100.0*capacity +*/ + +/obj/machinery/circulator/proc/control(var/on, var/prate) + + rate = prate/100*capacity + + if(status == 1) + if(!on) + status = 2 + spawn(30) + if(status == 2) + status = 0 + updateicon() + else if(status == 0) + if(on) + status = 1 + else // status ==2 + if(on) + status = 1 + + updateicon() + + +/obj/machinery/circulator/proc/updateicon() + + if(stat & NOPOWER) + icon_state = "circ[side]-p" + return + + var/is + switch(status) + if(0) + is = "off" + if(1) + is = "run" + if(2) + is = "slow" + + icon_state = "circ[side]-[is]" + + + +/obj/machinery/circulator/power_change() + ..() + updateicon() + +/* +/obj/machinery/circulator/receive_gas(var/obj/substance/gas/t_gas as obj, from as obj, amount) + + + if(from != src.node1) + return + + amount = min(receive_amount(src), amount) + + + //src.gas.transfer_from(t_gas, amount) + + return +*/ +/obj/machinery/circulator/gas_flow() + + gas1.replace_by(ngas1) + gas2.replace_by(ngas2) + +/obj/machinery/circulator/process() + + // if operating, pump from resv1 to resv2 + + if(! (stat & NOPOWER) ) // only do circulator step if powered; still do rest of gas flow at all times + if(status==1 || status==2) + gas2.transfer_from(gas1, status==1? rate : rate/2) + use_power(rate/capacity * 100) + ngas1.replace_by(gas1) + ngas2.replace_by(gas2) + + + // now do standard process + + var/delta_gt + + if(vnode1) + delta_gt = FLOWFRAC * ( vnode1.get_gas_val(src) - gas1.tot_gas() / capmult) + calc_delta( src, gas1, ngas1, vnode1, delta_gt) + else + leak_to_turf(1) + + if(vnode2) + delta_gt = FLOWFRAC * ( vnode2.get_gas_val(src) - gas2.tot_gas() / capmult) + calc_delta( src, gas2, ngas2, vnode2, delta_gt) + else + leak_to_turf(2) + + +/obj/machinery/circulator/proc/leak_to_turf(var/port) + + var/turf/T + + switch(port) + if(1) + T = get_step(src, SOUTH) + if(2) + T = get_step(src, NORTH) + + if(T.density) + T = src.loc + if(T.density) + return + + switch(port) + if(1) + flow_to_turf(gas1, ngas1, T) + if(2) + flow_to_turf(gas2, ngas2, T) + + + // do leak + + + +/obj/machinery/circulator/get_gas_val(from) + + if(from == vnode1) + return gas1.tot_gas()/capmult + else + return gas2.tot_gas()/capmult + +/obj/machinery/circulator/get_gas(from) + + if(from == vnode1) + return gas1 + else + return gas2 + +// *** pipe manifold + + +/obj/machinery/manifold/New() + + ..() + + switch(dir) + if(NORTH) + p_dir = 13 //NORTH|EAST|WEST + + if(SOUTH) + p_dir = 14 //SOUTH|EAST|WEST + + if(EAST) + p_dir = 7 //EAST|NORTH|SOUTH + + if(WEST) + p_dir = 11 //WEST|NORTH|SOUTH + + + + src.gas = new /obj/substance/gas( src ) + src.gas.maximum = src.capacity + src.ngas = new /obj/substance/gas() + gasflowlist += src + + +/obj/machinery/manifold/buildnodes() + + var/turf/T = src.loc + + node3 = get_machine( level, T, dir ) // the injector port + + n1dir = turn(dir, 90) + n2dir = turn(dir,-90) + + node1 = get_machine( level, T , n1dir ) // the main flow dir + + + node2 = get_machine( level, T , n2dir ) + + + if(node1) vnode1 = node1.getline() + if(node2) vnode2 = node2.getline() + if(node3) vnode3 = node3.getline() + + return + + +/obj/machinery/manifold/gas_flow() + + gas.replace_by(ngas) + +/obj/machinery/manifold/process() + + var/delta_gt + + if(vnode1) + delta_gt = FLOWFRAC * ( vnode1.get_gas_val(src) - gas.tot_gas() / capmult) + calc_delta( src, gas, ngas, vnode1, delta_gt) + else + leak_to_turf(1) + + if(vnode2) + delta_gt = FLOWFRAC * ( vnode2.get_gas_val(src) - gas.tot_gas() / capmult) + calc_delta( src, gas, ngas, vnode2, delta_gt) + else + leak_to_turf(2) + + if(vnode3) + delta_gt = FLOWFRAC * ( vnode3.get_gas_val(src) - gas.tot_gas() / capmult) + calc_delta( src, gas, ngas, vnode3, delta_gt) + else + leak_to_turf(3) + + +/obj/machinery/manifold/get_gas_val(from) + return gas.tot_gas()/capmult + +/obj/machinery/manifold/get_gas(from) + return gas + + +/obj/machinery/manifold/proc/leak_to_turf(var/port) + + var/turf/T + + + switch(port) + if(1) + T = get_step(src, n1dir) + if(2) + T = get_step(src, n2dir) + if(3) + T = get_step(src, dir) + + if(T.density) + T = src.loc + if(T.density) + return + + flow_to_turf(gas, ngas, T) + + // delta = 0 + + + + + +/obj/machinery/connector/New() + + ..() + + gas = new/obj/substance/gas(src) + gas.maximum = capacity + ngas = new/obj/substance/gas() + //agas = new/obj/substance/gas() + + gasflowlist += src + spawn(5) + var/obj/machinery/atmoalter/A = locate(/obj/machinery/atmoalter, src.loc) + + if(A && A.c_status != 0) + connected = A + A.anchored = 1 + + + +/obj/machinery/connector/buildnodes() + + var/turf/T = get_step(src.loc, src.dir) + var/fdir = turn(src.p_dir, 180) + + for(var/obj/machinery/M in T) + if(M.p_dir & fdir) + src.node = M + break + + if(node) vnode = node.getline() + + + return + + + +/obj/machinery/connector/examine() + set src in oview(1) + + if(connected) + usr << "A pipe connector for gas equipment. It is connected to \an [connected.name]." + else + usr << "A pipe connector for gas equipment. It is unconnected." + + + +/obj/machinery/connector/get_gas_val(from) + return gas.tot_gas()/capmult + +/obj/machinery/connector/get_gas(from) + return gas + + +/obj/machinery/connector/gas_flow() + +// var/dbg = (suffix == "d") && Debug + //if(dbg) world.log << "CF0: ngas=[ngas.tot_gas()]" + + //ngas.transfer_from(agas, -1) + + //if(dbg) world.log << "CF1: ngas=[gas.tot_gas()]" + gas.replace_by(ngas) + //if(dbg) world.log << "CF2: gas=[gas.tot_gas()]" + flag = 0 + +/obj/machinery/connector/process() + + //if(suffix=="dbgp") + // world.log << "CP" + // Plasma() + + var/delta_gt +// var/dbg = (suffix == "d") && Debug + + //if(dbg) world.log << "C[tag]P: [gas.tot_gas()] ~ [ngas.tot_gas()]" + //if(dbg && connected) world.log << "C[tag]PC: [connected.gas.tot_gas()]" + + if(vnode) + + delta_gt = FLOWFRAC * ( vnode.get_gas_val(src) - gas.tot_gas() / capmult) + //if(dbg) world.log << "C[tag]P0: [delta_gt]" + + //var/obj/substance/gas/vgas = vnode.get_gas(src) + + //if(dbg) world.log << "C[tag]P1: [gas.tot_gas()], [ngas.tot_gas()] -> [vgas.tot_gas()]" + calc_delta( src, gas, ngas, vnode, delta_gt)//, dbg) + //if(dbg) world.log << "C[tag]P2: [gas.tot_gas()], [ngas.tot_gas()] -> [vgas.tot_gas()]" + + else + leak_to_turf() + + if(connected) + var/amount + if(connected.c_status == 1) // canister set to release + + //if(dbg) world.log << "C[tag]PC1: [gas.tot_gas()], [ngas.tot_gas()] <- [connected.gas.tot_gas()]" + amount = min(connected.c_per, capacity - gas.tot_gas() ) // limit to space in connector + amount = max(0, min(amount, connected.gas.tot_gas() ) ) // limit to amount in canister, or 0 + //if(dbg) world.log << "C[tag]PC2: a=[amount]" + //var/ng = ngas.tot_gas() + ngas.transfer_from( connected.gas, amount) + //if(dbg) world.log <<"[ngas.tot_gas()-ng] from siph to connector" + //if(dbg) world.log << "C[tag]PC3: [gas.tot_gas()], [ngas.tot_gas()] <- [connected.gas.tot_gas()]" + else if(connected.c_status == 2) // canister set to accept + + amount = min(connected.c_per, connected.gas.maximum - connected.gas.tot_gas()) //limit to space in canister + amount = max(0, min(amount, gas.tot_gas() ) ) // limit to amount in connector, or 0 + + connected.gas.transfer_from( ngas, amount) + + //flag = 1 + + //if(suffix=="dbgp") + // world.log << "CP" + // Plasma() + + + + +/obj/machinery/connector/proc/leak_to_turf() + + //var/dbg = (tag == "dbg") && Debug + + var/turf/T = get_step(src, dir) + if(T && !T.density) + + //if(dbg) world.log << "CLT1: [gas.tostring()] ~ [ngas.tostring()]\nTg = [T.tostring()]" + + + flow_to_turf(gas, ngas, T) + + //if(dbg) world.log << "CLT2: [gas.tostring()] ~ [ngas.tostring()]\nTg = [T.tostring()]" + + + +/obj/machinery/junction/New() + ..() + gas = new/obj/substance/gas(src) + ngas = new/obj/substance/gas() + gasflowlist += src + + h_dir = dir // the h/e pipe is in obj dir + p_dir = turn(dir, 180) // the reg pipe is in opposite dir + + +/obj/machinery/junction/buildnodes() + + var/turf/T = src.loc + + node1 = get_he_machine(level, T, h_dir ) // the h/e pipe + + node2 = get_machine(level, T , p_dir ) // the regular pipe + + if(node1) vnode1 = node1.getline() + if(node2) vnode2 = node2.getline() + + return + + +/obj/machinery/junction/gas_flow() + + //var/dbg + //if(tag == "dbg1") + // dbg = 1 + //else if(tag == "dbg2") + // dbg = 2 + + //if(dbg) world.log << "J[dbg]F1: [gas.tostring()] ~ [ngas.tostring()]" + + + gas.replace_by(ngas) + + //if(dbg) world.log << "J[dbg]F2: [gas.tostring()] ~ [ngas.tostring()]" + +/obj/machinery/junction/process() + + //var/dbg + //if(tag == "dbg1") + // dbg = 1 + //else if(tag == "dbg2") + // dbg = 2 + + //if(dbg) world.log << "J[dbg]P: [gas.tostring()] ~ [ngas.tostring()]" + + var/delta_gt + + if(vnode1) + delta_gt = FLOWFRAC * ( vnode1.get_gas_val(src) - gas.tot_gas() / capmult) + calc_delta( src, gas, ngas, vnode1, delta_gt) //, dbg) + + // if(dbg) world.log << "J[dbg]T1: [delta_gt] >> [gas.tostring()] ~ [ngas.tostring()]" + else + leak_to_turf(1) + + if(vnode2) + delta_gt = FLOWFRAC * ( vnode2.get_gas_val(src) - gas.tot_gas() / capmult) + calc_delta( src, gas, ngas, vnode2, delta_gt) //, dbg) + + // if(dbg) world.log << "J[dbg]T2: [delta_gt] >> [gas.tostring()] ~ [ngas.tostring()]" + else + leak_to_turf(2) + + +/obj/machinery/junction/get_gas_val(from) + return gas.tot_gas()/capmult + +/obj/machinery/junction/get_gas(from) + return gas + +/obj/machinery/junction/proc/leak_to_turf(var/port) + + var/turf/T + + + switch(port) + if(1) + T = get_step(src, dir) + if(2) + T = get_step(src, turn(dir, 180) ) + + if(T.density) + T = src.loc + if(T.density) + return + + flow_to_turf(gas, ngas, T) + + + +/proc/calc_delta(obj/machinery/source, obj/substance/gas/sgas, obj/substance/gas/sngas, obj/machinery/target, amount, dbg=0) + + var/obj/substance/gas/tgas = target.get_gas(source) + + var/obj/substance/gas/ndelta = new() + + /*if(dbg) + if(amount>0) + world.log << "[num2text(amount,10)] from [target] to [source]" + else + world.log << "[num2text(-amount,10)] from [source] to [target]" + dbg = 0 + */ + //if(dbg) world.log << "CalcDelta: [source] ~ [sgas.tostring()] ~ [sngas.tostring()]\n[target] ~ [tgas.tostring()] : [amount]" + + + if(amount < 0) // then flowing from source to target + + // if(dbg) + // world.log << "[amount]<0" + + ndelta.set_frac(sgas, -amount) // this is fraction of the gas which will be transfered to other node + + // if(dbg) + // world.log << "ND: [ndelta.tostring()]" + + + sngas.sub_delta(ndelta) // subtract off the fraction which is gone + + // if(dbg) + // world.log << "SND: [sngas.tostring()]" + + else // flowing from target to source + // if(dbg) + // world.log << "[amount]>0" + + ndelta.set_frac(tgas, amount) // fraction of gas from the other node + // if(dbg) + // world.log << "ND: [ndelta.tostring()]" + + sngas.add_delta(ndelta) // add the fraction to the new gas resv + // if(dbg) + // world.log << "SND: [sngas.tostring()]" + + +/obj/substance/gas/proc/tostring() + return "Tot: [src.tot_gas()] ; [oxygen]/[n2]/#[plasma]/[co2]/[sl_gas] ; Temp:[temperature]" + + +/obj/machinery/vent/New() + + ..() + p_dir = dir + gas = new/obj/substance/gas(src) + gas.maximum = capacity + ngas = new/obj/substance/gas() + gasflowlist += src + + +/obj/machinery/vent/buildnodes() + + var/turf/T = get_step(src.loc, src.dir) + var/fdir = turn(src.p_dir, 180) + + for(var/obj/machinery/M in T) + if(M.p_dir & fdir) + src.node = M + break + + if(node) vnode = node.getline() + + return + + +/obj/machinery/vent/get_gas_val(from) + return gas.tot_gas()/2 + +/obj/machinery/vent/get_gas(from) + return gas + + +/obj/machinery/vent/gas_flow() + +// var/dbg = (suffix=="d") && Debug + //if(dbg) world.log << "V[tag]F1: [gas.tot_gas()] ~ [ngas.tot_gas()]" + gas.replace_by(ngas) + //if(dbg) world.log << "V[tag]F2: [gas.tot_gas()] ~ [ngas.tot_gas()]" + +/obj/machinery/vent/process() + + +// var/dbg = (suffix=="d") && Debug + //if(dbg) world.log << "V[tag]T1: [gas.tot_gas()] ~ [ngas.tot_gas()]" + + //if(suffix=="dbgp") + // world.log << "VP" + // Plasma() + + var/delta_gt + + var/turf/T = src.loc + + delta_gt = FLOWFRAC * (gas.tot_gas() / capmult) + //var/ng = ngas.tot_gas() + ngas.turf_add(T, delta_gt) + + //if(dbg) world.log << "[num2text(ng-ngas.tot_gas(),10)] from vent to turf" + //if(dbg) world.log << "V[tag]T2: [gas.tot_gas()] ~ [ngas.tot_gas()]" + + if(vnode) + + //if(dbg) world.log << "V[tag]N1: [gas.tot_gas()] ~ [ngas.tot_gas()]" + + delta_gt = FLOWFRAC * ( vnode.get_gas_val(src) - gas.tot_gas() / capmult) + + calc_delta( src, gas, ngas, vnode, delta_gt)//, dbg) + + //if(dbg) world.log << "V[tag]N2: [gas.tot_gas()] ~ [ngas.tot_gas()]" + + else + leak_to_turf() + + + +/obj/machinery/vent/proc/leak_to_turf() +// note this is a leak from the node, not the vent itself +// thus acts as a link between the vent turf and the turf in step(dir) + + var/turf/T = get_step(src, dir) + if(T && !T.density) + flow_to_turf(gas, ngas, T) + + +// inlet - equilibrates between pipe contents and turf +// very similar to vent, except that a vent always dumps pipe gas into turf +/obj/machinery/inlet/New() + + ..() + + p_dir = dir + gas = new/obj/substance/gas(src) + gas.maximum = capacity + ngas = new/obj/substance/gas() + gasflowlist += src + + +/obj/machinery/inlet/buildnodes() + + var/turf/T = get_step(src.loc, src.dir) + var/fdir = turn(src.p_dir, 180) + + for(var/obj/machinery/M in T) + if(M.p_dir & fdir) + src.node = M + break + + if(node) vnode = node.getline() + + return + + +/obj/machinery/inlet/get_gas_val(from) + return gas.tot_gas()/2 + +/obj/machinery/inlet/get_gas(from) + return gas + + +/obj/machinery/inlet/gas_flow() + + var/dbg = (suffix=="d") && Debug + if(dbg) world.log << "I[tag]F1: [gas.tot_gas()] ~ [ngas.tot_gas()]" + gas.replace_by(ngas) + if(dbg) world.log << "I[tag]F2: [gas.tot_gas()] ~ [ngas.tot_gas()]" + +/obj/machinery/inlet/process() + + + var/dbg = (suffix=="d") && Debug + if(dbg) world.log << "I[tag]T1: [gas.tot_gas()] ~ [ngas.tot_gas()]" + + //if(suffix=="dbgp") + // world.log << "VP" + // Plasma() + + var/delta_gt + + var/turf/T = src.loc + + // this is the difference between vent and inlet + + if(T && !T.density) + flow_to_turf(gas, ngas, T, dbg) // act as gas leak + + if(dbg) world.log << "I[tag]T2: [gas.tot_gas()] ~ [ngas.tot_gas()]" + + if(vnode) + + //if(dbg) world.log << "V[tag]N1: [gas.tot_gas()] ~ [ngas.tot_gas()]" + + delta_gt = FLOWFRAC * ( vnode.get_gas_val(src) - gas.tot_gas() / capmult) + + calc_delta( src, gas, ngas, vnode, delta_gt)//, dbg) + + //if(dbg) world.log << "V[tag]N2: [gas.tot_gas()] ~ [ngas.tot_gas()]" + + else + leak_to_turf() + + + +/obj/machinery/inlet/proc/leak_to_turf() +// note this is a leak from the node, not the inlet itself +// thus acts as a link between the inlet turf and the turf in step(dir) + + var/turf/T = get_step(src, dir) + if(T && !T.density) + flow_to_turf(gas, ngas, T) + + + +// standard proc for all machines - passed gas/ngas as arguments +// equilibrate a pipe object and a turf's gas content + +/obj/machinery/proc/flow_to_turf(var/obj/substance/gas/sgas, var/obj/substance/gas/sngas, var/turf/T, var/dbg = 0) + + if(dbg) world.log << "FTT: G=[sgas.tostring()] ~ N=[sngas.tostring()]" + if(dbg) world.log << "T=[T.tostring()]" + + + + var/t_tot = T.tot_gas() * 0.2 // partial pressure of turf gas at pipe, for the moment + + var/delta_gt = FLOWFRAC * ( t_tot - sgas.tot_gas() / capmult ) + + if(dbg) world.log << "FTT: dgt=[delta_gt]" + + var/obj/substance/gas/ndelta = new() + + if(delta_gt < 0) // flow from pipe to turf + + //world.log << "FTT<0" + ndelta.set_frac(sgas, -delta_gt) // ndelta contains gas to transfer to turf + //world.log << "ND=[ndelta.tostring()]" + sngas.sub_delta(ndelta) // update new gas to remove the amount transfered + //world.log << "SN=[sngas.tostring()]" + ndelta.turf_add(T, -1) // add all of ndelta to turf + //world.log << "T=[T.tostring()]" + + //world.log << "LTT: [num2text(-delta_gt,10)] from [sgas.loc] to turf" + + + else // flow from turf to pipe + if(dbg) world.log << "FTT>0" + + sngas.turf_take(T, delta_gt) // grab gas from turf and direcly add it to the new gas + if(dbg) world.log << "SN=[sngas.tostring()]" + if(dbg) world.log << "T=[T.tostring()]" + + if(dbg) world.log << "LTT: [num2text(delta_gt,10)] from turf to [sgas.loc]" + + T.res_vars() // update turf gas vars for both cases + + + +/turf/proc/tostring() + var/obj/substance/gas/G = src.get_gas() + return G.tostring() + +/proc/Plasma() + + var/mplas = 0 + + for(var/obj/machinery/M in machines) + if(M.suffix=="dbgp") + + var/obj/substance/gas/G = M.get_gas() + var/p = G.plasma + + mplas += p + + world.log << "[M]=[num2text(p, 10)] \..." + + + var/tplas = 0 + + for(var/turf/station/engine/floor/T in world) + tplas += T.poison + + world.log << "\nTotals: M=[num2text(mplas, 10)] T=[num2text(tplas, 10)], all = [num2text(mplas+tplas, 10)]" + + + +// on-off valve + +/obj/machinery/valve/New() + ..() + gas1 = new/obj/substance/gas(src) + ngas1 = new/obj/substance/gas() + gas2 = new/obj/substance/gas(src) + ngas2 = new/obj/substance/gas() + + gasflowlist += src + switch(dir) + if(1, 2) + p_dir = 3 + if(4,8) + p_dir = 12 + + icon_state = "valve[open]" + +/obj/machinery/valve/examine() + set src in oview(1) + + usr << "[desc] It is [ open? "open" : "closed"]." + + + +/obj/machinery/valve/buildnodes() + + var/turf/T = src.loc + + node1 = get_machine(level, T, dir ) // the h/e pipe + + node2 = get_machine(level, T , turn(dir, 180) ) // the regular pipe + + if(node1) vnode1 = node1.getline() + if(node2) vnode2 = node2.getline() + + return + + +/obj/machinery/valve/gas_flow() + + gas1.replace_by(ngas1) + gas2.replace_by(ngas2) + + +/obj/machinery/valve/process() + + + var/delta_gt + + if(vnode1) + delta_gt = FLOWFRAC * ( vnode1.get_gas_val(src) - gas1.tot_gas() / capmult) + calc_delta( src, gas1, ngas1, vnode1, delta_gt) + + else + leak_to_turf(1) + + if(vnode2) + delta_gt = FLOWFRAC * ( vnode2.get_gas_val(src) - gas2.tot_gas() / capmult) + calc_delta( src, gas2, ngas2, vnode2, delta_gt) + + else + leak_to_turf(2) + + + if(open) // valve operating, so transfer btwen resv1 & 2 + + delta_gt = FLOWFRAC * (gas1.tot_gas() / capmult - gas2.tot_gas() / capmult) + + var/obj/substance/gas/ndelta = new() + + if(delta_gt < 0) // then flowing from R2 to R1 + + ndelta.set_frac(gas2, -delta_gt) + + ngas2.sub_delta(ndelta) + ngas1.add_delta(ndelta) + + else // flowing from R1 to R2 + ndelta.set_frac(gas1, delta_gt) + ngas2.add_delta(ndelta) + ngas1.sub_delta(ndelta) + + + + +/obj/machinery/valve/get_gas_val(from) + if(from == vnode2) + return gas2.tot_gas()/capmult + else + return gas1.tot_gas()/capmult + +/obj/machinery/valve/get_gas(from) + if(from == vnode2) + return gas2 + return gas1 + +/obj/machinery/valve/proc/leak_to_turf(var/port) + + var/turf/T + + + switch(port) + if(1) + T = get_step(src, dir) + if(2) + T = get_step(src, turn(dir, 180) ) + + if(T.density) + T = src.loc + if(T.density) + return + + if(port==1) + flow_to_turf(gas1, ngas1, T) + else + flow_to_turf(gas2, ngas2, T) + +/obj/machinery/valve/attack_paw(mob/user) + attack_hand(user) + +/obj/machinery/valve/attack_hand(mob/user) + ..() + add_fingerprint(user) +// if(stat & NOPOWER) return + +// use_power(5) + + if(!open) // now opening + flick("valve01", src) + icon_state = "valve1" + sleep(10) + else // now closing + flick("valve10", src) + icon_state = "valve0" + sleep(10) + open = !open + diff --git a/main-src/Code/overview.dm b/main-src/Code/overview.dm new file mode 100644 index 0000000..efd52ad --- /dev/null +++ b/main-src/Code/overview.dm @@ -0,0 +1,355 @@ +//#define AMAP + +/obj/machinery/computer/security/verb/station_map() + set name = ".map" + set src in view(1) + usr.machine = src + + if(config.loggame) world.log << "GAME: [usr]([usr.key]) used station map L[maplevel] in [src.loc.loc]" + + src.drawmap(usr) + +/obj/machinery/computer/security/proc/drawmap(var/mob/user as mob) + + var/icx = round(world.maxx/16) + 1 + var/icy = round(world.maxy/16) + 1 + + var/xoff = round( (icx*16-world.maxx)-2) + var/yoff = round( (icy*16-world.maxy)-2) + + var/icount = icx * icy + + + var/list/imap = list() + +#ifdef AMAP + + for(var/i = 0; i=0.995) + overlays += image('power.dmi', "cell-o2") + else + overlays += image('power.dmi', "cell-o1") + +/obj/item/weapon/cell/proc/percent() // return % charge of cell + return 100.0*charge/maxcharge + +/obj/item/weapon/cell/examine() + set src in view(1) + if(usr && !usr.stat) + if(maxcharge == 1000) + usr << "[desc]\nThe charge meter reads [round(src.percent() )]%." + else + usr << "A high-capacity rechargable electrochemical power cell.\nThe charge meter reads [round(src.percent() )]%." + + + +// common helper procs for all power machines + +/obj/machinery/power/proc/add_avail(var/amount) + if(powernet) + powernet.newavail += amount + +/obj/machinery/power/proc/add_load(var/amount) + if(powernet) + powernet.newload += amount + +/obj/machinery/power/proc/surplus() + if(powernet) + return powernet.avail-powernet.load + else + return 0 + +/obj/machinery/power/proc/avail() + if(powernet) + return powernet.avail + else + return 0 + +// the Area Power Controller (APC), formerly Power Distribution Unit (PDU) +// one per area, needs wire conection to power network + +// controls power to devices in that area +// may be opened to change power cell +// three different channels (lighting/equipment/environ) - may each be set to on, off, or auto + +/obj/machinery/power/apc/New() + ..() + + // offset 24 pixels in direction of dir + // this allows the APC to be embedded in a wall, yet still inside an area + + tdir = dir // to fix Vars bug + dir = SOUTH + + pixel_x = (tdir & 3)? 0 : (tdir == 4 ? 24 : -24) + pixel_y = (tdir & 3)? (tdir ==1 ? 24 : -24) : 0 + + + // is starting with a power cell installed, create it and set its charge level + if(cell_type) + src.cell = new/obj/item/weapon/cell(src) + cell.maxcharge = cell_type==1 ? 1000 : 5000 // if type=2, make a hp cell + cell.charge = start_charge * cell.maxcharge / 100.0 // (convert percentage to actual value) + + + var/area/A = src.loc.loc + + if(isarea(A)) + src.area = A + + updateicon() + + // create a terminal object at the same position as original turf loc + // wires will attach to this + terminal = new/obj/machinery/power/terminal(src.loc) + terminal.dir = tdir + terminal.master = src + + spawn(5) + src.update() + +/obj/machinery/power/apc/examine() + set src in oview(1) + + if(stat & BROKEN) return + + if(usr && !usr.stat) + usr << "A control terminal for the area electrical systems." + if(opened) + usr << "The cover is open and the power cell is [ cell ? "installed" : "missing"]." + else + usr << "The cover is closed." + + + +// update the APC icon to show the three base states +// also add overlays for indicator lights +/obj/machinery/power/apc/proc/updateicon() + if(opened) + icon_state = "[ cell ? "apc2" : "apc1" ]" // if opened, show cell if it's inserted + src.overlays = null // also delete all overlays + else + icon_state = "apc0" + + // if closed, update overlays for channel status + + src.overlays = null + + overlays += image('power.dmi', "apcox-[locked]") // 0=blue 1=red + overlays += image('power.dmi', "apco3-[charging]") // 0=red, 1=yellow/black 2=green + + + if(operating) + overlays += image('power.dmi', "apco0-[equipment]") // 0=red, 1=green, 2=blue + overlays += image('power.dmi', "apco1-[lighting]") + overlays += image('power.dmi', "apco2-[environ]") + + + +//attack with an item - open/close cover, insert cell, or (un)lock interface + +/obj/machinery/power/apc/attackby(obj/item/weapon/W, mob/user) + + if(stat & BROKEN) return + + if (istype(W, /obj/item/weapon/screwdriver)) // screwdriver means open or close the cover + if(opened) + opened = 0 + updateicon() + else + if(coverlocked) + user << "The cover is locked and cannot be opened." + else + opened = 1 + updateicon() + + else if (istype(W, /obj/item/weapon/cell) && opened) // trying to put a cell inside + if(cell) + user << "There is a power cell already installed." + else + user.drop_item() + W.loc = src + cell = W + user << "You insert the power cell." + chargecount = 0 + + updateicon() + else if (istype(W, /obj/item/weapon/card/id) ) // trying to unlock the interface with an ID card + + if(opened) + user << "You must close the cover to swipe an ID card." + else + var/obj/item/weapon/card/id/I = W + if (I.check_access(access, allowed)) + locked = !locked + user << "You [ locked ? "lock" : "unlock"] the APC interface." + updateicon() + else + user << "\red Access denied." + + else if (istype(W, /obj/item/weapon/card/emag) ) // trying to unlock with an emag card + + if(opened) + user << "You must close the cover to swipe an ID card." + else + flick("apc-spark", src) + sleep(6) + if(prob(50)) + locked = !locked + user << "You [ locked ? "lock" : "unlock"] the APC interface." + updateicon() + else + user << "You fail to [ locked ? "unlock" : "lock"] the APC interface." + + +// attack with hand - remove cell (if cover open) or interact with the APC + +/obj/machinery/power/apc/attack_hand(mob/user) + + add_fingerprint(user) + + if(stat & BROKEN) return + + if(opened) + if(cell) + cell.loc = usr + cell.layer = 20 + if (user.hand ) + user.l_hand = cell + else + user.r_hand = cell + + cell.add_fingerprint(user) + cell.updateicon() + + src.cell = null + user << "You remove the power cell." + charging = 0 + src.updateicon() + + else + // do APC interaction + src.interact(user) + + + +/obj/machinery/power/apc/proc/interact(mob/user) + + if ( (get_dist(src, user) > 1 )) + user.machine = null + user << browse(null, "window=apc") + return + + user.machine = src + var/t = "Area Power Controller ([area.name])
    " + + if(locked) + t += "(Swipe ID card to unlock inteface.)
    " + t += "Main breaker : [operating ? "On" : "Off"]
    " + t += "External power : [ main_status ? (main_status ==2 ? "Good" : "Low") : "None"]
    " + t += "Power cell: [cell ? "[round(cell.percent())]%" : "Not connected."]" + if(cell) + t += " ([charging ? ( charging == 1 ? "Charging" : "Fully charged" ) : "Not charging"])" + t += " ([chargemode ? "Auto" : "Off"])" + + t += "

    Power channels
    "
    +
    +		var/list/L = list ("Off","Off (Auto)", "On", "On (Auto)")
    +
    +		t += "Equipment:    [add_lspace(lastused_equip, 6)] W : [L[equipment+1]]
    " + t += "Lighting: [add_lspace(lastused_light, 6)] W : [L[lighting+1]]
    " + t += "Environmental:[add_lspace(lastused_environ, 6)] W : [L[environ+1]]
    " + + t += "
    Total load: [lastused_light + lastused_equip + lastused_environ] W
    " + t += "
    Cover lock: [coverlocked ? "Engaged" : "Disengaged"]" + + else + t += "(Swipe ID card to lock interface.)
    " + t += "Main breaker: [operating ? "On Off" : "On Off" ]
    " + t += "External power : [ main_status ? (main_status ==2 ? "Good" : "Low") : "None"]
    " + if(cell) + t += "Power cell: [round(cell.percent())]%" + t += " ([charging ? ( charging == 1 ? "Charging" : "Fully charged" ) : "Not charging"])" + t += " ([chargemode ? "Off Auto" : "Off Auto"])" + + else + t += "Power cell: Not connected." + + t += "

    Power channels
    "
    +
    +
    +		t += "Equipment:    [add_lspace(lastused_equip, 6)] W : "
    +		switch(equipment)
    +			if(0)
    +				t += "Off On Auto"
    +			if(1)
    +				t += "Off On Auto (Off)"
    +			if(2)
    +				t += "Off On Auto"
    +			if(3)
    +				t += "Off On Auto (On)"
    +		t +="
    " + + t += "Lighting: [add_lspace(lastused_light, 6)] W : " + + switch(lighting) + if(0) + t += "Off On Auto" + if(1) + t += "Off On Auto (Off)" + if(2) + t += "Off On Auto" + if(3) + t += "Off On Auto (On)" + t +="
    " + + + t += "Environmental:[add_lspace(lastused_environ, 6)] W : " + switch(environ) + if(0) + t += "Off On Auto" + if(1) + t += "Off On Auto (Off)" + if(2) + t += "Off On Auto" + if(3) + t += "Off On Auto (On)" + + + + t += "
    Total load: [lastused_light + lastused_equip + lastused_environ] W
    " + t += "
    Cover lock: [coverlocked ? "Engaged" : "Disengaged"]" + + t += "

    Close" + + t += "
    " + user << browse(t, "window=apc") + return + +/obj/machinery/power/apc/proc/report() + return "[area.name] : [equipment]/[lighting]/[environ] ([lastused_equip+lastused_light+lastused_environ]) : [cell? cell.percent() : "N/C"] ([charging])" + + + + +/obj/machinery/power/apc/proc/update() + if(operating) + area.power_light = (lighting > 1) + area.power_equip = (equipment > 1) + area.power_environ = (environ > 1) + else + area.power_light = 0 + area.power_equip = 0 + area.power_environ = 0 + + area.power_change() + + +/obj/machinery/power/apc/Topic(href, href_list) + + ..() + + if (usr.stat || usr.restrained() ) + return + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + usr << "\red You don't have the dexterity to do this!" + return + + if (( (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + + usr.machine = src + if (href_list["lock"]) + coverlocked = !coverlocked + + else if (href_list["breaker"]) + operating = !operating + src.update() + updateicon() + + else if (href_list["cmode"]) + chargemode = !chargemode + if(!chargemode) + charging = 0 + updateicon() + + else if (href_list["eqp"]) + var/val = text2num(href_list["eqp"]) + + equipment = (val==1) ? 0 : val + + updateicon() + update() + + else if (href_list["lgt"]) + var/val = text2num(href_list["lgt"]) + + lighting = (val==1) ? 0 : val + + updateicon() + update() + else if (href_list["env"]) + var/val = text2num(href_list["env"]) + + environ = (val==1) ? 0 :val + + updateicon() + update() + else if( href_list["close"] ) + usr << browse(null, "window=apc") + usr.machine = null + return + + + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.interact(M) + //Foreach goto(275) + else + usr << browse(null, "window=apc") + usr.machine = null + + return + + + +#define CHARGELEVEL 500 + +/obj/machinery/power/apc/surplus() + if(terminal) + return terminal.surplus() + else + return 0 + +/obj/machinery/power/apc/add_load(var/amount) + if(terminal && terminal.powernet) + terminal.powernet.newload += amount + +/obj/machinery/power/apc/avail() + if(terminal) + return terminal.avail() + else + return 0 + +/obj/machinery/power/apc/process() + + if(stat & BROKEN) + return + + if(!area.requires_power) + return + + area.calc_lighting() + + lastused_light = area.usage(LIGHT) + lastused_equip = area.usage(EQUIP) + lastused_environ = area.usage(ENVIRON) + area.clear_usage() + + lastused_total = lastused_light + lastused_equip + lastused_environ + + + //store states to update icon if any change + var/last_lt = lighting + var/last_eq = equipment + var/last_en = environ + var/last_ch = charging + + + var/excess = surplus() + + if(!src.avail()) + main_status = 0 + else if(excess < 0) + main_status = 1 + else + main_status = 2 + + var/perapc = 0 + if(terminal && terminal.powernet) + perapc = terminal.powernet.perapc + + if(cell) + + // draw power from cell as before + + var/cellused = min(cell.charge, CELLRATE * lastused_total) // clamp deduction to a max, amount left in cell + + cell.charge -= cellused + + + + // set channels depending on how much charge we have left + + + if(cell.charge <= 0) // zero charge, turn all off + equipment = autoset(equipment, 2) + lighting = autoset(lighting, 2) + environ = autoset(environ, 2) + else if(cell.percent() < 15) // <15%, turn off lighting & equipment + equipment = autoset(equipment, 2) + lighting = autoset(lighting, 2) + environ = autoset(environ, 1) + else if(cell.percent() < 30) // <30%, turn off equipment + equipment = autoset(equipment, 2) + lighting = autoset(lighting, 1) + environ = autoset(environ, 1) + else // otherwise all can be on + equipment = autoset(equipment, 1) + lighting = autoset(lighting, 1) + environ = autoset(environ, 1) + + + if(excess > 0 || perapc > lastused_total) // if power excess, or enough anyway, recharge the cell + // by the same amount just used + + cell.charge = min(cell.maxcharge, cell.charge + cellused) + + add_load(cellused/CELLRATE) // add the load used to recharge the cell + + + else // no excess, and not enough per-apc + + if( (cell.charge/CELLRATE+perapc) >= lastused_total) // can we draw enough from cell+grid to cover last usage? + + cell.charge = min(cell.maxcharge, cell.charge + CELLRATE * perapc) //recharge with what we can + + add_load(perapc) // so draw what we can from the grid + charging = 0 + + else // not enough! + charging = 0 // kill everything + chargecount = 0 + equipment = autoset(equipment, 0) + lighting = autoset(lighting, 0) + environ = autoset(environ, 0) + + + + // now trickle-charge the cell + + + if(chargemode && charging == 1) + if(excess > 0) // check to make sure we have enough to charge + + var/ch = min(CHARGELEVEL, (cell.maxcharge - cell.charge)/CELLRATE ) // clamp charging to max free in cell + + ch = min(ch, perapc) // clamp charging to our share + + add_load(CHARGELEVEL) + + cell.charge += ch * CELLRATE // actually recharge the cell + + else + + charging = 0 // stop charging + chargecount = 0 + + + + // show cell as fully charged if so + + if(cell.charge >= cell.maxcharge) + charging = 2 + + + if(chargemode) + if(!charging) + if(excess > CHARGELEVEL) + chargecount++ + else + chargecount = 0 + + + if(chargecount == 5) + + chargecount = 0 + charging = 1 + + else // chargemode off + charging = 0 + chargecount = 0 + + + + + else + // no cell + + // for now, switch everything off + + charging = 0 + chargecount = 0 + equipment = autoset(equipment, 0) + lighting = autoset(lighting, 0) + environ = autoset(environ, 0) + + + + // update icon & area power if anything changed + + + if(last_lt != lighting || last_eq != equipment || last_en != environ || last_ch != charging) + updateicon() + update() + + + + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.interact(M) + + +// val 0=off, 1=off(auto) 2=on 3=on(auto) +// on 0=off, 1=on, 2=autooff + +/proc/autoset(var/val, var/on) + + if(on==0) + if(val==2) // if on, return off + return 0 + else if(val==3) // if auto-on, return auto-off + return 1 + + else if(on==1) + if(val==1) // if auto-off, return auto-on + return 3 + + else if(on==2) + if(val==3) // if auto-on, return auto-off + return 1 + + return val + +// damage and destruction acts + +/obj/machinery/power/apc/meteorhit(var/obj/O as obj) + + set_broken() + return + +/obj/machinery/power/apc/ex_act(severity) + + switch(severity) + if(1.0) + set_broken() + del(src) + return + if(2.0) + if (prob(50)) + set_broken() + if(3.0) + if (prob(25)) + set_broken() + else + return + +/obj/machinery/power/apc/blob_act() + if (prob(50)) + set_broken() + + +/obj/machinery/power/apc/proc/set_broken() + stat |= BROKEN + icon_state = "apc-b" + overlays = null + + operating = 0 + update() + +// the underfloor wiring terminal for the APC +// autogenerated when an APC is placed +// all conduit connects go to this object instead of the APC +// using this solves the problem of having the APC in a wall yet also inside an area + +/obj/machinery/power/terminal/New() + + ..() + + var/turf/T = src.loc + + if(level==1) hide(T.intact) + + +/obj/machinery/power/terminal/hide(var/i) + + if(i) + invisibility = 101 + icon_state = "term-f" + else + invisibility = 0 + icon_state = "term" + + + +// dummy generator object for testing + +/*/obj/machinery/power/generator/verb/set_amount(var/g as num) + set src in view(1) + + gen_amount = g + +*/ + +/obj/machinery/power/generator/New() + ..() + + spawn(5) + circ1 = locate(/obj/machinery/circulator) in get_step(src,WEST) + circ2 = locate(/obj/machinery/circulator) in get_step(src,EAST) + if(!circ1 || !circ2) + stat |= BROKEN + + updateicon() + +/obj/machinery/power/generator/proc/updateicon() + + if(stat & (NOPOWER|BROKEN)) + overlays = null + else + overlays = null + + if(lastgenlev != 0) + overlays += image('power.dmi', "teg-op[lastgenlev]") + + overlays += image('power.dmi', "teg-oc[c1on][c2on]") + +#define GENRATE 0.0017 // generator output coefficient from Q + +/obj/machinery/power/generator/process() + +/* if(circ && circ.gas1) + var/gen = circ.gas2.tot_gas()*max(0, circ.gas2.temperature - 298)/300 + circ.ngas2.temperature = max(298, circ.ngas2.temperature - 50) + + add_avail(gen) +*/ + + if(circ1 && circ2) + + + var/gc = circ1.gas2.shc() + var/gh = circ2.gas2.shc() + + var/tc = circ1.gas2.temperature + var/th = circ2.gas2.temperature + var/deltat = th-tc + + var/eta = (1-tc/th)*0.65 // efficiency 65% of Carnot + + if(gc > 0 && deltat >0) // require some cold gas (for sink) and a positive temp gradient + var/ghoc = gh/gc + + //var/qc = gc*tc + //var/qh = gh*th + + var/fdt = 1/( (1-eta)*ghoc + 1) // min timestep + + fdt = min(fdt, 0.1) // max timestep + + var/q = fdt*eta*gh*(deltat) // heat generated + + var/thp = th - fdt * deltat + var/tcp = tc + fdt * (1 - eta) * (ghoc) * deltat + + lastgen = q * GENRATE + add_avail(lastgen) + + circ1.ngas2.temperature = tcp + circ2.ngas2.temperature = thp + + else + lastgen = 0 + + + + + + // update icon overlays only if displayed level has changed + + var/genlev = max(0, min( round(11*lastgen / 100000), 11)) + if(genlev != lastgenlev) + lastgenlev = genlev + updateicon() + + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.interact(M) + +/obj/machinery/power/generator/attack_hand(mob/user) + + add_fingerprint(user) + + if(stat & (BROKEN|NOPOWER)) return + + interact(user) + + + +/obj/machinery/power/generator/proc/interact(mob/user) + + if ( (get_dist(src, user) > 1 )) + user.machine = null + user << browse(null, "window=teg") + return + + user.machine = src + + var/t = "
    Thermo-Electric Generator
    " + + t += "Output : [round(lastgen)] W

    " + + t += "Cold loop
    " + t += "Temperature Inlet: [round(circ1.ngas1.temperature, 0.1)] K Outlet: [round(circ1.ngas2.temperature, 0.1)] K
    " + + t += "Circulator: [c1on ? "On Off" : "On Off "]
    " + t += "Rate: M - - [add_lspace(c1rate,3)]% + + M
    " + + t += "Hot loop
    " + t += "Temperature Inlet: [round(circ2.ngas1.temperature, 0.1)] K Outlet: [round(circ2.ngas2.temperature, 0.1)] K
    " + + t += "Circulator: [c2on ? "On Off" : "On Off "]
    " + t += "Rate: M - - [add_lspace(c2rate,3)]% + + M
    " + + t += "

    Close" + + t += "
    " + user << browse(t, "window=teg;size=460x300") + return + +/obj/machinery/power/generator/Topic(href, href_list) + ..() + + if (usr.stat || usr.restrained() ) + return + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + usr << "\red You don't have the dexterity to do this!" + return + + //world << "[href] ; [href_list[href]]" + + if (( usr.machine==src && (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + + + if( href_list["close"] ) + usr << browse(null, "window=teg") + usr.machine = null + return + + else if( href_list["c1p"] ) + c1on = !c1on + circ1.control(c1on, c1rate) + updateicon() + else if( href_list["c2p"] ) + c2on = !c2on + circ2.control(c2on, c2rate) + updateicon() + + else if( href_list["c1r"] ) + + var/i = text2num(href_list["c1r"]) + + var/d = 0 + switch(i) + if(-3) + c1rate = 0 + if(3) + c1rate = 100 + + if(1) + d = 1 + if(-1) + d = -1 + if(2) + d = 10 + if(-2) + d = -10 + + c1rate += d + c1rate = max(1, min(100, c1rate)) // clamp to range + + circ1.control(c1on, c1rate) + updateicon() + + else if( href_list["c2r"] ) + + var/i = text2num(href_list["c2r"]) + + var/d = 0 + switch(i) + if(-3) + c2rate = 0 + if(3) + c2rate = 100 + + if(1) + d = 1 + if(-1) + d = -1 + if(2) + d = 10 + if(-2) + d = -10 + + c2rate += d + c2rate = max(1, min(100, c2rate)) // clamp to range + + circ2.control(c2on, c2rate) + updateicon() + + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.interact(M) + //Foreach goto(275) + else + usr << browse(null, "window=teg") + usr.machine = null + + return + +/obj/machinery/power/generator/power_change() + ..() + updateicon() + + +// returns true if the area has power on given channel (or doesn't require power). +// defaults to equipment channel + +/obj/machinery/proc/powered(var/chan = EQUIP) + var/area/A = src.loc.loc // make sure it's in an area + if(!A || !isarea(A)) + return 0 // if not, then not powered + + return A.powered(chan) // return power status of the area + +// increment the power usage stats for an area + +/obj/machinery/proc/use_power(var/amount, var/chan=EQUIP) // defaults to Equipment channel + var/area/A = src.loc.loc // make sure it's in an area + if(!A || !isarea(A)) + return + + A.use_power(amount, chan) + + +/obj/machinery/proc/power_change() // called whenever the power settings of the containing area change + // by default, check equipment channel & set flag + // can override if needed + if(powered()) + stat &= ~NOPOWER + else + + stat |= NOPOWER + return + + +// attach a wire to a power machine - leads from the turf you are standing on + +/obj/machinery/power/attackby(obj/item/weapon/W, mob/user) + + if(istype(W, /obj/item/weapon/cable_coil)) + + var/obj/item/weapon/cable_coil/coil = W + + var/turf/T = user.loc + + if(T.intact || !istype(T, /turf/station/floor)) + return + + if(get_dist(src, user) > 1) + return + + if(!directwired) // only for attaching to directwired machines + return + + var/dirn = get_dir(user, src) + + + for(var/obj/cable/LC in T) + if(LC.d1 == dirn || LC.d2 == dirn) + user << "There's already a cable at that position." + return + + var/obj/cable/NC = new(T) + NC.d1 = 0 + NC.d2 = dirn + NC.add_fingerprint() + NC.updateicon() + NC.update_network() + coil.use(1) + return + else + ..() + return + + +// the power cable object + +/obj/cable/New() + ..() + + + // ensure d1 & d2 reflect the icon_state for entering and exiting cable + + var/dash = findtext(icon_state, "-") + + d1 = text2num( copytext( icon_state, 1, dash ) ) + + d2 = text2num( copytext( icon_state, dash+1 ) ) + + var/turf/T = src.loc // hide if turf is not intact + + if(level==1) hide(T.intact) + + +/obj/cable/Del() // called when a cable is deleted + + if(!defer_powernet_rebuild) // set if network will be rebuilt manually + + if(netnum && powernets && powernets.len >= netnum) // make sure cable & powernet data is valid + var/datum/powernet/PN = powernets[netnum] + PN.cut_cable(src) // updated the powernets + else + if(Debug) world.log << "Defered cable deletion at [x],[y]: #[netnum]" + ..() // then go ahead and delete the cable + +/obj/cable/hide(var/i) + + invisibility = i ? 101 : 0 + updateicon() + +/obj/cable/proc/updateicon() + if(invisibility) + icon_state = "[d1]-[d2]-f" + else + icon_state = "[d1]-[d2]" + + +/obj/cable/attackby(obj/item/weapon/W, mob/user) + + var/turf/T = src.loc + if(T.intact) + return + + if(istype(W, /obj/item/weapon/wirecutters)) + + if(src.d1) // 0-X cables are 1 unit, X-X cables are 2 units long + new/obj/item/weapon/cable_coil(T, 2) + else + new/obj/item/weapon/cable_coil(T, 1) + + for(var/mob/O in viewers(src, null)) + O.show_message("[user] cuts the cable.", 1) + + shock(user, 50) + + defer_powernet_rebuild = 0 // to fix no-action bug + del(src) + + return // not needed, but for clarity + + + else if(istype(W, /obj/item/weapon/cable_coil)) + var/obj/item/weapon/cable_coil/coil = W + + coil.cable_join(src, user) + //note do shock in cable_join + else + shock(user, 10) + + src.add_fingerprint(user) + +// shock the user with probability prb + +/obj/cable/proc/shock(mob/user, prb) + + if(!prob(prb)) + return + + if(!netnum) // unconnected cable is unpowered + return + + var/datum/powernet/PN // find the powernet + if(powernets && powernets.len >= netnum) + PN = powernets[netnum] + + if(PN && PN.avail > 0) // is it powered? + + + + var/prot = 0 + + if(istype(user, /mob/human)) + var/mob/human/H = user + if(H.gloves) + var/obj/item/weapon/clothing/gloves/G = H.gloves + + prot = G.elec_protect + + if(prot == 10) // elec insulted gloves protect completely + return + + prot++ + + var/obj/effects/sparks/O = new /obj/effects/sparks( src.loc ) + O.dir = pick(NORTH, SOUTH, EAST, WEST) + spawn( 0 ) + O.Life() + + if(PN.avail > 10000) + user.burn(5e7/prot) + + user << "\red You feel a powerful shock course through your body!" + sleep(1) + + user.stunned = 120/prot + user.weakened = 20/prot + //Foreach goto(72) + for(var/mob/M in hearers(src, null)) + if(M == user) + continue + if (!( M.blinded )) + M << "\red [user.name] was shocked by the cable!" + else + M << "\red You hear a heavy electrical crack." + + + + + +/obj/cable/ex_act(severity) + + switch(severity) + if(1.0) + del(src) + if(2.0) + if (prob(50)) + new/obj/item/weapon/cable_coil(src.loc, src.d1 ? 2 : 1) + del(src) + + if(3.0) + if (prob(25)) + new/obj/item/weapon/cable_coil(src.loc, src.d1 ? 2 : 1) + del(src) + else + return + +/obj/cable/burn(fi_amount) + + if(fi_amount > 1800000) + var/turf/T = src.loc + if(!T.intact) + if(prob(10)) + defer_powernet_rebuild = 0 + del(src) + + + + +// the cable coil object, used for laying cable + +/obj/item/weapon/cable_coil/New(loc, length = MAXCOIL) + src.amount = length + pixel_x = rand(-2,2) + pixel_y = rand(-2,2) + updateicon() + ..(loc) + + +/obj/item/weapon/cable_coil/proc/updateicon() + if(amount == 1) + icon_state = "coil1" + name = "cable piece" + else if(amount == 2) + icon_state = "coil2" + name = "cable piece" + else + icon_state = "coil" + name = "cable coil" + +/obj/item/weapon/cable_coil/examine() + set src in view(1) + + if(amount == 1) + usr << "A short piece of power cable." + else if(amount == 1) + usr << "A piece of power cable." + else + usr << "A coil of power cable. There are [amount] lengths of cable in the coil." + + + +/obj/item/weapon/cable_coil/attackby(obj/item/weapon/W, mob/user) + + if( istype(W, /obj/item/weapon/wirecutters) && src.amount > 1) + src.amount-- + new/obj/item/weapon/cable_coil(user.loc, 1) + user << "You cut a piece off the cable coil." + src.updateicon() + return + + else if( istype(W, /obj/item/weapon/cable_coil) ) + var/obj/item/weapon/cable_coil/C = W + if(C.amount == MAXCOIL) + user << "The coil is too long, you cannot add any more cable to it." + return + + if( (C.amount + src.amount <= MAXCOIL) ) + C.amount += src.amount + user << "You join the cable coils together." + C.updateicon() + del(src) + return + + else + user << "You transfer [MAXCOIL - src.amount ] length\s of cable from one coil to the other." + src.amount -= (MAXCOIL-C.amount) + src.updateicon() + C.amount = MAXCOIL + C.updateicon() + return + + + +/obj/item/weapon/cable_coil/proc/use(var/used) + if(src.amount < used) + return 0 + else if (src.amount == used) + del(src) + else + amount -= used + updateicon() + return 1 + + + +// called when cable_coil is clicked on a turf/station/floor + +/obj/item/weapon/cable_coil/proc/turf_place(turf/station/floor/F, mob/user) + + if(!isturf(user.loc)) + return + + if(get_dist(F,user) > 1) + user << "You can't lay cable at a place that far away." + return + + if(F.intact) // if floor is intact, complain + user << "You can't lay cable there unless the floor tiles are removed." + return + + else + var/dirn + + if(user.loc == F) + dirn = user.dir // if laying on the tile we're on, lay in the direction we're facing + else + dirn = get_dir(F, user) + + for(var/obj/cable/LC in F) + if(LC.d1 == dirn || LC.d2 == dirn) + user << "There's already a cable at that position." + return + + var/obj/cable/C = new(F) + C.d1 = 0 + C.d2 = dirn + C.add_fingerprint(user) + C.updateicon() + C.update_network() + use(1) + //src.laying = 1 + //last = C + + +// called when cable_coil is click on an installed obj/cable + +/obj/item/weapon/cable_coil/proc/cable_join(obj/cable/C, mob/user) + + + var/turf/U = user.loc + if(!isturf(U)) + return + + var/turf/T = C.loc + + if(!isturf(T) || T.intact) // sanity checks, also stop use interacting with T-scanner revealed cable + return + + if(get_dist(C, user) > 1) // make sure it's close enough + user << "You can't lay cable at a place that far away." + return + + + if(U == T) // do nothing if we clicked a cable we're standing on + return // may change later if can think of something logical to do + + var/dirn = get_dir(C, user) + + if(C.d1 == dirn || C.d2 == dirn) // one end of the clicked cable is pointing towards us + if(U.intact) // can't place a cable if the floor is complete + user << "You can't lay cable there unless the floor tiles are removed." + return + else + // cable is pointing at us, we're standing on an open tile + // so create a stub pointing at the clicked cable on our tile + + var/fdirn = turn(dirn, 180) // the opposite direction + + for(var/obj/cable/LC in U) // check to make sure there's not a cable there already + if(LC.d1 == fdirn || LC.d2 == fdirn) + user << "There's already a cable at that position." + return + + var/obj/cable/NC = new(U) + NC.d1 = 0 + NC.d2 = fdirn + NC.add_fingerprint() + NC.updateicon() + NC.update_network() + use(1) + C.shock(user, 25) + + return + else if(C.d1 == 0) // exisiting cable doesn't point at our position, so see if it's a stub + // if so, make it a full cable pointing from it's old direction to our dirn + + var/nd1 = C.d2 // these will be the new directions + var/nd2 = dirn + + if(nd1 > nd2) // swap directions to match icons/states + nd1 = dirn + nd2 = C.d2 + + + for(var/obj/cable/LC in T) // check to make sure there's no matching cable + if(LC == C) // skip the cable we're interacting with + continue + if(LC.d1 == nd1 || LC.d2 == nd1 || LC.d1 == nd2 || LC.d2 == nd2) // make sure no cable matches either direction + user << "There's already a cable at that position." + return + C.shock(user, 25) + del(C) + var/obj/cable/NC = new(T) + NC.d1 = nd1 + NC.d2 = nd2 + NC.add_fingerprint() + NC.updateicon() + NC.update_network() + + use(1) + + return + + +// called when a new cable is created +// can be 1 of 3 outcomes: +// 1. Isolated cable (or only connects to isolated machine) -> create new powernet +// 2. Joins to end or bridges loop of a single network (may also connect isolated machine) -> add to old network +// 3. Bridges gap between 2 networks -> merge the networks (must rebuild lists also) + + + +/obj/cable/proc/update_network() + // easy way: do /makepowernets again + makepowernets() + // do things more logically if this turns out to be too slow + // may just do this for case 3 anyway (simpler than refreshing list) + + + + + + + +// the powernet datum +// each contiguous network of cables & nodes + + +// rebuild all power networks from scratch + +/proc/makepowernets() + + var/netcount = 0 + powernets = list() + + for(var/obj/cable/PC in world) + PC.netnum = 0 + for(var/obj/machinery/power/M in machines) + if(M.netnum >=0) + M.netnum = 0 + + + for(var/obj/cable/PC in world) + if(!PC.netnum) + PC.netnum = ++netcount + + if(Debug) world.log << "Starting mpn at [PC.x],[PC.y] ([PC.d1]/[PC.d2]) #[netcount]" + powernet_nextlink(PC, PC.netnum) + + if(Debug) world.log << "[netcount] powernets found" + + for(var/L = 1 to netcount) + var/datum/powernet/PN = new() + //PN.tag = "powernet #[L]" + powernets += PN + PN.number = L + + + for(var/obj/cable/C in world) + var/datum/powernet/PN = powernets[C.netnum] + PN.cables += C + + for(var/obj/machinery/power/M in machines) + if(M.netnum<=0) // APCs have netnum=-1 so they don't count as network nodes directly + continue + + M.powernet = powernets[M.netnum] + M.powernet.nodes += M + + + + + +// returns a list of all power-related objects (nodes, cable, junctions) in turf, +// excluding source, that match the direction d +// if unmarked==1, only return those with netnum==0 + +/proc/power_list(var/turf/T, var/source, var/d, var/unmarked=0) + var/list/result = list() + var/fdir = (!d)? 0 : turn(d, 180) // the opposite direction to d (or 0 if d==0) + + for(var/obj/machinery/power/P in T) + if(P.netnum < 0) // exclude APCs + continue + + if(P.directwired) // true if this machine covers the whole turf (so can be joined to a cable on neighbour turf) + if(!unmarked || !P.netnum) + result += P + else if(d == 0) // otherwise, need a 0-X cable on same turf to connect + if(!unmarked || !P.netnum) + result += P + + + for(var/obj/cable/C in T) + if(C.d1 == fdir || C.d2 == fdir) + if(!unmarked || !C.netnum) + result += C + + result -= source + + return result + + +/obj/cable/proc/get_connections() + + var/list/res = list() // this will be a list of all connected power objects + + var/turf/T + if(!d1) + T = src.loc // if d1=0, same turf as src + else + T = get_step(src, d1) + + res += power_list(T, src , d1, 1) + + T = get_step(src, d2) + + res += power_list(T, src, d2, 1) + + return res + + +/obj/machinery/power/proc/get_connections() + + if(!directwired) + return get_indirect_connections() + + var/list/res = list() + var/cdir + + for(var/turf/T in orange(1, src)) + + cdir = get_dir(T, src) + + for(var/obj/cable/C in T) + + if(C.netnum) + continue + + if(C.d1 == cdir || C.d2 == cdir) + res += C + + return res + +/obj/machinery/power/proc/get_indirect_connections() + + var/list/res = list() + + for(var/obj/cable/C in src.loc) + + if(C.netnum) + continue + + if(C.d1 == 0) + res += C + + return res + + +/proc/powernet_nextlink(var/obj/O, var/num) + + var/list/P + + //world.log << "start: [O] at [O.x].[O.y]" + + + while(1) + + if( istype(O, /obj/cable) ) + var/obj/cable/C = O + + C.netnum = num + + else if( istype(O, /obj/machinery/power) ) + + var/obj/machinery/power/M = O + + M.netnum = num + + + if( istype(O, /obj/cable) ) + var/obj/cable/C = O + + P = C.get_connections() + + else if( istype(O, /obj/machinery/power) ) + + var/obj/machinery/power/M = O + + P = M.get_connections() + + if(P.len == 0) + //world.log << "end1" + return + + O = P[1] + + + for(var/L = 2 to P.len) + + powernet_nextlink(P[L], num) + + //world.log << "next: [O] at [O.x].[O.y]" + + + + + + + +// cut a powernet at this cable object + +/datum/powernet/proc/cut_cable(var/obj/cable/C) + + var/turf/T1 = C.loc + if(C.d1) + T1 = get_step(C, C.d1) + + var/turf/T2 = get_step(C, C.d2) + + var/list/P1 = power_list(T1, C, C.d1) // what joins on to cut cable in dir1 + + var/list/P2 = power_list(T2, C, C.d2) // what joins on to cut cable in dir2 + + if(Debug) + for(var/obj/O in P1) + world.log << "P1: [O] at [O.x] [O.y] : [istype(O, /obj/cable) ? "[O:d1]/[O:d2]" : null] " + for(var/obj/O in P2) + world.log << "P2: [O] at [O.x] [O.y] : [istype(O, /obj/cable) ? "[O:d1]/[O:d2]" : null] " + + + + if(P1.len == 0 || P2.len ==0) // if nothing in either list, then the cable was an endpoint + // no need to rebuild the powernet, just remove cut cable from the list + cables -= C + if(Debug) world.log << "Was end of cable" + return + + // zero the netnum of all cables & nodes in this powernet + + for(var/obj/cable/OC in cables) + OC.netnum = 0 + for(var/obj/machinery/power/OM in nodes) + OM.netnum = 0 + + + // remove the cut cable from the network + C.netnum = -1 + C.loc = null + cables -= C + + + + + powernet_nextlink(P1[1], number) // propagate network from 1st side of cable, using current netnum + + // now test to see if propagation reached to the other side + // if so, then there's a loop in the network + + var/notlooped = 0 + for(var/obj/O in P2) + if( istype(O, /obj/machinery/power) ) + var/obj/machinery/power/OM = O + if(OM.netnum != number) + notlooped = 1 + break + else if( istype(O, /obj/cable) ) + var/obj/cable/OC = O + if(OC.netnum != number) + notlooped = 1 + break + + if(notlooped) + + // not looped, so make a new powernet + + var/datum/powernet/PN = new() + //PN.tag = "powernet #[L]" + powernets += PN + PN.number = powernets.len + + if(Debug) world.log << "Was not looped: spliting PN#[number] ([cables.len];[nodes.len])" + + for(var/obj/cable/OC in cables) + + if(!OC.netnum) // non-connected cables will have netnum==0, since they weren't reached by propagation + + OC.netnum = PN.number + cables -= OC + PN.cables += OC // remove from old network & add to new one + + for(var/obj/machinery/power/OM in nodes) + if(!OM.netnum) + OM.netnum = PN.number + OM.powernet = PN + nodes -= OM + PN.nodes += OM // same for power machines + + if(Debug) + world.log << "Old PN#[number] : ([cables.len];[nodes.len])" + world.log << "New PN#[PN.number] : ([PN.cables.len];[PN.nodes.len])" + + else + if(Debug) + world.log << "Was looped." + //there is a loop, so nothing to be done + return + + return + + + +/datum/powernet/proc/reset() + load = newload + newload = 0 + avail = newavail + newavail = 0 + + + viewload = 0.8*viewload + 0.2*load + + viewload = round(viewload) + + var/numapc = 0 + + for(var/obj/machinery/power/terminal/term in nodes) + if( istype( term.master, /obj/machinery/power/apc ) ) + numapc++ + + if(numapc) + perapc = avail/numapc + + netexcess = avail - load + + if( netexcess > 100) // if there was excess power last cycle + for(var/obj/machinery/power/smes/S in nodes) // find the SMESes in the network + S.restore() // and restore some of the power that was used + + + +// the power monitoring computer +// for the moment, just report the status of all APCs in the same powernet + +/obj/machinery/power/monitor/attack_hand(mob/user) + add_fingerprint(user) + + if(stat & (BROKEN|NOPOWER)) + return + interact(user) + + +/obj/machinery/power/monitor/proc/interact(mob/user) + + if ( (get_dist(src, user) > 1 ) || (stat & (BROKEN|NOPOWER)) ) + user.machine = null + user << browse(null, "window=powcomp") + return + + + user.machine = src + var/t = "Power Monitoring
    " + + + if(!powernet) + t += "\red No connection" + else + + var/list/L = list() + for(var/obj/machinery/power/terminal/term in powernet.nodes) + if(istype(term.master, /obj/machinery/power/apc)) + var/obj/machinery/power/apc/A = term.master + L += A + + t += "
    Total power: [powernet.avail] W
    Total load: [num2text(powernet.viewload,10)] W
    " + + t += "" + + if(L.len > 0) + + t += "Area Eqp./Lgt./Env. Load Cell
    " + + var/list/S = list(" Off","AOff"," On", " AOn") + var/list/chg = list("N","C","F") + + for(var/obj/machinery/power/apc/A in L) + + t += copytext(add_tspace(A.area.name, 30), 1, 30) + t += " [S[A.equipment+1]] [S[A.lighting+1]] [S[A.environ+1]] [add_lspace(A.lastused_total, 6)] [A.cell ? "[add_lspace(round(A.cell.percent()), 3)]% [chg[A.charging+1]]" : " N/C"]
    " + + t += "
    " + + t += "

    Close
    " + + user << browse(t, "window=powcomp;size=420x700") + + +/obj/machinery/power/monitor/Topic(href, href_list) + ..() + if( href_list["close"] ) + usr << browse(null, "window=powcomp") + usr.machine = null + return + +/obj/machinery/power/monitor/process() + if(!(stat & (NOPOWER|BROKEN)) ) + + use_power(250) + + + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.interact(M) + + + +/obj/machinery/power/monitor/power_change() + + if(stat & BROKEN) + icon_state = "broken" + else + if( powered() ) + icon_state = initial(icon_state) + stat &= ~NOPOWER + else + spawn(rand(0, 15)) + src.icon_state = "c_unpowered" + stat |= NOPOWER + + +// the SMES +// stores power + +/obj/machinery/power/smes/New() + ..() + + spawn(5) + dir_loop: + for(var/d in cardinal) + var/turf/T = get_step(src, d) + for(var/obj/machinery/power/terminal/term in T) + if(term && term.dir == turn(d, 180)) + terminal = term + break dir_loop + + if(!terminal) + stat |= BROKEN + return + + terminal.master = src + + updateicon() + + +/obj/machinery/power/smes/proc/updateicon() + + overlays = null + if(stat & BROKEN) + return + + + overlays += image('power.dmi', "smes-op[online]") + + if(charging) + overlays += image('power.dmi', "smes-oc1") + else + if(chargemode) + overlays += image('power.dmi', "smes-oc0") + + var/clevel = chargedisplay() + if(clevel>0) + overlays += image('power.dmi', "smes-og[clevel]") + +/obj/machinery/power/smes/proc/chargedisplay() + return round(5.5*charge/capacity) + +#define SMESRATE 0.05 // rate of internal charge to external power + + +/obj/machinery/power/smes/process() + + if(stat & BROKEN) + return + + + //store machine state to see if we need to update the icon overlays + var/last_disp = chargedisplay() + var/last_chrg = charging + var/last_onln = online + + if(terminal) + var/excess = terminal.surplus() + + if(charging) + if(excess >= 0) // if there's power available, try to charge + + var/load = min((capacity-charge)/SMESRATE, chargelevel) // charge at set rate, limited to spare capacity + + charge += load * SMESRATE // increase the charge + + add_load(load) // add the load to the terminal side network + + else // if not enough capcity + charging = 0 // stop charging + chargecount = 0 + + else + if(chargemode) + if(chargecount > rand(3,6)) + charging = 1 + chargecount = 0 + + if(excess > chargelevel) + chargecount++ + else + chargecount = 0 + else + chargecount = 0 + + if(online) // if outputting + lastout = min( charge/SMESRATE, output) //limit output to that stored + + charge -= lastout*SMESRATE // reduce the storage (may be recovered in /restore() if excessive) + + add_avail(lastout) // add output to powernet (smes side) + + if(charge < 0.0001) + online = 0 // stop output if charge falls to zero + + // only update icon if state changed + if(last_disp != chargedisplay() || last_chrg != charging || last_onln != online) + updateicon() + + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.interact(M) + + +// called after all power processes are finished +// restores charge level to smes if there was excess this ptick + +/obj/machinery/power/smes/proc/restore() + if(stat & BROKEN) + return + + if(!online) + loaddemand = 0 + return + + var/excess = powernet.netexcess // this was how much wasn't used on the network last ptick, minus any removed by other SMESes + + excess = min(lastout, excess) // clamp it to how much was actually output by this SMES last ptick + + excess = min((capacity-charge)/SMESRATE, excess) // for safety, also limit recharge by space capacity of SMES (shouldn't happen) + + // now recharge this amount + + var/clev = chargedisplay() + + charge += excess * SMESRATE + powernet.netexcess -= excess // remove the excess from the powernet, so later SMESes don't try to use it + + loaddemand = lastout-excess + + if(clev != chargedisplay() ) + updateicon() + + +/obj/machinery/power/smes/add_load(var/amount) + if(terminal && terminal.powernet) + terminal.powernet.newload += amount + +/obj/machinery/power/smes/attack_hand(mob/user) + + add_fingerprint(user) + + if(stat & BROKEN) return + + interact(user) + + + +/obj/machinery/power/smes/proc/interact(mob/user) + + if ( (get_dist(src, user) > 1 )) + user.machine = null + user << browse(null, "window=smes") + return + + user.machine = src + + + var/t = "SMES Power Storage Unit [n_tag? "([n_tag])" : null]
    "
    +
    +	t += "Stored capacity : [round(100.0*charge/capacity, 0.1)]%

    " + + t += "Input: [charging ? "Charging" : "Not Charging"] [chargemode ? "Auto Off" : "Auto Off "]
    " + + + t += "Input level: M - - - [add_lspace(chargelevel,5)] + + + M
    " + + t += "

    " + + t += "Output: [online ? "Online Offline" : "Online Offline "]
    " + + t += "Output level: M - - - [add_lspace(output,5)] + + + M
    " + + t += "Output load: [round(loaddemand)] W
    " + + t += "

    Close" + + t += "
    " + user << browse(t, "window=smes;size=460x300") + return + +/obj/machinery/power/smes/Topic(href, href_list) + ..() + + if (usr.stat || usr.restrained() ) + return + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + usr << "\red You don't have the dexterity to do this!" + return + + //world << "[href] ; [href_list[href]]" + + if (( usr.machine==src && (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + + + if( href_list["close"] ) + usr << browse(null, "window=smes") + usr.machine = null + return + + else if( href_list["cmode"] ) + chargemode = !chargemode + if(!chargemode) + charging = 0 + updateicon() + + else if( href_list["online"] ) + online = !online + updateicon() + else if( href_list["input"] ) + + var/i = text2num(href_list["input"]) + + var/d = 0 + switch(i) + if(-4) + chargelevel = 0 + if(4) + chargelevel = SMESMAXCHARGELEVEL //30000 + + if(1) + d = 100 + if(-1) + d = -100 + if(2) + d = 1000 + if(-2) + d = -1000 + if(3) + d = 10000 + if(-3) + d = -10000 + + chargelevel += d + chargelevel = max(0, min(SMESMAXCHARGELEVEL, chargelevel)) // clamp to range + + else if( href_list["output"] ) + + var/i = text2num(href_list["output"]) + + var/d = 0 + switch(i) + if(-4) + output = 0 + if(4) + output = SMESMAXOUTPUT //30000 + + if(1) + d = 100 + if(-1) + d = -100 + if(2) + d = 1000 + if(-2) + d = -1000 + if(3) + d = 10000 + if(-3) + d = -10000 + + output += d + output = max(0, min(SMESMAXOUTPUT, output)) // clamp to range + + + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.interact(M) + //Foreach goto(275) + else + usr << browse(null, "window=smes") + usr.machine = null + + return + + +/obj/machinery/power/solar/New() + ..() + spawn(10) + updateicon() + updatefrac() + + if(powernet) + for(var/obj/machinery/power/solar_control/SC in powernet.nodes) + if(SC.id == id) + control = SC + +/obj/machinery/power/solar/proc/updateicon() + src.overlays = null + if(stat & BROKEN) + overlays += image('power.dmi', "solar_panel-b", FLY_LAYER) + else + overlays += image('power.dmi', "solar_panel", FLY_LAYER, adir) + +/obj/machinery/power/solar/proc/updatefrac() + + if(obscured) + sunfrac = 0 + return + + var/p_angle = dir2angle(adir) - sun.angle + + if(abs(p_angle) > 90) // if facing more than 90deg from sun, zero output + sunfrac = 0 + return + + sunfrac = cos(p_angle)*cos(p_angle) // + +#define SOLARGENRATE 1500 + +/obj/machinery/power/solar/process() + + if(stat & BROKEN) + return + + if(!obscured) + var/sgen = SOLARGENRATE * sunfrac + add_avail(sgen) + if(powernet && control) + if(control in powernet.nodes) + control.gen += sgen + + + if(adir == ndir) + turn_angle = 0 + else + spawn(rand(0,10)) + adir = turn(adir, turn_angle) + updateicon() + updatefrac() + +/obj/machinery/power/solar/proc/broken() + stat |= BROKEN + updateicon() + +/obj/machinery/power/solar/meteorhit() + + broken() + return + +/obj/machinery/power/solar/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + broken() + if(3.0) + if (prob(25)) + broken() + return + +/obj/machinery/power/solar/blob_act() + if (prob(50)) + broken() + src.density = 0 + + +/obj/machinery/power/solar_control/New() + ..() + + spawn(15) + + if(powernet) + for(var/obj/machinery/power/solar/S in powernet.nodes) + if(S.id == id) + cdir = S.adir + updateicon() + + + +/obj/machinery/power/solar_control/proc/updateicon() + if(stat & BROKEN) + icon_state = "broken" + overlays = null + return + if(stat & NOPOWER) + icon_state = "c_unpowered" + overlays = null + return + + icon_state = "solar_con" + overlays = null + if(cdir > 0) + overlays += image('enginecomputer.dmi', "solcon-o", FLY_LAYER, cdir) + + + +/obj/machinery/power/solar_control/attack_hand(mob/user) + + add_fingerprint(user) + + if(stat & (BROKEN | NOPOWER)) return + + interact(user) + +/obj/machinery/power/solar_control/process() + lastgen = gen + gen = 0 + + if(stat & (NOPOWER | BROKEN)) + return + + use_power(250) + + if(track && nexttime < world.timeofday) + if(trackdir) + cdir = turn(cdir, -45) + else + cdir = turn(cdir, 45) + set_panels(cdir) + + nexttime = world.timeofday + 10*trackrate + updateicon() + + + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.interact(M) + + +/obj/machinery/power/solar_control/proc/interact(mob/user) + + if ( (get_dist(src, user) > 1 )) + user.machine = null + user << browse(null, "window=solcon") + return + + user.machine = src + + var/t = "Solar Generator Control
    "
    +
    +	t += "Generated power : [round(lastgen)] W

    " + + t += "Current panel orientation: [uppertext(dir2text(cdir))]
    " + + t += "
    Set orientation:
    " + + var/list/D = list(-1, NORTHWEST, NORTH, NORTHEAST, -1, WEST, 0, EAST, -1, SOUTHWEST, SOUTH, SOUTHEAST) + var/list/disp = list("|", "|", "", "-", "/", "\\", "", "-", "\\", "/") + + for(var/d in D) + if(d == 0) + t += " " + continue + if(d == -1) + t += "
    " + continue + + if(d==cdir) + t +=" [disp[d]]" + else + t +=" O" + + + t += "


    " + + t += "Tracking: [ track ? "Off On" : "Off On"]" + + t += " [trackdir ? "CCW CW" : "CCW CW"]
    " + + t += "Rate: - - - [trackrate] + + + (seconds per turn)
    " + + t += "

    Close" + + t += "
    " + user << browse(t, "window=solcon") + + return + +/obj/machinery/power/solar_control/Topic(href, href_list) + ..() + + if (usr.stat || usr.restrained() ) + return + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + usr << "\red You don't have the dexterity to do this!" + return + + //world << "[href] ; [href_list[href]]" + + if (( usr.machine==src && (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + + + if( href_list["close"] ) + usr << browse(null, "window=solcon") + usr.machine = null + return + + else if( href_list["dir"] ) + cdir = text2num(href_list["dir"]) + + spawn(1) + set_panels(cdir) + + updateicon() + else if( href_list["tdir"] ) + trackdir = !trackdir + + else if( href_list["track"] ) + track = !track + nexttime = world.timeofday + 10*trackrate + + else if( href_list["trk"] ) + var/inc = text2num(href_list["trk"]) + + switch(inc) + if(1, -1) + trackrate += inc + if(2,-2) + trackrate += 10*inc/abs(inc) + if(3,-3) + trackrate += 100*inc/abs(inc) + + trackrate = min( max(trackrate, 10), 900) + nexttime = world.timeofday + 10*trackrate + + spawn(0) + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.interact(M) + + else + usr << browse(null, "window=solcon") + usr.machine = null + + return + +/obj/machinery/power/solar_control/proc/set_panels(var/cdir) + if(powernet) + for(var/obj/machinery/power/solar/S in powernet.nodes) + if(S.id == id) + S.control = src + + var/delta = dir2angle(S.adir) - dir2angle(cdir) + + delta = (delta+360)%360 + + if(delta>180) + S.turn_angle = -45 + else + S.turn_angle = 45 + + S.ndir = cdir + + +/obj/machinery/power/solar_control/power_change() + + if( powered() ) + stat &= ~NOPOWER + updateicon() + else + spawn(rand(0, 15)) + stat |= NOPOWER + updateicon() + + + +/obj/machinery/power/solar_control/proc/broken() + stat |= BROKEN + updateicon() + +/obj/machinery/power/solar_control/meteorhit() + + broken() + return + +/obj/machinery/power/solar_control/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + broken() + if(3.0) + if (prob(25)) + broken() + return + +/obj/machinery/power/solar_control/blob_act() + if (prob(50)) + broken() + src.density = 0 + + +// the inlet stage of the gas turbine electricity generator + +/obj/machinery/compressor/New() + ..() + + gas = new/obj/substance/gas(src) + gas.maximum = capacity + inturf = get_step(src, WEST) + + spawn(5) + turbine = locate() in get_step(src, EAST) + if(!turbine) + stat |= BROKEN + + +#define COMPFRICTION 5e5 +#define COMPSTARTERLOAD 2800 + +/obj/machinery/compressor/process() + + overlays = null + if(stat & BROKEN) + return + + rpm = 0.9* rpm + 0.1 * rpmtarget + + + gas.turf_take(inturf, rpm/30000*capacity) + + + rpm = max(0, rpm - (rpm*rpm)/COMPFRICTION) + + + if(starter && !(stat & NOPOWER)) + use_power(2800) + if(rpm<1000) + rpmtarget = 1000 + else + starter = 0 + else + if(rpm<1000) + rpmtarget = 0 + + + + if(rpm>50000) + overlays += image('pipes.dmi', "comp-o4", FLY_LAYER) + else if(rpm>10000) + overlays += image('pipes.dmi', "comp-o3", FLY_LAYER) + else if(rpm>2000) + overlays += image('pipes.dmi', "comp-o2", FLY_LAYER) + if(rpm>500) + overlays += image('pipes.dmi', "comp-o1", FLY_LAYER) + + +/obj/machinery/power/turbine/New() + ..() + + outturf = get_step(src, EAST) + + spawn(5) + + compressor = locate() in get_step(src, WEST) + if(!compressor) + stat |= BROKEN + + +#define TURBPRES 90000000 +#define TURBGENQ 20000 +#define TURBGENG 0.8 + +/obj/machinery/power/turbine/process() + + overlays = null + if(stat & BROKEN) + return + + lastgen = ((compressor.rpm / TURBGENQ)**TURBGENG) *TURBGENQ + + add_avail(lastgen) + + if(compressor.gas.temperature > (T20C+50)) + var/newrpm = ((compressor.gas.temperature-T20C-50) * compressor.gas.tot_gas() / TURBPRES)*30000 + newrpm = max(0, newrpm) + + if(!compressor.starter || newrpm > 1000) + compressor.rpmtarget = newrpm + + var/oamount = min(compressor.gas.tot_gas(), compressor.rpm/35000*compressor.capacity) + compressor.gas.turf_add(outturf, oamount) + outturf.firelevel = outturf.poison + + if(lastgen > 100) + overlays += image('pipes.dmi', "turb-o", FLY_LAYER) + + + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.interact(M) + + +/obj/machinery/power/turbine/attack_hand(mob/user) + + add_fingerprint(user) + + if(stat & (BROKEN | NOPOWER)) return + + interact(user) + +/obj/machinery/power/turbine/proc/interact(mob/user) + + if ( (get_dist(src, user) > 1 ) || (stat & (NOPOWER|BROKEN)) ) + user.machine = null + user << browse(null, "window=turbine") + return + + user.machine = src + + var/t = "Gas Turbine Generator
    "
    +
    +	var/gen = max(0, lastgen - (compressor.starter * COMPSTARTERLOAD) )
    +	t += "Generated power : [round(gen)] W

    " + + t += "Turbine: [round(compressor.rpm)] RPM
    " + + t += "Starter: [ compressor.starter ? "Off On" : "Off On"]" + + t += "

    Close" + + t += "
    " + user << browse(t, "window=turbine") + + return + +/obj/machinery/power/turbine/Topic(href, href_list) + ..() + if(stat & BROKEN) + return + if (usr.stat || usr.restrained() ) + return + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + usr << "\red You don't have the dexterity to do this!" + return + + if (( usr.machine==src && (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + + + if( href_list["close"] ) + usr << browse(null, "window=turbine") + usr.machine = null + return + + else if( href_list["str"] ) + compressor.starter = !compressor.starter + + spawn(0) + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.interact(M) + + else + usr << browse(null, "window=turbine") + usr.machine = null + + return \ No newline at end of file diff --git a/main-src/Code/shuttle.dm b/main-src/Code/shuttle.dm new file mode 100644 index 0000000..fff10b2 --- /dev/null +++ b/main-src/Code/shuttle.dm @@ -0,0 +1,346 @@ + +/obj/machinery/computer/prison_shuttle/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(58) + src.icon_state = "broken" + if(3.0) + if (prob(25)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(109) + src.icon_state = "broken" + else + return + +/obj/machinery/computer/prison_shuttle/verb/take_off() + set src in oview(1) + + if ((usr.stat || usr.restrained())) + return + src.add_fingerprint(usr) + if (prison_entered) + var/A = locate(/area/shuttle) + for(var/turf/T in A) + if (T.z == 1) + for(var/atom/movable/AM as mob|obj in T) + AM.z = 8 + //Foreach goto(96) + var/turf/U = locate(T.x, T.y, 8) + U.oxygen = T.oxygen + U.oldoxy = T.oldoxy + U.tmpoxy = T.tmpoxy + U.poison = T.poison + U.oldpoison = T.oldpoison + U.tmppoison = T.tmppoison + U.co2 = T.co2 + U.oldco2 = T.oldco2 + U.tmpco2 = T.tmpco2 + //T = null + del(T) + //Foreach goto(62) + prison_entered = null + else + if (!( prison_entered )) + if (ticker.shuttle_location != 1) + var/A = locate(/area/shuttle_prison) + for(var/turf/T in A) + if (T.z == 8) + for(var/atom/movable/AM as mob|obj in T) + AM.z = 1 + //Foreach goto(346) + var/turf/U = locate(T.x, T.y, 1) + U.oxygen = T.oxygen + U.oldoxy = T.oldoxy + U.tmpoxy = T.tmpoxy + U.poison = T.poison + U.oldpoison = T.oldpoison + U.tmppoison = T.tmppoison + U.co2 = T.co2 + U.oldco2 = T.oldco2 + U.tmpco2 = T.tmpco2 + //T = null + del(T) + //Foreach goto(312) + prison_entered = 1 + else + usr << "\blue There is an obstructing shuttle!" + return + return + +/obj/machinery/computer/prison_shuttle/verb/restabalize() + set src in oview(1) + + viewers(null, null) << "\red Restabalizing prison shuttle atmosphere!" + var/A = locate(/area/shuttle_prison) + for(var/obj/move/T in A) + T.firelevel = 0 + T.oxygen = O2STANDARD + T.oldoxy = O2STANDARD + T.tmpoxy = O2STANDARD + T.poison = 0 + T.oldpoison = 0 + T.tmppoison = 0 + T.co2 = 0 + T.oldco2 = 0 + T.tmpco2 = 0 + T.sl_gas = 0 + T.osl_gas = 0 + T.tsl_gas = 0 + T.n2 = N2STANDARD + T.on2 = N2STANDARD + T.tn2 = N2STANDARD + T.temp = T20C + T.otemp = T20C + T.ttemp = T20C + //Foreach goto(40) + viewers(null, null) << "\red Prison shuttle Restabalized!" + src.add_fingerprint(usr) + return + +/obj/machinery/computer/shuttle/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(58) + src.icon_state = "broken" + if(3.0) + if (prob(25)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(109) + src.icon_state = "broken" + else + return + +/obj/machinery/computer/shuttle/verb/restabalize() + set src in oview(1) + + world << "\red Restabalizing shuttle atmosphere!" + var/A = locate(/area/shuttle) + for(var/obj/move/T in A) + T.firelevel = 0 + T.oxygen = O2STANDARD + T.oldoxy = O2STANDARD + T.tmpoxy = O2STANDARD + T.poison = 0 + T.oldpoison = 0 + T.tmppoison = 0 + T.co2 = 0 + T.oldco2 = 0 + T.tmpco2 = 0 + T.sl_gas = 0 + T.osl_gas = 0 + T.tsl_gas = 0 + T.n2 = N2STANDARD + T.on2 = N2STANDARD + T.tn2 = N2STANDARD + T.temp = T20C + T.otemp = T20C + T.ttemp = T20C + //Foreach goto(35) + world << "\red Shuttle Restabalized!" + src.add_fingerprint(usr) + return + +/obj/machinery/computer/shuttle/verb/hijack() + set src in oview(1) + + if ((!( ticker ) || ticker.shuttle_location != shuttle_z)) + return + if (usr != ticker.killer) + return + world << "\blue Alert: The shuttle is has been hijacked prematurely by the traitor!" + ticker.timing = 0 + ticker.check_win() + src.add_fingerprint(usr) + return + +/obj/machinery/computer/shuttle/attackby(var/obj/item/weapon/card/id/W as obj, var/mob/user as mob) + + if ((!( istype(W, /obj/item/weapon/card/id) ) || !( ticker ) || ticker.shuttle_location == shuttle_z || !( user ))) + return + if (!W.check_access(access, allowed)) + user << text("The access level ([]) of [] card is not high enough. ", W.access_level, W.registered) + return + var/choice = alert(user, text("Would you like to (un)authorize a shortened launch time? [] authorization\s are still needed. Use abort to cancel all authorizations.", src.auth_need - src.authorized.len), "Shuttle Launch", "Authorize", "Repeal", "Abort") + switch(choice) + if("Authorize") + src.authorized -= W.registered + src.authorized += W.registered + if (src.auth_need - src.authorized.len > 0) + world << text("\blue Alert: [] authorizations needed until shuttle is launched early", src.auth_need - src.authorized.len) + else + world << "\blue Alert: Shuttle launch time shortened to 10 seconds!" + ticker.timeleft = 100 + //src.authorized = null + del(src.authorized) + src.authorized = list( ) + if("Repeal") + src.authorized -= W.registered + world << text("\blue Alert: [] authorizations needed until shuttle is launched early", src.auth_need - src.authorized.len) + if("Abort") + world << "\blue All authorizations to shorting time for shuttle launch have been revoked!" + src.authorized.len = 0 + src.authorized = list( ) + else + return + +/obj/shut_controller/proc/rotate(direct) + + var/SE_X = 1 + var/SE_Y = 1 + var/SW_X = 1 + var/SW_Y = 1 + var/NE_X = 1 + var/NE_Y = 1 + var/NW_X = 1 + var/NW_Y = 1 + for(var/obj/move/M in src.parts) + if (M.x < SW_X) + SW_X = M.x + if (M.x > SE_X) + SE_X = M.x + if (M.y < SW_Y) + SW_Y = M.y + if (M.y > NW_Y) + NW_Y = M.y + if (M.y > NE_Y) + NE_Y = M.y + if (M.y < SE_Y) + SE_Y = M.y + if (M.x > NE_X) + NE_X = M.x + if (M.x < NW_X) + NW_X = M.y + //Foreach goto(75) + var/length = abs(NE_X - NW_X) + var/width = abs(NE_Y - SE_Y) + var/obj/random = pick(src.parts) + var/s_direct = null + switch(s_direct) + if(1.0) + switch(direct) + if(90.0) + var/tx = SE_X + var/ty = SE_Y + var/t_z = random.z + for(var/obj/move/M in src.parts) + M.ty = -M.x - tx + M.tx = -M.y - ty + var/T = locate(M.x, M.y, 11) + M.relocate(T) + M.ty = -M.ty + M.tx += length + //Foreach goto(374) + for(var/obj/move/M in src.parts) + M.tx += tx + M.ty += ty + var/T = locate(M.tx, M.ty, t_z) + M.relocate(T, 90) + //Foreach goto(468) + if(-90.0) + var/tx = SE_X + var/ty = SE_Y + var/t_z = random.z + for(var/obj/move/M in src.parts) + M.ty = M.x - tx + M.tx = M.y - ty + var/T = locate(M.x, M.y, 11) + M.relocate(T) + M.ty = -M.ty + M.ty += width + //Foreach goto(571) + for(var/obj/move/M in src.parts) + M.tx += tx + M.ty += ty + var/T = locate(M.tx, M.ty, t_z) + M.relocate(T, -90.0) + //Foreach goto(663) + else + else + return + +/obj/shuttle/door/verb/open() + set src in oview(1) + + src.add_fingerprint(usr) + if (src.operating) + return + src.operating = 1 + flick("doorc0", src) + src.icon_state = "door0" + sleep(15) + src.density = 0 + src.opacity = 0 + src.verbs -= /obj/shuttle/door/verb/open + src.verbs += /obj/shuttle/door/proc/close + src.operating = 0 + + src.loc.buildlinks() + + return + +/obj/shuttle/door/proc/close() + set src in oview(1) + + src.add_fingerprint(usr) + if (src.operating) + return + src.operating = 1 + flick("doorc1", src) + src.icon_state = "door1" + src.density = 1 + if (src.visible) + src.opacity = 1 + sleep(15) + src.verbs += /obj/shuttle/door/verb/open + src.verbs -= /obj/shuttle/door/proc/close + src.operating = 0 + + src.loc.buildlinks() + return + +/turf/station/shuttle/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + var/turf/space/S = new /turf/space( locate(src.x, src.y, src.z) ) + S.buildlinks() + + del(src) + return + if(2.0) + if (prob(50)) + //SN src = null + var/turf/space/S = new /turf/space( locate(src.x, src.y, src.z) ) + S.buildlinks() + + del(src) + return + else + return + +/turf/station/shuttle/blob_act() + if(prob(20)) + + var/turf/space/S = new /turf/space( locate(src.x, src.y, src.z) ) + S.buildlinks() + + del(src) diff --git a/main-src/Code/ss13_algorithm2.dm b/main-src/Code/ss13_algorithm2.dm new file mode 100644 index 0000000..7f79b2c --- /dev/null +++ b/main-src/Code/ss13_algorithm2.dm @@ -0,0 +1,568 @@ + +/proc/SetupOccupationsList() + + var/list/new_occupations = list( ) + for(var/occupation in occupations) + if (!( new_occupations.Find(occupation) )) + new_occupations[occupation] = 1 + else + new_occupations[occupation] += 1 + //Foreach goto(23) + occupations = new_occupations + return + +/proc/DivideOccupations() + + var/list/occupations1 = list( ) + var/list/occupations2 = list( ) + var/list/occupations3 = list( ) + var/list/final_occupations = list( ) + var/list/unassigned_mobs = list( ) + var/list/occupation_choices = occupations.Copy() + occupation_choices = shuffle(occupation_choices) + for(var/occupation in occupations + assistant_occupations) + occupations1[occupation] = list( ) + occupations2[occupation] = list( ) + occupations3[occupation] = list( ) + final_occupations[occupation] = list( ) + //Foreach goto(78) + occupations1["Captain"] = list( ) + occupations2["Captain"] = list( ) + occupations3["Captain"] = list( ) + final_occupations["Captain"] = list( ) + for(var/mob/human/M in world) + if ((!( M.client ) || !( M.start ) || M.already_placed)) + else + unassigned_mobs += M + if (M.occupation1 != "No Preference") + occupations1[M.occupation1] += M + if (M.occupation2 != "No Preference") + occupations2[M.occupation2] += M + if (M.occupation3 != "No Preference") + occupations3[M.occupation3] += M + //Foreach goto(187) + for(var/occupation in occupations) + occupations1[occupation] = shuffle(occupations1[occupation]) + occupations2[occupation] = shuffle(occupations2[occupation]) + occupations3[occupation] = shuffle(occupations3[occupation]) + //Foreach goto(339) + occupations1["Captain"] = shuffle(occupations1["Captain"]) + occupations2["Captain"] = shuffle(occupations2["Captain"]) + occupations3["Captain"] = shuffle(occupations3["Captain"]) + var/list/captain_choice = occupations1["Captain"] + if (captain_choice.len) + final_occupations["Captain"] = captain_choice[1] + occupation_choices -= "Captain" + unassigned_mobs -= final_occupations["Captain"] + if (!( final_occupations["Captain"] )) + captain_choice = occupations2["Captain"] + if (captain_choice.len) + final_occupations["Captain"] = captain_choice[1] + occupation_choices -= "Captain" + unassigned_mobs -= final_occupations["Captain"] + if (!( final_occupations["Captain"] )) + captain_choice = occupations3["Captain"] + if (captain_choice.len) + final_occupations["Captain"] = captain_choice[1] + occupation_choices -= "Captain" + unassigned_mobs -= final_occupations["Captain"] + if (!( final_occupations["Captain"] )) + var/list/contenders = list( ) + for(var/mob/human/M in world) + if (M.client) + contenders += M + //Foreach goto(691) + var/mob/human/M = pick(contenders) + final_occupations["Captain"] = M + occupation_choices -= "Captain" + unassigned_mobs -= final_occupations["Captain"] + occupations1[text("[]", M.occupation1)] -= M + occupations2[text("[]", M.occupation2)] -= M + occupations3[text("[]", M.occupation3)] -= M + for(var/mob/human/M in unassigned_mobs) + if (assistant_occupations.Find(M.occupation1)) + M.Assign_Rank(M.occupation1) + unassigned_mobs -= M + //Foreach goto(844) + for(var/occupation in occupation_choices) + var/list/L = occupations1[occupation] + if (L.len) + var/eligible = occupations[occupation] + var/multiple = eligible > 1 + while(eligible--) + var/M = null + var/i = null + i = 1 + while((i <= L.len && !( M ))) + if (unassigned_mobs.Find(L[i])) + M = L[i] + i++ + if (M) + if (multiple) + final_occupations[occupation] += M + else + final_occupations[occupation] = M + unassigned_mobs -= M + if (eligible < 1) + occupation_choices -= occupation + if ((!( occupation_choices.len ) || !( unassigned_mobs.len ))) + else + //Foreach continue //goto(913) + for(var/mob/human/M in unassigned_mobs) + if (assistant_occupations.Find(M.occupation2)) + M.Assign_Rank(M.occupation2) + unassigned_mobs -= M + //Foreach goto(1158) + for(var/occupation in occupation_choices) + var/list/L = occupations2[occupation] + if (L.len) + var/eligible = occupations[occupation] + var/multiple = eligible > 1 + if (multiple) + var/list/X = final_occupations[occupation] + eligible -= X.len + while(eligible--) + var/M = null + var/i = null + i = 1 + while((i <= L.len && !( M ))) + if (unassigned_mobs.Find(L[i])) + M = L[i] + i++ + if (M) + if (multiple) + final_occupations[occupation] += M + else + final_occupations[occupation] = M + unassigned_mobs -= M + if (eligible < 1) + occupation_choices -= occupation + if ((!( occupation_choices.len ) || !( unassigned_mobs.len ))) + else + //Foreach continue //goto(1227) + for(var/mob/human/M in unassigned_mobs) + if (assistant_occupations.Find(M.occupation3)) + M.Assign_Rank(M.occupation3) + unassigned_mobs -= M + //Foreach goto(1502) + for(var/occupation in occupation_choices) + var/list/L = occupations3[occupation] + if (L.len) + var/eligible = occupations[occupation] + var/multiple = eligible > 1 + if (multiple) + var/list/X = final_occupations[occupation] + eligible -= X.len + while(eligible--) + var/M = null + var/i = null + i = 1 + while((i <= L.len && !( M ))) + if (unassigned_mobs.Find(L[i])) + M = L[i] + i++ + if (M) + if (multiple) + final_occupations[occupation] += M + else + final_occupations[occupation] = M + unassigned_mobs -= M + if (eligible < 1) + occupation_choices -= occupation + //Foreach goto(1571) + if (unassigned_mobs.len) + unassigned_mobs = shuffle(unassigned_mobs) + for(var/mob/human/M in unassigned_mobs) + if (occupation_choices.len) + var/occupation = pick(occupation_choices) + final_occupations[occupation] = M + occupation_choices -= occupation + unassigned_mobs -= M + break //// + //Foreach goto(1846) + for(var/occupation in final_occupations) + var/mob/human/M = final_occupations[occupation] + if (ismob(M)) + M.Assign_Rank(occupation) + else + if (istype(M, /list)) + for(var/mob/human/E in final_occupations[occupation]) + E.Assign_Rank(occupation) + //Foreach goto(2003) + //Foreach goto(1931) + for(var/mob/human/M in unassigned_mobs) + M.Assign_Rank(pick("Research Assistant", "Technical Assistant", "Medical Assistant", "Staff Assistant")) + //Foreach goto(2051) + return + +/proc/shuffle(var/list/shufflelist) + + if (!( shufflelist )) + return + var/list/old_list = shufflelist.Copy() + var/list/new_list = list( ) + while(old_list.len) + var/item = old_list[rand(1, old_list.len)] + new_list += item + old_list -= item + return new_list + return + +/world/New() + + ..() + spawn( 0 ) + SetupOccupationsList() + return + return + +/mob/human/verb/char_setup() + + if (src.start) + return + src.ShowChoices() + return + +/mob/human/proc/ShowChoices() + + var/list/destructive = assistant_occupations.Copy() + var/dat = "" + dat += text("Name: []
    ", src, src.rname) + dat += text("Gender: []
    ", src, (src.gender == "male" ? "Male" : "Female")) + dat += text("Age - []
    ", src, src.age) + dat += "
    Occupation Choices:
    " + if (destructive.Find(src.occupation1)) + dat += text("\t[]
    ", src, src.occupation1) + else + if (src.occupation1 != "No Preference") + dat += text("\tFirst Choice: []
    ", src, src.occupation1) + if (destructive.Find(src.occupation2)) + dat += text("\tSecond Choice: []
    ", src, src.occupation2) + else + if (src.occupation2 != "No Preference") + dat += text("\tSecond Choice: []
    ", src, src.occupation2) + if (destructive.Find(src.occupation3)) + dat += text("\tLast Choice: []
    ", src, src.occupation3) + else + if (src.occupation3 != "No Preference") + dat += text("\tLast Choice: []
    ", src, src.occupation3) + else + dat += text("\tLast Choice: No Preference
    ", src) + else + dat += text("\tSecond Choice: No Preference
    ", src) + else + dat += text("\tNo Preference
    ", src) + dat += "
    Body Data
    " + dat += text("Blood Type: []
    ", src, src.b_type) + dat += text("Skin Tone: []/220
    ", src, -src.ns_tone + 35) + dat += text("Hair Color: test
    ", num2hex(src.nr_hair, 2), num2hex(src.ng_hair, 2), num2hex(src.nb_hair)) + dat += text(" Red - []", num2hex(src.nr_hair, 2), src, src.nr_hair) + dat += text(" Green - []", num2hex(src.ng_hair, 2), src, src.ng_hair) + dat += text(" Blue - []", num2hex(src.nb_hair, 2), src, src.nb_hair) + dat += text("
    Style - []", src, src.h_style) + dat += text("
    Eye Color: test
    ", num2hex(src.r_eyes, 2), num2hex(src.g_eyes, 2), num2hex(src.b_eyes, 2)) + dat += text(" Red - []", num2hex(src.r_eyes, 2), src, src.r_eyes) + dat += text(" Green - []", num2hex(src.g_eyes, 2), src, src.g_eyes) + dat += text(" Blue - []", num2hex(src.b_eyes, 2), src, src.b_eyes) + dat += "
    Disabilities
    " + dat += text("Need Glasses: []
    ", src, (src.need_gl ? "Yes" : "No")) + dat += text("Epileptic: []
    ", src, (src.be_epil ? "Yes" : "No")) + dat += text("Tourette Syndrome: []
    ", src, (src.be_tur ? "Yes" : "No")) + dat += text("Chronic Cough: []
    ", src, (src.be_cough ? "Yes" : "No")) + dat += text("Stutter: []
    ", src, (src.be_stut ? "Yes" : "No")) + dat += "
    " + dat += text("Load Setup
    ", src) + dat += text("Save Setup
    ", src) + dat += text("Reset Setup
    ", src) + dat += "" + src << browse(dat, "window=mob_occupations;size=300x600") + return + +/mob/human/proc/SetChoices(occ) + + if (occ == null) + occ = 1 + var/HTML = "" + HTML += "
    " + switch(occ) + if(1.0) + HTML += "Which occupation would you like most?

    " + if(2.0) + HTML += "Which occupation would you like if you couldn't have your first?

    " + if(3.0) + HTML += "Which occupation would you like if you couldn't have the others?

    " + else + for(var/job in uniquelist(occupations + assistant_occupations) ) + HTML += text("[]
    ", src, occ, job, job) + //Foreach goto(105) + HTML += text("Captain
    ", src, occ) + HTML += "
    " + HTML += text("\[No Preference\]
    ", src, occ) + HTML += text("\[Cancel\]", src, occ) + HTML += "
    " + usr << browse(HTML, "window=mob_occupation;size=320x500") + return + +/proc/uniquelist(var/list/L) + var/list/K = list() + for(var/item in L) + if(!(item in K)) + K += item + + return K + + +/mob/human/proc/SetJob(occ, job) + + if (occ == null) + occ = 1 + if (job == null) + job = "Captain" + if ((!( occupations.Find(job) ) && !( assistant_occupations.Find(job) ) && job != "Captain")) + return + switch(occ) + if(1.0) + if (job == src.occupation1) + usr << browse(null, "window=mob_occupation") + return + else + if (job == "No Preference") + src.occupation1 = "No Preference" + else + if (job == src.occupation2) + job = src.occupation1 + src.occupation1 = src.occupation2 + src.occupation2 = job + else + if (job == src.occupation3) + job = src.occupation1 + src.occupation1 = src.occupation3 + src.occupation3 = job + else + src.occupation1 = job + if(2.0) + if (job == src.occupation2) + src << browse(null, "window=mob_occupation") + return + else + if (job == "No Preference") + if (src.occupation3 != "No Preference") + src.occupation2 = src.occupation3 + src.occupation3 = "No Preference" + else + src.occupation2 = "No Preference" + else + if (job == src.occupation1) + if (src.occupation2 == "No Preference") + src << browse(null, "window=mob_occupation") + return + job = src.occupation2 + src.occupation2 = src.occupation1 + src.occupation1 = job + else + if (job == src.occupation3) + job = src.occupation2 + src.occupation2 = src.occupation3 + src.occupation3 = job + else + src.occupation2 = job + if(3.0) + if (job == src.occupation3) + usr << browse(null, "window=mob_occupation") + return + else + if (job == "No Preference") + src.occupation3 = "No Preference" + else + if (job == src.occupation1) + if (src.occupation3 == "No Preference") + src << browse(null, "window=mob_occupation") + return + job = src.occupation3 + src.occupation3 = src.occupation1 + src.occupation1 = job + else + if (job == src.occupation2) + if (src.occupation3 == "No Preference") + src << browse(null, "window=mob_occupation") + return + job = src.occupation3 + src.occupation3 = src.occupation2 + src.occupation2 = job + else + src.occupation3 = job + else + src.ShowChoices() + src << browse(null, "window=mob_occupation") + return + +/mob/human/proc/Assign_Rank(rank) + + if (rank == "Captain") + world << text("[] is the captain!", src) + if (!( src.w_radio )) + var/obj/item/weapon/radio/headset/H = new /obj/item/weapon/radio/headset( src ) + src.w_radio = H + H.layer = 20 + if (!( src.back )) + var/obj/item/weapon/storage/backpack/H = new /obj/item/weapon/storage/backpack( src ) + src.back = H + H.layer = 20 + if (!( src.glasses )) + if (src.disabilities & 1) + var/obj/item/weapon/clothing/glasses/regular/G = new /obj/item/weapon/clothing/glasses/regular( src ) + src.glasses = G + G.layer = 20 + if ((!( src.belt ) && src.w_uniform)) + var/obj/item/weapon/radio/signaler/S = new /obj/item/weapon/radio/signaler( src ) + src.belt = S + S.layer = 20 + if ((!( src.r_store ) && src.w_uniform)) + var/obj/item/weapon/pen/S = new /obj/item/weapon/pen( src ) + src.r_store = S + S.layer = 20 + if ((src.client && !( src.wear_id ) && src.w_uniform)) + var/obj/item/weapon/card/id/C = new /obj/item/weapon/card/id( src ) + src.wear_id = C + C.assignment = rank + C.layer = 20 + C.registered = src.rname + switch(C.assignment) + if("Research Assistant") + C.access_level = 1 + C.lab_access = 1 + C.engine_access = 0 + C.air_access = 0 + if("Technical Assistant") + C.access_level = 1 + C.lab_access = 0 + C.engine_access = 1 + C.air_access = 0 + if("Staff Assistant") + C.access_level = 2 + C.lab_access = 0 + C.engine_access = 0 + C.air_access = 0 + if("Medical Assistant") + if (!( src.l_hand )) + var/obj/item/weapon/storage/firstaid/regular/W = new /obj/item/weapon/storage/firstaid/regular( src ) + src.l_hand = W + W.layer = 20 + src.UpdateClothing() + C.access_level = 1 + C.lab_access = 1 + C.engine_access = 0 + C.air_access = 0 + if("Engineer") + if (!( src.l_hand )) + var/obj/item/weapon/storage/toolbox/W = new /obj/item/weapon/storage/toolbox( src ) + src.l_hand = W + W.layer = 20 + src.UpdateClothing() + C.access_level = 2 + C.lab_access = 1 + C.engine_access = 3 + C.air_access = 0 + if("Research Technician") + C.access_level = 2 + C.lab_access = 3 + C.engine_access = 0 + C.air_access = 0 + if("Forensic Technician") + C.access_level = 3 + C.lab_access = 2 + C.engine_access = 0 + C.air_access = 0 + if("Medical Doctor") + if (!( src.l_hand )) + var/obj/item/weapon/storage/firstaid/regular/W = new /obj/item/weapon/storage/firstaid/regular( src ) + src.l_hand = W + W.layer = 20 + src.UpdateClothing() + C.access_level = 2 + C.lab_access = 0 + C.engine_access = 0 + C.air_access = 0 + if("Prison Doctor") + if (!( src.l_hand )) + var/obj/item/weapon/storage/firstaid/regular/W = new /obj/item/weapon/storage/firstaid/regular( src ) + src.l_hand = W + W.layer = 20 + src.UpdateClothing() + C.access_level = 3 + C.lab_access = 0 + C.engine_access = 0 + C.air_access = 0 + if("Captain") + C.access_level = 5 + C.air_access = 5 + C.engine_access = 5 + C.lab_access = 5 + if("Security Officer") + if (!( src.l_hand )) + var/obj/item/weapon/handcuffs/W = new /obj/item/weapon/handcuffs( src ) + src.l_hand = W + W.layer = 20 + src.UpdateClothing() + C.access_level = 3 + C.lab_access = 0 + C.engine_access = 0 + C.air_access = 0 + if("Prison Security") + if (!( src.l_hand )) + var/obj/item/weapon/handcuffs/W = new /obj/item/weapon/handcuffs( src ) + src.l_hand = W + W.layer = 20 + src.UpdateClothing() + C.access_level = 3 + C.lab_access = 0 + C.engine_access = 0 + C.air_access = 0 + if("Medical Researcher") + C.access_level = 2 + C.lab_access = 5 + C.engine_access = 0 + C.air_access = 0 + if("Toxin Researcher") + C.access_level = 2 + C.lab_access = 5 + C.engine_access = 0 + C.air_access = 0 + if("Head of Research") + C.access_level = 4 + C.air_access = 2 + C.engine_access = 2 + C.lab_access = 5 + if("Head of Personnel") + C.access_level = 4 + C.air_access = 2 + C.engine_access = 2 + C.lab_access = 4 + if("Prison Warden") + C.access_level = 4 + C.air_access = 2 + C.engine_access = 2 + C.lab_access = 4 + if("Station Technician") + if (!( src.l_hand )) + var/obj/item/weapon/storage/toolbox/W = new /obj/item/weapon/storage/toolbox( src ) + src.l_hand = W + W.layer = 20 + src.UpdateClothing() + C.access_level = 2 + C.lab_access = 0 + C.engine_access = 2 + C.air_access = 3 + if("Atmospheric Technician") + C.access_level = 3 + C.lab_access = 0 + C.engine_access = 0 + C.air_access = 4 + else + C.name = text("[]'s ID Card ([]>[]-[]-[])", C.registered, C.access_level, C.lab_access, C.engine_access, C.air_access) + src << text("You are the [].", C.assignment) + var/obj/S = locate(text("start*[]", C.assignment)) + if ((istype(S, /obj/start) && istype(S.loc, /turf) && !( ctf ))) + src << "\blue You have been teleported to your new starting location!" + src.loc = S.loc + return diff --git a/main-src/Code/sun.dm b/main-src/Code/sun.dm new file mode 100644 index 0000000..c884292 --- /dev/null +++ b/main-src/Code/sun.dm @@ -0,0 +1,99 @@ +/* +/datum/sun + var/angle + var/dx + var/dy + +*/ + + + +/datum/sun/New() + rate = rand(75,125)/100 // 75% - 125% of standard rotation + if(prob(50)) + rate = -rate + +// calculate the sun's position given the time of day + +/datum/sun/proc/calc_position() + + counter++ + if(counter<50) // count 50 pticks (50 seconds, roughly - about a 5deg change) + return + counter = 0 + + angle = ((rate*world.realtime/100)%360 + 360)%360 // gives about a 60 minute rotation time + // now 45 - 75 minutes, depending on rate + // now calculate and cache the (dx,dy) increments for line drawing + + var/s = sin(angle) + var/c = cos(angle) + + if(c == 0) + + dx = 0 + dy = s + + else if( abs(s) < abs(c)) + + dx = s / abs(c) + dy = c / abs(c) + + else + dx = s/abs(s) + dy = c / abs(s) + + + for(var/obj/machinery/power/solar/S in machines) + occlusion(S) + + + +// for a solar panel, trace towards sun to see if we're in shadow + +/datum/sun/proc/occlusion(var/obj/machinery/power/solar/S) + + var/ax = S.x // start at the solar panel + var/ay = S.y + + for(var/i = 1 to 20) // 20 steps is enough + ax += dx // do step + ay += dy + + var/turf/T = locate( round(ax,0.5),round(ay,0.5),S.z) + + if(T.x == 1 || T.x==world.maxx || T.y==1 || T.y==world.maxy) // not obscured if we reach the edge + break + + if(T.density) // if we hit a solid turf, panel is obscured + S.obscured = 1 + return + + S.obscured = 0 // if hit the edge or steped 20 times, not obscured + S.updatefrac() + + +//returns the north-zero clockwise angle in degrees, given a direction + +/proc/dir2angle(var/D) + switch(D) + if(1) + return 0 + if(2) + return 180 + if(4) + return 90 + if(8) + return 270 + if(5) + return 45 + if(6) + return 135 + if(9) + return 315 + if(10) + return 225 + else + return null + + diff --git a/main-src/Code/vote.dm b/main-src/Code/vote.dm new file mode 100644 index 0000000..954add3 --- /dev/null +++ b/main-src/Code/vote.dm @@ -0,0 +1,335 @@ +/datum/vote/New() + + nextvotetime = world.timeofday // + 10*config.votedelay + + +/datum/vote/proc/canvote() + + var/excess = world.timeofday - vote.nextvotetime + + if(excess < -10000) // handle clock-wrapping problems - very long delay (>20 hrs) if wrapped + vote.nextvotetime = world.timeofday + return 1 + return (excess >= 0) + + + +/datum/vote/proc/nextwait() + return timetext( round( (nextvotetime - world.timeofday)/10) ) + +/datum/vote/proc/endwait() + return timetext( round( (votetime - world.timeofday)/10) ) + +/datum/vote/proc/timetext(var/interval) + var/minutes = round(interval / 60) + var/seconds = round(interval % 60) + + var/tmin = "[minutes>0?num2text(minutes)+"min":null]" + var/tsec = "[seconds>0?num2text(seconds)+"sec":null]" + + if(tmin && tsec) // hack to skip inter-space if either field is blank + return "[tmin] [tsec]" + else + if(!tmin && !tsec) // return '0sec' if 0 time left + return "0sec" + return "[tmin][tsec]" + +/datum/vote/proc/getvotes() + + var/list/L = list() + + + for(var/mob/M in world) + if(M.client && M.client.inactivity < 1200) // clients inactive for 2 minutes don't count + L[M.client.vote] += 1 + + + return L + + +/datum/vote/proc/endvote() + + if(!voting) // means that voting was aborted by an admin + return + + world << "\red ***Voting has closed." + + if(config.logvote) world.log << "VOTE: Voting closed, result was [winner]" + + voting = 0 + nextvotetime = world.timeofday + 10*config.votedelay + + for(var/mob/M in world) // clear vote window from all clients + if(M.client) + M << browse(null, "window=vote") + M.client.showvote = 0 + + calcwin() + + if(mode) + var/wintext = upperfirst(winner) + if(winner=="default") + world << "Result is \red No change." + return + + // otherwise change mode + + + world << "Result is change to \red [wintext]" + + + // write resulting mode to savefile + + var/F = file(persistent_file) + fdel(F) + F << winner + + if(ticker) + world <<"\red World will reboot in 10 seconds" + + sleep(100) + if(config.loggame) world.log << "GAME: Rebooting due to mode vote " + world.Reboot() + else + master_mode = winner + + else + + if(winner=="default") + world << "Result is \red No restart." + return + + world << "Result is \red Restart round." + + world <<"\red World will reboot in 5 seconds" + + sleep(50) + if(config.loggame) world.log << "GAME: Rebooting due to restart vote" + world.Reboot() + return + + +/datum/vote/proc/calcwin() + + var/list/votes = getvotes() + + if(vote.mode) + var/best = -1 + + for(var/v in votes) + if(v=="none") + continue + if(best < votes[v]) + best = votes[v] + + + var/list/winners = list() + + for(var/v in votes) + if(votes[v] == best) + winners += v + + var/ret = "" + + + for(var/w in winners) + if(lentext(ret) > 0) + ret += "/" + if(w=="default") + winners = list("default") + ret = "No change" + break + else + ret += upperfirst(w) + + + + if(winners.len != 1) + ret = "Tie: " + ret + + + if(winners.len == 0) + vote.winner = "default" + ret = "No change" + else + vote.winner = pick(winners) + + return ret + else + + if(votes["default"] < votes["restart"]) + + vote.winner = "restart" + return "Restart" + else + vote.winner = "default" + return "No restart" + + +/mob/verb/vote() + + + usr.client.showvote = 1 + + + var/text = "Voting" + + var/footer = "
    Close" + + + if(config.votenodead && usr.stat == 2) + text += "Voting while dead has been disallowed." + text += footer + usr << browse(text, "window=vote") + usr.client.showvote = 0 + usr.client.vote = "none" + return + + if(vote.voting) + // vote in progress, do the current + + text += "Vote to [vote.mode?"change mode":"restart round"] in progress.
    " + text += "[vote.endwait()] until voting is closed.
    " + + var/list/votes = vote.getvotes() + + if(vote.mode) // true if changing mode + + text += "Current game mode is: [master_mode].
    Select the mode to change to:
      " + + for(var/md in vote.vmodes) + var/disp = upperfirst(md) + if(md=="default") + disp = "No change" + + //world << "[md]|[disp]|[src.client.vote]|[votes[md]]" + + if(src.client.vote == md) + text += "
    • [disp]" + else + text += "
    • [disp]" + + text += "[votes[md]>0?" - [votes[md]] vote\s":null]
      " + + text += "
    " + + text +="

    Current winner: [vote.calcwin()]
    " + + text += footer + + usr << browse(text, "window=vote") + + else // voting to restart + + text += "Restart the world?

      " + + var/list/VL = list("default","restart") + + for(var/md in VL) + var/disp = (md=="default"? "No":"Yes") + + if(src.client.vote == md) + text += "
    • [disp]" + else + text += "
    • [disp]" + + text += "[votes[md]>0?" - [votes[md]] vote\s":null]
      " + + text += "
    " + + text +="

    Current winner: [vote.calcwin()]
    " + + text += footer + + usr << browse(text, "window=vote") + + + else //no vote in progress + + + if(!config.allowvoterestart && !config.allowvotemode) + text += "

    Player voting is disabled." + + usr << browse(text, "window=vote") + usr.client.showvote = 0 + return + + if(!vote.canvote()) // not time to vote yet + if(config.allowvoterestart) text+="Voting to restart is enabled.
    " + if(config.allowvotemode) text+="Voting to change mode is enabled.
    " + + text+="

    Next vote can begin in [vote.nextwait()]." + text+=footer + + usr << browse(text, "window=vote") + + else // voting can begin + if(config.allowvoterestart) + text += "Begin restart vote.
    " + if(config.allowvotemode) + text += "Begin change mode vote.
    " + + text += footer + usr << browse(text, "window=vote") + + spawn(20) + if(usr.client && usr.client.showvote) + usr.vote() + else + usr << browse(null, "window=vote") + + return + + +/datum/vote/Topic(href, href_list) + ..() + + var/mob/M = locate(href_list["voter"]) // mob of player that clicked link + + if(href_list["vclose"]) + + if(M) + M << browse(null, "window=vote") + M.client.showvote = 0 + return + + if(href_list["vmode"]) + if(vote.voting) + return + + if(!vote.canvote() ) // double check even though this shouldn't happen + return + + vote.mode = text2num(href_list["vmode"])-1 // hack to yield 0=restart, 1=changemode + vote.voting = 1 // now voting + vote.votetime = world.timeofday + config.voteperiod*10 // when the vote will end + + spawn(config.voteperiod*10) + vote.endvote() + + world << "\red*** A vote to [vote.mode?"change game mode":"restart"] has been initiated by [M.key]." + world << "\red You have [vote.timetext(config.voteperiod)] to vote." + + if(config.logvote) world.log << "VOTE: Voting to [vote.mode?"change mode":"restart round"] started by [M.name]/[M.key]" + + for(var/mob/CM in world) + if(CM.client) + if(config.votenodefault || (config.votenodead && CM.stat == 2)) + CM.client.vote = "none" + else + CM.client.vote = "default" + + if(M) M.vote() + return + + + return + + if(href_list["vote"] && vote.voting) + if(M) + M.client.vote = href_list["vote"] + + //world << "Setting client [M.key]'s vote to: [href_list["vote"]]." + + M.vote() + return \ No newline at end of file diff --git a/main-src/Code/weap_sat.dm b/main-src/Code/weap_sat.dm new file mode 100644 index 0000000..943a756 --- /dev/null +++ b/main-src/Code/weap_sat.dm @@ -0,0 +1,384 @@ + +/obj/machinery/computer/teleporter/New() + + src.id = text("[]", rand(1000, 9999)) + ..() + return + +/obj/machinery/computer/teleporter/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(58) + src.icon_state = "broken" + if(3.0) + if (prob(25)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(109) + src.icon_state = "broken" + else + return + +/obj/machinery/computer/teleporter/verb/lock_in(freq as num) + set src in oview(1) + set desc = "Frequency to check" + + if(stat & (NOPOWER|BROKEN) ) + return + + var/list/L = list( ) + for(var/obj/item/weapon/radio/R in world) + if (R.freq != freq) + continue //goto(26) + var/turf/T = src.find_loc(R) + if (!( T )) + continue //goto(26) + var/t1 = text("-[],[],[]", T.x, T.y, T.z) + t1 = text("[][]", R.text, t1) + L[t1] = R + //Foreach goto(26) + var/t1 = input("Please select a location to lock in.", "Locking Computer", null, null) in L + var/R = L[t1] + if ((prob(30) || istype(R, /obj/item/weapon/radio/beacon) && prob(50))) + src.locked = src.find_loc(R) + else + if (L.len) + R = L[text("[]", pick(L))] + src.locked = src.find_loc(R) + else + src.locked = null + for(var/mob/O in hearers(src, null)) + O.show_message("\blue Locked In", 2) + //Foreach goto(270) + src.add_fingerprint(usr) + return + +/obj/machinery/computer/teleporter/verb/set_id(t as text) + set src in oview(1) + set desc = "ID Tag:" + + if(stat & (NOPOWER|BROKEN) ) + return + if (t) + src.id = t + return + +/obj/machinery/computer/teleporter/proc/find_loc(obj/R as obj) + + if (!( R )) + return null + + var/turf/T = R.loc + + while(!( istype(T, /turf) )) + T = T.loc + + if(!T) + return null + + if (istype(T, /area)) + return null + + + return T + return + +/obj/machinery/computer/data/ex_act(severity) + + switch(severity) + if(1.0) + //SN src = null + del(src) + return + if(2.0) + if (prob(50)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(58) + src.icon_state = "broken" + if(3.0) + if (prob(25)) + for(var/x in src.verbs) + src.verbs -= x + //Foreach goto(109) + src.icon_state = "broken" + else + return + +/obj/machinery/computer/data/weapon/log/New() + + ..() + src.topics["Super-heater"] = "This turns a can of semi-liquid plasma into a super-heated ball of plasma." + src.topics["Amplifier"] = "This increases the intensity of a laser." + src.topics["Class 11 Laser"] = "This creates a very slow laser that is capable of penetrating most objects." + src.topics["Plasma Energizer"] = "This combines super-heated plasma with a laser beam." + src.topics["Generator"] = "This controls the entire power grid." + src.topics["Mirror"] = "this can reflect LOW power lasers. HIGH power goes through it!" + src.topics["Targetting Prism"] = "This focuses a laser coming from any direction forward." + return + +/obj/machinery/computer/data/weapon/log/display() + set src in oview(1) + + usr << "Research Log:" + ..() + return + +/obj/machinery/computer/data/weapon/info/New() + + ..() + src.topics["LOG(001)"] = "System: Deployment successful" + src.topics["LOG(002)"] = "System: Safe orbit at inclination .003 established" + src.topics["LOG(003)"] = "CenCom: Attempting test fire...ALERT(001)" + src.topics["ALERT(001)"] = "System: Cannot attempt test fire" + src.topics["LOG(004)"] = "System: Airlock accessed..." + src.topics["LOG(005)"] = "System: System successfully reset...Generator engaged" + src.topics["LOG(006)"] = "Physical: Super-heater (W005) added to power grid" + src.topics["LOG(007)"] = "Physical: Amplifier (W007) added to power grid" + src.topics["LOG(008)"] = "Physical: Plasma Energizer (W006) added to power grid" + src.topics["LOG(009)"] = "Physical: Laser (W004) added to power grid" + src.topics["LOG(010)"] = "Physical: Laser test firing" + src.topics["LOG(011)"] = "Physical: Plasma added to Super-heater" + src.topics["LOG(012)"] = "Physical: Orient N12.525,E22.124" + src.topics["LOG(013)"] = "System: Location N12.525,E22.124" + src.topics["LOG(014)"] = "Physical: Test fire...successful" + src.topics["LOG(015)"] = "Physical: Airlock accessed..." + src.topics["LOG(016)"] = "******: Disable locater systems" + src.topics["LOG(017)"] = "System: Locater Beacon-Disengaged,CenCom link-Cut...ALERT(002)" + src.topics["ALERT(002)"] = "System: Cannot seem to establish contact with Central Command" + src.topics["LOG(018)"] = "******: Shutting down all systems...ALERT(003)" + src.topics["ALERT(003)"] = "System: Power grid failure-Activating back-up power...ALERT(004)" + src.topics["ALERT(004)"] = "System: Engine failure...All systems deactivated." + return + +/obj/machinery/computer/data/weapon/info/display() + set src in oview(1) + + usr << "Research Information:" + ..() + return + +/obj/machinery/computer/data/verb/display() + set src in oview(1) + + for(var/x in src.topics) + usr << text("[], \...", x) + //Foreach goto(19) + usr << "" + src.add_fingerprint(usr) + return + +/obj/machinery/computer/data/verb/read(topic as text) + set src in oview(1) + + if (src.topics[text("[]", topic)]) + usr << text("[]\n\t []", topic, src.topics[text("[]", topic)]) + else + usr << text("Unable to find- []", topic) + src.add_fingerprint(usr) + return + +/obj/machinery/teleport/hub/Bumped(M as mob|obj) + + spawn( 0 ) + if (src.icon_state == "tele1") + teleport(M) + use_power(5000) + return + return + +/obj/machinery/teleport/hub/proc/teleport(atom/movable/M as mob|obj) + + var/atom/l = src.loc + var/obj/machinery/computer/teleporter/com = locate(/obj/machinery/computer/teleporter, locate(l.x - 2, l.y, l.z)) + if (!( com )) + return + var/atom/target = com.locked + if (!( com.locked )) + for(var/mob/O in hearers(src, null)) + O.show_message("\red Failure: Cannot authenticate locked on coordinates. Please reinstantiat coordinate matrix.", 1, "\red Error!", 2) + //Foreach goto(80) + return + var/obj/effects/sparks/O = new /obj/effects/sparks( target ) + O.dir = pick(1, 2, 4, 8) + spawn( 0 ) + O.Life() + return + if (istype(M, /atom/movable)) + if (rand(1, 1000) == 7) + M << "\red You see a fainting blue light." + M.loc = null + else + var/tx = target.x + rand(-2.0, 2) + var/ty = target.y + rand(-2.0, 2) + tx = max(min(tx, world.maxx), 1) + ty = max(min(ty, world.maxy), 1) + M.loc = locate(tx, ty, target.z) + else + for(var/mob/B in hearers(src, null)) + B.show_message("\blue Test fire completed.", 2) + //Foreach goto(316) + return + +/obj/machinery/teleport/station/verb/engage() + set src in oview(1) + if(stat & NOPOWER) return + + var/atom/l = src.loc + var/atom/com = locate(/obj/machinery/teleport/hub, locate(l.x + 1, l.y, l.z)) + if (com) + com.icon_state = "tele1" + use_power(5000) + for(var/mob/O in hearers(src, null)) + O.show_message("\blue Teleporter engaged!", 2) + //Foreach goto(70) + src.add_fingerprint(usr) + return + +/obj/machinery/teleport/station/verb/disengage() + set src in oview(1) + if(stat & NOPOWER) return + + var/atom/l = src.loc + var/atom/com = locate(/obj/machinery/teleport/hub, locate(l.x + 1, l.y, l.z)) + if (com) + com.icon_state = "tele0" + for(var/mob/O in hearers(src, null)) + O.show_message("\blue Teleporter disengaged!", 2) + //Foreach goto(70) + src.add_fingerprint(usr) + return + +/obj/machinery/teleport/station/verb/testfire() + set src in oview(1) + + if(stat & NOPOWER) return + + var/atom/l = src.loc + var/obj/machinery/teleport/hub/com = locate(/obj/machinery/teleport/hub, locate(l.x + 1, l.y, l.z)) + if (com && !active) + active = 1 + for(var/mob/O in hearers(src, null)) + O.show_message("\blue Test firing!", 2) + //Foreach goto(60) + com.teleport() + use_power(5000) + + spawn(30) + active=0 + + src.add_fingerprint(usr) + return + +/obj/machinery/teleport/station/power_change() + ..() + if(stat & NOPOWER) + icon_state = "controller-p" + var/obj/machinery/teleport/hub/com = locate(/obj/machinery/teleport/hub, locate(x + 1, y, z)) + if(com) + com.icon_state = "tele0" + else + icon_state = "controller" + +/obj/effects/smoke/proc/Life() + + if (src.amount > 1) + var/obj/effects/smoke/W = new src.type( src.loc ) + W.amount = src.amount - 1 + W.dir = src.dir + spawn( 0 ) + W.Life() + return + src.amount-- + if (src.amount <= 0) + sleep(50) + //SN src = null + del(src) + return + var/turf/T = get_step(src, turn(src.dir, pick(90, 0, 0, -90.0))) + if ((T && T.density)) + src.dir = turn(src.dir, pick(-90.0, 90)) + else + step_to(src, T, null) + T = src.loc + if (istype(T, /turf)) + T.firelevel = T.poison + spawn( 3 ) + src.Life() + return + return + +/obj/effects/sparks/proc/Life() + + if (src.amount > 1) + var/obj/effects/sparks/W = new src.type( src.loc ) + W.amount = src.amount - 1 + W.dir = src.dir + spawn( 0 ) + W.Life() + return + src.amount-- + if (src.amount <= 0) + sleep(50) + //SN src = null + del(src) + return + var/turf/T = get_step(src, turn(src.dir, pick(90, 0, 0, -90.0))) + if ((T && T.density)) + src.dir = turn(src.dir, pick(-90.0, 90)) + else + step_to(src, T, null) + T = src.loc + if (istype(T, /turf)) + T.firelevel = T.poison + spawn( 3 ) + src.Life() + return + return + +/obj/effects/sparks/New() + + ..() + var/turf/T = src.loc + if (istype(T, /turf)) + T.firelevel = T.poison + return + +/obj/effects/sparks/Del() + + var/turf/T = src.loc + if (istype(T, /turf)) + T.firelevel = T.poison + ..() + return + +/obj/effects/sparks/Move() + + ..() + var/turf/T = src.loc + if (istype(T, /turf)) + T.firelevel = T.poison + return + +/obj/laser/Bump() + + src.range-- + return + +/obj/laser/Move() + + src.range-- + return + +/atom/proc/laserhit(L as obj) + + return 1 + return diff --git a/main-src/Code/weapons.dm b/main-src/Code/weapons.dm new file mode 100644 index 0000000..c564c71 --- /dev/null +++ b/main-src/Code/weapons.dm @@ -0,0 +1,1668 @@ + +/obj/machinery/nuclearbomb/New() + + if (nuke_code) + src.r_code = text("[]", nuke_code) + ..() + return + +/obj/machinery/nuclearbomb/process() + + if (src.timing) + src.timeleft-- + if (src.timeleft <= 0) + explode() + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(46) + return + +/obj/machinery/nuclearbomb/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/machinery/nuclearbomb/attack_hand(mob/user as mob) + + if (src.extended) + user.machine = src + var/dat = text("Nuclear Fission Explosive
    \nAuth. Disk: []


    ", src, (src.auth ? "++++++++++" : "----------")) + if (src.auth) + if (src.yes_code) + dat += text("\nStatus: []-[]
    \nTimer: []
    \n
    \nTimer: [] Toggle
    \nTime: - - [] + +
    \n
    \nSafety: [] Toggle
    \nAnchor: [] Toggle
    \n", (src.timing ? "Func/Set" : "Functional"), (src.safety ? "Safe" : "Engaged"), src.timeleft, (src.timing ? "On" : "Off"), src, src, src, src.timeleft, src, src, (src.safety ? "On" : "Off"), src, (src.anchored ? "Engaged" : "Off"), src) + else + dat += text("\nStatus: Auth. S2-[]
    \nTimer: []
    \n
    \nTimer: [] Toggle
    \nTime: - - [] + +
    \n
    \n[] Safety: Toggle
    \nAnchor: [] Toggle
    \n", (src.safety ? "Safe" : "Engaged"), src.timeleft, (src.timing ? "On" : "Off"), src.timeleft, (src.safety ? "On" : "Off"), (src.anchored ? "Engaged" : "Off")) + else + if (src.timing) + dat += text("\nStatus: Set-[]
    \nTimer: []
    \n
    \nTimer: [] Toggle
    \nTime: - - [] + +
    \n
    \nSafety: [] Toggle
    \nAnchor: [] Toggle
    \n", (src.safety ? "Safe" : "Engaged"), src.timeleft, (src.timing ? "On" : "Off"), src.timeleft, (src.safety ? "On" : "Off"), (src.anchored ? "Engaged" : "Off")) + else + dat += text("\nStatus: Auth. S1-[]
    \nTimer: []
    \n
    \nTimer: [] Toggle
    \nTime: - - [] + +
    \n
    \nSafety: [] Toggle
    \nAnchor: [] Toggle
    \n", (src.safety ? "Safe" : "Engaged"), src.timeleft, (src.timing ? "On" : "Off"), src.timeleft, (src.safety ? "On" : "Off"), (src.anchored ? "Engaged" : "Off")) + var/message = "AUTH" + if (src.auth) + message = text("[]", src.code) + if (src.yes_code) + message = "*****" + dat += text("
    \n>[]
    \n1-2-3
    \n4-5-6
    \n7-8-9
    \nR-0-E
    \n
    ", message, src, src, src, src, src, src, src, src, src, src, src, src) + user << browse(dat, "window=nuclearbomb;size=300x400") + else + src.anchored = 1 + flick("nuclearbombc", src) + src.icon_state = "nuclearbomb1" + src.extended = 1 + return + +/obj/machinery/nuclearbomb/Topic(href, href_list) + ..() + if (usr.stat || usr.restrained()) + return + if ((!( istype(usr, /mob/human) ) && (!( ticker ) || (ticker && ticker.mode != "monkey")))) + usr << "\red You don't have the dexterity to do this!" + return + if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf)))) + usr.machine = src + if (href_list["auth"]) + if (src.auth) + src.auth.loc = src.loc + src.yes_code = 0 + src.auth = null + else + var/obj/item/I = usr.equipped() + if (istype(I, /obj/item/weapon/disk/nuclear)) + usr.drop_item() + I.loc = src + src.auth = I + if (src.auth) + if (href_list["type"]) + if (href_list["type"] == "E") + if (src.code == src.r_code) + src.yes_code = 1 + src.code = null + else + src.code = "ERROR" + else + if (href_list["type"] == "R") + src.yes_code = 0 + src.code = null + else + src.code += text("[]", href_list["type"]) + if (length(src.code) > 5) + src.code = "ERROR" + if (src.yes_code) + if (href_list["time"]) + var/time = text2num(href_list["time"]) + src.timeleft += time + src.timeleft = min(max(round(src.timeleft), 5), 600) + if (href_list["timer"]) + if (src.timing == -1.0) + return + src.timing = !( src.timing ) + if (src.timing) + src.icon_state = "nuclearbomb2" + else + src.icon_state = "nuclearbomb1" + if (href_list["safety"]) + src.safety = !( src.safety ) + if (href_list["anchor"]) + src.anchored = !( src.anchored ) + src.add_fingerprint(usr) + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + src.attack_hand(M) + //Foreach goto(511) + else + usr << browse(null, "window=nuclearbomb") + return + return + +/obj/machinery/nuclearbomb/ex_act() + + if (src.timing == -1.0) + return + else + return ..() + return + + +/obj/machinery/nuclearbomb/blob_act() + + if (src.timing == -1.0) + return + else + return ..() + return + +/obj/machinery/nuclearbomb/proc/explode() + + if (src.safety) + src.timing = 0 + return + src.timing = -1.0 + src.yes_code = 0 + src.icon_state = "nuclearbomb3" + sleep(20) + var/turf/T = src.loc + while(!( istype(T, /turf) )) + T = T.loc + var/min = 50 + var/med = 250 + var/max = 500 + var/sw = locate(1, 1, T.z) + var/ne = locate(world.maxx, world.maxy, T.z) + + defer_powernet_rebuild = 1 + + for(var/turf/U in block(sw, ne)) + var/zone = 4 + if ((U.y <= T.y + max && U.y >= T.y - max && U.x <= T.x + max && U.x >= T.x - max)) + zone = 3 + if ((U.y <= T.y + med && U.y >= T.y - med && U.x <= T.x + med && U.x >= T.x - med)) + zone = 2 + if ((U.y <= T.y + min && U.y >= T.y - min && U.x <= T.x + min && U.x >= T.x - min)) + zone = 1 + for(var/atom/A in U) + A.ex_act(zone) + //Foreach goto(404) + U.ex_act(zone) + U.buildlinks() + //Foreach goto(148) + + + defer_powernet_rebuild = 0 + makepowernets() + ticker.nuclear(src.z) + //SN src = null + del(src) + return + return + +/obj/item/weapon/infra_sensor/New() + + ..() + spawn( 0 ) + src.process() + return + return + +/obj/item/weapon/infra_sensor/proc/process() + + if (src.passive) + for(var/obj/beam/i_beam/I in range(2, src.loc)) + I.left = 2 + //Foreach goto(30) + spawn( 10 ) + src.process() + return + return + +/obj/item/weapon/infra_sensor/proc/burst() + + for(var/obj/beam/i_beam/I in range(src.loc)) + I.left = 10 + //Foreach goto(22) + for(var/obj/item/weapon/infra/I in range(src.loc)) + I.visible = 1 + spawn( 0 ) + if ((I && I.first)) + I.first.vis_spread(1) + return + //Foreach goto(69) + for(var/obj/item/weapon/assembly/rad_infra/I in range(src.loc)) + I.part2.visible = 1 + spawn( 0 ) + if ((I.part2 && I.part2.first)) + I.part2.first.vis_spread(1) + return + //Foreach goto(145) + return + +/obj/item/weapon/infra_sensor/attack_self(mob/user as mob) + + user.machine = src + var/dat = text("Infrared Sensor
    \nPassive Emitter: []
    \nActive Emitter: Burst Fire\n
    ", (src.passive ? text("On", src) : text("Off", src)), src) + user << browse(dat, "window=infra_sensor") + return + +/obj/item/weapon/infra_sensor/Topic(href, href_list) + ..() + if (usr.stat || usr.restrained()) + return + if ((usr.contents.Find(src) || (usr.contents.Find(src.master) || (get_dist(src, usr) <= 1 && istype(src.loc, /turf))))) + usr.machine = src + if (href_list["passive"]) + src.passive = !( src.passive ) + if (href_list["active"]) + spawn( 0 ) + src.burst() + return + if (!( src.master )) + if (istype(src.loc, /mob)) + attack_self(src.loc) + else + for(var/mob/M in viewers(1, src)) + if (M.client) + src.attack_self(M) + //Foreach goto(164) + else + if (istype(src.master.loc, /mob)) + src.attack_self(src.master.loc) + else + for(var/mob/M in viewers(1, src.master)) + if (M.client) + src.attack_self(M) + //Foreach goto(240) + src.add_fingerprint(usr) + else + usr << browse(null, "window=infra_sensor") + return + return + +/obj/item/weapon/prox_sensor/dropped() + + spawn( 0 ) + src.sense() + return + return + +/obj/item/weapon/prox_sensor/proc/sense() + + if (src.state) + if (src.master) + spawn( 0 ) + src.master:r_signal(1, src) + return + else + for(var/mob/O in hearers(null, null)) + O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2) + //Foreach goto(58) + return + +/obj/item/weapon/prox_sensor/HasProximity(atom/movable/AM as mob|obj) + + if (istype(AM, /obj/beam)) + return + if (AM.move_speed < 12) + + src.sense() + return + +/obj/item/weapon/prox_sensor/attackby(obj/item/weapon/radio/signaler/S as obj, mob/user as mob) + + if ((!( istype(S, /obj/item/weapon/radio/signaler) ) || !( S.b_stat ))) + return + var/obj/item/weapon/assembly/rad_prox/R = new /obj/item/weapon/assembly/rad_prox( user ) + S.loc = R + R.part1 = S + S.layer = initial(S.layer) + if (user.client) + user.client.screen -= S + if (user.r_hand == S) + user.u_equip(S) + user.r_hand = R + else + user.u_equip(S) + user.l_hand = R + S.master = R + src.master = R + src.layer = initial(src.layer) + user.u_equip(src) + if (user.client) + user.client.screen -= src + src.loc = R + R.part2 = src + R.layer = 20 + R.loc = user + R.dir = src.dir + src.add_fingerprint(user) + return + +/obj/item/weapon/prox_sensor/attack_self(mob/user as mob) + + user.machine = src + var/dat = text("Proximity Sensor\nStatus: []
    \n[]\n
    ", (src.state ? text("On", src) : text("Off", src)), (src.state ? "\red Time On (30)" : text("Time On (30)", src))) + user << browse(dat, "window=prox") + return + + + + +/obj/item/weapon/prox_sensor/Topic(href, href_list) + ..() + if (usr.stat || usr.restrained()) + return + if ((usr.contents.Find(src) || usr.contents.Find(src.master) || get_dist(src, usr) <= 1 && istype(src.loc, /turf))) + usr.machine = src + if (href_list["state"]) + src.state = !( src.state ) + src.icon_state = text("motion[]", src.state) + if (src.master) + src.master:c_state(src.state, src) + if (href_list["time"]) + src.icon_state = "motion2" + + if(src.master) + src.master:c_state(2, src) + spawn( 300 ) + if (src.state == 0) + src.state = !( src.state ) + src.icon_state = text("motion[]", src.state) + if (src.master) + src.master:c_state(src.state, src) + return + if (!( src.master )) + if (istype(src.loc, /mob)) + attack_self(src.loc) + else + for(var/mob/M in viewers(1, src)) + if (M.client) + src.attack_self(M) + //Foreach goto(234) + else + if (istype(src.master.loc, /mob)) + src.attack_self(src.master.loc) + else + for(var/mob/M in viewers(1, src.master)) + if (M.client) + src.attack_self(M) + //Foreach goto(310) + else + usr << browse(null, "window=prox") + return + return + +/obj/item/weapon/prox_sensor/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/item/weapon/prox_sensor/Move() + + ..() + src.sense() + return + +/obj/item/weapon/infra/proc/hit() + + if (src.master) + spawn( 0 ) + src.master:r_signal(1, src) + return + else + for(var/mob/O in hearers(null, null)) + O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2) + //Foreach goto(51) + return + +/obj/item/weapon/infra/proc/process() + + + if ((!( src.first ) && (src.state && (istype(src.loc, /turf) || (src.master && istype(src.master.loc, /turf)))))) + //world << "infra process : at [x] [y] [z]" + + var/obj/beam/i_beam/I = new /obj/beam/i_beam( (src.master ? src.master.loc : src.loc) ) + //world << "infra spawning beam : \ref[I]" + I.master = src + I.density = 1 + I.dir = src.dir + step(I, I.dir) + if (I) + //world << "infra: beam at [I.x] [I.y] [I.z]" + I.density = 0 + src.first = I + //world << "infra : vis_spread" + I.vis_spread(src.visible) + spawn( 0 ) + if (I) + //world << "infra: setting limit" + I.limit = 20 + //world << "infra: processing beam \ref[I]" + I.process() + return + if (!( src.state )) + //src.first = null + del(src.first) + spawn( 10 ) + src.process() + return + return + +/obj/item/weapon/infra/attackby(obj/item/weapon/radio/signaler/S as obj, mob/user as mob) + + if ((!( istype(S, /obj/item/weapon/radio/signaler) ) || !( S.b_stat ))) + return + var/obj/item/weapon/assembly/rad_infra/R = new /obj/item/weapon/assembly/rad_infra( user ) + S.loc = R + R.part1 = S + S.layer = initial(S.layer) + if (user.client) + user.client.screen -= S + if (user.r_hand == S) + user.u_equip(S) + user.r_hand = R + else + user.u_equip(S) + user.l_hand = R + S.master = R + src.master = R + src.layer = initial(src.layer) + user.u_equip(src) + if (user.client) + user.client.screen -= src + src.loc = R + R.part2 = src + R.layer = 20 + R.loc = user + R.dir = src.dir + src.add_fingerprint(user) + return + +/obj/item/weapon/infra/New() + + spawn( 0 ) + src.process() + return + ..() + return + +/obj/item/weapon/infra/attack_self(mob/user as mob) + + user.machine = src + var/dat = text("Infrared Laser\nStatus: []
    \nVisibility: []
    \n
    ", (src.state ? text("On", src) : text("Off", src)), (src.visible ? text("Visible", src) : text("Invisible", src))) + user << browse(dat, "window=infra") + return + +/obj/item/weapon/infra/Topic(href, href_list) + ..() + if (usr.stat || usr.restrained()) + return + if ((usr.contents.Find(src) || usr.contents.Find(src.master) || get_dist(src, usr) <= 1 && istype(src.loc, /turf))) + usr.machine = src + if (href_list["state"]) + src.state = !( src.state ) + src.icon_state = text("infrared[]", src.state) + if (src.master) + src.master:c_state(src.state, src) + if (href_list["visible"]) + src.visible = !( src.visible ) + spawn( 0 ) + if (src.first) + src.first.vis_spread(src.visible) + return + if (!( src.master )) + if (istype(src.loc, /mob)) + attack_self(src.loc) + else + for(var/mob/M in viewers(1, src)) + if (M.client) + src.attack_self(M) + //Foreach goto(211) + else + if (istype(src.master.loc, /mob)) + src.attack_self(src.master.loc) + else + for(var/mob/M in viewers(1, src.master)) + if (M.client) + src.attack_self(M) + //Foreach goto(287) + else + usr << browse(null, "window=infra") + return + return + +/obj/item/weapon/infra/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/item/weapon/infra/attack_hand() + + //src.first = null + del(src.first) + ..() + return + +/obj/item/weapon/infra/Move() + + var/t = src.dir + ..() + src.dir = t + //src.first = null + del(src.first) + return + +/obj/item/weapon/infra/verb/rotate() + set src in usr + + src.dir = turn(src.dir, 90) + return + +/obj/item/weapon/timer/proc/time() + + + src.c_state(0) + + if (src.master) + spawn( 0 ) + src.master:r_signal(1, src) + return + else + for(var/mob/O in hearers(null, null)) + O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2) + //Foreach goto(51) + return + +//*****RM + + +/obj/item/weapon/timer/proc/c_state(n) + + src.icon_state = text("timer[]", n) + + if(src.master) + src.master:c_state(n) + + return + + +//***** + +/obj/item/weapon/timer/proc/process() + + if (src.timing) + if (src.time > 0) + src.time = round(src.time) - 1 + if(time<5) + src.c_state(2) + else + time() + src.time = 0 + src.timing = 0 + if (!( src.master )) + if (istype(src.loc, /mob)) + attack_self(src.loc) + else + for(var/mob/M in viewers(1, src)) + if (M.client) + src.attack_self(M) + //Foreach goto(100) + else + if (istype(src.master.loc, /mob)) + src.attack_self(src.master.loc) + else + for(var/mob/M in viewers(1, src.master)) + if (M.client) + src.attack_self(M) + //Foreach goto(176) + spawn( 10 ) + src.process() + return + return + +/obj/item/weapon/timer/attackby(obj/item/weapon/W as obj, mob/user as mob) + + + if (istype(W, /obj/item/weapon/radio/signaler) ) + var/obj/item/weapon/radio/signaler/S = W + if(!S.b_stat) + return + + var/obj/item/weapon/assembly/rad_time/R = new /obj/item/weapon/assembly/rad_time( user ) + S.loc = R + R.part1 = S + S.layer = initial(S.layer) + if (user.client) + user.client.screen -= S + if (user.r_hand == S) + user.u_equip(S) + user.r_hand = R + else + user.u_equip(S) + user.l_hand = R + S.master = R + src.master = R + src.layer = initial(src.layer) + user.u_equip(src) + if (user.client) + user.client.screen -= src + src.loc = R + R.part2 = src + R.layer = 20 + R.loc = user + R.dir = src.dir + src.add_fingerprint(user) + R.add_fingerprint(user) + return + +/obj/item/weapon/timer/New() + + spawn( 0 ) + src.process() + return + ..() + return + +/obj/item/weapon/timer/attack_self(mob/user as mob) + + if ((user.contents.Find(src) || user.contents.Find(src.master) || get_dist(src, user) <= 1 && istype(src.loc, /turf))) + + user.machine = src + var/second = src.time % 60 + var/minute = (src.time - second) / 60 + var/dat = text("Timing Unit\n[] []:[]\n- - + +\n", (src.timing ? text("Timing", src) : text("Not Timing", src)), minute, second, src, src, src, src) + user << browse(dat, "window=timer") + else + user << browse(null, "window=timer") + user.machine = null + + return + +/obj/item/weapon/timer/Topic(href, href_list) + ..() + if (usr.stat) + return + if ((usr.contents.Find(src) || usr.contents.Find(src.master) || get_dist(src, usr) <= 1 && istype(src.loc, /turf))) + usr.machine = src + if (href_list["time"]) + src.timing = text2num(href_list["time"]) + if(timing) + src.c_state(1) + + if (href_list["tp"]) + var/tp = text2num(href_list["tp"]) + src.time += tp + src.time = min(max(round(src.time), 0), 600) + + if (!( src.master )) + if (istype(src.loc, /mob)) + attack_self(src.loc) + else + for(var/mob/M in viewers(1, src)) + if (M.client) + src.attack_self(M) + //Foreach goto(192) + else + if (istype(src.master.loc, /mob)) + src.attack_self(src.master.loc) + else + for(var/mob/M in viewers(1, src.master)) + if (M.client) + src.attack_self(M) + //Foreach goto(268) + src.add_fingerprint(usr) + else + usr << browse(null, "window=timer") + return + return + +/obj/item/weapon/assembly/proc/r_signal(signal) + + return + +/obj/item/weapon/assembly/proc/c_state(n, O as obj) + + return + +/obj/item/weapon/assembly/shock_kit/Del() + + //src.part1 = null + del(src.part1) + //src.part2 = null + del(src.part2) + ..() + return + +/obj/item/weapon/assembly/shock_kit/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if ((istype(W, /obj/item/weapon/wrench) && !( src.status ))) + var/turf/T = src.loc + if (ismob(T)) + T = T.loc + src.part1.loc = T + src.part2.loc = T + src.part1.master = null + src.part2.master = null + src.part1 = null + src.part2 = null + //SN src = null + del(src) + return + if (!( istype(W, /obj/item/weapon/screwdriver) )) + return + src.status = !( src.status ) + if (src.status) + user.show_message("\blue The shock pack is now secured!", 1) + else + user.show_message("\blue The shock pack is now unsecured!", 1) + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/shock_kit/attack_self(mob/user as mob) + + src.part1.attack_self(user, src.status) + src.part2.attack_self(user, src.status) + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/shock_kit/r_signal(n, source) + + //***** + //world << "Shock kit got r_signal" + if (istype(src.loc, /obj/stool/chair/e_chair)) + var/obj/stool/chair/e_chair/C = src.loc + //world << "Shock kit sending shock to EC" + C.shock() + return + +//*****RM + +/obj/item/weapon/assembly/time_ignite/Del() + del(part1) + del(part2) + ..() + +/obj/item/weapon/assembly/time_ignite/attack_self(mob/user as mob) + + src.part1.attack_self(user, src.status) + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/time_ignite/r_signal() + + for(var/mob/O in hearers(1, src.loc)) + O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2) + //Foreach goto(20) + src.part2.ignite() + return + +/obj/item/weapon/assembly/time_ignite/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if ((istype(W, /obj/item/weapon/wrench) && !( src.status ))) + var/turf/T = src.loc + if (ismob(T)) + T = T.loc + src.part1.loc = T + src.part2.loc = T + src.part1.master = null + src.part2.master = null + src.part1 = null + src.part2 = null + + del(src) + return + if (!( istype(W, /obj/item/weapon/screwdriver) )) + return + src.status = !( src.status ) + if (src.status) + user.show_message("\blue The timer is now secured!", 1) + else + user.show_message("\blue The timer is now unsecured!", 1) + + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/time_ignite/c_state(n) + + src.icon_state = text("time_igniter[]", n) + return + +//***** + +/obj/item/weapon/assembly/rad_time/Del() + + //src.part1 = null + del(src.part1) + //src.part2 = null + del(src.part2) + ..() + return + +/obj/item/weapon/assembly/rad_time/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if ((istype(W, /obj/item/weapon/wrench) && !( src.status ))) + var/turf/T = src.loc + if (ismob(T)) + T = T.loc + src.part1.loc = T + src.part2.loc = T + src.part1.master = null + src.part2.master = null + src.part1 = null + src.part2 = null + //SN src = null + del(src) + return + if (!( istype(W, /obj/item/weapon/screwdriver) )) + return + src.status = !( src.status ) + if (src.status) + user.show_message("\blue The signaler is now secured!", 1) + else + user.show_message("\blue The signaler is now unsecured!", 1) + src.part1.b_stat = !( src.status ) + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/rad_time/attack_self(mob/user as mob) + + src.part1.attack_self(user, src.status) + src.part2.attack_self(user, src.status) + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/rad_time/r_signal(n, source) + + if (source == src.part2) + src.part1.s_signal(1) + return + +/obj/item/weapon/assembly/rad_prox/c_state(n) + + src.icon_state = text("motion[]", n) + return + +/obj/item/weapon/assembly/rad_prox/Del() + + //src.part1 = null + del(src.part1) + //src.part2 = null + del(src.part2) + ..() + return + +/obj/item/weapon/assembly/rad_prox/HasProximity(atom/movable/AM as mob|obj) + + if (istype(AM, /obj/beam)) + return + if (AM.move_speed < 12) + src.part2.sense() + return + +/obj/item/weapon/assembly/rad_prox/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if ((istype(W, /obj/item/weapon/wrench) && !( src.status ))) + var/turf/T = src.loc + if (ismob(T)) + T = T.loc + src.part1.loc = T + src.part2.loc = T + src.part1.master = null + src.part2.master = null + src.part1 = null + src.part2 = null + //SN src = null + del(src) + return + if (!( istype(W, /obj/item/weapon/screwdriver) )) + return + src.status = !( src.status ) + if (src.status) + user.show_message("\blue The proximity sensor is now secured!", 1) + else + user.show_message("\blue The proximity sensor is now unsecured!", 1) + src.part1.b_stat = !( src.status ) + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/rad_prox/attack_self(mob/user as mob) + + src.part1.attack_self(user, src.status) + src.part2.attack_self(user, src.status) + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/rad_prox/r_signal(n, source) + + if (source == src.part2) + src.part1.s_signal(1) + return + +/obj/item/weapon/assembly/rad_prox/Move() + + ..() + src.part2.sense() + return + +/obj/item/weapon/assembly/rad_prox/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/item/weapon/assembly/rad_prox/dropped() + + spawn( 0 ) + src.part2.sense() + return + return + +/obj/item/weapon/assembly/rad_infra/c_state(n) + + src.icon_state = text("infrared[]", n) + return + +/obj/item/weapon/assembly/rad_infra/Del() + + //src.part1 = null + del(src.part1) + //src.part2 = null + del(src.part2) + ..() + return + +/obj/item/weapon/assembly/rad_infra/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if ((istype(W, /obj/item/weapon/wrench) && !( src.status ))) + var/turf/T = src.loc + if (ismob(T)) + T = T.loc + src.part1.loc = T + src.part2.loc = T + src.part1.master = null + src.part2.master = null + src.part1 = null + src.part2 = null + //SN src = null + del(src) + return + if (!( istype(W, /obj/item/weapon/screwdriver) )) + return + src.status = !( src.status ) + if (src.status) + user.show_message("\blue The infrared laser is now secured!", 1) + else + user.show_message("\blue The infrared laser is now unsecured!", 1) + src.part1.b_stat = !( src.status ) + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/rad_infra/attack_self(mob/user as mob) + + src.part1.attack_self(user, src.status) + src.part2.attack_self(user, src.status) + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/rad_infra/r_signal(n, source) + + if (source == src.part2) + src.part1.s_signal(1) + return + +/obj/item/weapon/assembly/rad_infra/verb/rotate() + set src in usr + + src.dir = turn(src.dir, 90) + src.part2.dir = src.dir + src.add_fingerprint(usr) + return + +/obj/item/weapon/assembly/rad_infra/Move() + + var/t = src.dir + ..() + src.dir = t + //src.part2.first = null + del(src.part2.first) + return + +/obj/item/weapon/assembly/rad_infra/attack_paw(mob/user as mob) + + return src.attack_hand(user) + return + +/obj/item/weapon/assembly/rad_infra/attack_hand(M) + + //src.part2.first = null + del(src.part2.first) + ..() + return + +/obj/item/weapon/assembly/prox_ignite/HasProximity(atom/movable/AM as mob|obj) + + if (istype(AM, /obj/beam)) + return + if (AM.move_speed < 12) + src.part1.sense() + return + +/obj/item/weapon/assembly/prox_ignite/dropped() + + spawn( 0 ) + src.part1.sense() + return + return + +/obj/item/weapon/assembly/prox_ignite/Del() + + //src.part1 = null + del(src.part1) + //src.part2 = null + del(src.part2) + ..() + return + +/obj/item/weapon/assembly/prox_ignite/c_state(n) + + src.icon_state = text("prox_igniter[]", n) + return + +/obj/item/weapon/assembly/prox_ignite/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if ((istype(W, /obj/item/weapon/wrench) && !( src.status ))) + var/turf/T = src.loc + if (ismob(T)) + T = T.loc + src.part1.loc = T + src.part2.loc = T + src.part1.master = null + src.part2.master = null + src.part1 = null + src.part2 = null + //SN src = null + del(src) + return + if (!( istype(W, /obj/item/weapon/screwdriver) )) + return + src.status = !( src.status ) + if (src.status) + user.show_message("\blue The proximity sensor is now secured! The igniter now works!", 1) + else + user.show_message("\blue The proximity sensor is now unsecured! The igniter will not work.", 1) + src.part2.status = src.status + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/prox_ignite/attack_self(mob/user as mob) + + src.part1.attack_self(user, src.status) + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/prox_ignite/r_signal() + + for(var/mob/O in hearers(1, src.loc)) + O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2) + //Foreach goto(20) + src.part2.ignite() + return + +/obj/item/weapon/assembly/rad_ignite/Del() + + //src.part1 = null + del(src.part1) + //src.part2 = null + del(src.part2) + ..() + return + +/obj/item/weapon/assembly/rad_ignite/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if ((istype(W, /obj/item/weapon/wrench) && !( src.status ))) + var/turf/T = src.loc + if (ismob(T)) + T = T.loc + src.part1.loc = T + src.part2.loc = T + src.part1.master = null + src.part2.master = null + src.part1 = null + src.part2 = null + //SN src = null + del(src) + return + if (!( istype(W, /obj/item/weapon/screwdriver) )) + return + src.status = !( src.status ) + if (src.status) + user.show_message("\blue The radio is now secured! The igniter now works!", 1) + else + user.show_message("\blue The radio is now unsecured! The igniter will not work.", 1) + src.part2.status = src.status + src.part1.b_stat = !( src.status ) + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/rad_ignite/attack_self(mob/user as mob) + + src.part1.attack_self(user, src.status) + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/rad_ignite/r_signal() + + for(var/mob/O in hearers(1, src.loc)) + O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2) + //Foreach goto(20) + src.part2.ignite() + return + +/obj/item/weapon/assembly/m_i_ptank/c_state(n) + + src.icon_state = text("m_i_ptank[]", n) + return + +/obj/item/weapon/assembly/m_i_ptank/HasProximity(atom/movable/AM as mob|obj) + + if (istype(AM, /obj/beam)) + return + if (AM.move_speed < 12) + src.part1.sense() + return + + +//*****RM +/obj/item/weapon/assembly/m_i_ptank/Bump(atom/O) + spawn(0) + //world << "miptank bumped into [O]" + if(src.part1.state) + //world << "sending signal" + r_signal() + else + //world << "not active" + ..() + + +/obj/item/weapon/assembly/m_i_ptank/verb/Arm() + set src in view(1) + + usr.show_message("\blue The proximity sensor has been armed with a delay of 15 seconds.", 1) + + src.icon_state = "m_i_ptank2" + spawn( 150 ) + if (src.part1.state == 0) + //world << "\red miptank went active" + src.part1.state = !( src.part1.state ) + src.part1.icon_state = text("motion[]", src.part1.state) + src.c_state(src.part1.state, src) + //sleep(50) + //src.prox_check() + + + +/obj/item/weapon/assembly/m_i_ptank/proc/prox_check() + + if(!part1 || !part1.state) + return + for(var/atom/A in view(1, src.loc)) + if(A!=src && !istype(A, /turf/space) && !isarea(A)) + //world << "[A]:[A.type] was sensed" + src.part1.sense() + break + + spawn(50) + prox_check() + + +//***** + + +/obj/item/weapon/assembly/m_i_ptank/dropped() + + spawn( 0 ) + src.part1.sense() + return + return + +/obj/item/weapon/assembly/m_i_ptank/Del() + + //src.part1 = null + del(src.part1) + //src.part2 = null + del(src.part2) + //src.part3 = null + del(src.part3) + ..() + return + +/obj/item/weapon/assembly/m_i_ptank/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if ((istype(W, /obj/item/weapon/wrench) && !( src.status ))) + var/obj/item/weapon/assembly/prox_ignite/R = new /obj/item/weapon/assembly/prox_ignite( ) + R.part1 = src.part1 + R.part2 = src.part2 + R.loc = src.loc + if (user.r_hand == src) + user.r_hand = R + R.layer = 20 + else + if (user.l_hand == src) + user.l_hand = R + R.layer = 20 + src.part1.loc = R + src.part2.loc = R + src.part1.master = R + src.part2.master = R + var/turf/T = src.loc + if (!( istype(T, /turf) )) + T = T.loc + if (!( istype(T, /turf) )) + T = T.loc + src.part3.loc = T + src.part1 = null + src.part2 = null + src.part3 = null + //SN src = null + del(src) + return + if (!( istype(W, /obj/item/weapon/weldingtool) )) + return + if (!( src.status )) + src.status = 1 + bombers -= user.ckey + bombers += user.ckey + user.show_message("\blue A pressure hole has been bored to the plasma tank valve. The plasma tank can now be ignited.", 1) + else + src.status = 0 + user << "\blue The hole has been closed." + src.part2.status = src.status + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/m_i_ptank/attack_self(mob/user as mob) + + src.part1.attack_self(user, 1) + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/m_i_ptank/r_signal() + //world << "miptank [src] got signal" + for(var/mob/O in hearers(1, null)) + O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2) + //Foreach goto(19) + + if ((src.status && prob(90))) + //world << "sent ignite() to [src.part3]" + src.part3.ignite() + else + if(!src.status) + src.part3.release() + src.part1.state = 0.0 + + return + +//*****RM + +/obj/item/weapon/assembly/t_i_ptank/c_state(n) + + src.icon_state = text("t_i_ptank[]", n) + return + + +/obj/item/weapon/assembly/t_i_ptank/Del() + + //src.part1 = null + del(src.part1) + //src.part2 = null + del(src.part2) + //src.part3 = null + del(src.part3) + ..() + return + +/obj/item/weapon/assembly/t_i_ptank/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if ((istype(W, /obj/item/weapon/wrench) && !( src.status ))) + var/obj/item/weapon/assembly/time_ignite/R = new /obj/item/weapon/assembly/time_ignite( ) + R.part1 = src.part1 + R.part2 = src.part2 + R.loc = src.loc + if (user.r_hand == src) + user.r_hand = R + R.layer = 20 + else + if (user.l_hand == src) + user.l_hand = R + R.layer = 20 + src.part1.loc = R + src.part2.loc = R + src.part1.master = R + src.part2.master = R + var/turf/T = src.loc + if (!( istype(T, /turf) )) + T = T.loc + if (!( istype(T, /turf) )) + T = T.loc + src.part3.loc = T + src.part1 = null + src.part2 = null + src.part3 = null + //SN src = null + del(src) + return + if (!( istype(W, /obj/item/weapon/weldingtool) )) + return + if (!( src.status )) + src.status = 1 + bombers -= user.ckey + bombers += user.ckey + user.show_message("\blue A pressure hole has been bored to the plasma tank valve. The plasma tank can now be ignited.", 1) + else + src.status = 0 + user << "\blue The hole has been closed." + src.part2.status = src.status + + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/t_i_ptank/attack_self(mob/user as mob) + + if (src.part1) + src.part1.attack_self(user, 1) + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/t_i_ptank/r_signal() + //world << "tiptank [src] got signal" + for(var/mob/O in hearers(1, null)) + O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2) + //Foreach goto(19) + if ((src.status && prob(90))) + //world << "sent ignite() to [src.part3]" + src.part3.ignite() + else + if(!src.status) + src.part3.release() + return + +/* +/obj/item/weapon/assembly/t_i_ptank/examine() + usr << "t_i_ptank" + usr << "P1: [src.part1] : [src.part1.master]" + usr << "P2: [src.part2] : [src.part2.master]" + usr << "P3: [src.part3] : [src.part3.master]" + + usr << "status: [status] flags: [flags]" + + + +/obj/item/weapon/assembly/r_i_ptank/examine() + usr << "r_i_ptank" + usr << "P1: [src.part1] : [src.part1.master]" + usr << "P2: [src.part2] : [src.part2.master]" + usr << "P3: [src.part3] : [src.part3.master]" + + usr << "status: [status] flags: [flags]" + +*/ +//***** + + +/obj/item/weapon/assembly/r_i_ptank/Del() + + //src.part1 = null + del(src.part1) + //src.part2 = null + del(src.part2) + //src.part3 = null + del(src.part3) + ..() + return + +/obj/item/weapon/assembly/r_i_ptank/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if ((istype(W, /obj/item/weapon/wrench) && !( src.status ))) + var/obj/item/weapon/assembly/rad_ignite/R = new /obj/item/weapon/assembly/rad_ignite( ) + R.part1 = src.part1 + R.part2 = src.part2 + R.loc = src.loc + if (user.r_hand == src) + user.r_hand = R + R.layer = 20 + else + if (user.l_hand == src) + user.l_hand = R + R.layer = 20 + src.part1.loc = R + src.part2.loc = R + src.part1.master = R + src.part2.master = R + var/turf/T = src.loc + if (!( istype(T, /turf) )) + T = T.loc + if (!( istype(T, /turf) )) + T = T.loc + src.part3.loc = T + src.part1 = null + src.part2 = null + src.part3 = null + //SN src = null + del(src) + return + if (!( istype(W, /obj/item/weapon/weldingtool) )) + return + if (!( src.status )) + src.status = 1 + bombers -= user.ckey + bombers += user.ckey + user.show_message("\blue A pressure hole has been bored to the plasma tank valve. The plasma tank can now be ignited.", 1) + else + src.status = 0 + user << "\blue The hole has been closed." + src.part2.status = src.status + src.part1.b_stat = !( src.status ) + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/r_i_ptank/attack_self(mob/user as mob) + + if (src.part1) + src.part1.attack_self(user, 1) + src.add_fingerprint(user) + return + +/obj/item/weapon/assembly/r_i_ptank/r_signal() + //world << "riptank [src] got signal" + for(var/mob/O in hearers(1, null)) + O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2) + //Foreach goto(19) + if ((src.status && prob(90))) + //world << "sent ignite() to [src.part3]" + src.part3.ignite() + else + if(!src.status) + src.part3.release() + return + +/obj/bullet/Bump(atom/A as mob|obj|turf|area) + + spawn( 0 ) + A.las_act("bullet", src) + //SN src = null + del(src) + return + return + return + +/obj/bullet/CheckPass(B as obj) + + if (istype(B, /obj/bullet)) + return prob(95) + else + return 1 + return + +/obj/bullet/proc/process() + + if ((!( src.current ) || src.loc == src.current)) + src.current = locate(min(max(src.x + src.xo, 1), world.maxx), min(max(src.y + src.yo, 1), world.maxy), src.z) + if ((src.x == 1 || src.x == world.maxx || src.y == 1 || src.y == world.maxy)) + //SN src = null + del(src) + return + step_towards(src, src.current) + spawn( 1 ) + process() + return + return + +/obj/beam/a_laser/Bump(atom/A as mob|obj|turf|area) + + spawn( 0 ) + A.las_act(null, src) + //SN src = null + del(src) + return + return + return + +/obj/beam/a_laser/proc/process() + + if ((!( src.current ) || src.loc == src.current)) + src.current = locate(min(max(src.x + src.xo, 1), world.maxx), min(max(src.y + src.yo, 1), world.maxy), src.z) + if ((src.x == 1 || src.x == world.maxx || src.y == 1 || src.y == world.maxy)) + //SN src = null + del(src) + return + step_towards(src, src.current) + src.life-- + if (src.life <= 0) + //SN src = null + del(src) + return + spawn( 1 ) + src.process() + return + return + +/obj/beam/a_laser/s_laser/Bump(atom/A as mob|obj|turf|area) + + spawn( 0 ) + if(A) + A.las_act(1) + //SN src = null + del(src) + return + return + return + +/obj/beam/i_beam/proc/hit() + + //world << "beam \ref[src]: hit" + if (src.master) + //world << "beam hit \ref[src]: calling master \ref[master].hit" + src.master.hit() + //SN src = null + del(src) + return + return + +/obj/beam/i_beam/proc/vis_spread(v) + //world << "i_beam \ref[src] : vis_spread" + src.visible = v + spawn( 0 ) + if (src.next) + //world << "i_beam \ref[src] : is next [next.type] \ref[next], calling spread" + src.next.vis_spread(v) + return + return + +/obj/beam/i_beam/proc/process() + + //world << "i_beam \ref[src] : process" + + if ((src.loc.density || !( src.master ))) + //SN src = null + // world << "beam hit loc [loc] or no master [master], deleting" + del(src) + return + //world << "proccess: [src.left] left" + + if (src.left > 0) + src.left-- + if (src.left < 1) + if (!( src.visible )) + src.invisibility = 100 + else + src.invisibility = 0 + else + src.invisibility = 0 + + + //world << "now [src.left] left" + var/obj/beam/i_beam/I = new /obj/beam/i_beam( src.loc ) + I.master = src.master + I.density = 1 + I.dir = src.dir + //world << "created new beam \ref[I] at [I.x] [I.y] [I.z]" + step(I, I.dir) + + if (I) + //world << "step worked, now at [I.x] [I.y] [I.z]" + if (!( src.next )) + //world << "no src.next" + I.density = 0 + //world << "spreading" + I.vis_spread(src.visible) + src.next = I + spawn( 0 ) + //world << "limit = [src.limit] " + if ((I && src.limit > 0)) + I.limit = src.limit - 1 + //world << "calling next process" + I.process() + return + else + //world << "is a next: \ref[next], deleting beam \ref[I]" + //I = null + del(I) + else + //src.next = null + //world << "step failed, deleting \ref[src.next]" + del(src.next) + spawn( 10 ) + src.process() + return + return + +/obj/beam/i_beam/Bump() + + //SN src = null + + del(src) + return + +/obj/beam/i_beam/Bumped() + + src.hit() + return + +/obj/beam/i_beam/HasEntered(atom/movable/AM as mob|obj) + + if (istype(AM, /obj/beam)) + return + spawn( 0 ) + src.hit() + return + return + +/obj/beam/i_beam/Del() + + //src.next = null + del(src.next) + ..() + return + +/atom/proc/ex_act() + + return + +/atom/proc/blob_act() + return + +/atom/proc/las_act() + + return + +/atom/proc/buildlinks() + return + +/turf/Entered(atom/A as mob|obj) + + ..() + if ((A && A.density && !( istype(A, /obj/beam) ))) + for(var/obj/beam/i_beam/I in src) + spawn( 0 ) + if (I) + I.hit() + return + //Foreach goto(44) + return diff --git a/main-src/Icons/Cryogenic2.dmi b/main-src/Icons/Cryogenic2.dmi new file mode 100644 index 0000000..95a1471 Binary files /dev/null and b/main-src/Icons/Cryogenic2.dmi differ diff --git a/main-src/Icons/Door1.dmi b/main-src/Icons/Door1.dmi new file mode 100644 index 0000000..7900963 Binary files /dev/null and b/main-src/Icons/Door1.dmi differ diff --git a/main-src/Icons/Doorf.dmi b/main-src/Icons/Doorf.dmi new file mode 100644 index 0000000..7a5442d Binary files /dev/null and b/main-src/Icons/Doorf.dmi differ diff --git a/main-src/Icons/Icons.dmi b/main-src/Icons/Icons.dmi new file mode 100644 index 0000000..3ea19fb Binary files /dev/null and b/main-src/Icons/Icons.dmi differ diff --git a/main-src/Icons/aircontrol.dmi b/main-src/Icons/aircontrol.dmi new file mode 100644 index 0000000..47116d5 Binary files /dev/null and b/main-src/Icons/aircontrol.dmi differ diff --git a/main-src/Icons/airtunnel.dmi b/main-src/Icons/airtunnel.dmi new file mode 100644 index 0000000..d81ecaf Binary files /dev/null and b/main-src/Icons/airtunnel.dmi differ diff --git a/main-src/Icons/airtunnelcomputer.dmi b/main-src/Icons/airtunnelcomputer.dmi new file mode 100644 index 0000000..2ea26f9 Binary files /dev/null and b/main-src/Icons/airtunnelcomputer.dmi differ diff --git a/main-src/Icons/alert.dmi b/main-src/Icons/alert.dmi new file mode 100644 index 0000000..e7a90ac Binary files /dev/null and b/main-src/Icons/alert.dmi differ diff --git a/main-src/Icons/alphacolors.dmi b/main-src/Icons/alphacolors.dmi new file mode 100644 index 0000000..02316fb Binary files /dev/null and b/main-src/Icons/alphacolors.dmi differ diff --git a/main-src/Icons/ammo.dmi b/main-src/Icons/ammo.dmi new file mode 100644 index 0000000..f8e70c8 Binary files /dev/null and b/main-src/Icons/ammo.dmi differ diff --git a/main-src/Icons/assemblies.dmi b/main-src/Icons/assemblies.dmi new file mode 100644 index 0000000..112ac68 Binary files /dev/null and b/main-src/Icons/assemblies.dmi differ diff --git a/main-src/Icons/b_items.dmi b/main-src/Icons/b_items.dmi new file mode 100644 index 0000000..e8756e2 Binary files /dev/null and b/main-src/Icons/b_items.dmi differ diff --git a/main-src/Icons/belt.dmi b/main-src/Icons/belt.dmi new file mode 100644 index 0000000..f886c4d Binary files /dev/null and b/main-src/Icons/belt.dmi differ diff --git a/main-src/Icons/blob.dmi b/main-src/Icons/blob.dmi new file mode 100644 index 0000000..6ac57bf Binary files /dev/null and b/main-src/Icons/blob.dmi differ diff --git a/main-src/Icons/canister.dmi b/main-src/Icons/canister.dmi new file mode 100644 index 0000000..c9b9ea0 Binary files /dev/null and b/main-src/Icons/canister.dmi differ diff --git a/main-src/Icons/dam_human.dmi b/main-src/Icons/dam_human.dmi new file mode 100644 index 0000000..5f4d70f Binary files /dev/null and b/main-src/Icons/dam_human.dmi differ diff --git a/main-src/Icons/dam_mask.dmi b/main-src/Icons/dam_mask.dmi new file mode 100644 index 0000000..50d861c Binary files /dev/null and b/main-src/Icons/dam_mask.dmi differ diff --git a/main-src/Icons/dam_zones.dmi b/main-src/Icons/dam_zones.dmi new file mode 100644 index 0000000..8525024 Binary files /dev/null and b/main-src/Icons/dam_zones.dmi differ diff --git a/main-src/Icons/doors.dmi b/main-src/Icons/doors.dmi new file mode 100644 index 0000000..ebccccf Binary files /dev/null and b/main-src/Icons/doors.dmi differ diff --git a/main-src/Icons/engine.dmi b/main-src/Icons/engine.dmi new file mode 100644 index 0000000..f7931ce Binary files /dev/null and b/main-src/Icons/engine.dmi differ diff --git a/main-src/Icons/enginecomputer.dmi b/main-src/Icons/enginecomputer.dmi new file mode 100644 index 0000000..eb62210 Binary files /dev/null and b/main-src/Icons/enginecomputer.dmi differ diff --git a/main-src/Icons/escapepod.dmi b/main-src/Icons/escapepod.dmi new file mode 100644 index 0000000..de78c97 Binary files /dev/null and b/main-src/Icons/escapepod.dmi differ diff --git a/main-src/Icons/generator.dmi b/main-src/Icons/generator.dmi new file mode 100644 index 0000000..af40ca6 Binary files /dev/null and b/main-src/Icons/generator.dmi differ diff --git a/main-src/Icons/ghost.dmi b/main-src/Icons/ghost.dmi new file mode 100644 index 0000000..e9e5ae8 Binary files /dev/null and b/main-src/Icons/ghost.dmi differ diff --git a/main-src/Icons/heat_pipe.dmi b/main-src/Icons/heat_pipe.dmi new file mode 100644 index 0000000..48f0f3b Binary files /dev/null and b/main-src/Icons/heat_pipe.dmi differ diff --git a/main-src/Icons/help.htm b/main-src/Icons/help.htm new file mode 100644 index 0000000..947025d --- /dev/null +++ b/main-src/Icons/help.htm @@ -0,0 +1,121 @@ +
    Space Station 13
    +By: Exadv1

    +
    +Overview
    + Space Station 13 was written on BYOND. Like a majority of BYOND games it is two dimensional with a top-down view. It uses tile-based movement. Space Station 13 (or SS13 for short) starts you on a space station orbitting a very peculiar gaseous planet in a binary star system. Threoughout a round many disasters will probably occur from meteor attacks to internal disasters such as a traitor. The game is constantly being developed so eventually more disasters will occur such as pathogens, re-entry, and raiders.
    +
    +Objectives
    + The primary objective in most modes of Space Station 13 is survival. You must stay alive long enough to escape. Now when you first start the game you shouldn't immediately try to escape! You should try and prevent disaster for as long as you can. Eventually you will be able to perform various experiments on-board SS13 between disasters (medical experiments, atmospheric experiments, and plasma experiments). Also depending on the mode there may be more objectives.
    +
    +Modes
    +Traitor - In traitor mode there is a traitor aboard the space station. The objective of the traitor is to be the last person aboard the shuttle when it departs destroying anything or anyone in your way. The objective of everyone else to survive and attempt to pinpoint who the traitor is and stop them.
    +
    +Meteor - In meteor mode the objective is to escape and see how long you can ride out the meteor storm. This is very challenging and you are given no precious time to prepare for disaster.
    +Monkey - In monkey a mode a extremely mutagenous retrovirus has infected the ship. The goal as a human is to escape on the shuttle to warn the rest of the world. The monkies must infect the rest of the crew and stop them. Future modes will allow the humans to examine exactly what the virus is and apply that knowledge.
    +
    +Secret - This mode chooses randomly between all the modes (or just nothing). This is the default mode and generally produces the best gameplay.
    +
    +Proposed Modes
    +Space Raiders- A group of combatants are trying to raid the station and gather a list of items to escape to their station with.
    +Alien- A parasitic organism has infected a crew member. The crew must stay uninfected while the infected people must try and infect the others.
    +Orbital Failure- The engine/reactor system is failng and you must regain a safe orbit or plummet into the gaseous planet.
    +...
    +
    +Getting around
    +The interface for Space Station 13 is largely click driven. When I refer to attacking I am referring to double clicking.
    +Getting Started (A Quick jump-start guide to get into the game)
    +You must select your preferences then go over the begin object and get ready. (use ready verb)
    +If you want to you can go to SS13 by using enter.
    +If you don't and the game hasn't started yet you'll still be automatically teleported.
    +Movement
    +Movement on SS13 is only in the 4 cardinal directions. The diagonal directions throw/drop items, switch hand/modes. If you move into a dense object you first try to push it. Not all items can be pushed. You can also right click on an object and select 'pull' and then every movement you make will ttempt to drag that object behind you. If you wish to stop pulling you must go onto your on-screen display and find the object with a person in a box. Click on it and you will stop pulling. If you ever desire to make sure of which direction you are facing use .center and then try to move what direction you want to face.
    +'Equipping'
    +You 'equip' items in SS13 by picking them up. In order to pick an item up all you must do is attack it with a free hand. Now you hae two hands. Which hand is being used is indicated by the blue button in the lower-left area of your HUD. You can change hands by clicking the hand button or pressing the .northeast macro. You can then also then transfer that item to another part of your body. In order to do this you just attack the green box (or blue storage box) on your hud that you would like to move it to. In order to 'unequip' a equipped item that is not in your hand. Get a free hand and attack the item. Then in order to drop an item in your hand (and make it a free hand again) click the drop button (or throw to throw the item wherever you are facing).
    +Talking
    + Talking on SS13 is still via the say verb so the normal say speech bubble on the command line will still work. Please note however that you can whisper. More on this in the items selection under radio, intercoms, and headsets. There are a lot of emotes that are accessed by preceding your text with a '*'. To view a list of available emotes for your character use the type '*help' into the say menu.
    +Taking Items/Giving Items
    + You can take items from people by dragging their mob onto your mob. A screen will pop up. From this screen you can select an object to remove from them. If you select a 'Nothing' slot then you will attempt to equip that slot with the object you are holding. +Death
    + If you are dead then you can use the watch verb to look through the eyes of another mob. Depending on circumstances you can use abandon mob to restart (leaving that box blank gives you a random name). A dead person hears everything that is said but might not hear all attack message dialog.
    +
    +The Items
    +If it has a [stackable-x]. This means that if you attack another item of its type with it then you will gather more items on its stack until you hit x items. you can usually see how much is on the stack by right clicking and selecting examine.
    +
    +Analyzer - Attacking this item with itself (having it equipped then using .southeast, mode, or double clicking it) shows the oxygen, carbon dioxide, and plasma content of the tile you are standing on.
    +
    +Bottle - This item stores chemicals (60 cubic centimeters). You must use a syringe to draw chemicals from it. You can however pour bottles into bottles by attacking a bottle with another bottle.
    +
    +Brute Pack [stackable-5] - This item can be used to treat damage done by brute force weapons or piercing weapons. A mix of biodegradable experimental nanites cures most damage almost instantly amone contact.
    +
    +Card (identification) - Every crew member besides are issued this card. At game start they are given this card and a position (random) aboard Space Station 13. Late joiners get the hyper boring job of Researcher's Assisstant and must have their card filled by the captain at an identification computer. You can wear this card so that every door you walk through will open and close. (on security doors (has the black tab) you automatically try to use your card). You can also equip it and attack a door and it will stay open or stay closed. Also if you are wearing a card that is not yours then your name will be whoever the card is registered to. This however can be considered a crime and grounds for being arrested and punished.
    +
    +Clothing - This has its own section at the bottom. This includes masks and suits.
    +
    +Fire Extinguisher - This when you have equipped you can then attack anything besides a person (which can knock them unconscious) will release an anti-fire chemical which eventually helps greatly in stopping a fire. Yuo can refill this by attacking a water-tank and it will refill its 20 units. Right click on it and select examine to see how many units are left.

    +Flasks - These contain a large mixture of chemicals (liquid) that are used for cryogenic healing. More on this later.
    +
    +Handcuffs - These are used for general detainment. It takes 3 uninterrupted (no movement AT ALL) seconds in order to place them on a person. These prevent the person from dong anything with their hands and allow you to remove things from them without resistance (they normally would need to be unconscious). you can rmeove handcuffs by either removing them via the right click option or by double clicking them with a free hand.
    +
    +Health analyzer - This when you attack a target will give you the overall health and type of damage the target has occurred. note that this only gives physical health and not (role-played) mental health.
    +
    +Ointment [stackable-5] - This like bruise packs allow you to heal your and other people's damage due to fire (or a welder that is on).
    +
    +Paper - Double clicking on this will give you its text which can sometimes be very helpful. Various things not in this document are detailed on the papers such as job positions, chemical information, and an old map.
    +
    +Parts - Table and rack parts. I'm not going to explaion these seperate so just attack themselves and you will construct a rack or get the box for a table. Using a wrench on these I believe converts them to its original metal.
    +
    +Radios/Headset/Intercom - These are the general method for communication aboard SS13. In order to best use a radio you must either attack itself (this means for headsets you must take them OFF your head first) or if its an intercom attack it with a free hand. This will bring up its control box where you can select a frequency to transmit/receive on (It's very simple - You receive and transmit messages only if you are on that frequency). You can also select whether to hear messages (speaker). Having this off still let's you broadcast but you won't hear yourself broadcast or any responses from others. You can also select having it automatically boradcast. This is most important for intercoms. This means that whenever it hears something via say or a whisper it will send it broadcast it. If you have it off you can still use it prefixing your say with [h] (for head), [l] (for left hand), or [r] (for right hand). This also will whisper what you are saying to those in the tiles adjacent to you.
    +
    +Rods [stackable-6] - These are like the parts and when you attack them with themselves they will either construct a grille (need 2) or repair a grille (only 1). Unlike the parts these can be used as an OK weapon.
    +
    +Screwdriver - This item is able to help fasten and unfasten items. It can fasten canisters to connecters, tables to floors, and grilles to floors. It can also unfasten them as well. You can attack with this weapon but there is no chance of knocknig them unconscious. (besides making them bleed to death)
    +
    +Shards - This glass item can be converted into glass by using a welding tool. Until then it is an unstackable weapon. They can cause a little piercing damage.
    +
    +Sheets [stackable-5] - These are like rods except that the glass sheets build windows and the metal sheets build MANY things. All you must do is attack self.
    +
    +Storage Containers (first aid kits and toolboxes) - These allow you to store items into them to allow easier transportation of a lot of items. You cannot store storage containers in storage containers no matter what the sizes are. Also certsin things can't go in ccertain containers because of their size. Most containers hold 7 items. You can open a container in 2 ways. Drag it onto yourself or equip it in one hand then attack it with a free hand. You can then remove items by attackng them with a free hand. Then when you've removed the item close the container by double clicking on the big red close X. You place items in the container by attacking it. They automatically go in unless they don't fit.
    +
    +Syringe - This object is capable of injecting chemicals into a targets bloodstream. It can also be used for precise mixing of bottles wherejust pouring is too inaccurate. It injects and draws in increments of 5 cubic centimeters. Attack it with itself to change the mode from inject to draw and vice versa. See the chemical information paper for information on the chemicals.
    +
    +Tanks - These plain and simple hold gases. The 2 types of tanks come prestocked with either oxygen or plasma. you can attach these to a siphon or canister for refillng by attacking it. This is one of the few items that CAN be worn on your back. Also if you have a gas mask on you can attack the tank with itself in order to switch your internals on. This puts you on an external atmosphere and lets you traverse highly toxic or low oxygen environments without fear of being injured. They also make a great item for attacking. It is a good idea to turn on internals then put them on your back so they are out of your way though. See the canisters sections for more information on refilling.
    +
    +Tile [stackable-10]- These are like the rods except that they build or repair floor tiles. (only one tile regardless)
    +
    +Welding Tool (or Welder) - This has two modes swapped by attacking itself. When its off its like a wrench except it won't deconstruct. When its on it will cause piercing fire damage. It also can slice canisters open releasing their contents. It also can be used to weld open the plating on a wall, cut grilles, form chards into sheets, and many other things. Be warned that using this in a high plasma environment may ignite the highly flammable plasma! Most actions with this use up fuel which can be refilled by attacking a welding fuel tank and cghecked by using the examine verb.
    +
    +Wirecutters - These can be used to cut wires on electronic devices. They can also easily cut grilles open
    +
    +Wrench - This item performs a variety of functions that largely deal with deconstruction. Attacking a chair, stool, table, rack, or wall girders will deconstruct them into eith metal sheets, table parts, or rack parts. It's also not too bad as an item to club an assailant over the head. (You can knock them unconscious) Since they disassemble tables and racks in order to place them on the table drag them over to the table.
    +
    +Clothing
    + Masks- There are currently two types of masks. Masks can be put on by either attackng yourself with it, attacking your mask hud button, or if the other person is submissive (unconscious/handcuffed) attacking the other person to place it on them.
    +Gas mask- This filters out most plasma from the environment and allows for running on internals
    +Muzzle - This is a negative item and prevents all speech including gasping generally leaving only nod. you can take this off yourself provided your hands aren't handcuffed.
    +
    + Suits These work like masks except you must use the external clothing HUD.
    +Fire suit - This prevents damage from the flames of fire. (Not welding tool attacks though as well as the oxygen deprivation from fire) also note there is a limit which once surpassed the suit can't disperse the heat causing you o take damage.
    +
    +Canisters/Siphons/Scrubbers
    + If you attack these with a free hand you'll bring up the control box. The only part that really deserves observance is the first set of buttons. The lower valve is not in yet. The release button releases x amount of units into the connected tank or if no tank to the environment. The amount of units is determined by the valve. You can alter this amount from 0 to 1000 by using the + + + and - - - buttons which go alter by adding or subtracting 1, 5, or 50 units. The next button - siphon - either siphons gas from the environment or an attached tank. Canisters are unable to siphon from the environment! The next button stop stops all siphoning or releasing. Siphons/scrubbers also contain an option canisters do not - automatic. This makes the sensors on board the unit to try and equalize the atmospheric environment of the tile it is on every second. The vents start with this as its option. Please note that the presence of a tank makes no difference as this part is on a seperate air track and it will still release into the environment. Once your done click the close button to stop the box from popping up.
    +Scrubbers/air filters - These are like the normak siphons except that before its air cycle it releases all the oxygen it has stored. The automatic mode also instead of equalizingthe oxygen level removes carbon dioxide and plasma.
    +
    +Chairs
    + Chairs have a special feature - buckling. You can buckle someone (including yourself)into a chair by dragging them onto the chair object. The person must already be on the same tile as the chair however. You can unbuckle them/yourself from a chair by attacking the chair with a free hand. (Note: Handcuffed people can't unbuckle from chairs.)
    +
    +Miscellaneous Object Descriptions
    +
    +Alarm - This object is able to detect whether the area arod it has an appropriate co2 and o2 content to stay alive. Basically green is good and red is bad.
    +
    +Cryogenic Healing Units - There is a tutorial for this on the main SS13 website so I won't detail it here. Please note you can't revive already dead people.
    +
    +Firealarm - This is able to lock down an area instantly. When a fire gets near it it will trigger the lockdown to prevent contamination. You must use the reset button on this in order to clear the alarm and unlock the firedoors. You can also initiate a timer lock if you want time to escape.
    +
    +Grilles - These do a great job of blocking a lot of thngs. They stop most meteors in their tracks and are hard to destroy with normal weapons. (although it IS possible.)
    +
    +
    +Miscellaneous Notes (a.k.a. archived world messages)
    +
    +Job selection is in thanks to Spuzzum! A captain is still randomly assigned if no one picks captain as their choice. Also please note that if you pick something as your primary and someone else picks it as their secondary (or tertiary) then they will always lose. This is essence is fairer. Also you can pick your beginning gender and name. I hope you enjoy it! Also I've extended time till start from one minute to one and a half minutes.
    +
    + \ No newline at end of file diff --git a/main-src/Icons/hi_pipe.dmi b/main-src/Icons/hi_pipe.dmi new file mode 100644 index 0000000..77fb29e Binary files /dev/null and b/main-src/Icons/hi_pipe.dmi differ diff --git a/main-src/Icons/human.dmi b/main-src/Icons/human.dmi new file mode 100644 index 0000000..1c03266 Binary files /dev/null and b/main-src/Icons/human.dmi differ diff --git a/main-src/Icons/imap.dmi b/main-src/Icons/imap.dmi new file mode 100644 index 0000000..3185c88 Binary files /dev/null and b/main-src/Icons/imap.dmi differ diff --git a/main-src/Icons/items.dmi b/main-src/Icons/items.dmi new file mode 100644 index 0000000..c8da166 Binary files /dev/null and b/main-src/Icons/items.dmi differ diff --git a/main-src/Icons/junct-pipe.dmi b/main-src/Icons/junct-pipe.dmi new file mode 100644 index 0000000..8a954ef Binary files /dev/null and b/main-src/Icons/junct-pipe.dmi differ diff --git a/main-src/Icons/l_items.dmi b/main-src/Icons/l_items.dmi new file mode 100644 index 0000000..d6a31cd Binary files /dev/null and b/main-src/Icons/l_items.dmi differ diff --git a/main-src/Icons/lighting.dmi b/main-src/Icons/lighting.dmi new file mode 100644 index 0000000..e79e69e Binary files /dev/null and b/main-src/Icons/lighting.dmi differ diff --git a/main-src/Icons/mark.dmi b/main-src/Icons/mark.dmi new file mode 100644 index 0000000..509f383 Binary files /dev/null and b/main-src/Icons/mark.dmi differ diff --git a/main-src/Icons/meteor.dmi b/main-src/Icons/meteor.dmi new file mode 100644 index 0000000..07a97a0 Binary files /dev/null and b/main-src/Icons/meteor.dmi differ diff --git a/main-src/Icons/mob.dmi b/main-src/Icons/mob.dmi new file mode 100644 index 0000000..801d147 Binary files /dev/null and b/main-src/Icons/mob.dmi differ diff --git a/main-src/Icons/module.dmi b/main-src/Icons/module.dmi new file mode 100644 index 0000000..cff1e46 Binary files /dev/null and b/main-src/Icons/module.dmi differ diff --git a/main-src/Icons/monkey.dmi b/main-src/Icons/monkey.dmi new file mode 100644 index 0000000..14bc2e5 Binary files /dev/null and b/main-src/Icons/monkey.dmi differ diff --git a/main-src/Icons/pipes.dmi b/main-src/Icons/pipes.dmi new file mode 100644 index 0000000..062c7e9 Binary files /dev/null and b/main-src/Icons/pipes.dmi differ diff --git a/main-src/Icons/plasma.dmi b/main-src/Icons/plasma.dmi new file mode 100644 index 0000000..885cb2f Binary files /dev/null and b/main-src/Icons/plasma.dmi differ diff --git a/main-src/Icons/power.dmi b/main-src/Icons/power.dmi new file mode 100644 index 0000000..a49e0a7 Binary files /dev/null and b/main-src/Icons/power.dmi differ diff --git a/main-src/Icons/power_cond.dmi b/main-src/Icons/power_cond.dmi new file mode 100644 index 0000000..0e91e3b Binary files /dev/null and b/main-src/Icons/power_cond.dmi differ diff --git a/main-src/Icons/r_items.dmi b/main-src/Icons/r_items.dmi new file mode 100644 index 0000000..468fc87 Binary files /dev/null and b/main-src/Icons/r_items.dmi differ diff --git a/main-src/Icons/reg_pipe.dmi b/main-src/Icons/reg_pipe.dmi new file mode 100644 index 0000000..881fe63 Binary files /dev/null and b/main-src/Icons/reg_pipe.dmi differ diff --git a/main-src/Icons/screen.dmi b/main-src/Icons/screen.dmi new file mode 100644 index 0000000..cadfe1f Binary files /dev/null and b/main-src/Icons/screen.dmi differ diff --git a/main-src/Icons/screen1.dmi b/main-src/Icons/screen1.dmi new file mode 100644 index 0000000..c1ff013 Binary files /dev/null and b/main-src/Icons/screen1.dmi differ diff --git a/main-src/Icons/security.dmi b/main-src/Icons/security.dmi new file mode 100644 index 0000000..c36b14c Binary files /dev/null and b/main-src/Icons/security.dmi differ diff --git a/main-src/Icons/shards.dmi b/main-src/Icons/shards.dmi new file mode 100644 index 0000000..fa5140b Binary files /dev/null and b/main-src/Icons/shards.dmi differ diff --git a/main-src/Icons/shuttle.dmi b/main-src/Icons/shuttle.dmi new file mode 100644 index 0000000..e3c66d6 Binary files /dev/null and b/main-src/Icons/shuttle.dmi differ diff --git a/main-src/Icons/ss13mapd.png b/main-src/Icons/ss13mapd.png new file mode 100644 index 0000000..f793c48 Binary files /dev/null and b/main-src/Icons/ss13mapd.png differ diff --git a/main-src/Icons/stationobjs.dmi b/main-src/Icons/stationobjs.dmi new file mode 100644 index 0000000..57ee176 Binary files /dev/null and b/main-src/Icons/stationobjs.dmi differ diff --git a/main-src/Icons/table.dmi b/main-src/Icons/table.dmi new file mode 100644 index 0000000..b3d2952 Binary files /dev/null and b/main-src/Icons/table.dmi differ diff --git a/main-src/Icons/turfs.dmi b/main-src/Icons/turfs.dmi new file mode 100644 index 0000000..799aaaf Binary files /dev/null and b/main-src/Icons/turfs.dmi differ diff --git a/main-src/Icons/turfs2.dmi b/main-src/Icons/turfs2.dmi new file mode 100644 index 0000000..f4c2c4a Binary files /dev/null and b/main-src/Icons/turfs2.dmi differ diff --git a/main-src/Icons/uniforms.dmi b/main-src/Icons/uniforms.dmi new file mode 100644 index 0000000..0b4e67f Binary files /dev/null and b/main-src/Icons/uniforms.dmi differ diff --git a/main-src/Icons/wall.dmi b/main-src/Icons/wall.dmi new file mode 100644 index 0000000..9efe147 Binary files /dev/null and b/main-src/Icons/wall.dmi differ diff --git a/main-src/Icons/water.dmi b/main-src/Icons/water.dmi new file mode 100644 index 0000000..0b9c0a4 Binary files /dev/null and b/main-src/Icons/water.dmi differ diff --git a/main-src/Icons/weap_sat.dmi b/main-src/Icons/weap_sat.dmi new file mode 100644 index 0000000..486246f Binary files /dev/null and b/main-src/Icons/weap_sat.dmi differ diff --git a/main-src/Icons/windoor.dmi b/main-src/Icons/windoor.dmi new file mode 100644 index 0000000..c5eb2cf Binary files /dev/null and b/main-src/Icons/windoor.dmi differ diff --git a/main-src/Icons/wire.dmi b/main-src/Icons/wire.dmi new file mode 100644 index 0000000..adea195 Binary files /dev/null and b/main-src/Icons/wire.dmi differ diff --git a/main-src/Icons/zone_sel.dmi b/main-src/Icons/zone_sel.dmi new file mode 100644 index 0000000..5dab56e Binary files /dev/null and b/main-src/Icons/zone_sel.dmi differ diff --git a/main-src/Interface/skin.dmf b/main-src/Interface/skin.dmf new file mode 100644 index 0000000..2149ab5 --- /dev/null +++ b/main-src/Interface/skin.dmf @@ -0,0 +1,780 @@ +macro "macro" + elem + name = "CENTER+REP" + command = ".center" + is-disabled = false + elem + name = "NORTHEAST+REP" + command = ".northeast" + is-disabled = false + elem + name = "SOUTHEAST+REP" + command = ".southeast" + is-disabled = false + elem + name = "SOUTHWEST+REP" + command = ".southwest" + is-disabled = false + elem + name = "NORTHWEST+REP" + command = ".northwest" + is-disabled = false + elem + name = "WEST+REP" + command = ".west" + is-disabled = false + elem + name = "NORTH+REP" + command = ".north" + is-disabled = false + elem + name = "EAST+REP" + command = ".east" + is-disabled = false + elem + name = "SOUTH+REP" + command = ".south" + is-disabled = false + elem + name = "F1+REP" + command = ".options" + is-disabled = false + elem + name = "F2+REP" + command = ".screenshot" + is-disabled = false + + +menu "menu" + elem + name = "&Options and Messages...\tF1" + command = ".options" + category = "&File" + is-checked = false + can-check = false + group = "" + is-disabled = false + saved-params = "is-checked" + elem + name = "&Save screenshot...\tF2" + command = ".screenshot" + category = "&File" + is-checked = false + can-check = false + group = "" + is-disabled = false + saved-params = "is-checked" + elem + name = "&Quit" + command = ".quit" + category = "&File" + is-checked = false + can-check = false + group = "" + is-disabled = false + saved-params = "is-checked" + elem "stretch" + name = "&Stretch to fit" + command = ".winset \"mapwindow.map.icon-size=0\"" + category = "&Icons" + is-checked = true + can-check = true + group = "size" + is-disabled = false + saved-params = "is-checked" + elem "icon32" + name = "&32x32" + command = ".winset \"mapwindow.map.icon-size=32\"" + category = "&Icons" + is-checked = false + can-check = true + group = "size" + is-disabled = false + saved-params = "is-checked" + elem "icon16" + name = "&16x16" + command = ".winset \"mapwindow.map.icon-size=16\"" + category = "&Icons" + is-checked = false + can-check = true + group = "size" + is-disabled = false + saved-params = "is-checked" + elem + name = "" + command = "" + category = "&Icons" + is-checked = false + can-check = false + group = "" + is-disabled = false + saved-params = "is-checked" + elem "textmode" + name = "&Text" + command = ".winset \"menu.textmode.is-checked=true?mapwindow.map.text-mode=true:mapwindow.map.text-mode=false\"" + category = "&Icons" + is-checked = false + can-check = true + group = "" + is-disabled = false + saved-params = "" + + +window "mainwindow" + elem "mainwindow" + type = MAIN + pos = 281,0 + size = 640x440 + anchor1 = none + anchor2 = none + font-family = "" + font-size = 0 + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = false + is-default = true + border = none + drop-zone = false + right-click = false + saved-params = "pos;size;is-maximized" + title = "3.5 simulator" + titlebar = true + statusbar = true + can-close = true + can-minimize = true + can-resize = true + is-pane = false + is-maximized = false + image = "" + image-mode = stretch + keep-aspect = false + transparent-color = none + alpha = 255 + macro = "macro" + menu = "menu" + elem "mainvsplit" + type = CHILD + pos = 3,0 + size = 634x400 + anchor1 = 0,0 + anchor2 = 100,100 + font-family = "" + font-size = 0 + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "splitter" + left = "" + right = "rpane" + is-vert = true + splitter = 50 + elem "input" + type = INPUT + pos = 3,420 + size = 547x20 + anchor1 = 0,100 + anchor2 = 100,100 + font-family = "" + font-size = 0 + text-color = #000000 + background-color = #d3b5b5 + is-visible = true + is-disabled = false + is-transparent = false + is-default = true + border = sunken + drop-zone = false + right-click = false + saved-params = "" + command = "" + text = "" + multi-line = false + elem "saybutton" + type = BUTTON + pos = 550,420 + size = 40x20 + anchor1 = 100,100 + anchor2 = none + font-family = "" + font-size = 0 + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "" + text = "Chat" + image = "" + command = ".winset \"saybutton.is-checked=true?input.command=\"!say \\\"\":input.command=\"" + is-flat = false + stretch = false + is-checked = false + group = "" + button-type = pushbox + elem "hostb" + type = BUTTON + pos = 590,420 + size = 47x20 + anchor1 = 100,100 + anchor2 = none + font-family = "" + font-size = 0 + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "is-checked" + text = "Host..." + image = "" + command = ".host" + is-flat = false + stretch = false + is-checked = false + group = "" + button-type = pushbutton + +window "mapwindow" + elem "mapwindow" + type = MAIN + pos = none + size = 640x480 + anchor1 = none + anchor2 = none + font-family = "" + font-size = 0 + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "pos;size;is-maximized" + title = "" + titlebar = false + statusbar = false + can-close = false + can-minimize = false + can-resize = false + is-pane = true + is-maximized = false + image = "" + image-mode = stretch + keep-aspect = false + transparent-color = none + alpha = 255 + macro = "" + menu = "" + elem "map" + type = MAP + pos = 0,0 + size = 0x0 + anchor1 = 0,0 + anchor2 = 100,100 + font-family = "" + font-size = 0 + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = false + is-default = true + border = none + drop-zone = true + right-click = false + saved-params = "icon-size" + icon-size = 0 + text-mode = false + on-show = ".winset\"mainwindow.mainvsplit.left=mapwindow\"" + on-hide = ".winset\"mainwindow.mainvsplit.left=\"" + +window "outputwindow" + elem "outputwindow" + type = MAIN + pos = none + size = 640x480 + anchor1 = none + anchor2 = none + font-family = "" + font-size = 0 + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "pos;size;is-maximized" + title = "" + titlebar = false + statusbar = false + can-close = false + can-minimize = false + can-resize = false + is-pane = true + is-maximized = false + image = "" + image-mode = stretch + keep-aspect = false + transparent-color = none + alpha = 255 + macro = "" + menu = "" + elem "output" + type = OUTPUT + pos = 0,0 + size = 0x0 + anchor1 = 0,0 + anchor2 = 100,100 + font-family = "" + font-size = 0 + text-color = #000000 + background-color = #ffffff + is-visible = true + is-disabled = false + is-transparent = false + is-default = true + border = none + drop-zone = false + right-click = false + saved-params = "max-lines" + link-color = #0000ff + visited-color = #ff00ff + style = "" + enable-http-images = false + max-lines = 1000 + +window "rpane" + elem "rpane" + type = MAIN + pos = none + size = 640x480 + anchor1 = none + anchor2 = none + font-family = "" + font-size = 0 + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "pos;size;is-maximized" + title = "" + titlebar = true + statusbar = true + can-close = true + can-minimize = true + can-resize = true + is-pane = true + is-maximized = false + image = "" + image-mode = stretch + keep-aspect = false + transparent-color = none + alpha = 255 + macro = "" + menu = "" + elem "rpanewindow" + type = CHILD + pos = 0,0 + size = 0x0 + anchor1 = 0,0 + anchor2 = 100,100 + font-family = "" + font-size = 0 + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "splitter" + left = "" + right = "outputwindow" + is-vert = false + splitter = 50 + elem "textb" + type = BUTTON + pos = 0,0 + size = 60x20 + anchor1 = none + anchor2 = none + font-family = "" + font-size = 0 + text-color = none + background-color = none + is-visible = false + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "is-checked" + text = "Text" + image = "" + command = ".winset \"rpanewindow.left=;\"" + is-flat = false + stretch = false + is-checked = true + group = "rpanemode" + button-type = pushbox + elem "browseb" + type = BUTTON + pos = 65,0 + size = 60x20 + anchor1 = none + anchor2 = none + font-family = "" + font-size = 0 + text-color = none + background-color = none + is-visible = false + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "is-checked" + text = "Browser" + image = "" + command = ".winset \"rpanewindow.left=browserwindow\"" + is-flat = false + stretch = false + is-checked = false + group = "rpanemode" + button-type = pushbox + elem "infob" + type = BUTTON + pos = 130,0 + size = 60x20 + anchor1 = none + anchor2 = none + font-family = "" + font-size = 0 + text-color = none + background-color = none + is-visible = false + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "is-checked" + text = "Info" + image = "" + command = ".winset \"rpanewindow.left=infowindow\"" + is-flat = false + stretch = false + is-checked = false + group = "rpanemode" + button-type = pushbox + +window "browserwindow" + elem "browserwindow" + type = MAIN + pos = none + size = 640x480 + anchor1 = none + anchor2 = none + font-family = "" + font-size = 0 + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "pos;size;is-maximized" + title = "Browser" + titlebar = true + statusbar = true + can-close = true + can-minimize = true + can-resize = true + is-pane = true + is-maximized = false + image = "" + image-mode = stretch + keep-aspect = false + transparent-color = none + alpha = 255 + macro = "" + menu = "" + elem "browser" + type = BROWSER + pos = 0,0 + size = 0x0 + anchor1 = 0,0 + anchor2 = 100,100 + font-family = "" + font-size = 0 + text-color = #000000 + background-color = #ffffff + is-visible = true + is-disabled = false + is-transparent = false + is-default = true + border = none + drop-zone = false + right-click = false + saved-params = "" + show-history = false + show-url = false + auto-format = true + use-title = false + on-show = ".winset\"rpane.infob.is-visible=true?rpane.infob.pos=130,0;rpane.textb.is-visible=true;rpane.browseb.is-visible=true;rpane.browseb.is-checked=true;rpane.rpanewindow.pos=0,30;rpane.rpanewindow.size=0x0;rpane.rpanewindow.left=browserwindow\"" + on-hide = ".winset\"rpane.browseb.is-visible=false;rpane.infob.is-visible=true?rpane.infob.is-checked=true rpane.infob.pos=65,0 rpane.rpanewindow.left=infowindow:rpane.rpanewindow.left=textwindow rpane.textb.is-visible=false rpane.rpanewindow.pos=0,0 rpane.rpanewindow.size=0x0\"" + +window "infowindow" + elem "infowindow" + type = MAIN + pos = none + size = 640x480 + anchor1 = none + anchor2 = none + font-family = "" + font-size = 0 + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "pos;size;is-maximized" + title = "Info" + titlebar = true + statusbar = true + can-close = true + can-minimize = true + can-resize = true + is-pane = true + is-maximized = false + image = "" + image-mode = stretch + keep-aspect = false + transparent-color = none + alpha = 255 + macro = "" + menu = "" + elem "info" + type = INFO + pos = 0,0 + size = 0x0 + anchor1 = 0,0 + anchor2 = 100,100 + font-family = "" + font-size = 0 + text-color = #000000 + background-color = #ffffff + is-visible = true + is-disabled = false + is-transparent = false + is-default = true + border = none + drop-zone = true + right-click = false + saved-params = "" + highlight-color = #00aa00 + tab-text-color = #000000 + tab-background-color = none + tab-font-family = "" + tab-font-size = 0 + allow-html = false + multi-line = true + on-show = ".winset\"rpane.infob.is-visible=true;rpane.browseb.is-visible=true?rpane.infob.pos=130,0:rpane.infob.pos=65,0 rpane.textb.is-visible=true rpane.infob.is-checked=true rpane.rpanewindow.pos=0,30 rpane.rpanewindow.size=0x0 rpane.rpanewindow.left=infowindow\"" + on-hide = ".winset\"rpane.infob.is-visible=false;rpane.browseb.is-visible=true?rpane.browseb.is-checked=true rpane.rpanewindow.left=browserwindow:rpane.textb.is-visible=false rpane.rpanewindow.pos=0,0 rpane.rpanewindow.size=0x0 rpane.rpanewindow.left=\"" + +window "admin_chat" + elem "admin_chat" + type = MAIN + pos = 281,0 + size = 525x465 + anchor1 = none + anchor2 = none + font-family = "" + font-size = 0 + text-color = #000000 + background-color = none + is-visible = false + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "pos;size;is-maximized" + title = "Administrator Log / Chat" + titlebar = true + statusbar = false + can-close = true + can-minimize = true + can-resize = false + is-pane = false + is-maximized = false + image = "" + image-mode = stretch + keep-aspect = false + transparent-color = none + alpha = 255 + macro = "" + menu = "" + elem "admin_input1" + type = INPUT + pos = 0,444 + size = 525x21 + anchor1 = 0,96 + anchor2 = 100,100 + font-family = "" + font-size = 0 + text-color = #000000 + background-color = #ffffff + is-visible = true + is-disabled = false + is-transparent = false + is-default = false + border = sunken + drop-zone = false + right-click = false + saved-params = "" + command = "report \"" + text = "" + multi-line = false + elem "admin_chat1" + type = OUTPUT + pos = 0,0 + size = 373x444 + anchor1 = 0,0 + anchor2 = 71,96 + font-family = "" + font-size = 0 + text-color = #000000 + background-color = #ffffff + is-visible = true + is-disabled = false + is-transparent = false + is-default = false + border = sunken + drop-zone = false + right-click = false + saved-params = "max-lines" + link-color = #0000ff + visited-color = #ff00ff + style = "" + enable-http-images = false + max-lines = 1000 + elem "add-user" + type = BUTTON + pos = 380,2 + size = 140x30 + anchor1 = 72,69 + anchor2 = 99,75 + font-family = "" + font-size = 0 + text-color = #000000 + background-color = none + is-visible = false + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "is-checked" + text = "Add User to Room" + image = "" + command = "admingetuser" + is-flat = false + stretch = false + is-checked = false + group = "" + button-type = pushbutton + elem "remove-user" + type = BUTTON + pos = 380,34 + size = 140x30 + anchor1 = 72,76 + anchor2 = 99,82 + font-family = "" + font-size = 0 + text-color = #000000 + background-color = none + is-visible = false + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "is-checked" + text = "Remove User From Room" + image = "" + command = "adminremoveuser" + is-flat = false + stretch = false + is-checked = false + group = "" + button-type = pushbutton + elem "closechat" + type = BUTTON + pos = 380,405 + size = 140x32 + anchor1 = none + anchor2 = none + font-family = "" + font-size = 0 + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "is-checked" + text = "Leave Room" + image = "" + command = "closechat" + is-flat = false + stretch = false + is-checked = false + group = "" + button-type = pushbutton + diff --git a/main-src/_changes.dm b/main-src/_changes.dm new file mode 100644 index 0000000..3d3ef15 --- /dev/null +++ b/main-src/_changes.dm @@ -0,0 +1,280 @@ +#define DEBUG +/* +====================================================== + DEVELOPER CHANGELOG & ToDo/Bugs +====================================================== + + + ToDo: +====================== + + +- Add slight red tint to thermal/meson scanners +- Add slight green tint to meson scanners +- Add slight dark tint to sunglasses +- Add a few more jobs for PS13, and maybe for CC and Medsat. +- Work on in-game documents (Legal SOP, etc) +- Work on a background story for certain elements in the game +- Clear up the confusion about who/what controls what, etc. + +- Possibly making pens double as miniture flash lights. :D +- Start the electricity systemz. Woot. +- Lighting in other stations +- Server choice for whether or not to use lighting + + +Bugs: +====================== + +-Eric Solius- [145.9]-broadcasts: I've noticed the station has taken some serious damage as of late. I've begun repairs. +-Android Data says: +BUG: When you grab a monkey by it's neck, it's pixel_ values do not reset to 0 after this is cancelled +-OOC: Sapesurmak: Bloodstream Analysis located -3.8147e-06 units of rejuvenation chemicals. +-Give monkeys more emotes + + + + + + +=========================================================================================== +========================= CHANGELOG =================================== +=========================================================================================== + + +============================================================ +START DATE 07/02/08 - Murrawhip +====================== +Whoops, got of the habit of using these things. A lot've stuff is forgotten. :) +Changes: +===================== +- Added Close button to Engine console +- Readded Gamekits and put the cache files at ss13.blulogic.net +- Assigned icon to wrapping paper equiped +- Made left hand icon for cardboard tube and wrapping paper +- Gotten rid of the secure doors in supplies. They're a bit pointless when there's a door only a few tiles away. :) +- Fixed CPR, you naughty bug maker you. And uhh, I've made it so you can still /spam/ the message, but it won't ever give rejuvs if over 10 units already there. + + +====================== +END DATE 07/02/08 - Murrawhip +============================================================ + + + +============================================================ +START DATE 02/01/08 - AZA +====================== + +Changes: +===================== +- Fixed the comms computer refresh bug. +- Removed 'Relay Satellite' Info from comms computer +- Added 'Timer' to comms computer (using time2text with ticker.timeleft) +- Added Auto-refresh on comms computer every 1 second. +- Fixed Mass Drivers - (Pods are default anchored, duh. =\) +- Fixed Chair & Mass Driver bug +- Deleted admin_chat.dm (Empty file) +- Fixed Fire Extinguisher Going through Airlocks Bug (again) +- Added 3 extra z-levels +- Moved 'SB' to Z-level 14 +- The little bit with the beacon in the middle of space is now the 'comm satellite' but has no functionality. Just spruced it up with a bit of grille-age. ;p +- Removed gamekits for now (see //GAMEKIT01 and //GAMEKIT02) +- Added a 'biohazard response storage' room above Medical Research. +- Modified Medical Bay to have a table reception-type area. +- Reinforced and slightly modified Security bay. +- Modified Storage to have a table-stores feel. +- Added several tracking implants to the map in storage, for security purposes. They are hidden so as to not be abused. They have to be found! bwhaha. +- Modified Aux. Engine area. +- Fixed Rod stacking issue. +- Added 'Close' Command to Comms Console +- Actually Fixed Grilles and Rods +- Moved Staff Assistant to Start Outside Main Security Area +- Replaed the secure door with a normal door in Storage. +- + +====================== +END DATE 04/01/08 - AZA +============================================================ + +============================================================ +START DATE 24/01/08 - AZA +====================== + +Changes: +===================== +- Fixed the 'going through walls' thing with electrocpack. +- Fixed using Topic() when unconcious or lying down. (Made sure not to change it for Start-up menu or admin panel, etc.) +- Fixed Mass Driver firing Anchored Objects - now returns instead of firing. +- Fixed ID Consoles changing name bug. +- Lightswitches can't be broken - there's already a delay on using it in place. +- Fixed the bug where you can't send the emergency shuttle back. +- Added a backup ID assignment card to the captain's room in case a captain or HoP is not assigned. (People will have to break into the room) +- Added a '_design.dm' file for new items/systems design. +- I added a 'comms' satellite which I have placed special spawns for you and I and ID cards there. (You need to use Kate Jasden and I need to use Alex Fenning) +- Fixed fire extinguisher going through airlocks. +- Made PS13, CC, Medsat and SB truely dynamic, they can be destroyed, burnt, etc. +- Mapped areas in PS13, CC and Medsat with fire alarms and new firedoors. + +====================== +END DATE 26/01/08 - AZA +============================================================ + + + + + +============================================================ +START DATE 23/01/08 - Murrawhip +====================== + +Changes: +===================== +- /Actually/ fixed the closet dragging bug. :D AZA, search for "/obj/closet/MouseDrop_T" and see. +- Fixed the dead say html bug +- Fixed the headset say html bug (Your changes list liesss) +- Added UHRS.dm, just ignore it for now, the receiving server isn't set up properly yet. +- Made the dark and gas mask states brighter, it's just too darn hard to see. And with some people's monitors, they couldn't see at all. +- The room above shuttle bay had a light switch on /area/, I fixed that. + + + +====================== +END DATE 24/01/08 - Murrawhip +============================================================ + + + + +============================================================ +START DATE 20/01/08 - AZA +====================== + +Changes: +===================== +- Can no longer pull through glass or doors. +- Added Delay on All Intents - Grab Help Hurt Disarm of 2 seconds. +- Fixed End-Of-Traitor Runtime +- Added 'maxclass' variable for storage containers. Edit this for individual + storage containers to change the max class item they can hold. +- Revoked dead chat HTML & other HTML rights (monkey/ghost chat) +- Removed Admin Chat Panel +- Fixed chat problem in lockers and pods. +- Added Chance of Failure to Grab +- Fixed chat lag in lockers and pods. +- Added ability to turn panes of glass into shards using any tool with enough force. (gave it health) +- Added sleepy pen creation - ScrewDriver on Normal Pen, Normal Pen in Sleep Toxins, ScrewDriver on Pen. +- Fixed Fire Alarm Positions +- Free emote text range longer +- Changed spam limit to 1 message per half a second. +- Lightswitches now reflect status on other lightswitches,and also fixed to work with fire alarms etc. +- Added ID restrictions to Communications and Engine console. +- You can now turn two stacked metal rods into a metal sheet using a welder. +- Weight value for grilles now much higher. Shouldn't be effected by air movement. +- You can no longer stuff yourself into other closets - it checks for a turf location before allowing the move. +- Fixed pulling items through two windows next to your item. +- Moved doors to sort out area, closets have to have the area or they will not work with fire/lighting system +- Syringes now have residue you can't use leftover. You can eliminate this residue by injecting it back into the bottle. +- Various Grammar Fixes +- Added checks to remove ability to use some actions and objects while dead or unconcious. +- Fixed *signal- emote to only allow numerical values. +- Door glitch fixed. +- Changed the map and turf paths so that central command / PS13 can now have fires/bombs/etc. (yay) + +====================== +END DATE 22/01/08 - AZA +============================================================ + + + + +============================================================ +START DATE 18/01/08 - Murrawhip +====================== + +Changes +====================== +- Fixed table un/fastening with screwdriver bug +- Raised prison doctor access from 2>000 to 3>000 so that they can leave PS13 +- Made ion trails, water and telesparks not clickable +- Fixed remote door controller icon +- Made fire extinguisher a normal-sized item, rather than small. They shouldn't fit in your pockets. -.- +- Traitor winning with item in right hand is screwed (May be fixed) +- Added tech_office area to technician's place +- Fixed the bug where, if in a closet, you can move into a dna scanner +- Stopped Help from popping up everytime you log in, and added a new start up message instead. + + + + + +====================== +END DATE 18/01/08 - Murrawhip +============================================================ + + + + +============================================================ +START DATE 18/01/08 - AZA +====================== + +Changes +====================== + +- Used Alpha Transparency on All Windows, Window-Doors and Window-Security-Doors. They look so good. +- Used Alpha Transparency on some of the icons like helmets etc. +- Added a free-emote function. +- Made it so the syringe wont inject any residue under 1 unit. +- Hopefully the traitor item not being recognised has been fixed, need to test it. +- Skin Tone and Knock-Down bug has been fixed again +- When buckled to a chair, you can no longer be put into a locker +- The electric chair bug (e_chair) no longer generates a runtime error and now produces the correct equipment. +- You can now screw/unscrew a table (single only) to move it using a screwdriver +- Updated the map with minor changes including new fire doors and alpha transparency windows. +- Made some new areas and mapped them +- Made it so floor tiles can only create a 'burnt' floor tile, requiring two tiles to build a full floor tile. +- Added remote doors again +- Added lighting in again, but this time using Alpha Trasparency (Thanks for making me realise that neat new feature :D) +- Added alpha transparency for flash, flashbang and bombs. + + + +Notes: +====================== +- Dying Kits aren't actually added and adding them in means changing the way people equip uniforms and changing items around. Lets just hope they don't notice! +- I <3 Alpha Transparency, we could change the bomb and flash things using it, too. =D + + + + +====================== +END DATE 18/01/08 - AZA +============================================================ + + + + +============================================================ +START DATE 17/01/08 - Murrawhip +===================== +-mouse opacity for areas fixed +-added transparent overlays for fire alarms, engine alarm, gas mask, and the need to wear glasses +-fixed the bug where a runtime error is sent if traitor mode is selected, and an assassination is supposed to take place, but pick() screws up because no one is 'entered' into the game +-Added in a delay thingo to stop testfire from being spammed +-Stopped areas from able to be examined and turfs(cept for walls) +-in temp.dm, I've put in a report a bug verb, just for when we host 'n stuff. it outputs to bugs.html. +-removed dumpsource + + + +Notes +-Don't forget to fix that knock down bug caused by BYOND4 +-Don't forget to redo all of those map changes. (y) :D + +====================== +END DATE 17/01/08 - Murrawhip +============================================================ + + +*/ \ No newline at end of file diff --git a/main-src/_design.dm b/main-src/_design.dm new file mode 100644 index 0000000..6b91703 --- /dev/null +++ b/main-src/_design.dm @@ -0,0 +1,109 @@ +/* + +============================================================== +BLULOGIC DESIGNS FILE +============================================================== +Here will be designs for new changes/items etc. that will effect the game on a larger basis. + + + + + +ITEM ADDITIONS: +====================== +ID Scanner - + This item can be set to read a specific ID Access Level (Numbers AND/OR Assignment) + It can be attached to assemblies of all sorts to only enable operation from the registered + user as per the ID Scanner. This can be dismantled relatively easily, but is a long process. + +Tablet Computer - + We have laptops, computer, PDAs and tablet PCs already, so it'd make sense that they'd have + these on a space station in addition to those bulky-ass computers. + + The tablet computer can be used to send and recieve data to assemblies remotely, for + example, setting it to the same frequency as a Analyzer/Radio Signaller assembly will enable + you to gain information about that area remotely. + + The tablet computer can be used to remotely access the controls and information of the + following devices and assemblies: + + - Radio Signaller/Analyzer Assembly + - Radio Signaller/Igniter Assembly + - Radio Signaller/Igniter/Plasma Tank Assembly + - Radio Signaller/Proximity Sensor Assembly + - Radio Signaller/Infrared Beam Assembly + - All Radio Signaller/Object assemblies + + In addition, attaching a radio signaller to a computer console will enable a tablet computer + to accss it remotely on the same frequency/code. + + When the electrical system is added, you could also use the wiring to hack directly into + consoles, with ranging levels of difficulty depending on which console they are trying to + access. + +Motor + Used in doors and moving parts - will enable the creation of doors. + +Computer Chips + Used in repairing consoles and other devices. Will eventually enable construction of computer + consoles. Also required to build/repair objects such as doors, tablet computers, etc. + + +Radio Signallers + Obviously not an addition, but an addition to current functionality. + + The radio signaller can be attached to the following devices to allow access via Tablet + Computer or for simple assemblies, another Radio Signaller. + + - Communications Console + - Engine Control Console + - Engine Ejection Console + - Air Tunnel Console + - (MAYBE) ID Console (for remote ID assignment) (add 2xID Scanners to Tablet Computer) + - Remote Door Consoles + - Remote Doors + - Airlocks + - Secure Doors + - Window Doors + - Engineering Doors + - Analyzer + - Locator + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +*/ \ No newline at end of file diff --git a/main-src/config.txt b/main-src/config.txt new file mode 100644 index 0000000..3194d03 --- /dev/null +++ b/main-src/config.txt @@ -0,0 +1,64 @@ +# Config file for SS13D +# +# lines starting with '#' are comments +# +##### +# +# logging of actions to world.log +# comment to disable, uncomment to enable +# +# log OOC channel +LOGOOC +# +# log client Say +LOGSAY +# +# log admin actions +LOGADMIN +# +# log client access (logon/logoff) +LOGACCESS +# +# log game actions (start of round, results, etc.) +LOGGAME +# +# log player votes +LOGVOTE +# +# +##### +# +# probablities for game modes chosen in "secret" and "random" modes +# +# default probablity is 1, increase to make that mode more likely to be picked +# set to 0 to disable that mode +# +PROB_EXTENDED 0 +PROB_TRAITOR 1 +PROB_MONKEY 1 +PROB_METEOR 2 +PROB_BLOB 2 +PROB_NUCLEAR 1 +# +# +##### +# +# voting control +# +# allow players to initiate a restart vote +ALLOWVOTERESTART +# +# allow players to initate a mode-change start +ALLOWVOTEMODE +# +# min delay (seconds) between voting sessions (default 10 minutes) +VOTEDELAY 600 +# +# time period (seconds) which voting session will last (default 1 minute) +VOTEPERIOD 60 +# +# prevents dead players from voting or starting votes +NODEADVOTE +# +# players' votes default to "No vote" (otherwise, default to "No change") +DEFAULTNOVOTE \ No newline at end of file diff --git a/main-src/main.dmp b/main-src/main.dmp new file mode 100644 index 0000000..fb77463 --- /dev/null +++ b/main-src/main.dmp @@ -0,0 +1,2843 @@ +"aa" = (/turf/space,/area) +"ab" = (/obj/item/weapon/tank/oxygentank,/turf/space,/area) +"ac" = (/turf/station/r_wall,/area) +"ad" = (/obj/window{dir = 1},/obj/window,/turf/station/floor,/area/engine_access) +"ae" = (/turf/station/r_wall,/area/engine) +"af" = (/turf/space,/area/airtunnel1) +"ag" = (/obj/move/airtunnel/connector/wall,/turf/space,/area/airtunnel1) +"ah" = (/obj/machinery/camera{dir = 4; c_tag = "Northern Airlock"},/obj/machinery/at_indicator{pixel_x = -32; pixel_y = 0},/turf/station/floor,/area/engine_access) +"ai" = (/turf/station/floor,/area/engine_access) +"aj" = (/obj/machinery/door/airlock{r_access = 3},/turf/station/floor,/area/engine_access) +"ak" = (/obj/move/airtunnel/connector,/obj/machinery/alarm/indicator,/turf/space,/area/airtunnel1) +"al" = (/obj/window{dir = 8},/obj/window{dir = 4},/turf/station/floor,/area/engine_access) +"am" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/engine_access) +"an" = (/obj/machinery/firealarm{pixel_y = -32},/turf/station/floor,/area/engine_access) +"ao" = (/obj/window{dir = 4},/turf/station/floor,/area/engine_access) +"ap" = (/obj/window{dir = 4},/obj/window{dir = 8},/obj/grille,/turf/station/floor,/area/engine_access) +"aq" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/at_indicator{pixel_y = 32},/turf/station/floor,/area/engine) +"ar" = (/obj/machinery/door/airlock{r_access = 2},/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/engine) +"as" = (/obj/move/airtunnel/connector,/turf/space,/area/airtunnel1) +"at" = (/obj/machinery/door/airlock,/turf/station/floor,/area/engine_access) +"au" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/engine_access) +"av" = (/turf/station/wall,/area) +"aw" = (/obj/window{dir = 10},/obj/item/weapon/extinguisher,/turf/station/floor,/area) +"ax" = (/obj/grille,/turf/station/floor,/area) +"ay" = (/turf/station/floor,/area/engine) +"az" = (/obj/machinery/atmoalter/siphs/fullairsiphon,/turf/station/floor,/area) +"aA" = (/obj/machinery/atmoalter/siphs/scrubbers,/turf/station/floor,/area) +"aB" = (/obj/machinery/atmoalter/siphs/fullairsiphon,/turf/station/engine/floor,/area) +"aC" = (/obj/machinery/atmoalter/siphs/scrubbers,/turf/station/engine/floor,/area) +"aD" = (/turf/station/engine/floor,/area) +"aE" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area) +"aF" = (/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/floor,/area/engine) +"aG" = (/obj/machinery/atmoalter/canister/poisoncanister,/obj/machinery/firealarm,/turf/station/floor,/area/engine) +"aH" = (/obj/machinery/atmoalter/heater,/turf/station/floor,/area/engine) +"aI" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/dispenser,/turf/station/floor,/area/control_room) +"aJ" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/dispenser,/turf/station/floor,/area/control_room) +"aK" = (/obj/rack,/obj/item/weapon/clothing/suit/sp_suit,/obj/item/weapon/clothing/head/s_helmet,/obj/item/weapon/clothing/mask/gasmask,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/under/black,/obj/item/weapon/clothing/shoes/black,/obj/item/weapon/tank/jetpack,/turf/station/floor,/area/control_room) +"aL" = (/obj/machinery/door/airlock{r_access = 2},/turf/station/floor,/area/engine) +"aM" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/engine) +"aN" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/engine) +"aO" = (/obj/machinery/camera{dir = 8; c_tag = "Plasma Storage"},/turf/station/floor,/area/engine) +"aP" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/control_room) +"aQ" = (/turf/station/floor,/area/control_room) +"aR" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/control_room) +"aS" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/at_indicator{pixel_y = 32},/turf/station/floor,/area/engine_access) +"aT" = (/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/engine) +"aU" = (/obj/machinery/atmoalter/canister/poisoncanister,/obj/item/weapon/extinguisher,/turf/station/floor,/area/engine) +"aV" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/engine/floor,/area/auxengine) +"aW" = (/turf/station/engine/floor,/area/auxengine) +"aX" = (/obj/machinery/door/window,/turf/station/engine/floor,/area/auxengine) +"aY" = (/obj/machinery/igniter,/turf/station/engine/floor{poison = 5000},/area/auxengine) +"aZ" = (/obj/item/weapon/clothing/mask/m_mask,/obj/item/weapon/clothing/mask/m_mask,/obj/item/weapon/clothing/mask/m_mask,/obj/item/weapon/clothing/mask/m_mask,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/control_room) +"ba" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/engine) +"bb" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 4; r_engine = 3; r_access = 2; r_lab = 0},/turf/station/floor,/area/engine) +"bc" = (/obj/window{dir = 10},/turf/station/engine/floor,/area/auxengine) +"bd" = (/obj/window,/turf/station/engine/floor,/area/auxengine) +"be" = (/obj/grille,/obj/window,/obj/window{dir = 1},/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/control_room) +"bf" = (/obj/grille,/obj/window,/obj/window{dir = 1},/obj/window{dir = 4},/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/control_room) +"bg" = (/obj/landmark/alterations{name = "barrier"},/obj/machinery/door/firedoor,/obj/machinery/door/window{icon = 'security.dmi'; dir = 4; r_engine = 0; r_access = 2; r_lab = 1},/turf/station/floor,/area/control_room) +"bh" = (/obj/landmark/alterations{name = "barrier"},/turf/station/wall,/area) +"bi" = (/obj/machinery/firealarm{pixel_x = 32},/turf/station/floor,/area/engine_access) +"bj" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/engine_access) +"bk" = (/turf/station/wall,/area/engine) +"bl" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/landmark/alterations{name = "id computer"},/turf/station/floor,/area/engine) +"bm" = (/obj/machinery/firealarm{pixel_x = 32},/turf/station/floor,/area/engine) +"bn" = (/obj/machinery/computer/engine,/turf/station/floor,/area/engine) +"bo" = (/obj/closet/emcloset,/turf/station/floor,/area/engine) +"bp" = (/obj/table,/obj/item/weapon/storage/firstaid/fire,/turf/station/floor,/area/engine) +"bq" = (/obj/table,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/pill_canister/antitoxin,/turf/station/floor,/area/engine) +"br" = (/obj/table,/obj/item/weapon/storage/toolbox,/obj/item/weapon/crowbar,/obj/item/weapon/clothing/glasses/sunglasses,/turf/station/floor,/area/engine) +"bs" = (/obj/rack,/obj/item/weapon/clothing/suit/firesuit,/obj/item/weapon/clothing/under/black,/obj/item/weapon/clothing/mask/gasmask,/obj/item/weapon/radio/headset,/obj/item/weapon/clothing/shoes/black,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/glasses/sunglasses,/turf/station/floor,/area/engine) +"bt" = (/obj/machinery/atmoalter/siphs/scrubbers,/turf/station/floor,/area/engine) +"bu" = (/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/engine/floor,/area/auxengine) +"bv" = (/turf/station/floor,/area/auxengine) +"bw" = (/obj/machinery/camera{dir = 4; c_tag = "CR- Prep Room"},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/control_room) +"bx" = (/obj/machinery/door,/turf/station/floor,/area/engine) +"by" = (/obj/window{dir = 8},/turf/station/floor,/area/auxengine) +"bz" = (/obj/machinery/firealarm{pixel_x = -32},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/control_room) +"bA" = (/obj/machinery/door/firedoor,/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/control_room) +"bB" = (/obj/machinery/door,/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area) +"bC" = (/obj/landmark{name = "CTF-base-Engine"},/turf/station/floor,/area/engine) +"bD" = (/obj/item/weapon/radio,/turf/station/floor,/area/engine) +"bE" = (/obj/window{dir = 4},/turf/station/engine/floor,/area/auxengine) +"bF" = (/obj/machinery/door/firedoor,/turf/station/engine/floor,/area/auxengine) +"bG" = (/obj/machinery/computer/atmosphere/siphonswitch,/turf/station/floor,/area/auxengine) +"bH" = (/obj/window,/turf/station/floor,/area/control_room) +"bI" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/control_room) +"bJ" = (/obj/window{dir = 4},/turf/station/r_wall,/area) +"bK" = (/obj/window{dir = 8},/obj/window{dir = 4},/obj/grille,/obj/landmark/alterations{name = "barrier"},/obj/machinery/door/firedoor,/turf/station/floor,/area/control_room) +"bL" = (/obj/machinery/door/airlock,/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/engine) +"bM" = (/obj/machinery/door/airlock{r_engine = 3; r_access = 2; r_lab = 0},/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/auxengine) +"bN" = (/obj/window{dir = 1},/turf/station/floor,/area/auxengine) +"bO" = (/obj/window{dir = 10},/turf/station/floor,/area/auxengine) +"bP" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/auxengine) +"bQ" = (/obj/grille,/turf/station/floor,/area/auxengine) +"bR" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/landmark{name = "CTF-wardrobe-CR"},/turf/station/floor,/area/control_room) +"bS" = (/obj/machinery/door/firedoor,/obj/window{dir = 4},/turf/station/floor,/area/control_room) +"bT" = (/obj/machinery/computer/secure_data,/turf/station/floor,/area/control_room) +"bU" = (/obj/machinery/computer/card,/turf/station/floor,/area/control_room) +"bV" = (/obj/table,/obj/item/weapon/paper/Map,/obj/item/weapon/radio/intercom,/turf/station/floor,/area/control_room) +"bW" = (/obj/machinery/computer/communications,/turf/station/floor,/area/control_room) +"bX" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/paper/jobs,/obj/item/weapon/infra_sensor,/obj/machinery/camera{c_tag = "Control Room"},/turf/station/floor,/area/control_room) +"bY" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/paper/jobs,/obj/item/weapon/infra_sensor,/turf/station/floor,/area/control_room) +"bZ" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/radio,/turf/station/floor,/area/control_room) +"ca" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/paper_bin,/turf/station/floor,/area/control_room) +"cb" = (/obj/table{icon_state = "corners"; dir = 5},/obj/window{dir = 4},/turf/station/floor,/area/control_room) +"cc" = (/obj/window{dir = 4},/obj/window{dir = 8},/obj/grille,/obj/landmark/alterations{name = "barrier"},/obj/machinery/door/firedoor,/turf/station/floor,/area/control_room) +"cd" = (/obj/machinery/door/window{dir = 8},/turf/station/floor,/area/engine) +"ce" = (/obj/watertank,/turf/station/floor,/area/engine) +"cf" = (/obj/landmark/alterations{name = "Experimental Technology"},/turf/station/floor,/area/engine) +"cg" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/landmark/alterations{name = "Experimental Technology"},/turf/station/floor,/area/engine) +"ch" = (/obj/item/weapon/extinguisher,/turf/station/floor,/area/engine) +"ci" = (/obj/landmark{name = "CTF-wardrobe-Engine"},/turf/station/floor,/area/engine) +"cj" = (/obj/weldfueltank,/turf/station/floor,/area/engine) +"ck" = (/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/engine) +"cl" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/engine) +"cm" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/landmark{name = "CTF-wardrobe-Engine"},/turf/station/floor,/area/engine) +"cn" = (/obj/item/weapon/radio/intercom{pixel_x = -32},/turf/station/floor,/area/auxengine) +"co" = (/obj/machinery/door/window,/turf/station/floor,/area/auxengine) +"cp" = (/obj/machinery/atmoalter/siphs/scrubbers,/turf/station/floor,/area/auxengine) +"cq" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/landmark{name = "CTF-wardrobe-CR"},/turf/station/floor,/area/control_room) +"cr" = (/obj/stool/chair{dir = 1},/turf/station/floor,/area/control_room) +"cs" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/pill_canister/antitoxin,/turf/station/floor,/area/control_room) +"ct" = (/obj/table{icon_state = "corners"; dir = 6},/obj/window{dir = 4},/obj/item/weapon/pen,/obj/item/weapon/game_kit,/turf/station/floor,/area/control_room) +"cu" = (/obj/rack,/obj/item/weapon/clothing/suit/firesuit,/obj/item/weapon/clothing/under/black,/obj/item/weapon/clothing/mask/gasmask,/obj/item/weapon/radio/headset,/obj/item/weapon/clothing/shoes/black,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/glasses/meson,/obj/item/weapon/clothing/glasses/sunglasses,/turf/station/floor,/area/engine) +"cv" = (/obj/machinery/door/window,/turf/station/floor,/area/engine) +"cw" = (/obj/landmark{name = "CTF-supply-Engine"},/turf/station/floor,/area/engine) +"cx" = (/obj/grille,/obj/window,/obj/window{dir = 1},/turf/station/floor,/area/engine) +"cy" = (/obj/table,/obj/item/weapon/storage/toolbox,/obj/item/weapon/crowbar,/turf/station/floor,/area/auxengine) +"cz" = (/obj/window{dir = 4},/obj/item/weapon/extinguisher,/turf/station/floor,/area/auxengine) +"cA" = (/obj/machinery/atmoalter/siphs/fullairsiphon,/turf/station/floor,/area/auxengine) +"cB" = (/obj/machinery/door/window{dir = 8},/turf/station/floor,/area/control_room) +"cC" = (/obj/machinery/door/firedoor,/obj/window{dir = 10},/obj/item/weapon/extinguisher,/turf/station/floor,/area/control_room) +"cD" = (/obj/stool/chair{dir = 4},/obj/start{name = "Head of Research"},/turf/station/floor,/area/control_room) +"cE" = (/obj/table,/obj/window{dir = 4},/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/obj/item/weapon/clipboard,/turf/station/floor,/area/control_room) +"cF" = (/obj/machinery/door/window{icon = 'security.dmi'; r_engine = 2; r_access = 2},/turf/station/floor,/area/engine) +"cG" = (/obj/item/weapon/radio/intercom{pixel_y = 32},/turf/station/floor,/area/engine) +"cH" = (/obj/machinery/injector{dir = 8},/turf/station/wall,/area/engine) +"cI" = (/turf/station/engine/floor{poison = 5000},/area/engine) +"cJ" = (/turf/space,/area/engine) +"cK" = (/obj/machinery/firealarm{pixel_y = -32},/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/auxengine) +"cL" = (/obj/weldfueltank,/turf/station/floor,/area/auxengine) +"cM" = (/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/control_room) +"cN" = (/obj/machinery/door/firedoor,/obj/machinery/door/window,/turf/station/floor,/area/control_room) +"cO" = (/obj/landmark{name = "CTF-base-CR"},/turf/station/floor,/area/control_room) +"cP" = (/obj/table,/obj/item/weapon/paper/jobs,/obj/item/weapon/storage/id_kit,/turf/station/floor,/area/control_room) +"cQ" = (/obj/table,/obj/item/weapon/storage/toolbox,/obj/item/weapon/crowbar,/obj/item/weapon/clothing/glasses/sunglasses,/turf/station/floor,/area/control_room) +"cR" = (/obj/table,/turf/station/floor,/area/control_room) +"cS" = (/obj/stool/chair{dir = 4},/obj/start{name = "Captain"},/turf/station/floor,/area/control_room) +"cT" = (/obj/table,/obj/window{dir = 4},/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/beacon,/obj/item/weapon/clipboard,/turf/station/floor,/area/control_room) +"cU" = (/obj/item/weapon/radio/intercom{pixel_x = -32},/turf/station/floor,/area/engine) +"cV" = (/obj/start{name = "Engineer"},/turf/station/floor,/area/engine) +"cW" = (/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/engine) +"cX" = (/obj/watertank,/turf/station/floor,/area/control_room) +"cY" = (/obj/stool/chair{dir = 4},/obj/start{name = "Head of Personnel"},/turf/station/floor,/area/control_room) +"cZ" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/engine) +"da" = (/obj/machinery/camera{dir = 4; c_tag = "Engine Hallway"},/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/engine) +"db" = (/obj/window{dir = 4},/turf/station/floor,/area/engine) +"dc" = (/obj/closet/emcloset,/turf/station/floor,/area/tech_office) +"dd" = (/obj/closet/wardrobe/yellow,/turf/station/floor,/area/tech_office) +"de" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/storage/toolbox,/obj/item/weapon/clothing/glasses/meson,/turf/station/floor,/area/tech_office) +"df" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/storage/toolbox,/obj/item/weapon/clothing/glasses/meson,/turf/station/floor,/area/tech_office) +"dg" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/glasses/sunglasses,/obj/item/weapon/clothing/ears/earmuffs,/turf/station/floor,/area/tech_office) +"dh" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/glasses/sunglasses,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/clothing/ears/earmuffs,/turf/station/floor,/area/tech_office) +"di" = (/obj/machinery/alarm{pixel_y = -32},/turf/station/floor,/area/control_room) +"dj" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/paper/sop,/obj/item/weapon/paper/Internal,/obj/item/weapon/infra,/turf/station/floor,/area/control_room) +"dk" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/paper/Internal,/obj/item/weapon/radio/signaler,/turf/station/floor,/area/control_room) +"dl" = (/obj/stool/chair,/turf/station/floor,/area/control_room) +"dm" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/syringe,/turf/station/floor,/area/control_room) +"dn" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/bottle/s_tox,/obj/window{dir = 4},/turf/station/floor,/area/control_room) +"do" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/weldfueltank,/turf/station/floor,/area/engine) +"dp" = (/obj/item/weapon/storage/backpack,/turf/station/floor,/area/engine) +"dq" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area/engine) +"dr" = (/obj/machinery/dispenser,/turf/station/floor,/area/engine) +"ds" = (/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/engine) +"dt" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/camera{dir = 4; c_tag = "Technician Office"},/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/tech_office) +"du" = (/obj/start{name = "Station Technician"},/turf/station/floor,/area/tech_office) +"dv" = (/turf/station/floor,/area/tech_office) +"dw" = (/obj/stool,/turf/station/floor,/area/tech_office) +"dx" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/radio/intercom{pixel_x = 32},/turf/station/floor,/area/tech_office) +"dy" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/paper/courtroom,/turf/station/floor,/area/control_room) +"dz" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/paper/Toxin,/obj/item/weapon/paper/Map,/obj/item/weapon/timer,/turf/station/floor,/area/control_room) +"dA" = (/obj/landmark{name = "CTF-supply-CR"},/turf/station/floor,/area/control_room) +"dB" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/paper/jobs,/obj/manifest,/turf/station/floor,/area/control_room) +"dC" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/card/id,/obj/machinery/firealarm{pixel_y = -32},/turf/station/floor,/area/control_room) +"dD" = (/obj/machinery/computer/airtunnel,/turf/station/floor,/area/control_room) +"dE" = (/obj/machinery/computer/engine,/turf/station/floor,/area/control_room) +"dF" = (/obj/table{icon_state = "corners"; dir = 10},/obj/machinery/recharger,/turf/station/floor,/area/control_room) +"dG" = (/obj/table{icon_state = "corners"; dir = 6},/obj/window{dir = 4},/turf/station/floor,/area/control_room) +"dH" = (/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/storage/toolbox,/obj/item/weapon/igniter,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/obj/item/weapon/crowbar,/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/engine) +"dI" = (/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/storage/toolbox,/obj/item/weapon/igniter,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/obj/item/weapon/crowbar,/turf/station/floor,/area/engine) +"dJ" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/storage/toolbox,/obj/item/weapon/igniter,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/obj/item/weapon/crowbar,/obj/item/weapon/clipboard,/turf/station/floor,/area/engine) +"dK" = (/obj/machinery/alarm{pixel_y = -32},/obj/item/weapon/paper_bin{pixel_y = -32},/turf/station/floor,/area/engine) +"dL" = (/obj/item/weapon/clipboard,/turf/station/floor,/area/engine) +"dM" = (/obj/item/weapon/radio,/obj/machinery/firealarm{pixel_y = -32},/turf/station/floor,/area/engine) +"dN" = (/obj/closet/wardrobe/yellow,/turf/station/floor,/area/engine) +"dO" = (/obj/machinery/door{r_engine = 3; r_access = 2},/obj/window,/obj/machinery/firealarm,/obj/window{dir = 8},/turf/station/floor,/area/engine) +"dP" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/tech_office) +"dQ" = (/obj/start{name = "Technical Assistant"},/turf/station/floor,/area/tech_office) +"dR" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/tech_office) +"dS" = (/obj/weldfueltank,/turf/station/floor,/area/tech_office) +"dT" = (/obj/landmark/alterations{name = "barrier"},/obj/machinery/door/firedoor,/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/controlaccess) +"dU" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 4; r_engine = 0; r_access = 4; r_lab = 4},/turf/station/floor,/area/control_room) +"dV" = (/obj/grille,/obj/landmark/alterations{name = "barrier"},/obj/machinery/door/firedoor,/turf/station/floor,/area/control_room) +"dW" = (/obj/machinery/door/poddoor,/turf/station/engine/floor,/area/pod) +"dX" = (/obj/machinery/mass_driver{dir = 8},/obj/machinery/pod{dir = 8},/turf/station/engine/floor,/area/pod) +"dY" = (/obj/machinery/door/window,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/engine/floor,/area/pod) +"dZ" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/pod) +"ea" = (/obj/machinery/computer/pod{name = "Mass Driver"},/turf/station/floor,/area/pod) +"eb" = (/obj/machinery/atmoalter/siphs/scrubbers,/turf/station/engine/floor,/area/engine) +"ec" = (/obj/window{dir = 10},/turf/station/floor,/area/engine) +"ed" = (/obj/machinery/injector,/turf/station/wall,/area/engine) +"ee" = (/obj/window{dir = 10},/obj/item/weapon/extinguisher,/turf/station/floor,/area/engine) +"ef" = (/obj/machinery/igniter,/turf/station/engine/floor{poison = 5000},/area/engine) +"eg" = (/obj/machinery/door/firedoor,/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/tech_office) +"eh" = (/obj/machinery/door/firedoor,/obj/grille,/obj/window,/obj/window{dir = 1},/turf/station/floor,/area/tech_office) +"ei" = (/obj/machinery/alarm{pixel_y = 32},/turf/station/floor,/area/controlaccess) +"ej" = (/turf/station/floor,/area/controlaccess) +"ek" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/controlaccess) +"el" = (/obj/machinery/door/firedoor,/obj/machinery/door/window{icon = 'security.dmi'; dir = 4; r_engine = 0; r_access = 4; r_lab = 4},/turf/station/floor,/area/control_room) +"em" = (/turf/station/floor,/area) +"en" = (/turf/station/floor,/area/pod) +"eo" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/pod) +"ep" = (/obj/grille,/turf/station/engine/floor,/area/engine) +"eq" = (/obj/machinery/alarm,/turf/station/floor,/area/hallways/centralhall5) +"er" = (/turf/station/floor,/area/hallways/centralhall5) +"es" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/controlaccess) +"et" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/computer/security,/turf/station/floor,/area/control_room) +"eu" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/stool/bed,/obj/item/weapon/bedsheet,/turf/station/floor,/area/control_room) +"ev" = (/obj/machinery/door/poddoor{id = 2},/turf/station/engine/floor,/area/pod) +"ew" = (/obj/machinery/mass_driver{dir = 8; id = 2},/obj/machinery/pod{dir = 8},/turf/station/engine/floor,/area/pod) +"ex" = (/obj/machinery/computer/pod{id = 2},/turf/station/floor,/area/pod) +"ey" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area/pod) +"ez" = (/obj/machinery/computer/engine,/turf/station/floor,/area/pod) +"eA" = (/obj/machinery/computer/communications,/turf/station/floor,/area/pod) +"eB" = (/obj/item/weapon/hand_tele,/turf/station/engine/floor,/area/engine) +"eC" = (/turf/station/engine/floor,/area/engine) +"eD" = (/obj/machinery/alarm{pixel_y = 32},/turf/station/engine/floor,/area/engine) +"eE" = (/obj/machinery/door{r_engine = 3; r_access = 2},/turf/station/floor,/area/engine) +"eF" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/hallways/centralhall5) +"eG" = (/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/control_room) +"eH" = (/obj/secloset/highsec,/turf/station/floor,/area/control_room) +"eI" = (/obj/machinery/camera{dir = 4; c_tag = "Escape Pod Bay"},/turf/station/floor,/area/pod) +"eJ" = (/obj/machinery/door/firedoor,/obj/machinery/door/window,/turf/station/floor,/area/pod) +"eK" = (/obj/machinery/door/airlock,/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/pod) +"eL" = (/obj/watertank,/turf/station/floor,/area/hallways/centralhall5) +"eM" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/hallways/centralhall5) +"eN" = (/obj/machinery/firealarm{pixel_y = -32},/turf/station/floor,/area/hallways/centralhall5) +"eO" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/hallways/centralhall5) +"eP" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/controlaccess) +"eQ" = (/obj/machinery/firealarm{pixel_x = 0; pixel_y = -32},/turf/station/floor,/area/controlaccess) +"eR" = (/obj/machinery/camera{dir = 4; c_tag = "Emergency Room"},/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/control_room) +"eS" = (/obj/landmark{name = "Nuclear-Disk"},/turf/station/floor,/area/control_room) +"eT" = (/obj/machinery/door/poddoor{id = 3},/turf/station/engine/floor,/area/pod) +"eU" = (/obj/machinery/mass_driver{dir = 8; id = 3},/obj/machinery/pod{dir = 8},/turf/station/engine/floor,/area/pod) +"eV" = (/obj/machinery/computer/pod{id = 3},/turf/station/floor,/area/pod) +"eW" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/radio/intercom{pixel_x = -32},/turf/station/floor,/area/pod) +"eX" = (/obj/machinery/atmoalter/siphs/fullairsiphon,/turf/station/engine/floor,/area/engine) +"eY" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/pod) +"eZ" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/door/firedoor,/turf/station/floor,/area/toolstorage) +"fa" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/toolstorage) +"fb" = (/obj/weldfueltank,/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/toolstorage) +"fc" = (/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/storage/backpack,/obj/item/weapon/crowbar,/obj/item/weapon/clothing/gloves/black,/turf/station/floor,/area/toolstorage) +"fd" = (/obj/item/weapon/infra,/obj/item/weapon/timer,/turf/station/floor,/area/toolstorage) +"fe" = (/obj/table{icon_state = "sides"; dir = 2},/obj/bedsheetbin,/turf/station/floor,/area/toolstorage) +"ff" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/paper_bin{amount = 50},/obj/item/weapon/wrapping_paper,/turf/station/floor,/area/toolstorage) +"fg" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/storage/gl_kit,/turf/station/floor,/area/toolstorage) +"fh" = (/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/clipboard,/obj/item/weapon/clipboard,/obj/item/weapon/clipboard,/obj/item/weapon/clipboard,/turf/station/floor,/area/toolstorage) +"fi" = (/obj/item/weapon/sheet/metal{amount = 5},/turf/station/floor,/area/toolstorage) +"fj" = (/obj/item/weapon/storage/trackimp_kit,/obj/item/weapon/storage/trackimp_kit,/obj/item/weapon/storage/trackimp_kit,/turf/station/floor,/area) +"fk" = (/obj/item/weapon/radio/intercom{pixel_x = -32},/turf/station/floor,/area/control_room) +"fl" = (/obj/item/weapon/card/id{name = "Computer Assignment Card"; access_level = 5; lab_access = 5; engine_access = 5; air_access = 5; registered = "Captain"; assignment = "Captain"},/turf/station/floor,/area/control_room) +"fm" = (/obj/item/weapon/storage/handcuff_kit,/turf/station/floor,/area/control_room) +"fn" = (/obj/machinery/door/poddoor{id = 4},/turf/station/engine/floor,/area/pod) +"fo" = (/obj/machinery/mass_driver{dir = 8; id = 4},/obj/machinery/pod{dir = 8},/turf/station/engine/floor,/area/pod) +"fp" = (/obj/machinery/computer/pod{id = 4},/turf/station/floor,/area/pod) +"fq" = (/obj/item/weapon/extinguisher,/turf/station/floor,/area/pod) +"fr" = (/obj/machinery/computer/atmosphere/siphonswitch,/turf/station/floor,/area/engine) +"fs" = (/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/toolstorage) +"ft" = (/turf/station/floor,/area/toolstorage) +"fu" = (/obj/table{icon_state = "sides"; dir = 8},/turf/station/floor,/area/toolstorage) +"fv" = (/obj/item/weapon/storage/toolbox,/obj/item/weapon/crowbar,/obj/item/weapon/clothing/glasses/meson,/obj/item/weapon/clothing/glasses/sunglasses,/obj/item/weapon/clothing/ears/earmuffs,/turf/station/floor,/area/toolstorage) +"fw" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/infra_sensor,/turf/station/floor,/area/toolstorage) +"fx" = (/obj/item/weapon/timer,/obj/item/weapon/radio/beacon,/turf/station/floor,/area/toolstorage) +"fy" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/camera{c_tag = "Supply Room"},/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/toolstorage) +"fz" = (/obj/item/weapon/timer,/obj/item/weapon/crowbar,/turf/station/floor,/area/toolstorage) +"fA" = (/obj/item/weapon/radio/signaler,/turf/station/floor,/area/toolstorage) +"fB" = (/obj/item/weapon/crowbar,/turf/station/floor,/area/toolstorage) +"fC" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/infra,/obj/item/weapon/radio/signaler,/turf/station/floor,/area/toolstorage) +"fD" = (/obj/item/weapon/igniter,/obj/item/weapon/radio/signaler,/turf/station/floor,/area/toolstorage) +"fE" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/turf/station/floor,/area/toolstorage) +"fF" = (/obj/item/weapon/igniter,/obj/item/weapon/crowbar,/turf/station/floor,/area/toolstorage) +"fG" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/infra,/obj/item/weapon/radio/beacon,/turf/station/floor,/area/toolstorage) +"fH" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/closet/emcloset,/turf/station/floor,/area/control_room) +"fI" = (/obj/closet/emcloset,/turf/station/floor,/area/control_room) +"fJ" = (/obj/closet/emcloset,/obj/machinery/firealarm{pixel_y = -32},/turf/station/floor,/area/control_room) +"fK" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/closet/emcloset,/turf/station/floor,/area/control_room) +"fL" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/toolstorage) +"fM" = (/obj/item/weapon/infra_sensor,/turf/station/floor,/area/toolstorage) +"fN" = (/obj/item/weapon/sheet/glass,/obj/item/weapon/sheet/glass,/obj/item/weapon/sheet/glass,/obj/item/weapon/sheet/glass,/obj/item/weapon/igniter,/obj/item/weapon/storage/backpack,/turf/station/floor,/area/toolstorage) +"fO" = (/obj/item/weapon/sheet/glass,/obj/item/weapon/sheet/glass,/obj/item/weapon/sheet/glass,/obj/item/weapon/sheet/glass,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/turf/station/floor,/area/toolstorage) +"fP" = (/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/beacon,/turf/station/floor,/area/toolstorage) +"fQ" = (/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/handcuffs,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/turf/station/floor,/area/toolstorage) +"fR" = (/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/handcuffs,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/timer,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/turf/station/floor,/area/toolstorage) +"fS" = (/obj/machinery/door/firedoor,/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/toolstorage) +"fT" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table{icon_state = "corners"; dir = 5},/turf/station/floor,/area/courtroom) +"fU" = (/obj/stool/chair,/turf/station/floor,/area/courtroom) +"fV" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/courtroom) +"fW" = (/turf/station/floor,/area/courtroom) +"fX" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/courtroom) +"fY" = (/obj/stool/chair{dir = 8},/turf/station/floor,/area/courtroom) +"fZ" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/stool/chair{dir = 8},/turf/station/floor,/area/courtroom) +"ga" = (/obj/grille,/turf/station/floor{oxygen = 0},/area) +"gb" = (/obj/window{dir = 1},/obj/window,/obj/grille,/obj/landmark/alterations{name = "barrier"},/obj/machinery/door/firedoor,/turf/station/floor,/area/medical) +"gc" = (/obj/closet/l3closet,/turf/station/floor,/area/medicalstorage) +"gd" = (/obj/machinery/firealarm{pixel_y = 32},/turf/station/floor,/area/medicalstorage) +"ge" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/hallways/centralhall4) +"gf" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/hallways/centralhall6) +"gg" = (/turf/station/floor,/area/hallways/centralhall6) +"gh" = (/obj/machinery/alarm{pixel_y = 32},/turf/station/floor,/area/hallways/centralhall6) +"gi" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/hallways/centralhall6) +"gj" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/hallways/centralhall6) +"gk" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/courtroom) +"gl" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/paper/courtroom,/turf/station/floor,/area/courtroom) +"gm" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/radio,/turf/station/floor,/area/courtroom) +"gn" = (/obj/landmark/alterations{name = "Experimental Technology"},/turf/station/floor,/area/medical) +"go" = (/obj/item/weapon/flasks/coolant,/obj/item/weapon/flasks/oxygen,/obj/item/weapon/flasks/plasma,/turf/station/floor,/area/medical) +"gp" = (/obj/window{dir = 4},/obj/closet/wardrobe/white,/turf/station/floor,/area/medical) +"gq" = (/obj/secloset/medical1,/turf/station/floor,/area/medical) +"gr" = (/obj/machinery/computer/med_data,/obj/machinery/camera{c_tag = "Medical Bay"},/obj/machinery/firealarm{pixel_y = 32},/turf/station/floor,/area/medical) +"gs" = (/obj/table{icon_state = "alone"; dir = 2},/obj/item/weapon/paper/Toxin,/obj/item/weapon/pen,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/dropper,/obj/item/weapon/pill_canister/cough,/obj/item/weapon/pill_canister/epilepsy,/obj/item/weapon/ointment,/obj/item/weapon/syringe,/turf/station/floor,/area/medical) +"gt" = (/obj/stool,/turf/station/floor,/area/medical) +"gu" = (/obj/table{icon_state = "sides"; dir = 4},/turf/station/floor,/area/medical) +"gv" = (/obj/table{icon_state = "alone"},/obj/item/weapon/healthanalyzer,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/bottle/antitoxins,/turf/station/floor,/area/medical) +"gw" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/syringe,/obj/item/weapon/bottle/rejuvenators,/turf/station/floor,/area/medical) +"gx" = (/obj/table{icon_state = "sides"},/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/ointment,/obj/machinery/firealarm{pixel_y = 32},/turf/station/floor,/area/medical) +"gy" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/medical) +"gz" = (/obj/machinery/door/airlock{r_lab = 2},/turf/station/floor,/area/medicalstorage) +"gA" = (/obj/machinery/alarm,/turf/station/floor,/area/hallways/centralhall4) +"gB" = (/turf/station/floor,/area/hallways/centralhall4) +"gC" = (/obj/landmark/alterations{name = "barrier"},/obj/machinery/door/firedoor,/obj/machinery/door/window,/turf/station/floor,/area/hallways/centralhall4) +"gD" = (/obj/machinery/firealarm{pixel_y = -32},/turf/station/floor,/area/hallways/centralhall6) +"gE" = (/obj/machinery/door/firedoor,/obj/machinery/door/window,/turf/station/floor,/area/hallways/centralhall6) +"gF" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/stool/chair{dir = 8},/turf/station/floor,/area/courtroom) +"gG" = (/obj/morgue,/turf/station/floor,/area/medical) +"gH" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/medical) +"gI" = (/obj/machinery/freezer,/turf/station/floor,/area/medical) +"gJ" = (/obj/machinery/pipes/flexipipe,/turf/station/floor,/area/medical) +"gK" = (/obj/machinery/cryo_cell,/turf/station/floor,/area/medical) +"gL" = (/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/medical) +"gM" = (/obj/landmark/alterations{name = "recharger"},/turf/station/floor,/area/medical) +"gN" = (/turf/station/floor,/area/medical) +"gO" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/medical) +"gP" = (/obj/stool/chair,/turf/station/floor,/area/medical) +"gQ" = (/obj/machinery/door/firedoor,/obj/grille,/obj/window{dir = 4},/obj/window{dir = 8},/turf/station/floor,/area/medicalresearch) +"gR" = (/obj/machinery/alarm{pixel_y = 32},/obj/closet/wardrobe/white,/turf/station/floor,/area/medicalresearch) +"gS" = (/obj/closet/l3closet,/turf/station/floor,/area/medicalresearch) +"gT" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area/medicalresearch) +"gU" = (/obj/machinery/atmoalter/canister/n2canister,/turf/station/floor,/area/medicalresearch) +"gV" = (/obj/machinery/computer/med_data,/turf/station/floor,/area/medicalresearch) +"gW" = (/obj/machinery/firealarm{pixel_y = 32},/turf/station/floor,/area/medicalresearch) +"gX" = (/obj/machinery/computer/atmosphere/siphonswitch,/obj/machinery/camera{c_tag = "Medical Lab"},/turf/station/floor,/area/medicalresearch) +"gY" = (/obj/secloset/medical1,/turf/station/floor,/area/medicalresearch) +"gZ" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/paper/Toxin,/obj/item/weapon/clothing/gloves/latex,/obj/item/weapon/clothing/mask/surgical,/obj/item/weapon/pen,/obj/item/weapon/clipboard,/turf/station/floor,/area/medicalresearch) +"ha" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/bottle/s_tox,/obj/item/weapon/bottle/r_epil,/obj/item/weapon/bottle/r_ch_cough,/obj/item/weapon/dropper,/turf/station/floor,/area/medicalresearch) +"hb" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/syringe,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/bottle/s_tox,/obj/item/weapon/pill_canister/Tourette,/obj/item/weapon/pill_canister/epilepsy,/turf/station/floor,/area/medicalresearch) +"hc" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/storage/firstaid/toxin,/turf/station/floor,/area/medicalresearch) +"hd" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/medicalresearch) +"he" = (/obj/machinery/camera{dir = 4; c_tag = "Central Hallway"},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/hallways/centralhall4) +"hf" = (/obj/machinery/firealarm{pixel_x = 32},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/hallways/centralhall4) +"hg" = (/obj/machinery/camera{dir = 8; c_tag = "Assembly Room"},/obj/item/weapon/radio/intercom{pixel_x = 32},/turf/station/floor,/area/courtroom) +"hh" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/medical) +"hi" = (/obj/window{dir = 4},/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/medical) +"hj" = (/obj/item/weapon/ointment,/turf/station/floor,/area/medical) +"hk" = (/obj/stool/chair{dir = 8},/turf/station/floor,/area/medical) +"hl" = (/turf/station/floor,/area/medicalresearch) +"hm" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/medicalresearch) +"hn" = (/obj/stool/chair,/turf/station/floor,/area/medicalresearch) +"ho" = (/obj/machinery/door/firedoor,/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/hallways/centralhall6) +"hp" = (/obj/machinery/alarm{pixel_y = 32},/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/floor,/area/oxygen_storage) +"hq" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/oxygen_storage) +"hr" = (/obj/machinery/dispenser,/turf/station/floor,/area/oxygen_storage) +"hs" = (/obj/machinery/dispenser,/obj/machinery/camera{c_tag = "Toxin Gas Storage"},/turf/station/floor,/area/oxygen_storage) +"ht" = (/turf/station/floor,/area/oxygen_storage) +"hu" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/oxygen_storage) +"hv" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area/oxygen_storage) +"hw" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table{icon_state = "corners"; dir = 9},/turf/station/floor,/area/courtroom) +"hx" = (/obj/table{icon_state = "corners"; dir = 5},/turf/station/floor,/area/courtroom) +"hy" = (/obj/table{icon_state = "corners"; dir = 9},/turf/station/floor,/area/courtroom) +"hz" = (/obj/window{dir = 8},/turf/station/floor,/area/courtroom) +"hA" = (/obj/morgue,/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/medical) +"hB" = (/obj/machinery/sleeper,/turf/station/floor,/area/medical) +"hC" = (/obj/machinery/computer/sleep_console,/turf/station/floor,/area/medical) +"hD" = (/obj/start{name = "Medical Doctor"},/turf/station/floor,/area/medical) +"hE" = (/obj/table{icon_state = "sides"; dir = 4},/obj/manifest,/turf/station/floor,/area/medical) +"hF" = (/obj/start{name = "Medical Assistant"},/turf/station/floor,/area/medical) +"hG" = (/obj/machinery/firealarm{layer = 4; pixel_x = 32},/obj/stool/chair{dir = 8},/turf/station/floor,/area/medical) +"hH" = (/obj/machinery/firealarm{pixel_y = -32},/turf/station/floor,/area/medicalresearch) +"hI" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/radio/intercom{pixel_y = -32},/turf/station/floor,/area/medicalresearch) +"hJ" = (/obj/window,/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/medicalresearch) +"hK" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/medicalresearch) +"hL" = (/obj/machinery/door/window{dir = 8},/turf/station/floor,/area/medicalresearch) +"hM" = (/obj/window,/obj/secloset/medical2,/turf/station/floor,/area/medicalresearch) +"hN" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/window,/turf/station/floor,/area/medicalresearch) +"hO" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/turf/station/floor,/area/medicalresearch) +"hP" = (/obj/item/weapon/paper_bin,/turf/station/floor,/area/medicalresearch) +"hQ" = (/obj/machinery/alarm{pixel_y = 32},/turf/station/floor,/area/hallways/labaccess) +"hR" = (/turf/station/floor,/area/hallways/labaccess) +"hS" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/hallways/labaccess) +"hT" = (/obj/machinery/atmoalter/canister/poisoncanister,/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/oxygen_storage) +"hU" = (/obj/machinery/atmoalter/canister/n2canister,/turf/station/floor,/area/oxygen_storage) +"hV" = (/obj/stool/chair{dir = 1},/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/courtroom) +"hW" = (/obj/stool/chair{dir = 1},/turf/station/floor,/area/courtroom) +"hX" = (/obj/landmark{name = "CTF-supply-Medical"},/turf/station/floor,/area/medical) +"hY" = (/obj/machinery/door/window,/turf/station/floor,/area/medical) +"hZ" = (/obj/landmark{name = "CTF-base-Medical"},/turf/station/floor,/area/medical) +"ia" = (/obj/window{dir = 1},/turf/station/floor,/area/medicalresearch) +"ib" = (/obj/window{dir = 4},/obj/secloset/animal,/turf/station/floor,/area/medicalresearch) +"ic" = (/obj/window{dir = 1},/obj/window{dir = 8},/obj/machinery/dna_scanner,/turf/station/floor,/area/medicalresearch) +"id" = (/obj/window{dir = 1},/obj/machinery/scan_console,/turf/station/floor,/area/medicalresearch) +"ie" = (/obj/window{dir = 1},/obj/machinery/computer/dna,/turf/station/floor,/area/medicalresearch) +"if" = (/obj/window{dir = 1},/obj/machinery/restruct,/turf/station/floor,/area/medicalresearch) +"ig" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/card/data{name = "SE-Scan"; function = "dna_scan"; special = "SE"},/obj/item/weapon/card/data{name = "SI-Scan"; function = "dna_scan"; special = "SI"},/obj/item/weapon/card/data{name = "UE-Scan"; function = "dna_scan"; special = "UE"},/obj/item/weapon/card/data{name = "UI-Scan"; function = "dna_scan"; special = "UI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Scan"},/obj/window{dir = 1},/turf/station/floor,/area/medicalresearch) +"ih" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/hallways/centralhall3) +"ii" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/hallways/labaccess) +"ij" = (/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/floor,/area/oxygen_storage) +"ik" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/atmoalter/canister/n2canister,/turf/station/floor,/area/oxygen_storage) +"il" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/atmoalter/canister/n2canister,/turf/station/floor,/area/oxygen_storage) +"im" = (/obj/table{icon_state = "corners"; dir = 9},/obj/window{dir = 8},/turf/station/floor,/area/courtroom) +"in" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table{icon_state = "sides"; dir = 1},/turf/station/floor,/area/courtroom) +"io" = (/obj/landmark/alterations{name = "Experimental Technology"},/obj/window{dir = 4},/turf/station/floor,/area/medical) +"ip" = (/obj/window{dir = 10},/turf/station/floor,/area/medical) +"iq" = (/obj/item/weapon/storage/toolbox,/turf/station/floor,/area/medical) +"ir" = (/obj/machinery/door/firedoor,/obj/machinery/door/window{icon = 'security.dmi'; r_access = 1; r_lab = 3},/turf/station/floor,/area/medical) +"is" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/door/window{icon = 'security.dmi'; r_access = 1; r_lab = 3},/turf/station/floor,/area/medicalresearch) +"it" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/medicalresearch) +"iu" = (/obj/window,/turf/station/floor,/area/medicalresearch) +"iv" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 4; r_engine = 0; r_access = 1; r_lab = 1},/turf/station/floor,/area/medicalresearch) +"iw" = (/obj/start{name = "Medical Researcher"},/obj/window,/turf/station/floor,/area/medicalresearch) +"ix" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/window,/turf/station/floor,/area/medicalresearch) +"iy" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/medicalresearch) +"iz" = (/obj/machinery/door/window,/turf/station/floor,/area/medicalresearch) +"iA" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/card/data{name = "Data-Trunicate"; function = "data_trun"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Add"; function = "data_add"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Scramble"; function = "data_scramble"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Input"; function = "data_input"; data = "12"; special = null},/obj/item/weapon/storage/disk_kit/disks2{name = "Data-Controllers"},/turf/station/floor,/area/medicalresearch) +"iB" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/hallways/centralhall3) +"iC" = (/turf/station/floor,/area/hallways/centralhall3) +"iD" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/hallways/centralhall3) +"iE" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/hallways/labaccess) +"iF" = (/obj/watertank,/turf/station/floor,/area/oxygen_storage) +"iG" = (/obj/machinery/door/firedoor,/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/courtroom) +"iH" = (/obj/machinery/door/firedoor,/obj/machinery/door/window{dir = 8},/turf/station/floor,/area/courtroom) +"iI" = (/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/medical) +"iJ" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/landmark/alterations{name = "id computer"},/turf/station/floor,/area/medical) +"iK" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area/medical) +"iL" = (/obj/machinery/atmoalter/siphs/scrubbers,/turf/station/floor,/area/medicalresearch) +"iM" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/mob/monkey,/turf/station/floor,/area/medicalresearch) +"iN" = (/obj/window{dir = 8},/obj/window{dir = 1},/obj/machinery/atmoalter/canister/anesthcanister,/turf/station/floor,/area/medicalresearch) +"iO" = (/obj/item/weapon/card/data{name = "M-conv-H"; function = "worthless"; data = "SBSWAVVWFWVAZSFBS"; special = "human"},/obj/item/weapon/card/data{name = "H-conv-M"; function = "worthless"; data = "CDAFNSDHE"; special = "monkey"},/obj/window{dir = 1},/turf/station/floor,/area/medicalresearch) +"iP" = (/obj/item/weapon/storage/disk_kit/disks,/turf/station/floor,/area/medicalresearch) +"iQ" = (/obj/machinery/firealarm{pixel_x = 32},/turf/station/floor,/area/hallways/centralhall3) +"iR" = (/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/hallways/labaccess) +"iS" = (/obj/start{name = "Research Technician"},/turf/station/floor,/area/hallways/labaccess) +"iT" = (/obj/machinery/door/airlock,/turf/station/floor,/area/oxygen_storage) +"iU" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/hallways/centralhall7) +"iV" = (/obj/closet,/turf/station/floor,/area/hallways/centralhall7) +"iW" = (/obj/landmark{name = "CTF-wardrobe-Medical"},/turf/station/floor,/area/medical) +"iX" = (/obj/window{dir = 4},/turf/station/floor,/area/medical) +"iY" = (/obj/stool/bed,/turf/station/floor,/area/medical) +"iZ" = (/obj/stool/bed,/obj/item/weapon/radio/intercom{pixel_y = -32},/turf/station/floor,/area/medical) +"ja" = (/obj/machinery/atmoalter/siphs/scrubbers/port,/turf/station/floor,/area/medical) +"jb" = (/obj/machinery/door/firedoor,/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/medical) +"jc" = (/obj/machinery/door/firedoor,/obj/machinery/door/window{dir = 8},/turf/station/floor,/area/medical) +"jd" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/sp_start{name = "androiddata"; desc = "Monkey in Med Lab"; special = 3},/turf/station/floor,/area/medicalresearch) +"je" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/sp_start{name = "gooddoggytreat"; desc = "Monkey in Med. Lab."; special = 3},/turf/station/floor,/area/medicalresearch) +"jf" = (/obj/window{dir = 8},/obj/machinery/firealarm{pixel_y = -32},/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/floor,/area/medicalresearch) +"jg" = (/obj/item/weapon/card/data{name = "DNA-help"; function = "dna_seq"},/turf/station/floor,/area/medicalresearch) +"jh" = (/obj/item/weapon/card/data{name = "C-Help"; function = "dna_help"},/turf/station/floor,/area/medicalresearch) +"ji" = (/obj/item/weapon/card/data{name = "M-Mutate"; function = "data_mutate"; data = "14A"; special = ""},/obj/item/weapon/card/data{name = "S-Mutate"; function = "data_mutate"; data = "CDE"; special = ""},/obj/item/weapon/card/data{name = "A-Mutate"; function = "data_mutate"; data = "AEC"; special = ""},/turf/station/floor,/area/medicalresearch) +"jj" = (/obj/start{name = "Research Assistant"},/turf/station/floor,/area/hallways/labaccess) +"jk" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/closet/l3closet,/turf/station/floor,/area/toxinlab) +"jl" = (/turf/station/floor,/area/toxinlab) +"jm" = (/obj/table,/obj/item/weapon/storage/toolbox,/obj/item/weapon/clothing/glasses/sunglasses,/turf/station/floor,/area/toxinlab) +"jn" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/igniter,/obj/item/weapon/radio/signaler,/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/obj/item/weapon/pen,/turf/station/floor,/area/toxinlab) +"jo" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/igniter,/obj/item/weapon/radio/signaler,/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/pill_canister/antitoxin,/turf/station/floor,/area/toxinlab) +"jp" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/atmoalter/heater,/turf/station/floor,/area/toxinlab) +"jq" = (/turf/station/floor,/area/hallways/centralhall7) +"jr" = (/obj/landmark/alterations{name = "barrier"},/obj/machinery/door/firedoor,/turf/station/floor,/area/hallways/loungehall) +"js" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "UI-Replace"; function = "dna_replace"; special = "UI"},/obj/item/weapon/card/data{name = "UE-Replace"; function = "dna_replace"; special = "UE"},/obj/item/weapon/card/data{name = "SE-Replace"; function = "dna_replace"; special = "SE"},/obj/item/weapon/card/data{name = "SI-Replace"; function = "dna_replace"; special = "SI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Replace"},/turf/station/floor,/area/medicalresearch) +"jt" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "Disk-Display"; function = "disk_dis"; data = ""; special = null},/obj/item/weapon/card/data{name = "Disk-Erase"; function = "disk_erase"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Disk-Copy"; function = "disk_copy"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Clear"; function = "data_clear"; data = "12"; special = null},/obj/item/weapon/storage/disk_kit/disks2{name = "Disk-Controllers"},/turf/station/floor,/area/medicalresearch) +"ju" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "UE-Human"; data = "493DB249EB6D13236100A37000800AB71"},/obj/item/weapon/card/data{name = "SI-Human"; data = "5BDFE293BA5500F9FFFD500AAFFE"},/obj/item/weapon/card/data{name = "SE-Human"; data = "CDE375C9A6C25A7DBDA50EC05AC6CEB63"},/obj/item/weapon/storage/disk_kit/disks2{name = "Human DNA"},/turf/station/floor,/area/medicalresearch) +"jv" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "SE-Monkey"; data = "CDEAF5B90AADBC6BA8033DB0A7FD613FA"},/obj/item/weapon/card/data{name = "SI-Monkey"; data = "2B6696D2B127E5A4"},/obj/item/weapon/card/data{name = "UE-Monkey"; data = "C8FFFE7EC09D80AEDEDB9A5A0B4085B61"},/obj/item/weapon/storage/disk_kit/disks2{name = "Monkey DNA"},/turf/station/floor,/area/medicalresearch) +"jw" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "SE-Add"; function = "dna_add"; special = "SE"},/obj/item/weapon/card/data{name = "SI-Add"; function = "dna_add"; special = "SI"},/obj/item/weapon/card/data{name = "UE-Add"; function = "dna_add"; special = "UE"},/obj/item/weapon/card/data{name = "UI-Add"; function = "dna_add"; special = "UI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Add"},/turf/station/floor,/area/medicalresearch) +"jx" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "UE-Trunicate"; function = "dna_trun"; data = "32"; special = "UE"},/obj/item/weapon/card/data{name = "SI-Trunicate"; function = "dna_trun"; data = "16"; special = "SI"},/obj/item/weapon/card/data{name = "SE-Trunicate"; function = "dna_trun"; data = "32"; special = "SE"},/obj/item/weapon/card/data{name = "UI-Trunicate"; function = "dna_trun"; data = "12"; special = "UI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Trunicate"},/turf/station/floor,/area/medicalresearch) +"jy" = (/obj/landmark/alterations{name = "barrier"},/obj/machinery/door/firedoor,/obj/machinery/door/window,/turf/station/floor,/area/hallways/centralhall3) +"jz" = (/obj/machinery/door/airlock{r_access = 1; r_lab = 3},/turf/station/floor,/area/hallways/labaccess) +"jA" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/toxinlab) +"jB" = (/obj/item/weapon/clipboard,/turf/station/floor,/area/toxinlab) +"jC" = (/obj/machinery/firealarm{pixel_x = 0; pixel_y = -32},/turf/station/floor,/area/hallways/centralhall7) +"jD" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/atmoalter/siphs/scrubbers/port,/turf/station/floor,/area/hallways/centralhall7) +"jE" = (/obj/machinery/atmoalter/siphs/scrubbers/port,/turf/station/floor,/area/hallways/centralhall7) +"jF" = (/obj/secloset/personal,/turf/station/floor,/area/crew_quarters) +"jG" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/secloset/personal,/turf/station/floor,/area/crew_quarters) +"jH" = (/obj/machinery/alarm{pixel_y = 32},/obj/secloset/personal,/turf/station/floor,/area/crew_quarters) +"jI" = (/obj/machinery/computer/card,/turf/station/floor,/area/hallways/loungehall) +"jJ" = (/turf/station/floor,/area/hallways/loungehall) +"jK" = (/obj/closet/emcloset,/turf/station/floor,/area/hallways/loungehall) +"jL" = (/obj/machinery/atmoalter/siphs/scrubbers,/turf/station/floor,/area/hallways/centralhall1) +"jM" = (/obj/machinery/alarm{pixel_y = 32},/turf/station/floor,/area/hallways/centralhall1) +"jN" = (/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/toxinlab) +"jO" = (/obj/item/weapon/radio/intercom{pixel_x = 32},/turf/station/floor,/area/toxinlab) +"jP" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/hallways/centralhall7) +"jQ" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/crew_quarters) +"jR" = (/turf/station/floor,/area/crew_quarters) +"jS" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/crew_quarters) +"jT" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/firealarm{pixel_x = 32},/turf/station/floor,/area/crew_quarters) +"jU" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/hallways/loungehall) +"jV" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/hallways/loungehall) +"jW" = (/obj/item/weapon/storage/toolbox,/obj/item/weapon/crowbar,/obj/machinery/atmoalter/canister/n2canister,/obj/machinery/firealarm{pixel_x = 32},/turf/station/floor,/area/hallways/loungehall) +"jX" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/hallways/centralhall1) +"jY" = (/turf/station/floor,/area/hallways/centralhall1) +"jZ" = (/obj/machinery/firealarm{pixel_y = 32},/turf/station/floor,/area/hallways/centralhall1) +"ka" = (/obj/item/weapon/storage/toolbox,/turf/station/floor,/area/hallways/centralhall1) +"kb" = (/obj/machinery/atmoalter/siphs/fullairsiphon,/turf/station/floor,/area/hallways/centralhall1) +"kc" = (/obj/machinery/atmoalter/siphs/fullairsiphon/port,/turf/station/floor,/area/hallways/centralhall2) +"kd" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/hallways/centralhall2) +"ke" = (/obj/machinery/firealarm{pixel_x = 0; pixel_y = 32},/turf/station/floor,/area/hallways/centralhall2) +"kf" = (/turf/station/floor,/area/hallways/centralhall2) +"kg" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/hallways/centralhall2) +"kh" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/hallways/centralhall2) +"ki" = (/obj/machinery/firealarm{pixel_y = -32},/turf/station/floor,/area/hallways/labaccess) +"kj" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/toxinlab) +"kk" = (/obj/start{name = "Toxin Researcher"},/turf/station/floor,/area/toxinlab) +"kl" = (/obj/machinery/door/airlock{r_access = 1; r_lab = 3},/turf/station/floor,/area/toxinlab) +"km" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/atmoalter/siphs/scrubbers/port,/turf/station/floor,/area/hallways/centralhall7) +"kn" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/crew_quarters) +"ko" = (/obj/machinery/door/firedoor,/obj/machinery/door/window,/turf/station/floor,/area/hallways/loungehall) +"kp" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area/hallways/loungehall) +"kq" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/hallways/centralhall1) +"kr" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/atmoalter/siphs/scrubbers/port,/turf/station/floor,/area/hallways/centralhall2) +"ks" = (/obj/machinery/camera{dir = 8; c_tag = "Toxin Research Lab"},/turf/station/floor,/area/toxinlab) +"kt" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/hallways/centralhall7) +"ku" = (/obj/machinery/atmoalter/siphs/fullairsiphon/port,/turf/station/floor,/area/hallways/centralhall7) +"kv" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 4; r_engine = 0; r_access = 4; r_lab = 4},/turf/station/floor,/area/crew_quarters) +"kw" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/hallways/centralhall1) +"kx" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/hallways/centralhall3) +"ky" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/watertank,/turf/station/floor,/area/toxinlab) +"kz" = (/obj/machinery/door/firedoor,/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/crew_quarters) +"kA" = (/obj/machinery/door/firedoor,/obj/machinery/door/window{dir = 8},/turf/station/floor,/area/crew_quarters) +"kB" = (/obj/stool/bed,/obj/item/weapon/bedsheet,/turf/station/floor,/area/crew_quarters) +"kC" = (/obj/machinery/door/firedoor,/obj/grille,/obj/window{dir = 1},/turf/station/floor,/area/hallways/loungehall) +"kD" = (/obj/machinery/door/firedoor,/obj/grille,/obj/window{dir = 1},/obj/window{dir = 4},/turf/station/floor,/area/hallways/loungehall) +"kE" = (/obj/machinery/door/firedoor,/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/hallways/loungehall) +"kF" = (/obj/machinery/door/firedoor,/obj/machinery/door/window{dir = 8},/turf/station/floor,/area/hallways/loungehall) +"kG" = (/obj/machinery/door/firedoor,/obj/grille,/obj/window{dir = 1},/obj/window{dir = 8},/turf/station/floor,/area/hallways/loungehall) +"kH" = (/obj/machinery/door/firedoor,/turf/station/floor,/area) +"kI" = (/turf/station/floor,/area/decontamination) +"kJ" = (/obj/item/weapon/extinguisher,/turf/station/floor,/area/toxinlab) +"kK" = (/obj/machinery/computer/atmosphere/siphonswitch,/turf/station/floor,/area/toxinlab) +"kL" = (/obj/machinery/door/firedoor,/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/shuttle_airlock) +"kM" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/sleep_area) +"kN" = (/obj/table{icon_state = "alone"},/turf/station/floor,/area/crew_quarters) +"kO" = (/obj/rack,/obj/item/weapon/clothing/under/blue,/obj/item/weapon/radio/headset,/turf/station/floor,/area/crew_quarters) +"kP" = (/obj/machinery/door/firedoor,/obj/grille,/obj/window,/turf/station/floor,/area/lounge) +"kQ" = (/obj/machinery/door/firedoor,/obj/grille,/obj/window,/obj/window{dir = 4},/turf/station/floor,/area/lounge) +"kR" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/lounge) +"kS" = (/obj/machinery/door/firedoor,/obj/grille,/obj/window,/obj/window{dir = 8},/turf/station/floor,/area/lounge) +"kT" = (/obj/secloset/security1,/turf/station/floor,/area/security) +"kU" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/clipboard,/obj/item/weapon/paper/courtroom,/obj/machinery/firealarm{pixel_y = 32},/turf/station/floor,/area/security) +"kV" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/table,/obj/machinery/recharger,/obj/item/weapon/clothing/glasses/thermal,/turf/station/floor,/area/security) +"kW" = (/obj/secloset/security2,/turf/station/floor,/area/security) +"kX" = (/turf/station/floor,/area/security) +"kY" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/security) +"kZ" = (/obj/machinery/firealarm{pixel_x = 32},/obj/window{dir = 4},/turf/station/floor,/area/security) +"la" = (/obj/machinery/injector{dir = 1},/turf/station/wall,/area) +"lb" = (/obj/grille,/obj/window{dir = 8},/obj/window,/obj/window{dir = 1},/turf/station/floor,/area) +"lc" = (/obj/grille,/obj/window,/obj/window{dir = 1},/turf/station/floor,/area) +"ld" = (/obj/closet/emcloset,/turf/station/floor,/area/shuttle_airlock) +"le" = (/turf/station/floor,/area/shuttle_airlock) +"lf" = (/obj/landmark{name = "Nuclear-Closet"},/turf/station/floor,/area/shuttle_airlock) +"lg" = (/obj/landmark/alterations{name = "prison shuttle"},/turf/station/floor,/area/shuttle_airlock) +"lh" = (/turf/station/floor,/area/sleep_area) +"li" = (/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/lounge) +"lj" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/lounge) +"lk" = (/obj/stool,/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/lounge) +"ll" = (/obj/stool,/turf/station/floor,/area/lounge) +"lm" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/lounge) +"ln" = (/obj/landmark{name = "CTF-wardrobe-Lounge"},/obj/watertank,/turf/station/floor,/area/lounge) +"lo" = (/obj/machinery/door/airlock{r_air = 1},/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/hallways/centralhall2) +"lp" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/secloset/security1,/turf/station/floor,/area/security) +"lq" = (/obj/start{name = "Forensic Technician"},/turf/station/floor,/area/security) +"lr" = (/obj/machinery/door/firedoor,/obj/machinery/door/window{icon = 'security.dmi'; dir = 2; r_engine = 0; r_access = 3; r_lab = 0},/turf/station/floor,/area/security) +"ls" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/door/window{icon = 'security.dmi'; dir = 2; r_engine = 0; r_access = 3; r_lab = 0},/obj/start{name = "Staff Assistant"},/turf/station/floor,/area/security) +"lt" = (/obj/machinery/door/firedoor,/obj/grille,/obj/window{dir = 4},/obj/window{dir = 8},/turf/station/floor,/area/security) +"lu" = (/obj/table,/obj/item/weapon/game_kit,/turf/station/floor,/area/security) +"lv" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/closet/wardrobe/orange,/turf/station/floor,/area/security) +"lw" = (/obj/machinery/door/airlock{r_access = 1; r_lab = 2},/turf/station/floor,/area/decontamination) +"lx" = (/turf/station/floor,/area/testlab1) +"ly" = (/obj/landmark/alterations{name = "Experimental Technology"},/turf/station/floor,/area/testlab1) +"lz" = (/obj/machinery/alarm{pixel_x = 32},/obj/landmark/alterations{name = "Experimental Technology"},/turf/station/floor,/area/testlab1) +"lA" = (/obj/item/weapon/radio/intercom{pixel_x = -32},/turf/station/floor,/area/shuttle_airlock) +"lB" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/shuttle_airlock) +"lC" = (/obj/closet/wardrobe,/turf/station/floor,/area/sleep_area) +"lD" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/closet/wardrobe/mixed,/turf/station/floor,/area/sleep_area) +"lE" = (/obj/closet/wardrobe/mixed,/turf/station/floor,/area/sleep_area) +"lF" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/table{icon_state = "alone"},/obj/bedsheetbin,/obj/machinery/firealarm{pixel_y = 32},/turf/station/floor,/area/sleep_area) +"lG" = (/obj/closet,/turf/station/floor,/area/sleep_area) +"lH" = (/obj/machinery/firealarm{pixel_x = 32},/obj/landmark/alterations{name = "id computer"},/turf/station/floor,/area/sleep_area) +"lI" = (/obj/machinery/camera{dir = 4; c_tag = "Lounge/Meeting Area"},/turf/station/floor,/area/lounge) +"lJ" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/paper/Internal,/obj/item/weapon/paper/sop,/obj/item/weapon/wirecutters,/obj/item/weapon/wrapping_paper,/turf/station/floor,/area/lounge) +"lK" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/paper/Toxin,/obj/item/weapon/paper/sop,/obj/item/weapon/paper/jobs,/obj/item/weapon/pen,/obj/landmark/alterations{name = "recharger"},/turf/station/floor,/area/lounge) +"lL" = (/obj/landmark{name = "CTF-wardrobe-Lounge"},/turf/station/floor,/area/lounge) +"lM" = (/obj/machinery/atmoalter/siphs/fullairsiphon,/turf/station/floor,/area/airintake) +"lN" = (/obj/machinery/atmoalter/siphs/fullairsiphon,/obj/window{dir = 4},/turf/station/floor,/area/airintake) +"lO" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/landmark{name = "CTF-wardrobe-Atmo"},/turf/station/floor,/area/aircontrol) +"lP" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/landmark{name = "CTF-wardrobe-Atmo"},/turf/station/floor,/area/aircontrol) +"lQ" = (/turf/station/floor,/area/aircontrol) +"lR" = (/obj/machinery/atmoalter/siphs/fullairsiphon,/turf/station/floor,/area/aircontrol) +"lS" = (/obj/start{name = "Security Officer"},/turf/station/floor,/area/security) +"lT" = (/obj/machinery/door/firedoor,/obj/table{icon_state = "sides"; dir = 1},/obj/machinery/door/window{icon = 'security.dmi'; dir = 4; r_engine = 0; r_access = 3; r_lab = 0},/turf/station/floor,/area/security) +"lU" = (/obj/machinery/door/firedoor,/obj/table{icon_state = "sides"; dir = 1},/obj/machinery/door/window{icon = 'security.dmi'; dir = 8; r_engine = 0; r_access = 3; r_lab = 0},/turf/station/floor,/area/security) +"lV" = (/obj/item/weapon/bedsheet,/turf/station/floor,/area/security) +"lW" = (/obj/stool/bed,/turf/station/floor,/area/security) +"lX" = (/obj/machinery/atmoalter/siphs/scrubbers/port,/turf/station/floor,/area) +"lY" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/decontamination) +"lZ" = (/obj/machinery/door/airlock,/turf/station/floor,/area/decontamination) +"ma" = (/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/shuttle_airlock) +"mb" = (/obj/landmark{name = "CTF-rogue"},/turf/station/floor,/area/shuttle_airlock) +"mc" = (/obj/landmark{name = "Nuclear-Bomb"},/turf/station/floor,/area/shuttle_airlock) +"md" = (/obj/machinery/camera{dir = 4; c_tag = "Crew Sleeping Area"},/turf/station/floor,/area/sleep_area) +"me" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/sleep_area) +"mf" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/sleep_area) +"mg" = (/obj/item/weapon/radio/intercom{pixel_x = 32},/turf/station/floor,/area/sleep_area) +"mh" = (/obj/item/weapon/radio/intercom{pixel_x = -32},/turf/station/floor,/area/lounge) +"mi" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/paper_bin,/obj/item/weapon/paper/Internal,/obj/item/weapon/paper/Map,/obj/item/weapon/paper/jobs,/obj/item/weapon/paper/sop,/obj/item/weapon/clipboard,/obj/item/weapon/clipboard,/turf/station/floor,/area/lounge) +"mj" = (/obj/table{icon_state = "sides"; dir = 4},/obj/item/weapon/paper/Map,/obj/item/weapon/paper/sop,/obj/item/weapon/radio/signaler,/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/lounge) +"mk" = (/obj/machinery/firealarm{pixel_x = 32},/turf/station/floor,/area/lounge) +"ml" = (/turf/station/floor{oxygen = 0},/area/airintake) +"mm" = (/obj/window{dir = 4},/turf/station/floor{oxygen = 0},/area/airintake) +"mn" = (/obj/machinery/door/airlock{r_air = 1},/turf/station/floor,/area/aircontrol) +"mo" = (/obj/stool,/turf/station/floor,/area/security) +"mp" = (/obj/machinery/camera{dir = 4; c_tag = "Prison"},/turf/station/floor,/area/security) +"mq" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/stool/bed,/turf/station/floor,/area/security) +"mr" = (/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/testlab1) +"ms" = (/obj/machinery/camera{dir = 4; c_tag = "Shuttle Bay"},/turf/station/floor,/area/shuttle_airlock) +"mt" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/shuttle_airlock) +"mu" = (/obj/stool/bed,/turf/station/floor,/area/sleep_area) +"mv" = (/obj/landmark{name = "CTF-supply-Lounge"},/turf/station/floor,/area/lounge) +"mw" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/paper/Toxin,/obj/item/weapon/paper/sop,/obj/manifest,/turf/station/floor,/area/lounge) +"mx" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/paper/Internal,/obj/item/weapon/paper/sop,/obj/item/weapon/paper/jobs,/turf/station/floor,/area/lounge) +"my" = (/obj/landmark/alterations{name = "Experimental Technology"},/turf/station/floor,/area/lounge) +"mz" = (/obj/machinery/atmoalter/siphs/scrubbers,/turf/station/floor,/area/airintake) +"mA" = (/obj/machinery/atmoalter/siphs/scrubbers,/obj/window{dir = 4},/turf/station/floor,/area/airintake) +"mB" = (/obj/machinery/atmoalter/siphs/scrubbers,/turf/station/floor,/area/aircontrol) +"mC" = (/obj/machinery/computer/secure_data,/turf/station/floor,/area/security) +"mD" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/turf/station/floor,/area/security) +"mE" = (/obj/item/weapon/storage/trackimp_kit,/turf/station/floor,/area/security) +"mF" = (/obj/item/weapon/paper_bin,/turf/station/floor,/area/security) +"mG" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/storage/toolbox,/obj/item/weapon/clothing/ears/earmuffs,/turf/station/floor,/area/security) +"mH" = (/obj/window{dir = 4},/obj/machinery/sec_lock{layer = 4; pixel_x = 32},/turf/station/floor,/area/security) +"mI" = (/obj/machinery/atmoalter/siphs/fullairsiphon/port,/turf/station/floor,/area/testlab1) +"mJ" = (/obj/grille,/turf/station/floor,/area/testlab1) +"mK" = (/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/testlab1) +"mL" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/landmark/alterations{name = "Prisoners Wardrobe"},/turf/station/floor,/area/shuttle_airlock) +"mM" = (/obj/landmark/alterations{name = "Prisoners Wardrobe"},/turf/station/floor,/area/shuttle_airlock) +"mN" = (/turf/station/floor,/area/lounge) +"mO" = (/obj/item/weapon/storage/backpack,/turf/station/floor,/area/lounge) +"mP" = (/turf/station/floor,/area/airintake) +"mQ" = (/obj/window{dir = 4},/obj/window{dir = 8},/obj/machinery/alarm,/turf/station/floor,/area/airintake) +"mR" = (/obj/machinery/alarm,/turf/station/floor,/area/airintake) +"mS" = (/obj/window{dir = 4},/turf/station/floor,/area/airintake) +"mT" = (/obj/machinery/firealarm{pixel_x = 32},/turf/station/floor,/area/aircontrol) +"mU" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/infra,/obj/item/weapon/infra,/obj/item/weapon/radio/signaler,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/prox_sensor,/obj/item/weapon/prox_sensor,/obj/item/weapon/clipboard,/turf/station/floor,/area/security) +"mV" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/infra,/obj/item/weapon/infra,/obj/item/weapon/radio/signaler,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/prox_sensor,/obj/item/weapon/prox_sensor,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/dropper,/turf/station/floor,/area/security) +"mW" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/infra,/obj/item/weapon/infra,/obj/item/weapon/radio/signaler,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/prox_sensor,/obj/item/weapon/prox_sensor,/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/security) +"mX" = (/obj/machinery/computer/security,/turf/station/floor,/area/security) +"mY" = (/obj/machinery/computer/card,/turf/station/floor,/area/security) +"mZ" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/closet/wardrobe/red,/turf/station/floor,/area/security) +"na" = (/obj/closet/wardrobe/orange,/turf/station/floor,/area/security) +"nb" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 2; r_engine = 0; r_access = 4; r_lab = 4},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/security) +"nc" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 2; r_engine = 0; r_access = 4; r_lab = 4},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/security) +"nd" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/security) +"ne" = (/obj/grille,/obj/item/weapon/wirecutters,/obj/item/weapon/wrench,/obj/item/weapon/weldingtool,/turf/station/floor,/area) +"nf" = (/obj/window{dir = 10},/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/shuttle_airlock) +"ng" = (/obj/machinery/door/airlock,/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/shuttle_airlock) +"nh" = (/obj/grille,/obj/window,/obj/window{dir = 1},/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/shuttle_airlock) +"ni" = (/obj/machinery/door/firedoor,/obj/machinery/door/window,/turf/station/floor,/area/sleep_area) +"nj" = (/obj/landmark{name = "CTF-base-Lounge"},/turf/station/floor,/area/lounge) +"nk" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/lounge) +"nl" = (/obj/grille,/turf/station/floor{oxygen = 0},/area/airintake) +"nm" = (/obj/window{dir = 4},/obj/grille,/turf/station/floor{oxygen = 0},/area/airintake) +"nn" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/aircontrol) +"no" = (/obj/machinery/door/firedoor,/obj/window{dir = 4},/turf/station/floor,/area/shuttle_airlock) +"np" = (/obj/machinery/door/firedoor,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/shuttle_airlock) +"nq" = (/obj/machinery/door/firedoor,/obj/window{dir = 8},/turf/station/floor,/area/shuttle_airlock) +"nr" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/shuttle_airlock) +"ns" = (/obj/machinery/door/airlock{r_air = 1; r_engine = 1; r_access = 1},/turf/station/floor,/area/disaster) +"nt" = (/obj/machinery/door/firedoor,/obj/machinery/door/window{dir = 8},/turf/station/floor,/area/lounge) +"nu" = (/obj/window,/turf/station/floor{oxygen = 0},/area/airintake) +"nv" = (/obj/window{dir = 4},/obj/window,/turf/station/floor{oxygen = 0},/area/airintake) +"nw" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/aircontrol) +"nx" = (/obj/landmark/alterations{name = "Experimental Technology"},/turf/station/floor,/area/aircontrol) +"ny" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/landmark/alterations{name = "Experimental Technology"},/turf/station/floor,/area/aircontrol) +"nz" = (/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/floor,/area/aircontrol) +"nA" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/aircontrol) +"nB" = (/obj/window{dir = 10},/turf/station/floor,/area/shuttle_airlock) +"nC" = (/obj/machinery/door/airlock,/turf/station/floor,/area/shuttle_airlock) +"nD" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/extinguisher,/obj/closet/emcloset,/turf/station/floor,/area/disaster) +"nE" = (/turf/station/floor,/area/disaster) +"nF" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/disaster) +"nG" = (/obj/machinery/computer/communications,/turf/station/floor,/area/disaster) +"nH" = (/obj/machinery/computer/card,/turf/station/floor,/area/disaster) +"nI" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/computer/engine,/turf/station/floor,/area/disaster) +"nJ" = (/turf/station/floor,/area/mess) +"nK" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/mess) +"nL" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/mess) +"nM" = (/obj/machinery/computer/atmosphere/siphonswitch,/obj/window{dir = 4},/turf/station/floor,/area/aircontrol) +"nN" = (/obj/machinery/camera{dir = 8; c_tag = "Atmo. Gas Storage"},/turf/station/floor,/area/aircontrol) +"nO" = (/turf/space,/area/shuttle) +"nP" = (/obj/closet/emcloset,/obj/machinery/camera{dir = 4; c_tag = "Disaster Response Center"},/turf/station/floor,/area/disaster) +"nQ" = (/obj/machinery/computer/security,/turf/station/floor,/area/disaster) +"nR" = (/obj/machinery/firealarm{pixel_x = 32},/turf/station/floor,/area/mess) +"nS" = (/obj/stool/chair{dir = 1},/turf/station/floor,/area/aircontrol) +"nT" = (/obj/landmark{name = "CTF-base-Atmo"},/turf/station/floor,/area/aircontrol) +"nU" = (/obj/landmark{name = "CTF-supply-Atmo"},/turf/station/floor,/area/aircontrol) +"nV" = (/obj/machinery/door/airlock,/turf/station/floor,/area/aircontrol) +"nW" = (/obj/machinery/atmoalter/canister/n2canister,/turf/station/floor,/area/aircontrol) +"nX" = (/obj/closet/emcloset,/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/disaster) +"nY" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/storage/toolbox,/turf/station/floor,/area/disaster) +"nZ" = (/obj/machinery/camera{dir = 4; c_tag = "Atmospheric Control Room"},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/radio/intercom{pixel_x = -32},/turf/station/floor,/area/aircontrol) +"oa" = (/obj/start{name = "Atmospheric Technician"},/turf/station/floor,/area/aircontrol) +"ob" = (/obj/window{dir = 1},/obj/window{dir = 8},/obj/watertank,/turf/station/floor,/area/aircontrol) +"oc" = (/obj/window{dir = 1},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/aircontrol) +"od" = (/obj/window{dir = 1},/obj/item/weapon/clothing/mask/gasmask,/turf/station/floor,/area/aircontrol) +"oe" = (/obj/window{dir = 1},/obj/machinery/dispenser,/turf/station/floor,/area/aircontrol) +"of" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/firealarm{pixel_y = -32},/turf/station/floor,/area/aircontrol) +"og" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area/aircontrol) +"oh" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/closet/emcloset,/turf/station/floor,/area/disaster) +"oi" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/disaster) +"oj" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/storage/toolbox,/turf/station/floor,/area/disaster) +"ok" = (/obj/machinery/camera{dir = 8; c_tag = "Food Preparation Area"},/turf/station/floor,/area/mess) +"ol" = (/obj/window{dir = 1},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/aircontrol) +"om" = (/obj/window{dir = 1},/turf/station/floor,/area/aircontrol) +"on" = (/obj/window{dir = 1},/obj/weldfueltank,/turf/station/floor,/area/aircontrol) +"oo" = (/obj/window{dir = 4},/obj/window{dir = 1},/obj/weldfueltank,/turf/station/floor,/area/aircontrol) +"op" = (/obj/window{dir = 8},/turf/station/floor,/area/aircontrol) +"oq" = (/obj/item/weapon/clothing/under/yellow,/obj/item/weapon/clothing/shoes/orange,/turf/station/floor,/area/aircontrol) +"or" = (/obj/machinery/door/airlock,/turf/station/floor,/area/kitchen) +"os" = (/obj/machinery/door/window,/turf/station/floor,/area/aircontrol) +"ot" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/paper_bin,/turf/station/floor,/area/aircontrol) +"ou" = (/obj/item/weapon/clipboard,/turf/station/floor,/area/aircontrol) +"ov" = (/obj/item/weapon/storage/toolbox,/obj/item/weapon/crowbar,/turf/station/floor,/area/aircontrol) +"ow" = (/obj/machinery/atmoalter/siphs/scrubbers/port,/turf/station/floor,/area/aircontrol) +"ox" = (/obj/item/weapon/extinguisher,/turf/station/floor,/area/disaster) +"oy" = (/obj/closet/emcloset,/turf/station/floor,/area/disaster) +"oz" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/storage/firstaid/toxin,/turf/station/floor,/area/disaster) +"oA" = (/turf/station/floor,/area/kitchen) +"oB" = (/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/aircontrol) +"oC" = (/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/aircontrol) +"oD" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/aircontrol) +"oE" = (/obj/window{dir = 8},/obj/landmark/alterations{name = "id computer"},/turf/station/floor,/area/aircontrol) +"oF" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/wrench,/obj/item/weapon/analyzer,/obj/item/weapon/radio,/obj/item/weapon/screwdriver,/obj/item/weapon/crowbar,/obj/landmark/alterations{name = "recharger"},/turf/station/floor,/area/aircontrol) +"oG" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/wrench,/obj/item/weapon/analyzer,/obj/item/weapon/screwdriver,/obj/item/weapon/extinguisher,/obj/item/weapon/crowbar,/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/aircontrol) +"oH" = (/obj/weldfueltank,/turf/station/floor,/area/aircontrol) +"oI" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/wrench,/obj/item/weapon/analyzer,/obj/item/weapon/radio,/obj/item/weapon/screwdriver,/turf/station/floor,/area/aircontrol) +"oJ" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/wrench,/obj/item/weapon/analyzer,/obj/item/weapon/screwdriver,/obj/item/weapon/extinguisher,/turf/station/floor,/area/aircontrol) +"oK" = (/obj/item/weapon/extinguisher,/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/disaster) +"oL" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/disaster) +"oM" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/kitchen) +"oN" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/kitchen) +"oO" = (/obj/machinery/firealarm{pixel_x = 32},/turf/station/floor,/area/kitchen) +"oP" = (/obj/machinery/atmoalter/siphs/fullairsiphon/port,/turf/station/floor,/area/aircontrol) +"oQ" = (/obj/rack,/obj/item/weapon/clothing/suit/firesuit,/obj/item/weapon/clothing/under/black,/obj/item/weapon/clothing/mask/gasmask,/obj/item/weapon/radio/headset,/obj/item/weapon/clothing/shoes/black,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/glasses/meson,/obj/item/weapon/clothing/glasses/sunglasses,/turf/station/floor,/area/disaster) +"oR" = (/obj/rack,/obj/item/weapon/clothing/suit/firesuit,/obj/item/weapon/clothing/under/black,/obj/item/weapon/clothing/mask/gasmask,/obj/item/weapon/radio/headset,/obj/item/weapon/clothing/shoes/black,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/glasses/sunglasses,/turf/station/floor,/area/disaster) +"oS" = (/obj/machinery/dispenser{o2tanks = 20; pltanks = 0},/turf/station/floor,/area/disaster) +"oT" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/storage/toolbox,/turf/station/floor,/area/disaster) +"oU" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/storage/firstaid/fire,/turf/station/floor,/area/disaster) +"oV" = (/obj/machinery/firealarm{pixel_y = -32},/turf/station/floor,/area/aircontrol) +"oW" = (/obj/grille,/obj/item/weapon/hand_tele,/turf/station/floor,/area) +"oX" = (/obj/grille,/obj/item/weapon/tank/oxygentank,/turf/station/floor,/area) +"oY" = (/obj/machinery/dispenser,/turf/station/floor,/area/MS) +"oZ" = (/obj/closet/emcloset,/turf/station/floor,/area/MS) +"pa" = (/turf/station/floor,/area/MS) +"pb" = (/obj/machinery/door/airlock,/turf/station/floor,/area/MS) +"pc" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/door/firedoor,/turf/station/floor,/area/MS) +"pd" = (/turf/station/floor{oxygen = 0},/area/MS) +"pe" = (/obj/machinery/door/firedoor,/turf/station/floor{oxygen = 0},/area/MS) +"pf" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/mob/monkey,/turf/station/floor,/area/MS) +"pg" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/MS) +"ph" = (/turf/station/wall,/area/MS) +"pi" = (/obj/table{icon_state = "sides"; dir = 4},/obj/item/weapon/card/data{name = "SE-Scan"; function = "dna_scan"; special = "SE"},/obj/item/weapon/card/data{name = "SI-Scan"; function = "dna_scan"; special = "SI"},/obj/item/weapon/card/data{name = "UE-Scan"; function = "dna_scan"; special = "UE"},/obj/item/weapon/card/data{name = "UI-Scan"; function = "dna_scan"; special = "UI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Scan"},/turf/station/floor,/area/MS) +"pj" = (/obj/item/weapon/storage/disk_kit/disks,/turf/station/floor,/area/MS) +"pk" = (/obj/machinery/dna_scanner,/turf/station/floor,/area/MS) +"pl" = (/obj/machinery/scan_console,/turf/station/floor,/area/MS) +"pm" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/secloset/animal,/turf/station/floor,/area/MS) +"pn" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/MS) +"po" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/card/data{name = "Data-Trunicate"; function = "data_trun"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Add"; function = "data_add"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Scramble"; function = "data_scramble"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Input"; function = "data_input"; data = "12"; special = null},/obj/item/weapon/storage/disk_kit/disks2{name = "Data-Controllers"},/turf/station/floor,/area/MS) +"pp" = (/obj/machinery/computer/pod{name = "Mass Driver"; dir = 4; id = 5},/turf/station/floor{oxygen = 0},/area/MS) +"pq" = (/obj/machinery/door/firedoor,/obj/grille,/obj/window{dir = 4},/obj/window{dir = 8},/turf/station/floor,/area/MS) +"pr" = (/obj/machinery/computer/dna,/turf/station/floor,/area/MS) +"ps" = (/obj/machinery/door/firedoor,/obj/machinery/door/window{icon = 'security.dmi'; r_engine = 0; r_access = 1; r_lab = 1},/turf/station/floor,/area/MS) +"pt" = (/obj/item/weapon/flasks/oxygen,/obj/item/weapon/flasks/oxygen,/obj/item/weapon/flasks/oxygen,/turf/station/floor,/area/MS) +"pu" = (/obj/item/weapon/flasks/coolant,/obj/item/weapon/flasks/coolant,/obj/item/weapon/flasks/coolant,/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/MS) +"pv" = (/obj/machinery/mass_driver{dir = 4; id = 5},/obj/closet,/turf/station/floor{oxygen = 0},/area/MS) +"pw" = (/mob/monkey,/turf/station/floor,/area/MS) +"px" = (/obj/machinery/door/firedoor,/obj/grille,/obj/window{dir = 4},/obj/window{dir = 8},/obj/window,/turf/station/floor,/area/MS) +"py" = (/obj/item/weapon/card/data{name = "M-Mutate"; function = "data_mutate"; data = "14A"; special = ""},/obj/item/weapon/card/data{name = "S-Mutate"; function = "data_mutate"; data = "CDE"; special = ""},/obj/item/weapon/card/data{name = "A-Mutate"; function = "data_mutate"; data = "AEC"; special = ""},/turf/station/floor,/area/MS) +"pz" = (/obj/machinery/restruct,/turf/station/floor,/area/MS) +"pA" = (/obj/item/weapon/flasks/plasma,/obj/item/weapon/flasks/plasma,/obj/item/weapon/flasks/plasma,/turf/station/floor,/area/MS) +"pB" = (/obj/item/weapon/card/data{name = "DNA-help"; function = "dna_seq"},/turf/station/floor,/area/MS) +"pC" = (/obj/machinery/sleeper,/turf/station/floor,/area/MS) +"pD" = (/obj/machinery/computer/sleep_console,/turf/station/floor,/area/MS) +"pE" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/syringe,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/s_tox,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/card/id{name = "Zach Licton's ID Card (1>1-0-0)"; access_level = 1; lab_access = 1; engine_access = 0; air_access = 0; registered = "Zach Licton"; assignment = "DNA Researcher"},/obj/item/weapon/pen,/turf/station/floor,/area/MS) +"pF" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/syringe,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/s_tox,/obj/item/weapon/bottle/antitoxins,/turf/station/floor,/area/MS) +"pG" = (/obj/machinery/freezer,/turf/station/floor,/area/MS) +"pH" = (/obj/machinery/pipes/flexipipe,/obj/item/weapon/tank/anesthetic,/turf/station/floor,/area/MS) +"pI" = (/obj/machinery/cryo_cell,/turf/station/floor,/area/MS) +"pJ" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/rack,/obj/item/weapon/clothing/under/white,/obj/item/weapon/clothing/mask/surgical,/obj/item/weapon/clothing/gloves/latex,/obj/item/weapon/clothing/shoes/white,/turf/station/floor,/area/MS) +"pK" = (/obj/machinery/door/firedoor,/obj/grille,/obj/window{dir = 4},/obj/window{dir = 8},/obj/window{dir = 1},/turf/station/floor,/area/MS) +"pL" = (/obj/item/weapon/card/data{name = "M-conv-H"; function = "worthless"; data = "SBSWAVVWFWVAZSFBS"; special = "human"},/obj/item/weapon/card/data{name = "H-conv-M"; function = "worthless"; data = "CDAFNSDHE"; special = "monkey"},/turf/station/floor,/area/MS) +"pM" = (/obj/item/weapon/crowbar,/turf/station/floor,/area/MS) +"pN" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/card/data{name = "C-Help"; function = "dna_help"},/turf/station/floor,/area/MS) +"pO" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/syringe,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/s_tox,/obj/item/weapon/bottle/antitoxins,/turf/station/floor,/area/MS) +"pP" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/healthanalyzer,/obj/item/weapon/bottle/r_ch_cough,/obj/item/weapon/bottle/r_epil,/turf/station/floor,/area/MS) +"pQ" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/mob/monkey,/turf/station/floor,/area/MS) +"pR" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/clothing/glasses/regular,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/clothing/mask/m_mask,/turf/station/floor,/area/MS) +"pS" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "UI-Replace"; function = "dna_replace"; special = "UI"},/obj/item/weapon/card/data{name = "UE-Replace"; function = "dna_replace"; special = "UE"},/obj/item/weapon/card/data{name = "SE-Replace"; function = "dna_replace"; special = "SE"},/obj/item/weapon/card/data{name = "SI-Replace"; function = "dna_replace"; special = "SI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Replace"},/turf/station/floor,/area/MS) +"pT" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "Disk-Display"; function = "disk_dis"; data = ""; special = null},/obj/item/weapon/card/data{name = "Disk-Erase"; function = "disk_erase"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Disk-Copy"; function = "disk_copy"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Clear"; function = "data_clear"; data = "12"; special = null},/obj/item/weapon/storage/disk_kit/disks2{name = "Disk-Controllers"},/turf/station/floor,/area/MS) +"pU" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "UE-Human"; data = "493DB249EB6D13236100A37000800AB71"},/obj/item/weapon/card/data{name = "SI-Human"; data = "5BDFE293BA5500F9FFFD500AAFFE"},/obj/item/weapon/card/data{name = "SE-Human"; data = "CDE375C9A6C25A7DBDA50EC05AC6CEB63"},/obj/item/weapon/storage/disk_kit/disks2{name = "Human DNA"},/turf/station/floor,/area/MS) +"pV" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "SE-Monkey"; data = "CDEAF5B90AADBC6BA8033DB0A7FD613FA"},/obj/item/weapon/card/data{name = "SI-Monkey"; data = "2B6696D2B127E5A4"},/obj/item/weapon/card/data{name = "UE-Monkey"; data = "C8FFFE7EC09D80AEDEDB9A5A0B4085B61"},/obj/item/weapon/storage/disk_kit/disks2{name = "Monkey DNA"},/turf/station/floor,/area/MS) +"pW" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "SE-Add"; function = "dna_add"; special = "SE"},/obj/item/weapon/card/data{name = "SI-Add"; function = "dna_add"; special = "SI"},/obj/item/weapon/card/data{name = "UE-Add"; function = "dna_add"; special = "UE"},/obj/item/weapon/card/data{name = "UI-Add"; function = "dna_add"; special = "UI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Add"},/turf/station/floor,/area/MS) +"pX" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "UE-Trunicate"; function = "dna_trun"; data = "32"; special = "UE"},/obj/item/weapon/card/data{name = "SI-Trunicate"; function = "dna_trun"; data = "16"; special = "SI"},/obj/item/weapon/card/data{name = "SE-Trunicate"; function = "dna_trun"; data = "32"; special = "SE"},/obj/item/weapon/card/data{name = "UI-Trunicate"; function = "dna_trun"; data = "12"; special = "UI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Trunicate"},/turf/station/floor,/area/MS) +"pY" = (/obj/sp_start{name = "aza"; desc = "Med Sat"},/turf/station/floor,/area/MS) +"pZ" = (/obj/sp_start{name = "zjm7891"; desc = "Researcher on Med. Sat."; special = null},/turf/station/floor,/area/MS) +"qa" = (/obj/item/weapon/radio/beacon,/obj/sp_start{name = "androiddata"; desc = "Researcher on Med. Sat."},/turf/station/floor,/area/MS) +"qb" = (/obj/machinery/pipes/flexipipe,/turf/station/floor,/area/MS) +"qc" = (/obj/sp_start{name = "exadv1"; desc = "Researcher on Med. Sat."; special = null},/turf/station/floor,/area/MS) +"qd" = (/obj/sp_start{name = "ryanfs"; desc = "Researcher on Med. Sat."; special = null},/turf/station/floor,/area/MS) +"qe" = (/obj/sp_start{name = "murrawhip"; desc = "Med Sat"},/turf/station/floor,/area/MS) +"qf" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/storage/toolbox,/obj/item/weapon/crowbar,/turf/station/floor,/area/MS) +"qg" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/MS) +"qh" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/storage/firstaid/toxin,/turf/station/floor,/area/MS) +"qi" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/storage/firstaid/fire,/turf/station/floor,/area/MS) +"qj" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/bottle/s_tox,/turf/station/floor,/area/MS) +"qk" = (/obj/sp_start{name = "androiddata"; desc = "Secret Loc"},/turf/station/floor,/area) +"ql" = (/obj/machinery/door/airlock,/turf/station/floor,/area) +"qm" = (/obj/item/weapon/radio/beacon{freq = 144.3},/turf/station/floor,/area) +"qn" = (/obj/item/weapon/c_tube{desc = "It's a magical cardboard tube!"},/turf/station/floor,/area) +"qo" = (/turf/station/wall,/area/supply_station) +"qp" = (/obj/item/weapon/storage/handcuff_kit,/obj/item/weapon/storage/handcuff_kit,/obj/item/weapon/storage/handcuff_kit,/obj/item/weapon/storage/handcuff_kit,/obj/item/weapon/storage/handcuff_kit,/turf/station/floor,/area/supply_station) +"qq" = (/obj/item/weapon/storage/flashbang_kit,/obj/item/weapon/storage/flashbang_kit,/obj/item/weapon/storage/flashbang_kit,/obj/item/weapon/storage/flashbang_kit,/obj/item/weapon/storage/flashbang_kit,/turf/station/floor,/area/supply_station) +"qr" = (/obj/rack,/obj/item/weapon/clothing/suit/swat_suit,/obj/item/weapon/clothing/head/swat_hel,/obj/item/weapon/clothing/shoes/swat,/obj/item/weapon/clothing/gloves/swat,/obj/item/weapon/gun/energy/taser_gun,/obj/item/weapon/clothing/mask/robot/swat,/obj/item/weapon/clothing/under/black,/obj/item/weapon/clothing/glasses/thermal,/turf/station/floor,/area/supply_station) +"qs" = (/turf/station/floor,/area/supply_station) +"qt" = (/obj/item/weapon/storage/backpack,/turf/station/floor,/area/supply_station) +"qu" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/supply_station) +"qv" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/supply_station) +"qw" = (/obj/machinery/atmoalter/canister/n2canister,/turf/station/floor,/area/supply_station) +"qx" = (/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/supply_station) +"qy" = (/obj/bedsheetbin,/turf/station/floor,/area/supply_station) +"qz" = (/obj/item/weapon/storage/trackimp_kit,/turf/station/floor,/area/supply_station) +"qA" = (/obj/item/weapon/paper_bin,/turf/station/floor,/area/supply_station) +"qB" = (/obj/machinery/firealarm{pixel_y = 32},/turf/station/floor,/area/supply_station) +"qC" = (/obj/watertank,/turf/station/floor,/area/supply_station) +"qD" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 4; r_engine = 0; r_access = 4; r_lab = 4},/turf/station/floor,/area/supply_station) +"qE" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 8; r_engine = 0; r_access = 4; r_lab = 4},/turf/station/floor,/area/supply_station) +"qF" = (/obj/closet/l3closet,/turf/station/floor,/area/supply_station) +"qG" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area/supply_station) +"qH" = (/obj/item/weapon/storage/toolbox,/obj/item/weapon/storage/backpack,/obj/item/weapon/clothing/glasses/sunglasses,/obj/item/weapon/clothing/ears/earmuffs,/obj/item/weapon/crowbar,/turf/station/floor,/area/supply_station) +"qI" = (/obj/item/weapon/tile,/obj/item/weapon/rods,/turf/station/floor,/area/supply_station) +"qJ" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/clothing/mask/surgical,/obj/item/weapon/clothing/mask/surgical,/obj/item/weapon/clothing/mask/surgical,/obj/item/weapon/clothing/mask/m_mask,/obj/item/weapon/clothing/mask/m_mask,/obj/item/weapon/clothing/mask/m_mask,/obj/item/weapon/radio/electropack,/obj/item/weapon/radio/electropack,/obj/item/weapon/crowbar,/turf/station/floor,/area/supply_station) +"qK" = (/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/floor,/area/supply_station) +"qL" = (/obj/machinery/firealarm{pixel_x = 32},/turf/station/floor,/area/supply_station) +"qM" = (/obj/item/weapon/flasks/coolant,/obj/item/weapon/flasks/oxygen,/obj/item/weapon/flasks/plasma,/turf/station/floor,/area/supply_station) +"qN" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/infra,/obj/item/weapon/infra,/obj/item/weapon/infra_sensor,/obj/item/weapon/locator,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/obj/item/weapon/timer,/turf/station/floor,/area/supply_station) +"qO" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/infra,/obj/item/weapon/infra,/obj/item/weapon/infra_sensor,/obj/item/weapon/locator,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/obj/item/weapon/timer,/turf/station/floor,/area/supply_station) +"qP" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/infra,/obj/item/weapon/infra,/obj/item/weapon/infra_sensor,/obj/item/weapon/locator,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/obj/item/weapon/timer,/turf/station/floor,/area/supply_station) +"qQ" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/clothing/mask/surgical,/obj/item/weapon/clothing/mask/surgical,/obj/item/weapon/clothing/mask/surgical,/obj/item/weapon/clothing/mask/m_mask,/obj/item/weapon/clothing/mask/m_mask,/obj/item/weapon/clothing/mask/m_mask,/obj/item/weapon/radio/electropack,/obj/item/weapon/radio/electropack,/obj/item/weapon/crowbar,/turf/station/floor,/area/supply_station) +"qR" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/supply_station) +"qS" = (/obj/machinery/atmoalter/canister/anesthcanister,/turf/station/floor,/area/supply_station) +"qT" = (/obj/item/weapon/table_parts,/obj/item/weapon/rack_parts,/turf/station/floor,/area/supply_station) +"qU" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/clipboard,/obj/item/weapon/clipboard,/obj/item/weapon/clipboard,/obj/item/weapon/pen,/obj/item/weapon/pen,/obj/item/weapon/pen,/turf/station/floor,/area/supply_station) +"qV" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/storage/disk_kit,/obj/item/weapon/storage/id_kit,/turf/station/floor,/area/supply_station) +"qW" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/storage/gl_kit,/obj/item/weapon/storage/lglo_kit,/obj/item/weapon/storage/stma_kit,/turf/station/floor,/area/supply_station) +"qX" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/head/helmet,/obj/item/weapon/clothing/suit/armor,/obj/item/weapon/flash,/obj/item/weapon/crowbar,/turf/station/floor,/area/supply_station) +"qY" = (/obj/machinery/dispenser,/turf/station/floor,/area/supply_station) +"qZ" = (/obj/weldfueltank,/turf/station/floor,/area/supply_station) +"ra" = (/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/toxin,/turf/station/floor,/area/supply_station) +"rb" = (/obj/table,/obj/item/weapon/storage/firstaid/syringes,/obj/item/weapon/bottle/toxins,/obj/item/weapon/bottle/s_tox,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/r_epil,/obj/item/weapon/bottle/r_ch_cough,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/dropper,/turf/station/floor,/area/supply_station) +"rc" = (/obj/item/weapon/camera,/turf/station/floor,/area/supply_station) +"rd" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/head/helmet,/obj/item/weapon/clothing/suit/armor,/obj/item/weapon/flash,/obj/item/weapon/crowbar,/turf/station/floor,/area/supply_station) +"re" = (/obj/item/weapon/sheet/metal{amount = 5},/turf/station/floor,/area/supply_station) +"rf" = (/obj/machinery/door/firedoor,/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/supply_station) +"rg" = (/obj/move/wall,/turf/space,/area/vehicles/shuttle1) +"rh" = (/obj/move/floor,/obj/window,/obj/window{dir = 1},/obj/grille,/turf/space,/area/vehicles/shuttle1) +"ri" = (/obj/closet/emcloset,/turf/station/floor,/area/supply_station) +"rj" = (/obj/move/floor,/obj/window{dir = 1},/turf/space,/area/vehicles/shuttle1) +"rk" = (/obj/machinery/door/firedoor,/obj/machinery/door/window,/turf/station/floor,/area/supply_station) +"rl" = (/obj/move/floor,/obj/window{dir = 4},/obj/window{dir = 8},/obj/grille,/turf/space,/area/vehicles/shuttle1) +"rm" = (/obj/move/floor,/obj/window{dir = 8},/turf/space,/area/vehicles/shuttle1) +"rn" = (/obj/move/floor,/turf/space,/area/vehicles/shuttle1) +"ro" = (/obj/move/floor,/obj/window{dir = 4},/turf/space,/area/vehicles/shuttle1) +"rp" = (/obj/move/floor,/obj/window{dir = 4},/obj/grille,/turf/space,/area/vehicles/shuttle1) +"rq" = (/obj/item/weapon/sheet/glass,/obj/item/weapon/sheet/glass,/turf/station/floor,/area/supply_station) +"rr" = (/obj/move/floor,/obj/shuttle/door,/turf/space,/area/vehicles/shuttle1) +"rs" = (/obj/machinery/door/airlock,/turf/station/floor,/area/supply_station) +"rt" = (/obj/grille,/obj/window{dir = 8},/obj/window{dir = 4},/turf/station/floor{icon_state = "Floor2"},/area/supply_station) +"ru" = (/obj/machinery/computer/teleporter,/turf/station/floor,/area/supply_station) +"rv" = (/obj/machinery/teleport/station,/turf/station/floor,/area/supply_station) +"rw" = (/obj/machinery/teleport/hub,/turf/station/floor,/area/supply_station) +"rx" = (/obj/item/weapon/hand_tele,/turf/station/floor,/area/supply_station) +"ry" = (/obj/move/floor,/obj/machinery/connector{dir = 4},/obj/window{dir = 4},/obj/window,/obj/machinery/atmoalter/canister/oxygencanister,/turf/space,/area/vehicles/shuttle1) +"rz" = (/obj/move/floor,/obj/window{dir = 1},/obj/machinery/shuttle/engine/heater,/turf/space,/area/vehicles/shuttle1) +"rA" = (/obj/move/floor,/obj/machinery/connector{dir = 8},/obj/window{dir = 8},/obj/window,/obj/machinery/atmoalter/canister/poisoncanister,/turf/space,/area/vehicles/shuttle1) +"rB" = (/obj/move/floor,/obj/machinery/shuttle/engine/platform,/obj/machinery/pipes/high_capacity{icon_state = "6"; dir = 6; p_dir = 6},/turf/space,/area/vehicles/shuttle1) +"rC" = (/obj/move/floor,/obj/machinery/shuttle/engine/platform,/obj/machinery/shuttle/engine/router,/turf/space,/area/vehicles/shuttle1) +"rD" = (/obj/move/floor,/obj/machinery/shuttle/engine/platform,/obj/machinery/pipes/high_capacity{icon_state = "10"; dir = 10; p_dir = 10},/turf/space,/area/vehicles/shuttle1) +"rE" = (/obj/item/weapon/crowbar,/turf/station/floor,/area/supply_station) +"rF" = (/obj/machinery/computer/pod{name = "Mass Driver"; id = 50},/turf/station/floor,/area/supply_station) +"rG" = (/obj/machinery/mass_driver{dir = 4; id = 50},/obj/machinery/recon{dir = 4},/turf/station/floor,/area/supply_station) +"rH" = (/obj/machinery/door/poddoor{id = 50},/turf/station/floor,/area/supply_station) +"rI" = (/obj/move/wall{icon_state = ""},/obj/machinery/shuttle/engine/platform{dir = 5},/obj/machinery/shuttle/engine/propulsion/burst/left,/turf/space,/area/vehicles/shuttle1) +"rJ" = (/obj/move/wall{icon_state = ""},/obj/machinery/shuttle/engine/platform{dir = 1},/obj/machinery/shuttle/engine/propulsion,/turf/space,/area/vehicles/shuttle1) +"rK" = (/obj/move/wall{icon_state = ""},/obj/machinery/shuttle/engine/platform{dir = 9},/obj/machinery/shuttle/engine/propulsion/burst/right,/turf/space,/area/vehicles/shuttle1) +"rL" = (/turf/station/command/wall{icon_state = "CCWall2"},/area) +"rM" = (/obj/grille,/obj/window,/obj/window{dir = 1},/turf/station/command/floor/other{icon_state = "Floor2"},/area) +"rN" = (/obj/begin,/turf/station/command/floor/other{icon_state = "Floor2"},/area) +"rO" = (/obj/machinery/hologram_proj,/turf/station/command/floor/other{icon_state = "Floor2"},/area) +"rP" = (/turf/station/command/floor/other{icon_state = "Floor2"},/area) +"rQ" = (/turf/station/command/floor/other{icon_state = "Floor2"},/area/start) +"rR" = (/obj/machinery/computer/hologram_comp,/turf/station/command/floor/other{icon_state = "Floor2"},/area) +"rS" = (/obj/item/weapon/wrapping_paper,/turf/station/command/floor/other{icon_state = "Floor2"},/area/start) +"rT" = (/obj/machinery/computer/engine,/turf/station/command/floor/other{icon_state = "Floor2"},/area/start) +"rU" = (/obj/grille,/obj/window,/obj/window{dir = 1},/turf/station/floor,/area/supply_station) +"rV" = (/obj/move/wall,/turf/space,/area/shuttle) +"rW" = (/obj/move/floor,/obj/window{dir = 1},/obj/window,/obj/grille,/turf/space,/area/shuttle) +"rX" = (/obj/move/floor,/obj/shuttle/door,/turf/space,/area/shuttle) +"rY" = (/obj/move/floor,/obj/machinery/sleeper,/turf/space,/area/shuttle) +"rZ" = (/obj/move/floor,/obj/machinery/computer/sleep_console,/turf/space,/area/shuttle) +"sa" = (/obj/move/floor,/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/space,/area/shuttle) +"sb" = (/obj/move/floor,/obj/move/wall,/turf/space,/area/shuttle) +"sc" = (/obj/move/floor,/obj/window{dir = 1},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/space,/area/shuttle) +"sd" = (/obj/move/floor,/obj/rack,/obj/item/weapon/tank/oxygentank,/obj/item/weapon/clothing/suit/firesuit,/obj/item/weapon/clothing/mask/gasmask,/turf/space,/area/shuttle) +"se" = (/obj/move/floor,/obj/rack,/obj/item/weapon/tank/oxygentank,/obj/item/weapon/clothing/suit/firesuit,/obj/item/weapon/clothing/mask/gasmask,/obj/window{dir = 4},/turf/space,/area/shuttle) +"sf" = (/obj/move/floor,/turf/space,/area/shuttle) +"sg" = (/obj/move/floor,/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/space,/area/shuttle) +"sh" = (/obj/move/floor,/obj/table,/obj/item/weapon/storage/firstaid/regular,/turf/space,/area/shuttle) +"si" = (/obj/move/floor,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/space,/area/shuttle) +"sj" = (/obj/move/floor,/obj/machinery/door/window,/turf/space,/area/shuttle) +"sk" = (/obj/move/floor,/obj/stool/chair{dir = 4},/turf/space,/area/shuttle) +"sl" = (/obj/move/floor,/obj/table,/obj/window{dir = 4},/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/syringe,/turf/space,/area/shuttle) +"sm" = (/obj/move/floor,/obj/window{dir = 4},/obj/window{dir = 8},/obj/grille,/turf/space,/area/shuttle) +"sn" = (/obj/move/floor,/obj/window{dir = 4},/turf/space,/area/shuttle) +"so" = (/obj/move/floor,/obj/machinery/computer/shuttle,/obj/window{dir = 4},/turf/space,/area/shuttle) +"sp" = (/obj/move/floor,/obj/machinery/door/window{dir = 1},/turf/space,/area/shuttle) +"sq" = (/obj/move/floor,/obj/table,/obj/window{dir = 4},/obj/item/weapon/radio,/turf/space,/area/shuttle) +"sr" = (/obj/move/floor,/obj/window,/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/space,/area/shuttle) +"ss" = (/obj/move/floor,/obj/window,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/window{dir = 4},/turf/space,/area/shuttle) +"st" = (/obj/move/floor,/obj/window,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/space,/area/shuttle) +"su" = (/turf/station/shuttle/wall,/area) +"sv" = (/obj/grille,/obj/window,/obj/window{dir = 1},/turf/station/shuttle/floor,/area) +"sw" = (/obj/move/floor,/obj/shuttle/door,/turf/station/shuttle/floor,/area) +"sx" = (/obj/machinery/sleeper,/turf/station/shuttle/floor,/area) +"sy" = (/obj/machinery/computer/sleep_console,/turf/station/shuttle/floor,/area) +"sz" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/shuttle/floor,/area) +"sA" = (/obj/window{dir = 1},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/shuttle/floor,/area) +"sB" = (/obj/rack,/obj/item/weapon/tank/oxygentank,/obj/item/weapon/clothing/suit/firesuit,/obj/item/weapon/clothing/mask/gasmask,/turf/station/shuttle/floor,/area) +"sC" = (/turf/station/shuttle/floor,/area) +"sD" = (/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/shuttle/floor,/area) +"sE" = (/obj/table,/obj/item/weapon/storage/firstaid/regular,/turf/station/shuttle/floor,/area) +"sF" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/shuttle/floor,/area) +"sG" = (/obj/machinery/door/window,/turf/station/shuttle/floor,/area) +"sH" = (/obj/stool/chair{dir = 4},/turf/station/shuttle/floor,/area) +"sI" = (/obj/table,/obj/item/weapon/syringe,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/bottle/rejuvenators,/obj/window{dir = 4},/turf/station/shuttle/floor,/area) +"sJ" = (/obj/window{dir = 4},/obj/window{dir = 8},/obj/grille,/turf/station/shuttle/floor,/area) +"sK" = (/obj/grille,/obj/window{dir = 4},/obj/window{dir = 8},/turf/station/shuttle/floor,/area) +"sL" = (/obj/window{dir = 4},/turf/station/shuttle/floor,/area) +"sM" = (/obj/window{dir = 4},/obj/item/weapon/a_gift,/turf/station/shuttle/floor,/area) +"sN" = (/obj/machinery/door/window{dir = 1},/turf/station/shuttle/floor,/area) +"sO" = (/obj/table,/obj/item/weapon/radio,/obj/window{dir = 4},/turf/station/shuttle/floor,/area) +"sP" = (/obj/window,/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/shuttle/floor,/area) +"sQ" = (/obj/window,/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/shuttle/floor,/area) +"sR" = (/obj/window,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/shuttle/floor,/area) +"sS" = (/obj/secloset/medical1,/turf/station/floor,/area/PS13) +"sT" = (/obj/secloset/medical2,/turf/station/floor,/area/PS13) +"sU" = (/obj/secloset/animal,/turf/station/floor,/area/PS13) +"sV" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/PS13) +"sW" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/PS13) +"sX" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/storage/firstaid/toxin,/turf/station/floor,/area/PS13) +"sY" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/healthanalyzer,/obj/item/weapon/dropper,/turf/station/floor,/area/PS13) +"sZ" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/syringe,/obj/item/weapon/pill_canister/Tourette,/obj/item/weapon/pill_canister/cough,/obj/item/weapon/pill_canister/epilepsy,/turf/station/floor,/area/PS13) +"ta" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/storage/firstaid/syringes,/turf/station/floor,/area/PS13) +"tb" = (/turf/station/floor,/area/PS13) +"tc" = (/turf/station/floor{icon_state = "Floor2"},/area/PS13) +"td" = (/obj/stool/chair,/turf/station/floor,/area/PS13) +"te" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/PS13) +"tf" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/PS13) +"tg" = (/obj/machinery/door/firedoor,/obj/grille,/obj/window{dir = 4},/obj/window{dir = 8},/obj/window{dir = 1},/turf/station/floor,/area/PS13) +"th" = (/obj/morgue,/turf/station/floor,/area/PS13) +"ti" = (/obj/machinery/sleeper,/turf/station/floor,/area/PS13) +"tj" = (/obj/machinery/computer/sleep_console,/turf/station/floor{icon_state = "Floor2"},/area/PS13) +"tk" = (/obj/stool/chair{dir = 4},/turf/station/floor,/area/PS13) +"tl" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/clipboard,/obj/item/weapon/pen,/turf/station/floor,/area/PS13) +"tm" = (/obj/machinery/camera{dir = 4; network = "PS13"; c_tag = "Infirmary"},/turf/station/floor,/area/PS13) +"tn" = (/obj/start{name = "Prison Doctor"},/turf/station/floor{icon_state = "Floor2"},/area/PS13) +"to" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/paper_bin,/turf/station/floor,/area/PS13) +"tp" = (/obj/machinery/computer/sleep_console,/turf/station/floor,/area/PS13) +"tq" = (/obj/table{icon_state = "sides"; dir = 8},/obj/machinery/firealarm{pixel_x = 32},/turf/station/floor,/area/PS13) +"tr" = (/obj/table{icon_state = "corners"; dir = 9},/turf/station/floor,/area/PS13) +"ts" = (/obj/table{icon_state = "corners"; dir = 5},/turf/station/floor,/area/PS13) +"tt" = (/obj/stool/chair{dir = 8},/turf/station/floor,/area/PS13) +"tu" = (/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/PS13) +"tv" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/storage/stma_kit,/turf/station/floor,/area/PS13) +"tw" = (/obj/table{icon_state = "corners"; dir = 10},/turf/station/floor,/area/PS13) +"tx" = (/obj/table{icon_state = "corners"; dir = 6},/turf/station/floor,/area/PS13) +"ty" = (/obj/stool/bed,/obj/item/weapon/bedsheet,/turf/station/floor,/area/PS13) +"tz" = (/obj/closet/wardrobe/white,/turf/station/floor,/area/PS13) +"tA" = (/obj/item/weapon/storage/trackimp_kit,/turf/station/floor,/area/PS13) +"tB" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/storage/lglo_kit,/turf/station/floor,/area/PS13) +"tC" = (/obj/item/weapon/crowbar,/turf/station/floor,/area/PS13) +"tD" = (/obj/machinery/camera{dir = 4; network = "PS13"; c_tag = "Recreation Area (West)"},/turf/station/floor,/area/PS13) +"tE" = (/obj/stool/chair{dir = 1},/turf/station/floor,/area/PS13) +"tF" = (/obj/machinery/camera{dir = 8; network = "PS13"; c_tag = "Recreation Area (East)"},/turf/station/floor,/area/PS13) +"tG" = (/obj/machinery/door/firedoor,/obj/grille,/obj/window{dir = 8},/obj/window{dir = 1},/turf/station/floor,/area/PS13) +"tH" = (/obj/machinery/door/firedoor,/obj/grille,/obj/window,/obj/window{dir = 1},/turf/station/floor,/area/PS13) +"tI" = (/obj/machinery/door/firedoor,/obj/grille,/obj/window,/obj/window{dir = 1},/obj/window{dir = 4},/turf/station/floor,/area/PS13) +"tJ" = (/obj/machinery/door/firedoor,/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/PS13) +"tK" = (/obj/machinery/door/firedoor,/obj/machinery/door/window{dir = 8},/turf/station/floor,/area/PS13) +"tL" = (/obj/machinery/door/firedoor,/obj/grille,/obj/window,/obj/window{dir = 1},/obj/window{dir = 8},/turf/station/floor,/area/PS13) +"tM" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/paper_bin,/turf/station/floor,/area/PS13) +"tN" = (/obj/machinery/door/firedoor,/obj/grille,/obj/window{dir = 4},/obj/window{dir = 8},/obj/window,/turf/station/floor,/area/PS13) +"tO" = (/obj/machinery/door/firedoor,/obj/grille,/obj/window{dir = 8},/obj/window{dir = 4},/turf/station/floor,/area/PS13) +"tP" = (/obj/secloset/security1,/turf/station/floor,/area/PS13) +"tQ" = (/obj/machinery/computer/security{name = "security- PS13"; network = "PS13"},/turf/station/floor,/area/PS13) +"tR" = (/obj/secloset/security2,/obj/machinery/camera{network = "PS13"; c_tag = "Security Office"},/turf/station/floor,/area/PS13) +"tS" = (/obj/secloset/security2,/turf/station/floor,/area/PS13) +"tT" = (/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/storage/toolbox,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/turf/station/floor,/area/PS13) +"tU" = (/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/turf/station/floor,/area/PS13) +"tV" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/PS13) +"tW" = (/obj/table{icon_state = "sides"; dir = 4},/obj/item/weapon/pen,/turf/station/floor,/area/PS13) +"tX" = (/obj/machinery/door/firedoor,/obj/machinery/door/window{icon = 'security.dmi'; dir = 2; r_engine = 0; r_access = 3; r_lab = 0},/turf/station/floor,/area/PS13) +"tY" = (/obj/machinery/firealarm{pixel_x = 32},/turf/station/floor,/area/PS13) +"tZ" = (/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/turf/station/floor,/area/PS13) +"ua" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/dropper,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/s_tox,/turf/station/floor,/area/PS13) +"ub" = (/obj/table{icon_state = "sides"; dir = 4},/obj/item/weapon/clipboard,/turf/station/floor,/area/PS13) +"uc" = (/obj/machinery/door/firedoor,/obj/machinery/door/window{icon = 'security.dmi'; dir = 1; r_engine = 0; r_access = 3; r_lab = 0},/turf/station/floor,/area/PS13) +"ud" = (/obj/machinery/door/firedoor,/obj/grille,/obj/window{dir = 8},/obj/window{dir = 4},/obj/window,/turf/station/floor,/area/PS13) +"ue" = (/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/machinery/firealarm{pixel_x = 32},/turf/station/floor,/area/PS13) +"uf" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/handcuffs,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/ears/earmuffs,/turf/station/floor,/area/PS13) +"ug" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/wrapping_paper,/obj/item/weapon/wirecutters,/turf/station/floor,/area/PS13) +"uh" = (/obj/start{name = "Prison Security"},/turf/station/floor,/area/PS13) +"ui" = (/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/turf/station/floor,/area/PS13) +"uj" = (/obj/table{icon_state = "alone"},/obj/item/weapon/wrapping_paper,/obj/item/weapon/wirecutters,/turf/station/floor,/area/PS13) +"uk" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/PS13) +"ul" = (/obj/table{icon_state = "sides"; dir = 1},/turf/station/floor,/area/PS13) +"um" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/pen,/turf/station/floor,/area/PS13) +"un" = (/obj/machinery/door/firedoor,/obj/grille,/obj/window{dir = 4},/obj/window{dir = 8},/turf/station/floor,/area/PS13) +"uo" = (/obj/machinery/door/firedoor,/obj/grille,/obj/window{dir = 8},/obj/window{dir = 4},/obj/window{dir = 1},/turf/station/floor,/area/PS13) +"up" = (/obj/item/weapon/clipboard,/obj/item/weapon/clipboard,/turf/station/floor,/area/PS13) +"uq" = (/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/turf/station/floor,/area/PS13) +"ur" = (/obj/bedsheetbin,/turf/station/floor,/area/PS13) +"us" = (/obj/secloset/personal,/turf/station/floor,/area/PS13) +"ut" = (/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/station/floor,/area/PS13) +"uu" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/PS13) +"uv" = (/obj/closet,/turf/station/floor,/area/PS13) +"uw" = (/obj/item/weapon/bedsheet,/turf/station/floor,/area/PS13) +"ux" = (/obj/stool/bed,/turf/station/floor,/area/PS13) +"uy" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/paper_bin,/turf/station/floor,/area/PS13) +"uz" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/pen,/turf/station/floor,/area/PS13) +"uA" = (/obj/machinery/sec_lock{pixel_x = -32; a_type = 1},/turf/station/floor,/area/PS13) +"uB" = (/obj/machinery/sec_lock{pixel_x = 32},/turf/station/floor,/area/PS13) +"uC" = (/obj/closet/wardrobe/orange,/turf/station/floor,/area/PS13) +"uD" = (/obj/table{icon_state = "sides"; dir = 8},/turf/station/floor,/area/PS13) +"uE" = (/obj/table{icon_state = "sides"; dir = 4},/turf/station/floor,/area/PS13) +"uF" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 2; r_engine = 0; r_access = 4; r_lab = 4},/turf/station/floor,/area/PS13) +"uG" = (/obj/machinery/door/firedoor,/obj/machinery/door/window{icon = 'security.dmi'; dir = 2; r_engine = 0; r_access = 4; r_lab = 4},/turf/station/floor,/area/PS13) +"uH" = (/obj/table{icon_state = "alone"},/turf/station/floor,/area/PS13) +"uI" = (/obj/item/weapon/screwdriver,/obj/item/weapon/wirecutters,/obj/stool/bed,/obj/item/weapon/bedsheet,/obj/item/weapon/wrench{layer = 1},/turf/station/floor,/area/PS13) +"uJ" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 2; r_engine = 0; r_access = 4; r_lab = 4},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/PS13) +"uK" = (/obj/machinery/door/airlock{r_access = 3},/turf/station/floor,/area/PS13) +"uL" = (/obj/machinery/camera{dir = 4; network = "PS13"; c_tag = "Solitary Cells"},/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/PS13) +"uM" = (/obj/grille,/turf/space,/area) +"uN" = (/obj/machinery/computer/data/weapon/log,/turf/station/floor,/area/WS) +"uO" = (/turf/station/floor,/area/WS) +"uP" = (/turf/station/floor/grid,/area/WS) +"uQ" = (/obj/machinery/computer/teleporter,/turf/station/floor,/area/WS) +"uR" = (/obj/machinery/teleport/station,/turf/station/floor,/area/WS) +"uS" = (/obj/machinery/teleport/hub,/turf/station/floor,/area/WS) +"uT" = (/obj/machinery/door/airlock,/turf/station/floor,/area/WS) +"uU" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/door/firedoor,/turf/station/floor,/area/WS) +"uV" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/WS) +"uW" = (/obj/item/weapon/radio/beacon,/turf/station/floor,/area/WS) +"uX" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/WS) +"uY" = (/obj/machinery/computer/data/weapon/info,/turf/station/floor,/area/WS) +"uZ" = (/obj/machinery/door/firedoor,/obj/grille,/obj/window{dir = 1},/obj/window,/turf/station/floor,/area/PS13) +"va" = (/obj/machinery/door/firedoor,/obj/grille,/obj/window{dir = 1},/obj/window,/obj/window{dir = 4},/turf/station/floor,/area/PS13) +"vb" = (/obj/machinery/door/firedoor,/obj/machinery/door/window{icon = 'security.dmi'; dir = 4; r_engine = 0; r_access = 3; r_lab = 0},/turf/station/floor,/area/PS13) +"vc" = (/obj/machinery/door/firedoor,/obj/machinery/door/window{icon = 'security.dmi'; dir = 8; r_engine = 0; r_access = 3; r_lab = 0},/turf/station/floor,/area/PS13) +"vd" = (/obj/machinery/door/firedoor,/obj/grille,/obj/window{dir = 1},/obj/window,/obj/window{dir = 8},/turf/station/floor,/area/PS13) +"ve" = (/obj/table{icon_state = "corners"; dir = 5},/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/PS13) +"vf" = (/obj/item/weapon/paper_bin,/turf/station/floor,/area/PS13) +"vg" = (/obj/closet/wardrobe,/turf/station/floor,/area/PS13) +"vh" = (/obj/closet/wardrobe/mixed,/turf/station/floor,/area/PS13) +"vi" = (/obj/table{icon_state = "sides"; dir = 2},/turf/station/floor,/area/PS13) +"vj" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/radio{suffix = "\[2]"; freq = 144.9},/turf/station/floor,/area/PS13) +"vk" = (/obj/machinery/door/firedoor,/obj/table{icon_state = "sides"; dir = 8},/turf/station/floor,/area/PS13) +"vl" = (/obj/machinery/camera{dir = 4; network = "PS13"; c_tag = "Courtroom"},/turf/station/floor,/area/PS13) +"vm" = (/obj/machinery/door/firedoor,/obj/window{dir = 10},/turf/station/floor,/area/PS13) +"vn" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/turf/station/floor,/area/PS13) +"vo" = (/obj/window{dir = 8},/turf/station/floor,/area/PS13) +"vp" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/turf/station/floor,/area/PS13) +"vq" = (/obj/table{icon_state = "corners"; dir = 9},/obj/window{dir = 8},/turf/station/floor,/area/PS13) +"vr" = (/obj/item/weapon/storage/toolbox,/obj/item/weapon/crowbar,/turf/station/floor,/area/PS13) +"vs" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/pen,/turf/station/floor,/area/PS13) +"vt" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/paper_bin,/turf/station/floor,/area/PS13) +"vu" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/paper,/turf/station/floor,/area/PS13) +"vv" = (/obj/machinery/camera{dir = 4; network = "PS13"; c_tag = "Witness Prep Area"},/turf/station/floor,/area/PS13) +"vw" = (/obj/start{name = "Prison Warden"},/turf/station/floor,/area/PS13) +"vx" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/clipboard,/turf/station/floor,/area/PS13) +"vy" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/paper/sop,/turf/station/floor,/area/PS13) +"vz" = (/obj/machinery/camera{dir = 8; network = "PS13"; c_tag = "Warden's Office"},/turf/station/floor,/area/PS13) +"vA" = (/obj/landmark/alterations{name = "prison shuttle"},/turf/station/floor,/area/PS13) +"vB" = (/obj/table,/obj/machinery/recharger,/turf/station/floor,/area/PS13) +"vC" = (/obj/rack,/obj/item/weapon/clothing/under/green,/obj/item/weapon/clothing/suit/armor,/obj/item/weapon/clothing/shoes/black,/obj/item/weapon/clothing/head/helmet,/turf/station/floor,/area/PS13) +"vD" = (/obj/machinery/door/firedoor,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area) +"vE" = (/obj/move/wall{icon_state = "wall2"},/turf/space,/area/shuttle_prison) +"vF" = (/obj/move/floor{icon_state = "floor2"},/obj/window{dir = 1},/obj/window,/obj/grille,/turf/space,/area/shuttle_prison) +"vG" = (/obj/move/floor,/obj/shuttle/door,/turf/space,/area/shuttle_prison) +"vH" = (/turf/space,/area/shuttle_prison) +"vI" = (/obj/move/floor{icon_state = "floor2"},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/space,/area/shuttle_prison) +"vJ" = (/obj/move/floor{icon_state = "floor2"},/obj/stool/chair,/turf/space,/area/shuttle_prison) +"vK" = (/obj/move/floor{icon_state = "floor2"},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/grille,/turf/space,/area/shuttle_prison) +"vL" = (/obj/move/floor{icon_state = "floor2"},/turf/space,/area/shuttle_prison) +"vM" = (/obj/move/floor{icon_state = "floor2"},/obj/window{dir = 1},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/space,/area/shuttle_prison) +"vN" = (/obj/move/floor{icon_state = "floor2"},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/space,/area/shuttle_prison) +"vO" = (/obj/move/floor{icon_state = "floor2"},/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/space,/area/shuttle_prison) +"vP" = (/obj/move/floor{icon_state = "floor2"},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/table,/obj/item/weapon/storage/firstaid/regular,/turf/space,/area/shuttle_prison) +"vQ" = (/obj/move/floor{icon_state = "floor2"},/obj/window{dir = 1},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/space,/area/shuttle_prison) +"vR" = (/obj/move/floor{icon_state = "floor2"},/obj/shuttle/door,/turf/space,/area/shuttle_prison) +"vS" = (/obj/move/floor{icon_state = "floor2"},/obj/grille,/turf/space,/area/shuttle_prison) +"vT" = (/obj/move/floor{icon_state = "floor2"},/obj/stool/chair{dir = 4},/turf/space,/area/shuttle_prison) +"vU" = (/obj/move/floor{icon_state = "floor2"},/obj/machinery/door/window,/turf/space,/area/shuttle_prison) +"vV" = (/obj/move/floor{icon_state = "floor2"},/obj/table,/obj/window{dir = 4},/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/syringe,/obj/item/weapon/bottle/s_tox,/turf/space,/area/shuttle_prison) +"vW" = (/obj/move/floor{icon_state = "floor2"},/obj/window{dir = 4},/obj/window{dir = 8},/obj/grille,/turf/space,/area/shuttle_prison) +"vX" = (/obj/move/floor{icon_state = "floor2"},/obj/window{dir = 4},/turf/space,/area/shuttle_prison) +"vY" = (/obj/move/floor{icon_state = "floor2"},/obj/window{dir = 4},/obj/machinery/computer/prison_shuttle,/turf/space,/area/shuttle_prison) +"vZ" = (/obj/move/floor{icon_state = "floor2"},/obj/machinery/door/window{dir = 1},/turf/space,/area/shuttle_prison) +"wa" = (/obj/move/floor{icon_state = "floor2"},/obj/table,/obj/window{dir = 4},/obj/item/weapon/radio,/obj/item/weapon/gun/energy/taser_gun,/turf/space,/area/shuttle_prison) +"wb" = (/obj/move/floor{icon_state = "floor2"},/obj/window,/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/space,/area/shuttle_prison) +"wc" = (/obj/move/floor{icon_state = "floor2"},/obj/window,/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/space,/area/shuttle_prison) +"wd" = (/obj/move/floor{icon_state = "floor2"},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/closet/wardrobe/orange,/turf/space,/area/shuttle_prison) +"we" = (/obj/move/floor{icon_state = "floor2"},/obj/window,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/space,/area/shuttle_prison) +"wf" = (/obj/grille,/obj/window{dir = 8},/obj/window{dir = 1},/turf/station/floor,/area) +"wg" = (/obj/grille,/obj/window{dir = 4},/obj/window{dir = 1},/turf/station/floor,/area) +"wh" = (/obj/grille,/obj/window{dir = 8},/obj/window{dir = 4},/turf/station/floor,/area) +"wi" = (/obj/item/weapon/extinguisher,/turf/station/floor,/area) +"wj" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area) +"wk" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area) +"wl" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/extinguisher,/obj/stool/bed,/turf/station/floor,/area) +"wm" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/bedsheetbin,/turf/station/floor,/area) +"wn" = (/obj/secloset/personal,/obj/window{dir = 8},/turf/station/floor,/area) +"wo" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/secloset/security1{allowed = "Prison Security,Prison Warden,Security Officer,Captain,Head of Personnel,Head of Research,Secret Base"},/turf/station/floor,/area) +"wp" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/secloset/highsec{allowed = "Captain,Head of Personnel,Head of Research,Secret Base"},/turf/station/floor,/area) +"wq" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/closet/l3closet,/turf/station/floor,/area) +"wr" = (/obj/closet/l3closet,/turf/station/floor,/area) +"ws" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/card/data{name = "UI-Replace"; function = "dna_replace"; special = "UI"},/obj/item/weapon/card/data{name = "UE-Replace"; function = "dna_replace"; special = "UE"},/obj/item/weapon/card/data{name = "SE-Replace"; function = "dna_replace"; special = "SE"},/obj/item/weapon/card/data{name = "SI-Replace"; function = "dna_replace"; special = "SI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Replace"},/turf/station/floor,/area) +"wt" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/card/data{name = "Disk-Display"; function = "disk_dis"; data = ""; special = null},/obj/item/weapon/card/data{name = "Disk-Erase"; function = "disk_erase"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Disk-Copy"; function = "disk_copy"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Clear"; function = "data_clear"; data = "12"; special = null},/obj/item/weapon/storage/disk_kit/disks2{name = "Disk-Controllers"},/turf/station/floor,/area) +"wu" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/card/data{name = "UE-Human"; data = "493DB249EB6D13236100A37000800AB71"},/obj/item/weapon/card/data{name = "SI-Human"; data = "5BDFE293BA5500F9FFFD500AAFFE"},/obj/item/weapon/card/data{name = "SE-Human"; data = "CDE375C9A6C25A7DBDA50EC05AC6CEB63"},/obj/item/weapon/storage/disk_kit/disks2{name = "Human DNA"},/turf/station/floor,/area) +"wv" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/card/data{name = "SE-Monkey"; data = "CDEAF5B90AADBC6BA8033DB0A7FD613FA"},/obj/item/weapon/card/data{name = "SI-Monkey"; data = "2B6696D2B127E5A4"},/obj/item/weapon/card/data{name = "UE-Monkey"; data = "C8FFFE7EC09D80AEDEDB9A5A0B4085B61"},/obj/item/weapon/storage/disk_kit/disks2{name = "Monkey DNA"},/turf/station/floor,/area) +"ww" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/card/data{name = "SE-Add"; function = "dna_add"; special = "SE"},/obj/item/weapon/card/data{name = "SI-Add"; function = "dna_add"; special = "SI"},/obj/item/weapon/card/data{name = "UE-Add"; function = "dna_add"; special = "UE"},/obj/item/weapon/card/data{name = "UI-Add"; function = "dna_add"; special = "UI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Add"},/turf/station/floor,/area) +"wx" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/card/data{name = "UE-Trunicate"; function = "dna_trun"; data = "32"; special = "UE"},/obj/item/weapon/card/data{name = "SI-Trunicate"; function = "dna_trun"; data = "16"; special = "SI"},/obj/item/weapon/card/data{name = "SE-Trunicate"; function = "dna_trun"; data = "32"; special = "SE"},/obj/item/weapon/card/data{name = "UI-Trunicate"; function = "dna_trun"; data = "12"; special = "UI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Trunicate"},/turf/station/floor,/area) +"wy" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/locator,/turf/station/floor,/area) +"wz" = (/obj/stool/bed,/turf/station/floor,/area) +"wA" = (/obj/item/weapon/paper_bin,/turf/station/floor,/area) +"wB" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/window{dir = 8},/turf/station/floor,/area) +"wC" = (/obj/item/weapon/storage/handcuff_kit,/turf/station/floor,/area) +"wD" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/storage/handcuff_kit,/turf/station/floor,/area) +"wE" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area) +"wF" = (/obj/machinery/door/window{dir = 8},/turf/station/floor,/area) +"wG" = (/obj/item/weapon/storage/disk_kit/disks,/turf/station/floor,/area) +"wH" = (/obj/item/weapon/card/data{name = "M-Mutate"; function = "data_mutate"; data = "14A"; special = ""},/obj/item/weapon/card/data{name = "S-Mutate"; function = "data_mutate"; data = "CDE"; special = ""},/obj/item/weapon/card/data{name = "A-Mutate"; function = "data_mutate"; data = "AEC"; special = ""},/turf/station/floor,/area) +"wI" = (/obj/item/weapon/card/data{name = "DNA-help"; function = "dna_seq"},/turf/station/floor,/area) +"wJ" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/computer/dna,/turf/station/floor,/area) +"wK" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/closet/wardrobe/mixed,/obj/window,/turf/station/floor,/area) +"wL" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/door/window{dir = 4},/turf/station/floor,/area) +"wM" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table,/obj/item/weapon/pen,/obj/window,/turf/station/floor,/area) +"wN" = (/obj/window{dir = 8},/turf/station/floor,/area) +"wO" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/clothing/mask/m_mask,/turf/station/floor,/area) +"wP" = (/obj/item/weapon/clothing/mask/m_mask,/turf/station/floor,/area) +"wQ" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/storage/backpack,/obj/item/weapon/storage/flashbang_kit,/turf/station/floor,/area) +"wR" = (/obj/item/weapon/storage/backpack,/obj/item/weapon/storage/flashbang_kit,/turf/station/floor,/area) +"wS" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/card/data{name = "SE-Scan"; function = "dna_scan"; special = "SE"},/obj/item/weapon/card/data{name = "SI-Scan"; function = "dna_scan"; special = "SI"},/obj/item/weapon/card/data{name = "UE-Scan"; function = "dna_scan"; special = "UE"},/obj/item/weapon/card/data{name = "UI-Scan"; function = "dna_scan"; special = "UI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Scan"},/turf/station/floor,/area) +"wT" = (/obj/item/weapon/infra_sensor,/turf/station/floor,/area) +"wU" = (/obj/item/weapon/wrapping_paper,/turf/station/floor,/area) +"wV" = (/obj/rack,/obj/item/weapon/clothing/suit/sp_suit,/obj/item/weapon/clothing/head/s_helmet,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/glasses/sunglasses,/obj/item/weapon/clothing/mask/gasmask,/obj/item/weapon/clothing/shoes/black,/obj/item/weapon/clothing/under/black,/obj/item/weapon/tank/jetpack,/obj/item/weapon/radio/headset,/turf/station/floor,/area) +"wW" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/rack,/obj/item/weapon/clothing/suit/sp_suit,/obj/item/weapon/clothing/head/s_helmet,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/glasses/sunglasses,/obj/item/weapon/clothing/mask/gasmask,/obj/item/weapon/clothing/shoes/black,/obj/item/weapon/clothing/under/black,/obj/item/weapon/tank/jetpack,/obj/item/weapon/radio/headset,/turf/station/floor,/area) +"wX" = (/obj/rack,/obj/item/weapon/clothing/suit/swat_suit,/obj/item/weapon/clothing/head/swat_hel,/obj/item/weapon/clothing/shoes/swat,/obj/item/weapon/clothing/gloves/swat,/obj/item/weapon/gun/energy/taser_gun,/obj/item/weapon/clothing/mask/robot/swat,/obj/item/weapon/clothing/under/black,/obj/item/weapon/clothing/glasses/thermal,/obj/item/weapon/radio/headset,/turf/station/floor,/area) +"wY" = (/obj/machinery/dna_scanner,/turf/station/floor,/area) +"wZ" = (/obj/machinery/scan_console,/turf/station/floor,/area) +"xa" = (/obj/item/weapon/card/data{name = "M-conv-H"; function = "worthless"; data = "SBSWAVVWFWVAZSFBS"; special = "human"},/obj/item/weapon/card/data{name = "H-conv-M"; function = "worthless"; data = "CDAFNSDHE"; special = "monkey"},/turf/station/floor,/area) +"xb" = (/obj/machinery/restruct,/turf/station/floor,/area) +"xc" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/card/data{name = "Data-Trunicate"; function = "data_trun"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Add"; function = "data_add"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Scramble"; function = "data_scramble"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Input"; function = "data_input"; data = "12"; special = null},/obj/item/weapon/storage/disk_kit/disks2{name = "Data-Controllers"},/turf/station/floor,/area) +"xd" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/dropper,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/pill_canister/epilepsy,/obj/item/weapon/pill_canister/cough,/turf/station/floor,/area) +"xe" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/clipboard,/obj/item/weapon/pen,/obj/item/weapon/m_pill/superpill,/turf/station/floor,/area) +"xf" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/syringe,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/pill_canister/Tourette,/turf/station/floor,/area) +"xg" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/syndicate_uplink,/turf/station/floor,/area) +"xh" = (/obj/machinery/recharger,/turf/station/floor,/area) +"xi" = (/obj/closet/wardrobe/white,/turf/station/floor,/area) +"xj" = (/obj/secloset/animal,/turf/station/floor,/area) +"xk" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/sleeper,/turf/station/floor,/area) +"xl" = (/obj/machinery/computer/sleep_console,/turf/station/floor,/area) +"xm" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/paper_bin,/turf/station/floor,/area) +"xn" = (/obj/machinery/door/window,/turf/station/floor,/area) +"xo" = (/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/turf/station/floor,/area) +"xp" = (/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/turf/station/floor,/area) +"xq" = (/obj/item/weapon/sheet/r_metal,/obj/item/weapon/sheet/r_metal,/turf/station/floor,/area) +"xr" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/clothing/suit/firesuit,/obj/item/weapon/clothing/suit/firesuit,/turf/station/floor,/area) +"xs" = (/obj/item/weapon/clothing/suit/straight_jacket,/turf/station/floor,/area) +"xt" = (/obj/item/weapon/clothing/glasses/meson,/obj/item/weapon/clothing/glasses/thermal,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/ears/earmuffs,/obj/item/weapon/clothing/ears/earmuffs,/turf/station/floor,/area) +"xu" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/clothing/glasses/meson,/obj/item/weapon/clothing/glasses/thermal,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/ears/earmuffs,/obj/item/weapon/clothing/ears/earmuffs,/turf/station/floor,/area) +"xv" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/dispenser,/turf/station/floor,/area) +"xw" = (/obj/item/weapon/extinguisher,/obj/machinery/atmoalter/canister/n2canister,/turf/station/floor,/area) +"xx" = (/obj/item/weapon/brutepack,/turf/station/floor,/area) +"xy" = (/obj/item/weapon/clothing/under/yellow,/obj/item/weapon/clothing/under/orange,/turf/station/floor,/area) +"xz" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/dispenser,/turf/station/floor,/area) +"xA" = (/obj/machinery/atmoalter/heater,/turf/station/floor,/area) +"xB" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/sleeper,/turf/station/floor,/area) +"xC" = (/obj/machinery/dispenser,/turf/station/floor,/area) +"xD" = (/obj/item/weapon/card/id{name = "Secret Base Locker Access"; access_level = 5; lab_access = 5; engine_access = 5; air_access = 5; registered = "Secret Base Use Only"; assignment = "Secret Base"},/turf/station/floor,/area) +"xE" = (/obj/secloset/security2{allowed = "Prison Security,Prison Warden,Forensic Technician,Security Officer,Captain,Head of Personnel,Head of Research,Secret Base"},/turf/station/floor,/area) +"xF" = (/obj/machinery/atmoalter/canister/n2canister,/turf/station/floor,/area) +"xG" = (/obj/item/weapon/flasks/coolant,/obj/item/weapon/flasks/oxygen,/obj/item/weapon/flasks/plasma,/turf/station/floor,/area) +"xH" = (/obj/item/weapon/ointment,/turf/station/floor,/area) +"xI" = (/obj/machinery/door/false_wall,/turf/station/floor,/area) +"xJ" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/computer/med_data,/turf/station/floor,/area) +"xK" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/sp_start{name = "exadv1"; desc = "Secret Base"; special = null},/turf/station/floor,/area) +"xL" = (/obj/sp_start{name = "aza"; desc = "Secret Base"},/turf/station/floor,/area) +"xM" = (/obj/sp_start{name = "soraku"; desc = "Secret Base"; special = null},/turf/station/floor,/area) +"xN" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area) +"xO" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/brutepack,/turf/station/floor,/area) +"xP" = (/obj/machinery/freezer,/turf/station/floor,/area) +"xQ" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/pipes/flexipipe,/turf/station/floor,/area) +"xR" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/cryo_cell,/turf/station/floor,/area) +"xS" = (/obj/item/weapon/disk/nuclear,/turf/station/floor,/area) +"xT" = (/obj/machinery/nuclearbomb{icon_state = "nuclearbomb1"; anchored = 1; extended = 1},/turf/station/floor,/area) +"xU" = (/obj/machinery/computer/communications,/turf/station/floor,/area) +"xV" = (/obj/sp_start{name = "epox"; desc = "Secret Base"; special = null},/turf/station/floor,/area) +"xW" = (/obj/item/weapon/radio/beacon,/turf/station/floor,/area) +"xX" = (/obj/sp_start{name = "murrawhip"; desc = "Secret Base"; special = null},/turf/station/floor,/area) +"xY" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area) +"xZ" = (/obj/item/weapon/storage/firstaid/syringes,/turf/station/floor,/area) +"ya" = (/obj/machinery/computer/security,/turf/station/floor,/area) +"yb" = (/obj/sp_start{name = "thiefjack"; desc = "Secret Base"; special = null},/turf/station/floor,/area) +"yc" = (/obj/sp_start{name = "expertadvisor"; desc = "Secret Base"; special = null},/turf/station/floor,/area) +"yd" = (/obj/grille,/obj/window{dir = 4},/obj/window{dir = 8},/turf/station/floor,/area) +"ye" = (/obj/machinery/computer/teleporter,/turf/station/floor,/area) +"yf" = (/obj/machinery/teleport/station,/turf/station/floor,/area) +"yg" = (/obj/machinery/teleport/hub,/turf/station/floor,/area) +"yh" = (/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/floor,/area) +"yi" = (/obj/machinery/atmoalter/canister/anesthcanister,/turf/station/floor,/area) +"yj" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/table,/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area) +"yk" = (/obj/item/weapon/radio,/turf/station/floor,/area) +"yl" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/ointment,/turf/station/floor,/area) +"ym" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/hand_tele,/turf/station/floor,/area) +"yn" = (/obj/table,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/bottle/rejuvenators,/turf/station/floor,/area) +"yo" = (/obj/grille,/obj/window{dir = 4},/obj/window{dir = 8},/obj/window,/turf/station/floor,/area) +"yp" = (/obj/item/weapon/storage/toolbox,/obj/item/weapon/crowbar,/turf/station/floor,/area) +"yq" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/storage/trackimp_kit,/turf/station/floor,/area) +"yr" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/bottle/r_epil,/obj/item/weapon/bottle/r_ch_cough,/turf/station/floor,/area) +"ys" = (/obj/machinery/atmoalter/siphs/fullairsiphon/port,/turf/station/floor,/area) +"yt" = (/obj/watertank,/turf/station/floor,/area) +"yu" = (/obj/weldfueltank,/turf/station/floor,/area) +"yv" = (/obj/secloset/medical1{allowed = "Medical Researcher,Prison Doctor,Medical Doctor,Captain,Head of Research,Secret Base"},/turf/station/floor,/area) +"yw" = (/obj/secloset/medical2{allowed = "Medical Researcher,Prison Doctor,Medical Doctor,Captain,Head of Research,Secret Base"},/turf/station/floor,/area) +"yx" = (/obj/table,/obj/item/weapon/healthanalyzer,/obj/item/weapon/syringe,/obj/item/weapon/bottle/antitoxins,/turf/station/floor,/area) +"yy" = (/obj/window,/obj/item/weapon/infra_sensor,/turf/station/floor,/area) +"yz" = (/obj/window,/obj/item/weapon/wrapping_paper,/turf/station/floor,/area) +"yA" = (/obj/machinery/computer/pod{id = "sb1"},/turf/station/floor,/area) +"yB" = (/obj/machinery/mass_driver{dir = 4; id = "sb1"},/obj/machinery/pod{dir = 4},/turf/station/engine/floor,/area) +"yC" = (/obj/machinery/door/poddoor{id = "sb1"},/turf/station/engine/floor,/area) +"yD" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/closet/wardrobe/mixed,/turf/station/floor,/area) +"yE" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table,/obj/item/weapon/pen,/turf/station/floor,/area) +"yF" = (/obj/machinery/computer/pod{id = "sb2"},/turf/station/floor,/area) +"yG" = (/obj/machinery/door/window,/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area) +"yH" = (/obj/machinery/mass_driver{dir = 4; id = "sb2"},/obj/machinery/recon{dir = 4},/turf/station/engine/floor,/area) +"yI" = (/obj/machinery/door/poddoor{id = "sb2"},/turf/station/engine/floor,/area) +"yJ" = (/obj/machinery/computer/pod{id = "sb3"},/turf/station/floor,/area) +"yK" = (/obj/machinery/door/window,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area) +"yL" = (/obj/machinery/mass_driver{dir = 4; id = "sb3"},/obj/machinery/recon{dir = 4},/turf/station/engine/floor,/area) +"yM" = (/obj/machinery/door/poddoor{id = "sb3"},/turf/station/engine/floor,/area) +"yN" = (/obj/grille,/obj/window{dir = 4},/obj/window{dir = 8},/obj/window{dir = 1},/turf/station/floor,/area) +"yO" = (/obj/machinery/computer/pod{id = "sb4"},/turf/station/floor,/area) +"yP" = (/obj/machinery/mass_driver{dir = 4; id = "sb4"},/obj/machinery/recon{dir = 4},/turf/station/engine/floor,/area) +"yQ" = (/obj/machinery/door/poddoor{id = "sb4"},/turf/station/engine/floor,/area) +"yR" = (/obj/machinery/computer/pod{id = "sb5"},/turf/station/floor,/area) +"yS" = (/obj/machinery/mass_driver{dir = 4; id = "sb5"},/turf/station/engine/floor,/area) +"yT" = (/obj/machinery/door/poddoor{id = "sb5"},/turf/station/engine/floor,/area) +"yU" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/extinguisher,/turf/station/floor,/area) +"yV" = (/obj/grille,/obj/window{dir = 8},/obj/window,/turf/station/floor,/area) +"yW" = (/obj/grille,/obj/window{dir = 1},/obj/window,/turf/station/floor,/area) +"yX" = (/obj/grille,/obj/window{dir = 4},/obj/window,/turf/station/floor,/area) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacadadadacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafagacahaiaiaiajaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafakalamanaiaoapaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaqarafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafasatauavawatacaxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeayaeafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafagavavavazaiacaxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeayaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacazaAazaAazaAacacacacacacacacazaAazaAazaAavavavavatacaxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeayaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacaBaCaDaDaCaCacavavavavavavavavavaEaiacaxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeayaeaFaFaFaFaFaFaFaFaFaGaFaFaFaFaFaFaFaFaFaFaFaFaHaeacaBaCaDaDaCaCacaIaJaKaKaKaKavavavavaiacaxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaLaeayaMayaNayayaMayayayayaMayayaNayayaMayayayaMaOaeacaBaDaDaDacacacaPaQaQaQaRaQavamaSavaiacaxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaTaeayaFaFaFaFaFaFaFaUaFaFaFaFaFaFaFaUaFaFaFaFaFayaeacaVaWaWaWaXaYacaZaQaQaQaPaQavaiaiavaiacaxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaebaaebbaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaebaaeacaVaWaWaWbcbdacbebebebfbgbhavaibiavbjacaxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeayaebabkbkbkblaybmbkbnboboboaMbpbpbqbkbrbrbsbsaebtaeacbuaWaWaXbvbvacbwaQaQaQaRavavaiaiaiaiacaxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaLaeayayaNbaayayaybkayayayayayayayaybkaTayayayaebxaeacbuaWaWaWbybvacbzaQaQaQaPbAbBaiaiamauacaxaxaxaxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeayaeayayaybaaybCaybaayayayayayayayaybkbDayayaMayayaeacbuaWbEbFbybGacbHbIbHbHbHavavavavavavacacacbJbKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaybLayayaybaayayaMbkayayayayayayayaybaayayayayayaybLbMbNbNbObPbybQacbRaQaQaQaRbSbTbUbVbWbXbYbZcacbccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaebkcdbkbkbabababkaNcecfcgcfaychcibkcjckckclaycmaeaccnbvcobvbvcpaccqaQaQaQaPbSaQcrcrcrcrcrcrcsctccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaecuayaycvayaycwbkbkbkbkbkbkcxcxcxbkbkcxcxcxcxaeaeacbvcyczcpbvcAacbHcBbHbHbHcCaQaQaRaQaQaQaPcDcEccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaecuaybsbkayayaycFayaycGaycHcIcIcIcIcIcIcIcIcIaecJaccKcLbObNbNbNaccMaQaQaQaQcNaQaQcOcPcQcRaQcScTccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaecuaybsbkcUayaybkbtaycVaFcWcIcIcIcIcIcIcIcIcIaeacacacacacacacacaccXaRaQaPaQbSaQaQaPaQaQaQaRcYcTccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaebkcZbkbkdaaNaybkbtayayaFdbcIcIcIcIcIcIcIcIcIaeacdcdcdddedfdgdhavdiaQaQaQaQbSdjdkaQdldldldldmdnccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaedodpdqbkayayaybkbtayaydrdscIcIcIcIcIcIcIcIcIaeacdtdudvdwdwdwdxavavavbAavaRbSdydzdAdBdCdDdEdFdGccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacaedHdIdJbkayayaMbkdKdLdMdNdOcIcIcIcIcIcIcIcIcIaeacdPdvdQdvdvdRdSavavavdTavavavacacdUacacacavavavdVacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadWdXdYdZeaacaeaeaeaeaebabkbkbkbkbkbkbkebebecedeeedbkefefefaeacavegavehehehehavaveiejejekavacacelacacacavemavaxacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacavaveneoacacacacacaecZbkbkbkbkbkbkbkepbkbkayayayaeaeaeaeaeaceqererererereresesejejejejavacetaQaQeuacavemavaxacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaevewdYdZexaveyezeAacaeaybkeBeCeCeCeDeCeCepeEayayayaeacacacacaceFererererereravavejejejejavaceGaQaQeHacavemavaxacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacavaveIeneJdZeneoeKbLaybkeCeCeCeCeCeCeCbkbkaTayaNaeaceLerereMerererereNereOavePejeQejejavaceRaQeSeHacavemavaxacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeTeUdYeoeVaveWeneoacaebabkeXeXeXeXeXeXeXbkbnayayayaeaceMeMeMavavavavavavavavavavavavavavavaceGaQaQeHacavemavaxacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacavavendZaveYendZacaeaybkbkbkbkbkbkbkbkbkayayaybDaeaceZfafaavfbfcfdavfefffgfhfifififiavfjacfkflaQfmacavemavaxacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafnfodYeofpaveodZfqacaeayayaNaMayayayaybacFayayaMfraeacfsftftfufvfwfxfyfzfAfBfCfDfEfFfGavemacfHfIfJfKacavemavaxacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacftftftfufvfLfMfNfOfcfPfQfRfififiavemacacacacacacavavavaxacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaacaaemaaaaacacacacacacacaaaaemaaaaacfafafaavavavfSavavavavavavavavavavavavfTfUfVfWfXfYfZavgaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacgbgbgbgbacacacacacacacacacacacaaaaacgcgcgdgcgcacaaaaemaaacacgegegeavavgfggghgggfgigggggggggggjggavgkglgmfUfWfYfYavgaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacgngogogogpgqgrgsgtgugvgwgxgyacacacacacacgzacacacacacacacacgAgBgBgBgCgigggggggggjgigggggDgggggfgggEfVfWfXfWfVfYgFavgaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacgGgHavgngIgJgKgLgMgNgOgNgugPgNgHgNgQgRgSgTgUgVgWgXgYgZhahbhchdavhegBgBhfavavgjggggacacacacacacacacacacacfWfWfWfWfWfWhgavgaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacgGgOhhgNgNgOgNhigNgNgNgtgugNgNhjhkgQhlhlhmhlhlhlhmhlhlhmhlhnhnavgBgBgBgBavavavavhoachphqhrhrhshththuhvachwhxfVhyfThzfVavgaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaachAgNavhBhCgNgNhigNgNhDgthEgNgNhFhGgQhHhIhlhlhJhKhLhMhNhlhlhOhPavavgegeavavhQhRavhSachThthththththvhUhvachVhWfWhWhWhzfWavgaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacgGgHhhgNgNhXgNhYgNgNhZgNgugNgNgNhkavavaviaiaiahlhlibicidieifigavavihihavaviihRhRhRacijikhUhUhththvilhvacfVfWfXfWfViminavgaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacgGgNavhBhCgNgNiogNgNgHgNipgNgNgNiqirisitiuiviwixiyizhlhlhmhliAaviBiCiCiDaviEhRhRhRaciFhvhvhvhththvhUhvacaviGiHavavavavavgaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacgGgHhhgNgNgOgNiIiJgHgOgHhYgNgNgNiKaviLaviyhmiyiMiNiOiyhlhliyiPaviCiCiCiQaviRiShRhRacacacacaciTacacacacacaciUiUaviViViVavaxacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacgGgOavhBhCiWiWiXiYiYiZjaavjbjcavavavavaviMjdiMjejfjghlhlhljhjiaviCiCiCiCavavhRjjhRhRiEacavjkjljljmjnjojpacjqjqjqjqjqjqacaxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacavavavavavavavavavavavbhbhjrjrbhbhavavavavavavavavjsjtjujvjwjxaviCiCiCiCjyhShRhRhRhRhRjzjAjljljljBjljljlacjCjqjqjDjEjEacaxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacjFjFjFjFjFjGjFjFjHavavjIjJjJjJjKjKavjLjMavavavavavavavavavavavaviCiCiCiCavavhRhRiihRhRacavjNjljljljljOavacavjPjqjEjEjEacaxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacjQjRjRjSjRjRjRjRjTavavjJjUjJjVjJjWavjXjYjYjZkakbavkckdkekfkgkhihiDiCiCiBaviihRhRkihRiEacavkjjljlkkjljljAkliUjqjqkmjEjEacaxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacjSjRjRjQjRjRjRjRjSknkojJjJjJjJjJkpavavjYjYjYkqavavkrkfkfkfkfkhihiCiCiCiCavavavavavavavavavjljljljljlksavacavktjqkukukuacaxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacjRjRavavavkvavavkvavavjJjJjVjJjUjJkokwkqjYjXjYkwkhkgkfkfkfkdkhihiCiBkxiCavaxaxaxaxaxaxacavjAavjljljljlkyacaviUavkukukuacaxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaackzkAavkBjQjSavkBjQjSavkCkDkEkFkGkCavavjYjYjYjYkwkhkfkfkfacacacacacackHacacacavavavavavacavkIavjlkJjlkKacacavkLavavavavacaxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaackMkMavkNjFkOavkNjFkOavkPkQkRkRkSkPavkqjYjYjYjXkwkhkdkfkgackTkUkVkWackXkYkZacacacacacavacavkIavlalblclcacldldlelelflelgacaxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaclhlhavavavavavavavavavliljlklllmlnavavavavavavavavavloavaclpkXkYlqlrkXkYlsltlukXlvacaxacavlwavlxlylylzaclAlelelelelelBacaxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaclhlhlClDlElElFlGlGlHavlIlllJlKlllLavlMlMlMlMlNlOlPavlQlRackTkXlSkXaclTlUacackYlVlWacaxaclXlYlZlxlxlxlxacmalelemblemcleacaxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmdmelhlhmflhlhlhmemgavmhllmimjllmkavmlmlmlmlmmlQlQavmnavackTkXkYkXkXmomokXacmplVmqacaxacavavavmrlxlxlxacmsmtlelelelemtacaxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmulhmumulhmumulhlhlhavmvllmwmxllmyavmzmzmzmzmAlQlQavlQmBacmCmDmEmFkXmGkXmHltkXlVlWacaxacavmImJlxmKmKmKaclelelemLmMmMmMacaxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmulhmumulhmumulhlhlhavmNlmllllmOmyavmPmQmPmRmSlQmTavmnavacmUmVmWmXmYmZnanbncndkXndacneacacacacacacacacacnfngnfnhnhnhnhacaxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmumfmumumemumulhmflhnimNmNnjmNnkmyavnlnlnlnlnmlQlQavnnavacacacacacacacacacacacacacacaxacaaavememavememavnonpnqnrnrnrnracaxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacnsacacacacacacavavavavavavntavavavnununununvlQlQlQlQlQnwnxnynxacnwnznznznznznznAacaxacaaavaaaaavaaaaavnBnCnBaaaaaaaaacaxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacnDnEnEnFnGnHnIacnJnKnJnJnLnJnJnKnJavnMnzmBnzmBlQnwlQlQlQlQlQlQlQaclQlQlQlQlQlQlQnNacaxacaanOnOnOnOnOnOnOnOnOnOnOnOnOnOnOaxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacnPnEnEnEnEnEnQacnJnJnJnJnJnJnJnJnRavnSlQlQlQnwlQnTlQnUnAlQlQlQlQnVlQnWnWnWnWnWnWlQacaxacaanOnOnOnOnOnOnOnOnOnOnOnOnOnOnOaxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacnXnEnEnEnEnEnYacnJnJnJnJnJnJnJnJnJavnZlQnAlQoalQlQlQobocododoeoeacofogogogogogognwacaxacaanOnOnOnOnOnOnOnOnOnOnOnOnOnOnOaxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacohnEnEoinEnEojacnJnLnJnJnKnJnJnLokavolomonoolQlQlQlQoplQlQoqlQnAacacacacacacacacacacaxacaanOnOnOnOnOnOnOnOnOnOnOnOnOnOnOaxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacnsacacacacacacacacavavoravavavavlQlQlQoslQlQlQoslQlQotounwovoslQlQowowowowowowavaxacaanOnOnOnOnOnOnOnOnOnOnOnOnOnOnOaxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacoxnEoyoyoyoyoyoyozacoAoAoAoAoAoAavogogogoBoCoDoCnwoEoFoGoHoIoJavlQlQowowowowowowavaxacaanOnOnOnOnOnOnOnOnOnOnOnOnOnOnOaxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacoKnEnFnEnEoinEnEoLacoAoMoAoAoNoOavavavavavavavavavavavavavavavavlQlQoPoPoPoPoPoPavaxacaanOnOnOnOnOnOnOnOnOnOnOnOnOnOnOaxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacoQoQoRoQoRoSnYoToUacoAoAoAoAoAoAavaaaaaaavaaaaaaavaaaaaaaaaaaaavlQoVoPoPoPoPoPoPavaxacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavaxacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacoWaxaxaxaxaxoXaxaxaxaxaxaxaxaxaxaxaxaxaxaxaxaxaxaxaxaxaxaxaxaxaxaxaxaxaxaxaxaxaxaxaxaxacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,2) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,3) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,4) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,5) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,6) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,7) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,8) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,9) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavavavavavavavavavavavavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavavavavavavavavavavavavoYoYoZpapapbpcpbpdpdpeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavpfpgphpipjpkplpmpkplavpapapapnpaavavavpdpdpeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavpapaphpopgpapapnpapaavpnpapapapgpapaavpppdpeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavpgpfpqprpapapapapgpapspapgpapapaptpuavpvpdpeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavpwpapxprpapapnpapypzavpapapapnpapapAavavavavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavpnpgpspapapapapapapBavpCpDpapEpFpapGpHpIpJavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavpapapKpLpnpapgpMpapNavpnpapapOpPpapapnpapgavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavpQpnphpRpSpTpUpVpWpXavpCpDpYpZpaqapgpGqbpIavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavavavavavavavavavavavavpgpaqcpaqdpaqepapapnavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavpCpDqfqgqgqhqhqiqiqjavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavavavavavavavavavavavavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,10) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavavavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavemavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavavemavavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxaxaxaxaxaxaxaxavavavqkememavavavaxaxaxaxaxaxaxaxaxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxaxaxaxaxaxaxemqlemememqmemememqlemaxaxaxaxaxaxaxaxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxaxaxaxaxaxaxaxavavavqnememavavavaxaxaxaxaxaxaxaxaxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavavemavavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavemavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavqlavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqoqoqoqoqoqoqoqoqoqoqoqoqoqoqoqoaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqoqpqqqrqrqrqrqrqoqsqsqsqsqsqsqoaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqoqsqsqtqtqtqtqtqoqoqoqoqoqoqoqoaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqoqsquqsqsqvqsqsqoqsquqwqwqwqwqoaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqoqsqsqsqsqsqsqsqoqxqsqwqwqwqwqoaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqoqoqoqoqoqoqoqoqsqsqoqsqsqwqwqwqwqoqoqoqoqoqoqoqoqoaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqoqyqzqAqBqsqCqoqDqEqoqFqsquqsqGqGqoqHqvqsqIqIqIqIqoaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqoqsquqsqsquqJqoqsqsqoqFqsqKqKqGqGqoqHqsqsqsqsquqLqoaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqoqMqNqOqPqsqQqoqRqRqoqSqsqKqKqGqGqoqHqsqsqsqTqTqTqoaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqoqMqUqVqWqsqXqoqsquqoqSqsqKqKqGqGqoqHqsqsqsqTqTqTqoaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqoqMqvqsqsquqXqoqsqsqoqSqvqKqKqGqGqoqYqsqsquqTqTqTqoaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqoqZraqsrbrcrdqoqvqsqoqSqsqKqKqGqGqoqYqsrerererereqoaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqoqoqorfqoqoqoqoqRqRqoqorfqoqoqoqoqoqYqsrerererereqoaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaargrhrgaaaaaaqoqsqsqsqsqsqsqsqsqsqsririririqoqsqsrerererereqoaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaargrgrjrgrgqoqoqoqxqsqvqsqsqsqsquqsqsqsquqsqsrkqsqurerererereqoaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarlrmrnrorpaaaaqoqsqsqsqsqsqsqsqsqsqsqsqsqsqsqoqsqsrqrqrqrqrqqoaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaargrnrnrnrgqoqoqoqRqRqRqRqoqoqoqoqoqoqoqoqoqoqoqYqsrqrqrqrqrqqoaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarlrmrnrnrrrsqRrsqsqsqsqsrtrurvrwqsqsrurvrwrxqoqYqsrqrqrqrqrqqoaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaargrnrnrnrgqoqoqoqsquqsqsrtqsquqsqsqsqsqsquqsqoqYqvrqrqrqrqrqqoaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaargryrzrArgaaaaqoqsqsqsqsrtqsqsqsqsqsqsqsqsqsqoqoqoqoqoqoqoqoqoaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaargrBrCrDrgqoqoqoqsqsqsqsrtrurvrwqsqsrurvrwqsqorEqBrFqsqsqsrGrHaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarIrJrJrJrKaaaaqoqsqsqsqsrtqsqsqsqsqsqsqsqsqsqoqsqvqsqsqsquqsrHaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqoqsqsqsqsrtqsqvqsqsqsqsqsquqLqoqsqsqsqsqsqsqsrHaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarLrLrLrLrLrLrMrMrMrMrMrMrMrMrLqoqoqoqsqsqvqsrtqsqsqsqsqsqsqsqsqsqoqsqsqsqsqsqsqsrHaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarLrLrLrLrLrLrLrNrNrNrNrNrNrNrNrNrNrNrNrNrLqoqsqsqsqsqsqsqoqoqorfqoqoqoqoqoqoqoqsquqsqsqsquqsrHaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarLrOrPrOrPrOrLrQrQrQrQrQrQrQrQrQrQrQrQrQrLqoqsqsqsqsqsqsqsqsqsqsqsqsqsqsqurEqoqoqoqsqsqsqsqsrHaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarLrRrPrRrPrRrLrQrQrQrQrQrQrQrQrQrQrQrQrQrLqoqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsrsqRrsqsqsqsqsqsrHaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarLrPrPrPrPrPrLrQrQrQrQrQrSrTrQrQrQrQrQrQrLqoqxqsqsqsqsqsqsqsqsqsqvqsqsqsqsqsqoqoqoqsqsqsquqsrHaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarLrPrPrPrPrPrPrQrQrQrQrQrQrQrQrQrQrQrQrQrLqoqsqsqvqsqsqsquqsqoqoqoqoqoqoqoqoqoqoqoqoqoqoqoqoqoaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarLrPrPrPrPrPrLrQrQrQrQrQrQrQrQrQrQrQrQrQrLqoqsqsqsqsqsqsqsqsqoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarLrLrLrLrLrLrLrLrLrLrLrLrMrMrMrMrMrMrMrMrLqorsqorUrUrUrUrUrUqoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqoqRqoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqorsqoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarVrVrVrVrVrWrVrVrXrVrVrVrWrVnOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarVrYrZsasbscsdsesfsgrVshscrVrVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarVsisfsirXsfsasfsisjsisaskslsmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarVrYrZsfsmsksfsfsfsnsksfsksosmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarVsisfsismsksisfsaspsasisksqsmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarVrYrZsasmsrsfsfsfssrVsastrVrVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarVrVrVrVrVrWrVrVrVrWrVrVrWrVnOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasusususususvsususwsusususvsuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasusxsyszsusAsBsBsCsDsusEsAsusuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasusFsCsCswsCsCsCsCsGsCsCsHsIsJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasusxsysCsKsHsCsCsCsLsHsCsHsMsJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasusFsCsCsKsHsCsCsCsNsCsCsHsOsJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasusxsyszsKsPsCsCsCsQsuszsRsusuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasusususususvsusususvsususvsuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,11) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,12) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacsSsTsUsVsWsXsXsYsZtaacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactbtbtbtctctbtdtdtbtbtbtbtbacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactbtbtetctctbtbtftbtbtgthtbacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacactitjtctctctctctbtktlacthteacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactbtbtbtbtbtbtbtbtbtbtbactmtctctctntctctbtbtoacthtbacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactbtetdtdtbtbtbtdtdtftbactitptbtctctbtbtbtbtqacthtbacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactbtktrtstttbtktrtstttbactutbtftctctbtbtetbtvacthtfacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactbtktwtxtttbtktwtxtttbactytytbtbtbtztztAtAtBacthtCacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactDtbtEtEtbtbtbtEtEtbtFtGtHtItJtKtLacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactMtbtbtbtbtetbtbtbtbtbtNtbtbtbtbtbtOtPtPtPtPtQtRtStTtUtUtVacaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactWtbtbtbtbtbtbtdtdtbtbtXtbtetbtftYtOtbtetbtbtbtbtbtftZtZuaacaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacubtbtftbtbtbtktrtstttbuctbtbtbtbtbudtbtbtbtbtbtbtbtbtbueufacaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacugtbtbtbtbtbtktwtxtttbtgtutbtbtbtbtXtbtbtbuhtbtbtbtbtbuiufacaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacujukulumtMtbtbtEtEtetbuntbtftbtetbuotbtftbtbtbtbtbupteuqufacaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacactNtbtbtbtbtbtOsUsUurususususuttbuqufacaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacactftbtbtbtetbacacuuuuuuuuuuacacacacacacacactbtbtbacacaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactutbtdtdtbtbtOtutetbtbtftYunuvuwuxactbtftbtbtetbtYacaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactbtkuyuztttbuduAtbtbtbtbuBtNteuwuxacuCuCuCuCuCuCuCacaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactbtkuDuEttuFuGtbtftbtbteuFuGtftbuHacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacuuuuuuuuuuuuacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacuxuwuvtOtutetbtbtftYunuvuwuxacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactbuIactbtyacuxuwteuduAtbtbtbtbuBtNteuwuxacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactetfactetfacuHtbuJuGtbtftbtbteuFuGtftbuHacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacuKacacuKacacacacacacuuuuuuuuuuuuacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactbteuutbteuutetbtfuutbtetbtbtftYunuvuwuxacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacuLtbuutbtbuutbtbtbuutbtbtbtbtbuBtNteuwuxacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactftbuutftbuutftbteuutbtftbtbteuFuGtftbuHacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacuKacacuKacacacacacacuuuuuuuuuuuuacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactetfactetfacuxuwuvtOtutetbtbtftYunuvuwuxacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactbtyactbtyacuxuwteuduAtbtbtbtbuBtNteuwuxacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacuHtbuJuGtbtftbtbteuFuGtftbuHacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacuuuuuuuuuuuuacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacuxuwuvtOtutetbtbtftYunuvuwuxacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacuxuwteuduAtbtbtbtbuBtNteuwuxacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaemavuMuMuMuMuMuMuMuMuMuMuMuMuMuMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacuHtbuJuGtbtftbtbteuFuGtftbuHacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaemavavavavavavavavavavavavavavuMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacuuuuuuuuuuuuacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaemavuNuOuOuPuOuPuPuPuPuQuRuSavuMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacuxuwuvtOtutetbtbtftYunuvuwuxacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaemavavavuOuPuOuPuPuPuPuOuOuOavuMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacuxuwteuduAtbtbtbtbuBtNteuwuxacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaemuTuUuTuOuVuOuOuWuOuXuOuOuOavuMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacuHtbuJuGtbtftbtbteuFuGtftbuHacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaemavavavuOuPuPuPuPuPuPuPuPuPavuMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacactbtbtbtbtbtbacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaemavuYuOuOuPuPuPuPuPuPuPuPuPavuMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacuZvavbvcvduZacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaemavavavavavavavavavavavavavavuMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvetdtbtbtbttttacactbtbtbtbtbtbacvfuCvgvhacusususususacaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaemavuMuMuMuMuMuMuMuMuMuMuMuMuMuMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvivivjtdtbttttacactbtetbtbtftbvktbtftbtbtbtbtbtbtftYacaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactdtbtftbtettttacactutbtbtbtbtbvktbtbtbtbtbtbususususacaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvltbtbtbtbtbtbuKuutbtftbtbtetbvmtutetbvnactbtbtbtetbacaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactrtstbtrtsvotbacactbtbtbtbtbtbtXtbtbtbvpacusususususacaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactEtEtetEtEvotYacacuZvavbvcvduZacactKacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactbtbtbtbtbvqulactbtbtbtbtbtbtbtOtbtetbtbtbtbtfvracaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacuKacacacacactbtbtetbtbtftbtOtbtbtbtktbvsvttbacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactbtdtdtdtdactutbtbtbtbtbtYudtbtbtbtktbvutttYacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvvtbtbtbtbactbtbtbtbtbtbtbtXtbvwtbtktbvxvyvzacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactutftbtetbuKtbtbtftbtbtetbuotbtbtbtbtbtbtbtbacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacactbtbtbtbtbtbtbtOtutftbtbtbtbtetbacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvAtbtbtbtbtbtbtOtQtbtPtPtPtPvBvCacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacqlacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvDacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacqlacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavEvEvEvEvEvFvEvEvGvEvEvEvFvEvHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavEvIvJvKvLvMvLvNvLvOvEvPvQvEvEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavEvRvSvSvIvTvIvTvIvUvIvNvTvVvWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavEvLvIvLvLvTvLvTvLvXvTvLvTvYvWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavEvRvSvSvIvTvIvTvIvZvIvNvTwavWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavEvIvJvKvLwbvLvNvLwcvEwdwevEvEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavEvEvEvEvEvFvEvEvEvFvEvEvFvEvHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,13) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,14) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawflclcwgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawhwiemwhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawhwjwkwhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawhememwhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacememacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacwkwjacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacememacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacememacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacwjwkacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacememacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacememacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacwkwjacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacememacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacememacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacwjwkacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaacacwlwmwnwowpwqwracememacwswtwuwvwwwxacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaacwywzwAwBememwCwDacwEwFacwjwGemwkwHwIwJacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaacwKwLwMwNwOwPwQwRavemwjavwkememwjememwkwSacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaacacacacacwTwkwUemwVwWwXwXavememavwYwZxaxbemememxcacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaacacxdxexfacxgemwjxhavavavavavememavavavavavxiememxjacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaacxkxlxmwjxnwkememwkavxoxpxqwjememxrxsxtxuavxvemwjxwacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaacememxxemavwjemwjemxnememememememememxyxyavxzemwkxAacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaacxBxlwjwkavxCxvxDxEavememememememememememavemememxFacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaacxGemxHemavavavxIavavxJememxKxLxMwjememwkxnwkxFxNaEacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaacxOxPxQxRavxSememxTavxUememxVxWxXavavavavavwjxFxYaEacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaacxZememwiavavavxIavavyaememybemycydyeyfygavyhyhyiyiacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaacyjykwjylavxCxvxDxEavwkememwjememydymemwjavyhyhyiyiacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaacynemememavwjemwjemxnememememememyoypypemacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaacyqemyrwjxnwkememwkavyslXytyuwjwkxnwjemwkacaaacaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaacacyvywyxacxgemwjxhavavavavavememacacacwEacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaacacacacacyywLyzemwVwWwXwXavememacaaacwjwkydyAemxnyByCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaacyDwkyEwNwOwPwQwRavwkwjacaaacememydwkwjacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaacwywzwAwBememwCwDavwEwFacacacememydyFemyGyHyIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaacacwlwmwnwowpwqwracememacaaacwkwjydwjemacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacwjwkacaaacememyoyJwkyKyLyMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacememacacacememxnwjemacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacememacaaacwjwkyNyOemyGyPyQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacwkwjacaaacacacacwkwjacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacememacaaaaaaaaacyRemxnySyTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacememacaaaaaaaaacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacwjwkacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacememacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacememacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacwkwjacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaydememydaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaydememydaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaydwjyUydaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayVyWyWyXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,15) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} diff --git a/main-src/spacestation13.dme b/main-src/spacestation13.dme new file mode 100644 index 0000000..661e6d5 --- /dev/null +++ b/main-src/spacestation13.dme @@ -0,0 +1,65 @@ +// DM Environment file for SS13A.dme. +// All manual changes should be made outside the BEGIN_ and END_ blocks. +// New source code should be placed in .dm files: choose File/New --> Code File. + +// BEGIN_INTERNALS +/* +FILE: Code\areas.dm +DIR: Code +MAP_ICON_TYPE: 0 +AUTO_FILE_DIR: ON +*/ +// END_INTERNALS +// BEGIN_FILE_DIR +#define FILE_DIR . +#define FILE_DIR "Code" +#define FILE_DIR "Icons" +#define FILE_DIR "Interface" +// END_FILE_DIR + +// BEGIN_PREFERENCES +#define DEBUG +// END_PREFERENCES + +// BEGIN_INCLUDE +#include "ss13h.dmp" +#include "Code\!atoms.dm" +#include "Code\aaaDefines.dm" +#include "Code\airtunnel.dm" +#include "Code\areas.dm" +#include "Code\atmo_control.dm" +#include "Code\blob.dm" +#include "Code\cell_process.dm" +#include "Code\cellautomata.dm" +#include "Code\chemical.dm" +#include "Code\colour2html.dm" +#include "Code\computer.dm" +#include "Code\cryo.dm" +#include "Code\datumvars.dm" +#include "Code\demo.dm" +#include "Code\demo2.dm" +#include "Code\dna.dm" +#include "Code\engine.dm" +#include "Code\globals.dm" +#include "Code\h_sandbox.dm" +#include "Code\hexadecimal.dm" +#include "Code\instructions.dm" +#include "Code\inverthtml.dm" +#include "Code\items.dm" +#include "Code\mob.dm" +#include "Code\modules.dm" +#include "Code\newitems.dm" +#include "Code\newobjects.dm" +#include "Code\newpipe.dm" +#include "Code\overview.dm" +#include "Code\power.dm" +#include "Code\shuttle.dm" +#include "Code\ss13_algorithm2.dm" +#include "Code\sun.dm" +#include "Code\Test.dm" +#include "Code\TextHandling.dm" +#include "Code\vote.dm" +#include "Code\weap_sat.dm" +#include "Code\weapons.dm" +// END_INCLUDE + diff --git a/main-src/ss13h.dmp b/main-src/ss13h.dmp new file mode 100644 index 0000000..c85aa75 --- /dev/null +++ b/main-src/ss13h.dmp @@ -0,0 +1,2783 @@ +"aa" = (/turf/space,/area) +"ab" = (/obj/grille,/turf/station/floor,/area) +"ac" = (/obj/item/weapon/tank/oxygentank,/turf/space,/area) +"ad" = (/obj/machinery/power/solar{id = 2; adir = 1},/turf/station/floor,/area) +"ae" = (/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor{icon_state = "Floor1"; intact = 0},/area) +"af" = (/obj/cable{icon_state = "1-4"; d1 = 1; d2 = 4},/turf/station/floor{icon_state = "Floor1"; intact = 0},/area) +"ag" = (/obj/cable,/obj/cable{icon_state = "0-8"; d2 = 8},/obj/cable{icon_state = "0-4"; d2 = 4},/turf/station/floor{icon_state = "Floor1"; intact = 0},/area) +"ah" = (/obj/cable,/obj/cable{icon_state = "0-2"; d2 = 2},/obj/cable{icon_state = "0-8"; d2 = 8},/obj/cable{icon_state = "0-4"; d2 = 4},/turf/station/floor{icon_state = "Floor1"; intact = 0},/area) +"ai" = (/obj/cable{icon_state = "1-8"; d1 = 1; d2 = 8},/turf/station/floor{icon_state = "Floor1"; intact = 0},/area) +"aj" = (/obj/grille,/turf/station/floor,/area/engine) +"ak" = (/obj/machinery/pipes/heat_exch{tag = ""; icon_state = "6"},/obj/lattice,/turf/space,/area/engine) +"al" = (/obj/machinery/pipes/heat_exch,/obj/lattice,/turf/space,/area/engine) +"am" = (/obj/machinery/pipes/heat_exch{tag = ""; icon_state = "10"},/obj/lattice,/turf/space,/area/engine) +"an" = (/turf/station/r_wall,/area/engine) +"ao" = (/turf/station/wall,/area) +"ap" = (/obj/grille,/obj/window{icon_state = "rwindow"; dir = 1; reinf = 1},/obj/window{icon_state = "rwindow"; reinf = 1},/turf/station/floor,/area/engine_access) +"aq" = (/obj/grille,/obj/window{icon_state = "rwindow"; dir = 1; reinf = 1},/obj/window{icon_state = "rwindow"; reinf = 1},/obj/window{icon_state = "rwindow"; dir = 4; reinf = 1},/turf/station/floor,/area/engine_access) +"ar" = (/obj/machinery/door/airlock{access = "2000"},/obj/cable{icon_state = "1-4"; d1 = 1; d2 = 4},/turf/station/floor,/area/engine_access) +"as" = (/obj/grille,/obj/window{icon_state = "rwindow"; reinf = 1},/obj/window{icon_state = "rwindow"; dir = 1; reinf = 1},/obj/window{icon_state = "rwindow"; dir = 8; reinf = 1},/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/engine_access) +"at" = (/obj/grille,/obj/window{icon_state = "rwindow"; reinf = 1},/obj/window{icon_state = "rwindow"; dir = 1; reinf = 1},/obj/cable{icon_state = "2-8"; d1 = 2; d2 = 8},/turf/station/floor,/area/engine_access) +"au" = (/obj/machinery/pipes/heat_exch{tag = ""; icon_state = "5"},/obj/lattice,/turf/space,/area/engine) +"av" = (/obj/machinery/pipes/heat_exch{tag = ""; icon_state = "3"},/obj/lattice,/turf/space,/area/engine) +"aw" = (/obj/move/airtunnel/connector/wall,/turf/space,/area/airtunnel1) +"ax" = (/obj/machinery/camera{dir = 4; c_tag = "Northern Airlock"},/obj/machinery/at_indicator{pixel_x = -32; pixel_y = 0},/turf/station/floor,/area/engine_access) +"ay" = (/obj/window{icon_state = "rwindow"; dir = 8; reinf = 1},/turf/station/floor,/area/engine_access) +"az" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/cable{icon_state = "2-4"; d1 = 2; d2 = 4},/turf/station/floor,/area/engine_access) +"aA" = (/obj/machinery/power/smes{output = 12000; charge = 0; chargelevel = 12000; n_tag = "Aux. Solar Generator"},/turf/station/floor,/area/engine_access) +"aB" = (/obj/machinery/power/solar_control{id = 2},/turf/station/floor,/area/engine_access) +"aC" = (/obj/machinery/pipes/heat_exch{tag = ""; icon_state = "9"},/obj/lattice,/turf/space,/area/engine) +"aD" = (/obj/move/airtunnel/connector,/obj/machinery/alarm/indicator,/turf/space,/area/airtunnel1) +"aE" = (/obj/window{icon_state = "rwindow"; dir = 4; reinf = 1},/obj/window{icon_state = "rwindow"; dir = 8; reinf = 1},/turf/station/floor,/area/engine_access) +"aF" = (/obj/window{icon_state = "rwindow"; dir = 8; reinf = 1},/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/engine_access) +"aG" = (/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/obj/cable{icon_state = "1-8"; d1 = 1; d2 = 8},/turf/station/floor,/area/engine_access) +"aH" = (/obj/machinery/power/terminal{dir = 1},/obj/cable{icon_state = "0-4"; d2 = 4},/turf/station/floor,/area/engine_access) +"aI" = (/obj/cable{icon_state = "1-8"; d1 = 1; d2 = 8},/turf/station/floor,/area/engine_access) +"aJ" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/at_indicator{pixel_y = 32},/turf/station/floor,/area/engine/engine_hallway) +"aK" = (/obj/machinery/door/airlock{access = "2000"},/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/engine/engine_hallway) +"aL" = (/obj/move/airtunnel/connector,/turf/space,/area/airtunnel1) +"aM" = (/obj/machinery/door/airlock,/turf/station/floor,/area/engine_access) +"aN" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/landmark/alterations{name = "blobstart"; icon_state = "x3"},/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/engine_access) +"aO" = (/obj/window{icon_state = "rwindow"; dir = 8; reinf = 1},/obj/window{icon_state = "rwindow"; reinf = 1},/turf/station/floor,/area/engine_access) +"aP" = (/obj/window{icon_state = "rwindow"; reinf = 1},/turf/station/floor,/area/engine_access) +"aQ" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 4; access = "2000"},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/engine_access) +"aR" = (/turf/station/floor,/area/engine/engine_hallway) +"aS" = (/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/engine_access) +"aT" = (/turf/station/floor,/area/engine_access) +"aU" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/engine_access) +"aV" = (/obj/machinery/alarm{pixel_y = 24},/turf/station/floor,/area/engine_access) +"aW" = (/obj/machinery/door/airlock{access = "3000"},/turf/station/floor,/area/engine_access) +"aX" = (/obj/machinery/door/airlock{access = "2000"},/turf/station/floor,/area/engine/engine_hallway) +"aY" = (/turf/station/r_wall,/area/airtunnel1) +"aZ" = (/obj/machinery/atmoalter/siphs/fullairsiphon,/turf/station/floor,/area/airtunnel1) +"ba" = (/obj/machinery/atmoalter/siphs/scrubbers,/turf/station/floor,/area/airtunnel1) +"bb" = (/turf/station/floor,/area/airtunnel1) +"bc" = (/obj/machinery/light_switch{pixel_y = -24},/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/engine_access) +"bd" = (/obj/machinery/firealarm{pixel_y = -32},/turf/station/floor,/area/engine_access) +"be" = (/obj/grille,/obj/window{icon_state = "rwindow"; dir = 4; reinf = 1},/obj/window{icon_state = "rwindow"; dir = 8; reinf = 1},/turf/station/floor,/area/engine_access) +"bf" = (/obj/machinery/computer/airtunnel,/obj/machinery/light_switch{pixel_y = 24},/obj/machinery/camera{dir = 4; c_tag = "Engine Hallway (W)"},/turf/station/floor,/area/engine/engine_hallway) +"bg" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/engine/engine_hallway) +"bh" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/engine/engine_hallway) +"bi" = (/obj/landmark/alterations{name = "id computer"},/turf/station/floor,/area/engine/engine_hallway) +"bj" = (/obj/cable{icon_state = "2-4"; d1 = 2; d2 = 4},/turf/station/r_wall,/area/engine) +"bk" = (/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/r_wall,/area) +"bl" = (/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/obj/grille,/obj/window{icon_state = "rwindow"; dir = 10; reinf = 1},/turf/station/floor,/area) +"bm" = (/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/obj/grille,/turf/station/floor,/area) +"bn" = (/obj/cable{icon_state = "2-8"; d1 = 2; d2 = 8},/turf/station/r_wall,/area) +"bo" = (/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/wall,/area) +"bp" = (/obj/window{dir = 10},/obj/item/weapon/extinguisher,/turf/station/floor,/area/engine_access) +"bq" = (/obj/cable{icon_state = "2-4"; d1 = 2; d2 = 4},/turf/station/floor,/area/engine/engine_hallway) +"br" = (/obj/machinery/firealarm{pixel_y = -32},/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/engine/engine_hallway) +"bs" = (/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/engine/engine_hallway) +"bt" = (/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/r_wall,/area/engine) +"bu" = (/obj/machinery/atmoalter/canister/poisoncanister,/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/engine/engine_gas_storage) +"bv" = (/obj/machinery/atmoalter/canister/poisoncanister,/obj/item/weapon/extinguisher,/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/engine/engine_gas_storage) +"bw" = (/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/floor,/area/engine/engine_gas_storage) +"bx" = (/obj/machinery/atmoalter/canister/poisoncanister,/obj/landmark/alterations{name = "blobstart"; icon_state = "x3"},/obj/cable{icon_state = "0-4"; d2 = 4},/obj/cable{icon_state = "0-8"; d2 = 8},/obj/cable{icon_state = "0-2"; d2 = 2},/turf/station/floor,/area/engine/engine_gas_storage) +"by" = (/obj/cable{icon_state = "1-8"; d1 = 1; d2 = 8},/turf/station/r_wall,/area/engine) +"bz" = (/turf/station/r_wall,/area) +"bA" = (/obj/machinery/alarm{pixel_y = 24},/turf/station/engine/floor,/area/aux_engine) +"bB" = (/turf/station/engine/floor,/area/aux_engine) +"bC" = (/obj/window{icon_state = "rwindow"; dir = 8; reinf = 1},/obj/machinery/compressor,/turf/station/floor,/area/aux_engine) +"bD" = (/obj/window{icon_state = "rwindow"; dir = 4; invisibility = 0; reinf = 1},/obj/machinery/power/turbine,/turf/station/floor,/area/aux_engine) +"bE" = (/obj/window{icon_state = "rwindow"; reinf = 1},/turf/station/engine/floor,/area/aux_engine) +"bF" = (/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/r_wall,/area) +"bG" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/dispenser,/turf/station/floor,/area/eva_storage) +"bH" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/dispenser,/turf/station/floor,/area/eva_storage) +"bI" = (/obj/rack,/obj/item/weapon/clothing/suit/sp_suit,/obj/item/weapon/clothing/head/s_helmet,/obj/item/weapon/clothing/mask/gasmask,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/under/black,/obj/item/weapon/clothing/shoes/black,/obj/item/weapon/tank/jetpack,/turf/station/floor,/area/eva_storage) +"bJ" = (/obj/machinery/atmoalter/siphs/fullairsiphon,/turf/station/floor,/area/engine_access) +"bK" = (/obj/machinery/door/airlock{access = "2000"},/turf/station/floor,/area/engine/generator) +"bL" = (/obj/grille,/obj/window{icon_state = "rwindow"; dir = 10; reinf = 1},/obj/machinery/junction{dir = 1},/turf/station/floor,/area/engine/generator) +"bM" = (/turf/station/wall,/area/engine) +"bN" = (/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/wall,/area/engine) +"bO" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/engine/engine_hallway) +"bP" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/engine/engine_gas_storage) +"bQ" = (/turf/station/floor,/area/engine/engine_gas_storage) +"bR" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/engine/engine_gas_storage) +"bS" = (/obj/machinery/atmoalter/canister/poisoncanister,/obj/machinery/power/apc{dir = 4},/obj/cable,/obj/cable{icon_state = "0-2"; d2 = 2},/turf/station/floor,/area/engine/engine_gas_storage) +"bT" = (/obj/window{icon_state = "rwindow"; dir = 8; reinf = 1},/turf/station/floor,/area/aux_engine) +"bU" = (/obj/cable{icon_state = "1-4"; d1 = 1; d2 = 4},/turf/station/floor,/area/aux_engine) +"bV" = (/obj/machinery/power/terminal{dir = 4},/obj/cable{icon_state = "0-2"; d2 = 2},/obj/cable{icon_state = "0-8"; d2 = 8},/turf/station/floor,/area/aux_engine) +"bW" = (/obj/machinery/power/smes{charge = 0; online = 0; n_tag = "Aux. No. 1"},/turf/station/floor,/area/aux_engine) +"bX" = (/obj/cable,/obj/cable{icon_state = "0-4"; d2 = 4},/obj/cable{icon_state = "0-8"; d2 = 8},/obj/cable{icon_state = "0-2"; d2 = 2},/turf/station/r_wall,/area) +"bY" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/eva_storage) +"bZ" = (/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/eva_storage) +"ca" = (/obj/cable{icon_state = "0-2"; d2 = 2},/obj/cable{icon_state = "0-8"; d2 = 8},/obj/cable{icon_state = "0-4"; d2 = 4},/turf/station/floor,/area/eva_storage) +"cb" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/eva_storage) +"cc" = (/obj/cable{icon_state = "0-4"; d2 = 4},/obj/cable{icon_state = "0-8"; d2 = 8},/obj/cable{icon_state = "0-2"; d2 = 2},/turf/station/floor,/area/eva_storage) +"cd" = (/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/wall,/area) +"ce" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/cable{icon_state = "0-8"; d2 = 8},/obj/machinery/power/apc{dir = 1},/obj/cable{icon_state = "0-2"; d2 = 2},/obj/cable,/turf/station/floor,/area/engine_access) +"cf" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/at_indicator{pixel_y = 32},/turf/station/floor,/area/engine_access) +"cg" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/engine/generator) +"ch" = (/obj/machinery/pipes{tag = ""; icon_state = "3"; p_dir = 3},/obj/window{icon_state = "rwindow"; dir = 8; reinf = 1},/turf/station/floor,/area/engine/generator) +"ci" = (/obj/machinery/manifold{dir = 4},/turf/station/floor,/area/engine/generator) +"cj" = (/obj/machinery/connector{dir = 8; p_dir = 8},/obj/machinery/atmoalter/canister/co2canister{c_per = 1e+006; c_status = 1},/turf/station/floor,/area/engine/generator) +"ck" = (/obj/item/weapon/radio/intercom{pixel_y = 32},/turf/station/floor,/area/engine/generator) +"cl" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/power/monitor,/turf/station/floor,/area/engine/generator) +"cm" = (/obj/machinery/alarm{pixel_y = 24},/turf/station/floor,/area/engine/generator) +"cn" = (/obj/machinery/power/terminal{dir = 4},/obj/cable{icon_state = "0-2"; d2 = 2},/turf/station/floor,/area/engine/generator) +"co" = (/obj/machinery/power/smes{n_tag = "Main No. 1"},/turf/station/floor,/area/engine/generator) +"cp" = (/obj/cable{icon_state = "2-8"; d1 = 2; d2 = 8},/turf/station/floor,/area/engine/generator) +"cq" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/extinguisher,/obj/machinery/power/apc{dir = 4; cell_type = 2},/obj/cable{icon_state = "0-2"; d2 = 2},/obj/cable,/turf/station/floor,/area/engine/generator) +"cr" = (/obj/landmark{name = "CTF-supply-Engine"},/turf/station/floor,/area/engine/engine_hallway) +"cs" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area/engine/engine_gas_storage) +"ct" = (/obj/machinery/atmoalter/canister/poisoncanister,/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/engine/engine_gas_storage) +"cu" = (/obj/window{icon_state = "rwindow"; dir = 1; reinf = 1},/obj/machinery/door/window{icon = 'security.dmi'; dir = 2; access = "2020"},/turf/station/engine/floor,/area/aux_engine) +"cv" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/aux_engine) +"cw" = (/obj/machinery/power/terminal{dir = 4},/obj/cable,/turf/station/floor,/area/aux_engine) +"cx" = (/obj/machinery/power/smes{charge = 0; online = 0; n_tag = "Aux. No. 2"},/turf/station/floor,/area/aux_engine) +"cy" = (/obj/cable{icon_state = "1-8"; d1 = 1; d2 = 8},/turf/station/r_wall,/area) +"cz" = (/obj/item/weapon/clothing/mask/m_mask,/obj/item/weapon/clothing/mask/m_mask,/obj/item/weapon/clothing/mask/m_mask,/obj/item/weapon/clothing/mask/m_mask,/obj/landmark/alterations{name = "blobstart"; icon_state = "x3"},/turf/station/floor,/area/eva_storage) +"cA" = (/turf/station/floor,/area/eva_storage) +"cB" = (/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/eva_storage) +"cC" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/eva_storage) +"cD" = (/obj/cable,/obj/machinery/power/apc{dir = 4},/turf/station/floor,/area/eva_storage) +"cE" = (/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/turf/station/floor,/area/engine_access) +"cF" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area/engine_access) +"cG" = (/obj/machinery/pipes{tag = ""; icon_state = "3"; p_dir = 3},/obj/machinery/meter,/turf/station/floor,/area/engine/generator) +"cH" = (/turf/station/floor,/area/engine/generator) +"cI" = (/obj/cable{icon_state = "2-4"; d1 = 2; d2 = 4},/turf/station/floor,/area/engine/generator) +"cJ" = (/obj/cable{icon_state = "0-4"; d2 = 4},/obj/cable{icon_state = "0-8"; d2 = 8},/obj/cable,/turf/station/floor,/area/engine/generator) +"cK" = (/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/engine/generator) +"cL" = (/obj/machinery/power/terminal{dir = 4},/obj/cable,/obj/cable{icon_state = "0-2"; d2 = 2},/obj/cable{icon_state = "0-8"; d2 = 8},/turf/station/floor,/area/engine/generator) +"cM" = (/obj/machinery/power/smes{n_tag = "Main No. 2"},/turf/station/floor,/area/engine/generator) +"cN" = (/obj/cable,/obj/cable{icon_state = "0-2"; d2 = 2},/obj/cable{icon_state = "0-8"; d2 = 8},/obj/cable{icon_state = "0-4"; d2 = 4},/turf/station/floor,/area/engine/generator) +"cO" = (/obj/cable{icon_state = "2-8"; d1 = 2; d2 = 8},/turf/station/wall,/area/engine) +"cP" = (/obj/landmark{name = "CTF-base-Engine"},/turf/station/floor,/area/engine/engine_hallway) +"cQ" = (/obj/closet/emcloset,/turf/station/floor,/area/engine/engine_hallway) +"cR" = (/obj/machinery/atmoalter/canister/poisoncanister,/obj/item/weapon/extinguisher,/turf/station/floor,/area/engine/engine_gas_storage) +"cS" = (/obj/machinery/atmoalter/canister/poisoncanister,/obj/item/weapon/extinguisher,/obj/machinery/camera{dir = 8; c_tag = "Plasma Storage"},/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/engine/engine_gas_storage) +"cT" = (/obj/machinery/vent{tag = "2"; dir = 4; p_dir = 4},/turf/station/engine/floor,/area/aux_engine) +"cU" = (/obj/window{icon_state = "rwindow"; dir = 4; reinf = 1},/obj/machinery/pipes,/obj/machinery/meter,/turf/station/engine/floor,/area/aux_engine) +"cV" = (/obj/machinery/valve{dir = 4; id = "auxv1"},/turf/station/floor,/area/aux_engine) +"cW" = (/obj/machinery/pipes{tag = ""; icon_state = "10"; p_dir = 10},/turf/station/floor,/area/aux_engine) +"cX" = (/turf/station/floor,/area/aux_engine) +"cY" = (/obj/grille,/obj/window{icon_state = "rwindow"; reinf = 1},/obj/window{icon_state = "rwindow"; dir = 1; reinf = 1},/obj/landmark/alterations{name = "barrier"},/obj/cable{icon_state = "0-4"; d2 = 4},/turf/station/floor,/area/eva_storage) +"cZ" = (/obj/grille,/obj/window{icon_state = "rwindow"; reinf = 1},/obj/window{icon_state = "rwindow"; dir = 1; reinf = 1},/obj/landmark/alterations{name = "barrier"},/obj/cable{icon_state = "0-8"; d2 = 8},/obj/cable{icon_state = "0-4"; d2 = 4},/turf/station/floor,/area/eva_storage) +"da" = (/obj/grille,/obj/window{icon_state = "rwindow"; reinf = 1},/obj/window{icon_state = "rwindow"; dir = 1; reinf = 1},/obj/landmark/alterations{name = "barrier"},/obj/cable{icon_state = "0-2"; d2 = 2},/obj/cable,/obj/cable{icon_state = "0-4"; d2 = 4},/obj/cable{icon_state = "0-8"; d2 = 8},/turf/station/floor,/area/eva_storage) +"db" = (/obj/grille,/obj/window{icon_state = "rwindow"; reinf = 1},/obj/window{icon_state = "rwindow"; dir = 1; reinf = 1},/obj/window{icon_state = "rwindow"; dir = 4; reinf = 1},/obj/landmark/alterations{name = "barrier"},/obj/cable{icon_state = "0-8"; d2 = 8},/turf/station/floor,/area/eva_storage) +"dc" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 4; access = "2100"},/obj/landmark/alterations{name = "barrier"},/obj/machinery/light_switch{pixel_x = 24},/turf/station/floor,/area/eva_storage) +"dd" = (/obj/landmark/alterations{name = "barrier"},/turf/station/wall,/area) +"de" = (/obj/machinery/firealarm{pixel_x = 32},/turf/station/floor,/area/engine_access) +"df" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/engine_access) +"dg" = (/obj/machinery/camera{dir = 4; c_tag = "Generator Room"},/turf/station/floor,/area/engine/generator) +"dh" = (/obj/machinery/pipes{tag = ""; icon_state = "3"; p_dir = 3},/turf/station/floor,/area/engine/generator) +"di" = (/obj/machinery/pipes{tag = ""; icon_state = "5"; p_dir = 9},/turf/station/floor,/area/engine/generator) +"dj" = (/obj/machinery/pipes{tag = ""; icon_state = "10"; p_dir = 10},/turf/station/floor,/area/engine/generator) +"dk" = (/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/engine/generator) +"dl" = (/obj/machinery/pipes{tag = ""; icon_state = "6"; p_dir = 6},/turf/station/floor,/area/engine/generator) +"dm" = (/obj/machinery/power/terminal{dir = 4},/obj/cable,/turf/station/floor,/area/engine/generator) +"dn" = (/obj/machinery/power/smes{n_tag = "Main No. 3"},/turf/station/floor,/area/engine/generator) +"do" = (/obj/cable{icon_state = "1-8"; d1 = 1; d2 = 8},/turf/station/floor,/area/engine/generator) +"dp" = (/obj/machinery/atmoalter/canister/co2canister,/obj/machinery/light_switch{pixel_y = -24},/turf/station/floor,/area/engine/engine_gas_storage) +"dq" = (/obj/machinery/atmoalter/canister/co2canister,/obj/machinery/alarm{pixel_y = -32},/turf/station/floor,/area/engine/engine_gas_storage) +"dr" = (/obj/machinery/atmoalter/canister/poisoncanister,/obj/item/weapon/radio/intercom{pixel_y = -32},/turf/station/floor,/area/engine/engine_gas_storage) +"ds" = (/obj/machinery/atmoalter/canister/poisoncanister,/obj/machinery/firealarm{pixel_y = -32},/turf/station/floor,/area/engine/engine_gas_storage) +"dt" = (/obj/window{icon_state = "rwindow"; dir = 4; reinf = 1},/turf/station/engine/floor,/area/aux_engine) +"du" = (/obj/machinery/connector{dir = 4; p_dir = 4},/turf/station/floor,/area/aux_engine) +"dv" = (/obj/machinery/manifold{dir = 8},/turf/station/floor,/area/aux_engine) +"dw" = (/obj/machinery/camera{dir = 4; c_tag = "Control Access"},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/controlaccess) +"dx" = (/turf/station/floor,/area/controlaccess) +"dy" = (/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/controlaccess) +"dz" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/controlaccess) +"dA" = (/obj/machinery/circulator{status = 0},/turf/station/floor,/area/engine/generator) +"dB" = (/obj/machinery/power/generator,/turf/station/floor,/area/engine/generator) +"dC" = (/obj/machinery/circulator{icon_state = "circ2-off"; side = 2; status = 0},/turf/station/floor,/area/engine/generator) +"dD" = (/obj/machinery/firealarm{pixel_x = 32},/obj/machinery/power/monitor,/turf/station/floor,/area/engine/generator) +"dE" = (/obj/machinery/firealarm{pixel_x = 32},/obj/closet/emcloset,/turf/station/floor,/area/engine/engine_hallway) +"dF" = (/obj/machinery/door/firedoor,/obj/machinery/door/window{icon = 'security.dmi'; dir = 4; access = "2030"},/turf/station/floor,/area/engine/engine_gas_storage) +"dG" = (/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/r_wall,/area/engine) +"dH" = (/obj/machinery/door/poddoor{name = "hatch"; id = "aux1"},/turf/station/engine/floor,/area/aux_engine) +"dI" = (/obj/window{icon_state = "rwindow"; dir = 1; reinf = 1},/obj/window{icon_state = "rwindow"; dir = 8; reinf = 1},/turf/station/engine/floor,/area/aux_engine) +"dJ" = (/obj/window{icon_state = "rwindow"; dir = 4; reinf = 1},/obj/window{icon_state = "rwindow"; dir = 1; reinf = 1},/turf/station/engine/floor,/area/aux_engine) +"dK" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/computer/atmosphere/siphonswitch,/turf/station/floor,/area/aux_engine) +"dL" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/controlaccess) +"dM" = (/obj/machinery/door/firedoor,/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/controlaccess) +"dN" = (/obj/machinery/door,/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/engine_access) +"dO" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/landmark/alterations{name = "blobstart"; icon_state = "x3"},/turf/station/floor,/area/engine_access) +"dP" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/engine_access) +"dQ" = (/obj/rack,/obj/item/weapon/clothing/suit/sp_suit,/obj/item/weapon/clothing/head/s_helmet,/obj/item/weapon/clothing/mask/gasmask,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/under/black,/obj/item/weapon/clothing/shoes/black,/obj/item/weapon/tank/oxygentank,/turf/station/floor,/area/engine/generator) +"dR" = (/obj/machinery/pipes,/obj/machinery/meter,/turf/station/floor,/area/engine/generator) +"dS" = (/obj/machinery/pipes{tag = ""; icon_state = "9"; p_dir = 9},/turf/station/floor,/area/engine/generator) +"dT" = (/obj/machinery/light_switch{pixel_x = 24; pixel_y = 0},/turf/station/floor,/area/engine/generator) +"dU" = (/obj/cable{icon_state = "1-4"; d1 = 1; d2 = 4},/turf/station/wall,/area/engine) +"dV" = (/obj/machinery/door/firedoor,/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/engine/engine_hallway) +"dW" = (/obj/machinery/power/apc{dir = 1},/obj/cable{icon_state = "0-8"; d2 = 8},/obj/cable{icon_state = "0-4"; d2 = 4},/obj/cable{icon_state = "0-2"; d2 = 2},/turf/station/floor,/area/engine/engine_hallway) +"dX" = (/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/obj/window{dir = 4},/obj/item/weapon/radio/intercom{pixel_y = 32},/turf/station/floor,/area/engine/engine_hallway) +"dY" = (/obj/machinery/light_switch{pixel_y = 24},/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/engine/engine_hallway) +"dZ" = (/obj/cable{icon_state = "0-2"; d2 = 2},/obj/cable{icon_state = "0-4"; d2 = 4},/obj/cable{icon_state = "0-8"; d2 = 8},/turf/station/floor,/area/engine/engine_hallway) +"ea" = (/obj/machinery/camera{dir = 8; c_tag = "Engine Hallway (E)"},/obj/cable{icon_state = "0-2"; d2 = 2},/obj/cable,/obj/cable{icon_state = "0-8"; d2 = 8},/turf/station/floor,/area/engine/engine_hallway) +"eb" = (/obj/machinery/igniter,/turf/station/engine/floor,/area/aux_engine) +"ec" = (/obj/machinery/atmoalter/siphs/scrubbers,/turf/station/engine/floor,/area/aux_engine) +"ed" = (/obj/machinery/atmoalter/siphs/scrubbers,/obj/window{icon_state = "rwindow"; dir = 4; reinf = 1},/turf/station/engine/floor,/area/aux_engine) +"ee" = (/obj/machinery/pipes{tag = ""; icon_state = "9"; p_dir = 9},/turf/station/floor,/area/aux_engine) +"ef" = (/obj/machinery/door_control{pixel_x = 28; pixel_y = 0; id = "aux1"},/turf/station/floor,/area/aux_engine) +"eg" = (/obj/window,/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/controlaccess) +"eh" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/controlaccess) +"ei" = (/obj/window,/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/controlaccess) +"ej" = (/obj/window,/turf/station/floor,/area/controlaccess) +"ek" = (/obj/window,/obj/machinery/light_switch{pixel_x = 24},/turf/station/floor,/area/controlaccess) +"el" = (/obj/window{dir = 8},/obj/window{dir = 4},/obj/grille,/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area) +"em" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table,/obj/item/weapon/clothing/gloves/yellow,/obj/item/weapon/storage/toolbox/electrical,/turf/station/floor,/area/engine/generator) +"en" = (/obj/table,/obj/item/weapon/clipboard,/obj/item/weapon/paper/engine{pixel_x = 4; pixel_y = 6},/obj/item/weapon/cell{charge = 100},/turf/station/floor,/area/engine/generator) +"eo" = (/obj/closet/emcloset,/turf/station/floor,/area/engine/generator) +"ep" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/firealarm{pixel_y = -32},/turf/station/floor,/area/engine/generator) +"eq" = (/obj/machinery/door/firedoor,/obj/machinery/door/window{icon = 'security.dmi'; dir = 2; access = "2020"},/turf/station/floor,/area/engine/generator) +"er" = (/obj/machinery/light_switch{pixel_y = 24},/turf/station/floor,/area/engine/engine_hallway) +"es" = (/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/engine/engine_hallway) +"et" = (/obj/machinery/door/window,/turf/station/floor,/area/engine/engine_hallway) +"eu" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/cable{icon_state = "1-4"; d1 = 1; d2 = 4},/turf/station/floor,/area/engine/engine_hallway) +"ev" = (/obj/machinery/door/airlock,/obj/landmark/alterations{name = "barrier"},/obj/cable{icon_state = "0-8"; d2 = 8},/obj/cable{icon_state = "0-4"; d2 = 4},/turf/station/floor,/area/engine/engine_hallway) +"ew" = (/obj/machinery/door/airlock{access = "2030"},/obj/landmark/alterations{name = "barrier"},/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/aux_engine) +"ex" = (/obj/window{icon_state = "rwindow"; dir = 1; reinf = 1},/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/aux_engine) +"ey" = (/obj/window{icon_state = "rwindow"; dir = 1; reinf = 1},/obj/cable{icon_state = "2-8"; d1 = 2; d2 = 8},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/aux_engine) +"ez" = (/obj/window{icon_state = "rwindow"; dir = 10; reinf = 1},/turf/station/floor,/area/aux_engine) +"eA" = (/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/floor,/area/aux_engine) +"eB" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/landmark{name = "CTF-wardrobe-CR"},/turf/station/floor,/area/controlaccess) +"eC" = (/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/landmark/alterations{name = "blobstart"; icon_state = "x3"},/turf/station/floor,/area/controlaccess) +"eD" = (/obj/machinery/computer/secure_data,/obj/machinery/light_switch{pixel_x = 0; pixel_y = 24},/turf/station/floor,/area/control_room) +"eE" = (/obj/machinery/computer/card,/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/control_room) +"eF" = (/obj/table,/obj/item/weapon/paper/Map,/obj/item/weapon/radio/intercom,/turf/station/floor,/area/control_room) +"eG" = (/obj/machinery/computer/communications,/turf/station/floor,/area/control_room) +"eH" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/paper/jobs,/obj/item/weapon/infra_sensor,/obj/machinery/camera{c_tag = "Control Room"},/turf/station/floor,/area/control_room) +"eI" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/paper/jobs,/obj/item/weapon/infra_sensor,/turf/station/floor,/area/control_room) +"eJ" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/radio,/obj/item/weapon/radio/signaler{freq = 140.9},/turf/station/floor,/area/control_room) +"eK" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/paper_bin,/turf/station/floor,/area/control_room) +"eL" = (/obj/table{icon_state = "corners"; dir = 5},/obj/window{icon_state = "rwindow"; dir = 4; reinf = 1},/turf/station/floor,/area/control_room) +"eM" = (/obj/window{dir = 4},/obj/window{dir = 8},/obj/grille,/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/control_room) +"eN" = (/obj/machinery/pipes{tag = ""; icon_state = "3"; p_dir = 3},/obj/item/weapon/wrench,/obj/machinery/alarm{pixel_x = -32},/turf/station/floor,/area/engine/generator) +"eO" = (/obj/watertank,/turf/station/floor,/area/engine/engine_hallway) +"eP" = (/obj/landmark/alterations{name = "Experimental Technology"},/turf/station/floor,/area/engine/engine_hallway) +"eQ" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/landmark/alterations{name = "Experimental Technology"},/turf/station/floor,/area/engine/engine_hallway) +"eR" = (/obj/landmark{name = "CTF-wardrobe-Engine"},/turf/station/floor,/area/engine/engine_hallway) +"eS" = (/obj/rack,/obj/item/weapon/clothing/suit/firesuit,/obj/item/weapon/clothing/under/black,/obj/item/weapon/clothing/mask/gasmask,/obj/item/weapon/radio/headset,/obj/item/weapon/clothing/shoes/black,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/glasses/sunglasses,/turf/station/floor,/area/engine/engine_hallway) +"eT" = (/obj/rack,/obj/item/weapon/clothing/suit/firesuit,/obj/item/weapon/clothing/under/black,/obj/item/weapon/clothing/mask/gasmask,/obj/item/weapon/radio/headset,/obj/item/weapon/clothing/shoes/black,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/glasses/sunglasses,/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/engine/engine_hallway) +"eU" = (/obj/table,/obj/item/weapon/storage/toolbox,/obj/item/weapon/crowbar,/obj/item/weapon/clothing/glasses/sunglasses,/turf/station/floor,/area/engine/engine_hallway) +"eV" = (/obj/item/weapon/extinguisher,/obj/window{dir = 4},/turf/station/floor,/area/engine/engine_hallway) +"eW" = (/obj/table,/obj/machinery/cell_charger,/turf/station/floor,/area/engine/engine_hallway) +"eX" = (/obj/item/weapon/extinguisher,/turf/station/floor,/area/engine/engine_hallway) +"eY" = (/obj/item/weapon/radio/intercom{pixel_x = -32},/turf/station/floor,/area/aux_engine) +"eZ" = (/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/aux_engine) +"fa" = (/obj/machinery/door/firedoor,/obj/machinery/door/window{icon = 'security.dmi'; dir = 2; access = "2020"},/turf/station/floor,/area/aux_engine) +"fb" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/landmark{name = "CTF-wardrobe-CR"},/turf/station/floor,/area/controlaccess) +"fc" = (/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/turf/station/floor,/area/controlaccess) +"fd" = (/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/controlaccess) +"fe" = (/turf/station/floor,/area/control_room) +"ff" = (/obj/stool/chair{dir = 1},/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/control_room) +"fg" = (/obj/stool/chair{dir = 1},/turf/station/floor,/area/control_room) +"fh" = (/obj/stool/chair{dir = 1},/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/turf/station/floor,/area/control_room) +"fi" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/pill_canister/antitoxin,/turf/station/floor,/area/control_room) +"fj" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/pen,/obj/window{icon_state = "rwindow"; dir = 4; reinf = 1},/turf/station/floor,/area/control_room) +"fk" = (/obj/machinery/camera{name = ""; icon_state = "blank"; dir = 4; network = "AS"; c_tag = "target scan 1"; invuln = 1},/turf/space,/area) +"fl" = (/obj/grille,/obj/window{icon_state = "rwindow"; dir = 1; reinf = 1},/obj/window{icon_state = "rwindow"; reinf = 1},/obj/machinery/junction,/turf/station/floor,/area/engine) +"fm" = (/obj/grille,/obj/window{icon_state = "rwindow"; reinf = 1},/obj/window{icon_state = "rwindow"; dir = 1; reinf = 1},/obj/machinery/junction,/turf/station/floor,/area/engine) +"fn" = (/obj/grille,/obj/window{icon_state = "rwindow"; reinf = 1},/obj/window{icon_state = "rwindow"; dir = 1; reinf = 1},/turf/station/floor,/area/engine) +"fo" = (/obj/machinery/door/window{dir = 8},/turf/station/floor,/area/engine/engine_hallway) +"fp" = (/obj/machinery/light_switch{pixel_x = -24},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/aux_engine) +"fq" = (/obj/table,/obj/item/weapon/storage/toolbox,/obj/item/weapon/crowbar,/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/obj/item/weapon/wrench,/turf/station/floor,/area/aux_engine) +"fr" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area/aux_engine) +"fs" = (/obj/machinery/door/window{dir = 8},/turf/station/floor,/area/controlaccess) +"ft" = (/obj/window{dir = 10},/obj/item/weapon/extinguisher,/turf/station/floor,/area/control_room) +"fu" = (/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/control_room) +"fv" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/control_room) +"fw" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/control_room) +"fx" = (/obj/stool/chair{dir = 4},/obj/start{name = "Head of Research"},/turf/station/floor,/area/control_room) +"fy" = (/obj/table,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/obj/item/weapon/clipboard,/obj/window{icon_state = "rwindow"; dir = 4; reinf = 1},/turf/station/floor,/area/control_room) +"fz" = (/turf/station/floor,/area/repair_bay) +"fA" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area/repair_bay) +"fB" = (/obj/machinery/alarm{pixel_y = 24},/obj/weldfueltank,/turf/station/floor,/area/repair_bay) +"fC" = (/obj/machinery/light_switch{pixel_x = 0; pixel_y = 24},/obj/item/weapon/storage/toolbox/electrical,/obj/item/weapon/clothing/gloves/yellow,/turf/station/floor,/area/repair_bay) +"fD" = (/obj/machinery/pipes/heat_exch{tag = ""; icon_state = "3"},/turf/station/engine/floor{oxygen = 3.6e+006; poison = 0; n2 = 0},/area/engine/combustion) +"fE" = (/obj/machinery/pipes/heat_exch{tag = ""; icon_state = "6"},/turf/station/engine/floor{oxygen = 3.6e+006; poison = 0; n2 = 0},/area/engine/combustion) +"fF" = (/obj/machinery/pipes/heat_exch,/turf/station/engine/floor{oxygen = 3.6e+006; poison = 0; n2 = 0},/area/engine/combustion) +"fG" = (/obj/machinery/pipes/heat_exch{tag = ""; icon_state = "10"},/turf/station/engine/floor{oxygen = 3.6e+006; poison = 0; n2 = 0},/area/engine/combustion) +"fH" = (/obj/machinery/door/poddoor{id = "ex"},/turf/station/floor,/area/engine/engine_control{linkarea = "engine/combustion"}) +"fI" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/door_control{pixel_x = 0; pixel_y = 28; id = "ex"},/turf/station/floor,/area/engine/engine_control{linkarea = "engine/combustion"}) +"fJ" = (/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/obj/machinery/alarm{pixel_y = 24},/turf/station/floor,/area/engine/engine_control{linkarea = "engine/combustion"}) +"fK" = (/obj/item/weapon/radio/intercom{pixel_y = 32},/turf/station/floor,/area/engine/engine_control{linkarea = "engine/combustion"}) +"fL" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/computer/engine,/turf/station/floor,/area/engine/engine_control{linkarea = "engine/combustion"}) +"fM" = (/obj/machinery/light_switch{pixel_y = 24},/turf/station/floor,/area/engine/engine_storage) +"fN" = (/turf/station/floor,/area/engine/engine_storage) +"fO" = (/obj/rack,/obj/item/weapon/clothing/suit/firesuit,/obj/item/weapon/clothing/under/black,/obj/item/weapon/clothing/mask/gasmask,/obj/item/weapon/radio/headset,/obj/item/weapon/clothing/shoes/black,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/glasses/meson,/obj/item/weapon/clothing/glasses/sunglasses,/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/engine/engine_storage) +"fP" = (/obj/machinery/firealarm{pixel_y = -32},/obj/item/weapon/storage/firstaid/regular,/obj/cable{icon_state = "2-4"; d1 = 2; d2 = 4},/obj/item/weapon/extinguisher,/turf/station/floor,/area/aux_engine) +"fQ" = (/obj/weldfueltank,/obj/machinery/power/apc,/obj/cable{icon_state = "0-4"; d2 = 4},/obj/cable{icon_state = "0-8"; d2 = 8},/obj/cable,/turf/station/floor,/area/aux_engine) +"fR" = (/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/obj/window{icon_state = "rwindow"; dir = 10; reinf = 1},/turf/station/floor,/area/aux_engine) +"fS" = (/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area/aux_engine) +"fT" = (/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/obj/machinery/atmoalter/canister/oxygencanister,/obj/machinery/firealarm{pixel_y = -32},/turf/station/floor,/area/aux_engine) +"fU" = (/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/obj/landmark/alterations{name = "blobstart"; icon_state = "x3"},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/floor,/area/aux_engine) +"fV" = (/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/controlaccess) +"fW" = (/obj/cable{icon_state = "0-2"; d2 = 2},/obj/cable{icon_state = "0-8"; d2 = 8},/obj/cable,/turf/station/floor,/area/controlaccess) +"fX" = (/obj/machinery/door/window,/turf/station/floor,/area/controlaccess) +"fY" = (/obj/landmark{name = "CTF-base-CR"},/turf/station/floor,/area/control_room) +"fZ" = (/obj/table,/obj/item/weapon/paper/jobs,/obj/item/weapon/storage/id_kit,/turf/station/floor,/area/control_room) +"ga" = (/obj/table,/obj/item/weapon/storage/toolbox,/obj/item/weapon/crowbar,/obj/item/weapon/clothing/glasses/sunglasses,/turf/station/floor,/area/control_room) +"gb" = (/obj/table,/turf/station/floor,/area/control_room) +"gc" = (/obj/stool/chair{dir = 4},/obj/start{name = "Captain"},/turf/station/floor,/area/control_room) +"gd" = (/obj/table,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/beacon,/obj/item/weapon/clipboard,/obj/window{icon_state = "rwindow"; dir = 4; reinf = 1},/turf/station/floor,/area/control_room) +"ge" = (/turf/station/floor{icon_state = "Floor1"; intact = 0; burnt = 1},/area/repair_bay) +"gf" = (/obj/machinery/door/airlock,/turf/station/floor{icon_state = "Floor1"; intact = 0; burnt = 1},/area/repair_bay) +"gg" = (/obj/landmark/alterations{name = "blobstart"; icon_state = "x3"},/obj/machinery/pod{dir = 8},/turf/station/floor{icon_state = "Floor1"; intact = 0; burnt = 1},/area/repair_bay) +"gh" = (/obj/machinery/camera{dir = 8; c_tag = "Pod repair bay"},/turf/station/floor,/area/repair_bay) +"gi" = (/obj/machinery/pipes/heat_exch{tag = ""; icon_state = "9"},/turf/station/engine/floor{oxygen = 3.6e+006; poison = 0; n2 = 0},/area/engine/combustion) +"gj" = (/obj/window{icon_state = "rwindow"; dir = 8; reinf = 1},/obj/window{icon_state = "rwindow"; dir = 1; reinf = 1},/turf/station/floor,/area/engine/engine_control{linkarea = "engine/combustion"}) +"gk" = (/obj/machinery/connector{tag = ""; suffix = ""},/obj/machinery/atmoalter/canister/poisoncanister{anchored = 1; c_status = 3},/turf/station/floor,/area/engine/engine_control{linkarea = "engine/combustion"}) +"gl" = (/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/engine/engine_control{linkarea = "engine/combustion"}) +"gm" = (/turf/station/floor,/area/engine/engine_control{linkarea = "engine/combustion"}) +"gn" = (/obj/machinery/door/firedoor,/obj/machinery/door/window{icon = 'security.dmi'; dir = 2; access = "2020"},/obj/machinery/light_switch{pixel_y = -24},/turf/station/floor,/area/engine/engine_control{linkarea = "engine/combustion"}) +"go" = (/obj/rack,/obj/item/weapon/clothing/suit/firesuit,/obj/item/weapon/clothing/under/black,/obj/item/weapon/clothing/mask/gasmask,/obj/item/weapon/radio/headset,/obj/item/weapon/clothing/shoes/black,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/glasses/meson,/obj/item/weapon/clothing/glasses/sunglasses,/turf/station/floor,/area/engine/engine_storage) +"gp" = (/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/turf/station/floor,/area/engine/engine_storage) +"gq" = (/obj/rack,/obj/item/weapon/clothing/suit/firesuit,/obj/item/weapon/clothing/under/black,/obj/item/weapon/clothing/mask/gasmask,/obj/item/weapon/radio/headset,/obj/item/weapon/clothing/shoes/black,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/glasses/sunglasses,/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/engine/engine_storage) +"gr" = (/obj/watertank,/turf/station/floor,/area/controlaccess) +"gs" = (/obj/window{dir = 4},/turf/station/floor,/area/controlaccess) +"gt" = (/obj/cable{icon_state = "1-4"; d1 = 1; d2 = 4},/turf/station/floor,/area/control_room) +"gu" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/control_room) +"gv" = (/obj/cable{icon_state = "2-8"; d1 = 2; d2 = 8},/turf/station/floor,/area/control_room) +"gw" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/turf/station/floor,/area/control_room) +"gx" = (/obj/stool/chair{dir = 4},/obj/start{name = "Head of Personnel"},/turf/station/floor,/area/control_room) +"gy" = (/obj/table,/obj/item/weapon/clipboard,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/beacon,/obj/window{icon_state = "rwindow"; dir = 4; reinf = 1},/turf/station/floor,/area/control_room) +"gz" = (/obj/item/weapon/storage/toolbox,/obj/item/weapon/crowbar,/turf/station/floor,/area/repair_bay) +"gA" = (/obj/machinery/gas_sensor{id = 1},/turf/station/engine/floor{oxygen = 3.6e+006; poison = 0; n2 = 0},/area/engine/combustion) +"gB" = (/obj/machinery/vent{tag = "2"; dir = 4; p_dir = 4},/turf/station/engine/floor{oxygen = 3.6e+006; poison = 0; n2 = 0},/area/engine/combustion) +"gC" = (/obj/machinery/pipes,/turf/station/engine/floor{oxygen = 3.6e+006; poison = 0; n2 = 0},/area/engine/combustion) +"gD" = (/obj/machinery/pipes,/obj/machinery/meter,/turf/station/engine/floor{oxygen = 3.6e+006; poison = 0; n2 = 0},/area/engine/combustion) +"gE" = (/obj/window{icon_state = "rwindow"; dir = 8; reinf = 1},/obj/machinery/valve{dir = 4},/turf/station/floor,/area/engine/engine_control{linkarea = "engine/combustion"}) +"gF" = (/obj/machinery/manifold{dir = 8},/turf/station/floor,/area/engine/engine_control{linkarea = "engine/combustion"}) +"gG" = (/obj/start{name = "Engineer"},/turf/station/floor,/area/engine/engine_control{linkarea = "engine/combustion"}) +"gH" = (/obj/closet/emcloset,/turf/station/floor,/area/tech_storage) +"gI" = (/obj/closet/emcloset,/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/tech_storage) +"gJ" = (/obj/closet/wardrobe/yellow,/turf/station/floor,/area/tech_storage) +"gK" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/storage/toolbox,/obj/item/weapon/clothing/glasses/meson,/turf/station/floor,/area/tech_storage) +"gL" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/storage/toolbox,/obj/item/weapon/clothing/glasses/meson,/obj/item/weapon/cell{charge = 100},/obj/item/weapon/cell{charge = 100},/turf/station/floor,/area/tech_storage) +"gM" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/glasses/sunglasses,/obj/item/weapon/clothing/ears/earmuffs,/obj/item/weapon/cell{charge = 100},/obj/item/weapon/cell{charge = 100},/obj/item/weapon/storage/toolbox/electrical,/obj/item/weapon/clothing/gloves/black,/turf/station/floor,/area/tech_storage) +"gN" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/glasses/sunglasses,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/clothing/ears/earmuffs,/turf/station/floor,/area/tech_storage) +"gO" = (/obj/machinery/alarm{pixel_y = -32},/turf/station/floor,/area/controlaccess) +"gP" = (/obj/cable,/obj/cable{icon_state = "0-4"; d2 = 4},/obj/cable{icon_state = "0-2"; d2 = 2},/turf/station/floor,/area/controlaccess) +"gQ" = (/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/obj/machinery/light_switch{pixel_y = -24},/turf/station/floor,/area/controlaccess) +"gR" = (/obj/window{dir = 4},/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/controlaccess) +"gS" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/paper/sop,/obj/item/weapon/paper/Internal,/obj/item/weapon/infra,/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/control_room) +"gT" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/paper/Internal,/obj/item/weapon/radio/signaler,/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/obj/item/weapon/paper/engine{pixel_x = 4; pixel_y = 6},/turf/station/floor,/area/control_room) +"gU" = (/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/control_room) +"gV" = (/obj/stool/chair,/obj/cable{icon_state = "0-2"; d2 = 2},/obj/cable{icon_state = "0-8"; d2 = 8},/obj/cable,/turf/station/floor,/area/control_room) +"gW" = (/obj/stool/chair,/turf/station/floor,/area/control_room) +"gX" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/syringe,/turf/station/floor,/area/control_room) +"gY" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/bottle/s_tox,/obj/window{icon_state = "rwindow"; dir = 4; reinf = 1},/turf/station/floor,/area/control_room) +"gZ" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/radio/intercom{pixel_x = -32},/obj/item/weapon/extinguisher,/turf/station/floor,/area/repair_bay) +"ha" = (/obj/cable{icon_state = "2-4"; d1 = 2; d2 = 4},/turf/station/floor,/area/repair_bay) +"hb" = (/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/cable{icon_state = "0-8"; d2 = 8},/obj/machinery/power/apc{dir = 4},/turf/station/floor,/area/repair_bay) +"hc" = (/obj/machinery/pipes/heat_exch{tag = ""; icon_state = "5"},/turf/station/engine/floor{oxygen = 3.6e+006; poison = 0; n2 = 0},/area/engine/combustion) +"hd" = (/obj/window{icon_state = "rwindow"; dir = 8; reinf = 1},/turf/station/floor,/area/engine/engine_control{linkarea = "engine/combustion"}) +"he" = (/obj/machinery/connector{tag = ""; icon_state = "connector"; dir = 1; p_dir = 1},/turf/station/floor,/area/engine/engine_control{linkarea = "engine/combustion"}) +"hf" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/engine/engine_control{linkarea = "engine/combustion"}) +"hg" = (/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/floor,/area/engine/engine_control{linkarea = "engine/combustion"}) +"hh" = (/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/engine/engine_hallway) +"hi" = (/obj/machinery/door/window{dir = 4},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/engine/engine_storage) +"hj" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/camera{dir = 4; c_tag = "Technician Office"},/obj/landmark/alterations{name = "blobstart"; icon_state = "x3"},/turf/station/floor,/area/tech_storage) +"hk" = (/obj/start{name = "Station Technician"},/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/tech_storage) +"hl" = (/turf/station/floor,/area/tech_storage) +"hm" = (/obj/stool,/turf/station/floor,/area/tech_storage) +"hn" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/radio/intercom{pixel_x = 32},/turf/station/floor,/area/tech_storage) +"ho" = (/obj/machinery/door/firedoor,/obj/landmark/alterations{name = "barrier"},/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/controlaccess) +"hp" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/paper/courtroom,/turf/station/floor,/area/control_room) +"hq" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/paper/Toxin,/obj/item/weapon/paper/Map,/obj/item/weapon/timer,/obj/item/weapon/t_scanner,/turf/station/floor,/area/control_room) +"hr" = (/obj/landmark{name = "CTF-supply-CR"},/obj/cable{icon_state = "2-4"; d1 = 2; d2 = 4},/turf/station/floor,/area/control_room) +"hs" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/paper/jobs,/obj/manifest,/obj/cable,/obj/machinery/power/apc{cell_type = 2},/obj/cable{icon_state = "0-8"; d2 = 8},/turf/station/floor,/area/control_room) +"ht" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/card/id,/obj/machinery/firealarm{pixel_y = -32},/turf/station/floor,/area/control_room) +"hu" = (/obj/machinery/computer/airtunnel,/turf/station/floor,/area/control_room) +"hv" = (/obj/machinery/computer/engine,/turf/station/floor,/area/control_room) +"hw" = (/obj/table{icon_state = "corners"; dir = 10},/obj/machinery/recharger,/turf/station/floor,/area/control_room) +"hx" = (/obj/table{icon_state = "corners"; dir = 6},/obj/window{icon_state = "rwindow"; dir = 4; reinf = 1},/turf/station/floor,/area/control_room) +"hy" = (/obj/machinery/door/airlock,/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/repair_bay) +"hz" = (/obj/machinery/atmoalter/siphs/scrubbers,/turf/station/floor,/area/engine/engine_control{linkarea = "engine/combustion"}) +"hA" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/weldfueltank,/turf/station/floor,/area/engine/engine_storage) +"hB" = (/obj/item/weapon/storage/backpack,/turf/station/floor,/area/engine/engine_storage) +"hC" = (/obj/machinery/atmoalter/canister/oxygencanister,/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/engine/engine_storage) +"hD" = (/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/obj/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/apc{dir = 8},/obj/cable{icon_state = "0-4"; d2 = 4},/turf/station/floor,/area/tech_storage) +"hE" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/cable{icon_state = "1-8"; d1 = 1; d2 = 8},/turf/station/floor,/area/tech_storage) +"hF" = (/obj/start{name = "Technical Assistant"},/obj/machinery/light_switch{pixel_y = -24},/turf/station/floor,/area/tech_storage) +"hG" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/tech_storage) +"hH" = (/obj/weldfueltank,/turf/station/floor,/area/tech_storage) +"hI" = (/obj/machinery/door/window{dir = 4},/obj/landmark/alterations{name = "barrier"},/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/controlaccess) +"hJ" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 4; access = "4400"},/obj/machinery/light_switch{pixel_x = -24},/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/control_room) +"hK" = (/obj/grille,/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area) +"hL" = (/obj/machinery/door/poddoor,/turf/station/engine/floor,/area/escapezone) +"hM" = (/obj/machinery/mass_driver{dir = 8},/obj/item/weapon/tank/oxygentank,/turf/station/engine/floor,/area/escapezone) +"hN" = (/obj/machinery/door/window,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/engine/floor,/area/escapezone) +"hO" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/escapezone) +"hP" = (/obj/machinery/computer/pod{name = "Mass Driver"},/turf/station/floor,/area/escapezone) +"hQ" = (/obj/grille,/obj/machinery/door/poddoor{name = "hatch"; icon_state = "pdoor0"; opacity = 0; density = 0; id = "ex2"},/turf/station/engine/floor{oxygen = 3.6e+006; poison = 0; n2 = 0},/area/engine/combustion) +"hR" = (/obj/table{icon_state = "alone"},/obj/item/weapon/clipboard,/obj/item/weapon/wrench,/obj/item/weapon/screwdriver,/obj/item/weapon/analyzer,/turf/station/floor,/area/engine/engine_control{linkarea = "engine/combustion"}) +"hS" = (/obj/machinery/atmoalter/siphs/scrubbers,/obj/machinery/camera{dir = 8; c_tag = "Engine Control"},/obj/cable{icon_state = "2-4"; d1 = 2; d2 = 4},/turf/station/floor,/area/engine/engine_control{linkarea = "engine/combustion"}) +"hT" = (/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/wall,/area/engine) +"hU" = (/obj/landmark/alterations{name = "Security Locker"},/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/engine/engine_hallway) +"hV" = (/obj/closet/emcloset,/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/engine/engine_hallway) +"hW" = (/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/storage/toolbox,/obj/item/weapon/igniter,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/obj/item/weapon/crowbar,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/toolbox/electrical,/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/obj/item/weapon/cell{icon_state = "hpcell"; charge = 100; maxcharge = 5000},/obj/item/weapon/cell{icon_state = "hpcell"; charge = 100; maxcharge = 5000},/turf/station/floor,/area/engine/engine_storage) +"hX" = (/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/storage/toolbox,/obj/item/weapon/igniter,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/obj/item/weapon/crowbar,/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/engine/engine_storage) +"hY" = (/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/storage/toolbox,/obj/item/weapon/igniter,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/obj/item/weapon/crowbar,/obj/item/weapon/clipboard,/obj/machinery/power/apc{dir = 4},/obj/cable,/obj/landmark/alterations{name = "blobstart"; icon_state = "x3"},/obj/cable{icon_state = "0-8"; d2 = 8},/turf/station/floor,/area/engine/engine_storage) +"hZ" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/tech_storage) +"ia" = (/obj/grille,/obj/window,/obj/window{dir = 1},/turf/station/floor,/area) +"ib" = (/obj/machinery/alarm{pixel_y = 24},/turf/station/floor,/area/controlaccess) +"ic" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 4; access = "4400"},/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/secure_storage) +"id" = (/obj/table,/obj/item/weapon/card/id/captains_spare,/obj/machinery/door/window{icon = 'security.dmi'; dir = 4; access = "4400"},/obj/landmark{name = "Nuclear-Disk"},/turf/station/floor,/area/secure_storage) +"ie" = (/obj/machinery/atmoalter/canister/poisoncanister{t_status = 1; t_per = 100000},/turf/station/floor,/area) +"if" = (/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/escapezone) +"ig" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/escapezone) +"ih" = (/obj/item/weapon/hand_tele,/obj/grille,/turf/station/engine/floor{oxygen = 3.6e+006; poison = 0; n2 = 0},/area/engine/combustion) +"ii" = (/turf/station/engine/floor{oxygen = 3.6e+006; poison = 0; n2 = 0},/area/engine/combustion) +"ij" = (/obj/grille,/obj/window{icon_state = "rwindow"; dir = 10; reinf = 1},/turf/station/floor,/area/engine/engine_control{linkarea = "engine/combustion"}) +"ik" = (/obj/machinery/door_control{pixel_x = 0; pixel_y = 28; id = "ex2"},/turf/station/floor,/area/engine/engine_control{linkarea = "engine/combustion"}) +"il" = (/obj/closet/wardrobe/yellow,/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/engine/engine_control{linkarea = "engine/combustion"}) +"im" = (/obj/item/weapon/radio/intercom{pixel_x = -32},/turf/station/floor,/area/engine/engine_hallway) +"in" = (/obj/weldfueltank,/turf/station/floor,/area/engine/engine_hallway) +"io" = (/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/obj/machinery/alarm{pixel_y = 24},/turf/station/floor,/area/controlaccess) +"ip" = (/obj/machinery/door/window,/obj/machinery/light_switch{pixel_y = -24},/turf/station/floor,/area/controlaccess) +"iq" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/computer/security,/obj/machinery/alarm{pixel_y = 24},/turf/station/floor,/area/secure_storage) +"ir" = (/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/secure_storage) +"is" = (/obj/machinery/light_switch{pixel_x = 0; pixel_y = 24},/turf/station/floor,/area/secure_storage) +"it" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/stool/bed,/obj/item/weapon/bedsheet,/turf/station/floor,/area/secure_storage) +"iu" = (/obj/item/weapon/ammo/a357,/turf/station/floor,/area) +"iv" = (/obj/machinery/door/poddoor{id = 2},/turf/station/engine/floor,/area/escapezone) +"iw" = (/obj/machinery/mass_driver{dir = 8; id = 2},/obj/machinery/pod,/turf/station/engine/floor,/area/escapezone) +"ix" = (/obj/machinery/computer/pod{id = 2},/turf/station/floor,/area/escapezone) +"iy" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area/escapezone) +"iz" = (/obj/machinery/computer/engine,/turf/station/floor,/area/escapezone) +"iA" = (/obj/machinery/computer/communications,/turf/station/floor,/area/escapezone) +"iB" = (/obj/grille,/turf/station/engine/floor{oxygen = 3.6e+006; poison = 0; n2 = 0},/area/engine/combustion) +"iC" = (/obj/machinery/gas_sensor{id = 2},/turf/station/engine/floor{oxygen = 3.6e+006; poison = 0; n2 = 0},/area/engine/combustion) +"iD" = (/obj/grille,/obj/window{icon_state = "rwindow"; dir = 10; reinf = 1},/obj/machinery/pipes,/obj/machinery/meter,/turf/station/floor,/area/engine/engine_control{linkarea = "engine/combustion"}) +"iE" = (/obj/machinery/connector{dir = 8; p_dir = 8},/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area/engine/engine_control{linkarea = "engine/combustion"}) +"iF" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/cable{icon_state = "1-4"; d1 = 1; d2 = 4},/turf/station/floor,/area/engine/engine_control{linkarea = "engine/combustion"}) +"iG" = (/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/engine/engine_control{linkarea = "engine/combustion"}) +"iH" = (/obj/machinery/power/apc{dir = 4; cell_type = 2},/obj/cable{icon_state = "0-2"; d2 = 2},/obj/cable{icon_state = "0-8"; d2 = 8},/obj/cable,/obj/item/weapon/extinguisher,/turf/station/floor,/area/engine/engine_control{linkarea = "engine/combustion"}) +"iI" = (/obj/table,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/fire,/turf/station/floor,/area/engine/engine_hallway) +"iJ" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/controlaccess) +"iK" = (/obj/machinery/power/monitor,/turf/station/floor,/area/secure_storage) +"iL" = (/turf/station/floor,/area/secure_storage) +"iM" = (/obj/secloset/captains,/turf/station/floor,/area/secure_storage) +"iN" = (/obj/machinery/camera{dir = 4; c_tag = "Escape Pod Bay"},/obj/cable{icon_state = "1-4"; d1 = 1; d2 = 4},/turf/station/floor,/area/escapezone) +"iO" = (/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/escapezone) +"iP" = (/obj/machinery/door/window,/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/escapezone) +"iQ" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/escapezone) +"iR" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/cable{icon_state = "2-8"; d1 = 2; d2 = 8},/turf/station/floor,/area/escapezone) +"iS" = (/obj/machinery/igniter,/turf/station/engine/floor{oxygen = 3.6e+006; poison = 0; n2 = 0},/area/engine/combustion) +"iT" = (/obj/machinery/computer/engine{id = 2},/turf/station/floor,/area/engine/engine_control{linkarea = "engine/combustion"}) +"iU" = (/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/obj/machinery/computer/atmosphere/siphonswitch{otherarea = "engine/combustion"},/turf/station/floor,/area/engine/engine_control{linkarea = "engine/combustion"}) +"iV" = (/obj/table,/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/toxin,/turf/station/floor,/area/engine/engine_hallway) +"iW" = (/obj/watertank,/turf/station/floor,/area/hallways/labaccess) +"iX" = (/obj/cable{icon_state = "2-4"; d1 = 2; d2 = 4},/turf/station/floor,/area/hallways/labaccess) +"iY" = (/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/hallways/labaccess) +"iZ" = (/obj/machinery/door/window,/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/hallways/labaccess) +"ja" = (/obj/cable,/obj/cable{icon_state = "0-8"; d2 = 8},/obj/cable{icon_state = "0-4"; d2 = 4},/turf/station/floor,/area/controlaccess) +"jb" = (/obj/cable{icon_state = "0-8"; d2 = 8},/obj/cable{icon_state = "0-4"; d2 = 4},/obj/cable{icon_state = "0-2"; d2 = 2},/turf/station/floor,/area/controlaccess) +"jc" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/controlaccess) +"jd" = (/obj/cable{icon_state = "0-4"; d2 = 4},/obj/cable{icon_state = "0-8"; d2 = 8},/obj/cable,/obj/machinery/power/apc,/turf/station/floor,/area/controlaccess) +"je" = (/obj/machinery/camera{dir = 4; c_tag = "Secure Storage"},/obj/landmark/alterations{name = "Security Locker"},/obj/cable{icon_state = "0-2"; d2 = 2},/obj/cable,/obj/cable{icon_state = "0-8"; d2 = 8},/turf/station/floor,/area/secure_storage) +"jf" = (/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/secure_storage) +"jg" = (/obj/secloset/highsec,/turf/station/floor,/area/secure_storage) +"jh" = (/obj/machinery/door/poddoor{id = 3},/turf/station/engine/floor,/area/escapezone) +"ji" = (/obj/machinery/mass_driver{dir = 8; id = 3},/obj/machinery/pod{id = 3},/turf/station/engine/floor,/area/escapezone) +"jj" = (/obj/machinery/computer/pod{id = 3},/turf/station/floor,/area/escapezone) +"jk" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/radio/intercom{pixel_x = -32},/turf/station/floor,/area/escapezone) +"jl" = (/turf/station/floor,/area/escapezone) +"jm" = (/obj/cable,/obj/machinery/power/apc{dir = 4},/obj/cable{icon_state = "0-2"; d2 = 2},/turf/station/floor,/area/escapezone) +"jn" = (/obj/item/weapon/gun/revolver,/obj/grille,/turf/station/engine/floor{oxygen = 3.6e+006; poison = 0; n2 = 0},/area/engine/combustion) +"jo" = (/obj/machinery/atmoalter/siphs/fullairsiphon,/turf/station/engine/floor{oxygen = 3.6e+006; poison = 0; n2 = 0},/area/engine/combustion) +"jp" = (/obj/machinery/injector{dir = 4},/turf/station/wall,/area/engine/engine_control{linkarea = "engine/combustion"}) +"jq" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/alarm{pixel_y = -32},/turf/station/floor,/area/engine/engine_control{linkarea = "engine/combustion"}) +"jr" = (/obj/machinery/firealarm{pixel_y = -32},/turf/station/floor,/area/engine/engine_control{linkarea = "engine/combustion"}) +"js" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area/engine/engine_control{linkarea = "engine/combustion"}) +"jt" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/dispenser,/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/engine/engine_control{linkarea = "engine/combustion"}) +"ju" = (/turf/station/floor,/area/hallways/labaccess) +"jv" = (/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/hallways/labaccess) +"jw" = (/obj/machinery/light_switch{pixel_x = 24},/turf/station/floor,/area/hallways/labaccess) +"jx" = (/obj/landmark/alterations{name = "Security Locker"},/obj/cable,/obj/machinery/power/apc{dir = 8},/obj/cable{icon_state = "0-4"; d2 = 4},/obj/cable{icon_state = "0-2"; d2 = 2},/turf/station/floor,/area/secure_storage) +"jy" = (/obj/cable{icon_state = "1-8"; d1 = 1; d2 = 8},/turf/station/floor,/area/secure_storage) +"jz" = (/obj/landmark/alterations{name = "blobstart"; icon_state = "x3"},/turf/station/floor,/area) +"jA" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/escapezone) +"jB" = (/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/obj/cable{icon_state = "2-4"; d1 = 2; d2 = 4},/turf/station/floor,/area/escapezone) +"jC" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/cable{icon_state = "1-8"; d1 = 1; d2 = 8},/turf/station/floor,/area/escapezone) +"jD" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/landmark/alterations{name = "blobstart"; icon_state = "x3"},/turf/station/floor,/area/hallways/labaccess) +"jE" = (/obj/machinery/firealarm{pixel_x = 32},/turf/station/floor,/area/hallways/labaccess) +"jF" = (/obj/weldfueltank,/turf/station/floor,/area/toolstorage) +"jG" = (/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/storage/backpack,/obj/item/weapon/crowbar,/obj/item/weapon/clothing/gloves/black,/turf/station/floor,/area/toolstorage) +"jH" = (/obj/item/weapon/infra,/obj/item/weapon/timer,/obj/cable,/obj/machinery/power/apc{dir = 4},/obj/cable{icon_state = "0-2"; d2 = 2},/turf/station/floor,/area/toolstorage) +"jI" = (/obj/table{icon_state = "sides"; dir = 2},/obj/bedsheetbin,/turf/station/floor,/area/toolstorage) +"jJ" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/paper_bin{amount = 50},/obj/item/weapon/wrapping_paper,/turf/station/floor,/area/toolstorage) +"jK" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/storage/gl_kit,/obj/item/weapon/t_scanner,/turf/station/floor,/area/toolstorage) +"jL" = (/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/clipboard,/obj/item/weapon/clipboard,/obj/item/weapon/clipboard,/obj/item/weapon/clipboard,/turf/station/floor,/area/toolstorage) +"jM" = (/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/cable_coil,/turf/station/floor,/area/toolstorage) +"jN" = (/obj/item/weapon/sheet/metal{amount = 5},/turf/station/floor,/area/toolstorage) +"jO" = (/obj/machinery/autolathe,/turf/station/floor,/area) +"jP" = (/obj/item/weapon/radio/intercom{pixel_x = -32},/obj/landmark/alterations{name = "Security Locker"},/obj/cable{icon_state = "1-4"; d1 = 1; d2 = 4},/turf/station/floor,/area/secure_storage) +"jQ" = (/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/secure_storage) +"jR" = (/obj/cable{icon_state = "2-8"; d1 = 2; d2 = 8},/turf/station/floor,/area/secure_storage) +"jS" = (/obj/item/weapon/storage/handcuff_kit,/turf/station/floor,/area/secure_storage) +"jT" = (/turf/station/floor,/area) +"jU" = (/obj/machinery/door/poddoor{id = 4},/turf/station/engine/floor,/area/escapezone) +"jV" = (/obj/machinery/mass_driver{dir = 8; id = 4},/obj/machinery/pod,/turf/station/engine/floor,/area/escapezone) +"jW" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/light_switch{pixel_y = -24},/turf/station/floor,/area/escapezone) +"jX" = (/obj/machinery/computer/pod{id = 4},/turf/station/floor,/area/escapezone) +"jY" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/landmark/alterations{name = "blobstart"; icon_state = "x3"},/turf/station/floor,/area/escapezone) +"jZ" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/light_switch{pixel_y = -24},/obj/cable,/obj/cable{icon_state = "0-2"; d2 = 2},/obj/cable{icon_state = "0-4"; d2 = 4},/turf/station/floor,/area/escapezone) +"ka" = (/obj/item/weapon/extinguisher,/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/escapezone) +"kb" = (/obj/machinery/door/airlock,/obj/landmark/alterations{name = "barrier"},/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/escapezone) +"kc" = (/obj/machinery/door/airlock,/obj/landmark/alterations{name = "barrier"},/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/engine/engine_hallway) +"kd" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/light_switch{pixel_y = -24},/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/engine/engine_hallway) +"ke" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/engine/engine_hallway) +"kf" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/light_switch{pixel_y = -24},/obj/cable,/obj/cable{icon_state = "0-4"; d2 = 4},/obj/cable{icon_state = "0-8"; d2 = 8},/turf/station/floor,/area/engine/engine_hallway) +"kg" = (/obj/machinery/door/firedoor,/obj/machinery/door/window{icon = 'security.dmi'; dir = 2; access = "2000"},/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/engine/engine_hallway) +"kh" = (/obj/machinery/alarm{pixel_y = -32},/obj/landmark/alterations{name = "blobstart"; icon_state = "x3"},/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/engine/engine_hallway) +"ki" = (/obj/cable{icon_state = "0-2"; d2 = 2},/obj/cable{icon_state = "0-4"; d2 = 4},/obj/cable{icon_state = "0-8"; d2 = 8},/turf/station/wall,/area) +"kj" = (/obj/cable,/obj/cable{icon_state = "0-2"; d2 = 2},/obj/cable{icon_state = "0-8"; d2 = 8},/turf/station/floor,/area/hallways/labaccess) +"kk" = (/obj/table,/obj/item/weapon/storage/toolbox,/obj/item/weapon/crowbar,/obj/item/weapon/clothing/glasses/meson,/obj/item/weapon/clothing/glasses/sunglasses,/obj/item/weapon/clothing/ears/earmuffs,/turf/station/floor,/area/toolstorage) +"kl" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/infra_sensor,/turf/station/floor,/area/toolstorage) +"km" = (/obj/item/weapon/timer,/obj/item/weapon/radio/beacon,/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/toolstorage) +"kn" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/camera{c_tag = "Supply Room"},/obj/item/weapon/storage/firstaid/regular,/obj/machinery/light_switch{pixel_x = 0; pixel_y = 24},/turf/station/floor,/area/toolstorage) +"ko" = (/obj/item/weapon/timer,/obj/item/weapon/crowbar,/turf/station/floor,/area/toolstorage) +"kp" = (/obj/item/weapon/radio/signaler,/turf/station/floor,/area/toolstorage) +"kq" = (/obj/item/weapon/crowbar,/turf/station/floor,/area/toolstorage) +"kr" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/infra,/obj/item/weapon/radio/signaler,/obj/item/weapon/cell{icon_state = "hpcell"; charge = 100; maxcharge = 5000},/turf/station/floor,/area/toolstorage) +"ks" = (/obj/item/weapon/igniter,/obj/item/weapon/radio/signaler,/turf/station/floor,/area/toolstorage) +"kt" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/turf/station/floor,/area/toolstorage) +"ku" = (/obj/item/weapon/igniter,/obj/item/weapon/crowbar,/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/turf/station/floor,/area/toolstorage) +"kv" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/infra,/obj/item/weapon/radio/beacon,/obj/landmark/alterations{name = "blobstart"; icon_state = "x3"},/turf/station/floor,/area/toolstorage) +"kw" = (/obj/machinery/door/false_wall,/turf/station/floor,/area) +"kx" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/closet/emcloset,/turf/station/floor,/area/secure_storage) +"ky" = (/obj/closet/emcloset,/turf/station/floor,/area/secure_storage) +"kz" = (/obj/closet/emcloset,/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/secure_storage) +"kA" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/closet/emcloset,/turf/station/floor,/area/secure_storage) +"kB" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/hallways/labaccess) +"kC" = (/obj/machinery/door/firedoor,/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/hallways/labaccess) +"kD" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/toolstorage) +"kE" = (/obj/item/weapon/infra_sensor,/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/toolstorage) +"kF" = (/obj/item/weapon/sheet/glass,/obj/item/weapon/sheet/glass,/obj/item/weapon/sheet/glass,/obj/item/weapon/sheet/glass,/obj/item/weapon/igniter,/obj/item/weapon/storage/backpack,/turf/station/floor,/area/toolstorage) +"kG" = (/obj/item/weapon/sheet/glass,/obj/item/weapon/sheet/glass,/obj/item/weapon/sheet/glass,/obj/item/weapon/sheet/glass,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/turf/station/floor,/area/toolstorage) +"kH" = (/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/beacon,/turf/station/floor,/area/toolstorage) +"kI" = (/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/handcuffs,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/turf/station/floor,/area/toolstorage) +"kJ" = (/obj/item/weapon/sheet/metal,/obj/item/weapon/sheet/metal,/obj/item/weapon/handcuffs,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/timer,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/turf/station/floor,/area/toolstorage) +"kK" = (/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/storage/toolbox/electrical,/turf/station/floor,/area/toolstorage) +"kL" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/closet{name = "coffin"},/turf/station/floor,/area/chapel) +"kM" = (/obj/closet{name = "coffin"},/turf/station/floor,/area/chapel) +"kN" = (/obj/machinery/light_switch{pixel_x = 0; pixel_y = 24},/turf/station/floor,/area/chapel) +"kO" = (/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/turf/station/floor,/area/chapel) +"kP" = (/turf/station/floor,/area/chapel) +"kQ" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/landmark/alterations{name = "blobstart"; icon_state = "x3"},/turf/station/floor,/area/chapel) +"kR" = (/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area) +"kS" = (/obj/landmark/alterations{name = "blob-directive"; icon_state = "x3"},/turf/station/floor,/area) +"kT" = (/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/hallways/labaccess) +"kU" = (/obj/machinery/door/window{dir = 4},/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/toolstorage) +"kV" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table{icon_state = "corners"; dir = 5},/turf/station/floor,/area/hallways/eastairlock) +"kW" = (/obj/stool/chair,/turf/station/floor,/area/hallways/eastairlock) +"kX" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/hallways/eastairlock) +"kY" = (/turf/station/floor,/area/hallways/eastairlock) +"kZ" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/hallways/eastairlock) +"la" = (/obj/stool/chair{dir = 8},/turf/station/floor,/area/hallways/eastairlock) +"lb" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/stool/chair{dir = 8},/turf/station/floor,/area/hallways/eastairlock) +"lc" = (/obj/machinery/camera{name = ""; icon_state = "blank"; dir = 4; network = "AS"; c_tag = "target scan 4"; invuln = 1},/turf/space,/area) +"ld" = (/obj/machinery/door,/turf/station/floor,/area/morgue) +"le" = (/obj/window{dir = 1},/obj/window,/obj/grille,/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/medical) +"lf" = (/obj/cable{icon_state = "2-4"; d1 = 2; d2 = 4},/turf/station/wall,/area) +"lg" = (/obj/cable{icon_state = "1-8"; d1 = 1; d2 = 8},/turf/station/wall,/area) +"lh" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/hallways/labaccess) +"li" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/hallways/centralhall) +"lj" = (/turf/station/floor,/area/hallways/centralhall) +"lk" = (/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/hallways/centralhall) +"ll" = (/obj/machinery/alarm{pixel_y = 24},/turf/station/floor,/area/hallways/centralhall) +"lm" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/hallways/centralhall) +"ln" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/hallways/eastairlock) +"lo" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/paper/courtroom,/turf/station/floor,/area/hallways/eastairlock) +"lp" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/radio,/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/hallways/eastairlock) +"lq" = (/obj/machinery/computer/pod{name = "Burial"; id = "chap1"; time = 60},/turf/station/floor{icon_state = "Floor3"},/area/chapel) +"lr" = (/obj/machinery/door,/turf/station/floor,/area/chapel) +"ls" = (/obj/morgue,/turf/station/floor,/area/morgue) +"lt" = (/turf/station/floor,/area/morgue) +"lu" = (/obj/landmark/alterations{name = "Experimental Technology"},/turf/station/floor,/area/medical) +"lv" = (/obj/item/weapon/flasks/coolant,/obj/item/weapon/flasks/oxygen,/obj/item/weapon/flasks/plasma,/turf/station/floor,/area/medical) +"lw" = (/obj/window{dir = 4},/obj/closet/wardrobe/white,/turf/station/floor,/area/medical) +"lx" = (/obj/secloset/medical1,/turf/station/floor,/area/medical) +"ly" = (/obj/machinery/computer/med_data,/turf/station/floor,/area/medical) +"lz" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/paper/Toxin,/obj/item/weapon/pen,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/dropper,/obj/item/weapon/pill_canister/cough,/obj/item/weapon/pill_canister/epilepsy,/turf/station/floor,/area/medical) +"lA" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/syringe,/obj/item/weapon/clipboard,/obj/item/weapon/radio,/turf/station/floor,/area/medical) +"lB" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/syringe,/obj/item/weapon/bottle/rejuvenators,/obj/machinery/camera{c_tag = "Medical Bay"},/turf/station/floor,/area/medical) +"lC" = (/obj/table{icon_state = "alone"},/obj/item/weapon/healthanalyzer,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/bottle/antitoxins,/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/medical) +"lD" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/storage/firstaid/toxin,/turf/station/floor,/area/medical) +"lE" = (/obj/table{icon_state = "sides"},/obj/item/weapon/storage/firstaid/fire,/turf/station/floor,/area/medical) +"lF" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/medical) +"lG" = (/obj/machinery/alarm{pixel_y = 24},/obj/closet/wardrobe/white,/turf/station/floor,/area/toxinlab) +"lH" = (/obj/closet/l3closet,/turf/station/floor,/area/toxinlab) +"lI" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area/toxinlab) +"lJ" = (/obj/machinery/atmoalter/canister/anesthcanister,/turf/station/floor,/area/toxinlab) +"lK" = (/obj/machinery/computer/med_data,/turf/station/floor,/area/toxinlab) +"lL" = (/obj/machinery/firealarm{pixel_y = 32},/turf/station/floor,/area/toxinlab) +"lM" = (/obj/machinery/computer/atmosphere/siphonswitch,/obj/machinery/camera{c_tag = "Medical Lab"},/turf/station/floor,/area/toxinlab) +"lN" = (/obj/secloset/medical1,/turf/station/floor,/area/toxinlab) +"lO" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/paper/Toxin,/obj/item/weapon/clothing/gloves/latex,/obj/item/weapon/clothing/mask/surgical,/obj/item/weapon/pen,/obj/item/weapon/clipboard,/turf/station/floor,/area/toxinlab) +"lP" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/bottle/s_tox,/obj/item/weapon/bottle/r_epil,/obj/item/weapon/bottle/r_ch_cough,/obj/item/weapon/dropper,/turf/station/floor,/area/toxinlab) +"lQ" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/syringe,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/bottle/s_tox,/obj/item/weapon/pill_canister/Tourette,/obj/item/weapon/pill_canister/epilepsy,/turf/station/floor,/area/toxinlab) +"lR" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/storage/firstaid/toxin,/turf/station/floor,/area/toxinlab) +"lS" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/paper_bin,/turf/station/floor,/area/toxinlab) +"lT" = (/obj/machinery/alarm,/turf/station/floor,/area/hallways/labaccess) +"lU" = (/obj/cable,/obj/cable{icon_state = "0-4"; d2 = 4},/obj/cable{icon_state = "0-2"; d2 = 2},/turf/station/floor,/area/hallways/labaccess) +"lV" = (/obj/machinery/door/window,/obj/landmark/alterations{name = "barrier"},/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/hallways/labaccess) +"lW" = (/obj/cable{icon_state = "0-4"; d2 = 4},/obj/cable{icon_state = "0-8"; d2 = 8},/obj/cable{icon_state = "0-2"; d2 = 2},/turf/station/floor,/area/hallways/centralhall) +"lX" = (/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/hallways/centralhall) +"lY" = (/obj/cable,/obj/cable{icon_state = "0-4"; d2 = 4},/obj/cable{icon_state = "0-8"; d2 = 8},/turf/station/floor,/area/hallways/centralhall) +"lZ" = (/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/hallways/centralhall) +"ma" = (/obj/machinery/door/window,/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/hallways/centralhall) +"mb" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/hallways/centralhall) +"mc" = (/obj/cable{icon_state = "0-2"; d2 = 2},/obj/cable{icon_state = "0-8"; d2 = 8},/obj/cable{icon_state = "0-4"; d2 = 4},/turf/station/floor,/area/hallways/centralhall) +"md" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/hallways/centralhall) +"me" = (/obj/machinery/door/firedoor,/obj/machinery/door/window,/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/hallways/eastairlock) +"mf" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/hallways/eastairlock) +"mg" = (/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/hallways/eastairlock) +"mh" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/cable{icon_state = "0-2"; d2 = 2},/obj/cable{icon_state = "0-8"; d2 = 8},/obj/cable,/turf/station/floor,/area/hallways/eastairlock) +"mi" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/hallways/eastairlock) +"mj" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/stool/chair{dir = 8},/turf/station/floor,/area/hallways/eastairlock) +"mk" = (/obj/grille,/obj/window{icon_state = "rwindow"; dir = 4; reinf = 1},/turf/station/floor,/area) +"ml" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/table{icon_state = "sides"; dir = 4},/obj/window{icon_state = "rwindow"; dir = 8; reinf = 1},/turf/station/floor{icon_state = "Floor3"},/area/chapel) +"mm" = (/turf/station/floor{icon_state = "Floor3"},/area/chapel) +"mn" = (/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/turf/station/floor{icon_state = "Floor3"},/area/chapel) +"mo" = (/obj/stool/chair{dir = 8},/turf/station/floor{icon_state = "Floor3"},/area/chapel) +"mp" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor{icon_state = "Floor3"},/area/chapel) +"mq" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/morgue) +"mr" = (/obj/machinery/freezer,/turf/station/floor,/area/medical) +"ms" = (/obj/machinery/pipes/flexipipe,/turf/station/floor,/area/medical) +"mt" = (/obj/machinery/cryo_cell,/turf/station/floor,/area/medical) +"mu" = (/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/medical) +"mv" = (/obj/landmark/alterations{name = "recharger"},/turf/station/floor,/area/medical) +"mw" = (/turf/station/floor,/area/medical) +"mx" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/medical) +"my" = (/obj/stool/chair,/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/medical) +"mz" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/medical) +"mA" = (/obj/item/weapon/brutepack,/obj/item/weapon/ointment,/obj/item/weapon/ointment,/turf/station/floor,/area/medical) +"mB" = (/obj/machinery/door/firedoor,/obj/grille,/obj/window{icon_state = "rwindow"; dir = 8; reinf = 1},/obj/window{icon_state = "rwindow"; dir = 4; reinf = 1},/obj/cable{icon_state = "0-2"; d2 = 2},/turf/station/floor,/area/toxinlab) +"mC" = (/turf/station/floor,/area/toxinlab) +"mD" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/toxinlab) +"mE" = (/obj/stool/chair,/turf/station/floor,/area/toxinlab) +"mF" = (/obj/machinery/camera{dir = 4; c_tag = "Central Hallway"},/turf/station/floor,/area/hallways/labaccess) +"mG" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/hallways/centralhall) +"mH" = (/obj/machinery/light_switch{pixel_y = -24},/turf/station/floor,/area/hallways/centralhall) +"mI" = (/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/hallways/eastairlock) +"mJ" = (/obj/machinery/camera{dir = 8; c_tag = "Assembly Room"},/obj/item/weapon/radio/intercom{pixel_x = 32},/turf/station/floor,/area/hallways/eastairlock) +"mK" = (/obj/table{icon_state = "sides"; dir = 4},/obj/window{icon_state = "rwindow"; dir = 8; reinf = 1},/turf/station/floor{icon_state = "Floor3"},/area/chapel) +"mL" = (/obj/stool/chair{dir = 4},/turf/station/floor{icon_state = "Floor3"},/area/chapel) +"mM" = (/obj/table{icon_state = "alone"},/obj/item/weapon/paper{name = "Service"; pixel_x = 16; pixel_y = 16; info = "I am the resurrection and the life, saith the Lord: he that believeth in me, though he were dead, yet shall he live: and whosoever liveth and believeth in me shall never die.

    S. John 11. 25, 26"},/turf/station/floor{icon_state = "Floor3"},/area/chapel) +"mN" = (/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/turf/station/floor,/area/medical) +"mO" = (/obj/window{dir = 4},/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/medical) +"mP" = (/obj/cable,/obj/cable{icon_state = "0-2"; d2 = 2},/obj/cable{icon_state = "0-4"; d2 = 4},/turf/station/floor,/area/medical) +"mQ" = (/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/medical) +"mR" = (/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/medical) +"mS" = (/obj/stool/chair{dir = 8},/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/medical) +"mT" = (/obj/machinery/door/firedoor,/obj/grille,/obj/window{icon_state = "rwindow"; dir = 8; reinf = 1},/obj/window{icon_state = "rwindow"; dir = 4; reinf = 1},/obj/cable{icon_state = "0-8"; d2 = 8},/obj/cable{icon_state = "0-4"; d2 = 4},/obj/cable,/obj/cable{icon_state = "0-2"; d2 = 2},/turf/station/floor,/area/toxinlab) +"mU" = (/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/toxinlab) +"mV" = (/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/toxinlab) +"mW" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/landmark/alterations{name = "blobstart"; icon_state = "x3"},/obj/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/apc{dir = 4},/obj/cable{icon_state = "0-8"; d2 = 8},/turf/station/floor,/area/toxinlab) +"mX" = (/obj/machinery/power/apc{dir = 4},/obj/cable{icon_state = "0-2"; d2 = 2},/turf/station/floor,/area/hallways/labaccess) +"mY" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/hallways/centralhall) +"mZ" = (/obj/machinery/alarm{pixel_y = 24},/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/floor,/area/oxygen_storage) +"na" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/oxygen_storage) +"nb" = (/obj/machinery/dispenser,/turf/station/floor,/area/oxygen_storage) +"nc" = (/obj/machinery/dispenser,/obj/machinery/camera{c_tag = "Toxin Gas Storage"},/turf/station/floor,/area/oxygen_storage) +"nd" = (/obj/cable{icon_state = "0-4"; d2 = 4},/obj/cable{icon_state = "0-2"; d2 = 2},/obj/cable,/turf/station/floor,/area/oxygen_storage) +"ne" = (/obj/cable{icon_state = "0-8"; d2 = 8},/obj/machinery/power/apc{dir = 1},/turf/station/floor,/area/oxygen_storage) +"nf" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/oxygen_storage) +"ng" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area/oxygen_storage) +"nh" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table{icon_state = "corners"; dir = 9},/turf/station/floor,/area/hallways/eastairlock) +"ni" = (/obj/table{icon_state = "corners"; dir = 5},/turf/station/floor,/area/hallways/eastairlock) +"nj" = (/obj/table{icon_state = "corners"; dir = 9},/turf/station/floor,/area/hallways/eastairlock) +"nk" = (/obj/window{dir = 8},/turf/station/floor,/area/hallways/eastairlock) +"nl" = (/obj/window,/turf/space,/area) +"nm" = (/obj/grille,/obj/window,/obj/window{icon_state = "rwindow"; dir = 4; reinf = 1},/turf/station/floor,/area) +"nn" = (/obj/table{icon_state = "sides"; dir = 4},/obj/window,/obj/window{icon_state = "rwindow"; dir = 8; reinf = 1},/turf/station/floor{icon_state = "Floor3"},/area/chapel) +"no" = (/obj/window,/turf/station/floor{icon_state = "Floor3"},/area/chapel) +"np" = (/obj/machinery/door/window{dir = 4},/turf/station/floor{icon_state = "Floor3"},/area/chapel) +"nq" = (/obj/machinery/camera{dir = 8; c_tag = "Chapel"},/turf/station/floor{icon_state = "Floor3"},/area/chapel) +"nr" = (/obj/machinery/camera{dir = 8; c_tag = "Morgue"},/turf/station/floor,/area/morgue) +"ns" = (/obj/machinery/sleeper,/turf/station/floor,/area/medical) +"nt" = (/obj/machinery/computer/sleep_console,/turf/station/floor,/area/medical) +"nu" = (/obj/start{name = "Medical Doctor"},/turf/station/floor,/area/medical) +"nv" = (/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/medical) +"nw" = (/obj/machinery/firealarm{pixel_x = 32},/obj/stool/chair{dir = 8},/turf/station/floor,/area/medical) +"nx" = (/obj/machinery/door/firedoor,/obj/grille,/obj/window{icon_state = "rwindow"; dir = 8; reinf = 1},/obj/window{icon_state = "rwindow"; dir = 4; reinf = 1},/obj/cable,/turf/station/floor,/area/toxinlab) +"ny" = (/obj/machinery/light_switch{pixel_y = -24},/turf/station/floor,/area/toxinlab) +"nz" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/firealarm{pixel_y = -32},/turf/station/floor,/area/toxinlab) +"nA" = (/obj/item/weapon/radio/intercom{pixel_y = -32},/turf/station/floor,/area/toxinlab) +"nB" = (/obj/window,/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/toxinlab) +"nC" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/toxinlab) +"nD" = (/obj/machinery/door/window{dir = 8},/turf/station/floor,/area/toxinlab) +"nE" = (/obj/window,/obj/secloset/medical2,/turf/station/floor,/area/toxinlab) +"nF" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/window,/turf/station/floor,/area/toxinlab) +"nG" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/window,/turf/station/floor,/area/toxinlab) +"nH" = (/obj/window,/obj/cable{icon_state = "1-4"; d1 = 1; d2 = 4},/turf/station/floor,/area/toxinlab) +"nI" = (/obj/cable{icon_state = "0-2"; d2 = 2},/obj/cable{icon_state = "0-4"; d2 = 4},/obj/cable{icon_state = "0-8"; d2 = 8},/obj/cable,/turf/station/wall,/area) +"nJ" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/hallways/labaccess) +"nK" = (/obj/cable{icon_state = "0-2"; d2 = 2},/obj/cable,/obj/cable{icon_state = "0-8"; d2 = 8},/obj/cable{icon_state = "0-4"; d2 = 4},/turf/station/floor,/area/hallways/labaccess) +"nL" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/cable{icon_state = "1-8"; d1 = 1; d2 = 8},/turf/station/floor,/area/hallways/labaccess) +"nM" = (/obj/machinery/alarm{pixel_y = 24},/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/hallways/centralhall) +"nN" = (/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/floor,/area/oxygen_storage) +"nO" = (/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/turf/station/floor,/area/oxygen_storage) +"nP" = (/turf/station/floor,/area/oxygen_storage) +"nQ" = (/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/oxygen_storage) +"nR" = (/obj/machinery/atmoalter/canister/n2canister,/turf/station/floor,/area/oxygen_storage) +"nS" = (/obj/stool/chair{dir = 1},/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/hallways/eastairlock) +"nT" = (/obj/stool/chair{dir = 1},/turf/station/floor,/area/hallways/eastairlock) +"nU" = (/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/hallways/eastairlock) +"nV" = (/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/turf/station/floor,/area/hallways/eastairlock) +"nW" = (/obj/machinery/door/poddoor{name = "Burial lock"; id = "chap1"},/turf/station/floor{icon_state = "Floor1"; intact = 0},/area) +"nX" = (/turf/station/floor{icon_state = "Floor1"; intact = 0},/area) +"nY" = (/turf/station/floor{icon_state = "Floor1"; intact = 0},/area/chapel) +"nZ" = (/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/turf/station/floor{icon_state = "Floor1"; intact = 0},/area/chapel) +"oa" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor{icon_state = "Floor1"; intact = 0},/area/chapel) +"ob" = (/obj/machinery/mass_driver{dir = 8; id = "chap1"},/obj/machinery/door/window,/turf/station/floor{icon_state = "Floor1"; intact = 0},/area/chapel) +"oc" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/morgue) +"od" = (/obj/landmark{name = "CTF-supply-Medical"},/turf/station/floor,/area/medical) +"oe" = (/obj/machinery/door/window,/turf/station/floor,/area/medical) +"of" = (/obj/landmark{name = "CTF-base-Medical"},/turf/station/floor,/area/medical) +"og" = (/obj/stool/chair{dir = 8},/turf/station/floor,/area/medical) +"oh" = (/obj/window{dir = 1},/turf/station/floor,/area/toxinlab) +"oi" = (/obj/window{dir = 4},/obj/secloset/animal,/turf/station/floor,/area/toxinlab) +"oj" = (/obj/window{dir = 1},/obj/window{dir = 8},/obj/machinery/dna_scanner,/turf/station/floor,/area/toxinlab) +"ok" = (/obj/window{dir = 1},/obj/machinery/scan_console,/turf/station/floor,/area/toxinlab) +"ol" = (/obj/window{dir = 1},/obj/machinery/computer/dna,/turf/station/floor,/area/toxinlab) +"om" = (/obj/window{dir = 1},/obj/machinery/restruct,/turf/station/floor,/area/toxinlab) +"on" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/card/data{name = "SE-Scan"; function = "dna_scan"; special = "SE"},/obj/item/weapon/card/data{name = "SI-Scan"; function = "dna_scan"; special = "SI"},/obj/item/weapon/card/data{name = "UE-Scan"; function = "dna_scan"; special = "UE"},/obj/item/weapon/card/data{name = "UI-Scan"; function = "dna_scan"; special = "UI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Scan"},/turf/station/floor,/area/toxinlab) +"oo" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/cable,/obj/machinery/power/apc{dir = 8},/obj/cable{icon_state = "0-2"; d2 = 2},/turf/station/floor,/area/hallways/centralhall) +"op" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/atmoalter/canister/n2canister,/turf/station/floor,/area/oxygen_storage) +"oq" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/atmoalter/canister/n2canister,/turf/station/floor,/area/oxygen_storage) +"or" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/landmark/alterations{name = "blobstart"; icon_state = "x3"},/turf/station/floor,/area/hallways/eastairlock) +"os" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/hallways/eastairlock) +"ot" = (/obj/machinery/light_switch{pixel_y = -24},/turf/station/floor,/area/hallways/eastairlock) +"ou" = (/obj/table{icon_state = "corners"; dir = 9},/obj/window{dir = 8},/turf/station/floor,/area/hallways/eastairlock) +"ov" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table{icon_state = "sides"; dir = 1},/turf/station/floor,/area/hallways/eastairlock) +"ow" = (/obj/window{dir = 1},/turf/space,/area) +"ox" = (/obj/grille,/obj/window{dir = 1},/obj/window{icon_state = "rwindow"; dir = 4; reinf = 1},/turf/station/floor,/area) +"oy" = (/obj/table{icon_state = "sides"; dir = 4},/obj/window{dir = 1},/obj/window{icon_state = "rwindow"; dir = 8; reinf = 1},/turf/station/floor{icon_state = "Floor3"},/area/chapel) +"oz" = (/obj/window{dir = 1},/obj/window{dir = 1},/turf/station/floor{icon_state = "Floor3"},/area/chapel) +"oA" = (/obj/window{dir = 1},/turf/station/floor{icon_state = "Floor3"},/area/chapel) +"oB" = (/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/turf/station/floor,/area/morgue) +"oC" = (/obj/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc,/turf/station/floor,/area/morgue) +"oD" = (/obj/machinery/light_switch{pixel_y = -24},/obj/cable{icon_state = "2-8"; d1 = 2; d2 = 8},/turf/station/floor,/area/morgue) +"oE" = (/obj/landmark/alterations{name = "Experimental Technology"},/obj/window{dir = 4},/turf/station/floor,/area/medical) +"oF" = (/obj/start{name = "Medical Assistant"},/turf/station/floor,/area/medical) +"oG" = (/obj/item/weapon/storage/toolbox,/turf/station/floor,/area/medical) +"oH" = (/obj/machinery/door/firedoor,/obj/machinery/door/window{icon = 'security.dmi'; access = "1300"},/turf/station/floor,/area/medical) +"oI" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/door/window{icon = 'security.dmi'; access = "1300"},/turf/station/floor,/area/toxinlab) +"oJ" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/toxinlab) +"oK" = (/obj/window,/turf/station/floor,/area/toxinlab) +"oL" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 4; access = "1100"},/turf/station/floor,/area/toxinlab) +"oM" = (/obj/start{name = "Medical Researcher"},/obj/window,/turf/station/floor,/area/toxinlab) +"oN" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/window,/turf/station/floor,/area/toxinlab) +"oO" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/toxinlab) +"oP" = (/obj/machinery/door/window,/turf/station/floor,/area/toxinlab) +"oQ" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/card/data{name = "Data-Trunicate"; function = "data_trun"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Add"; function = "data_add"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Scramble"; function = "data_scramble"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Input"; function = "data_input"; data = "12"; special = null},/obj/item/weapon/storage/disk_kit/disks2{name = "Data-Controllers"},/turf/station/floor,/area/toxinlab) +"oR" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/hallways/labaccess) +"oS" = (/obj/cable,/obj/cable{icon_state = "0-2"; d2 = 2},/obj/cable{icon_state = "0-4"; d2 = 4},/turf/station/floor,/area/hallways/labaccess) +"oT" = (/obj/machinery/firealarm{pixel_x = 32},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/hallways/labaccess) +"oU" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/cable{icon_state = "1-8"; d1 = 1; d2 = 8},/turf/station/floor,/area/hallways/centralhall) +"oV" = (/obj/watertank,/turf/station/floor,/area/oxygen_storage) +"oW" = (/obj/machinery/light_switch{pixel_y = -24},/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/oxygen_storage) +"oX" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/hallways/eastairlock) +"oY" = (/obj/machinery/door/window{dir = 8},/obj/cable,/obj/machinery/power/apc{dir = 4},/obj/cable{icon_state = "0-2"; d2 = 2},/turf/station/floor,/area/hallways/eastairlock) +"oZ" = (/obj/stool/chair{dir = 4},/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/turf/station/floor{icon_state = "Floor3"},/area/chapel) +"pa" = (/obj/table{icon_state = "sides"; dir = 8},/obj/table{icon_state = "alone"},/obj/item/weapon/paper{name = "Service"; pixel_x = 16; pixel_y = 16; info = "

    We brought nothing into this world, and it is certain we can carry nothing out. The Lord gave, and the Lord hath taken away; blessed be the name of the Lord.

    Tim. 6. 7. Job 1. 21.

    As it was in the beginning, is now, and worlds without end. Amen."},/turf/station/floor{icon_state = "Floor3"},/area/chapel) +"pb" = (/obj/cable{icon_state = "0-4"; d2 = 4},/obj/cable{icon_state = "0-2"; d2 = 2},/obj/cable,/turf/station/wall,/area) +"pc" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/cable{icon_state = "2-8"; d1 = 2; d2 = 8},/turf/station/floor,/area/medical) +"pd" = (/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/cable{icon_state = "2-4"; d1 = 2; d2 = 4},/turf/station/floor,/area/medical) +"pe" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/landmark/alterations{name = "id computer"},/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/medical) +"pf" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/medical) +"pg" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/medical) +"ph" = (/obj/machinery/light_switch{pixel_y = -24},/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/medical) +"pi" = (/obj/cable,/obj/cable{icon_state = "0-2"; d2 = 2},/obj/cable{icon_state = "0-8"; d2 = 8},/turf/station/floor,/area/medical) +"pj" = (/obj/machinery/alarm{pixel_y = -32},/obj/machinery/atmoalter/canister/n2canister,/turf/station/floor,/area/medical) +"pk" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area/medical) +"pl" = (/obj/machinery/atmoalter/siphs/scrubbers,/turf/station/floor,/area) +"pm" = (/mob/monkey,/turf/station/floor,/area/toxinlab) +"pn" = (/obj/window{dir = 8},/obj/window{dir = 1},/obj/machinery/atmoalter/canister/anesthcanister,/turf/station/floor,/area/toxinlab) +"po" = (/obj/item/weapon/card/data{name = "M-conv-H"; function = "worthless"; data = "SBSWAVVWFWVAZSFBS"; special = "human"},/obj/item/weapon/card/data{name = "H-conv-M"; function = "worthless"; data = "CDAFNSDHE"; special = "monkey"},/obj/window{dir = 1},/turf/station/floor,/area/toxinlab) +"pp" = (/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/turf/station/floor,/area/toxinlab) +"pq" = (/obj/item/weapon/storage/disk_kit/disks,/turf/station/floor,/area/toxinlab) +"pr" = (/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/hallways/centralhall) +"ps" = (/obj/start{name = "Research Technician"},/turf/station/floor,/area/hallways/centralhall) +"pt" = (/obj/machinery/door/airlock,/turf/station/floor,/area/testlab1) +"pu" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/hallways/eastairlock) +"pv" = (/obj/machinery/door/firedoor,/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/hallways/eastairlock) +"pw" = (/obj/closet,/turf/station/floor,/area/hallways/eastairlock) +"px" = (/obj/machinery/alarm{pixel_y = 24},/turf/station/floor,/area/chapel) +"py" = (/obj/machinery/firealarm{pixel_y = 32},/turf/station/floor,/area/chapel) +"pz" = (/obj/cable{icon_state = "0-2"; d2 = 2},/obj/cable,/obj/machinery/power/apc{dir = 4},/turf/station/floor,/area/chapel) +"pA" = (/obj/landmark{name = "CTF-wardrobe-Medical"},/obj/cable{icon_state = "1-4"; d1 = 1; d2 = 4},/turf/station/floor,/area/medical) +"pB" = (/obj/landmark{name = "CTF-wardrobe-Medical"},/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/medical) +"pC" = (/obj/window{dir = 4},/obj/cable,/obj/machinery/power/apc,/obj/cable{icon_state = "0-8"; d2 = 8},/turf/station/floor,/area/medical) +"pD" = (/obj/stool/bed,/turf/station/floor,/area/medical) +"pE" = (/obj/stool/bed,/obj/item/weapon/radio/intercom{pixel_y = -32},/turf/station/floor,/area/medical) +"pF" = (/obj/machinery/atmoalter/siphs/scrubbers/port,/turf/station/floor,/area/medical) +"pG" = (/obj/machinery/door/firedoor,/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/medical) +"pH" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/medical) +"pI" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/turf/station/floor,/area/toxinlab) +"pJ" = (/obj/sp_start{name = "gooddoggytreat"; desc = "Monkey in Med. Lab."; special = 3},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/toxinlab) +"pK" = (/obj/machinery/firealarm{pixel_y = -32},/obj/window{dir = 8},/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area/toxinlab) +"pL" = (/obj/item/weapon/card/data{name = "DNA-help"; function = "dna_seq"},/turf/station/floor,/area/toxinlab) +"pM" = (/obj/item/weapon/card/data{name = "C-Help"; function = "dna_help"},/turf/station/floor,/area/toxinlab) +"pN" = (/obj/item/weapon/card/data{name = "M-Mutate"; function = "data_mutate"; data = "14A"; special = ""},/obj/item/weapon/card/data{name = "S-Mutate"; function = "data_mutate"; data = "CDE"; special = ""},/obj/item/weapon/card/data{name = "A-Mutate"; function = "data_mutate"; data = "AEC"; special = ""},/turf/station/floor,/area/toxinlab) +"pO" = (/obj/start{name = "Research Assistant"},/turf/station/floor,/area/hallways/centralhall) +"pP" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/closet/l3closet,/turf/station/floor,/area/testlab1) +"pQ" = (/turf/station/floor,/area/testlab1) +"pR" = (/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/testlab1) +"pS" = (/obj/table,/obj/item/weapon/storage/toolbox,/obj/item/weapon/clothing/glasses/sunglasses,/turf/station/floor,/area/testlab1) +"pT" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/igniter,/obj/item/weapon/radio/signaler,/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/obj/item/weapon/pen,/turf/station/floor,/area/testlab1) +"pU" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/igniter,/obj/item/weapon/radio/signaler,/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/pill_canister/antitoxin,/turf/station/floor,/area/testlab1) +"pV" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/atmoalter/heater{heatrate = 1.5e+006},/turf/station/floor,/area/testlab1) +"pW" = (/obj/machinery/light_switch{pixel_x = 0; pixel_y = 24},/turf/station/floor,/area/hallways/eastairlock) +"pX" = (/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/obj/machinery/door/firedoor,/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/chapel) +"pY" = (/obj/machinery/door/window{dir = 4},/obj/landmark/alterations{name = "barrier"},/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/medical) +"pZ" = (/obj/machinery/door/window{dir = 8},/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/medical) +"qa" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "UI-Replace"; function = "dna_replace"; special = "UI"},/obj/item/weapon/card/data{name = "UE-Replace"; function = "dna_replace"; special = "UE"},/obj/item/weapon/card/data{name = "SE-Replace"; function = "dna_replace"; special = "SE"},/obj/item/weapon/card/data{name = "SI-Replace"; function = "dna_replace"; special = "SI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Replace"},/turf/station/floor,/area/toxinlab) +"qb" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "Disk-Display"; function = "disk_dis"; data = ""; special = null},/obj/item/weapon/card/data{name = "Disk-Erase"; function = "disk_erase"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Disk-Copy"; function = "disk_copy"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Clear"; function = "data_clear"; data = "12"; special = null},/obj/item/weapon/storage/disk_kit/disks2{name = "Disk-Controllers"},/turf/station/floor,/area/toxinlab) +"qc" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "UE-Human"; data = "493DB249EB6D13236100A37000800AB71"},/obj/item/weapon/card/data{name = "SI-Human"; data = "5BDFE293BA5500F9FFFD500AAFFE"},/obj/item/weapon/card/data{name = "SE-Human"; data = "CDE375C9A6C25A7DBDA50EC05AC6CEB63"},/obj/item/weapon/storage/disk_kit/disks2{name = "Human DNA"},/turf/station/floor,/area/toxinlab) +"qd" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "SE-Monkey"; data = "CDEAF5B90AADBC6BA8033DB0A7FD613FA"},/obj/item/weapon/card/data{name = "SI-Monkey"; data = "2B6696D2B127E5A4"},/obj/item/weapon/card/data{name = "UE-Monkey"; data = "C8FFFE7EC09D80AEDEDB9A5A0B4085B61"},/obj/item/weapon/storage/disk_kit/disks2{name = "Monkey DNA"},/turf/station/floor,/area/toxinlab) +"qe" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "SE-Add"; function = "dna_add"; special = "SE"},/obj/item/weapon/card/data{name = "SI-Add"; function = "dna_add"; special = "SI"},/obj/item/weapon/card/data{name = "UE-Add"; function = "dna_add"; special = "UE"},/obj/item/weapon/card/data{name = "UI-Add"; function = "dna_add"; special = "UI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Add"},/turf/station/floor,/area/toxinlab) +"qf" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "UE-Trunicate"; function = "dna_trun"; data = "32"; special = "UE"},/obj/item/weapon/card/data{name = "SI-Trunicate"; function = "dna_trun"; data = "16"; special = "SI"},/obj/item/weapon/card/data{name = "SE-Trunicate"; function = "dna_trun"; data = "32"; special = "SE"},/obj/item/weapon/card/data{name = "UI-Trunicate"; function = "dna_trun"; data = "12"; special = "UI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Trunicate"},/turf/station/floor,/area/toxinlab) +"qg" = (/obj/machinery/door/window,/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/hallways/centralhall) +"qh" = (/obj/machinery/door/airlock{access = "1300"},/turf/station/floor,/area/hallways/centralhall) +"qi" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/testlab1) +"qj" = (/obj/item/weapon/clipboard,/turf/station/floor,/area/testlab1) +"qk" = (/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/turf/station/floor,/area/testlab1) +"ql" = (/obj/machinery/light_switch{pixel_x = 24},/turf/station/floor,/area/testlab1) +"qm" = (/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/hallways/eastairlock) +"qn" = (/obj/machinery/camera{name = ""; icon_state = "blank"; dir = 4; network = "AS"; c_tag = "target scan 2"; invuln = 1},/turf/space,/area) +"qo" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/station_teleport) +"qp" = (/obj/machinery/alarm{pixel_y = 24},/turf/station/floor,/area/station_teleport) +"qq" = (/turf/station/floor,/area/station_teleport) +"qr" = (/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/turf/station/floor,/area/station_teleport) +"qs" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/radio/intercom{pixel_x = 32; freq = 140.2},/turf/station/floor,/area/station_teleport) +"qt" = (/obj/secloset/personal,/turf/station/floor,/area/crew_quarters) +"qu" = (/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/crew_quarters) +"qv" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/secloset/personal,/turf/station/floor,/area/crew_quarters) +"qw" = (/obj/machinery/alarm{pixel_y = 24},/obj/secloset/personal,/turf/station/floor,/area/crew_quarters) +"qx" = (/obj/machinery/computer/card,/turf/station/floor,/area/hallways/loungehall) +"qy" = (/turf/station/floor,/area/hallways/loungehall) +"qz" = (/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/hallways/loungehall) +"qA" = (/obj/closet/emcloset,/turf/station/floor,/area/hallways/loungehall) +"qB" = (/obj/machinery/atmoalter/siphs/scrubbers,/turf/station/floor,/area/hallways/loungehall) +"qC" = (/obj/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/apc{dir = 1},/obj/cable{icon_state = "0-4"; d2 = 4},/turf/station/floor,/area/hallways/loungehall) +"qD" = (/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/testlab1) +"qE" = (/obj/item/weapon/radio/intercom{pixel_x = 32; freq = 140.4},/turf/station/floor,/area/testlab1) +"qF" = (/obj/machinery/atmoalter/siphs/scrubbers/port,/turf/station/floor,/area/hallways/eastairlock) +"qG" = (/obj/machinery/camera{dir = 4; c_tag = "Teleporter"},/turf/station/floor,/area/station_teleport) +"qH" = (/obj/machinery/computer/teleporter,/turf/station/floor,/area/station_teleport) +"qI" = (/obj/machinery/teleport/station,/turf/station/floor,/area/station_teleport) +"qJ" = (/obj/machinery/teleport/hub,/turf/station/floor,/area/station_teleport) +"qK" = (/obj/machinery/door/airlock{access = "4000"},/turf/station/floor,/area/station_teleport) +"qL" = (/turf/station/floor,/area/crew_quarters) +"qM" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/crew_quarters) +"qN" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent{tag = "dbg"},/turf/station/floor,/area/crew_quarters) +"qO" = (/obj/machinery/firealarm{pixel_x = 32},/turf/station/floor,/area/crew_quarters) +"qP" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/hallways/loungehall) +"qQ" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/hallways/loungehall) +"qR" = (/obj/item/weapon/storage/toolbox,/obj/item/weapon/crowbar,/obj/machinery/atmoalter/canister/n2canister,/turf/station/floor,/area/hallways/loungehall) +"qS" = (/obj/machinery/alarm{pixel_y = 24},/turf/station/floor,/area/hallways/loungehall) +"qT" = (/obj/machinery/firealarm{pixel_y = 32},/turf/station/floor,/area/hallways/loungehall) +"qU" = (/obj/item/weapon/storage/toolbox,/turf/station/floor,/area/hallways/loungehall) +"qV" = (/obj/machinery/firealarm{pixel_x = 0; pixel_y = 32},/turf/station/floor,/area/hallways/loungehall) +"qW" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/hallways/loungehall) +"qX" = (/obj/item/weapon/radio/intercom{pixel_y = 32; freq = 140},/turf/station/floor,/area/hallways/labaccess) +"qY" = (/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/turf/station/floor,/area/hallways/labaccess) +"qZ" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/hallways/centralhall) +"ra" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 8; cell_type = 2},/obj/cable{icon_state = "0-2"; d2 = 2},/turf/station/floor,/area/testlab1) +"rb" = (/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/testlab1) +"rc" = (/obj/cable{icon_state = "0-8"; d2 = 8},/obj/cable,/obj/cable{icon_state = "0-4"; d2 = 4},/turf/station/floor,/area/testlab1) +"rd" = (/obj/start{name = "Toxin Researcher"},/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/testlab1) +"re" = (/obj/machinery/door/firedoor,/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/testlab1) +"rf" = (/obj/machinery/door/airlock{access = "1300"},/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/hallways/eastairlock) +"rg" = (/obj/machinery/door/firedoor,/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/hallways/eastairlock) +"rh" = (/obj/cable,/obj/cable{icon_state = "0-4"; d2 = 4},/obj/cable{icon_state = "0-2"; d2 = 2},/obj/cable{icon_state = "0-8"; d2 = 8},/turf/station/floor,/area/hallways/eastairlock) +"ri" = (/obj/cable{icon_state = "2-8"; d1 = 2; d2 = 8},/turf/station/floor,/area/hallways/eastairlock) +"rj" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table{icon_state = "alone"},/obj/item/weapon/hand_tele,/obj/item/weapon/radio/beacon,/obj/item/weapon/radio/signaler,/turf/station/floor,/area/station_teleport) +"rk" = (/obj/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{cell_type = 0},/turf/station/floor,/area/station_teleport) +"rl" = (/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/station_teleport) +"rm" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/light_switch{pixel_y = -24},/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/station_teleport) +"rn" = (/obj/cable{icon_state = "0-2"; d2 = 2},/obj/cable{icon_state = "0-4"; d2 = 4},/obj/cable{icon_state = "0-8"; d2 = 8},/turf/station/floor,/area/crew_quarters) +"ro" = (/obj/cable,/obj/cable{icon_state = "0-8"; d2 = 8},/obj/cable{icon_state = "0-4"; d2 = 4},/turf/station/floor,/area/crew_quarters) +"rp" = (/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/crew_quarters) +"rq" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/crew_quarters) +"rr" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/crew_quarters) +"rs" = (/obj/machinery/door/firedoor,/obj/machinery/door/window,/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/crew_quarters) +"rt" = (/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/hallways/loungehall) +"ru" = (/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/obj/cable{icon_state = "0-2"; d2 = 2},/obj/cable,/obj/cable{icon_state = "0-8"; d2 = 8},/turf/station/floor,/area/hallways/loungehall) +"rv" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area/hallways/loungehall) +"rw" = (/obj/machinery/atmoalter/siphs/fullairsiphon/port,/turf/station/floor,/area/hallways/loungehall) +"rx" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/atmoalter/siphs/scrubbers/port,/turf/station/floor,/area/hallways/loungehall) +"ry" = (/obj/machinery/light_switch{pixel_x = 24},/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/hallways/labaccess) +"rz" = (/obj/machinery/light_switch{pixel_x = -24},/obj/cable{icon_state = "1-8"; d1 = 1; d2 = 8},/turf/station/floor,/area/testlab1) +"rA" = (/obj/machinery/camera{dir = 8; c_tag = "Toxin Research Lab"},/obj/item/weapon/extinguisher,/turf/station/floor,/area/testlab1) +"rB" = (/obj/cable,/obj/machinery/power/apc,/turf/station/floor,/area/hallways/eastairlock) +"rC" = (/obj/machinery/atmoalter/siphs/fullairsiphon/port,/turf/station/floor,/area/hallways/eastairlock) +"rD" = (/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/crew_quarters) +"rE" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 4; access = "4400"},/turf/station/floor,/area/crew_quarters) +"rF" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 4; access = "4400"},/obj/machinery/light_switch{pixel_x = -24},/turf/station/floor,/area/crew_quarters) +"rG" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/cable{icon_state = "1-4"; d1 = 1; d2 = 4},/turf/station/floor,/area/hallways/loungehall) +"rH" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/cable{icon_state = "0-2"; d2 = 2},/obj/cable{icon_state = "0-8"; d2 = 8},/obj/cable{icon_state = "0-4"; d2 = 4},/turf/station/floor,/area/hallways/loungehall) +"rI" = (/obj/machinery/door/window,/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/hallways/loungehall) +"rJ" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/hallways/loungehall) +"rK" = (/obj/cable{icon_state = "0-4"; d2 = 4},/obj/cable{icon_state = "0-8"; d2 = 8},/obj/cable,/turf/station/floor,/area/hallways/loungehall) +"rL" = (/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/hallways/loungehall) +"rM" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/hallways/loungehall) +"rN" = (/obj/machinery/door/firedoor,/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/hallways/loungehall) +"rO" = (/obj/cable{icon_state = "0-2"; d2 = 2},/obj/cable{icon_state = "0-4"; d2 = 4},/obj/cable{icon_state = "0-8"; d2 = 8},/turf/station/floor,/area/hallways/loungehall) +"rP" = (/obj/cable{icon_state = "0-8"; d2 = 8},/obj/cable{icon_state = "0-4"; d2 = 4},/obj/cable{icon_state = "0-2"; d2 = 2},/turf/station/floor,/area/hallways/labaccess) +"rQ" = (/obj/machinery/door/window{dir = 4},/obj/cable,/obj/cable{icon_state = "0-8"; d2 = 8},/obj/cable{icon_state = "0-2"; d2 = 2},/turf/station/floor,/area/hallways/labaccess) +"rR" = (/obj/machinery/alarm{pixel_y = -32},/turf/station/floor,/area/hallways/centralhall) +"rS" = (/obj/machinery/connector{tag = ""; suffix = ""},/obj/machinery/atmoalter/canister/poisoncanister{tag = ""; suffix = ""; c_status = 3},/turf/station/floor,/area/testlab1) +"rT" = (/obj/machinery/connector{tag = ""; suffix = ""},/turf/station/floor,/area/testlab1) +"rU" = (/obj/landmark/alterations{name = "blobstart"; icon_state = "x3"},/turf/station/floor,/area/testlab1) +"rV" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/watertank,/turf/station/floor,/area/testlab1) +"rW" = (/obj/machinery/atmoalter/siphs/fullairsiphon/port,/obj/landmark/alterations{name = "blobstart"; icon_state = "x3"},/turf/station/floor,/area/hallways/eastairlock) +"rX" = (/obj/stool/bed,/obj/item/weapon/bedsheet,/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/turf/station/floor,/area/crew_quarters) +"rY" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/crew_quarters) +"rZ" = (/obj/stool/bed,/obj/item/weapon/bedsheet,/turf/station/floor,/area/crew_quarters) +"sa" = (/obj/grille,/obj/window,/obj/window{dir = 1},/turf/station/floor,/area/hallways/loungehall) +"sb" = (/obj/grille,/obj/window,/obj/window{dir = 1},/obj/window{dir = 4},/turf/station/floor,/area/hallways/loungehall) +"sc" = (/obj/machinery/door/window{dir = 4},/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/hallways/loungehall) +"sd" = (/obj/grille,/obj/window,/obj/window{dir = 1},/obj/window{dir = 8},/turf/station/floor,/area/hallways/loungehall) +"se" = (/obj/machinery/door/firedoor,/obj/machinery/firealarm{pixel_x = 32},/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/security) +"sf" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 4; access = "3000"},/turf/station/floor,/area/security) +"sg" = (/obj/machinery/connector{p_dir = 2},/obj/machinery/atmoalter/canister/anesthcanister{c_per = 1e+006; c_status = 3},/turf/station/floor,/area/security) +"sh" = (/obj/machinery/door/firedoor,/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/south_access) +"si" = (/obj/machinery/pipes{tag = ""; icon_state = "3"; p_dir = 3},/obj/machinery/meter,/turf/station/floor,/area/testlab1) +"sj" = (/obj/item/weapon/wrench,/turf/station/floor,/area/testlab1) +"sk" = (/obj/machinery/computer/atmosphere/siphonswitch,/obj/machinery/door_control{name = "Emergency Vent Control"; pixel_y = -28; id = "bd1"},/turf/station/floor,/area/testlab1) +"sl" = (/obj/machinery/door/window{dir = 4},/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/hallways/eastairlock) +"sm" = (/obj/cable{icon_state = "0-4"; d2 = 4},/obj/cable,/obj/cable{icon_state = "0-2"; d2 = 2},/turf/station/floor,/area/crew_quarters) +"sn" = (/obj/cable{icon_state = "0-8"; d2 = 8},/obj/machinery/power/apc{dir = 4},/turf/station/floor,/area/crew_quarters) +"so" = (/obj/table{icon_state = "alone"},/turf/station/floor,/area/crew_quarters) +"sp" = (/obj/rack,/obj/item/weapon/clothing/under/blue,/obj/item/weapon/radio/headset,/turf/station/floor,/area/crew_quarters) +"sq" = (/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/lounge) +"sr" = (/turf/station/floor,/area/lounge) +"ss" = (/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/lounge) +"st" = (/obj/watertank,/turf/station/floor,/area/lounge) +"su" = (/obj/machinery/light_switch{pixel_y = -24},/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/hallways/loungehall) +"sv" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/atmoalter/siphs/fullairsiphon/port,/turf/station/floor,/area/hallways/loungehall) +"sw" = (/obj/secloset/security1,/turf/station/floor,/area/security) +"sx" = (/obj/item/weapon/clipboard,/obj/item/weapon/paper/courtroom,/obj/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 1; cell_type = 2},/obj/cable{icon_state = "0-2"; d2 = 2},/turf/station/floor,/area/security) +"sy" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/table,/obj/machinery/recharger,/obj/item/weapon/clothing/glasses/thermal,/obj/machinery/firealarm{pixel_y = 32},/obj/cable{icon_state = "1-8"; d1 = 1; d2 = 8},/turf/station/floor,/area/security) +"sz" = (/obj/secloset/security2,/turf/station/floor,/area/security) +"sA" = (/obj/window{icon_state = "rwindow"; dir = 4; reinf = 1},/obj/machinery/light_switch{pixel_x = 0; pixel_y = 24},/turf/station/floor,/area/security) +"sB" = (/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/security) +"sC" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/security) +"sD" = (/turf/station/floor,/area/security) +"sE" = (/obj/machinery/pipes{tag = ""; icon_state = "3"; p_dir = 3},/turf/station/r_wall,/area) +"sF" = (/obj/machinery/light_switch{pixel_x = 24},/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/south_access) +"sG" = (/obj/grille,/obj/window{icon_state = "rwindow"; reinf = 1},/obj/window{icon_state = "rwindow"; dir = 1; reinf = 1},/obj/machinery/pipes{tag = ""; icon_state = "5"; p_dir = 9},/turf/station/floor,/area/testlab1) +"sH" = (/obj/grille,/obj/window{icon_state = "rwindow"; reinf = 1},/obj/window{icon_state = "rwindow"; dir = 1; reinf = 1},/obj/machinery/manifold{dir = 8},/turf/station/floor,/area/testlab1) +"sI" = (/obj/grille,/obj/window{icon_state = "rwindow"; reinf = 1},/obj/window{icon_state = "rwindow"; dir = 1; reinf = 1},/turf/station/floor,/area/testlab1) +"sJ" = (/obj/closet/emcloset,/turf/station/floor,/area/shuttle_airlock) +"sK" = (/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/shuttle_airlock) +"sL" = (/obj/machinery/light_switch{pixel_x = 0; pixel_y = 24},/turf/station/floor,/area/shuttle_airlock) +"sM" = (/obj/landmark{name = "Nuclear-Closet"},/turf/station/floor,/area/shuttle_airlock) +"sN" = (/turf/station/floor,/area/shuttle_airlock) +"sO" = (/obj/landmark/alterations{name = "prison shuttle"},/turf/station/floor,/area/shuttle_airlock) +"sP" = (/obj/grille,/obj/window{icon_state = "rwindow"; reinf = 1},/obj/window{icon_state = "rwindow"; dir = 1; reinf = 1},/turf/station/floor,/area) +"sQ" = (/obj/machinery/door/window{dir = 4},/obj/machinery/light_switch{pixel_x = -24},/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/crew_quarters) +"sR" = (/obj/machinery/door/window{dir = 8},/turf/station/floor,/area/crew_quarters) +"sS" = (/obj/machinery/light_switch{pixel_x = -24},/turf/station/floor,/area/lounge) +"sT" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/lounge) +"sU" = (/obj/stool,/turf/station/floor,/area/lounge) +"sV" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/lounge) +"sW" = (/obj/landmark{name = "CTF-wardrobe-Lounge"},/turf/station/floor,/area/lounge) +"sX" = (/obj/machinery/door/airlock{access = "0001"},/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/aircontrol) +"sY" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/secloset/security1,/turf/station/floor,/area/security) +"sZ" = (/obj/start{name = "Forensic Technician"},/turf/station/floor,/area/security) +"ta" = (/obj/window{icon_state = "rwindow"; dir = 4; reinf = 1},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/security) +"tb" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/security) +"tc" = (/obj/table,/obj/item/weapon/game_kit,/turf/station/floor,/area/brig) +"td" = (/turf/station/floor,/area/brig) +"te" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/closet/wardrobe/orange,/turf/station/floor,/area/brig) +"tf" = (/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/south_access) +"tg" = (/obj/machinery/door/airlock{access = "1200"},/turf/station/floor,/area/testlab1) +"th" = (/turf/station/floor{icon_state = "Floor3"},/area/testlab1) +"ti" = (/obj/landmark/alterations{name = "Experimental Technology"},/obj/machinery/vent{dir = 1; p_dir = 1},/turf/station/floor{icon_state = "Floor3"},/area/testlab1) +"tj" = (/obj/landmark/alterations{name = "Experimental Technology"},/turf/station/floor{icon_state = "Floor3"},/area/testlab1) +"tk" = (/obj/machinery/alarm{pixel_x = 32},/obj/landmark/alterations{name = "Experimental Technology"},/turf/station/floor{icon_state = "Floor3"},/area/testlab1) +"tl" = (/obj/item/weapon/radio/intercom{pixel_x = -32},/turf/station/floor,/area/shuttle_airlock) +"tm" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/shuttle_airlock) +"tn" = (/obj/machinery/alarm{pixel_y = 24},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/stool/bed,/turf/station/floor,/area/sleep_area_annexe) +"to" = (/obj/stool/bed,/turf/station/floor,/area/sleep_area_annexe) +"tp" = (/obj/stool/bed,/obj/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/apc{dir = 4},/turf/station/floor,/area/sleep_area_annexe) +"tq" = (/obj/machinery/light_switch{pixel_x = -24},/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/sleep_area) +"tr" = (/turf/station/floor,/area/sleep_area) +"ts" = (/obj/closet/wardrobe,/turf/station/floor,/area/sleep_area) +"tt" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/closet/wardrobe/mixed,/turf/station/floor,/area/sleep_area) +"tu" = (/obj/closet/wardrobe/mixed,/turf/station/floor,/area/sleep_area) +"tv" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/table{icon_state = "alone"},/obj/bedsheetbin,/obj/machinery/alarm{pixel_y = 24},/turf/station/floor,/area/sleep_area) +"tw" = (/obj/closet,/turf/station/floor,/area/sleep_area) +"tx" = (/obj/machinery/firealarm{pixel_x = 32},/obj/landmark/alterations{name = "id computer"},/turf/station/floor,/area/sleep_area) +"ty" = (/obj/machinery/camera{dir = 4; c_tag = "Lounge/Meeting Area"},/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/turf/station/floor,/area/lounge) +"tz" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/paper/Internal,/obj/item/weapon/paper/sop,/obj/item/weapon/wirecutters,/obj/item/weapon/wrapping_paper,/turf/station/floor,/area/lounge) +"tA" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/paper/Toxin,/obj/item/weapon/paper/sop,/obj/item/weapon/paper/jobs,/obj/item/weapon/pen,/obj/landmark/alterations{name = "recharger"},/turf/station/floor,/area/lounge) +"tB" = (/obj/stool,/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/lounge) +"tC" = (/obj/machinery/atmoalter/siphs/fullairsiphon,/turf/station/floor,/area/airintake) +"tD" = (/obj/window{dir = 4},/obj/machinery/inlet{suffix = "d"; dir = 4},/turf/station/floor,/area/airintake) +"tE" = (/obj/landmark{name = "CTF-wardrobe-Atmo"},/obj/machinery/pipes{tag = ""; icon_state = "10"; p_dir = 10},/turf/station/floor,/area/aircontrol) +"tF" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/landmark{name = "CTF-wardrobe-Atmo"},/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/aircontrol) +"tG" = (/turf/station/floor,/area/aircontrol) +"tH" = (/obj/machinery/atmoalter/siphs/fullairsiphon,/turf/station/floor,/area/aircontrol) +"tI" = (/obj/start{name = "Security Officer"},/turf/station/floor,/area/security) +"tJ" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 2; access = "3000"},/turf/station/floor,/area/security) +"tK" = (/obj/cable{icon_state = "1-4"; d1 = 1; d2 = 4},/turf/station/floor,/area/security) +"tL" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/security) +"tM" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/security) +"tN" = (/obj/machinery/door/firedoor,/obj/grille,/obj/machinery/pipes{tag = ""; icon_state = "5"; p_dir = 9},/obj/machinery/meter,/obj/window{icon_state = "rwindow"; dir = 4; reinf = 1},/obj/window{icon_state = "rwindow"; dir = 8; reinf = 1},/obj/cable{icon_state = "0-8"; d2 = 8},/obj/cable{icon_state = "0-2"; d2 = 2},/turf/station/floor,/area/security) +"tO" = (/obj/machinery/vent{tag = "2"; dir = 8; p_dir = 8},/turf/station/floor,/area/brig) +"tP" = (/obj/item/weapon/bedsheet,/turf/station/floor,/area/brig) +"tQ" = (/obj/stool/bed,/turf/station/floor,/area/brig) +"tR" = (/obj/machinery/camera{dir = 8; c_tag = "Transit tunnel (East)"},/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/south_access) +"tS" = (/obj/machinery/atmoalter/siphs/scrubbers/port,/turf/station/floor,/area/testlab1) +"tT" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/landmark/alterations{name = "blobstart"; icon_state = "x3"},/turf/station/floor,/area/testlab1) +"tU" = (/obj/bomb{btype = 2; explosive = 0; btemp = 400},/turf/station/floor{icon_state = "Floor3"},/area/testlab1) +"tV" = (/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/shuttle_airlock) +"tW" = (/obj/landmark{name = "CTF-rogue"},/turf/station/floor,/area/shuttle_airlock) +"tX" = (/obj/landmark{name = "Nuclear-Bomb"},/turf/station/floor,/area/shuttle_airlock) +"tY" = (/obj/grille,/obj/window{icon_state = "rwindow"; dir = 4; reinf = 1},/obj/window{icon_state = "rwindow"; dir = 8; reinf = 1},/turf/station/floor,/area) +"tZ" = (/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/turf/station/floor,/area/sleep_area_annexe) +"ua" = (/turf/station/floor,/area/sleep_area_annexe) +"ub" = (/obj/machinery/light_switch{pixel_x = 24},/obj/cable{icon_state = "1-4"; d1 = 1; d2 = 4},/turf/station/floor,/area/sleep_area_annexe) +"uc" = (/obj/machinery/camera{dir = 4; c_tag = "Crew Sleeping Area"},/obj/cable,/obj/cable{icon_state = "0-8"; d2 = 8},/obj/cable{icon_state = "0-2"; d2 = 2},/obj/cable{icon_state = "0-4"; d2 = 4},/turf/station/floor,/area/sleep_area) +"ud" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/sleep_area) +"ue" = (/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/sleep_area) +"uf" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/sleep_area) +"ug" = (/obj/item/weapon/radio/intercom{pixel_x = 32},/obj/cable{icon_state = "2-8"; d1 = 2; d2 = 8},/turf/station/floor,/area/sleep_area) +"uh" = (/obj/item/weapon/radio/intercom{pixel_x = -32},/turf/station/floor,/area/lounge) +"ui" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/paper_bin,/obj/item/weapon/paper/Internal,/obj/item/weapon/paper/Map,/obj/item/weapon/paper/sop,/obj/item/weapon/clipboard,/obj/item/weapon/clipboard,/obj/item/weapon/paper/jobs,/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/lounge) +"uj" = (/obj/table{icon_state = "sides"; dir = 4},/obj/item/weapon/paper/Map,/obj/item/weapon/paper/sop,/obj/item/weapon/radio/signaler,/turf/station/floor,/area/lounge) +"uk" = (/obj/stool,/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/lounge) +"ul" = (/obj/item/weapon/extinguisher,/obj/machinery/light_switch{pixel_x = 24; pixel_y = 0},/turf/station/floor,/area/lounge) +"um" = (/obj/machinery/connector{p_dir = 2},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent{name = "vent"; t_status = 1; t_per = 1e+006; c_per = 1e+006; c_status = 2; empty = 1},/turf/station/floor,/area/airintake) +"un" = (/turf/station/floor,/area/airintake) +"uo" = (/obj/machinery/alarm{pixel_y = -4},/turf/station/floor,/area/airintake) +"up" = (/obj/window{dir = 4},/turf/station/floor,/area/airintake) +"uq" = (/obj/machinery/pipes{tag = ""; icon_state = "3"; p_dir = 3},/turf/station/floor,/area/aircontrol) +"ur" = (/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/aircontrol) +"us" = (/obj/machinery/door/airlock{access = "0001"},/turf/station/floor,/area/aircontrol) +"ut" = (/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/security) +"uu" = (/obj/start{name = "Staff Assistant"},/turf/station/floor,/area/security) +"uv" = (/obj/window{icon_state = "rwindow"; dir = 1; reinf = 1},/turf/station/floor,/area/security) +"uw" = (/obj/window{icon_state = "rwindow"; dir = 1; reinf = 1},/obj/machinery/light_switch{pixel_x = 24; otherarea = "brig"},/turf/station/floor,/area/security) +"ux" = (/obj/machinery/camera{dir = 4; c_tag = "Prison"},/turf/station/floor,/area/brig) +"uy" = (/obj/item/weapon/bedsheet,/obj/landmark/alterations{name = "blobstart"; icon_state = "x3"},/turf/station/floor,/area/brig) +"uz" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/stool/bed,/turf/station/floor,/area/brig) +"uA" = (/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor{icon_state = "Floor3"},/area/testlab1) +"uB" = (/obj/machinery/camera{dir = 4; c_tag = "Shuttle Bay"},/turf/station/floor,/area/shuttle_airlock) +"uC" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/shuttle_airlock) +"uD" = (/obj/grille,/obj/grille,/turf/station/floor,/area) +"uE" = (/obj/stool/bed,/obj/machinery/camera{dir = 4; c_tag = "Sleeping Area Annex"},/turf/station/floor,/area/sleep_area_annexe) +"uF" = (/obj/machinery/door/firedoor,/obj/machinery/door/window,/turf/station/floor,/area/sleep_area_annexe) +"uG" = (/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/sleep_area) +"uH" = (/obj/stool/bed,/turf/station/floor,/area/sleep_area) +"uI" = (/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/turf/station/floor,/area/sleep_area) +"uJ" = (/obj/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/apc{dir = 4; cell_type = 2},/obj/cable,/turf/station/floor,/area/sleep_area) +"uK" = (/obj/landmark{name = "CTF-supply-Lounge"},/turf/station/floor,/area/lounge) +"uL" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/paper/Toxin,/obj/item/weapon/paper/sop,/obj/manifest,/turf/station/floor,/area/lounge) +"uM" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/paper/Internal,/obj/item/weapon/paper/sop,/obj/item/weapon/paper/jobs,/obj/item/weapon/game_kit,/turf/station/floor,/area/lounge) +"uN" = (/obj/landmark/alterations{name = "Experimental Technology"},/turf/station/floor,/area/lounge) +"uO" = (/obj/machinery/atmoalter/siphs/scrubbers,/obj/machinery/pipes{tag = ""; icon_state = "3"; p_dir = 3},/turf/station/floor,/area/airintake) +"uP" = (/obj/machinery/atmoalter/siphs/scrubbers,/turf/station/floor,/area/airintake) +"uQ" = (/obj/machinery/atmoalter/siphs/scrubbers,/obj/window{dir = 4},/turf/station/floor,/area/airintake) +"uR" = (/obj/machinery/pipes{tag = ""; icon_state = "3"; p_dir = 3},/obj/machinery/meter,/turf/station/floor,/area/aircontrol) +"uS" = (/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/aircontrol) +"uT" = (/obj/machinery/atmoalter/siphs/scrubbers,/turf/station/floor,/area/aircontrol) +"uU" = (/obj/machinery/computer/secure_data,/turf/station/floor,/area/security) +"uV" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/security) +"uW" = (/obj/item/weapon/storage/trackimp_kit,/turf/station/floor,/area/security) +"uX" = (/obj/item/weapon/paper_bin,/turf/station/floor,/area/security) +"uY" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/storage/toolbox,/obj/item/weapon/clothing/ears/earmuffs,/turf/station/floor,/area/security) +"uZ" = (/obj/machinery/sec_lock{layer = 4; pixel_x = 32},/obj/window{dir = 4},/turf/station/floor,/area/security) +"va" = (/obj/machinery/door/firedoor,/obj/grille,/obj/window{icon_state = "rwindow"; dir = 8; reinf = 1},/obj/window{icon_state = "rwindow"; dir = 4; reinf = 1},/obj/cable,/turf/station/floor,/area/security) +"vb" = (/obj/machinery/atmoalter/siphs/fullairsiphon/port,/turf/station/floor,/area/testlab1) +"vc" = (/obj/grille,/turf/station/floor,/area/testlab1) +"vd" = (/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/turf/station/floor{icon_state = "Floor3"},/area/testlab1) +"ve" = (/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor{icon_state = "Floor3"},/area/testlab1) +"vf" = (/obj/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 8},/turf/station/floor,/area/shuttle_airlock) +"vg" = (/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/shuttle_airlock) +"vh" = (/obj/cable{icon_state = "1-8"; d1 = 1; d2 = 8},/turf/station/floor,/area/shuttle_airlock) +"vi" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/landmark/alterations{name = "Prisoners Wardrobe"},/turf/station/floor,/area/shuttle_airlock) +"vj" = (/obj/landmark/alterations{name = "Prisoners Wardrobe"},/turf/station/floor,/area/shuttle_airlock) +"vk" = (/turf/station/floor{tag = ""},/area/sleep_area_annexe) +"vl" = (/obj/machinery/door/firedoor,/obj/machinery/door/window{dir = 1},/turf/station/floor,/area/sleep_area_annexe) +"vm" = (/obj/machinery/light_switch{pixel_x = 24},/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/sleep_area) +"vn" = (/obj/item/weapon/clothing/suit/firesuit,/obj/item/weapon/clothing/mask/gasmask,/obj/item/weapon/tank/oxygentank,/obj/item/weapon/weldingtool,/obj/item/weapon/clothing/gloves/black,/turf/station/floor,/area/lounge) +"vo" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/lounge) +"vp" = (/obj/item/weapon/storage/backpack,/obj/cable,/obj/cable{icon_state = "0-4"; d2 = 4},/obj/cable{icon_state = "0-2"; d2 = 2},/turf/station/floor,/area/lounge) +"vq" = (/obj/landmark/alterations{name = "Experimental Technology"},/obj/cable{icon_state = "0-8"; d2 = 8},/obj/machinery/power/apc{dir = 4},/turf/station/floor,/area/lounge) +"vr" = (/obj/machinery/pipes{tag = ""; icon_state = "3"; p_dir = 3},/turf/station/floor,/area/airintake) +"vs" = (/obj/grille,/obj/machinery/connector{p_dir = 2},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent{name = "vent"; t_status = 1; t_per = 1e+006; c_per = 1e+006; c_status = 2; empty = 1},/obj/window{dir = 4},/obj/window{dir = 8},/turf/station/floor,/area/airintake) +"vt" = (/obj/window{dir = 4},/obj/window,/turf/station/floor,/area/airintake) +"vu" = (/obj/machinery/power/apc{dir = 4; cell_type = 2},/obj/cable,/obj/cable{icon_state = "0-2"; d2 = 2},/turf/station/floor,/area/aircontrol) +"vv" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/infra,/obj/item/weapon/infra,/obj/item/weapon/radio/signaler,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/prox_sensor,/obj/item/weapon/prox_sensor,/obj/item/weapon/crowbar,/obj/item/weapon/clipboard,/turf/station/floor,/area/security) +"vw" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/infra,/obj/item/weapon/infra,/obj/item/weapon/radio/signaler,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/prox_sensor,/obj/item/weapon/prox_sensor,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/dropper,/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/security) +"vx" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/infra,/obj/item/weapon/infra,/obj/item/weapon/radio/signaler,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/prox_sensor,/obj/item/weapon/prox_sensor,/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/security) +"vy" = (/obj/machinery/computer/security,/turf/station/floor,/area/security) +"vz" = (/obj/machinery/computer/card,/turf/station/floor,/area/security) +"vA" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/closet/wardrobe/red,/turf/station/floor,/area/security) +"vB" = (/obj/closet/wardrobe/orange,/turf/station/floor,/area/security) +"vC" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 2; access = "4400"},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/security) +"vD" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 2; access = "4400"},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/security) +"vE" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/brig) +"vF" = (/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/turf/station/floor,/area/brig) +"vG" = (/obj/machinery/door/poddoor{name = "Blast door"; id = "bd1"},/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/testlab1) +"vH" = (/obj/window{icon_state = "rwindow"; dir = 10; reinf = 1},/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/shuttle_airlock) +"vI" = (/obj/machinery/door/airlock,/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/shuttle_airlock) +"vJ" = (/obj/grille,/obj/window{icon_state = "rwindow"; reinf = 1},/obj/window{icon_state = "rwindow"; dir = 1; reinf = 1},/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area/shuttle_airlock) +"vK" = (/obj/machinery/power/solar,/turf/station/floor,/area) +"vL" = (/obj/cable{icon_state = "0-2"; d2 = 2},/obj/cable{icon_state = "0-8"; d2 = 8},/obj/cable{icon_state = "0-4"; d2 = 4},/turf/station/floor{icon_state = "Floor1"; intact = 0},/area) +"vM" = (/obj/stool/bed,/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/sleep_area_annexe) +"vN" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/stool/bed,/turf/station/floor,/area/sleep_area_annexe) +"vO" = (/obj/stool/bed,/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/sleep_area) +"vP" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/sleep_area) +"vQ" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/sleep_area) +"vR" = (/obj/cable{icon_state = "1-4"; d1 = 1; d2 = 4},/turf/station/floor,/area/sleep_area) +"vS" = (/obj/machinery/door/window,/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/sleep_area) +"vT" = (/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/lounge) +"vU" = (/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/lounge) +"vV" = (/obj/landmark{name = "CTF-base-Lounge"},/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/lounge) +"vW" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/cable{icon_state = "0-8"; d2 = 8},/obj/cable{icon_state = "0-2"; d2 = 2},/obj/cable,/turf/station/floor,/area/lounge) +"vX" = (/obj/grille,/obj/machinery/pipes{tag = ""; icon_state = "3"; p_dir = 3},/obj/machinery/meter,/turf/station/floor,/area/airintake) +"vY" = (/obj/grille,/turf/station/floor,/area/airintake) +"vZ" = (/obj/grille,/obj/machinery/door/poddoor{name = "Vent Hatch"; id = "vent1"},/turf/station/floor,/area/airintake) +"wa" = (/obj/machinery/door/firedoor,/turf/station/floor,/area/aircontrol) +"wb" = (/obj/window{icon_state = "rwindow"; dir = 4; reinf = 1},/turf/station/floor,/area) +"wc" = (/obj/machinery/door/firedoor,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/shuttle_airlock) +"wd" = (/obj/window{icon_state = "rwindow"; dir = 8; reinf = 1},/turf/station/floor,/area) +"we" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/sleep_area) +"wf" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/lounge) +"wg" = (/obj/window,/obj/machinery/pipes{tag = ""; icon_state = "5"; p_dir = 9},/turf/station/floor,/area/airintake) +"wh" = (/obj/window,/obj/machinery/pipes{tag = ""; icon_state = "10"; p_dir = 10},/turf/station/floor,/area/airintake) +"wi" = (/obj/window,/obj/landmark/alterations{name = "blobstart"; icon_state = "x3"},/obj/machinery/pipes{tag = ""; icon_state = "3"; p_dir = 3},/turf/station/floor,/area/airintake) +"wj" = (/obj/window,/turf/station/floor,/area/airintake) +"wk" = (/obj/window{dir = 4},/obj/window,/obj/window{dir = 1},/turf/station/floor,/area/airintake) +"wl" = (/obj/cable,/obj/cable{icon_state = "0-2"; d2 = 2},/obj/cable{icon_state = "0-4"; d2 = 4},/turf/station/floor,/area/aircontrol) +"wm" = (/obj/machinery/light_switch{pixel_x = 0; pixel_y = 24},/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/aircontrol) +"wn" = (/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/aircontrol) +"wo" = (/obj/machinery/power/monitor,/turf/station/floor,/area/aircontrol) +"wp" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/aircontrol) +"wq" = (/obj/landmark/alterations{name = "Experimental Technology"},/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/aircontrol) +"wr" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/landmark/alterations{name = "Experimental Technology"},/obj/cable{icon_state = "1-8"; d1 = 1; d2 = 8},/turf/station/floor,/area/aircontrol) +"ws" = (/obj/landmark/alterations{name = "Experimental Technology"},/turf/station/floor,/area/aircontrol) +"wt" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/alarm{pixel_y = 24},/turf/station/floor,/area/aircontrol) +"wu" = (/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/floor,/area/aircontrol) +"wv" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/aircontrol) +"ww" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/south_access) +"wx" = (/obj/window{icon_state = "rwindow"; dir = 10; reinf = 1},/turf/station/floor,/area/shuttle_airlock) +"wy" = (/obj/machinery/door/airlock,/turf/station/floor,/area/shuttle_airlock) +"wz" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/extinguisher,/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/south_access) +"wA" = (/turf/station/floor,/area/south_access) +"wB" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/window{icon_state = "rwindow"; dir = 4; reinf = 1},/turf/station/floor,/area/south_access) +"wC" = (/obj/secloset/security1,/turf/station/floor,/area/security_sub) +"wD" = (/obj/machinery/light_switch{pixel_x = 0; pixel_y = 24},/turf/station/floor,/area/security_sub) +"wE" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table{icon_state = "sides"; dir = 8},/obj/machinery/computer/security,/turf/station/floor,/area/security_sub) +"wF" = (/obj/weldfueltank,/turf/station/floor,/area/aux_storage) +"wG" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/aux_storage) +"wH" = (/obj/rack,/obj/item/weapon/clothing/suit/firesuit,/obj/item/weapon/clothing/under/black,/obj/item/weapon/clothing/mask/gasmask,/obj/item/weapon/radio/headset,/obj/item/weapon/clothing/shoes/black,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/glasses/sunglasses,/turf/station/floor,/area/aux_storage) +"wI" = (/obj/item/weapon/extinguisher,/turf/station/floor,/area/aux_storage) +"wJ" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/extinguisher,/turf/station/floor,/area/aux_storage) +"wK" = (/obj/machinery/light_switch{pixel_x = 0; pixel_y = 24},/turf/station/floor,/area/aux_storage) +"wL" = (/turf/station/floor,/area/aux_storage) +"wM" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/aux_storage) +"wN" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/sheet/glass,/obj/item/weapon/sheet/glass,/obj/item/weapon/sheet/glass,/obj/item/weapon/sheet/glass,/obj/item/weapon/sheet/glass,/obj/item/weapon/sheet/glass,/turf/station/floor,/area/aux_storage) +"wO" = (/obj/machinery/computer/atmosphere/siphonswitch{otherarea = "airintake"},/obj/window{dir = 4},/turf/station/floor,/area/aircontrol) +"wP" = (/obj/machinery/connector{tag = ""; icon_state = "connector"; dir = 1; p_dir = 1},/obj/machinery/atmoalter/canister/poisoncanister{anchored = 1; c_status = 3},/turf/station/floor,/area/aircontrol) +"wQ" = (/obj/machinery/connector{tag = ""; icon_state = "connector"; dir = 1; p_dir = 1},/turf/station/floor,/area/aircontrol) +"wR" = (/obj/item/weapon/wrench,/turf/station/floor,/area/aircontrol) +"wS" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/aircontrol) +"wT" = (/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/turf/station/floor,/area/aircontrol) +"wU" = (/obj/machinery/camera{dir = 8; c_tag = "Atmo. Gas Storage"},/turf/station/floor,/area/aircontrol) +"wV" = (/turf/space,/area/shuttle) +"wW" = (/obj/window{icon_state = "rwindow"; dir = 4; reinf = 1},/turf/station/floor,/area/south_access) +"wX" = (/turf/station/floor,/area/security_sub) +"wY" = (/obj/cable{icon_state = "2-4"; d1 = 2; d2 = 4},/turf/station/floor,/area/security_sub) +"wZ" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/storage/firstaid/fire,/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/security_sub) +"xa" = (/obj/weldfueltank,/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/aux_storage) +"xb" = (/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/aux_storage) +"xc" = (/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/aux_storage) +"xd" = (/obj/cable,/obj/cable{icon_state = "0-2"; d2 = 2},/obj/cable{icon_state = "0-4"; d2 = 4},/obj/cable{icon_state = "0-8"; d2 = 8},/turf/station/floor,/area/aux_storage) +"xe" = (/obj/table{icon_state = "sides"; dir = 8},/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/paper_bin,/obj/item/weapon/clipboard,/obj/cable{icon_state = "0-8"; d2 = 8},/obj/machinery/power/apc{dir = 4},/obj/cable{icon_state = "0-2"; d2 = 2},/turf/station/floor,/area/aux_storage) +"xf" = (/obj/stool/chair{dir = 1},/obj/machinery/door_control{pixel_x = -28; id = "vent1"},/turf/station/floor,/area/aircontrol) +"xg" = (/obj/stool/chair{dir = 1},/turf/station/floor,/area/aircontrol) +"xh" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/aircontrol) +"xi" = (/obj/landmark{name = "CTF-base-Atmo"},/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/aircontrol) +"xj" = (/obj/landmark{name = "CTF-supply-Atmo"},/turf/station/floor,/area/aircontrol) +"xk" = (/obj/machinery/door/airlock,/turf/station/floor,/area/aircontrol) +"xl" = (/obj/machinery/atmoalter/canister/aircanister,/turf/station/floor,/area/aircontrol) +"xm" = (/obj/machinery/atmoalter/canister/n2canister,/turf/station/floor,/area/aircontrol) +"xn" = (/obj/machinery/atmoalter/canister/anesthcanister,/turf/station/floor,/area/aircontrol) +"xo" = (/obj/grille,/obj/window{icon_state = "rwindow"; dir = 1; reinf = 1},/obj/window{icon_state = "rwindow"; reinf = 1},/turf/station/floor,/area) +"xp" = (/obj/machinery/light_switch{pixel_x = -24},/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/south_access) +"xq" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/south_access) +"xr" = (/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/turf/station/floor,/area/south_access) +"xs" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 2; access = "2000"},/turf/station/floor,/area/south_access) +"xt" = (/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/security_sub) +"xu" = (/obj/table{icon_state = "sides"; dir = 8},/obj/machinery/recharger,/obj/machinery/camera{dir = 8; network = "SS13"; c_tag = "Security (West)"},/turf/station/floor,/area/security_sub) +"xv" = (/obj/watertank,/turf/station/floor,/area/aux_storage) +"xw" = (/obj/item/weapon/storage/toolbox/electrical,/turf/station/floor,/area/aux_storage) +"xx" = (/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/turf/station/floor,/area/aux_storage) +"xy" = (/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/aux_storage) +"xz" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/storage/toolbox,/obj/item/weapon/crowbar,/obj/cable{icon_state = "1-4"; d1 = 1; d2 = 4},/turf/station/floor,/area/aux_storage) +"xA" = (/obj/machinery/camera{dir = 4; c_tag = "Atmospheric Control Room"},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/radio/intercom{pixel_x = -32},/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/aircontrol) +"xB" = (/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/aircontrol) +"xC" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/aircontrol) +"xD" = (/obj/start{name = "Atmospheric Technician"},/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/aircontrol) +"xE" = (/obj/cable{icon_state = "1-8"; d1 = 1; d2 = 8},/turf/station/floor,/area/aircontrol) +"xF" = (/obj/window{dir = 1},/obj/window{dir = 8},/obj/watertank,/turf/station/floor,/area/aircontrol) +"xG" = (/obj/window{dir = 1},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/aircontrol) +"xH" = (/obj/window{dir = 1},/obj/item/weapon/clothing/mask/gasmask,/turf/station/floor,/area/aircontrol) +"xI" = (/obj/window{dir = 1},/obj/machinery/dispenser,/turf/station/floor,/area/aircontrol) +"xJ" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/landmark/alterations{name = "blobstart"; icon_state = "x3"},/turf/station/floor,/area/aircontrol) +"xK" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area/aircontrol) +"xL" = (/obj/machinery/atmoalter/canister/co2canister,/turf/station/floor,/area/aircontrol) +"xM" = (/obj/machinery/firealarm{pixel_x = 32},/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/south_access) +"xN" = (/obj/grille,/obj/window{icon_state = "rwindow"; dir = 8; reinf = 1},/obj/window{icon_state = "rwindow"; dir = 4; reinf = 1},/turf/station/floor,/area) +"xO" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/light_switch{pixel_x = -24},/turf/station/floor,/area/solar_con) +"xP" = (/obj/cable{icon_state = "2-4"; d1 = 2; d2 = 4},/obj/window{icon_state = "rwindow"; dir = 4; reinf = 1},/obj/machinery/alarm{pixel_y = 24},/turf/station/floor,/area/solar_con) +"xQ" = (/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/south_access) +"xR" = (/obj/machinery/door/firedoor,/obj/machinery/door/window,/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/south_access) +"xS" = (/obj/cable,/obj/cable{icon_state = "0-8"; d2 = 8},/obj/cable{icon_state = "0-4"; d2 = 4},/turf/station/floor,/area/south_access) +"xT" = (/obj/cable{icon_state = "0-2"; d2 = 2},/obj/cable{icon_state = "0-4"; d2 = 4},/obj/cable{icon_state = "0-8"; d2 = 8},/turf/station/floor,/area/south_access) +"xU" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/window{icon_state = "rwindow"; dir = 4; reinf = 1},/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/south_access) +"xV" = (/obj/cable{icon_state = "0-8"; d2 = 8},/obj/machinery/power/apc,/obj/cable{icon_state = "0-4"; d2 = 4},/turf/station/floor,/area/security_sub) +"xW" = (/obj/watertank,/obj/cable{icon_state = "1-8"; d1 = 1; d2 = 8},/turf/station/floor,/area/security_sub) +"xX" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/turf/station/floor,/area/security_sub) +"xY" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/atmoalter/canister/n2canister,/turf/station/floor,/area/aux_storage) +"xZ" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area/aux_storage) +"ya" = (/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/floor,/area/aux_storage) +"yb" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/atmoalter/canister/anesthcanister,/turf/station/floor,/area/aux_storage) +"yc" = (/obj/closet/emcloset,/turf/station/floor,/area/aux_storage) +"yd" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/aux_storage) +"ye" = (/obj/table{icon_state = "sides"; dir = 8},/obj/machinery/camera{dir = 8; c_tag = "Aux Storage"},/obj/item/weapon/storage/toolbox,/obj/item/weapon/crowbar,/turf/station/floor,/area/aux_storage) +"yf" = (/obj/window{dir = 1},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/aircontrol) +"yg" = (/obj/window{dir = 1},/turf/station/floor,/area/aircontrol) +"yh" = (/obj/window{dir = 1},/obj/weldfueltank,/turf/station/floor,/area/aircontrol) +"yi" = (/obj/window{dir = 4},/obj/window{dir = 1},/obj/weldfueltank,/turf/station/floor,/area/aircontrol) +"yj" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent{name = "vent"; t_status = 1; t_per = 1e+006; c_per = 1e+006; c_status = 2; empty = 1},/turf/station/floor,/area/aircontrol) +"yk" = (/obj/window{dir = 8},/turf/station/floor,/area/aircontrol) +"yl" = (/obj/item/weapon/clothing/under/yellow,/obj/item/weapon/clothing/shoes/orange,/obj/item/weapon/clothing/gloves/yellow,/turf/station/floor,/area/aircontrol) +"ym" = (/obj/machinery/camera{dir = 8; c_tag = "External - shuttle dock"},/turf/space,/area) +"yn" = (/obj/grille,/obj/window{icon_state = "rwindow"; dir = 8; reinf = 1},/obj/window{icon_state = "rwindow"; dir = 4; reinf = 1},/obj/window{icon_state = "rwindow"; reinf = 1},/turf/station/floor,/area) +"yo" = (/obj/machinery/firealarm{pixel_x = -32},/turf/station/floor,/area/solar_con) +"yp" = (/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/obj/window{icon_state = "rwindow"; dir = 4; reinf = 1},/turf/station/floor,/area/solar_con) +"yq" = (/obj/machinery/door/airlock,/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/emergency_storage) +"yr" = (/obj/machinery/door/airlock,/turf/station/floor,/area/aux_storage) +"ys" = (/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/aircontrol) +"yt" = (/obj/machinery/door/window,/turf/station/floor,/area/aircontrol) +"yu" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/paper_bin,/turf/station/floor,/area/aircontrol) +"yv" = (/obj/item/weapon/clipboard,/turf/station/floor,/area/aircontrol) +"yw" = (/obj/item/weapon/storage/toolbox,/obj/item/weapon/crowbar,/turf/station/floor,/area/aircontrol) +"yx" = (/obj/machinery/atmoalter/siphs/scrubbers/port,/turf/station/floor,/area/aircontrol) +"yy" = (/obj/cable,/obj/cable{icon_state = "0-2"; d2 = 2},/obj/cable{icon_state = "0-4"; d2 = 4},/turf/station/floor{icon_state = "Floor1"; intact = 0},/area) +"yz" = (/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor{icon_state = "Floor1"; intact = 0},/area) +"yA" = (/obj/machinery/door/airlock{access = "2000"},/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/solar_con) +"yB" = (/obj/cable{icon_state = "2-8"; d1 = 2; d2 = 8},/turf/station/floor,/area/solar_con) +"yC" = (/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/obj/machinery/door/window{icon = 'security.dmi'; dir = 2; access = "2000"},/turf/station/floor,/area/solar_con) +"yD" = (/obj/item/weapon/extinguisher,/obj/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 8},/obj/cable{icon_state = "0-2"; d2 = 2},/turf/station/floor,/area/emergency_storage) +"yE" = (/obj/cable{icon_state = "1-8"; d1 = 1; d2 = 8},/turf/station/floor,/area/emergency_storage) +"yF" = (/turf/station/floor,/area/emergency_storage) +"yG" = (/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/turf/station/floor,/area/emergency_storage) +"yH" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/clothing/gloves/yellow,/obj/item/weapon/storage/toolbox/electrical,/turf/station/floor,/area/emergency_storage) +"yI" = (/obj/table{icon_state = "corners"; dir = 6},/obj/machinery/cell_charger,/turf/station/floor,/area/emergency_storage) +"yJ" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/storage/firstaid/toxin,/turf/station/floor,/area/emergency_storage) +"yK" = (/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/aux_storage) +"yL" = (/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/landmark/alterations{name = "blobstart"; icon_state = "x3"},/turf/station/floor,/area/aircontrol) +"yM" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/landmark/alterations{name = "Security Locker"},/turf/station/floor,/area/aircontrol) +"yN" = (/obj/table{icon_state = "corners"; dir = 9},/obj/machinery/cell_charger,/turf/station/floor,/area/aircontrol) +"yO" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/storage/toolbox/electrical,/turf/station/floor,/area/aircontrol) +"yP" = (/obj/window{dir = 8},/obj/landmark/alterations{name = "id computer"},/turf/station/floor,/area/aircontrol) +"yQ" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/wrench,/obj/item/weapon/analyzer,/obj/item/weapon/radio,/obj/item/weapon/screwdriver,/obj/item/weapon/crowbar,/obj/landmark/alterations{name = "recharger"},/turf/station/floor,/area/aircontrol) +"yR" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/wrench,/obj/item/weapon/analyzer,/obj/item/weapon/screwdriver,/obj/item/weapon/extinguisher,/obj/item/weapon/crowbar,/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/aircontrol) +"yS" = (/obj/weldfueltank,/turf/station/floor,/area/aircontrol) +"yT" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/wrench,/obj/item/weapon/analyzer,/obj/item/weapon/radio,/obj/item/weapon/screwdriver,/obj/item/weapon/t_scanner,/turf/station/floor,/area/aircontrol) +"yU" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/wrench,/obj/item/weapon/analyzer,/obj/item/weapon/screwdriver,/obj/item/weapon/extinguisher,/turf/station/floor,/area/aircontrol) +"yV" = (/obj/grille,/obj/window{icon_state = "rwindow"; dir = 8; reinf = 1},/obj/window{icon_state = "rwindow"; dir = 4; reinf = 1},/obj/window{icon_state = "rwindow"; dir = 1; reinf = 1},/turf/station/floor,/area) +"yW" = (/obj/machinery/power/solar_control,/turf/station/floor,/area/solar_con) +"yX" = (/obj/item/weapon/radio/intercom{pixel_x = 32},/obj/machinery/camera{dir = 8; network = "SS13"; c_tag = "Main Solar Control"},/turf/station/floor,/area/south_access) +"yY" = (/obj/item/weapon/extinguisher,/obj/machinery/light_switch{pixel_x = -24},/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/emergency_storage) +"yZ" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/emergency_storage) +"za" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/emergency_storage) +"zb" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/emergency_storage) +"zc" = (/obj/machinery/atmoalter/siphs/scrubbers/port,/turf/station/floor,/area/aux_storage) +"zd" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/aux_storage) +"ze" = (/obj/machinery/atmoalter/siphs/fullairsiphon/port,/turf/station/floor,/area/aircontrol) +"zf" = (/obj/machinery/door/firedoor,/obj/landmark/alterations{name = "barrier"},/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/south_access) +"zg" = (/obj/machinery/power/terminal,/obj/cable,/turf/station/floor,/area/solar_con) +"zh" = (/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/obj/machinery/light_switch{pixel_x = 24},/turf/station/floor,/area/south_access) +"zi" = (/obj/rack,/obj/item/weapon/clothing/suit/firesuit,/obj/item/weapon/clothing/under/black,/obj/item/weapon/clothing/mask/gasmask,/obj/item/weapon/radio/headset,/obj/item/weapon/clothing/shoes/black,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/glasses/meson,/obj/item/weapon/clothing/glasses/sunglasses,/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/emergency_storage) +"zj" = (/obj/rack,/obj/item/weapon/clothing/suit/firesuit,/obj/item/weapon/clothing/under/black,/obj/item/weapon/clothing/mask/gasmask,/obj/item/weapon/radio/headset,/obj/item/weapon/clothing/shoes/black,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/glasses/meson,/obj/item/weapon/clothing/glasses/sunglasses,/turf/station/floor,/area/emergency_storage) +"zk" = (/obj/rack,/obj/item/weapon/clothing/suit/firesuit,/obj/item/weapon/clothing/under/black,/obj/item/weapon/clothing/mask/gasmask,/obj/item/weapon/radio/headset,/obj/item/weapon/clothing/shoes/black,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/glasses/sunglasses,/turf/station/floor,/area/emergency_storage) +"zl" = (/obj/machinery/dispenser{o2tanks = 20; pltanks = 0},/turf/station/floor,/area/emergency_storage) +"zm" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/storage/toolbox,/turf/station/floor,/area/emergency_storage) +"zn" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/t_scanner,/obj/item/weapon/storage/toolbox,/turf/station/floor,/area/emergency_storage) +"zo" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/storage/firstaid/fire,/turf/station/floor,/area/emergency_storage) +"zp" = (/obj/machinery/atmoalter/siphs/fullairsiphon/port,/turf/station/floor,/area/aux_storage) +"zq" = (/obj/machinery/dispenser{o2tanks = 20; pltanks = 0},/turf/station/floor,/area/aux_storage) +"zr" = (/obj/table,/obj/item/weapon/clothing/mask/gasmask,/obj/item/weapon/clothing/mask/gasmask,/obj/item/weapon/clothing/mask/gasmask,/turf/station/floor,/area/aux_storage) +"zs" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/cell{icon_state = "hpcell"; charge = 100; maxcharge = 5000},/obj/item/weapon/cell{icon_state = "hpcell"; charge = 100; maxcharge = 5000},/obj/item/weapon/clothing/gloves/yellow,/obj/item/weapon/clothing/gloves/yellow,/turf/station/floor,/area/aircontrol) +"zt" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/cell{icon_state = "hpcell"; charge = 100; maxcharge = 5000},/obj/item/weapon/cell{icon_state = "hpcell"; charge = 100; maxcharge = 5000},/obj/item/weapon/cell{charge = 100},/obj/item/weapon/cell{charge = 100},/obj/item/weapon/cell{charge = 100},/obj/item/weapon/storage/toolbox/electrical,/turf/station/floor,/area/aircontrol) +"zu" = (/obj/window{icon_state = "rwindow"; dir = 10; reinf = 1},/turf/station/floor,/area) +"zv" = (/obj/machinery/door/airlock,/obj/landmark/alterations{name = "barrier"},/turf/station/floor,/area) +"zw" = (/obj/cable,/obj/cable{icon_state = "0-8"; d2 = 8},/obj/cable{icon_state = "0-4"; d2 = 4},/obj/cable{icon_state = "0-2"; d2 = 2},/turf/station/floor{icon_state = "Floor1"; intact = 0},/area) +"zx" = (/obj/machinery/power/smes{output = 12000; charge = 0; chargelevel = 12000; n_tag = "Main Solar Generator"},/turf/station/floor,/area/solar_con) +"zy" = (/obj/window{icon_state = "rwindow"; dir = 4; reinf = 1},/obj/cable,/obj/cable{icon_state = "0-2"; d2 = 2},/obj/cable{icon_state = "0-8"; d2 = 8},/turf/station/floor,/area/solar_con) +"zz" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/south_access) +"zA" = (/obj/machinery/firealarm{pixel_x = -32},/obj/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/station/floor,/area/south_access) +"zB" = (/obj/grille,/obj/window{icon_state = "rwindow"; dir = 4; reinf = 1},/obj/window{icon_state = "rwindow"; dir = 8; reinf = 1},/obj/window{icon_state = "rwindow"; dir = 1; reinf = 1},/turf/station/floor,/area) +"zC" = (/obj/window{icon_state = "rwindow"; dir = 4; reinf = 1},/turf/space,/area) +"zD" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area) +"zE" = (/obj/window{icon_state = "rwindow"; dir = 8; reinf = 1},/turf/space,/area) +"zF" = (/obj/machinery/power/apc{dir = 8},/obj/cable{icon_state = "0-4"; d2 = 4},/turf/station/floor,/area/solar_con) +"zG" = (/obj/window{icon_state = "rwindow"; dir = 4; reinf = 1},/obj/cable{icon_state = "1-8"; d1 = 1; d2 = 8},/turf/station/floor,/area/solar_con) +"zH" = (/obj/machinery/alarm{pixel_y = 24},/obj/machinery/door/firedoor,/turf/station/floor,/area/south_access) +"zI" = (/obj/landmark/alterations{name = "monkey"; icon = 'monkey.dmi'; icon_state = "marker"},/obj/cable{icon_state = "1-4"; d1 = 1; d2 = 4},/turf/station/floor,/area/south_access) +"zJ" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/south_access) +"zK" = (/obj/machinery/light_switch{pixel_x = 0; pixel_y = 24},/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/south_access) +"zL" = (/obj/machinery/firealarm{pixel_y = 32},/obj/cable{icon_state = "0-4"; d2 = 4},/obj/cable{icon_state = "0-8"; d2 = 8},/obj/cable,/turf/station/floor,/area/south_access) +"zM" = (/obj/machinery/alarm{pixel_y = 24},/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/south_access) +"zN" = (/obj/cable{icon_state = "0-8"; d2 = 8},/obj/machinery/power/apc{dir = 1},/obj/cable{icon_state = "0-4"; d2 = 4},/turf/station/floor,/area/south_access) +"zO" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/south_access) +"zP" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/landmark/alterations{name = "blobstart"; icon_state = "x3"},/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/south_access) +"zQ" = (/obj/machinery/door/firedoor,/obj/landmark/alterations{name = "barrier"},/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/south_access) +"zR" = (/obj/machinery/light_switch{pixel_y = 24},/obj/cable{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/station/floor,/area/south_access) +"zS" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/cable{icon_state = "1-8"; d1 = 1; d2 = 8},/turf/station/floor,/area/south_access) +"zT" = (/obj/machinery/camera{dir = 8; c_tag = "Observation"},/turf/station/floor,/area/south_access) +"zU" = (/obj/machinery/door/airlock,/turf/station/floor,/area) +"zV" = (/obj/cable{icon_state = "0-4"; d2 = 4},/obj/cable{icon_state = "0-8"; d2 = 8},/obj/cable,/obj/cable{icon_state = "0-2"; d2 = 2},/turf/station/floor{icon_state = "Floor1"; intact = 0},/area) +"zW" = (/obj/grille,/obj/window{icon_state = "rwindow"; dir = 1; reinf = 1},/obj/window{icon_state = "rwindow"; reinf = 1},/obj/window{icon_state = "rwindow"; reinf = 1},/turf/station/floor,/area) +"zX" = (/obj/grille,/obj/window{icon_state = "rwindow"; dir = 1; reinf = 1},/obj/window{icon_state = "rwindow"; dir = 4; reinf = 1},/turf/station/floor,/area) +"zY" = (/obj/grille,/obj/window{icon_state = "rwindow"; dir = 4; reinf = 1},/obj/window{icon_state = "rwindow"; dir = 8; reinf = 1},/obj/window{icon_state = "rwindow"; reinf = 1},/turf/station/floor,/area) +"zZ" = (/obj/window{icon_state = "rwindow"; reinf = 1},/turf/space,/area) +"Aa" = (/obj/window{icon_state = "rwindow"; dir = 4; reinf = 1},/obj/window{icon_state = "rwindow"; reinf = 1},/turf/space,/area) +"Ab" = (/obj/cable{icon_state = "0-4"; d2 = 4},/obj/cable{icon_state = "0-8"; d2 = 8},/obj/cable,/turf/station/floor{icon_state = "Floor1"; intact = 0},/area) +"Ac" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/closet/emcloset,/turf/station/floor,/area/south_access) +"Ad" = (/obj/closet/emcloset,/turf/station/floor,/area/south_access) +"Ae" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/closet/emcloset,/turf/station/floor,/area/south_access) +"Af" = (/obj/window{icon_state = "rwindow"; dir = 1; reinf = 1},/turf/space,/area) +"Ag" = (/obj/grille,/obj/window{icon_state = "rwindow"; reinf = 1},/obj/window{icon_state = "rwindow"; dir = 1; reinf = 1},/obj/window{icon_state = "rwindow"; dir = 8; reinf = 1},/turf/station/floor,/area) +"Ah" = (/obj/grille,/obj/window{icon_state = "rwindow"; reinf = 1},/obj/window{icon_state = "rwindow"; dir = 1; reinf = 1},/obj/window{icon_state = "rwindow"; dir = 4; reinf = 1},/turf/station/floor,/area) +"Ai" = (/obj/grille,/turf/space,/area) +"Aj" = (/turf/station/shuttle/wall,/area) +"Ak" = (/obj/grille,/obj/machinery/atmoalter/siphs/fullairsiphon,/turf/station/floor{icon_state = "Floor3"},/area/attack_ship) +"Al" = (/obj/machinery/mass_driver{dir = 4; id = "launch1"},/turf/station/floor{icon_state = "Floor3"},/area/attack_ship) +"Am" = (/turf/station/engine/floor,/area/attack_ship) +"An" = (/obj/machinery/door/poddoor{name = "torpedodoor"; id = "launch1"},/turf/station/engine/floor,/area/attack_ship) +"Ao" = (/turf/station/floor{icon_state = "Floor3"},/area/attack_ship) +"Ap" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor{icon_state = "Floor3"},/area/attack_ship) +"Aq" = (/obj/grille,/obj/window{dir = 1},/obj/window{dir = 8},/turf/station/floor,/area/attack_ship) +"Ar" = (/obj/grille,/obj/window{dir = 1},/obj/window,/turf/station/floor,/area/attack_ship) +"As" = (/obj/machinery/door/airlock,/turf/station/floor,/area/attack_ship) +"At" = (/obj/grille,/obj/window{dir = 1},/obj/window{dir = 4},/turf/station/floor,/area/attack_ship) +"Au" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/door/poddoor{name = "torpedodoor"; id = "load1"},/turf/station/floor{icon_state = "Floor3"},/area/attack_ship) +"Av" = (/obj/grille,/obj/window,/obj/window{dir = 1},/turf/station/floor,/area/attack_ship) +"Aw" = (/obj/grille,/obj/window{dir = 4},/obj/window{dir = 8},/turf/station/floor,/area/attack_ship) +"Ax" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/atmoalter/siphs/fullairsiphon,/turf/station/floor,/area/attack_ship) +"Ay" = (/obj/machinery/alarm{pixel_y = 24},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/attack_ship) +"Az" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/attack_ship) +"AA" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/attack_ship) +"AB" = (/obj/window{dir = 1},/obj/machinery/atmoalter/siphs/fullairsiphon,/obj/window{dir = 4},/turf/station/floor,/area/attack_ship) +"AC" = (/obj/window{dir = 8},/turf/space,/area) +"AD" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table{icon_state = "sides"; dir = 4},/obj/item/weapon/storage/toolbox,/turf/station/floor,/area/attack_ship) +"AE" = (/obj/machinery/dispenser{pltanks = 50},/turf/station/floor,/area/attack_ship) +"AF" = (/obj/machinery/door/window,/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/attack_ship) +"AG" = (/obj/machinery/mass_driver{name = "Torpedo Loader 1"; dir = 1; id = "load1"},/obj/machinery/door/window{dir = 4},/obj/bomb{btype = 1},/turf/station/floor{icon_state = "Floor3"},/area/attack_ship) +"AH" = (/obj/window{dir = 8},/obj/machinery/computer/pod{name = "Load Tube 1"; id = "load1"; time = 0},/turf/station/floor,/area/attack_ship) +"AI" = (/obj/machinery/atmoalter/heater{heatrate = 1.5e+007},/turf/station/floor,/area/attack_ship) +"AJ" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/weldfueltank,/turf/station/floor,/area/attack_ship) +"AK" = (/turf/station/shuttle/wall,/area/attack_ship) +"AL" = (/obj/grille,/obj/window,/obj/window{dir = 4},/turf/station/floor,/area/attack_ship) +"AM" = (/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/attack_ship) +"AN" = (/obj/window{dir = 8},/obj/window,/turf/space,/area) +"AO" = (/obj/table{icon_state = "sides"; dir = 4},/obj/item/weapon/pill_canister/antitoxin,/obj/item/weapon/pill_canister/antitoxin,/obj/item/weapon/pill_canister/antitoxin,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/timer,/obj/item/weapon/timer,/obj/item/weapon/timer,/turf/station/floor,/area/attack_ship) +"AP" = (/obj/bomb{btype = 1},/obj/bomb{btype = 1},/obj/bomb{btype = 1},/turf/station/floor,/area/attack_ship) +"AQ" = (/turf/station/floor,/area/attack_ship) +"AR" = (/obj/window{dir = 4},/turf/station/floor,/area/attack_ship) +"AS" = (/obj/item/weapon/clothing/suit/sp_suit,/obj/item/weapon/clothing/mask/gasmask,/obj/item/weapon/tank/jetpack,/obj/item/weapon/clothing/head/s_helmet,/obj/window{dir = 8},/turf/station/floor,/area/attack_ship) +"AT" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/closet/wardrobe,/turf/station/floor,/area/attack_ship) +"AU" = (/obj/table{icon_state = "corners"; dir = 10},/obj/machinery/computer/atmosphere/siphonswitch,/turf/station/floor,/area/attack_ship) +"AV" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table{icon_state = "corners"; dir = 6},/turf/station/floor,/area/attack_ship) +"AW" = (/obj/window{dir = 4},/obj/window{dir = 1},/turf/station/floor,/area/attack_ship) +"AX" = (/obj/table{icon_state = "sides"; dir = 4},/obj/item/weapon/radio/signaler{freq = 140.9},/obj/item/weapon/radio/signaler{freq = 140.9},/obj/item/weapon/radio/signaler{freq = 140.9},/obj/item/weapon/radio/signaler{freq = 140.9},/obj/item/weapon/radio/signaler{freq = 140.9},/turf/station/floor,/area/attack_ship) +"AY" = (/obj/machinery/atmoalter/siphs/fullairsiphon,/obj/window{dir = 4},/turf/station/floor,/area/attack_ship) +"AZ" = (/obj/window{dir = 8},/turf/station/floor,/area/attack_ship) +"Ba" = (/obj/sp_start{name = "roffer"; desc = "Attack Ship"; special = null},/turf/station/floor,/area/attack_ship) +"Bb" = (/obj/stool/chair{dir = 4},/turf/station/floor,/area/attack_ship) +"Bc" = (/obj/table{icon_state = "sides"; dir = 8},/obj/machinery/computer/pod{name = "Fire Torpedo 1"; id = "launch1"; time = 5},/turf/station/floor,/area/attack_ship) +"Bd" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table{icon_state = "corners"; dir = 5},/obj/window{dir = 4},/turf/station/floor,/area/attack_ship) +"Be" = (/obj/table{icon_state = "sides"; dir = 4},/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/prox_sensor,/obj/item/weapon/prox_sensor,/obj/item/weapon/radio/signaler{freq = 140.9},/turf/station/floor,/area/attack_ship) +"Bf" = (/obj/item/weapon/radio/beacon{freq = 140.3},/obj/machinery/atmoalter/siphs/scrubbers,/obj/window{dir = 4},/turf/station/floor,/area/attack_ship) +"Bg" = (/obj/sp_start{name = "hobnob"; desc = "Attack Ship"; special = null},/turf/station/floor,/area/attack_ship) +"Bh" = (/obj/landmark{name = "CTF-rogue"},/turf/station/floor,/area/attack_ship) +"Bi" = (/obj/table{icon_state = "sides"; dir = 8},/obj/machinery/computer/pod{name = "Fire Torpedo 2"; id = "launch2"; time = 5},/turf/station/floor,/area/attack_ship) +"Bj" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table{icon_state = "corners"; dir = 6},/obj/window{dir = 4},/turf/station/floor,/area/attack_ship) +"Bk" = (/obj/table{icon_state = "sides"; dir = 4},/obj/item/weapon/timer,/obj/item/weapon/timer,/obj/item/weapon/timer,/obj/item/weapon/timer,/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/prox_sensor,/obj/item/weapon/prox_sensor,/turf/station/floor,/area/attack_ship) +"Bl" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/attack_ship) +"Bm" = (/obj/machinery/door/window,/turf/station/floor,/area/attack_ship) +"Bn" = (/obj/item/weapon/radio/signaler{freq = 140.9},/turf/station/floor,/area/attack_ship) +"Bo" = (/obj/table{icon_state = "corners"; dir = 10},/obj/machinery/computer/security{name = "Targetting Sensors"; network = "AS"},/turf/station/floor,/area/attack_ship) +"Bp" = (/obj/window{dir = 4},/obj/window,/turf/station/floor,/area/attack_ship) +"Bq" = (/obj/machinery/mass_driver{name = "Torpedo Loader 2"; dir = 2; id = "load2"},/obj/bomb{btype = 1},/turf/station/floor{icon_state = "Floor3"},/area/attack_ship) +"Br" = (/obj/window{dir = 8},/obj/machinery/computer/pod{name = "Load Tube 2"; id = "load2"; time = 0},/turf/station/floor,/area/attack_ship) +"Bs" = (/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/floor,/area/attack_ship) +"Bt" = (/obj/machinery/atmoalter/canister/poisoncanister,/obj/bomb{btype = 1; active = 1},/turf/station/floor,/area/attack_ship) +"Bu" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/floor,/area/attack_ship) +"Bv" = (/obj/item/weapon/storage/toolbox,/turf/station/floor,/area/attack_ship) +"Bw" = (/obj/window{dir = 8},/obj/window{dir = 1},/turf/space,/area) +"Bx" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/door/poddoor{name = "torpedodoor"; id = "load2"},/turf/station/floor{icon_state = "Floor3"},/area/attack_ship) +"By" = (/obj/closet/l3closet,/turf/station/floor,/area/attack_ship) +"Bz" = (/obj/closet/emcloset,/turf/station/floor,/area/attack_ship) +"BA" = (/obj/grille,/obj/window{dir = 1},/obj/window{dir = 4},/obj/window{dir = 8},/turf/station/floor,/area/attack_ship) +"BB" = (/obj/window,/obj/machinery/atmoalter/siphs/fullairsiphon,/obj/window{dir = 4},/turf/station/floor,/area/attack_ship) +"BC" = (/obj/grille,/obj/window,/obj/window{dir = 8},/turf/station/floor,/area/attack_ship) +"BD" = (/obj/machinery/mass_driver{dir = 4; id = "launch2"},/turf/station/floor{icon_state = "Floor3"},/area/attack_ship) +"BE" = (/obj/machinery/door/poddoor{name = "torpedodoor"; id = "launch2"},/turf/station/engine/floor,/area/attack_ship) +"BF" = (/turf/station/floor,/area/weapon_sat) +"BG" = (/obj/grille,/turf/space,/area/weapon_sat) +"BH" = (/obj/machinery/computer/data/weapon/log,/turf/station/floor,/area/weapon_sat) +"BI" = (/turf/station/floor/grid,/area/weapon_sat) +"BJ" = (/obj/machinery/computer/teleporter,/turf/station/floor,/area/weapon_sat) +"BK" = (/obj/machinery/teleport/station,/turf/station/floor,/area/weapon_sat) +"BL" = (/obj/machinery/teleport/hub,/turf/station/floor,/area/weapon_sat) +"BM" = (/obj/machinery/door/airlock,/turf/station/floor,/area/weapon_sat) +"BN" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/weapon_sat) +"BO" = (/obj/item/weapon/radio/beacon,/turf/station/floor,/area/weapon_sat) +"BP" = (/obj/machinery/computer/data/weapon/info,/turf/station/floor,/area/weapon_sat) +"BQ" = (/turf/station/wall,/area/med_sat) +"BR" = (/obj/machinery/dispenser,/turf/station/floor,/area/med_sat) +"BS" = (/obj/closet/emcloset,/turf/station/floor,/area/med_sat) +"BT" = (/turf/station/floor,/area/med_sat) +"BU" = (/obj/machinery/door/airlock,/turf/station/floor,/area/med_sat) +"BV" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/med_sat) +"BW" = (/turf/station/floor{oxygen = 0; poison = 3e+006; n2 = 0},/area/med_sat) +"BX" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/mob/monkey,/turf/station/floor,/area/med_sat) +"BY" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/med_sat) +"BZ" = (/obj/table{icon_state = "sides"; dir = 4},/obj/item/weapon/card/data{name = "SE-Scan"; function = "dna_scan"; special = "SE"},/obj/item/weapon/card/data{name = "SI-Scan"; function = "dna_scan"; special = "SI"},/obj/item/weapon/card/data{name = "UE-Scan"; function = "dna_scan"; special = "UE"},/obj/item/weapon/card/data{name = "UI-Scan"; function = "dna_scan"; special = "UI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Scan"},/turf/station/floor,/area/med_sat) +"Ca" = (/obj/item/weapon/storage/disk_kit/disks,/turf/station/floor,/area/med_sat) +"Cb" = (/obj/machinery/dna_scanner,/turf/station/floor,/area/med_sat) +"Cc" = (/obj/machinery/scan_console,/turf/station/floor,/area/med_sat) +"Cd" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/secloset/animal,/turf/station/floor,/area/med_sat) +"Ce" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/card/data{name = "Data-Trunicate"; function = "data_trun"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Add"; function = "data_add"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Scramble"; function = "data_scramble"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Input"; function = "data_input"; data = "12"; special = null},/obj/item/weapon/storage/disk_kit/disks2{name = "Data-Controllers"},/turf/station/floor,/area/med_sat) +"Cf" = (/obj/item/weapon/game_kit,/turf/station/floor,/area/med_sat) +"Cg" = (/obj/machinery/computer/pod{name = "Mass Driver"; dir = 4; id = 5},/turf/station/floor{oxygen = 0; poison = 3e+006; n2 = 0},/area/med_sat) +"Ch" = (/obj/grille,/obj/window{dir = 8},/obj/window{dir = 4},/turf/station/floor,/area/med_sat) +"Ci" = (/obj/machinery/computer/dna,/turf/station/floor,/area/med_sat) +"Cj" = (/obj/machinery/door/window{icon = 'security.dmi'; access = "1100"},/turf/station/floor,/area/med_sat) +"Ck" = (/obj/item/weapon/flasks/oxygen,/obj/item/weapon/flasks/oxygen,/obj/item/weapon/flasks/oxygen,/turf/station/floor,/area/med_sat) +"Cl" = (/obj/item/weapon/flasks/coolant,/obj/item/weapon/flasks/coolant,/obj/item/weapon/flasks/coolant,/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/med_sat) +"Cm" = (/obj/machinery/mass_driver{dir = 4; id = 5},/obj/closet,/turf/station/floor{oxygen = 0; poison = 3e+006; n2 = 0},/area/med_sat) +"Cn" = (/mob/monkey,/turf/station/floor,/area/med_sat) +"Co" = (/obj/grille,/obj/window{dir = 8},/obj/window{dir = 4},/obj/window,/turf/station/floor,/area/med_sat) +"Cp" = (/obj/item/weapon/card/data{name = "M-Mutate"; function = "data_mutate"; data = "14A"; special = ""},/obj/item/weapon/card/data{name = "S-Mutate"; function = "data_mutate"; data = "CDE"; special = ""},/obj/item/weapon/card/data{name = "A-Mutate"; function = "data_mutate"; data = "AEC"; special = ""},/turf/station/floor,/area/med_sat) +"Cq" = (/obj/machinery/restruct,/turf/station/floor,/area/med_sat) +"Cr" = (/obj/item/weapon/flasks/plasma,/obj/item/weapon/flasks/plasma,/obj/item/weapon/flasks/plasma,/turf/station/floor,/area/med_sat) +"Cs" = (/obj/item/weapon/card/data{name = "DNA-help"; function = "dna_seq"},/turf/station/floor,/area/med_sat) +"Ct" = (/obj/machinery/sleeper,/turf/station/floor,/area/med_sat) +"Cu" = (/obj/machinery/computer/sleep_console,/turf/station/floor,/area/med_sat) +"Cv" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/syringe,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/s_tox,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/card/id{name = "Zach Licton's ID Card (1>1-0-0)"; access_level = 1; lab_access = 1; engine_access = 0; air_access = 0; registered = "Zach Licton"; assignment = "DNA Researcher"},/obj/item/weapon/pen,/turf/station/floor,/area/med_sat) +"Cw" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/syringe,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/s_tox,/obj/item/weapon/bottle/antitoxins,/turf/station/floor,/area/med_sat) +"Cx" = (/obj/machinery/freezer,/turf/station/floor,/area/med_sat) +"Cy" = (/obj/machinery/pipes/flexipipe,/obj/item/weapon/tank/anesthetic,/turf/station/floor,/area/med_sat) +"Cz" = (/obj/machinery/cryo_cell,/turf/station/floor,/area/med_sat) +"CA" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/rack,/obj/item/weapon/clothing/under/white,/obj/item/weapon/clothing/mask/surgical,/obj/item/weapon/clothing/gloves/latex,/obj/item/weapon/clothing/shoes/white,/turf/station/floor,/area/med_sat) +"CB" = (/obj/grille,/obj/window{dir = 8},/obj/window{dir = 4},/obj/window{dir = 1},/turf/station/floor,/area/med_sat) +"CC" = (/obj/item/weapon/card/data{name = "M-conv-H"; function = "worthless"; data = "SBSWAVVWFWVAZSFBS"; special = "human"},/obj/item/weapon/card/data{name = "H-conv-M"; function = "worthless"; data = "CDAFNSDHE"; special = "monkey"},/turf/station/floor,/area/med_sat) +"CD" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/card/data{name = "C-Help"; function = "dna_help"},/turf/station/floor,/area/med_sat) +"CE" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/syringe,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/s_tox,/obj/item/weapon/bottle/antitoxins,/turf/station/floor,/area/med_sat) +"CF" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/healthanalyzer,/obj/item/weapon/bottle/r_ch_cough,/obj/item/weapon/bottle/r_epil,/turf/station/floor,/area/med_sat) +"CG" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/mob/monkey,/turf/station/floor,/area/med_sat) +"CH" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/clothing/glasses/regular,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/clothing/mask/m_mask,/turf/station/floor,/area/med_sat) +"CI" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "UI-Replace"; function = "dna_replace"; special = "UI"},/obj/item/weapon/card/data{name = "UE-Replace"; function = "dna_replace"; special = "UE"},/obj/item/weapon/card/data{name = "SE-Replace"; function = "dna_replace"; special = "SE"},/obj/item/weapon/card/data{name = "SI-Replace"; function = "dna_replace"; special = "SI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Replace"},/turf/station/floor,/area/med_sat) +"CJ" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "Disk-Display"; function = "disk_dis"; data = ""; special = null},/obj/item/weapon/card/data{name = "Disk-Erase"; function = "disk_erase"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Disk-Copy"; function = "disk_copy"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Clear"; function = "data_clear"; data = "12"; special = null},/obj/item/weapon/storage/disk_kit/disks2{name = "Disk-Controllers"},/turf/station/floor,/area/med_sat) +"CK" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "UE-Human"; data = "493DB249EB6D13236100A37000800AB71"},/obj/item/weapon/card/data{name = "SI-Human"; data = "5BDFE293BA5500F9FFFD500AAFFE"},/obj/item/weapon/card/data{name = "SE-Human"; data = "CDE375C9A6C25A7DBDA50EC05AC6CEB63"},/obj/item/weapon/storage/disk_kit/disks2{name = "Human DNA"},/turf/station/floor,/area/med_sat) +"CL" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "SE-Monkey"; data = "CDEAF5B90AADBC6BA8033DB0A7FD613FA"},/obj/item/weapon/card/data{name = "SI-Monkey"; data = "2B6696D2B127E5A4"},/obj/item/weapon/card/data{name = "UE-Monkey"; data = "C8FFFE7EC09D80AEDEDB9A5A0B4085B61"},/obj/item/weapon/storage/disk_kit/disks2{name = "Monkey DNA"},/turf/station/floor,/area/med_sat) +"CM" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "SE-Add"; function = "dna_add"; special = "SE"},/obj/item/weapon/card/data{name = "SI-Add"; function = "dna_add"; special = "SI"},/obj/item/weapon/card/data{name = "UE-Add"; function = "dna_add"; special = "UE"},/obj/item/weapon/card/data{name = "UI-Add"; function = "dna_add"; special = "UI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Add"},/turf/station/floor,/area/med_sat) +"CN" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/card/data{name = "UE-Trunicate"; function = "dna_trun"; data = "32"; special = "UE"},/obj/item/weapon/card/data{name = "SI-Trunicate"; function = "dna_trun"; data = "16"; special = "SI"},/obj/item/weapon/card/data{name = "SE-Trunicate"; function = "dna_trun"; data = "32"; special = "SE"},/obj/item/weapon/card/data{name = "UI-Trunicate"; function = "dna_trun"; data = "12"; special = "UI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Trunicate"},/turf/station/floor,/area/med_sat) +"CO" = (/obj/sp_start{name = "zjm7891"; desc = "Researcher on Med. Sat."; special = null},/turf/station/floor,/area/med_sat) +"CP" = (/obj/item/weapon/radio/beacon,/obj/sp_start{name = "phoenixman"; desc = "Researcher on Med. Sat."},/turf/station/floor,/area/med_sat) +"CQ" = (/obj/machinery/pipes/flexipipe,/turf/station/floor,/area/med_sat) +"CR" = (/obj/sp_start{name = "exadv1"; desc = "Researcher on Med. Sat."; special = null},/turf/station/floor,/area/med_sat) +"CS" = (/obj/sp_start{name = "ryanfs"; desc = "Researcher on Med. Sat."; special = null},/turf/station/floor,/area/med_sat) +"CT" = (/obj/sp_start{name = "hobnob"; desc = "Researcher on Med. Sat."},/turf/station/floor,/area/med_sat) +"CU" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/storage/toolbox,/turf/station/floor,/area/med_sat) +"CV" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/med_sat) +"CW" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/storage/firstaid/toxin,/turf/station/floor,/area/med_sat) +"CX" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/storage/firstaid/fire,/turf/station/floor,/area/med_sat) +"CY" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/bottle/s_tox,/turf/station/floor,/area/med_sat) +"CZ" = (/obj/grille,/obj/window{dir = 8},/obj/window{dir = 1},/turf/station/floor,/area/secret_base) +"Da" = (/obj/grille,/obj/window,/obj/window{dir = 1},/turf/station/floor,/area/secret_base) +"Db" = (/obj/grille,/obj/window{dir = 4},/obj/window{dir = 1},/turf/station/floor,/area/secret_base) +"Dc" = (/obj/grille,/obj/window{dir = 8},/obj/window{dir = 4},/turf/station/floor,/area/secret_base) +"Dd" = (/obj/item/weapon/extinguisher,/turf/station/floor,/area/secret_base) +"De" = (/turf/station/floor,/area/secret_base) +"Df" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/secret_base) +"Dg" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/secret_base) +"Dh" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/extinguisher,/obj/stool/bed,/turf/station/floor,/area/secret_base) +"Di" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/bedsheetbin,/turf/station/floor,/area/secret_base) +"Dj" = (/obj/secloset/personal,/obj/window{dir = 8},/turf/station/floor,/area/secret_base) +"Dk" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/secloset/security1{allowed = "Prison Security,Prison Warden,Security Officer,Captain,Head of Personnel,Head of Research,Secret Base"},/turf/station/floor,/area/secret_base) +"Dl" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/secloset/highsec{allowed = "Captain,Head of Personnel,Head of Research,Secret Base"},/turf/station/floor,/area/secret_base) +"Dm" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/closet/l3closet,/turf/station/floor,/area/secret_base) +"Dn" = (/obj/closet/l3closet,/turf/station/floor,/area/secret_base) +"Do" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/card/data{name = "UI-Replace"; function = "dna_replace"; special = "UI"},/obj/item/weapon/card/data{name = "UE-Replace"; function = "dna_replace"; special = "UE"},/obj/item/weapon/card/data{name = "SE-Replace"; function = "dna_replace"; special = "SE"},/obj/item/weapon/card/data{name = "SI-Replace"; function = "dna_replace"; special = "SI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Replace"},/turf/station/floor,/area/secret_base) +"Dp" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/card/data{name = "Disk-Display"; function = "disk_dis"; data = ""; special = null},/obj/item/weapon/card/data{name = "Disk-Erase"; function = "disk_erase"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Disk-Copy"; function = "disk_copy"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Clear"; function = "data_clear"; data = "12"; special = null},/obj/item/weapon/storage/disk_kit/disks2{name = "Disk-Controllers"},/turf/station/floor,/area/secret_base) +"Dq" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/card/data{name = "UE-Human"; data = "493DB249EB6D13236100A37000800AB71"},/obj/item/weapon/card/data{name = "SI-Human"; data = "5BDFE293BA5500F9FFFD500AAFFE"},/obj/item/weapon/card/data{name = "SE-Human"; data = "CDE375C9A6C25A7DBDA50EC05AC6CEB63"},/obj/item/weapon/storage/disk_kit/disks2{name = "Human DNA"},/turf/station/floor,/area/secret_base) +"Dr" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/card/data{name = "SE-Monkey"; data = "CDEAF5B90AADBC6BA8033DB0A7FD613FA"},/obj/item/weapon/card/data{name = "SI-Monkey"; data = "2B6696D2B127E5A4"},/obj/item/weapon/card/data{name = "UE-Monkey"; data = "C8FFFE7EC09D80AEDEDB9A5A0B4085B61"},/obj/item/weapon/storage/disk_kit/disks2{name = "Monkey DNA"},/turf/station/floor,/area/secret_base) +"Ds" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/card/data{name = "SE-Add"; function = "dna_add"; special = "SE"},/obj/item/weapon/card/data{name = "SI-Add"; function = "dna_add"; special = "SI"},/obj/item/weapon/card/data{name = "UE-Add"; function = "dna_add"; special = "UE"},/obj/item/weapon/card/data{name = "UI-Add"; function = "dna_add"; special = "UI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Add"},/turf/station/floor,/area/secret_base) +"Dt" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/card/data{name = "UE-Trunicate"; function = "dna_trun"; data = "32"; special = "UE"},/obj/item/weapon/card/data{name = "SI-Trunicate"; function = "dna_trun"; data = "16"; special = "SI"},/obj/item/weapon/card/data{name = "SE-Trunicate"; function = "dna_trun"; data = "32"; special = "SE"},/obj/item/weapon/card/data{name = "UI-Trunicate"; function = "dna_trun"; data = "12"; special = "UI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Trunicate"},/turf/station/floor,/area/secret_base) +"Du" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/locator,/turf/station/floor,/area/secret_base) +"Dv" = (/obj/stool/bed,/turf/station/floor,/area/secret_base) +"Dw" = (/obj/item/weapon/paper_bin,/turf/station/floor,/area/secret_base) +"Dx" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/window{dir = 8},/turf/station/floor,/area/secret_base) +"Dy" = (/obj/item/weapon/storage/handcuff_kit,/turf/station/floor,/area/secret_base) +"Dz" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/storage/handcuff_kit,/turf/station/floor,/area/secret_base) +"DA" = (/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/secret_base) +"DB" = (/obj/machinery/door/window{dir = 8},/turf/station/floor,/area/secret_base) +"DC" = (/obj/item/weapon/storage/disk_kit/disks,/turf/station/floor,/area/secret_base) +"DD" = (/obj/item/weapon/card/data{name = "M-Mutate"; function = "data_mutate"; data = "14A"; special = ""},/obj/item/weapon/card/data{name = "S-Mutate"; function = "data_mutate"; data = "CDE"; special = ""},/obj/item/weapon/card/data{name = "A-Mutate"; function = "data_mutate"; data = "AEC"; special = ""},/turf/station/floor,/area/secret_base) +"DE" = (/obj/item/weapon/card/data{name = "DNA-help"; function = "dna_seq"},/turf/station/floor,/area/secret_base) +"DF" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/computer/dna,/turf/station/floor,/area/secret_base) +"DG" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/closet/wardrobe/mixed,/obj/window,/turf/station/floor,/area/secret_base) +"DH" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/door/window{dir = 4},/turf/station/floor,/area/secret_base) +"DI" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table,/obj/item/weapon/pen,/obj/window,/turf/station/floor,/area/secret_base) +"DJ" = (/obj/window{dir = 8},/turf/station/floor,/area/secret_base) +"DK" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/clothing/mask/m_mask,/turf/station/floor,/area/secret_base) +"DL" = (/obj/item/weapon/clothing/mask/m_mask,/turf/station/floor,/area/secret_base) +"DM" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/storage/backpack,/obj/item/weapon/storage/flashbang_kit,/turf/station/floor,/area/secret_base) +"DN" = (/obj/item/weapon/storage/backpack,/obj/item/weapon/storage/flashbang_kit,/turf/station/floor,/area/secret_base) +"DO" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/card/data{name = "SE-Scan"; function = "dna_scan"; special = "SE"},/obj/item/weapon/card/data{name = "SI-Scan"; function = "dna_scan"; special = "SI"},/obj/item/weapon/card/data{name = "UE-Scan"; function = "dna_scan"; special = "UE"},/obj/item/weapon/card/data{name = "UI-Scan"; function = "dna_scan"; special = "UI"},/obj/item/weapon/storage/disk_kit/disks2{name = "DNA-Scan"},/turf/station/floor,/area/secret_base) +"DP" = (/obj/item/weapon/infra_sensor,/turf/station/floor,/area/secret_base) +"DQ" = (/obj/item/weapon/wrapping_paper,/turf/station/floor,/area/secret_base) +"DR" = (/obj/rack,/obj/item/weapon/clothing/suit/sp_suit,/obj/item/weapon/clothing/head/s_helmet,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/glasses/sunglasses,/obj/item/weapon/clothing/mask/gasmask,/obj/item/weapon/clothing/shoes/black,/obj/item/weapon/clothing/under/black,/obj/item/weapon/tank/jetpack,/obj/item/weapon/radio/headset,/turf/station/floor,/area/secret_base) +"DS" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/rack,/obj/item/weapon/clothing/suit/sp_suit,/obj/item/weapon/clothing/head/s_helmet,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/glasses/sunglasses,/obj/item/weapon/clothing/mask/gasmask,/obj/item/weapon/clothing/shoes/black,/obj/item/weapon/clothing/under/black,/obj/item/weapon/tank/jetpack,/obj/item/weapon/radio/headset,/turf/station/floor,/area/secret_base) +"DT" = (/obj/rack,/obj/item/weapon/clothing/suit/swat_suit,/obj/item/weapon/clothing/head/swat_hel,/obj/item/weapon/clothing/shoes/swat,/obj/item/weapon/clothing/gloves/swat,/obj/item/weapon/gun/energy/taser_gun,/obj/item/weapon/clothing/mask/robot/swat,/obj/item/weapon/clothing/under/black,/obj/item/weapon/clothing/glasses/thermal,/obj/item/weapon/radio/headset,/turf/station/floor,/area/secret_base) +"DU" = (/obj/machinery/dna_scanner,/turf/station/floor,/area/secret_base) +"DV" = (/obj/machinery/scan_console,/turf/station/floor,/area/secret_base) +"DW" = (/obj/item/weapon/card/data{name = "M-conv-H"; function = "worthless"; data = "SBSWAVVWFWVAZSFBS"; special = "human"},/obj/item/weapon/card/data{name = "H-conv-M"; function = "worthless"; data = "CDAFNSDHE"; special = "monkey"},/turf/station/floor,/area/secret_base) +"DX" = (/obj/machinery/restruct,/turf/station/floor,/area/secret_base) +"DY" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/card/data{name = "Data-Trunicate"; function = "data_trun"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Add"; function = "data_add"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Scramble"; function = "data_scramble"; data = "12"; special = null},/obj/item/weapon/card/data{name = "Data-Input"; function = "data_input"; data = "12"; special = null},/obj/item/weapon/storage/disk_kit/disks2{name = "Data-Controllers"},/turf/station/floor,/area/secret_base) +"DZ" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/dropper,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/pill_canister/epilepsy,/obj/item/weapon/pill_canister/cough,/turf/station/floor,/area/secret_base) +"Ea" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/clipboard,/obj/item/weapon/pen,/obj/item/weapon/m_pill/superpill,/turf/station/floor,/area/secret_base) +"Eb" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/syringe,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/pill_canister/Tourette,/turf/station/floor,/area/secret_base) +"Ec" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/syndicate_uplink,/turf/station/floor,/area/secret_base) +"Ed" = (/obj/machinery/recharger,/turf/station/floor,/area/secret_base) +"Ee" = (/obj/closet/wardrobe/white,/turf/station/floor,/area/secret_base) +"Ef" = (/obj/secloset/animal,/turf/station/floor,/area/secret_base) +"Eg" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/sleeper,/turf/station/floor,/area/secret_base) +"Eh" = (/obj/machinery/computer/sleep_console,/turf/station/floor,/area/secret_base) +"Ei" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/paper_bin,/turf/station/floor,/area/secret_base) +"Ej" = (/obj/machinery/door/window,/turf/station/floor,/area/secret_base) +"Ek" = (/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/turf/station/floor,/area/secret_base) +"El" = (/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/turf/station/floor,/area/secret_base) +"Em" = (/obj/item/weapon/sheet/r_metal,/obj/item/weapon/sheet/r_metal,/turf/station/floor,/area/secret_base) +"En" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/alarm,/turf/station/floor,/area/secret_base) +"Eo" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/clothing/suit/firesuit,/obj/item/weapon/clothing/suit/firesuit,/turf/station/floor,/area/secret_base) +"Ep" = (/obj/item/weapon/clothing/suit/straight_jacket,/turf/station/floor,/area/secret_base) +"Eq" = (/obj/item/weapon/clothing/glasses/meson,/obj/item/weapon/clothing/glasses/thermal,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/ears/earmuffs,/obj/item/weapon/clothing/ears/earmuffs,/turf/station/floor,/area/secret_base) +"Er" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/clothing/glasses/meson,/obj/item/weapon/clothing/glasses/thermal,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/ears/earmuffs,/obj/item/weapon/clothing/ears/earmuffs,/turf/station/floor,/area/secret_base) +"Es" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/dispenser,/turf/station/floor,/area/secret_base) +"Et" = (/obj/item/weapon/extinguisher,/obj/machinery/atmoalter/canister/n2canister,/turf/station/floor,/area/secret_base) +"Eu" = (/obj/item/weapon/brutepack,/turf/station/floor,/area/secret_base) +"Ev" = (/obj/item/weapon/clothing/under/yellow,/obj/item/weapon/clothing/under/orange,/turf/station/floor,/area/secret_base) +"Ew" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/dispenser,/turf/station/floor,/area/secret_base) +"Ex" = (/obj/machinery/atmoalter/heater,/turf/station/floor,/area/secret_base) +"Ey" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/sleeper,/turf/station/floor,/area/secret_base) +"Ez" = (/obj/machinery/dispenser,/turf/station/floor,/area/secret_base) +"EA" = (/obj/item/weapon/card/id{name = "Secret Base Locker Access"; access_level = 0; lab_access = 0; engine_access = 0; air_access = 0; registered = "Secret Base Use Only"; assignment = "Secret Base"},/turf/station/floor,/area/secret_base) +"EB" = (/obj/secloset/security2{allowed = "Prison Security,Prison Warden,Forensic Technician,Security Officer,Captain,Head of Personnel,Head of Research,Secret Base"},/turf/station/floor,/area/secret_base) +"EC" = (/obj/window,/turf/station/floor,/area/secret_base) +"ED" = (/obj/machinery/atmoalter/canister/n2canister,/turf/station/floor,/area/secret_base) +"EE" = (/obj/item/weapon/flasks/coolant,/obj/item/weapon/flasks/oxygen,/obj/item/weapon/flasks/plasma,/turf/station/floor,/area/secret_base) +"EF" = (/obj/item/weapon/ointment,/turf/station/floor,/area/secret_base) +"EG" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/computer/med_data,/turf/station/floor,/area/secret_base) +"EH" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/sp_start{name = "exadv1"; desc = "Secret Base"; special = null},/obj/window{dir = 8},/turf/station/floor,/area/secret_base) +"EI" = (/obj/sp_start{name = "soraku"; desc = "Secret Base"; special = null},/obj/window{dir = 4},/turf/station/floor,/area/secret_base) +"EJ" = (/obj/machinery/power/apc{start_charge = 0; cell_type = 0},/turf/station/floor,/area/secret_base) +"EK" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area/secret_base) +"EL" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area/secret_base) +"EM" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/brutepack,/turf/station/floor,/area/secret_base) +"EN" = (/obj/machinery/freezer,/turf/station/floor,/area/secret_base) +"EO" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/pipes/flexipipe,/turf/station/floor,/area/secret_base) +"EP" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/machinery/cryo_cell,/turf/station/floor,/area/secret_base) +"EQ" = (/obj/item/weapon/disk/nuclear,/turf/station/floor,/area/secret_base) +"ER" = (/obj/machinery/nuclearbomb{icon_state = "nuclearbomb1"; anchored = 1; extended = 1},/turf/station/floor,/area/secret_base) +"ES" = (/obj/machinery/computer/communications,/turf/station/floor,/area/secret_base) +"ET" = (/obj/sp_start{name = "epox"; desc = "Secret Base"; special = null},/obj/window{dir = 8},/turf/station/floor,/area/secret_base) +"EU" = (/obj/item/weapon/radio/beacon,/obj/sp_start{name = "hobnob"; desc = "Secret Base"; special = null},/turf/station/floor,/area/secret_base) +"EV" = (/obj/machinery/atmoalter/canister/oxygencanister{t_status = 1; t_per = 10000},/turf/station/floor,/area/secret_base) +"EW" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/floor,/area/secret_base) +"EX" = (/obj/item/weapon/storage/firstaid/syringes,/turf/station/floor,/area/secret_base) +"EY" = (/obj/machinery/computer/security,/turf/station/floor,/area/secret_base) +"EZ" = (/obj/sp_start{name = "thiefjack"; desc = "Secret Base"; special = null},/obj/window{dir = 8},/obj/window,/turf/station/floor,/area/secret_base) +"Fa" = (/obj/machinery/door/window{dir = 4},/obj/sp_start{name = "hikato"; desc = "Secret Base"; special = null},/turf/station/floor,/area/secret_base) +"Fb" = (/obj/sp_start{name = "expertadvisor"; desc = "Secret Base"; special = null},/obj/window,/turf/station/floor,/area/secret_base) +"Fc" = (/obj/grille,/obj/window{dir = 4},/obj/window{dir = 8},/turf/station/floor,/area/secret_base) +"Fd" = (/obj/machinery/computer/teleporter,/turf/station/floor,/area/secret_base) +"Fe" = (/obj/machinery/teleport/station,/turf/station/floor,/area/secret_base) +"Ff" = (/obj/machinery/teleport/hub,/turf/station/floor,/area/secret_base) +"Fg" = (/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/floor,/area/secret_base) +"Fh" = (/obj/machinery/atmoalter/canister/anesthcanister,/turf/station/floor,/area/secret_base) +"Fi" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/table,/obj/item/weapon/storage/firstaid/regular,/turf/station/floor,/area/secret_base) +"Fj" = (/obj/item/weapon/radio,/turf/station/floor,/area/secret_base) +"Fk" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/ointment,/turf/station/floor,/area/secret_base) +"Fl" = (/turf/station/wall,/area/secret_base) +"Fm" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/hand_tele,/turf/station/floor,/area/secret_base) +"Fn" = (/obj/table,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/bottle/rejuvenators,/turf/station/floor,/area/secret_base) +"Fo" = (/obj/grille,/obj/window{dir = 4},/obj/window{dir = 8},/obj/window,/turf/station/floor,/area/secret_base) +"Fp" = (/obj/item/weapon/storage/toolbox,/obj/item/weapon/crowbar,/turf/station/floor,/area/secret_base) +"Fq" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/storage/trackimp_kit,/turf/station/floor,/area/secret_base) +"Fr" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/bottle/r_epil,/obj/item/weapon/bottle/r_ch_cough,/turf/station/floor,/area/secret_base) +"Fs" = (/obj/machinery/atmoalter/siphs/fullairsiphon/port,/turf/station/floor,/area/secret_base) +"Ft" = (/obj/machinery/atmoalter/siphs/scrubbers/port,/turf/station/floor,/area/secret_base) +"Fu" = (/obj/watertank,/turf/station/floor,/area/secret_base) +"Fv" = (/obj/weldfueltank,/turf/station/floor,/area/secret_base) +"Fw" = (/obj/secloset/medical1{allowed = "Medical Researcher,Prison Doctor,Medical Doctor,Captain,Head of Research,Secret Base"},/turf/station/floor,/area/secret_base) +"Fx" = (/obj/secloset/medical2{allowed = "Medical Researcher,Prison Doctor,Medical Doctor,Captain,Head of Research,Secret Base"},/turf/station/floor,/area/secret_base) +"Fy" = (/obj/table,/obj/item/weapon/healthanalyzer,/obj/item/weapon/syringe,/obj/item/weapon/bottle/antitoxins,/turf/station/floor,/area/secret_base) +"Fz" = (/obj/window,/obj/item/weapon/infra_sensor,/turf/station/floor,/area/secret_base) +"FA" = (/obj/window,/obj/item/weapon/wrapping_paper,/turf/station/floor,/area/secret_base) +"FB" = (/obj/machinery/computer/pod{id = "sb1"},/turf/station/floor,/area/secret_base) +"FC" = (/obj/machinery/mass_driver{dir = 4; id = "sb1"},/obj/machinery/pod{dir = 4},/turf/station/engine/floor,/area/secret_base) +"FD" = (/obj/machinery/door/poddoor{id = "sb1"},/turf/station/engine/floor,/area/secret_base) +"FE" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/closet/wardrobe/mixed,/turf/station/floor,/area/secret_base) +"FF" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/table,/obj/item/weapon/pen,/turf/station/floor,/area/secret_base) +"FG" = (/obj/machinery/computer/pod{id = "sb2"},/turf/station/floor,/area/secret_base) +"FH" = (/obj/machinery/door/window,/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/floor,/area/secret_base) +"FI" = (/obj/machinery/mass_driver{dir = 4; id = "sb2"},/obj/machinery/recon{dir = 4},/turf/station/engine/floor,/area/secret_base) +"FJ" = (/obj/machinery/door/poddoor{id = "sb2"},/turf/station/engine/floor,/area/secret_base) +"FK" = (/obj/machinery/computer/pod{id = "sb3"},/turf/station/floor,/area/secret_base) +"FL" = (/obj/machinery/door/window,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/floor,/area/secret_base) +"FM" = (/obj/machinery/mass_driver{dir = 4; id = "sb3"},/obj/machinery/recon{dir = 4},/turf/station/engine/floor,/area/secret_base) +"FN" = (/obj/machinery/door/poddoor{id = "sb3"},/turf/station/engine/floor,/area/secret_base) +"FO" = (/obj/grille,/obj/window{dir = 4},/obj/window{dir = 8},/obj/window{dir = 1},/turf/station/floor,/area/secret_base) +"FP" = (/obj/machinery/computer/pod{id = "sb4"},/turf/station/floor,/area/secret_base) +"FQ" = (/obj/machinery/mass_driver{dir = 4; id = "sb4"},/obj/machinery/recon{dir = 4},/turf/station/engine/floor,/area/secret_base) +"FR" = (/obj/machinery/door/poddoor{id = "sb4"},/turf/station/engine/floor,/area/secret_base) +"FS" = (/obj/item/weapon/radio/beacon,/turf/space,/area) +"FT" = (/obj/machinery/computer/pod{id = "sb5"},/turf/station/floor,/area/secret_base) +"FU" = (/obj/machinery/mass_driver{dir = 4; id = "sb5"},/turf/station/engine/floor,/area/secret_base) +"FV" = (/obj/machinery/door/poddoor{id = "sb5"},/turf/station/engine/floor,/area/secret_base) +"FW" = (/turf/station/command/wall,/area/supply_station) +"FX" = (/obj/item/weapon/storage/handcuff_kit,/obj/item/weapon/storage/handcuff_kit,/obj/item/weapon/storage/handcuff_kit,/obj/item/weapon/storage/handcuff_kit,/obj/item/weapon/storage/handcuff_kit,/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"FY" = (/obj/item/weapon/storage/flashbang_kit,/obj/item/weapon/storage/flashbang_kit,/obj/item/weapon/storage/flashbang_kit,/obj/item/weapon/storage/flashbang_kit,/obj/item/weapon/storage/flashbang_kit,/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"FZ" = (/obj/rack,/obj/item/weapon/clothing/suit/swat_suit,/obj/item/weapon/clothing/head/swat_hel,/obj/item/weapon/clothing/shoes/swat,/obj/item/weapon/clothing/gloves/swat,/obj/item/weapon/gun/energy/taser_gun,/obj/item/weapon/clothing/mask/robot/swat,/obj/item/weapon/clothing/under/black,/obj/item/weapon/clothing/glasses/thermal,/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"Ga" = (/turf/station/command/floor,/area/supply_station) +"Gb" = (/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"Gc" = (/obj/item/weapon/storage/backpack,/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"Gd" = (/obj/machinery/atmoalter/canister/n2canister,/turf/station/command/floor,/area/supply_station) +"Ge" = (/obj/machinery/firealarm{pixel_x = -32},/turf/station/command/floor,/area/supply_station) +"Gf" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/item/weapon/extinguisher,/turf/station/floor,/area/secret_base) +"Gg" = (/obj/grille,/obj/window{dir = 8},/obj/window,/turf/station/floor,/area/secret_base) +"Gh" = (/obj/grille,/obj/window{dir = 1},/obj/window,/turf/station/floor,/area/secret_base) +"Gi" = (/obj/grille,/obj/window{dir = 4},/obj/window,/turf/station/floor,/area/secret_base) +"Gj" = (/obj/bedsheetbin,/turf/station/command/floor,/area/supply_station) +"Gk" = (/obj/item/weapon/storage/trackimp_kit,/turf/station/command/floor,/area/supply_station) +"Gl" = (/obj/item/weapon/paper_bin,/obj/item/weapon/game_kit,/turf/station/command/floor,/area/supply_station) +"Gm" = (/obj/machinery/firealarm{pixel_y = 32},/turf/station/command/floor,/area/supply_station) +"Gn" = (/obj/watertank,/turf/station/command/floor,/area/supply_station) +"Go" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 4; access = "4400"},/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"Gp" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 8; access = "4400"},/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"Gq" = (/obj/closet/l3closet,/turf/station/command/floor,/area/supply_station) +"Gr" = (/obj/machinery/atmoalter/canister/oxygencanister,/turf/station/command/floor,/area/supply_station) +"Gs" = (/obj/item/weapon/storage/toolbox,/obj/item/weapon/storage/backpack,/obj/item/weapon/clothing/glasses/sunglasses,/obj/item/weapon/clothing/ears/earmuffs,/turf/station/command/floor,/area/supply_station) +"Gt" = (/obj/item/weapon/tile,/obj/item/weapon/rods,/turf/station/command/floor,/area/supply_station) +"Gu" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/clothing/mask/surgical,/obj/item/weapon/clothing/mask/surgical,/obj/item/weapon/clothing/mask/surgical,/obj/item/weapon/clothing/mask/m_mask,/obj/item/weapon/clothing/mask/m_mask,/obj/item/weapon/clothing/mask/m_mask,/obj/item/weapon/radio/electropack,/obj/item/weapon/radio/electropack,/turf/station/command/floor,/area/supply_station) +"Gv" = (/obj/machinery/atmoalter/canister/poisoncanister,/turf/station/command/floor,/area/supply_station) +"Gw" = (/obj/machinery/firealarm{pixel_x = 32},/turf/station/command/floor,/area/supply_station) +"Gx" = (/obj/item/weapon/flasks/coolant,/obj/item/weapon/flasks/oxygen,/obj/item/weapon/flasks/plasma,/turf/station/command/floor,/area/supply_station) +"Gy" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/infra,/obj/item/weapon/infra,/obj/item/weapon/infra_sensor,/obj/item/weapon/locator,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/obj/item/weapon/timer,/turf/station/command/floor,/area/supply_station) +"Gz" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/infra,/obj/item/weapon/infra,/obj/item/weapon/infra_sensor,/obj/item/weapon/locator,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/obj/item/weapon/timer,/turf/station/command/floor,/area/supply_station) +"GA" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/igniter,/obj/item/weapon/igniter,/obj/item/weapon/infra,/obj/item/weapon/infra,/obj/item/weapon/infra_sensor,/obj/item/weapon/locator,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/radio/signaler,/obj/item/weapon/timer,/obj/item/weapon/timer,/turf/station/command/floor,/area/supply_station) +"GB" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/clothing/mask/surgical,/obj/item/weapon/clothing/mask/surgical,/obj/item/weapon/clothing/mask/surgical,/obj/item/weapon/clothing/mask/m_mask,/obj/item/weapon/clothing/mask/m_mask,/obj/item/weapon/clothing/mask/m_mask,/obj/item/weapon/radio/electropack,/obj/item/weapon/radio/electropack,/turf/station/command/floor,/area/supply_station) +"GC" = (/obj/machinery/atmoalter/canister/anesthcanister,/turf/station/command/floor,/area/supply_station) +"GD" = (/obj/item/weapon/table_parts,/obj/item/weapon/rack_parts,/turf/station/command/floor,/area/supply_station) +"GE" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/clipboard,/obj/item/weapon/clipboard,/obj/item/weapon/clipboard,/obj/item/weapon/pen,/obj/item/weapon/pen,/obj/item/weapon/pen,/turf/station/command/floor,/area/supply_station) +"GF" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/storage/disk_kit,/obj/item/weapon/storage/id_kit,/turf/station/command/floor,/area/supply_station) +"GG" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/storage/gl_kit,/obj/item/weapon/storage/lglo_kit,/obj/item/weapon/storage/stma_kit,/turf/station/command/floor,/area/supply_station) +"GH" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/head/helmet,/obj/item/weapon/clothing/suit/armor,/obj/item/weapon/flash,/turf/station/command/floor,/area/supply_station) +"GI" = (/obj/machinery/dispenser,/turf/station/command/floor,/area/supply_station) +"GJ" = (/obj/weldfueltank,/turf/station/command/floor,/area/supply_station) +"GK" = (/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/toxin,/turf/station/command/floor,/area/supply_station) +"GL" = (/obj/table,/obj/item/weapon/storage/firstaid/syringes,/obj/item/weapon/bottle/toxins,/obj/item/weapon/bottle/s_tox,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/r_epil,/obj/item/weapon/bottle/r_ch_cough,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/dropper,/turf/station/command/floor,/area/supply_station) +"GM" = (/obj/item/weapon/camera,/turf/station/command/floor,/area/supply_station) +"GN" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/head/helmet,/obj/item/weapon/clothing/suit/armor,/obj/item/weapon/flash,/turf/station/command/floor,/area/supply_station) +"GO" = (/obj/item/weapon/sheet/metal{amount = 5},/turf/station/command/floor,/area/supply_station) +"GP" = (/obj/machinery/door/window{dir = 4},/turf/station/command/floor,/area/supply_station) +"GQ" = (/obj/move/wall,/turf/space,/area/vehicles/shuttle1) +"GR" = (/obj/move/floor,/obj/window,/obj/window{dir = 1},/obj/grille,/turf/space,/area/vehicles/shuttle1) +"GS" = (/obj/closet/emcloset,/turf/station/command/floor,/area/supply_station) +"GT" = (/obj/move/floor,/obj/window{dir = 1},/turf/space,/area/vehicles/shuttle1) +"GU" = (/obj/machinery/door/window,/turf/station/command/floor,/area/supply_station) +"GV" = (/obj/move/floor,/obj/window{dir = 4},/obj/window{dir = 8},/obj/grille,/turf/space,/area/vehicles/shuttle1) +"GW" = (/obj/move/floor,/obj/window{dir = 8},/turf/space,/area/vehicles/shuttle1) +"GX" = (/obj/move/floor,/turf/space,/area/vehicles/shuttle1) +"GY" = (/obj/move/floor,/obj/window{dir = 4},/turf/space,/area/vehicles/shuttle1) +"GZ" = (/obj/move/floor,/obj/window{dir = 4},/obj/grille,/turf/space,/area/vehicles/shuttle1) +"Ha" = (/obj/item/weapon/sheet/glass,/obj/item/weapon/sheet/glass,/turf/station/command/floor,/area/supply_station) +"Hb" = (/turf/station/command/wall{icon_state = "CCWall2"},/area/supply_station) +"Hc" = (/obj/move/floor,/obj/item/weapon/radio/beacon{freq = 140.5},/turf/space,/area/vehicles/shuttle1) +"Hd" = (/obj/move/floor,/obj/shuttle/door,/turf/space,/area/vehicles/shuttle1) +"He" = (/obj/machinery/door/airlock,/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"Hf" = (/obj/grille,/obj/window{dir = 8},/obj/window{dir = 4},/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"Hg" = (/obj/machinery/computer/teleporter,/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"Hh" = (/obj/machinery/teleport/station,/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"Hi" = (/obj/machinery/teleport/hub,/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"Hj" = (/obj/item/weapon/hand_tele,/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"Hk" = (/obj/move/floor,/obj/machinery/connector{dir = 4; p_dir = 4},/obj/window{dir = 4},/obj/window,/obj/machinery/atmoalter/canister/oxygencanister{c_status = 1},/turf/space,/area/vehicles/shuttle1) +"Hl" = (/obj/move/floor,/obj/window{dir = 1},/obj/machinery/shuttle/engine/heater,/turf/space,/area/vehicles/shuttle1) +"Hm" = (/obj/move/floor,/obj/machinery/connector{dir = 8; p_dir = 8},/obj/window{dir = 8},/obj/window,/obj/machinery/atmoalter/canister/poisoncanister{c_status = 1},/turf/space,/area/vehicles/shuttle1) +"Hn" = (/turf/station/command/wall{icon_state = "CCWall2"},/area) +"Ho" = (/obj/move/floor,/obj/machinery/shuttle/engine/platform,/obj/machinery/pipes/high_capacity{icon_state = "6"; dir = 6; p_dir = 6},/turf/space,/area/vehicles/shuttle1) +"Hp" = (/obj/move/floor,/obj/machinery/shuttle/engine/platform,/obj/machinery/shuttle/engine/router,/turf/space,/area/vehicles/shuttle1) +"Hq" = (/obj/move/floor,/obj/machinery/shuttle/engine/platform,/obj/machinery/pipes/high_capacity{icon_state = "10"; dir = 10; p_dir = 10},/turf/space,/area/vehicles/shuttle1) +"Hr" = (/obj/machinery/computer/pod{name = "Mass Driver"; id = 50},/turf/station/command/floor,/area/supply_station) +"Hs" = (/obj/machinery/mass_driver{dir = 4; id = 50},/obj/machinery/recon{dir = 4},/turf/station/command/floor,/area/supply_station) +"Ht" = (/obj/machinery/door/poddoor{id = 50},/turf/station/command/floor,/area/supply_station) +"Hu" = (/obj/machinery/computer/security{network = "SS13"},/turf/station/command/floor{icon_state = "Floor2"},/area) +"Hv" = (/obj/machinery/computer/security{network = "PS13"; maplevel = 8},/turf/station/command/floor{icon_state = "Floor2"},/area) +"Hw" = (/obj/machinery/computer/security{network = "PS13"; maplevel = 7},/turf/station/command/floor{icon_state = "Floor2"},/area) +"Hx" = (/obj/rack,/obj/item/weapon/clothing/suit/sp_suit,/obj/item/weapon/clothing/head/s_helmet,/obj/item/weapon/clothing/gloves/black,/obj/item/weapon/clothing/glasses/sunglasses,/obj/item/weapon/clothing/mask/gasmask,/obj/item/weapon/clothing/shoes/black,/obj/item/weapon/clothing/under/black,/obj/item/weapon/tank/jetpack,/obj/item/weapon/radio/headset,/turf/station/command/floor{icon_state = "Floor2"},/area) +"Hy" = (/obj/move/wall{icon_state = ""},/obj/machinery/shuttle/engine/platform{dir = 5},/obj/machinery/shuttle/engine/propulsion/burst/left,/turf/space,/area/vehicles/shuttle1) +"Hz" = (/obj/move/wall{icon_state = ""},/obj/machinery/shuttle/engine/platform{dir = 1},/obj/machinery/shuttle/engine/propulsion,/turf/space,/area/vehicles/shuttle1) +"HA" = (/obj/move/wall{icon_state = ""},/obj/machinery/shuttle/engine/platform{dir = 9},/obj/machinery/shuttle/engine/propulsion/burst/right,/turf/space,/area/vehicles/shuttle1) +"HB" = (/turf/station/command/floor{icon_state = "Floor2"},/area) +"HC" = (/obj/item/weapon/radio/beacon{freq = 129.3},/turf/station/command/floor{icon_state = "Floor2"},/area) +"HD" = (/obj/machinery/firealarm{pixel_x = 32},/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"HE" = (/obj/sp_start{name = "hobnob"; desc = "Observer"; special = null},/obj/sp_start{name = "roffer"; desc = "Observer"; special = null},/turf/station/command/floor{icon_state = "Floor2"},/area) +"HF" = (/obj/item/weapon/card/id{name = "Captain's spare ID (5>5-5-5)"; access_level = 5; lab_access = 5; engine_access = 5; air_access = 5; assignment = "Captain"},/obj/item/weapon/card/id{name = "Captain's spare ID (5>5-5-5)"; access_level = 5; lab_access = 5; engine_access = 5; air_access = 5; assignment = "Captain"},/turf/station/command/floor{icon_state = "Floor2"},/area) +"HG" = (/obj/machinery/computer/teleporter,/turf/station/command/floor{icon_state = "Floor2"},/area) +"HH" = (/obj/machinery/teleport/station,/turf/station/command/floor{icon_state = "Floor2"},/area) +"HI" = (/obj/machinery/teleport/hub,/turf/station/command/floor{icon_state = "Floor2"},/area) +"HJ" = (/obj/grille,/obj/window,/obj/window{dir = 1},/turf/station/command/floor{density = 1},/area) +"HK" = (/obj/begin,/turf/station/command/floor,/area) +"HL" = (/obj/begin,/turf/station/command/floor{icon_state = "Floor2"},/area) +"HM" = (/obj/machinery/door/window{dir = 4},/turf/station/command/floor{icon_state = "Floor2"},/area/supply_station) +"HN" = (/obj/machinery/hologram_proj,/turf/station/command/floor{icon_state = "Floor2"},/area) +"HO" = (/turf/station/command/floor,/area/start) +"HP" = (/turf/station/command/floor{icon_state = "Floor2"},/area/start) +"HQ" = (/obj/machinery/computer/hologram_comp,/turf/station/command/floor{icon_state = "Floor2"},/area) +"HR" = (/obj/machinery/door/airlock,/turf/station/command/floor,/area/supply_station) +"HS" = (/obj/grille,/obj/window,/obj/window{dir = 1},/turf/station/command/floor,/area/supply_station) +"HT" = (/obj/landmark/alterations{name = "shuttle"},/turf/space,/area) +"HU" = (/obj/move/wall,/turf/space,/area/shuttle) +"HV" = (/obj/move/floor,/obj/window{dir = 1},/obj/window,/obj/grille,/turf/space,/area/shuttle) +"HW" = (/obj/move/floor,/obj/shuttle/door,/turf/space,/area/shuttle) +"HX" = (/obj/move/floor,/obj/machinery/sleeper,/turf/space,/area/shuttle) +"HY" = (/obj/move/floor,/obj/machinery/computer/sleep_console,/turf/space,/area/shuttle) +"HZ" = (/obj/move/floor,/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/space,/area/shuttle) +"Ia" = (/obj/move/floor,/obj/move/wall,/turf/space,/area/shuttle) +"Ib" = (/obj/move/floor,/obj/window{dir = 1},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/space,/area/shuttle) +"Ic" = (/obj/move/floor,/obj/rack,/obj/item/weapon/tank/oxygentank,/obj/item/weapon/clothing/suit/firesuit,/obj/item/weapon/clothing/mask/gasmask,/turf/space,/area/shuttle) +"Id" = (/obj/move/floor,/obj/rack,/obj/item/weapon/tank/oxygentank,/obj/item/weapon/clothing/suit/firesuit,/obj/item/weapon/clothing/mask/gasmask,/obj/window{dir = 4},/turf/space,/area/shuttle) +"Ie" = (/obj/move/floor,/turf/space,/area/shuttle) +"If" = (/obj/move/floor,/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/space,/area/shuttle) +"Ig" = (/obj/move/floor,/obj/table,/obj/item/weapon/storage/firstaid/regular,/turf/space,/area/shuttle) +"Ih" = (/obj/move/floor,/obj/window{dir = 1},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/game_kit,/turf/space,/area/shuttle) +"Ii" = (/obj/move/floor,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/space,/area/shuttle) +"Ij" = (/obj/move/floor,/obj/machinery/door/window,/turf/space,/area/shuttle) +"Ik" = (/obj/move/floor,/obj/stool/chair{dir = 4},/turf/space,/area/shuttle) +"Il" = (/obj/move/floor,/obj/table,/obj/window{dir = 4},/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/syringe,/turf/space,/area/shuttle) +"Im" = (/obj/move/floor,/obj/window{dir = 4},/obj/window{dir = 8},/obj/grille,/turf/space,/area/shuttle) +"In" = (/obj/move/floor{tag = "dbg"},/turf/space,/area/shuttle) +"Io" = (/obj/move/floor,/obj/window{dir = 4},/turf/space,/area/shuttle) +"Ip" = (/obj/move/floor,/obj/machinery/computer/shuttle,/obj/window{dir = 4},/turf/space,/area/shuttle) +"Iq" = (/obj/move/floor,/obj/machinery/door/window{dir = 1},/turf/space,/area/shuttle) +"Ir" = (/obj/move/floor,/obj/table,/obj/window{dir = 4},/obj/item/weapon/radio,/turf/space,/area/shuttle) +"Is" = (/obj/move/floor,/obj/window,/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/space,/area/shuttle) +"It" = (/obj/move/floor,/obj/window,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/window{dir = 4},/turf/space,/area/shuttle) +"Iu" = (/obj/move/floor,/obj/window,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/space,/area/shuttle) +"Iv" = (/obj/sp_start{name = "roffer"; desc = "Space (die)"; special = null},/obj/sp_start{name = "hobnob"; desc = "Space (die)"; special = null},/turf/space,/area) +"Iw" = (/obj/grille,/obj/window,/obj/window{dir = 1},/turf/station/shuttle/floor,/area) +"Ix" = (/obj/move/floor,/obj/shuttle/door,/turf/station/shuttle/floor,/area) +"Iy" = (/obj/machinery/sleeper,/turf/station/shuttle/floor,/area) +"Iz" = (/obj/machinery/computer/sleep_console,/turf/station/shuttle/floor,/area) +"IA" = (/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/shuttle/floor,/area) +"IB" = (/obj/window{dir = 1},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/shuttle/floor,/area) +"IC" = (/obj/rack,/obj/item/weapon/tank/oxygentank,/obj/item/weapon/clothing/suit/firesuit,/obj/item/weapon/clothing/mask/gasmask,/turf/station/shuttle/floor,/area) +"ID" = (/turf/station/shuttle/floor,/area) +"IE" = (/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/shuttle/floor,/area) +"IF" = (/obj/table,/obj/item/weapon/storage/firstaid/regular,/turf/station/shuttle/floor,/area) +"IG" = (/obj/window{dir = 1},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/game_kit,/turf/station/shuttle/floor,/area) +"IH" = (/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/shuttle/floor,/area) +"II" = (/obj/machinery/door/window,/turf/station/shuttle/floor,/area) +"IJ" = (/obj/stool/chair{dir = 4},/turf/station/shuttle/floor,/area) +"IK" = (/obj/table,/obj/item/weapon/syringe,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/bottle/rejuvenators,/obj/window{dir = 4},/turf/station/shuttle/floor,/area) +"IL" = (/obj/window{dir = 4},/obj/window{dir = 8},/obj/grille,/turf/station/shuttle/floor,/area) +"IM" = (/obj/grille,/obj/window{dir = 4},/obj/window{dir = 8},/turf/station/shuttle/floor,/area) +"IN" = (/obj/window{dir = 4},/turf/station/shuttle/floor,/area) +"IO" = (/obj/window{dir = 4},/obj/item/weapon/a_gift,/turf/station/shuttle/floor,/area) +"IP" = (/obj/machinery/door/window{dir = 1},/turf/station/shuttle/floor,/area) +"IQ" = (/obj/table,/obj/item/weapon/radio,/obj/window{dir = 4},/turf/station/shuttle/floor,/area) +"IR" = (/obj/window,/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/station/shuttle/floor,/area) +"IS" = (/obj/window,/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/shuttle/floor,/area) +"IT" = (/obj/window,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/station/shuttle/floor,/area) +"IU" = (/obj/shuttle/door,/turf/station/shuttle/floor,/area) +"IV" = (/turf/station/command/wall/other,/area) +"IW" = (/obj/secloset/medical1,/turf/station/command/floor/other,/area/prison) +"IX" = (/obj/secloset/medical2,/turf/station/command/floor/other,/area/prison) +"IY" = (/obj/secloset/animal,/turf/station/command/floor,/area/prison) +"IZ" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/storage/firstaid/regular,/turf/station/command/floor,/area/prison) +"Ja" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/storage/firstaid/regular,/turf/station/command/floor,/area/prison) +"Jb" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/storage/firstaid/toxin,/turf/station/command/floor,/area/prison) +"Jc" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/storage/firstaid/toxin,/turf/station/command/floor/other,/area/prison) +"Jd" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/healthanalyzer,/obj/item/weapon/dropper,/turf/station/command/floor/other,/area/prison) +"Je" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/syringe,/obj/item/weapon/pill_canister/Tourette,/obj/item/weapon/pill_canister/cough,/obj/item/weapon/pill_canister/epilepsy,/turf/station/command/floor/other,/area/prison) +"Jf" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/storage/firstaid/syringes,/turf/station/command/floor/other,/area/prison) +"Jg" = (/turf/station/command/floor/other,/area/prison) +"Jh" = (/turf/station/command/floor,/area/prison) +"Ji" = (/turf/station/command/floor{icon_state = "Floor2"},/area/prison) +"Jj" = (/obj/stool/chair,/turf/station/command/floor/other,/area/prison) +"Jk" = (/obj/machinery/door/firedoor,/obj/grille,/obj/window{dir = 4},/obj/window{dir = 8},/obj/window{dir = 1},/turf/station/command/floor/other,/area/prison) +"Jl" = (/obj/morgue,/turf/station/command/floor/other,/area/prison) +"Jm" = (/obj/machinery/sleeper,/turf/station/command/floor,/area/prison) +"Jn" = (/obj/machinery/computer/sleep_console,/turf/station/command/floor{icon_state = "Floor2"},/area/prison) +"Jo" = (/obj/stool/chair{dir = 4},/turf/station/command/floor/other,/area/prison) +"Jp" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/clipboard,/obj/item/weapon/pen,/turf/station/command/floor/other,/area/prison) +"Jq" = (/obj/item/weapon/radio/intercom{pixel_y = 32; freq = 140.1},/turf/station/command/floor/other,/area/prison) +"Jr" = (/obj/machinery/camera{dir = 4; network = "PS13"; c_tag = "Infirmary"},/turf/station/command/floor,/area/prison) +"Js" = (/obj/start{name = "Prison Doctor"},/turf/station/command/floor{icon_state = "Floor2"},/area/prison) +"Jt" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/paper_bin,/turf/station/command/floor/other,/area/prison) +"Ju" = (/obj/machinery/computer/sleep_console,/turf/station/command/floor,/area/prison) +"Jv" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/card/id{name = "Senior Medical Researcher (3>5-0-0)"; access_level = 3; lab_access = 5; engine_access = 0; air_access = 0; assignment = "Medical Researcher"},/turf/station/command/floor/other,/area/prison) +"Jw" = (/obj/table{icon_state = "corners"; dir = 9},/turf/station/command/floor/other,/area/prison) +"Jx" = (/obj/table{icon_state = "corners"; dir = 5},/turf/station/command/floor/other,/area/prison) +"Jy" = (/obj/stool/chair{dir = 8},/turf/station/command/floor/other,/area/prison) +"Jz" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/storage/stma_kit,/turf/station/command/floor/other,/area/prison) +"JA" = (/obj/table{icon_state = "corners"; dir = 10},/turf/station/command/floor/other,/area/prison) +"JB" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/game_kit,/turf/station/command/floor/other,/area/prison) +"JC" = (/obj/stool/bed,/obj/item/weapon/bedsheet,/turf/station/command/floor/other,/area/prison) +"JD" = (/obj/closet/wardrobe/white,/turf/station/command/floor,/area/prison) +"JE" = (/obj/closet/wardrobe/white,/turf/station/command/floor/other,/area/prison) +"JF" = (/obj/item/weapon/storage/trackimp_kit,/turf/station/command/floor/other,/area/prison) +"JG" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/storage/lglo_kit,/turf/station/command/floor/other,/area/prison) +"JH" = (/obj/machinery/camera{dir = 4; network = "PS13"; c_tag = "Recreation Area (West)"},/turf/station/command/floor/other,/area/prison) +"JI" = (/obj/stool/chair{dir = 1},/turf/station/command/floor/other,/area/prison) +"JJ" = (/obj/machinery/camera{dir = 8; network = "PS13"; c_tag = "Recreation Area (East)"},/turf/station/command/floor/other,/area/prison) +"JK" = (/obj/machinery/door/firedoor,/obj/grille,/obj/window{dir = 4},/obj/window{dir = 8},/turf/station/command/floor/other,/area/prison) +"JL" = (/obj/grille,/obj/window,/obj/window{dir = 1},/turf/station/command/floor/other,/area/prison) +"JM" = (/obj/grille,/obj/window,/obj/window{dir = 1},/obj/window{dir = 4},/turf/station/command/floor/other,/area/prison) +"JN" = (/obj/machinery/door/window{dir = 4},/turf/station/command/floor/other,/area/prison) +"JO" = (/obj/machinery/door/window{dir = 8},/turf/station/command/floor/other,/area/prison) +"JP" = (/obj/grille,/obj/window,/obj/window{dir = 1},/obj/window{dir = 8},/turf/station/command/floor/other,/area/prison) +"JQ" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/paper_bin,/turf/station/command/floor/other,/area/prison) +"JR" = (/obj/machinery/door/firedoor,/obj/grille,/obj/window{dir = 4},/obj/window{dir = 8},/obj/window,/turf/station/command/floor/other,/area/prison) +"JS" = (/obj/secloset/security1,/turf/station/command/floor/other,/area/prison) +"JT" = (/obj/machinery/computer/security{name = "security- PS13"; network = "PS13"; maplevel = 8},/turf/station/command/floor/other,/area/prison) +"JU" = (/obj/secloset/security2,/obj/machinery/camera{network = "PS13"; c_tag = "Security Office"},/turf/station/command/floor/other,/area/prison) +"JV" = (/obj/secloset/security2,/turf/station/command/floor/other,/area/prison) +"JW" = (/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/storage/toolbox,/turf/station/command/floor/other,/area/prison) +"JX" = (/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/obj/item/weapon/sheet/metal{amount = 5},/turf/station/command/floor/other,/area/prison) +"JY" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/storage/firstaid/regular,/turf/station/command/floor/other,/area/prison) +"JZ" = (/obj/table{icon_state = "sides"; dir = 4},/obj/item/weapon/pen,/turf/station/command/floor/other,/area/prison) +"Ka" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 2; access = "3000"},/turf/station/command/floor/other,/area/prison) +"Kb" = (/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/obj/item/weapon/sheet/glass{amount = 5},/turf/station/command/floor/other,/area/prison) +"Kc" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/dropper,/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/s_tox,/turf/station/command/floor/other,/area/prison) +"Kd" = (/obj/table{icon_state = "sides"; dir = 4},/obj/item/weapon/clipboard,/turf/station/command/floor/other,/area/prison) +"Ke" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 1; access = "3000"},/turf/station/command/floor/other,/area/prison) +"Kf" = (/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/turf/station/command/floor/other,/area/prison) +"Kg" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/clothing/glasses/blindfold,/obj/item/weapon/handcuffs,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/mask/muzzle,/obj/item/weapon/clothing/ears/earmuffs,/turf/station/command/floor/other,/area/prison) +"Kh" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/wrapping_paper,/obj/item/weapon/wirecutters,/turf/station/command/floor/other,/area/prison) +"Ki" = (/obj/start{name = "Prison Security"},/turf/station/command/floor/other,/area/prison) +"Kj" = (/obj/table{icon_state = "alone"},/obj/item/weapon/wrapping_paper,/obj/item/weapon/wirecutters,/turf/station/command/floor/other,/area/prison) +"Kk" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/storage/firstaid/regular,/turf/station/command/floor/other,/area/prison) +"Kl" = (/obj/table{icon_state = "sides"; dir = 1},/turf/station/command/floor/other,/area/prison) +"Km" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/pen,/turf/station/command/floor/other,/area/prison) +"Kn" = (/obj/item/weapon/clipboard,/obj/item/weapon/clipboard,/turf/station/command/floor/other,/area/prison) +"Ko" = (/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/obj/item/weapon/clothing/suit/straight_jacket,/turf/station/command/floor/other,/area/prison) +"Kp" = (/obj/secloset/animal,/turf/station/command/floor/other,/area/prison) +"Kq" = (/obj/bedsheetbin,/turf/station/command/floor/other,/area/prison) +"Kr" = (/obj/secloset/personal,/turf/station/command/floor/other,/area/prison) +"Ks" = (/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/station/command/floor/other,/area/prison) +"Kt" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 2; access = "4400"},/turf/station/command/floor/other,/area/prison) +"Ku" = (/obj/closet,/turf/station/command/floor/other,/area/prison) +"Kv" = (/obj/item/weapon/bedsheet,/turf/station/command/floor/other,/area/prison) +"Kw" = (/obj/stool/bed,/turf/station/command/floor/other,/area/prison) +"Kx" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/paper_bin,/turf/station/command/floor/other,/area/prison) +"Ky" = (/obj/table{icon_state = "corners"; dir = 5},/obj/item/weapon/pen,/turf/station/command/floor/other,/area/prison) +"Kz" = (/obj/machinery/sec_lock{pixel_x = -32; a_type = 2},/turf/station/command/floor/other,/area/prison) +"KA" = (/obj/machinery/sec_lock{pixel_x = 32},/turf/station/command/floor/other,/area/prison) +"KB" = (/obj/closet/wardrobe/orange,/turf/station/command/floor/other,/area/prison) +"KC" = (/obj/table{icon_state = "sides"; dir = 8},/turf/station/command/floor/other,/area/prison) +"KD" = (/obj/table{icon_state = "sides"; dir = 4},/turf/station/command/floor/other,/area/prison) +"KE" = (/obj/table{icon_state = "alone"},/obj/item/weapon/game_kit,/turf/station/command/floor/other,/area/prison) +"KF" = (/obj/machinery/sec_lock{pixel_x = -32; a_type = 1},/turf/station/command/floor/other,/area/prison) +"KG" = (/obj/machinery/door/airlock{access = "3000"},/turf/station/command/floor/other,/area/prison) +"KH" = (/obj/machinery/camera{dir = 4; network = "PS13"; c_tag = "Solitary Cells"},/turf/station/command/floor/other,/area/prison) +"KI" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 4; access = "3000"},/turf/station/command/floor/other,/area/prison) +"KJ" = (/obj/machinery/door/window{icon = 'security.dmi'; dir = 8; access = "3000"},/turf/station/command/floor/other,/area/prison) +"KK" = (/obj/item/weapon/paper_bin,/turf/station/command/floor/other,/area/prison) +"KL" = (/obj/closet/wardrobe,/turf/station/command/floor/other,/area/prison) +"KM" = (/obj/closet/wardrobe/mixed,/turf/station/command/floor/other,/area/prison) +"KN" = (/obj/table{icon_state = "sides"; dir = 2},/turf/station/command/floor/other,/area/prison) +"KO" = (/obj/table{icon_state = "corners"; dir = 6},/obj/item/weapon/radio{suffix = "\[2]"; freq = 144.9},/turf/station/command/floor/other,/area/prison) +"KP" = (/obj/machinery/camera{dir = 4; network = "PS13"; c_tag = "Courtroom"},/turf/station/command/floor/other,/area/prison) +"KQ" = (/obj/window{dir = 10},/turf/station/command/floor/other,/area/prison) +"KR" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/turf/station/command/floor/other,/area/prison) +"KS" = (/obj/window{dir = 8},/turf/station/command/floor/other,/area/prison) +"KT" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/turf/station/command/floor/other,/area/prison) +"KU" = (/obj/table{icon_state = "corners"; dir = 9},/obj/window{dir = 8},/turf/station/command/floor/other,/area/prison) +"KV" = (/obj/item/weapon/storage/toolbox,/turf/station/command/floor/other,/area/prison) +"KW" = (/obj/table{icon_state = "corners"; dir = 9},/obj/item/weapon/pen,/turf/station/command/floor/other,/area/prison) +"KX" = (/obj/table{icon_state = "sides"; dir = 1},/obj/item/weapon/paper_bin,/turf/station/command/floor/other,/area/prison) +"KY" = (/obj/table{icon_state = "sides"; dir = 8},/obj/item/weapon/paper,/turf/station/command/floor/other,/area/prison) +"KZ" = (/obj/machinery/camera{dir = 4; network = "PS13"; c_tag = "Witness Prep Area"},/turf/station/command/floor/other,/area/prison) +"La" = (/obj/start{name = "Prison Warden"},/turf/station/command/floor/other,/area/prison) +"Lb" = (/obj/table{icon_state = "corners"; dir = 10},/obj/item/weapon/clipboard,/turf/station/command/floor/other,/area/prison) +"Lc" = (/obj/table{icon_state = "sides"; dir = 2},/obj/item/weapon/paper/sop,/turf/station/command/floor/other,/area/prison) +"Ld" = (/obj/machinery/camera{dir = 8; network = "PS13"; c_tag = "Warden's Office"},/turf/station/command/floor/other,/area/prison) +"Le" = (/obj/landmark/alterations{name = "prison shuttle"},/turf/station/command/floor/other,/area/prison) +"Lf" = (/obj/table,/obj/machinery/recharger,/turf/station/command/floor/other,/area/prison) +"Lg" = (/obj/rack,/obj/item/weapon/clothing/suit/armor,/obj/item/weapon/clothing/shoes/black,/obj/item/weapon/clothing/under/grey,/obj/item/weapon/clothing/head/helmet,/obj/item/weapon/baton,/turf/station/command/floor/other,/area/prison) +"Lh" = (/obj/machinery/door/airlock,/turf/station/command/floor/other,/area/prison) +"Li" = (/obj/move/wall{icon_state = "wall2"},/turf/space,/area/shuttle_prison) +"Lj" = (/obj/move/floor{icon_state = "floor2"},/obj/window{dir = 1},/obj/window,/obj/grille,/turf/space,/area/shuttle_prison) +"Lk" = (/obj/move/floor,/obj/move/floor{icon_state = "floor2"},/obj/shuttle/door,/turf/space,/area/shuttle_prison) +"Ll" = (/turf/space,/area/shuttle_prison) +"Lm" = (/obj/move/floor{icon_state = "floor2"},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/space,/area/shuttle_prison) +"Ln" = (/obj/move/floor{icon_state = "floor2"},/obj/stool/chair,/turf/space,/area/shuttle_prison) +"Lo" = (/obj/move/floor{icon_state = "floor2"},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/grille,/turf/space,/area/shuttle_prison) +"Lp" = (/obj/move/floor{icon_state = "floor2"},/turf/space,/area/shuttle_prison) +"Lq" = (/obj/move/floor{icon_state = "floor2"},/obj/window{dir = 1},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/space,/area/shuttle_prison) +"Lr" = (/obj/move/floor{icon_state = "floor2"},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/space,/area/shuttle_prison) +"Ls" = (/obj/move/floor{icon_state = "floor2"},/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/space,/area/shuttle_prison) +"Lt" = (/obj/move/floor{icon_state = "floor2"},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/table,/obj/item/weapon/storage/firstaid/regular,/turf/space,/area/shuttle_prison) +"Lu" = (/obj/move/floor{icon_state = "floor2"},/obj/window{dir = 1},/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/obj/item/weapon/game_kit,/turf/space,/area/shuttle_prison) +"Lv" = (/obj/move/floor{icon_state = "floor2"},/obj/shuttle/door,/turf/space,/area/shuttle_prison) +"Lw" = (/obj/move/floor{icon_state = "floor2"},/obj/grille,/turf/space,/area/shuttle_prison) +"Lx" = (/obj/move/floor{icon_state = "floor2"},/obj/stool/chair{dir = 4},/turf/space,/area/shuttle_prison) +"Ly" = (/obj/move/floor{icon_state = "floor2"},/obj/machinery/door/window,/turf/space,/area/shuttle_prison) +"Lz" = (/obj/move/floor{icon_state = "floor2"},/obj/table,/obj/window{dir = 4},/obj/item/weapon/bottle/rejuvenators,/obj/item/weapon/bottle/antitoxins,/obj/item/weapon/syringe,/obj/item/weapon/bottle/s_tox,/turf/space,/area/shuttle_prison) +"LA" = (/obj/move/floor{icon_state = "floor2"},/obj/window{dir = 4},/obj/window{dir = 8},/obj/grille,/turf/space,/area/shuttle_prison) +"LB" = (/obj/move/floor{icon_state = "floor2"},/obj/window{dir = 4},/turf/space,/area/shuttle_prison) +"LC" = (/obj/move/floor{icon_state = "floor2"},/obj/window{dir = 4},/obj/machinery/computer/prison_shuttle,/turf/space,/area/shuttle_prison) +"LD" = (/obj/move/floor{icon_state = "floor2"},/obj/machinery/door/window{dir = 1},/turf/space,/area/shuttle_prison) +"LE" = (/obj/move/floor{icon_state = "floor2"},/obj/table,/obj/window{dir = 4},/obj/item/weapon/radio,/obj/item/weapon/gun/energy/taser_gun,/turf/space,/area/shuttle_prison) +"LF" = (/obj/move/floor{icon_state = "floor2"},/obj/window,/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/space,/area/shuttle_prison) +"LG" = (/obj/move/floor{icon_state = "floor2"},/obj/window,/obj/window{dir = 4},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/turf/space,/area/shuttle_prison) +"LH" = (/obj/move/floor{icon_state = "floor2"},/obj/machinery/atmoalter/siphs/scrubbers/air_filter,/obj/closet/wardrobe/orange,/turf/space,/area/shuttle_prison) +"LI" = (/obj/move/floor{icon_state = "floor2"},/obj/window,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent,/turf/space,/area/shuttle_prison) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaabaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaadadadadadadaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaeaeaeaeaeaeaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaadadadadadadaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaafagagahagaiaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajajajajajajaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaeaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajakalalamanaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaoapaqarasataoababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajaualamavanaaanaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawaoaxayazaAaBaoababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajakalaCavanananaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDaEazaFaGaHaIaoababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajaualamavanaJaKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLaMaNaOaPaPaQaoaoabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajakalaCavanaRanaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawaoaSaTaUaTaTaVaWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajaualamavanaXanananananananananananaaaaaaaaaaaaaaaYaZbaaZbaaZbaaYbbbbbbbbbbbbaYaZbaaZbaaZbaaobcaTaTbdaTaTbeabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajakalaCavanaRanbfaRbgaRaRaRaRbhbiananananananananananananananbjbkbkbkbkblblbmbnaoaoaoaoaoaoaoboaoaoaobpaMaoabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajaualamavanbgaXaRbhaRaRbqbrbsbsbsbtbububububububvbubububwbubxbybzbAbBbCbDbEbEbFbGbHbIbIbIbIaoboaoaoaobJaTaoabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajanbKbLbLanbMbMbMbMbMbMbNbMbObObOanbwbPbQbQbRbQbQbQbPbQbQbRbSanbzbBbBbTbUbVbWbXbYbZcabZcbcccdcecfaTaoaoaMaoabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaancgchcicjckclcmcncocpcqbMaRbgcranbwcscscscscsbQbwbwbwbwbwctanbzbBbBcucvcwcxcyczcAcBcAcCcDaoaScEaTaocFaTaoabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanbKchcGcHcIcJcKcLcMcNcNcOaRcPcQancRbRbQbQbPbQbQbQbRbQbQbPcSanbzbBcTcUcVcWcXbzcYcZdadbdcddaoaSaTdeaoaodfaoabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaandgdhdidjdkdldjdmdndodkbNaRaRcQanbwcscscsdpdqbQdrdsbwbwbwctanbzbBbBdtdudvcXbzdwdxdydxdzaoaoaSaTaTaTaTaTaoabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaancHdhcHdAdBdCdidjcHcHdDbNaRbhdEananananananandFananananandGanbzdHdIdJdudvdKbzdzdxdydxdLdMdNbcaTaTaTdOdPaoababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaandQdidRdScHdidjdhcHdTbMdUbsbsbsdVbsdWbsbsdXbsbsdYbsbsbsdZeaanbzebeceddueeefbzegeheiejekaoaoboaoaoaoaoaoaoaoelaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanemeneocHepcHcGcGcHcgeqeraRaRaRbObhesaRbgetaRbhaRaRbgaReseuevewexeyezcXcXeAbzeBdxdydxdxeCeDeEeFeGeHeIeJeKeLeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanananananananeNcicjcHbMeOePeQeRbOeSeTeUeUeVaRaRaReWaRaReseXanbzeYeZfacXcXeAbzfbfcdydxdxfdfefffgfhfgfgfgfifjeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafkaaaoaoaoaoaoaoanflfmfnbMbMfnfnfnfnbMbMbNbMbMbMbObObObMbMfobNananbzfpfqezfrfreAbzejfseiejejftfefufvfefefefwfxfyeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafzaofAfBfCaoanfDfDfEfFfFfFfFfFfGfHfIfJfKfLbMaRaRaRetfMfNfOanaabzfPfQfRfSfTfUbkfVfVfWdxdxfXfefufYfZgagbfegcgdeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagegfgeggghaoanfDfDfDfEfFfFfFfFgigjgkglgmgmgnaRbgaRbMgogpgqanbzbzbFbzbzbzbzbzbzgrdzdydLdxgsfegtgugvfefegwgxgyeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagegfgegegzaoanfDfDfDfDgAgBgCgCgDgEgFglgGgmbMaRaRaRbMgofNgqanaogHgIgJgKgLgMgNaogOdxgPgQfVgRgSgTgUgVgWgWgWgXgYeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafzaogZhahbaoanfDhcgihcfFfFfFfFfGhdhehfgmhgbMhhaRcQbMbMhibNanaohjhkhlhmhmhmhnaoaoaohoaodzfdhphqhrhshthuhvhwhxeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoaoaohyaoaoanhcfFfFfFfFfFfFfFgihdgmglgmhzbMhhaRcQbMhAhBhCanaohDhEhFhlhlhGhHaoaoaohIaoaoaobzbzhJbzbzbzaoaoaohKaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahLhMhNhOhPaoanananananbMbMhQhQbMbMhRglgmhShThUbshVhThWhXhYanaobohZaoiaiaiaiaaoibdxdydxdLaobzbzicbzidbzaoieaoabaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoaoaoifigaoaoaoaoaoanihiiiiiiijikgmglgmilbMimbhinanananananaoiodxdxdxdxdxdxipdxdxdydxdxaobziqirisitbzaoiuaoabaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiviwhNhOixaoiyiziAaoaniBiCgBgCiDiEgmiFiGiHbMaRaRiIanaoaoaoaoaoiJdxdxdxdxdxdxaodxdxdydxdxaobziKiriLiMbzaoiuaoabaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoaoaoiNiOiPiQiOiRaoaniBiSiSiSijiTgmgmgmiUbMaRaRiVanaoiWiXiYiZjafVjbfVfVfVjccdfVfVjdfVfVcdbkjejfiLjgbzaoiuaoabaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajhjihNigjjaojkjljmaoanjnjojojojpjqjrjsjsjtbMaRaReXanaojujvjwaoaoaohIaoaoaoaoaoaoaoaoaoaoaobzjxjyiLjgbzaojzaoabaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoaoaojljAaoigjBjCaoanbMbMbMbMbMbMbMbMbMbNbMaRbgaRanaojDjvjEaojFjGjHaojIjJjKjLjMjMjNjNaojObzjPjQjRjSbzaojTaoabaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajUjVhNjWjXaojYjZkakbkckdbsbsbsbskebsbsbskfkgbsbrkhbtkiiYkjjuaokkklkmknkokpkqkrksktkukvkwjTbzkxkykzkAbzaojTaoabaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaoaoaoaoaoaoaoaoaoaoaoaaaaaaaaaoaoaoaoaoaoaoboaoaoananananananananananananananananbokBkCkBaokkkDkEkFkGjGkHkIkJjMkKjNaojTbzbzbzbFbzbzaoaoaoabaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaokLkMkMkNkOkPkPkPkQaoaaaaaaaaaaaaaoaaaaaaaakRaaaoaajTaaaajTaaaajTaaaakSaaaajTaaaabojukTjuaoaoaokUaoaoaoaoaoaoaoaoaoaoaoaokVkWkXkYkZlalbaoabaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaalcaaaoaoaokMkMkMkPkPaoaoldaoaoaoleleleleaoaoaoaoaoaoboaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaolflgjujvlhaoliljlkllaoliljljljljljljlmljaolnlolpkWkYlalaaoabaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaabaolqaoaoaoaoaolraolsltltltaolulvlvlvlwlxlylzlAlBlClDlElFaolGlHlIlJlKlLlMlNlOlPlQlRlSbolTjulUiYlVlWlXlYlZmamblZlZlZlZmclZmdlZmemfmgmhkYmilamjaoabaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaamkmlmmmnmomomomompaolsmqlsmqaolumrmsmtmumvmwmxmwmwmymwmzmAmBmCmCmDmCmCmCmDmCmCmDmCmEmEbomFjujvjuaomGmHljljbzbzbzbzbzbzbFbzbzbzbzkYkYmIkYkYkYmJaoabaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaamkmKmLmMmmmomomommaolsltlsltmwmwmNmxmwmOmwmNmwmwmwmPmQmRmSmTmUmUmUmVmUmUmUmUmUmVmUmUmWbojujujvmXaoboaoaomYbzmZnanbnbncndnenfngbznhnikXnjkVnkmiaoabaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaanlnmnnnononpmmmomonqaolsltlsnraonsntmwmwmOmwmwmwmwnunvmwmwnwnxnynznAmCnBnCnDnEnFmCmCnGnHnInJiYnKnLaonMljljljbznNnOnPnPnPnQngnRngbznSnTnUnTnTnknVaoabaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaanWnXnYnZoaobmmmmmmmmaolsoclsocmwmwmwodmwoemwmwofmwmNnvmwmwogaoaoaoaoohohmCmCoiojokolomonboaokBkCaoaoooljljljbznNopnRnRnPnQngoqngbzorkYosotmiouovaoabaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaowoxoyozoAoAmmmomommaolsoBoCoDaonsntmwmwoEmwmwmzoFmwnvmxmwoGoHoIoJoKoLoMoNoOoPmCmCmDmCoQbooRjuoSoTcdoUljljljbzoVngngngnPoWngnRngbzaooXoYaoaoaoaoaoabaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaamkmKoZpammmomomommaoaoaoaopbcdmRmRpcmNpdpepfpgpfphpimwpjpkaoplaooOpmoOpmpnpooOppmCoOpqbojujujvjuaoprpsljljbzbzbzbzbzptbFbzbzbzbzbzpupvaopwpwpwaoabaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaamkmlmmmmmomomomomppxkNpykPpzaonsntpApBpCpDpDpEpFaopGpHaoaoaoaoaopmpIpmpJpKpLmCmCpppMpNbojujujvjuaoljljpOljljlibzaopPpQpRpSpTpUpVbzkYnUpWkYkYkYaoabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaabbzbzbzbzbzbzbzbzbzbzaoaopXaoaoaoaoaoaoaoaoaoddddpYpZddddaoaoaoaoaoaoaoaoqaqbqcqdqeqfbojujujvjuqgljljljljljljqhqipQpQpRqjqkpQqlbzqmnUkYkZkYkYaoabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +qnaaaaaaaaaaaabzqoqpqqqqqqqrqqqsbzaoqtquqtqtqtqvqtqtqwqtaoqxqyqzqyqAqAaoqBqCcdcdcdcdcdcdcdcdcdcdcdlgjujujvjuaoljljljlmljljbzaoqDpQpRpQpQqEaobzaokXkYkYqFqFaoabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaabzqGqqqHqIqJqqqqqqqKqLqMquqLqNqLqLqLqLqMqOaoqyqPqzqQqyqRaoqQqzqSqTqUaoaoaoaoqVqyqPqWqXlhqYjvoRaoqZljljljljlibzaorarbrcrdrbrbrerfrgrhrimiqFqFaoabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaabzrjqqqrrkrlrlrlrmbkcdrnrorprqrprprprprrrprsrtrtruqyqyrvaoqyqzqyqyqPaorwrxqyqyqyqyqWjujujuoSrycdlZlZlZlZlZlWbkcdrzpQpQpQpQrAaobzaoosrBkYrCrCaoabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaabzbzbzbzbzbzbzbzbzbzaorDqLaoaoaorEaoaoaorFaoqyqyrGrtrHrtrIrJrKrLrMrtrNrOrJrtrtrtrMrNrPiYnJrQbzbzbzbzljlmrRlkbzaoqiaorSrTpQrUrVbzaopvaonVrCrWaoabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaoquqLaorXqMrYaorZqMrYaosasasasbscsdaoqyqyqyqyqyqWqzqyqyqybzbzbzbFbzbzsebzsfsgbzaoaoaoshbzaoqkaosisisjskbzbzaoslaoaoaoaoaoabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaosmsnaosoqtspaosoqtspaosqsqsqsrssstaoqPqyqyqyqQqWsuqQqysvbzswsxsyszsAsBsCsDsEbzbzbzbzsFbzaopQaosGsHsIsIbzsJsJsKsLsMsNsObzabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabaaaaaaaaaaaosPsPsPaosQsRaoaoaoaoaoaoaoaoaosSsTsUsUsVsWaoaoaoaoaoaoaoboaosXaobzsYsBsCsZtatbsDsDsEtctdtebztfbzaotgaothtitjtkbztlsNsKsNsNsNtmbzabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabaaaaaaaaaaaotntotpaotqtrtstttututvtwtwtxaotysUtztAtBsWaotCtCtCtCtDtEtFaotGtHbzswtbtIsDtJtKtLtMtNtOtPtQbztRbztStTptthtUththbztVsNsKtWsNtXsNbzabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabaaaaaaaaaatYtZuaubcducudueueufueueueudugaouhsUuiujukulaoumunuounupuquraousaobzswutsDuusCuvuvuwbFuxuyuzbztfbzaoaoaouAthththbzuBuCsKsNsNsNuCbzabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaauDuDababababaouEtouauFuGtruHuHtruHuHuItruJaouKsUuLuMukuNaouOuPuPuPuQuRuSaotGuTbzuUuVuWuXsDuYsDuZvatdtPtQbztfbzaovbvcvdvevevebzvfvgvhvivjvjvjbzabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabaaaaabaaaatYuavkuavluGtruHuHuIuHuHtrtrvmaovnvosUsUvpvqaovruovsuovtuqvuaousaobzvvvwvxvyvzvAvBvCvDvEvFvEbztfbzbzbzbzvGvGvGvGbzvHvIvHvJvJvJvJbzabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabaavKvLvKaaaovMvNtoaovOvPuHuHvQuHuHtrvPvRvSvTvUvVvTvWuNaovXvYvXvYvZtGuraowaaobzbzbFbzbzbzbzbzbzbzbzbzbzbztfbzaajTjTjTjTjTjTjTwbwcwdjTjTjTjTbzabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabaavKahvKaaaosPsPsPaoboweaoaoaoaoaoaoaoaoaoaoaoaowfboaoaowgwhwiwjwktGwlwmwnwowpwqwrwsbzwtwuwuwuwuwuwuwvbzwwbzaaaoaaaaaoaaaaaowxwywxaaaaaaaabzababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabaavKahvKaaaaaaaaaaaowzwAwAwBwCwDwEaowFwGwHwIwJwKwLwMwNaowOwPwQwPwRtGwStGtGtGtGtGtGtGbztGtGtGtGtGtGwTwUbztfbzaawVwVwVwVwVwVwVwVwVwVwVwVwVwVwVaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabaaaaaeaaaaaaaaaaaaaotfwAwAwWwXwYwZcdxaxbxbxbxbxbxcxdxeaoxfxgtGtGxhtGxitGxjwvtGtGtGtGxktGxlxmxmxmxmxntGbztfbzaawVwVwVwVwVwVwVwVwVwVwVwVwVwVwVaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaauDaavKahvKabaoxoxoxoaoxpxqxrxswXxtxuaoxvxwxxwLwLwLwLxyxzcdxAxBxCwnxDwnxEtGxFxGxHxHxIxIbzxJxlxKxKxKxKxLxhbzxMbzaawVwVwVwVwVwVwVwVwVwVwVwVwVwVwVaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabaavKahvKaaxNxOxPxQxRxSxQxTxUxVxWxXaoxvxYxZyaybwLycydyeaoyfygyhyitGtGtGyjyktGtGyltGwvbzbzbzbzbzbzbzbzbzbztfbzaawVwVwVwVwVwVwVwVwVwVwVwVwVwVwVymabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabaavKahvKaaynyoypwAaoaoaoyqaoaoaoaoaoaoaoaoaoaoyraoboaoaoystGtGyttGtGtGyttGtGyuyvxhywyttGtGyxyxyxyxyxyxaotfbzaawVwVwVwVwVwVwVwVwVwVwVwVwVwVwVaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabaaaayyyzyzyAyByCwAaoaoyDyEyFyFyFyGyHyIyJaowIwLwLwKyKycaoxKxKxKyLysyMyNyOyPyQyRySyTyUaotGtGyxyxyxyxyxyxaotfbzaawVwVwVwVwVwVwVwVwVwVwVwVwVwVwVaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababvKahvKaayVyWypyXaoaoyYyFyZyFyFzayFyFzbaozczdwLxxxywLaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaotGtGzezezezezezeaozfbzaowVwVwVwVwVwVwVwVwVwVwVwVwVwVwVaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabaavKahvKaaxNzgypzhaoaozizjzkzjzkzlzmznzoaozpwLzqzrxywLaoaaaaaaaoaaaaaaaoaaaaaaaaaaaaaozsztzezezezezezeaotfwAwAaoaaaaaaaaaaaazuzvzuaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabaavKzwvKaaxNzxzyzzaoaoboaoaoaoaoaoaoaoaoaoaoaoaoaoboyraoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaozAzzwAxqzBaaaaaaaaaazCzDzEaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabaaaaaeaaaaxNzFzGwAzHwAzIxQxQzJxQxQxQxQxQzJxQxQxQzKzLxQzMzNxQxQxQzJxQxQxQxQzOzMxQxQxQxQxQzPxQxQxQxQzQzMzRzSxrwAzTtYaaaaaaaaaazCzUzEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabaavKzVvKaaaoxoxoaoxoxoxoxoxoaoxoxoxoxoxoaoxoxoxoxozWaosPxoxoxoxoaoxoxoxoxoxoaoxoxoxoxoxoaoxoxoxoxozXwAzzwAzzwAwAzYzZzZzZzZzZAajTzEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabaavKzVvKaaababababababababababababababababababababababababababababababababababababababababababababaoxqwAwAwAwAzzzvjTjTzDjTjTjTzDzEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabaavKAbvKaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoAcAdAeaoAfAfAfAfAfAfAfAfAfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabaaaaabaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAgsPAhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,2) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaAiAiAiAiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaAiAiAiAiAiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaAiAjAjAjAjAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaAiAjAkAlAmAnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaAiAjAjAoAjAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaAjApAjaaaaaaAqArArAsArAtnlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaAjAjAjAjAuAjAvAvAvAwAxAyAzAAAwABACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaAjADAEAFAGAHAIAIAJAKArArAsArALAMANaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaAjAOAPAQAQAQAQAQARASATAyAAAzAUAVAWACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaAjAXAAAQAQAQAzAQAYAZAQAQBaAQBbBcBdACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaAjBeAQAQAQAQAAAQBfAZAQAQBgBhBbBiBjACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaAjBkAzAQBlAQAQAQBmAQAAAQAQBnBoAVBpACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaAjADAEAFBqBrBsBtBuAKBvAQAzBvAQAMBwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaAjAjAjAjBxAjAvAvAvAwByByBzBzBABBACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaAjApAjaaaaaaBCArArArArALowaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaAiAjAjAoAjAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaAiAjAkBDAmBEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaAiAjAjAjAjAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaAiAiAiAiAiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaAiAiAiAiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,3) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,4) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBFaoBGBGBGBGBGBGBGBGBGBGBGBGBGBGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBFaoaoaoaoaoaoaoaoaoaoaoaoaoaoBGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBFaoBHBFBFBIBFBIBIBIBIBJBKBLaoBGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBFaoaoaoBFBIBFBIBIBIBIBFBFBFaoBGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBFBMBNBMBFBFBFBFBOBFBFBFBFBFaoBGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBFaoaoaoBFBIBIBIBIBIBIBIBIBIaoBGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBFaoBPBFBFBIBIBIBIBIBIBIBIBIaoBGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBFaoaoaoaoaoaoaoaoaoaoaoaoaoaoBGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBFaoBGBGBGBGBGBGBGBGBGBGBGBGBGBGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBQBQBQBQBQBQBQBQBQBQBQBQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoBQBQBQBQBQBQBQBQBQBQBQBRBRBSBTBTBUBVBUBWBWBWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoBXBYBQBZCaCbCcCdCbCcBQBTBTBTBVBTaoaoaoBWBWBWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoBTBTBQCeBYBTBTBVBTBTBQBVBTBTBTBYBTCfaoCgBWBWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoBYBXChCiBTBTBTBTBYBTCjBTBYBTBTBTCkClaoCmBWBWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoCnBTCoCiBTBTBVBTCpCqaoBTBTBTBVBTBTCraoaoaoaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoBVBYCjBTBTBTBTBTBTCsaoCtCuBTCvCwBTCxCyCzCAaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoBTBTCBCCBVBTBYBTBTCDaoBVBTBTCECFBTBTBVBTBYaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoCGBVaoCHCICJCKCLCMCNaoCtCuBTCOBTCPBYCxCQCzaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoaoaoaoaoaoaoaoaoaoaoaoBYBTCRBTCSBTCTBTBTBVaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoCtCuCUCVCVCWCWCXCXCYaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoaoaoaoaoaoaoaoaoaoaoaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,5) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,6) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,7) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCZDaDaDbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDcDdDeDcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDcDfDgDcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDcDeDeDcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzDeDebzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzDgDfbzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzDeDebzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzDeDebzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzDfDgbzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzDeDebzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzDeDebzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzDgDfbzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzDeDebzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzDeDebzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzbzbzbzbzbzbzbzbzDfDgbzbzbzbzbzbzbzbzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaabzbzDhDiDjDkDlDmDnbzDeDebzDoDpDqDrDsDtbzbzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaabzDuDvDwDxDeDeDyDzbzDADBbzDfDCDeDgDDDEDFbzbzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaabzDGDHDIDJDKDLDMDNaoDeDfaoDgDeDeDfDeDeDgDObzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaabzbzbzbzbzDPDgDQDeDRDSDTDTaoDeDeaoDUDVDWDXDeDeDeDYbzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaabzbzDZEaEbbzEcDeDfEdaoaoaoaoaoDeDeaoaoaoaoaoEeDeDeEfbzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaabzEgEhEiDfEjDgDeDeDgaoEkElEmEnDeDeEoEpEqEraoEsDeDfEtbzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaabzDeDeEuDeaoDfDeDfDeEjDeDeDeDeDeDeDeDeEvEvaoEwDeDgExbzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaabzEyEhDfDgaoEzEsEAEBaoDeDeDeECDAECDeDeDeDeaoDeDeDeEDbzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaabzEEDeEFDeaoaoaokwaoaoEGDeDeEHDeEIDfEJDeDgEjDgEDEKELbzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaabzEMENEOEPaoEQDeDeERaoESDeDeETEUEVaoaoaoaoaoDfEDEWELbzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaabzEXDeDeDdaoaoaokwaoaoEYDeDeEZFaFbFcFdFeFfaoFgFgFhFhbzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaabzFiFjDfFkaoEzEsEAEBFlDgDeDeDfDeDeFcFmDeDfaoFgFgFhFhbzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaabzFnDeDeDeaoDfDeDfDeEjDeDeDeDeDeDeFoFpFpDebzbzbzbzbzbzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaabzFqDeFrDfEjDgDeDeDgaoFsFtFuFvDfDgEjDfDeDgbzaabzaabzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaabzbzFwFxFybzEcDeDfEdaoaoaoaoaoDeDebzbzbzDAbzbzbzbzbzbzbzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaabzbzbzbzbzFzDHFADeDRDSDTDTaoDeDebzaabzDfDgFcFBDeEjFCFDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaabzFEDgFFDJDKDLDMDNaoDgDfbzaabzDeDeFcDgDfbzbzbzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaabzDuDvDwDxDeDeDyDzaoDADBbzbzbzDeDeFcFGDeFHFIFJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaabzbzDhDiDjDkDlDmDnbzDeDebzaabzDgDfFcDfDebzbzbzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzbzbzbzbzbzbzbzbzDfDgbzaabzDeDeFoFKDgFLFMFNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzDeDebzbzbzDeDeEjDfDebzbzbzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajTjTjTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzDeDebzaabzDfDgFOFPDeFHFQFRaaaaaaaaaaaaaaaaaaaaaaaaaajTjTjTFSjTjTjTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzDgDfbzaabzbzbzbzDgDfbzbzbzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajTjTjTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzDeDebzaaaaaaaabzFTDeEjFUFVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzDeDebzaaaaaaaabzbzbzbzbzbzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzDfDgbzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzDeDebzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFWFWFWFWFWFWFWFWFWFWFWFWFWFWFWFWaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzDeDebzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFWFXFYFZFZFZFZFZFWGaGaGaGaGaGaFWaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzDgDfbzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFWGbGbGcGcGcGcGcFWFWFWFWFWFWFWFWaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFcDeDeFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFWGbGbGbGbGbGbGbFWGaGaGdGdGdGdFWaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFcDeDeFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFWGbGbGbGbGbGbGbFWGeGaGdGdGdGdFWaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFcDfGfFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFWFWFWFWFWFWFWFWGbGbFWGaGaGdGdGdGdFWFWFWFWFWFWFWFWFWaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGgGhGhGiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFWGjGkGlGmGaGnFWGoGpFWGqGaGaGaGrGrFWGsGaGaGtGtGtGtFWaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFWGaGaGaGaGaGuFWGbGbFWGqGaGvGvGrGrFWGsGaGaGaGaGaGwFWaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFWGxGyGzGAGaGBFWGaGaFWGCGaGvGvGrGrFWGsGaGaGaGDGDGDFWaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFWGxGEGFGGGaGHFWGaGaFWGCGaGvGvGrGrFWGsGaGaGaGDGDGDFWaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFWGxGaGaGaGaGHFWGaGaFWGCGaGvGvGrGrFWGIGaGaGaGDGDGDFWaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFWGJGKGaGLGMGNFWGaGaFWGCGaGvGvGrGrFWGIGaGOGOGOGOGOFWaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFWFWFWGPFWFWFWFWGaGaFWFWGPFWFWFWFWFWGIGaGOGOGOGOGOFWaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGQGRGQaaaaaaFWGaGaGaGaGaGaGaGaGaGaGSGSGSGSFWGaGaGOGOGOGOGOFWaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGQGQGTGQGQFWFWFWGeGaGaGaGaGaGaGaGaGaGaGaGaGaGUGaGaGOGOGOGOGOFWaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGVGWGXGYGZaaaaFWGaGaGaGaGaGaGaGaGaGaGaGaGaGaFWGaGaHaHaHaHaHaFWaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGQGXGXGXGQHbHbHbGaGaGaGaHbHbHbHbHbHbHbHbHbHbFWGIGaHaHaHaHaHaFWaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGVGWHcGXHdHeGbHeGaGaGaGaHfHgHhHiGbGbHgHhHiHjFWGIGaHaHaHaHaHaFWaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGQGXGXGXGQHbHbHbGaGaGaGaHfGbGbGbGbGbGbGbGbGbFWGIGaHaHaHaHaHaFWaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGQHkHlHmGQaaaaFWGaGaGaGaHfGbGbGbGbGbGbGbGbGbFWFWFWFWFWFWFWFWFWaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHnHnHnHnHnHnHnaaaaaaaaaaaaaaaaaaGQHoHpHqGQFWFWFWGaGaGaGaHfHgHhHiGbGbHgHhHiGbFWGaGmHrGaGaGaHsHtaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHnHuHvHwHxHxHnaaaaaaaaaaaaaaaaaaHyHzHzHzHAaaaaFWGaGaGaGaHfGbGbGbGbGbGbGbGbGbFWGaGaGaGaGaGaGaHtaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHnHBHBHCHBHBHnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFWGaGaGaGaHfGbGbGbGbGbGbGbGbHDFWGaGaGaGaGaGaGaHtaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHnHEHFHGHHHIHnHnHnHnHnHnHJHJHJHJHJHJHJHJHnFWFWFWGaGaGaGaHfGbGbGbGbGbGbGbGbGbFWGaGaGaGaGaGaGaHtaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHnHnHnHnHnHnHnHKHKHLHLHKHKHLHLHKHKHLHLHKHnFWGaGaGaGaGaGaHbHbHbHMHbHbHbHbHbHbFWGaGaGaGaGaGaGaHtaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHnHNHBHNHBHNHnHOHPHPHOHOHPHPHOHOHPHPHOHOHnFWGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaFWFWFWGaGaGaGaGaHtaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHnHQHBHQHBHQHnHPHPHOHOHPHPHOHOHPHPHOHOHPHnFWGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaHRGaHRGaGaGaGaGaHtaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHnHBHBHBHBHBHnHPHOHOHPHPHOHOHPHPHOHOHPHPHnFWGeGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaFWFWFWGaGaGaGaGaHtaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHnHBHBHBHBHBHBHOHOHPHPHOHOHPHPHOHOHPHPHOHnFWGaGaGaGaGaGaGaGaFWFWFWFWFWFWFWFWFWFWFWFWFWFWFWFWFWaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHnHBHBHBHBHBHnHOHPHPHOHOHPHPHOHOHPHPHOHOHnFWGaGaGaGaGaGaGaGaFWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHnHnHnHnHnHnHnHnHnHnHnHnHJHJHJHJHJHJHJHJHnHbHeHbHSHSHSHSHSHSFWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHbGbHbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHTaaaaaaaaaaaaaaaaaaHbHeHbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHUHUHUHUHUHVHUHUHWHUHUHUHVHUwVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHUHXHYHZIaIbIcIdIeIfHUIgIhHUHUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHUIiIeIiHWIeHZIeIiIjIiHZIkIlImaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHUHXHYIeImIkIeInIeIoIkIeIkIpImaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHUIiIeIiImIkIiIeHZIqHZIiIkIrImaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHUHXHYHZImIsIeIeIeItHUHZIuHUHUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHUHUHUHUHUHVHUHUHWHVHUHUHVHUwVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAjAjAjAjAjIwAjAjIxAjAjAjIwAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAjIyIzIAAjIBICICIDIEAjIFIGAjAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAjIHIDIDIxIDIDIDIDIIIDIDIJIKILaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAjIyIzIDIMIJIDIDIDINIJIDIJIOILaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAjIHIDIDIMIJIDIDIDIPIDIDIJIQILaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAjIyIzIAIMIRIDIDIDISAjIAITAjAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAjAjAjAjAjIwAjAjIUIwAjAjIwAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + +(1,1,8) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVIVIVIVIVIVIVIVIVIVIVIVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVIWIXIYIZJaJbJcJdJeJfIVIVIVIVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVJgJgJhJiJiJhJjJjJgJgJgJgJgIVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVJhJhJhJiJiJhJhJhJgJgJkJlJgIVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVIVIVIVIVIVIVIVIVIVIVIVIVJmJnJiJiJiJiJiJhJoJpIVJlJgIVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVJgJgJgJgJqJgJgJgJgJgJgIVJrJiJiJiJsJiJiJhJgJtIVJlJgIVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVJgJgJjJjJgJgJgJjJjJgJgIVJmJuJhJiJiJhJhJhJgJvIVJlJgIVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVJgJoJwJxJyJgJoJwJxJyJgIVJgJgJhJiJiJhJgJgJgJzIVJlJgIVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVJgJoJAJBJyJgJoJAJBJyJgIVJCJCJhJhJhJDJEJFJFJGIVJlJgIVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVJHJgJIJIJgJgJgJIJIJgJJJKJLJMJNJOJPIVIVIVIVIVIVIVIVIVIVIVIVIVaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVJQJgJgJgJgJgJgJgJgJgJgJRJgJgJgJgJgJKJSJSJSJSJTJUJVJWJXJXJYIVaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVJZJgJgJgJgJgJgJjJjJgJgKaJgJgJgJgJgJKJgJgJgJgJgJgJgJgKbKbKcIVaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVKdJgJgJgJgJgJoJwJxJyJgKeJgJgJgJgJgJRJgJgJgJgJgJgJgJgJgKfKgIVaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVKhJgJgJgJgJgJoJAJBJyJgJkJgJgJgJgJgKaJgJgJgKiJgJgJgJgJgKfKgIVaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVKjKkKlKmJQJgJgJIJIJgJgJKJgJgJgJgJgJkJgJgJgJgJgJgJgKnJgKoKgIVaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVIVIVIVIVIVIVIVIVIVIVIVJRJgJgJgJgJgJKKpKpKqKrKrKrKrKsJgKoKgIVaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVIVIVIVIVJgJgJgJgJgJgIVIVJgJgJgJgJgIVIVIVIVIVIVIVIVJgJgJgIVIVaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVJgJgJjJjJgKtKtJgJgJgJgJgJgJKKuKvKwIVJgJgJgJgJgJgJgIVaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVJgJoKxKyJyJgJKKzJgJgJgJgKAJKJgKvKwIVKBKBKBKBKBKBKBIVaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVJgJoKCKDJyJgJKJgJgJgJgJgKtKtJgJgKEIVIVIVIVIVIVIVIVIVaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVIVIVIVIVIVIVIVJgJgJgJgJgJgIVIVIVIVIVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVIVIVIVIVIVIVKwKvKuJKJgJgJgJgJgJgJKKuKvKwIVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVKvKwIVKvKwIVKwKvJgJKKFJgJgJgJgKAJKJgKvKwIVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVJgJgIVJgJgIVKEJgKtKtJgJgJgJgJgKtKtJgJgKEIVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVKGIVIVKGIVIVIVIVIVIVJgJgJgJgJgJgIVIVIVIVIVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVJgJgJgJgJgJgJgJgJgJgJgJgJgJgJgJgJKKuKvKwIVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVKHJgJgJgJgJgJgJgJgJgJgJgJgJgJgKAJKJgKvKwIVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVJgJgJgJgJgJgJgJgJgJgJgJgJgJgJgKtKtJgJgKEIVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVKGIVIVKGIVIVIVIVIVIVJgJgJgJgJgJgIVIVIVIVIVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVJgJgIVJgJgIVKwKvKuJKJgJgJgJgJgJgJKKuKvKwIVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVKvKwIVKvKwIVKwKvJgJKKFJgJgJgJgKAJKJgKvKwIVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVIVIVIVIVIVIVKEJgKtKtJgJgJgJgJgKtKtJgJgKEIVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVIVIVIVIVJgJgJgJgJgJgIVIVIVIVIVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVKwKvKuJKJgJgJgJgJgJgJKKuKvKwIVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVKwKvJgJKKFJgJgJgJgKAJKJgKvKwIVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVKEJgKtKtJgJgJgJgJgKtKtJgJgKEIVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVIVIVIVIVJgJgJgJgJgJgIVIVIVIVIVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVKwKvKuJKJgJgJgJgJgJgJKKuKvKwIVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVKwKvJgJKKFJgJgJgJgKAJKJgKvKwIVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVKEJgKtKtJgJgJgJgJgKtKtJgJgKEIVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVIVIVIVIVJgJgJgJgJgJgIVIVIVIVIVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVIVIVIVIVIVIVIVIVIVJLJMKIKJJPJLIVIVIVIVIVIVIVIVIVIVIVIVaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVJxJjJgJgJgJyJyIVIVJgJgJgJgJgJgIVKKKBKLKMIVKrKrKrKrKrIVaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVKNKNKOJjJgJyJyIVIVJgJgJgJgJgJgKCJgJgJgJgJgJgJgJgJgJgIVaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVJjJgJgJgJgJyJyIVIVJgJgJgJgJgJgKCJgJgJgJgJgJgKrKrKrKrIVaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVKPJgJgJgJgJgJgKGJgJgJgJgJgJgJgKQJgJgJgKRIVJgJgJgJgJgIVaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVJwJxJgJwJxKSJgIVIVJgJgJgJgJgJgKaJgJgJgKTIVKrKrKrKrKrIVaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVJIJIJgJIJIKSJgIVIVJLJMKIKJJPJLIVIVJOIVIVIVIVIVIVIVIVIVaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVJgJgJgJgJgKUKlIVJgJgJgJgJgJgJgJKJgJgJgJgJgJgJgKVIVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVIVIVKGIVIVIVIVIVJgJgJgJgJgJgJgJKJgJgJgJoJgKWKXJgIVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVJgJjJjJjJjIVJgJgJgJgJgJgJgJRJgJgJgJoJgKYJyJgIVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVKZJgJgJgJgIVJgJgJgJgJgJgJgKaJgLaJgJoJgLbLcLdIVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVJgJgJgJgJgKGJgJgJgJgJgJgJgJkJgJgJgJgJgJgJgJgIVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVIVIVIVIVIVIVJgJgJgJgJgJgJgJKJgJgJgJgJgJgJgJgIVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVLeJgJgJgJgJgJgJKJTJgJSJSJSJSLfLgIVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVIVIVIVLhIVIVIVIVIVIVIVIVIVIVIVIVIVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVJgIVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIVLhIVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLiLiLiLiLiLjLiLiLkLiLiLiLjLiLlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLiLmLnLoLpLqLpLrLpLsLiLtLuLiLiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLiLvLwLwLmLxLmLxLmLyLmLrLxLzLAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLiLpLmLpLpLxLpLxLpLBLxLpLxLCLAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLiLvLwLwLmLxLmLxLmLDLmLrLxLELAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLiLmLnLoLpLFLpLrLpLGLiLHLILiLiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLiLiLiLiLiLjLiLiLvLjLiLiLjLiLlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} diff --git a/pending-work/animay-bugs.txt b/pending-work/animay-bugs.txt new file mode 100644 index 0000000..a7c1638 --- /dev/null +++ b/pending-work/animay-bugs.txt @@ -0,0 +1,25 @@ +- Spawned metal from sandbox panel, when deleted (tested using hobnob's debug +verb "delete" and the metal was in my right hand) crashed my localhost +server. With windows debugger coming up, actually. + +- Monkies can talk while sleeping(injected with sleep toxins) + +- Closet bug is still in your version. + +You go into a closet, before it closes click your character and drag it to a +nearby closet, release the mouse button and you'll teleport. + +You can do this into walls, get out of locked lockers, and other things. + +- In the show panel, toggling player voting on/off produces odd messages. + +Example: + +Player mode voting toggled to On. +Player mode voting toggled to On. + +Seems to just be a display bug. + +- Making walls in space removes metal and you get no wall. + +This also happens on PS tiles(in 93.2, not sure now) \ No newline at end of file diff --git a/supporting-docs/changes-40.93.4 to 40.93.2H9.5.txt b/supporting-docs/changes-40.93.4 to 40.93.2H9.5.txt new file mode 100644 index 0000000..cbecd04 --- /dev/null +++ b/supporting-docs/changes-40.93.4 to 40.93.2H9.5.txt @@ -0,0 +1,44 @@ +Major code and system changes between V.40.93.4 and V.40.93.2H9.5 +================================================================= + +1. Turfs (and /obj/move objects) have had their heat variables (heat, oheat, theat) changed to temperature variables (temp, otemp, ttemp). +In the simplified SS13 physics, (temperature of cell) = (total gas in cell) * (heat value of cell). +This change also involves a few changes to procs related to the exchange of gas between /obj/substance/gas objects and turfs. + +The air system originally attempted to equilibrate the heat value of each turf with its neighbours, but this is unphysical and lead to problems with the station temperature becoming unstable. Instead, the simulation now tries to equalize the temperatures of each cell. Rather than convert the heat values to temperatures and back again during each cycle, it's more efficient to store the temperature and calculate heat whenever necessary. + +Note: All temperatures are in kelvin, with the normal value being 20degC (293.15 K). + + + +2. The links between turfs are now cached. Originally /turf/updatecell() called the expensive FindTurfs routine (which returns a list of which turfs have an unobstructed air-link to the current turf) for every turf at every simulation cycle. + +In the cached version, each turf maintains four /turf variables, turfN, turfS, turfE, turfW, and four booleans airN, airS, airE, airW, which are set true if there is an air link to the turf in that direction. These variables are updated by calling the turf/buildlinks() proc whenever a link state changes (e.g. when a door opens, when a wall is built or demolished, etc.). + +The loops in turf/updatecell() have also been unrolled to prevent the need to use lists. The net effect of the changes is to make the air simulation run about twice as fast as the uncached version. + +Air simulation on /obj/move locations (shuttles & airtunnel) are not cached and use the old system. + + +3. The pipeline system has been completely rewritten. The original system (partially implemented) used a sort of propagating-supply method along each pipe object through the receive_gas() proc. The new system (almost totally contained in newpipe.dm) is similar to the turf air simulation in that the gas contents of two linked objects is compared, and some of the gas flows towards the object with the smaller amount of gas in it. + +Rather than treat each pipe object as an individual unit, an uninterrupted linked chain of pipe is represented as a single virtual /obj/machinery/pipeline object, in which the gas propagation takes place. This means that long pipes do not take an excessive amount of time for gas that flows into them to flow out the other end. These pipelines are built after map load by /prop/makepipelines() and are referenced through the global "plines" list var. + +Each gas-containing pipeline or machine has two instances of /obj/substance/gas, usually the "gas" and "ngas" objects. To prevent conflicts due to the order of processing objects, all calculations for gas movement are done with the "gas" object, but the new values are set in the "ngas" object. When all /obj/machinery/process() procedures are complete, a gas_flow() process is run for all gas-related /obj/machinery by the main processing loop in the /datum/control/cellular/process() proc. + + + +4. The power system, which works at two levels. The main system (comprising of /obj/cable and all /obj/machinery/power/ objects), and the area-level system which is mediated by an APC in each area. The power system is contained in the power.dm file. + +In the main system, the /obj/cables objects are traced to form a network of linked objects by the /proc/makepowernets proc (initially at map load, then called again whenever major changes to the network occur). Each continuously linked network of cables and power machines is stored as a list in a /datum/powernet object, and each network is stored as a list of these objects in the global var/list/powernets list. + +Each /datum/powernet contains a list of all the /obj/cables, a list of all linked /obj/machinery/power/ objects, and "load" and "avail" variables. During each process() cycle, all generator type objects call /ojb/machinery/add_avail() with the amount of power (in watts, nominally) they generate. All power-using objects (at the moment, only APCs & SMESes) use add_load() to add the amount of power they want to use. At the end of the process cycle, this is resolved in the datum/powernet/reset() proc. + +SMESes (power storage units) are special in that they can both input and output power. A special restore() proc for each SMES is called in reset(), that calculates the actual amount of power demanded from the SMES, and recharges any unused portion. + +At the area level, the /obj/machinery/power/apc object controls the power usage of all machines within each /area. It controls three channels of power per area (lighting, equipment & environmental), and sets these channels depending on how much charge is left in the internal cell. It draws power from the it's linked powernet (using add_load()) to recharge the cell. + +Each machine that draws power calls /obj/machinery/use_power(amount, channel) (which in turn calls /area/use_power(amount, channel)), usually inside the machine's process() proc. This increments the used_* variables in the area containing the machine, defaulting to the equipment channel. The machine can tell if the channel is powered by using the powered(channel) proc. Machines in the area also are informed of power changes by the obj/machinery/proc_change() proc, which is called whenever an area's power status is changed. + +Power for lighting in a area is calculated as part of the /obj/machinery/power/apc/process() proc. +