From 0f26696a9e754a68e607f49c004414061e6dae62 Mon Sep 17 00:00:00 2001 From: stephen001 Date: Sun, 6 Apr 2008 21:28:08 +0000 Subject: [PATCH] First commit, migrated from SS13.net repository. --- main-src/Code/!atoms.dm | 3603 +++++++++ main-src/Code/Test.dm | 23 + main-src/Code/TextHandling.dm | 140 + main-src/Code/_debug.dm | 449 ++ main-src/Code/aaaDefines.dm | 194 + main-src/Code/airtunnel.dm | 834 ++ main-src/Code/areas.dm | 331 + main-src/Code/atmo_control.dm | 661 ++ main-src/Code/blob.dm | 303 + main-src/Code/cell_process.dm | 1564 ++++ main-src/Code/cellautomata.dm | 2268 ++++++ main-src/Code/chemical.dm | 793 ++ main-src/Code/colour2html.dm | 193 + main-src/Code/computer.dm | 1160 +++ main-src/Code/cryo.dm | 1777 ++++ main-src/Code/datumvars.dm | 91 + main-src/Code/demo.dm | 3449 ++++++++ main-src/Code/demo2.dm | 691 ++ main-src/Code/dna.dm | 984 +++ main-src/Code/engine.dm | 363 + main-src/Code/globals.dm | 352 + main-src/Code/h_sandbox.dm | 140 + main-src/Code/hexadecimal.dm | 78 + main-src/Code/instructions.dm | 352 + main-src/Code/inverthtml.dm | 27 + main-src/Code/items.dm | 5793 ++++++++++++++ main-src/Code/mob.dm | 7122 +++++++++++++++++ main-src/Code/modules.dm | 106 + main-src/Code/newitems.dm | 59 + main-src/Code/newobjects.dm | 92 + main-src/Code/newpipe.dm | 1544 ++++ main-src/Code/overview.dm | 355 + main-src/Code/power.dm | 2585 ++++++ main-src/Code/shuttle.dm | 346 + main-src/Code/ss13_algorithm2.dm | 568 ++ main-src/Code/sun.dm | 99 + main-src/Code/vote.dm | 335 + main-src/Code/weap_sat.dm | 384 + main-src/Code/weapons.dm | 1668 ++++ main-src/Icons/Cryogenic2.dmi | Bin 0 -> 9361 bytes main-src/Icons/Door1.dmi | Bin 0 -> 6008 bytes main-src/Icons/Doorf.dmi | Bin 0 -> 2669 bytes main-src/Icons/Icons.dmi | Bin 0 -> 14685 bytes main-src/Icons/aircontrol.dmi | Bin 0 -> 494 bytes main-src/Icons/airtunnel.dmi | Bin 0 -> 2717 bytes main-src/Icons/airtunnelcomputer.dmi | Bin 0 -> 1483 bytes main-src/Icons/alert.dmi | Bin 0 -> 746 bytes main-src/Icons/alphacolors.dmi | Bin 0 -> 395 bytes main-src/Icons/ammo.dmi | Bin 0 -> 1788 bytes main-src/Icons/assemblies.dmi | Bin 0 -> 2641 bytes main-src/Icons/b_items.dmi | Bin 0 -> 29736 bytes main-src/Icons/belt.dmi | Bin 0 -> 1944 bytes main-src/Icons/blob.dmi | Bin 0 -> 36860 bytes main-src/Icons/canister.dmi | Bin 0 -> 2943 bytes main-src/Icons/dam_human.dmi | Bin 0 -> 5738 bytes main-src/Icons/dam_mask.dmi | Bin 0 -> 1518 bytes main-src/Icons/dam_zones.dmi | Bin 0 -> 11302 bytes main-src/Icons/doors.dmi | Bin 0 -> 11287 bytes main-src/Icons/engine.dmi | Bin 0 -> 3761 bytes main-src/Icons/enginecomputer.dmi | Bin 0 -> 1542 bytes main-src/Icons/escapepod.dmi | Bin 0 -> 10141 bytes main-src/Icons/generator.dmi | Bin 0 -> 804 bytes main-src/Icons/ghost.dmi | Bin 0 -> 31 bytes main-src/Icons/heat_pipe.dmi | Bin 0 -> 1749 bytes main-src/Icons/help.htm | 121 + main-src/Icons/hi_pipe.dmi | Bin 0 -> 8198 bytes main-src/Icons/human.dmi | Bin 0 -> 2568 bytes main-src/Icons/imap.dmi | Bin 0 -> 208 bytes main-src/Icons/items.dmi | Bin 0 -> 31763 bytes main-src/Icons/junct-pipe.dmi | Bin 0 -> 726 bytes main-src/Icons/l_items.dmi | Bin 0 -> 5540 bytes main-src/Icons/lighting.dmi | Bin 0 -> 404 bytes main-src/Icons/mark.dmi | Bin 0 -> 2247 bytes main-src/Icons/meteor.dmi | Bin 0 -> 12353 bytes main-src/Icons/mob.dmi | Bin 0 -> 25219 bytes main-src/Icons/module.dmi | Bin 0 -> 1060 bytes main-src/Icons/monkey.dmi | Bin 0 -> 1983 bytes main-src/Icons/pipes.dmi | Bin 0 -> 11508 bytes main-src/Icons/plasma.dmi | Bin 0 -> 1305 bytes main-src/Icons/power.dmi | Bin 0 -> 9594 bytes main-src/Icons/power_cond.dmi | Bin 0 -> 4298 bytes main-src/Icons/r_items.dmi | Bin 0 -> 5548 bytes main-src/Icons/reg_pipe.dmi | Bin 0 -> 1392 bytes main-src/Icons/screen.dmi | Bin 0 -> 40470 bytes main-src/Icons/screen1.dmi | Bin 0 -> 16106 bytes main-src/Icons/security.dmi | Bin 0 -> 3488 bytes main-src/Icons/shards.dmi | Bin 0 -> 489 bytes main-src/Icons/shuttle.dmi | Bin 0 -> 9278 bytes main-src/Icons/ss13mapd.png | Bin 0 -> 7768 bytes main-src/Icons/stationobjs.dmi | Bin 0 -> 26067 bytes main-src/Icons/table.dmi | Bin 0 -> 2376 bytes main-src/Icons/turfs.dmi | Bin 0 -> 7979 bytes main-src/Icons/turfs2.dmi | Bin 0 -> 8194 bytes main-src/Icons/uniforms.dmi | Bin 0 -> 5555 bytes main-src/Icons/wall.dmi | Bin 0 -> 20475 bytes main-src/Icons/water.dmi | Bin 0 -> 2669 bytes main-src/Icons/weap_sat.dmi | Bin 0 -> 7060 bytes main-src/Icons/windoor.dmi | Bin 0 -> 1790 bytes main-src/Icons/wire.dmi | Bin 0 -> 2690 bytes main-src/Icons/zone_sel.dmi | Bin 0 -> 1713 bytes main-src/Interface/skin.dmf | 780 ++ main-src/_changes.dm | 280 + main-src/_design.dm | 109 + main-src/config.txt | 64 + main-src/main.dmp | 2843 +++++++ main-src/spacestation13.dme | 65 + main-src/ss13h.dmp | 2783 +++++++ pending-work/animay-bugs.txt | 25 + .../changes-40.93.4 to 40.93.2H9.5.txt | 44 + 109 files changed, 48990 insertions(+) create mode 100644 main-src/Code/!atoms.dm create mode 100644 main-src/Code/Test.dm create mode 100644 main-src/Code/TextHandling.dm create mode 100644 main-src/Code/_debug.dm create mode 100644 main-src/Code/aaaDefines.dm create mode 100644 main-src/Code/airtunnel.dm create mode 100644 main-src/Code/areas.dm create mode 100644 main-src/Code/atmo_control.dm create mode 100644 main-src/Code/blob.dm create mode 100644 main-src/Code/cell_process.dm create mode 100644 main-src/Code/cellautomata.dm create mode 100644 main-src/Code/chemical.dm create mode 100644 main-src/Code/colour2html.dm create mode 100644 main-src/Code/computer.dm create mode 100644 main-src/Code/cryo.dm create mode 100644 main-src/Code/datumvars.dm create mode 100644 main-src/Code/demo.dm create mode 100644 main-src/Code/demo2.dm create mode 100644 main-src/Code/dna.dm create mode 100644 main-src/Code/engine.dm create mode 100644 main-src/Code/globals.dm create mode 100644 main-src/Code/h_sandbox.dm create mode 100644 main-src/Code/hexadecimal.dm create mode 100644 main-src/Code/instructions.dm create mode 100644 main-src/Code/inverthtml.dm create mode 100644 main-src/Code/items.dm create mode 100644 main-src/Code/mob.dm create mode 100644 main-src/Code/modules.dm create mode 100644 main-src/Code/newitems.dm create mode 100644 main-src/Code/newobjects.dm create mode 100644 main-src/Code/newpipe.dm create mode 100644 main-src/Code/overview.dm create mode 100644 main-src/Code/power.dm create mode 100644 main-src/Code/shuttle.dm create mode 100644 main-src/Code/ss13_algorithm2.dm create mode 100644 main-src/Code/sun.dm create mode 100644 main-src/Code/vote.dm create mode 100644 main-src/Code/weap_sat.dm create mode 100644 main-src/Code/weapons.dm create mode 100644 main-src/Icons/Cryogenic2.dmi create mode 100644 main-src/Icons/Door1.dmi create mode 100644 main-src/Icons/Doorf.dmi create mode 100644 main-src/Icons/Icons.dmi create mode 100644 main-src/Icons/aircontrol.dmi create mode 100644 main-src/Icons/airtunnel.dmi create mode 100644 main-src/Icons/airtunnelcomputer.dmi create mode 100644 main-src/Icons/alert.dmi create mode 100644 main-src/Icons/alphacolors.dmi create mode 100644 main-src/Icons/ammo.dmi create mode 100644 main-src/Icons/assemblies.dmi create mode 100644 main-src/Icons/b_items.dmi create mode 100644 main-src/Icons/belt.dmi create mode 100644 main-src/Icons/blob.dmi create mode 100644 main-src/Icons/canister.dmi create mode 100644 main-src/Icons/dam_human.dmi create mode 100644 main-src/Icons/dam_mask.dmi create mode 100644 main-src/Icons/dam_zones.dmi create mode 100644 main-src/Icons/doors.dmi create mode 100644 main-src/Icons/engine.dmi create mode 100644 main-src/Icons/enginecomputer.dmi create mode 100644 main-src/Icons/escapepod.dmi create mode 100644 main-src/Icons/generator.dmi create mode 100644 main-src/Icons/ghost.dmi create mode 100644 main-src/Icons/heat_pipe.dmi create mode 100644 main-src/Icons/help.htm create mode 100644 main-src/Icons/hi_pipe.dmi create mode 100644 main-src/Icons/human.dmi create mode 100644 main-src/Icons/imap.dmi create mode 100644 main-src/Icons/items.dmi create mode 100644 main-src/Icons/junct-pipe.dmi create mode 100644 main-src/Icons/l_items.dmi create mode 100644 main-src/Icons/lighting.dmi create mode 100644 main-src/Icons/mark.dmi create mode 100644 main-src/Icons/meteor.dmi create mode 100644 main-src/Icons/mob.dmi create mode 100644 main-src/Icons/module.dmi create mode 100644 main-src/Icons/monkey.dmi create mode 100644 main-src/Icons/pipes.dmi create mode 100644 main-src/Icons/plasma.dmi create mode 100644 main-src/Icons/power.dmi create mode 100644 main-src/Icons/power_cond.dmi create mode 100644 main-src/Icons/r_items.dmi create mode 100644 main-src/Icons/reg_pipe.dmi create mode 100644 main-src/Icons/screen.dmi create mode 100644 main-src/Icons/screen1.dmi create mode 100644 main-src/Icons/security.dmi create mode 100644 main-src/Icons/shards.dmi create mode 100644 main-src/Icons/shuttle.dmi create mode 100644 main-src/Icons/ss13mapd.png create mode 100644 main-src/Icons/stationobjs.dmi create mode 100644 main-src/Icons/table.dmi create mode 100644 main-src/Icons/turfs.dmi create mode 100644 main-src/Icons/turfs2.dmi create mode 100644 main-src/Icons/uniforms.dmi create mode 100644 main-src/Icons/wall.dmi create mode 100644 main-src/Icons/water.dmi create mode 100644 main-src/Icons/weap_sat.dmi create mode 100644 main-src/Icons/windoor.dmi create mode 100644 main-src/Icons/wire.dmi create mode 100644 main-src/Icons/zone_sel.dmi create mode 100644 main-src/Interface/skin.dmf create mode 100644 main-src/_changes.dm create mode 100644 main-src/_design.dm create mode 100644 main-src/config.txt create mode 100644 main-src/main.dmp create mode 100644 main-src/spacestation13.dme create mode 100644 main-src/ss13h.dmp create mode 100644 pending-work/animay-bugs.txt create mode 100644 supporting-docs/changes-40.93.4 to 40.93.2H9.5.txt 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 0000000000000000000000000000000000000000..95a14719f9461136c97f619e90afa179cd204a6e GIT binary patch literal 9361 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 literal 0 HcmV?d00001 diff --git a/main-src/Icons/Door1.dmi b/main-src/Icons/Door1.dmi new file mode 100644 index 0000000000000000000000000000000000000000..7900963d9dc8bdd28473b7dfc4a122a5f2dd4e0d GIT binary patch literal 6008 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 literal 0 HcmV?d00001 diff --git a/main-src/Icons/Doorf.dmi b/main-src/Icons/Doorf.dmi new file mode 100644 index 0000000000000000000000000000000000000000..7a5442ddf7224750f425390def7307c12452e3ae GIT binary patch literal 2669 zcmdUxzityj5XR@v-X(EJ9DxzocUDT;M2du5(9uv_h2H?=l#wW?DJUqAkZ^THcox4# z-iB{>GiDqSiwf!X_S4>eGkg2(>z2zU5mm(bqMAP5+Xu${KjD!)E7GStigMrDnCHHEF7teB%#WUvOQtaH z^`6q-U194GeWNoTqux_1?r_Ozk)H54%6)5Np8Li96Z5e#KYE2(G69GmU+2XFzz5*{ zO2<4wExcuY z&V#85ulA1Ix7K!S?7QbX+4?@-V-G!?JbC7By>ChHu6B=)OF9|^^=Lr*;25k!ddHrC scX%h+38;tr?{NzHLH=p)eEVF`7{6l(XP#kOJp=E5{8kgfN6tUj-w~e}Hvj+t literal 0 HcmV?d00001 diff --git a/main-src/Icons/Icons.dmi b/main-src/Icons/Icons.dmi new file mode 100644 index 0000000000000000000000000000000000000000..3ea19fb3cf132f5a402854d1c892af3ddb61eb88 GIT binary patch literal 14685 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 literal 0 HcmV?d00001 diff --git a/main-src/Icons/aircontrol.dmi b/main-src/Icons/aircontrol.dmi new file mode 100644 index 0000000000000000000000000000000000000000..47116d565e499fa2e2567b9fb9346e65e45f3c2b GIT binary patch literal 494 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3HF6DHW&!sf?(IcOeI$B{s zxhIc&w7t&wwr&UvkrY~bszD=k7we8Gn%X;l?bO)uqpFCJq414yo951g*BBTW9X(wf zLn`LHooU;?Kc|Nx+A*%&EY{PEK1=O8 z^g$@|$;0KGiVhz>1^;I6*rmbn1QW$<6Z=vtf1bmM~oEO zp8i?IP&8|8KI8p;tebxOhc;{#yLM~(XZ39kKhOUz4?kdY{^gEy3>Qjct=1KDKGA<1 z&N=}kyld}~AKdS484gtcFVfq{x~|S8iedr`j79&GUnc9Vp#XM>G!53l``uY8VYwVuZ*27{PXmWP{t?! z4(m7N8FU<5BDv$Qu94wc)%&fd=U-o+&-i2o(}};c83pe5YBk8PqM$kI88ap=jtPHv Q92kKNp00i_>zopr02uh)0ssI2 literal 0 HcmV?d00001 diff --git a/main-src/Icons/airtunnel.dmi b/main-src/Icons/airtunnel.dmi new file mode 100644 index 0000000000000000000000000000000000000000..d81ecaf533f74d104939393645afd553d4ef6f42 GIT binary patch literal 2717 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 literal 0 HcmV?d00001 diff --git a/main-src/Icons/airtunnelcomputer.dmi b/main-src/Icons/airtunnelcomputer.dmi new file mode 100644 index 0000000000000000000000000000000000000000..2ea26f9f7d93ddca7d6c6698f791dfd167474f9a GIT binary patch literal 1483 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 Y7y?dm%)Gkt9mp39p00i_>zopr049f!RsaA1 literal 0 HcmV?d00001 diff --git a/main-src/Icons/ammo.dmi b/main-src/Icons/ammo.dmi new file mode 100644 index 0000000000000000000000000000000000000000..f8e70c8e12c139a38cb3df543a14ee68a94372f4 GIT binary patch literal 1788 zcmc(g&r1S96vyAJ&bBQcMpRluWGRRe0!__p8=KH!LD7FePtl=HodbWw8r?c2bkKwC zslP#_V;8~y$KL*Eb73_tBX)LpvpX=~&-d}(1Xb;vP#6w}05HuyO|$QsrU^i-2YATl z3x@^Z@b4>3uSt>+lE9acZEGeZ&e?(FtO?n2qdyNh_tdy~DCek31d@b5VRRf-BQbRn zRmUm~?_P?hXSjSY4uqIiWtsj!uI9?ho8E1d+zl0$5u2qNYb(ra!Z8HUgqJT90(e-^ zvS|7;*cmcCm)&QMl0M`e*G?vtw zo5O)zkMg~dEH-5X@U*BS*uYP>t1|tBZ#5F1OwB8^3}B|<<~I!A@St?NDE+#nQ$D6( vD+g|17Zlc%f4!t(6J=kmOZF^6U`DXnVC*}`>F#s&I>K!ThIbcsFTe2t-N~sw literal 0 HcmV?d00001 diff --git a/main-src/Icons/assemblies.dmi b/main-src/Icons/assemblies.dmi new file mode 100644 index 0000000000000000000000000000000000000000..112ac68b3f79242521999d0b7286e76cbca01ba3 GIT binary patch literal 2641 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 literal 0 HcmV?d00001 diff --git a/main-src/Icons/belt.dmi b/main-src/Icons/belt.dmi new file mode 100644 index 0000000000000000000000000000000000000000..f886c4dd5af360717ac80fb98a0f5af0428df050 GIT binary patch literal 1944 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 M07*qoM6N<$g4zOq{r~^~ literal 0 HcmV?d00001 diff --git a/main-src/Icons/canister.dmi b/main-src/Icons/canister.dmi new file mode 100644 index 0000000000000000000000000000000000000000..c9b9ea0219a89be9c341f6207739ce466c3184e2 GIT binary patch literal 2943 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 Uu=GFS{Qv*}07*qoM6N<$f}W_tv;Y7A literal 0 HcmV?d00001 diff --git a/main-src/Icons/dam_zones.dmi b/main-src/Icons/dam_zones.dmi new file mode 100644 index 0000000000000000000000000000000000000000..8525024208de49c46bc0fb7efe7f27f81a2f70e0 GIT binary patch literal 11302 zcmb7q3s_TE)^@B@{T!(b+ImH>FsM`k0TGc)+KO61q@q<&ASwm~gb0y4;i&BZ-iV42 z?x|IvlmK!K5KOR80tS*QNPqyTAc+t{2q6jKB{%*?$(YMxoeW%Re&I7s(^Y(#^ zYU?``4i}W~fagNhY_Sbr7<&p=Ws_pU^;VNhMSGsbaMCDi-7A zuT_Y)jxpTxOPWlqYkNH*L!V*EaIaA26NkD@d&_*-ICZJ1%;(XoAI^SK@Wo}@^&ggR zc8J!Z{j`b@JTfXnoeIv~J(AkhOnTsdG_@<*n`_LaWnQxJw!CC07FYJJK(G z^d{QwNOn@R=yGu3g`@jmRnnp|$p3D6 zBD=BJ|LzV|Tg$VS&(cQ6{I8FG@7PS{ACk7NIPp)Xmo#7^d?8p#H~#wI_(jK$*B|6B z+nv$RNSulfbNoK=dpBDAwfJk72KoiJ=mn?#&5)Ii|8~f&#*wP@ju(;Jcipc1=%R5& zoU%{e7y0?q&q==W4>rk81w0e1Y#OOb4%{G3{h;mb(AAC?iKo0bdrOz~t?Wzt#O5zH zcRvy&l6KQ2uR3@6(aHBYUAz2dx^mlcW9~~QEdM4wmy~>{iu^XVa7uIHUzsy-^wmVX z+4>JTQ~%s&3JEIla`=$zb(4;b4cxUt0-^e$L-ulb7tUFs*dT-pk za{tP^7~V$z(DhK}xo2jhc#AiopKX&-xLAuY_@ji+$gkt!I@n;W9_CU

    %7W^A* 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 literal 0 HcmV?d00001 diff --git a/main-src/Icons/doors.dmi b/main-src/Icons/doors.dmi new file mode 100644 index 0000000000000000000000000000000000000000..ebccccf274ab61d6a2dc4ce2f00f91a0baf2d47a GIT binary patch literal 11287 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%0Ao`I1>6`8QVFD^0eain`<$hVB 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 literal 0 HcmV?d00001 diff --git a/main-src/Icons/engine.dmi b/main-src/Icons/engine.dmi new file mode 100644 index 0000000000000000000000000000000000000000..f7931ce6c0e519c6588e13cc6a6c9ce56fd056db GIT binary patch literal 3761 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 bY=ZWGI_7;u$3>3Q00000NkvXXu0mjfN#LJy literal 0 HcmV?d00001 diff --git a/main-src/Icons/enginecomputer.dmi b/main-src/Icons/enginecomputer.dmi new file mode 100644 index 0000000000000000000000000000000000000000..eb6221020aa9f7e04bcbc46bab5d09736bc9b2aa GIT binary patch literal 1542 zcmV+h2Ko7kP)V=-0C=2*(6J7JFc8M^nLfn@RyD0)+NFzu7zTI+QsE>-?2#5VzP*bPH4?TP z{=a<5MX=8fc?oHevl}|!kp&IOhBH5!5kW(EbaX}=vY_dl2MvM+Cuc7Bx_hDlGzhg5 zN-8PiNiLa~CsHb|CV{p!EjEi|iQrttyC2xu_P^Y+puyfeK!aF`N!8WW4s=I1KlyGw z^~O~-&3@vutjVrv3e{H_K~|=a7CCzYr_gA!PJb1n000FANklF>>NQ7{#A< zwx&z9)n4Jh>Ek9j0nB7LKzxg3$SuqPb~1xckZnYt{7X)dt?0ObwjlD#!ZNaBOAx(Z zlZ*|1mJoV;(kEF+DM1J!gpja&iG2fv5JE_b(0~acgpdf(fC(XlkO+Kroyf9GjVUap z6m93JPyLkj2_c`KMgz{WOiicLQ3T7fJoy^xQ$J;WLP#12I}3X3U;fkS6lGaDBLM1C zKV^MFNIEn|z;}0doiDW8?QnH<)%u#}=V!l*6(jY5xo4k8{iynV+Mf>>)BXq{N#L9V zo=hg*7uoOkC*NnjW(=mkXU=ow?Yi^z)ay0GkC%_!Qgu(g^z&OM+RuyC;jeRk ztrQ=MYJBx;*1k$%}qpFV!*N?%^KMMfB5TZonJ1O5UWGoROQeAZ@kt+ z@!zQTs=2wjX{_YUW)mdzJ{Nr<1QY-$6-6IHKmbs&^xqLe-~qrq&~(SIEK@7|E4L<8 z`F~}ZDuC*953PUH{)Iq}_WEx$;N5QLExOE&($`+OillEclzt2zzb&i(tMVJi9#_^mLe2z9?Q$GzxVoEA5s<6(%Ru_1!F)rLx(Qq6dkUukYqSyTp=JQiZ0E5|xJv}8hdl??e{GNK z%w(-m^iM>VI$0~n>!;L@fiANsUTW>njC%F)voT@U7d}t~<_mZjFyJ;{pW)>pOgTmeXPW9qv!Q$G8yU!5vZ03}kE|b?TK!w?PjLR1 zoFQjnz8b@XInO z`9`2a>YK}uPR;G+Bk0G*u75icHqq@bRJOB=P}!d6t}mrL47&%8ysPp{35oEL|6EED zquiRK&tJ-5=GUYjI`W=NDdy<*xwkGuYKnSKC1}|uYz|@f#XHg%aH&hL2zW^SJ`w1E z`lhLRuLr)crABQu)qiU{U>7rvXA=bub+JTBZMTukpW97g?<`LS(fPgRG9sKkL`Agx3{-y19~5*PyLkj z2_fn5CH4&vLI@!#LIWm*5JDnA115wJLLzW92W&r(eCTXc`}%fL3iYXsv1NeiKO3$cHhheAgH)Te&R`h<}5s71himt1tgT%KV= zed?#IPY6j1CSegm2q6)uMZjZi|K|(!sh_ewAtWto20UcKNgt?B{gm|yA!$)F;L!6@ sb^;3Zsh_ewAtWuTENDUqA%ukEFS7?q<&eSs+W-In07*qoM6N<$g4E{p5dZ)H literal 0 HcmV?d00001 diff --git a/main-src/Icons/escapepod.dmi b/main-src/Icons/escapepod.dmi new file mode 100644 index 0000000000000000000000000000000000000000..de78c979abe5e8e88833622231dad9c65af57b31 GIT binary patch literal 10141 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 literal 0 HcmV?d00001 diff --git a/main-src/Icons/generator.dmi b/main-src/Icons/generator.dmi new file mode 100644 index 0000000000000000000000000000000000000000..af40ca645cd414e73401a95c77385b6ce9c6ff4d GIT binary patch literal 804 zcmV+<1Ka$GP)001Be1^@s6m49>f0001SdQ@0+L}hbh za%pgMX>V=-0C=2JR&a84_w-Y6@%7{?OD!tS%+FJ>RWQ*r;3_UjEJ;V@WTzoyb z04@zX|E5y)s{jB3Zb?KzRCt{2nlX-}FcgM=Rx?LPvu*m35EOLr1zfMR2Vk1H#2z5s zHlc`=Gf=Mt9R(=TTw)5h(@nt^yJj*8PKbfnGw*#;q&OJ=&*s?=zc?t00u1AdZ>|ks zXu}T3IE5XMaSA&i;}mv4#wqN8j8oVF8K4FfVwQaO0 zioo_>)~7|#cNjqk(bj1+xRE$(pr2NN8bCbiA=v1n{a-)WxY4h5VSN87ak2smAzCRV z;w*Pz4|#o`F-3(jlg$`{uW48a(Y{xVZEYE)kD!@dzi(xXv*t*4I(;88_TQ2Zn-D$w z^E|)Wt2b!`AVpda4_(LjrZ0qO_2(A)efA91|E!!{0k0uS8z2HUF_2Bws0aGH-4110 zcHt+^8q{fYGV^bt@56hgssFYNO2e$z>uwebA=<-oXIKp2u|a@o4D&_5EK96bD**2y z`Pa+$uB?B%g}!Tae_wyD1O0vMq!_dU=J~%Da{bVC`OvU2M)<0)!|-;yb*}Hj>Nf{x z9Z(Or9*8guPp<2MIjlRCan$waXwNr{Ay^Nnl+w8U4#Ti}QI=AExNj`f^{H@n1(Z@k zDTO3SP*oN7`+aY{BuSu@g5E(+1$BK27#&cD9XY z!0(5*?)ua7J(N-aFw5Xm*Qdb6G|bRJopUEhS^ukJm56?NzMt9-)+fqU4ycsEk3Vyn z!uk|BIgVxeKlWUDq3=(7+mJ+EpBjS_(U&-`r*mgx9|CoK3QTe!^_VzoZh9c}tLams i*8u_dN7AY5Q{gY1|5UbAG60}BHHO_c*H literal 0 HcmV?d00001 diff --git a/main-src/Icons/heat_pipe.dmi b/main-src/Icons/heat_pipe.dmi new file mode 100644 index 0000000000000000000000000000000000000000..48f0f3bb99ea13a2cad98de3977ca2ceed8a290a GIT binary patch literal 1749 zcmV;`1}gc9P)V=-0C=2JR&a84_w-Y6@%7{?OD!tS%+FJ>RWQ*r;3_UjEJ;#QVn?!_vh)`rkj6nuOC^98N zjU^Fka4Aq$aP@OhaPjrz0szz6e}D&Xy&V7m1`bI?K~#90?VUT0+%OD=A)J#rO&D-EdP@|?Howl6*LwXjMNyg^)^#-@#&O)HX)?>Q zm~~x;-0R@Wm8VC#|IePkB8znYOXttc7wG~hilQjzL=BLlD2gJ28X!ec6h(wA1N8Fx zzU5pi$3nXQ&z`>`i*)}>=g&cw0lHl;L(a8wETsGY?D;FQNcX>V{v7BMoT4a-B7zzq zMNt$*1T{d4q9}?8U!@B$j-zPctoE>$Wci=%pcxK=PSez+ZKi2*zW*qcwh{DwZ5ylp z+X4Et)(+O%yR=w4;kw{wkFI}l1B4rRPk=}y%MWFEmVtP?UWVKC^8fU9tG2&5xZG)=}@JIwR!)Gyq()(-2s-aU6@{fir*Wm!b? zr!$opF2f^H2mFDTGDI$qXI<9;eiEcrK6ti&v>9Qpc9vz?a6i{-FIWGVR$f>M(=?fR zo;NVapuOJZNX-+<8S5|TU;NyW^`B*cIQF6A4t#li-$Gjnxzl4%0f0!L4n50{4Iwr} zoP&_|FZFnE8NUDc`LHdtr2dd6{>b@egnK-PQLF!!=Cd0$$}JF^VX?Rpt-g=5z#(AiV$?^~y*3KoB4 zso{Zij`F$E!OOt;f+6A@gt&iQc~OtdRhN?be}23UUKuf=Um`l+@<%7 zx%bFg<1+kk|5@T-xrEw^#(Pqr@dIw8^$+)!W$97|(7LrYNptf&SB*;?8v;GhWz!b= z$DRzm2i^;QCMPZQPH_XYhZvCW zd`oUF&!hz*j|Z0l?z>_?DfNq`(^wF0dr6Oo=98N*XAFmyrF9JGZ2HgXTi3HK^bhpV zzstKxNy~YsxB+_h7*K4cK|A~N<1JW*n)2VSmj?qF^Grf{<>DLgDX|}*rv5Y*u$^dEwi=s&k#LotY2jhsRMIq%7h!R4gWE#58lFX8;Jd>9A-rFnoL-ECeAdS=ep$4Y5y}8@0HU<%T?^*Pp3RhdZ@aeo%|FvJ(c0?y&`x=4H&|CJ64l0lF3r<>Jh%CRP%nL@Ud({BP?}pL525 zthED_<4pSZ!L5JaQg08#&xxJ`$^h5T=Mfp>Ukfii2SeAs0XpO3JO>k6asxvobq)&P z@_t~p|NY0$hw_B3Q{dD;M+^vm=+C787<<)!X!o1zIwvjVoq7%^qr+(ZUS8j~&yTl< zLGdr2X6ImF?Hh}39LJ4*5V_9*_?Fy4F$PMj^w5Femf#QEv*_Pf&shA$_5PAJ!v^_w zy$mk>(+_D%e9)JkqJK2*x*8#93!p~duDn#8x$DiCK5fsLM`*`d5A+|>DT?AH zHp3ssahvCP!_W2nDIjIvr~y(GB?vVzAtaY%mHi>U1g9v9k_z{^ETu159uUVlpgkd7 zf9d?s&e_{vs{Zg_Lg5-bva_}S5y>(@bZ>v``e;bkUpoJ@bN2R^s6P$B<0Zbcwf_;( r7?7eUPm61lgK`|y04a*1C?fm?n)S5ywC^H400000NkvXXu0mjf;(U61 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..77fb29e4dea61003a8992c2c58dc6f4e119d0340 GIT binary patch literal 8198 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 I=D)1}0BKf1iU0rr literal 0 HcmV?d00001 diff --git a/main-src/Icons/imap.dmi b/main-src/Icons/imap.dmi new file mode 100644 index 0000000000000000000000000000000000000000..3185c883a5723977381b226d7e9e768abdaf4b11 GIT binary patch literal 208 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJsH%{N5|`BC)e_1!5cyiE*d}3((}~u4BZeK;C0IL%;~U4k9o=_B!L+x?!ql%-S!i3_rPrCm0@b`~kGZ(9^{+B%<~0IYUMU1D?Yh*8Fj7 rJIS@U-{(M8Zav@Z)0RLrNWfu|PLT)meGPW@GLWdJtDnm{r-UW|36Mu{ literal 0 HcmV?d00001 diff --git a/main-src/Icons/items.dmi b/main-src/Icons/items.dmi new file mode 100644 index 0000000000000000000000000000000000000000..c8da1666a6ac4eb168d9901c11384bb973df27e8 GIT binary patch literal 31763 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 IM6N<$f+CzqYXATM literal 0 HcmV?d00001 diff --git a/main-src/Icons/l_items.dmi b/main-src/Icons/l_items.dmi new file mode 100644 index 0000000000000000000000000000000000000000..d6a31cd22149c30ae80648171852c944d659943e GIT binary patch literal 5540 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 literal 0 HcmV?d00001 diff --git a/main-src/Icons/mark.dmi b/main-src/Icons/mark.dmi new file mode 100644 index 0000000000000000000000000000000000000000..509f3834714a203e1dcd4c2937a73248378efe35 GIT binary patch literal 2247 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 Vo>+5T>8St!002ovPDHLkV1nh literal 0 HcmV?d00001 diff --git a/main-src/Icons/meteor.dmi b/main-src/Icons/meteor.dmi new file mode 100644 index 0000000000000000000000000000000000000000..07a97a094e7907be1412d0f2527aeafdf8f70bbd GIT binary patch literal 12353 zcmd6t&5s+&dB(fCn`G;|)g*@;jU-Q-iZrp4T@O8gbul6?6R%<*w#F8q9A_5xHrH6& zlvZK{1Xysi3U$bFkwdOI?J4ms*FE|gz_}$rkbi{vJ#ST$9DVGrjSZ3_yX&*N-+Jn) zx88cY(?9>Kzs$}=pMU=O2OoU!@y8#3`st^iefHV?`}ddMeSi7ge_a0XhiT-ZjDrw! zOrzzG8&_PzZ9A8`cq?`;j$_y6AgNH0h!bTB%d4F)^-W3ZBHz42Rk)5Mh01hEG#$5Y zZo6d>xzd#bSB{Cshk20?NBf)(^Mis+N9Rti`a=~T=%k7$LE68GmOqiC&Lz%m=~;2Y z?G^K+4pJsA_F^h&B1T$_yb%=MI_;kHw+^|WPfLL)XZw-Kj% z5SOJJ?UU==cf(F+*Odou)Gl^^dS~EVxqpLW7?&hnlp^@Y(emx&3b#sJUosH%7=wp? zSb=1;j_Kr+s#hv*a54$&wq*Q8RH!E4?>by-HCx1~jp~kpF4P74K!Ca~Cy(-ovbI2P zjFfaEgMFmt<93aG)SwSfqGcXiA9mt6HSzT*;0IXHmn8P+(*hx;fR7mf>fu<&#ZAgW zcPNd!^iw~73%g6-u(=X1hY=v|w)1xel4w6J_eb|g9dh1n-y!8jMLtIIgU(+Jb`yG+ z7X{hU!SN4`RFsM=RD86~xS2&h|5Tm9csofCS)u&$^74YG58L(bJYciAsk+!yytLC^^12$cwQP zlbMw9VF!WtN5Xa3=^`-Vi%$HcPmJM(+c6Y4B{n&A`1ayB%qlPDgwhi}q433ZjpH3v zL2+ppL~J7p;th7k-2+e`!+GI58s&rC!#js05AUF1Y_bk-xc%7V&d@I~J&WG|@c5S> z{Hlu1(vh1mu?O9ydmZU@Eb&?#8jHL&G-WOjUzrs{t`#h zP#=|w5kn~XbeL9piXme7UABxRNh$Z*g-7KYA_a-d4J>2y3Rl;xQ?(%QWD2B=y$ZhW zE*>3C7xURyJepNDX}x+l6_)-yIN@gS>>1Ip(@?J6p}yZ3>6~{aw_Mfl%xA8;-RV+v z``~2ej&DDkxkWK?{dqHs&e`}~b~}cQmLK|r@~S(r*)>aVb~!*{uyB>HG9a!R|=$*hrQ0!rI*ociwi~NukVnO~! zD!gInb%WDKvl*Rd{QfCANv@{pc9N$3G;Q?KM%rtnI+E=)G3~`#(g}JkDb~6UC{_xP znX7R!UVDnWq#jGk!y*8;!>Xn@;lAxe}O?LhL~5C(xT&$>psIg8@ZEa=|&S*!q`b~J_9lUtA9r=tzH+b@83tWC4C;W z#RI!Mcnf=hhikb+CPtH}O?`qol&DNm)T0I2W268(ze~#%}We*p5)i3e|YsL{1l{I?r(5%s+){C*7+De&iWSjIhBWsiOjN#KFVO^*p3dmWv4Ip%rj?6XgOx*`@wAm;5U0OTbz9 z)6{d#FvTcKxPd927;O~0Y7SqXGUCmNPEUzj#M#riSE70G3|LvmX1TPWo5a;58{Qvj zBIZNQKvp!%6zMTjr)YHkZi~rzXP@i(2b?Cii}`dBXVq~(pGVOpgY<&X5`rO$uR8wZ zVt3WRRV`&c-*sTK(jX+YOsybM@+|$50cyVt9Hd$lD6yo0&7v7&tR~V&1SP@p95)o6 z{1ZP~9zo8Dl%8&)#U=({mC?**tRae2AR5OgF15Tu^kfPRUrZNA8EiVrUL1*)#Go)= z9PO13{o<+;-pzIw*esLQ!v%Kkd;ypTnt@d|lJ45NqZR1*ud#~fv!lIs%HqNbG-+k! zCyUv9chWl9n$0nD_`}jCJX)4KQO^(a#=x)HaEc@sPZQ`Axy}K|ns?a-Bf*!jLDy4c zZk{GOAk#QZg7wT`nuOt{mceEsDNly+=dTopkKzmYe7d!8)gBlw1}^i=>Nh%r$#fw@ zYN820$~Wj}++1LHJ!fHt!1J3TY7;8wQYJV6;qC@{^~ra_FVaJ;g|^8OSd_i?kxnp5=7iu34OXNCb^y1B(1|K zR93dkCSG>GQyAMk67otgAN*kX!O=cYS1aBeNHyIYXyr9oYC^mm{~iQ`e;r8p?ffV& zFzJVn7QpyeCV@W(6g{K?Uk|oNUW1^)0NJYliUIkuLHVZqf^|2GI*i9ZM9Z{srJ0;d zvR0C`436_jl9&+y_7_RhbK_xdmZ5R3jrrwqC##eok$Dza%*vHquzOIhs`zXwGeb#@ zQPRSivJ6j5n`ukAE%2$GXr*S>*_@*O9+oEV6VAmDBH*s#G?fXtMK}LFy36BG$D4<@7uiLz z3|!X9@2BF6G&{?|I!!>K=S&l#IF_Ue;yg%PG&EKiXv4;0M90+j638joO^9<$6jloH z!N^2~87^vKy34n>dNq+lPnM$0dtJdqwSfs<8ppEu3sy}3!(e17#b!jI1@dQ4F@0LD zg|XN#0E0CKcZgy69W2N_bB9!S+tZnhb1WV_A5Ru1=&Q!##cms=RSX|B_v2Pm4wNYB z8I1RlR$J)$Fr!g+gDi&gg3M0ZmueZt*AZWonXO)mJm3iB1)fJy6~Pvyg#iQ1YRFFj zXb-FqV1ziJ7$=u}fnjFLfS~f&Sy`7$eL(5SJVd+L?N=jUu2z~{$6C}9>6b~Fi{4JO z&FKr)R9M8+DNke_dM_v#56x;c?z}4U$+&)_{>RQ8xj@w2AdFc9%S{WJoFmpiXg7fO-yD zlQral$c&69xM**bU(Eq?FQ+M9@OhxYYxKi@4K{xUy)}Xv}Q!L9l9IZ0#bg&GirM-=qVH_UWCdv37McW4BFXYZqFvled zQ;R(~m^tA`ea!=FXdv0z=?P=~wL(Tf#FCOyunI7{^cpVuhd^S;sCGh8!FVfzvt9L+ zU(ErUF(qQ+|A$+t8EG*ksUNjY!vrQY64CHmWMu=FtS zUh~hZUjB%6^wEsPrDE|MRu2Gu_;6;X-E=0Sjz(tNnQ8Yx6$d?<4{l-DVI70(4#$5* zZ`q3DQg6|v5?L~OIeko4j0}CMZ8=}JGUn`xO^7z3!-uYWV&W<$uo?E@>lv_m`0Lo; zRh0P^WbI+C)%_m}isG?QaSvy5@3b4043l;xcs`mnFp`C-2lp0@&;~40ulujL8&me+i3Z{^xlZf7{zs99jdd4e43Y!gFKEgq#l#2z^xh!imNUPjhSb`IkTx>ZT z3h7>1SmW6S9U^GFjGaG_p)?-a(q8YR6dFx<)bt@tL2NI}=#N+OTjZdnM#cO|#qOYpW?N>0E28 zykTiNfX8py`WkraEhbq?GjAuIn*6LeTQZbp-cIU$Cw?@uS4P#lZRjf09%2s_jR&L- z@7!|3(MQ6i#gbdY^sxPfQUN79#m2(gVR_=^4MDJ$BUBnoHuA{ zU~0=yjm=8X{ereo(!e6IvKUDMgUyPd6nPS=A^=4Ek_{yH82_dgj#@E-idGa(dI8Kl z9p;r5o+q<-|1nAuMF6Q38#vU+NxXV-vv$>ym?h`1I=ve(40GTX4K z1HN;DgBQihdy7s``0xryz8EOggj;|fFyqCynAiB^R)e98e|yDnX*Ben(huYB^4-#` z8jZA#xQ5=7Ky*Nvfx)BMf%9ys;7v8TW%f+qlOU}BN8X?j1?RJ_tyg8M`ZCMK8tG(vzK}a*6o55r0xTfn$=BWGH&`!U4 z+nTg`&+r!Tk`(s<^Hi22tJiaH&b;vE%*4zY_Ay!+CR(dMQT;QnSC^btA zq@MQ0Ij7gVrJ_Ib9s8<&DP)$L0Vxq%Z;MtPDR8Y(e%aplLKV~f>JC7xoKY+ae~35g z5&n@}P7+L}Jtxn6N0Wy4n8#Vk*I;;`UUo!9H|f}aeBGWXI=J>ksdGNO;)((ZVPuXd zU4qsRYljM@(Ja!*t0uegYAKB+pa7~K#iCvR zB7d(nm@aNk-W?ay@{=F5rzJ0p&``Vv;S-$~W?I}~(hNrwqn7f)WVgg?#P?CR4AJ|@ zTsx!`|DjGP!BFqzS57JVsVVR}uM~(12Kl69PjC)yDGJH^*Ar^N>Z@uMd-N<7(hP(& zmo*^4OI0Z}!ZwJ0CEwIT-fDW^RMp3@*i9-XSN_hp+GDL9F9r`~rQI!9tMx9vsGee{ zRd;2m{a`9acR*$foVp0TRHmX}#BJ>%az!f@!Lrn3GBo zeKkMTij12yt-Vyb!iRbg>@~jLynQWhs`)PL;pMovwA=m}_FLomtO!gK=>h?J!--r~ z&t`l##+GPio~n~sS+Y^Yt7;_1!;1R~SF7Jr@Y3GDzGoZge^KJ0G9I=#Ku zD@^~3_%JWg$9c`@qhB6>_+j)d0KOJ2|1HKTxl%`>ug}Ku@}DDDcJkqkcHSP+B#OSx zB|FjbU+^Lj`0$opYG{orNteIjf^M&YyT5}!EX}1%ncXl0cJIG0Z$kf{(=L$ zAjsJAGQJ=EDL43Ow0ww=wq@pN+HvTiVfO3BUh^uY;FYhM5Ui?hk9pI_#^F`TkD^v( zzLP%YME@Oqqg9TFiuU>Th$5L8{Ov=cw-DmbqUEp6c>)dLgsgiDC>`4?uBGuQ9#0i! zfz%N_okqPZ!D&nhf4td4TALUq9UE5k^<5x(!Gncgdi!o zNcU1pY|T6T{&79e`{DV(FxM;-J9Ex`?sK1eh%hqHVz|h05dwiQ=xA#^fi>C22j&CfWM`Ofw*3^z72ws`=lObiJ6jm_k#dbanoUKz9G ziy1d#8@+xih%OrQ5tW_H7FS+MYwlqwd-gS*jLhx5HO@UZ=kk0z#JB-!B6_K|OZVC( zduD3xDHYc@p@?C3;u*3$+BVS2ox;mlNun@@k2AhgWMQxwXo zS*D-%##mk&8K}|=AR}pLGPrI+TIO&jG4&G<3tCOadQXZ&+3KR4ife6~^|>B#)v&iF zEp_l|ipHOF@^P3IF8sj1B-rBjH1=xgx8>A}J|$mS*Kbq5D|~_p*}oL@rSu|2`c0Eh z>Gk#NRRZDl((n;^326t3dv|($!)jwPUs0*vn2h}MQy=1X*Sn&yB#XPqg6`+#*Y{$g z%6V&)I;h$3_3ffZ#-(rgccc29WRSn~>}+yssXh4p#FYxaJ#KClyXHKrEzenYk|RU; zW8=ah>37tjr{3vr{|EoZ`S-GNbJ9@BYZPcJj0H6ic7t&ljZ+#!Bm!Hgp-^nRpeL{&H~gO+xDzT4jMX7TQL;cWxeeIcZ+sUmDjM+l1ubrbE9Jc9=;PI`+@&i%<8tac zZ`z7+>3N${eUFEAOnuY6K5H<$iqxvRd)4wAdI`Gy33ku+-CZAhW{%Up{zACzyry)p z*P;F!pM>}_non29AYwo4Znj#;x_umA3xxzBe@-=2gi>Y(bmAW3=VN2}8PXs6&#Xkr#wOWH(1 zSMC;@)N)o9%UU+ee9jZxc#$8M&`$BZD|t6469ZMUM^b$BI`=!%{qd#TGRrARisNa*T?7U@wz#+$7>6wx-F(BOM#C4v z^iilfuXwEQc;hj{2mEM(GPvnK+yCE-NA!sO#7t8dc|Yk?S?T|`53S}m3da9z`$g%R z&o7@ru{*l@!$HmPWi^U2ROXYjftXU@T1`qxG|TO87!-+ zMzhY??Wf@@Q^OfW^EhEA|L(hj0W8Iuo5t`HsIuWdiTCTzV9)kO#ccA5CQd%AN9ByY z_Yr1bUqY(juaHR8_W%aP4?LD=PTeZuO{#50dAW7xmRlC`|%&Ike#uiQIS6 z#|`DP3!Q-epSMQ9u*Mv>9e7QOgESy=_OK&bW7mm}4}UA{kWSZJczULPqi!~XBrv&~w! zNAYLT8tx^ClMUb-k2CQhOgES(alE)9L(={RvzqpoSE=^a18vU0x-%sB-#=?e>(P-6 zWWEg8rOe9SB~hzAQX7%lBsR!;SpOTGu8neSKBCbH%Ooxdjek=Q<68W>h~4%&Y5^9M zy2HZ+6$M13^s58~1%Fgl4%b?`=r)lHP|x9NGzkm@DD8hg+IVj;A|Hv+0gF|c7l!1> z(^HxKbo6oY6n}sPN-B^D`{!( zAKIc8yPTD;M3>VVP^~D`%FH{rT@fNH>%G{LI%G$?kWeFwHfoZ)r&xztX7#h+OTEdW z{Ip-%v~gR$kWJdu=|XS|(`#c^6`yX{+X(3~a>bqex6*&7qqv|6x}SW6rt>G~CjdSL zeLEFB;>AWFSMGB3MCS8e1Yk#8j?IjhXy1e>x4kl|yUP~&bzlcw^@?zoRpwS!Zk%2z z>FG;RaqROlsfRghu9(U=;D7Tp_b&}44|8k#19kS|ry|Gbmrw@3$S5`>;|9_&kdI}f zZj&>VR$ZDMx|o#BXv+zvLyy`DQGH|85F@6iXA`q0N!B~0<fL;YaDG>7W6?uQ+5{`G-=A^ijHl#8Ln@+sg02Jel zw$XZ7W;+MjnPs&7F5N*;c6<`1W-~p7dA$qchRQKpskS_F<91$88`vWGli)hfHI=Ml@J^jJR~F`_ed zUR@qU$V_*{Yh+Ov(t}X*J41;MQt!8S1ELZ%E;Vqc@0?~|UtcWkul@bXrBSfl$^}=3l-HWnWcfnxvHTQN98{r}%5fSi;CSeSw_fvmkd3ff9PC%odQJSb zihSOF+mL*$kta8g`ZAX0AeXbX$E+59*A)1YRtb=!G32_^{|X*vHHn48^^u3klaJZE z$VsW9+?2tl-pAGlRe>;Lv)3Y0cN?7{hW{Nmxr!$#SVb49t3x3L&+7@835n;y z(}pmrkB1EHA>T_>IzukC4sE;UJHB)hZx88-gt;HJEZ;`xEMp>I)OtBwXb=>%wR}iP z?+I}^qVKtC(2(i$JdM`6+=?q_5FGl zBm3m2V-KRzw6}v}PsV|KlX1-)a*wBW4XysjHYkW|6GFCWMU{P`n?E_ZkBIy-IgoU7 zlMZpm47R0fk;$a?`fVxM;mHToIQ~|&sl+Cbhw_GB6A^*ye=rmOHeQ(!R=lw9&n!9c zV{E0ibV0V@tws0zS`@K7bvD1p zJqbNU(SM}D6uL%kAU3Y@OIQDgact&iRKDZ*acs>drAl75nOU-t5jqIJ)0i8*cUIHl zgP3fq+xL!thEORgdF(A{5_iL}5C{rC_Kb@;Bb%RveHi3GqC{9|XBf?8JF8@vUtQws zR(xzv*8DMMiQcp^EkRNL30mR9kgT3!PRUUNeHHc)x_y&DX`f#H;DyHlnu^V=1!

    b0Bof&L+c}}VE!hm_v4B@T2ZLRad5w2x4;OX{}WW87~aWZi$nK~`^G@oLTT9q52MGkiW)wIC_^4UB1@95 zbPevws%e`gSOUM?fSz#&LWyPOUXm~Ztf;LC{92#J#-3nMD1NQjTkfb+K>`J>&f9>N z?_f=D+3yub5k&72{f);dt_%2{p&FR!)sXp(pCak_R-OY1~Mk-nXl(9g%Yl>2ze5EapnhZtR|n99@6p!MH}0g zf9~3S{6cS{tIDSj6hTi33cO+Y|GjVppZg{x^F^$!jTdwF@GY_<*#4kGg% zxsbeKp8{I$DKJoK8u2--D)6n}_^yO@7IA@bIPSJ>f|0q9Bl4t-CSR__dcFwTz@S)W zI7zpfSBxEe%%%dxH%1n~Q|1J?ko|{;+(_OjnU*fhUBie~C{ySCJ4J`p%gC!=>@Bu4 zQdeUN9ODRsqc1C_)y85bYh_*tQpSOWEq4?>i)XFeKwfVKB*?G34YgDL;lNw;n$0P7 z2NHZK(AX+v{eKCpwuA|P>Xy`BRwF;#V>B42qoU6$d-&^@)<^V*P%An(jcSu9AL3mVWGOO z6~|M9I%s3=Pk)8U`0!r|If)!hH?juykFdrmG8M@`r_hy$Vbx|O=a}DLMGjB2Wf94a zV-)YNKygt;qEYvqOFX${9+})HTPeO|-_`Imec7oM8CokfT{9C{BxK6oJ3dGU5}U-t z#QSi(x0cJZ@6Ri~Bqf;vOlm#B@r|c3Zwr27thg%%dHQ}02UEXF&62{|I3K%0DC-xo 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 OrK4$}QF86k^Zx-8^Bx`m literal 0 HcmV?d00001 diff --git a/main-src/Icons/module.dmi b/main-src/Icons/module.dmi new file mode 100644 index 0000000000000000000000000000000000000000..cff1e4636173d6dce36af863192d48f0f36fd0b3 GIT binary patch literal 1060 zcmeAS@N?(olHy`uVBq!ia0vp^3xHUGgAGVdtuOuxq{^y7B1&9Ri<65o3raHc^B5Q^ z<^+co6qSDe5?t`{>k}<+U9EFx&IfM@HMnT}Kugb4$1`+8XaJDWdH$?_;G;)ACv~*K zfU-{>`DlBc@onAk@YSRuq0gH-gJ#Z&aG5ia_2<)-t}ZLj9LZj=scH56?xybb>f#K| zJT6RbN9KHIU|`Plba4!+nDchFeaEc;ndA1;{DOAbdObXAZo%$^*Lvc#AR2Ux;(e(xA>R){cbkbU*DTC|DT?Wll|3(*1Rqc z2_NJ}7jtu`<6+{1Er-Rm+=l)ppj4i+wfT znE%)ALh8K#%?h90Of%-qo0rrxb8YWU+Xg4|%%;zuKhHe4=fju7SvmK8t-t@9@1v$I zp6rwM*GKe1_uepOR^|=rW&19cvfeS~{A<XcI_4}XXK<1+@o(ZqoKP+2r(OLT= zJ?;F)|ACIXWAxOoaT>i^&Uf&m;(=>9i`Lu{p1r2-R%?uhYu+X@7NIPmL>09-iKP^3yNZ z4fkFP?6F`EuyvjL%g5zw$R@6LGwrkZZnUO*CEBZf{=TJk{@Vv?JsW~D4zTnqYE9+3 zmUrE~uy#G;s&e_YrpmU5lxOfB(OzK47X3NT`s%q~4Cn7@SZtJOU*^B1@v;BIMoFI? zA7uoJPaDW&KTka3`ZuI##ROm+MBI6npKT`Sd`EuqEsm_8uh*ZdzkR%*)#m?{D_L8Y zrKhJ$Bx{Iu`|aZr`fDHkUm^aesnl(|Gs1uCW9_eVX>h!rAg|2fC& literal 0 HcmV?d00001 diff --git a/main-src/Icons/monkey.dmi b/main-src/Icons/monkey.dmi new file mode 100644 index 0000000000000000000000000000000000000000..14bc2e5416951f2931cc2e6a4f59577e60c0677e GIT binary patch literal 1983 zcmV;w2SE6VP)V=-0C=2@(!mOYFboFZvwe!7_n~9gUPfi~psz48O`W(_Xmv23eh1lh8p$n( zkN*!L1)S@PZNW5FJt?Mf4xr(5C{4b z)`-!*1I8o#o4JiGrpZ)s@ z1=Otp(^&Ne7c9*0OhOrU000KgNklYUtRTob3WKx7^^j zlzP0Qoidb6a;CC}2E88W5ZjV`yyL!guh(k+^rEd{R`-09sQKTDS7 zf2s6r>wQ099II|3Jw5sN^ZO^u^E?m{5fSP1)4F$nh=_>H!vutgh={af0zyPYMA|U{ zAtE9o?S5YMKL{bD`q>^mw>{6wY>$X&WAXYYTA!j_e=8**LI`=%2!DR@${BC3)r8#U zLLj2Wgb?!Cvu9J=UBT<0C~rlKzxV2bdGX4DRSWYk^-M(O`1<&K;+cr_c=5^sntu2~ zJ#Q&%m32TSGO#}<6OUTc-|D6yS}flD2LP{MzsAd#FUQXw&wruKY5@U&ujl7RUH@nG z`oy)c*Y6kp*ptVszJqs1&nA??Iu$Ygu9ScPQ6ZEEliR!gcK1cmYA!A=B$E&G%t}H` zNkHO3*yI3wRlBZ_Pd?lL06so_w6*bf`+Sqzw(;P%Mc_u|J*)t~ z9%RW-j6W+UAg&P7NeufKR)E7E_$@dGfh**& z61^@Dn1rm85JD#FdD=EArU#=IkUJ(EM!Px|vekPF0PwsWZFNC+{LMT5+Vk>y z9Fvf2sgqwG0M&L_u3wIYRAsNWkzVnHgUJVxnXX%5%fQa=94oBNg8tKhLw7RsD4@8+~yyB5wp66LY2+8Dw$V{zRoYRqf=#Ia-;?GLcaN`3{ zhn2~lIPFajOf9P9Y>+&poqQmy7>;A(v=>%3CVWIh`oxou;lojPjE2u)o$*&!{8?%t zGFJ%sya6C_fT}+T0Mu;c?Vgpqn2zKlaD_xAy@|_lY{0hhyb+bOssttt1SBF_hy4cd zz85AR0I+-HS)HT&{+{mmt26$ryc9bydEll|&F{MYUOjN-n}4E{EqZ`Gs%C01l4FPG zBiSVo-%k^}3i9eA;TVwZV0!&G-C4aZv!0!FbsW~IgIxgMq9o+HCFD*=PaV@4fAfw% zbGu*ySI95N(J$%x(H~1T_jsOXb$#HSUF>lnIs;BUa3$=?A*x~t5kJH{{ zAD|krq#inxrXow8f87abd_Pv%ZW^^-iF%k)E^3xea?vpQan~&&caJ>l;E!Dl9|Dbk zZ_wym0|539b~FEbv*ItHC;rZgKaP#e;?K+$kT1tVmJuH4<-4%i<+Rs@I18rU8vwYy zy#)X`?;JS3kN&+6ds=em(-MGX-m`7`)wYE@pgib~k4=^Tuo5MMagH4gSOUUjd*A$( zT(yAiE3ICwqpqpMC;5$|2=)F)xpP)*HNgWWAGuJi9iMhO79ix!&5d>45_0$u5*aUx zFf0Bhl?P$cp=23<)8dbkRs2b90Z~(JhNFI-q(7EQf9_bF{#ou}IioYuU#J4RQ zf4*OSo*REsTR@VFja1v7)dz6W7zO&h>iC-Ao=`FBHFb0n|1tI`fj*s{ZXdg7Jl6=AoakNwWiO6gNVog zn-qVuj6X{!AVfq&L|IwsZn#85L_}F&0zyPYMA|U{AtE9o?U;ZN5fPDg{{ty7m&qPV RO=SQ8002ovPDHLkV1n;s-rfKJ literal 0 HcmV?d00001 diff --git a/main-src/Icons/pipes.dmi b/main-src/Icons/pipes.dmi new file mode 100644 index 0000000000000000000000000000000000000000..062c7e9b86059e5561fd91999756e2e695df16a8 GIT binary patch literal 11508 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 Wi@DuOS=o~79JO<>EwZ`t;Qs+H#uDxT literal 0 HcmV?d00001 diff --git a/main-src/Icons/plasma.dmi b/main-src/Icons/plasma.dmi new file mode 100644 index 0000000000000000000000000000000000000000..885cb2f5285cf54a7921be560b8cc6a61c3ae4f9 GIT binary patch literal 1305 zcmV+!1?KvRP)V=-0C=2@%R35yFc1a6I(v$TwjvsBw~>gX&?`v5D1slzM#0-#+B*HDXxh#W zFukSQ2U*Vpj5;q!qKh7k#I?_h!*aE%=Qil|< zCr@d@7TAO9#-AA&kbyDrJ>`iCgUrA?KUj5Lr?{b?tu@!K0_J??XTD)?ByG=x1xy_rFbh(-?g1#-OfiI}Ahg^Evy`T3cfb zxsA~KQ=_hHTR{fEInfkFqdvct+uz<^g$%*VxWmVJB9HNd1`vwW6V17zhW3}XpPBJz z>N6I(cAnC>q-bQC$VvJ2W27_V?>qRL(jI(mpYl&s3+hilm-12NrNZ307u6H2{7NbH z?#f@+wN>iZ0CG(I6fp;QBwxO6j|2y;5`RB(5;*iEwDGZQu8Y z@)IzpK1mda1Cr>N6lznN(!3)U6v*W~aszS}bJ4L9<6e(fYi)hb>0aeOiu0?rM&(RB zh9qH77nZ!+5uGW>yM3!WbbX`1p8nTSuJw40F_k1rK{3eGnEG=WI`)oSM&p8)0)_Ja zqh~#1<;UKO6#8@mhIa>`(urwxrz#H?_g}Zijm^p&X}s8b%2sv}xdP^ZWa<@6fnp~* zm7?tdM8_y{_>5HoBs<5FsNEV%Czx@fLlvHzcL%M^-{d>RbXBW??}>2#5tB@%kRmTaN`!Gt zw6_fb(WG}xs7VD^3AU?UQZ;CiNy|*frt9;nPdKcJRjnfb&+ad!{9I9()VTt#UC-6- zMX9_K4Jn!g-u)_~^CiWQC>XL^g(mo7;R=ItDORcET}q?NQVW!lN|c~uslZ9=KIH^g zYOs_-_|pE)X9du)kOMgSaR(3VK!}P;5ffY~4z%xiJ_ei#GU|9X29R^2OY?5LHfSpY zMxo5@tBS2-q99j-tMB_9-7LVlV^QB5ejXrjyQZ8UkN~`9N1m+j28rd|Co|Hj1!F))0N@f zAv+T4GXO@mey7tIq(r17Bd0@-ltRSwVf3?t0y(zx16;r7h(qL-I7SyjL#Ia#wYq$d z%d~`$mD+QvO6B6fT$o&L_sT>QVUl<_m1ZvV-y2^t?L-@ArY?d_%_L zQeH~pD0Ef-bo_-ub5Aq`X>`nYFUNOEU7)P&v2pes#}+Z?w$zcyx~}aHlU!GFij~`& P00000NkvXXu0mjfH=K%D literal 0 HcmV?d00001 diff --git a/main-src/Icons/power.dmi b/main-src/Icons/power.dmi new file mode 100644 index 0000000000000000000000000000000000000000..a49e0a7b4ece4904d981f9836a0e9562b38864a3 GIT binary patch literal 9594 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 HIEDQmB&{l; literal 0 HcmV?d00001 diff --git a/main-src/Icons/power_cond.dmi b/main-src/Icons/power_cond.dmi new file mode 100644 index 0000000000000000000000000000000000000000..0e91e3be5b0296a5ea111dde6f4e1cf25b6ea647 GIT binary patch literal 4298 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 literal 0 HcmV?d00001 diff --git a/main-src/Icons/r_items.dmi b/main-src/Icons/r_items.dmi new file mode 100644 index 0000000000000000000000000000000000000000..468fc8789a9290c3722d49e2e5bbfe3a755efd73 GIT binary patch literal 5548 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 C8O*x? literal 0 HcmV?d00001 diff --git a/main-src/Icons/reg_pipe.dmi b/main-src/Icons/reg_pipe.dmi new file mode 100644 index 0000000000000000000000000000000000000000..881fe63def6067afd08a6fe7fd8b163f23249dc1 GIT binary patch literal 1392 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 Y9cqc6s((f#>@V&MY@c3tm)ipW4+!*V2LJ#7 literal 0 HcmV?d00001 diff --git a/main-src/Icons/screen1.dmi b/main-src/Icons/screen1.dmi new file mode 100644 index 0000000000000000000000000000000000000000..c1ff0137894a1de4ab82d33a52cb98b2eb819a05 GIT binary patch literal 16106 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 literal 0 HcmV?d00001 diff --git a/main-src/Icons/security.dmi b/main-src/Icons/security.dmi new file mode 100644 index 0000000000000000000000000000000000000000..c36b14ce3e40025e34c3d5d651a93ac68ba29090 GIT binary patch literal 3488 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 EAJDo14FCWD literal 0 HcmV?d00001 diff --git a/main-src/Icons/stationobjs.dmi b/main-src/Icons/stationobjs.dmi new file mode 100644 index 0000000000000000000000000000000000000000..57ee176806f01a69c76bb5b2f9f76c570c45e082 GIT binary patch literal 26067 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 literal 0 HcmV?d00001 diff --git a/main-src/Icons/table.dmi b/main-src/Icons/table.dmi new file mode 100644 index 0000000000000000000000000000000000000000..b3d295264cff06eb2226da94bd075e8ba4e46172 GIT binary patch literal 2376 zcmds(&ubb%6vyApjyuyfwN?meLk~(0y%rI?7B&)k=uKLWTdGKDNd|wQCLkWVlz=x6 zDc(HQLwoM2;6GCEKWV=+vl_GJ&_ak1_lLhGcQEQn(jp#9?_)edn0F@XL^KF+bI4&F`ju*#H4ANFIwEt~$ ze{IC>{U#JKEeVF~(3Cz08`&yle~{mOIytUW7Q*}{{>@T_V7XttQ literal 0 HcmV?d00001 diff --git a/main-src/Icons/turfs.dmi b/main-src/Icons/turfs.dmi new file mode 100644 index 0000000000000000000000000000000000000000..799aaafc9ae79448b5536f2891113406937afc07 GIT binary patch literal 7979 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 J`Bm2^{|B5o13>@) literal 0 HcmV?d00001 diff --git a/main-src/Icons/turfs2.dmi b/main-src/Icons/turfs2.dmi new file mode 100644 index 0000000000000000000000000000000000000000..f4c2c4ae4fbaab6cf5ae182b99fb56f758de11c2 GIT binary patch literal 8194 zcmZ8`cTiJZ^lcCoQHqFy((<7cQKYFsYE+b>bWm!D(mM#!Nn!<&E+9h0h*Cpup(h{$ zA{`PUT}4^~Lbp^*IyixG)&?`CYcU zWFMr)BnL1FcQR{n60)x~{cudYc*B*$+(w_Q?vjSPae`vVC} zz}VCSRFCSD8Nc?-<@*FnASE5rS|>x6Cg`%?MWxPOR|`F4D-@(nC`NldAkK#BJ6L-^ z#9EZ-oG9qYo0Ly2d`5rh$bsC1Pz>;5JG~Oz@Yw)TzWsXzo*ZoeK&Hav#x>i>x9fQ| zsSAd$d%!9J0|$>t1?On4A5eH;$m93+se(|oCaL@}NP9BrQ_qtOGk?Vl0qy1jSx@tW zn2W58y?CsFwvL3T0OYDSQLQ?k9HdSh<&Wr&8|J zyHv@_nY^kZlE2VHUdio3*<0c>b91gQ``@UUY>|r77-Sl4*}(7ZRIhqtvaVq4TQ@Vg zzA`C*iptyqn?3$?D>0D{7>UU#hgMbb0TG3%kW-=4U&cFnwI*)7+EZECZFJ%M{2`%J zk?IyG871*+Rmy(fo3gC_S+etmVZi4r<Y=3yl4v z?oBVn{P*|M)!U-(_Fo2=#|u}r47A++tpYHh2ajEi>zIAEkP_C*9G&U*mpdkj+GY?g;lQZiKqNUx=vkLQ~jIT-~2SxItA|~ zJZq>jcIVv7R(Udjg25AYt6vFP$vt^yz zwqM$nIDa}txN1}5Rx@@$ID{Rg&5ki6r5b?Md}6Y${if05ij=IYZ$I>y|HBqot0{(` zgzeUyu_Jf?!Uxp$U!}!nX#~u?>_eZ4SoV!N(#U^~d9==M>MV1%#Dl2j`|-tk4QAM} zd2Tvv3>ZcD=JvfM4&sp?i_o|gt1C5kJpC%Gn(<#60)vWSB4yau-OAiVvJ=()$WC$R ziq-wAAKxd=iLpo0;Au0{79nNT~q3x_Ecx&SAGtM6VI|M>g|SSkQy)vx5$KS3B<5DITpJ z#YH2J2kIerPL&waF?vA7xcWDQXs9-t$Tq7GT-6t_-)+5#9G++r+KdJ6mT=)T5B{cB zFjTHBC{F9mxA+%jFNF2^)t9Rv;e+Yt!x-lpt6&rkKBTs*c=yzlxAeuyw1~3s^b|a> z3VwEn_)F!MdR=;w-s=O+>_zjY86IM?_c`he#{c^Q3bT!3@N63a1ScP;Z7+{_hFEh0 zK3RG@Qz_-~*f)IFGxp1|l|#^gXNMU-hKvI)+At?p-xW$-?aoZk9Ij0cti#y)dj{wc zs{)>Sle8Wo**8LN3X{Q;prQe6BaMGlAj(B5WBVz0BY~aj^ek_E(Z4Vc z94Kxn8hP~ttLIBmHc}FVDFHFTRk9%=i$3wCGDeu@f`MpnUv8O0=4!j=K4Uu;v5op_ z=vn?p5B>}M9I;Np@9G0QYiNpJ4nTl&>I{r?Y{R$73S5r0SZa+50Y7hN!X9ku0k&Q4 z7D0FVRQ6pQKRB!IAv>iI(Gm9IwIG6IEv9p+1T4c!i!F$Npf2U(5G9nG(BhErL26lg z$SKF|dikk`go9|fux*C$3bA6U_&ss;kZXJ1N#e2QvUq)yi|uzjzBSlTY&d(>>7TW~ ziu*d8hIQA!>(paKi-rP-7s9?g3?7U(W38^BjPJ7pzpk0*m{x8$8vToyB7tQf!Hdx+PpvQej0# zurKF5?aex|3?;H{=27q~6J+SgWR1IwT$S(mH5EMlqiS5q4Zt)J7Grt&vJDj-e>~6S zRI8o3k37%gl+4-O^+#j=1fSBd%v$_tzxFNr*I_wt##~P)M)@zVpIEEAJoWoTotBXn zy-HswtgC!m@{jlFN3HIa5~n`}A7)gpyR=0<2 z7d?s@u(@YBE$lk4VeKI5kFI#^uTr2r&|9C+uIx^gBcwhoPc}KVhAccOMzTRM#tC4I zph5EEe5M7ABwRSZ)SX8n=;`W8HNf8CHlse$A8|`(5%BySZ=^S?CFH-Rb7<4h-=+Ir zMW3~BhxBG*T&;rJonqGstB$KaN6A_*X&`NFyJ7KiW`UWzUR71HM7YOjBc&m#_1cN% z+4tiPWSBAm6Wa7K+2{p!HzaBFVN_H?e}Dg6;65`5bj9`hPJq5O7wK=GCND!V7e2&B zQ2dC3@AdFnUcy-Fd(0L{qQ^uyeyS-y_#d|kt~5t;S=lFp_O`kAG!t)Fb+Yg(VeiEF z1jc~0>iuJ~(!X+thv4~!HgzeG9N(||ddK9JcS7cbP0h4^@(ci@2~BCvKRvzuK-8PW zc(#J%ge_Z(*s6u@nJhaJt1y*BO}A0LA}zKhih&nqvVb810<#E`4Z<51u=CEEUDKuY z$Z6@9H2Q6i8aLVl{AI6n2%rPO5Qh>>-jyH^#pI&D1)wkc?5y)>_0-APHyX^j31YwN zh-2Ly;oHah&KFghi3g-dYZN4umfPqLTMcQJ(=RZhIbjOHDc9?(4Q|FW@Wt?N6i%Aky%jbWJNnxYkExHk4eMTBUXhWJS3H@NmJOW66~1c4 z|Da-XkKf((lf%<0ZdL1V8_>B8Zdm>Lmy+uA`Y=lV+-->kd31WC7$hjgSKAYr>#*(a zeJmp~K?8l)XkRbd)E>=B*ex6MxHfQaHKrVM04?%GJD|=Ca$))lyMDBcxLQ9oHYd{i zT%m88MHxT6K2=*Q1ehQ%rLgyd@7%BA*c$+?tr&)NsP!Dc!ynm`VvNiI~>H-x>Zhw8jsYhw4%zqxC zM4Yz7$+Uw>@vJ?RHjaN5u-gUNmg>lV{TH8)wbCYL)wvSpu`r9v9q@0VNk=u#`ER5B z*pAnRDP@A=9)sW#2IIupad{`X4|n0{VLZdRg2)r_O5brxJ}xljQ(M-KeO=^7(yfQp zpxDP_hb9c0ZqSFUE@#N2qcDEOGQQpT6ssYq?)9(8oZIDhp&uC6WF~alc9o<8q0nrG zO3Q%GbUjRyY86r*KL(zGzhs1~M7v!L^UcLp&Wz-}t>M{s>>g+t#Lfuk=sZm%6taK7OMx3y)Umg`O-0zMfB92d zTEpF}sYnCZw9UjC%r2{cSD{ zn@J~wppC)B!QnS~6I0wx2_Dhr_h&coRz`l_PwoA_HOGenf}~*l=F<_WgE9{WBJN}- ziP{h;@x6w5*5D-ggNul9>wcjjG}fFiZly zndDX#%S|pB+#JtS6^r`P|F_OLG|?8GaRQ<>GOH1->awVvTQj^#KMSjySsq2Tu+^C# z+0_i2C)_5Ar#F}$lKr(B@?cYjPM^mxeU zLg$1k5Mf~_SgRI@ufxN`PgjOL>)ta?jOB*j%4s1meOh^jcfBCUe1C5(7DU8Lf4NOY zS3dkU=i|DV@vB(i{ne;H`T8_If-sw<8NdS3@_Xke=7KK%(-)FZy$#>y5;za7c;7NW zsEwQczasfs8g$f&c5XH6F-Z!e?P||qh>6+`SO>tTcH`DD(J=vEUSd2G4czX02$H{0 zmzi+QpUHRpV5M0=#hHiX)5t}8Z>k;L2>ErZS52=cH$J$%t!q`F&dQlrNg`>DJ8 z01fpB{w~KaIB0LmuUeNMGDWA;XP>!!-vDDf2}IQgbcQ6LgJ=g`pw0R@cdMSC$|d*` zko-&rjiW`wu^GY*jP~4NjSb|cDysJmD}oZ8UU$PMY$iS2xHWDfn{q>k-N)#pMeQYq z@7HGUv4!a@Aa4_M2{*ey=||j4{Lu^bk3coB$Lk@7^Q@;UDS=clTOHeGflER1+Ra1va@n~)HQP|Dy|#f&{GAn z39YLDMIH#aPS((on+i`*DnFA8F>I8^df>G8O%9ptrCa5iL#^i(smIkd3bfKZp6^~U zdZ{~n)QDiSv$RwcQk9?m;`?KoCen;e$8q$cH-A27>i2apxKwWZN#dak68>n>KPl4Md*>@We~`tELFcH z??QbVs+Mgd`~PVG{+#2M8}8G`JHkBjrzRqPW>&I_v0&KsFLI;l=v?~>@iXEj5*5}( zw9@Pdqi%aLgO&_G$+bF%5@am1N zt-sAF6hNJQoI_!!eyB}(7jt)Kyf?Oqs~qXzdj0CwgX7b&H%;KDipY-}zPBIw+{xJ?UFAQ|sr~MO3f) z+|0}kd*y@8Y-*JApmKU=8CKW70hJcM>VWD6uWT;U5ls}%g-77FJ)?ZKM$ZX$4OI0) z+JlXX9O0%$(B}vFIN|-NW$mdpy13?)ITaVd5H1euN3v7z9jszZJB)HzH1U{;10(-CCGtEQt~5TnZ$wjPDh~0k9lid(-(#b2qnSB82AV=TYxcTDn%j zN&K;~yxZG>m3n#ZW6!XAT>eR8bV{lPuvAC}Z#u^HxoB!(+x{7hZcq6IwA@o)j5&2y z(28l~3|-u5ps-Mm=7(h64-Y)XXHjb_{$DYZmVY(r9_xsc;#BfUo-n88&XdyOx*|&FN=0%1cuYR&=-`@o`ESEgY|Q$ZJXf*w~QyY%c@#W3P0^4*Vk?a)`whED7O< zSY>5p?-_jVBq`moKkLZ>>XhKj0Hg({UhOfTPe(ctTDKeX^Iq!#IJ0Z`&$=*}PZC~K ziNNm~u{tGwuT6?a?yMborVX%}nBVs%;Nk$rVfuHX>}lCl0`M@27rM8{i~Y09N8%en z?d!C;n(86+-Ljv{*YC8oGr#5rn|bI5uhL=hEqi4FCg@69;b!Rr`vG zSwHI}3k3;;3yJ>OwCbE?!cVTpFy=>btRKr?nb3t{^Eq)^>-g&4M>yqpkJm1{D;`=( zNuLBwBiMC!;@a+G$B$q2H2vOdcpzdF_@tDK*rW<)(Q)t{FH(lfuGz{#WA}2HbgeVd z2Pqo4vUqf6c6Ra72Yy-i$iH@=THD#~?rvs}211HNXMQfjCT@%s!0rE1OwI7Km9tKI z`){J(nYAi=mZqc}xb^Yw1Ua*B$`V8+uao^P%?Qd8$8MgNu%tcyq&T8b<(Oz7!}!P+fRl*R5K&E0`30k zr@|($8lz6FmvIfkFXO!eIIbkk3Qe)SZY=$urdm|UUApY^b7MmV*WO;COS{0l^-4}$ zbPvz^*D5)BUEf;nd0p}b!K(9WSRh2HQKWjRiLewL_sQFgfB~WHFJ1+40d@5@7MBW>??Ir*j$L!7;w-TxZzujoSemsr;RIY`yLO#VqUB0^>4|Zmri(oyP zSj>M-PSc;|9+Zaapn8+QTx)Bqv+8YW?j5!(1i?{4D@F4BGhJa6FzNcE?0GzcHD{UL zx_0*|V_`(`nWTVYhCgH1&OAq zd_IH``Lbh|1q!jT6(qGBCrn%w%dm3^JM91cA9+mwN?1-?WqcS?=6e{c$DgSOe=*c9 z{qx{9o_3_j4{i!&o8WIjzjhEp}G9AYc!+KHIuDx)Ktc=GYW=2 zy825C+1n!!v+vk#3l9>*J(ASc6dxbov(>u+{X*582YYf-pN9fs#;VRo9OPgXUPQF11!V_rXz((gAd`m;NEy-W1cVJIfvjkfetPNW&vp&D+j1u! z%zM{B#(`|>p#!Nh%>vMa*ETJ*76P!6f zSqGHQmr}4VEWtFaP-Q})qC8u6e~HlL=(AHFlJ*FrRa#1DR&(B8<&J3jTTps&?6o&iFv~z0b4WOLB4}WE; zZfci3Z^mfVq#msc&Sql~#T8Kc>eoMwQdcw@cB)VT2jv{hS!(H>c#08cZLPdmEbB#- zE}qSlYvS=YGmVn2ogq1`?ZC2uiDnDRO{d=>t+mNWo{gPv{J7YEejIRr`wYI6z+l_| zWVmcZyr9K9C1HqvBZNh+&S^QC zC-YSyhBf@y*7OSVm!nM%1ta)p7f3*mVhF;Q+Xd?^Q!_@!rLE>ww{%~;DVz#E(Y1B* zVT*edVL0F0&B4@C-Kz2IGL(Qvm>VjnQ%pM+0rwtg0YJ+zz+TT5YlN*jhrQ57}0zInvG#bDqD zg~B}HLlC0A&rBtAh@9PW2%_WAKq*=C8tVrQ9Q&t%yCw&b7-lcn*^f`Fm4e&YRVY>t zgO^O)4fr3^WA(lxvbnU75dopkE6yzg*rc+mou6R#AGe^;J$U(Ih;vH9@yf*CdY(Eu ze7~>BOWwF7*S4wSqCIpGpL}M=jHSk4k`Z1<3oG#;y)3gW22u9fj!=Y6j<N^n)5i z0@HX`KKlCpx#!!-0Up5)^OE8T;!kZ&Etpa!*<@Qz+)=7slFhVg!cMZ4M3bXm0$R3$ z^Dy0GvKTM25EkcaTg8H$QK%=3AKWp#plWqF(F6AcPw?a#qn@>Mp2YbP9FFW0TK3w$ z3T0%n1p-&X?G(6pXf`IL#=nkt7q;otSvm}2USY7U`X79wC_4P=#Z!iAV2J5{-V4%; z{cP0~3fCVI3jK#`3CYrm87!S+EKGafGADe~H*K@33`_Y44r6(|{kc0BhQEpHmm0Al zq7HM_M10Csp@tcdS9R5*o_=xOwqEz5eHy%#F>lMAhM@RqT{U1zcm$lD{v!9?SA}qv zc&H4*uX6LaxcEHpRks{qc*GYNj62fN<5Qt^tv-!Y=0^xw&Vws`K0^#%9AQbTSXFA9 z)v6iz?2u>-9ShOYt>#kE96E!TB!x?!G&d3_-?u*0LsX6w{3-7*24_qq91n_UljVY2UGNfAj{K7L7allmA!m zKswXjIdq>z!l!5EoI6X8s3szT)hlH5;xvv*M%{ z!hzHz87B<57qurI`l{`#MH`zB3?g85IeSM+facJ-_4kJSF(#htB47en;K?x?FTNekxD4l?X+3p@2uVX_k*qi)uabAJ8HAO_=H zHQrMTdf2dvo>mnZ0udTgBqm_#7_St%ST+jxpd86F3i2Ovkm&d?zBHwa^1OdIJkh7V XOS#K;hH_{70F#^MH!82+d-8t()>kfL literal 0 HcmV?d00001 diff --git a/main-src/Icons/uniforms.dmi b/main-src/Icons/uniforms.dmi new file mode 100644 index 0000000000000000000000000000000000000000..0b4e67ffb3f8588cb1ae19db9f650ce7a27bfde6 GIT binary patch literal 5555 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%0DRWzq5IBbxh!vuDpf`skxiJn_WSPe1*=?|tw2 z=bsk@p`oGSyWjopPk!=~H{N)oqod=MS6=b^{e69XZ@>Nai!Z)dR#s-UT8oQ|7cXA? zNlkBW&E}Ds&6{g#KB?LKNzEspP)1lJXxKj_f)*0j2>+nfYIItBM2)C5=*sl-_45t* zp?_kTc%QC})AYz|%RoUXm5V3^=RCuFagIi(LuE+Oi5k7;oAqL$!*quUbdfd77uwo) zv~J(hzHOVJ1Npy%*_zoJ?M%%~twu8o|2{j_%mfpDv<3J*Lx)5&L;lfdSymFsY9ok} zMyJ@Vz@gcW^`1UlEZaHAxTe;b9y;OIkfYb69AAhTQZ|O0A(_{7e;#={R z}GJG55x{TIiHQ@cKV>IRiSiXAE zd*lt~gJb^chSJspO{*WdaG;5D)=O2>@hSSr@)Z4U*{*Ddq6^oV+o9CGE!)mc#DKVc08`EGYjW89~WO&Zy@Z7R~+qO;5yMMI)g&nQiS~t}QdR9jcfc2s| zEkf9M;PF+J?;x>cKzbxYOM^5+%YZaP%YZaP%YZaP%YZaPn~qPG2aqa!m&_TE%Czc> zoW?+^(9Y%Zwfe1gPGi7ee63y+-YqzRgOt%W`b~{hyVD?LFC7wJ<=!bERr4tzHF0?g z(EbKe1!7Y{S}cPUedy9OO05FL_a89q{FO#K8oB5r4`h_3IRTA$G@fC|)9_I*{lo@7 zHrAmWrEK(5KhqdYWPGTYMnoON(-@vEz!01DOa)nlG=oypK*AUc%h9|*0tJpM{1S)G zvwRTMeo%j;Kr~@EMNX%A5aXw?xFr8ZiAd_H9xmkv*p0FG(k?ytX)z%{gKr9|HtGZ7&V*PD_d&GLSY|m=z`(?U%yICcc?+AosFH;=YF55e@p=;UO7>_s$%} zyU>N{w+gzfk=@F5p3~&8x|XhS6h4GpCAaP1>GOIJZ2_=OUM6h^ zYB!5dp593^Dysz}K-nkgBuUbXNJKpnodJn94~YgpEXmU%W4McKMoG%cN0a@PlTWSr z&v%b~yz$Y~zwO)pv)Vrtxh~xwJ@Ebh%71!l&ELO!tYyQar_c9o@2(9OxwhUP{cu(P zFW-D>&60PI{o{s5L+AUNyK7Gsxn8_K`fscH-+S|^Jxks-Jh@@!!1;MC-S53w($b9u zhVrV;5<2jrF70UDhUM5&tB{YP|Cze5pQ)Rn#|W%58Va!H&(~wz)Ef1(kV<;Jj=F0} zME9%1kgv@X4dB6YS0m~2(2t@|#O45&xwHh<==GQr==A6(DMxEzjaI}e8ruNa0RR=N zYjoY%4*;{qK&xm-MWId%=^RQ8()|Hz3T|ifF`sM3KX^n|3BB0gXTM0?sm}0M*j83=7ddwOSF0 z&(zJ?47pX@s)ZRS5(K{5Rc7CqrL$#lZsL{dy(T0+lLIVfhlCZfL#mhA?PhO}sf+61 zzf99wq(ZwrhgR9@uWyuTB5%rWKJK?L8YF{8)g5LmA{u!cpgGK5Q;}VwLL-`Fd=9hE zVQ-Ww@-5{SPD6otQA1^;1Q8o6pa%Ge=6HX>BhqfkbJSb`*^DMRB#&g=-Lv48I?%Ws zRBg7=Vyg7kRfx=vLc6s4e8~cf#Z;bk-|V~o2^_Qnc}XqW0=VKn5x0-Cp{j?o;j zqpQJEAr_%)EV4H`_K@cFV%NnIuW0{4Ma4JlzBix`6U zo9uQ!5-l|ce|hWd5}+Y1&@$jO z|DKFQ3u$l`YPG(L1XbyffJ%oHyfOVcC*!s?t{S(y_a1gaGLk`P;}8TLrh&G zC6dKjRAjUOT#f$yJtanpe`AFV&Y5h)d)B>U{f<_whGqhr+l7@Fqu8uo-ptm~aC9%N zAWElfX=^q2Vt~>W(_lk6jb`4o+uI5otul%*Ug4wK=zh;4iEk!yX z788@|M^gr#`?U0n*@_g_vKp|L{hr4-%CuVipN|1nC57^!G7`Cf*T!$yFS`Nx^p3y5 zvan>mqY8r__WcjS!i5LTerX|Ds7j=J998FFy0PKlbL5!kx=PB4uR#P2Ii3{0Cl;<| zrG*XRJ>J545!JY45yt_tpYjCf^V@0jc{Vvu;Pcw_e4jlwu6MR{-*P^jA^KR zXXV4ID%q6#h_A^3;laG88kL{vMz@u4n|{}&leYAETqk6PGg(T4fV(Q z=JT!j2;WoX`5YEU1&x{5WT3j|eHd37Dj98~Lti`x`Zeyx`1AgPhrs7KigqiG5)I>& zPM^^*J%xoWgZr>lHxaGu%(Q6t+LhaYOEz?ueA5fYJ>Nl zihhbNKxbM%ycOv2r?c(npk%+3Ch5I^r;O zn~QMbp?|aKF@E+jrPNXG6FDD_LMpmw!p#yb9t9NC=`;_>2@d|s@luMAx4W?%cR^G+ zG`U+sl4eGZ3-BF(tE-$R>V_IgHLx7V|eZ&v9-pSa&x-u>L` zSQ)WyP@ZDW&mO|R^DWi6pfCrV#Tsu353Cx13MCtS3N-^%Nv^BFiK0AR{?^doGN-Gf zmi0O6e<7>90!2r5Jw>q?UT>X4NKqGVUBMr3_>sqg5Y<&L;Dy4&JsTk*6_uhGrG%{knz!;U;{&vP2l zKkc98Q%mKVDtTX78!A0+OD8oyb}{_4mGLDe$Er5uL*BoxMuOb2I}bo2G9+hVjZ2Vxc6+;f$Fo*pF6*7_(gJVQ=S-CC3HAB%=M=@NeQ|jswpXg`EFrVF zyb;@L){88mEhMgAHs9^){B_gs;8w-nOptwxy~lIy^)2q7N^^ydXW6?t6mITJhH~q+ zxRS%UG@mOph4xYBU^q*j|CizD&SY2yr%?tc4ngk)F5OcPL2+|AeY;sg|78?uz@qt3 zzK%VsZaW)ME{Sxvm&%dDbKd8;{p`g~=K7vOLun!9_;KKLwCqdM&_CCzYM}(wJ-2BU z?ldbl(d^WyH|C`Iuq{tBLz}h}HNL2o^)MBiw%86fHIy)W)sOXAKKM*~YlKqR`{w7d z7stbh8QDxzRU9KDM_qV^Le_JxFW&<_@W7@X@J@}e*&b-Gj zox?dv*0B*kS<+7F622pp-T5mr4J>45ux{e6_yQdu>mRav3f6mM3h=Vr-YX)X2Hgi= z+{M!%_W>(E4LZno#~odl=-hxE9w3>^PlGO&;ga3OgKobyesJR~PNOU2X}%vQd~YZ_ z%|Xt0-pA#!-FC?1r$HCX)+jsIkSCu8m90^BxU*>TZo5od)eT*g-TMIQveTeTfqUeQ zB~zb!Ez>jOvE^uC(v(;VN+r$JdU zx~r!_Gx)Wv?d~0zj(h{SZ2R;s>(*bkD#7(CI<3{r7wL>wSBy;~o}$;9LtQ)y*=;NO z0v4^Fuy+KSd~BL?0V(V8N%5uM%)DxN=|`p~z4Ol(kH^gCipQUs&&H&I;qSC`Uen97 z5ZRnfFOWHZ2XnUHjyc#FnyZH@#d>H}j9XpWVqE;v&ZT=~dd*B+Gs8eL12?%u-2R$j z$p2hlEvxU6y2L`!SdI%PrV5{#ZfAjpN1xQCK9pDbRO%(BnpG{BLEkr>S@`yu0r%r) z>I?9tGJSy-W9UphCQC(hEv*Rm<#hMx3~;{2ge!4hnYp`tW-SiH%ey3pSm=|=O%%!= z3=Ln@dctV6V1f0oOlN&&%6toqVmn|y5XWu`XpyohMKNa9+IxUQ{?X0h^9+p+G|EyT zeeE!fTw=vcyGYdHa#j{fr#`-58aKRjAzTlDzE(IHn^e7*H9|RT9{MbsC0&s&4@%G0;cJ9U_dGrBB9fJK84*_}@t{MF zu1bQ088}sH)IR>#YvixVb4}8vacA5 zVu6+c4-mZFZ(HK6zE%upTnJMx{NzVVy5OKC1Jc#YuEF7}`^*Ew=k}TZ6dr%3^8)c* zD}GX3KR8@2(c?!;{zS>ZsT<%sb@lR+u3u4U)^r43liweH6=x~y<(Ae63sCaW|3QBO zS{aWL_{ga``hw_8bfxHAb#oa~(Vf!ne5N}^yeQ!AwH*tfNt)EzyJf}ROkYG)}z@$PpQ6LJRENtVMdeu7y_s8xF;d0;nwxM$kh3CT+ zuM@amZ@da1zw{r)TYTm}75}%R=x0OPrwh-&`EWzg9~f=_)uQ=>(z$(0UKlEu99{ta zRUo{1$3vzk3#=ai^<54VP_GOVG<2k4&bPf7(5r>};cY?4-Lc5*k9>A6dl!QrJl%bH z$L-k3kvHy?-7H3vcWvZdFZLAym%M9}&6lk+ubWGgmUy#wfwqRimz)1($}W&^>)=${ zPKBnlTV?lcy%ysBOYh1Zi*C);ugd=M&fJ}*pFg;*>x?WGc*6x_+`*C@x`|*Ce*uLvd7PdqtB#wz2yD0^WjOfE$@1L z$oAOWgW(&O)4N_=wPsgXz3Vko+4Z8Hphj5uH*CH#Jq~3rD}YB#5yaca=4Fgs*!(dqEYq~( zlso?8xsGFM8sweALiLzR9%1t#+yhYfz(Tf(v>;T`NS=Hpj<>{=zh z=+7nyxSz?sn?lI!*wVJGRrn^*`6G=511c`9Vr1o)b!k$BySRGxWm62d+S!;yfrvR0 zKG?sa$rS!XgOsmlUm;<`6cRl~6q-C?0HQDO@ei@GNf=GX_ybtzFFt^rhikvc(LgsF zDYNOyHL& zVr4^An$%%k!@gIm!xwDW)Df4GNiH^?=$kZo(27*Sq79{JmDi%*XqR-s@`ydqw`H(b zCE^rcPdbBW#5|MLCz&XxKf*zlqapeVCY{0J+fZ8FM;l)K_L;w2MKbqyuMQ61Xx{ei zU;l+Bf-JeQfoNCph$-~o@JG*dUJKv5ZkzmgF#7a?#5eSZ>7lBXXB9_TZ7_t__1F8JdiBUgI^wvF0Rw zTdj=}SLizBxD>fYC^UX~CzDJ9ItN41SSPhcZCu{UdIQi$4sl3+=DgPHFl zc_@H9=oecjE6IdHt86Pt4d$lHtQt3!X%C?>w9E8kt-(sTE(WcbC?sv%Ht@kYQ6!8H z2~#MU_5qZPVKiltf%Z&i=trW$F;bGp13BiGD7P(bC898lg2B)@Sq@)8zZeV8)DHxrTfgyIQSsS9XTCc?i_B9^`(a0vF0{t z+LD5)%O~K!K(ap^Tk9Hj$89O>&#rZ!xgI&>48r5i5b91qjb2x9GTJgR1nnmRU{3Xi zBP$a@Xf**lplN%od7{6aT5FFZTChA7uw7X@F?1rn(ivHn=t~4V5!=Mb%~&9bHay8- zD!$SkY=@Gg9r0d9LoTwy8S%th+6LT_K1NH8+=Ny^+ZfbrkIH<9Q;`-|C>85Ov=}WO zXp7Wb*_9f#jddmiC*o_9Fd8vG9kI2YS$1VzVi;z%9d<{dvu%7iAP`-`P{{Dp41~bZ z{qFc7cd&M>d183k6;C2`GPVm5h_6fqI^vzl;hP9BAiFCOT$TtR7I9D8ux%VF)Qb5cCP`gSjNY6`ATd%iwsHda=}h*YjP%_ za*x`steog4C>{;3IL=hM`0hdDqTeAOjd{+`LQm@>1r6SF3Kze7}a4OpD9Du2bp$=g5%*hy-!%%Gm z9RkU-CE+W8oEjRv8C{zgYKK{)C!;`@ZET%$G#pu%40Zqrz*IAZy3ak(&b$`gw;T>kP*|Y`dWq%9;br4C;3B@fE!d9! zCkSJbK@Yl_;o9+?PP`?{ozQs~S?Qs!ab=>vcHHI+qW?kv7(ou!*-Y(pp3GSNR73%G~z(j-O@s1ycT!~^{|UdNc0{+8Ka H@BjY-Z{XRH literal 0 HcmV?d00001 diff --git a/main-src/Icons/water.dmi b/main-src/Icons/water.dmi new file mode 100644 index 0000000000000000000000000000000000000000..0b9c0a4f61139a337b67b031269de6d9ec9ee908 GIT binary patch literal 2669 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 b{vq){5#OQRBYpbr00000NkvXXu0mjfP0BGY literal 0 HcmV?d00001 diff --git a/main-src/Icons/weap_sat.dmi b/main-src/Icons/weap_sat.dmi new file mode 100644 index 0000000000000000000000000000000000000000..486246f7fe02c285497d3473bec9ea522dc8e5af GIT binary patch literal 7060 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 WUNx9L;XJo~^pu?ws>J46-2VZMBRkRn literal 0 HcmV?d00001 diff --git a/main-src/Icons/windoor.dmi b/main-src/Icons/windoor.dmi new file mode 100644 index 0000000000000000000000000000000000000000..c5eb2cf8294e0282bd765227738660a3bf768403 GIT binary patch literal 1790 zcmXX_ZB$cN7QG>01VoSyVih5@6UP;SfV2e!l4wyN3PlWvVWNJUD32!bTM$keIr z2m}!oK>}@ADuV=cKruQnb(VpON$HHi3}1x+;X6wriTQZ%%?qo4-aU8kbI;!A-gmxD zN{n@L+3o@WaEp(NNd{n}7>kJ;H(+1RWHkp{$}cd}&c$R3xCLkO&Yj`s0#Mv=EH$s7 z(Dd$D-rKcl^5HlgXM6Mfiwx)dC;4d=(+5~C*SuIT>klkpbPsU2 zd`RHmP$>XlLs)#wer9pQ^4Mhl=w}`qlKxkdo-B6hScte?2NupTVEMXwORC!8(M4=iR#|*`EBKTqiFN#3ebB}P2 z;<9UEN9<5q{TgOSCdL8vkB$KV(A`&1KpavXXJ2Gu&P2O$PVjD=T^&S6p!lIt6sLy# z$F&A2g$EIm?*RwUw*1tw?bIArY_R|(fDERl{8kRYH4!4Kn!QL(&49!yt)Y1g+J(e! zL;$WBJ7#iz+E*(?I=>n*>3T;tZ3yvYi(0(R_;yqrP+0<+B6iR*Z#O)D@lf(ln07(L z+lw>+nnLWbIOJ+NuGuk)zE=lfqH!7cjUYHZ)p_m%630K?xQBR6Oz5Aqxj#nnK>W#P zVl3wyvf-qf(TD%K03l!nSavWtG1VTDyH8%o2Y7sl)eS=Fh{2?H0^fyWmB#!*fyLag8y!B)#{;ni2aiJ-{Yz?q9GUki6JKpS&c~>;z3X6370? z>MXnHDWQ|(G^uaAl*S}X$_+DYhG|0C-w*Kz_pHt29X#B3sKVT(Wp%Ot{$YeNwqkjc zsNwYxH}XOhZ;@XZdxfXorW`eWB5SAR?tGrD?fzM}EfJwGtv*9p)Ne3`oF#9(b-y?C zZW)yF4D#+oxbU4O#@Y5-%ib$GT1z-WQ9;)`$#9(y+EVN^*bSG^nE&|CMafv%d5u;& zR>m9RqC+=%uP$9=u)_~tG2K^a$_330N4dgxJ+E2YwEg)NmXhosAKgQ4oyaXSNT>|d z-neb{6--`O)xR?Lh7Ci5dG6u)vuY^UhVD`dx2vInGUO^&`9>w2!<~sL=vmTIIz>C^ zi7Qm(i_L3KHl-I?$1<1(I zg{%3}!nTIkpc^6^sf&+~`})~V>Ybf*8udL@Py=Z^CC`P|%#E7`87Ysl{;6Qy)z1x@ zZn_r6WMZ4k>kVc!wASfEyemmiVyn`rPVutQb+3$cn%e)Ax=6FOp@_o5r!}Jg%|GkZ zsCf{4XJNO{HUc~+?-Nz$foNh${hg$%MplBf9Hv*U9-S@SDs??9{}eNSKorZfOMXnY zZ=NpMg|*CA!m6IU0J9*uFsMH&-N=%Z1a2|xpItkFmej0G@YGOgHe%zEHN!=*A?sR- zTrd!XGp5TmgpwlbmInstiy|r3dh68VSmV6DubbR@6YUv-YtX1e?@|!KzSfCV=>(7Z z7u#^bvaTBa^E7nZYxO+RJJx2FBazAgK_5Kvww1?+d2QdBWlxZL*rqVh(odF*Qp`D( zXjQMb|2_Dz8&QM(&1b{p0g0IEH2V>(Y^@NTgAnIj*{y7|^lx+ZHeGP5bXBUV7F|b2 zsUwhCroFEE2rcYKFFe%gZD>U3tlpwe3mwFnATComZc!D#US$`;!v^V-<@4POZ`hU| eAJi-$cES^`gM3SPdmoI=6No>U7}I`$Q~rNT9eSbw literal 0 HcmV?d00001 diff --git a/main-src/Icons/wire.dmi b/main-src/Icons/wire.dmi new file mode 100644 index 0000000000000000000000000000000000000000..adea19560bf9072db3291f9b9e99df736d4b98fd GIT binary patch literal 2690 zcmV-|3Vrp7P)V=-0C=2@l)VarPz;49%UNjDDey=?pXdP*zdbawkOAB(h7TIq`0y6w`6y5hdgkLCOQBRnJmBqAgd zBr+r#Naz_OxFd>XwZ;f8$gnQ{2cC{6LV#1?iHC6G0xmh=#wF~Mh)iPLgk5Uf-HeNF zh|C$5Q6rYb6I()LMu~B2z?0HM_%ztZBKEO}7uO=OxrDP3DK#QJma&f~PKnRNA!p9x zKcbR;>ZBV7_W=y-vYqMH)jyKPs-%nW|vV->awME~5ZS;R^dyfD4?d2*WB2QoC^6jTe?R4$e*uI7R*JNe? z(;60$O?6!A{C9qPxoVz2&%eK4bN0Wr?bqJ6_xaO%`=P6^9}#LO1LF^SF#ddF{9_Ns zKP>o5y8!^;Ss$pbl}!Bd?SKY7FbG~NZ-2b-(b#`2Y49#0s{22vfm?ev*Kr9?Uv)$H ziT$tImeKaB_rq=b)sKBrd)hZ)a$H{DPu&>u*na34-}t14wjq4O9*jRAF2+BsAbErWT-D3_JyW*AEqgc(nk0stuL5IoP(t3n0&JhaJ?> zdS=!yaEICf;+h-(%)ih=01p5gF-c>N#o%3Jc>$`~E-N&Hcx{^d#sv_fV+;VtA$$ko zdNlr-f1%-vb^`za$KxX8Sm(EwYv0G+D_(AWt=->NkNxHK{iOCD@)`Z{x*fmnc=pE^ z#aXO_HN3VP_E1a9tj=Mujk*EiT08!ke^DC&JOBWhEC=sh`?vtzjv&4+E`SgnV*n_J zwNIPI=Sj|$n6h>JGykF{0(byu92X+xSr6Vtd>nV{i(Z2GdaT#N6pw9&UDVS(5Azso zp=R3FpC?6FkKyp+Pko^@-T@B)z)Du%@jk`{Xjzfp5nmJU<3x0f0U#f1pBSdrWSlSK z>BqZB(VNzT&q_X@`a%gj0S^ET<6@)?4^O;zyd85-Pkr)4{P8^1gNVQO!ai#1lef7H zx~P|U25Yjw=gV#l8fpL2@t&^7`+stcKPUP8Nd1fB@B};n05iNi@!sJAv<{w#KNe2` zBRa+aupVn4gctZp?S8(T_<4!XAb3Yf1n>aRC@x6yc?;e}d>?PGVG}|8aXi(8r?$e6 z$aUp;K0{s9N?e1rSNC4{UO=y z))nJvYh4h)!=1gqVg%nf{_C({*v3onzPJ!@eym#vnh4^{OMm@$uKq3bYYX)Yn=I7U z(%e(JJ*;1_26a+T&GEkm$Ns_7|B==qHGcCU=xW$KP}_p|Qqb^3R<{Mn<=^b))eOf3WgUxZjh5MNdrK;B^va4AeUP>6*P zp794O2w)Xh8~>bpWNHjVdS`i!vCsMCIGWf0n;ScIzRCQu-@GT_(~XTnix7-WKzmNI zxhIuUC-z+@weB0Q3$~}W67Am8hhFbIo3n!ojth@$I(M{gzx$o|28bu z|Ke{AF5tldXsdDkuPr}-kACrJVgE}kn7%2uVej@!v_aFJwwI_uuYG4>{268b;$%>B zpHIN6O^8#ePFc~vu>0u%qh&zD9uVBURz!O?=`e5rQ83hFTJS5(#cP)Ey<$MQh#jW z`V~M*c!JcgalM`Y{k$W+_dRcGz72i)|MOS>J?h^zkLO-9sD1ak`sce6@~MUJ6XTB? zO*TFHjvG%wD&e~k%)kFr%z@V0I#%Y+3F-KQ9W`zQ9k~s?>;Jsqzto($Ie?Eo=}j$K zqW6gkCV<#D{*$;s2_iuKYd_%$qny+}^}7v0e4grcHaGqXY@hW@IWE6kegU~ z^KT8~b8q)E?RFJ0I-e818&~7laQutje9V6Z4WOi%2@Y8}{_R-$_VcO#-tuQ_KhqoP zA5l^J?IVcau2u-Y^ts$@vZ1x$U4-ym8~s0T{2H|u=Be4&)^PmIsWmo_SYx=m{x5v< zfdC!=8o(kMt>GzRct-u^BZ%KdyVmw@pY_W=Ee7u*)P*+s|FLGD5>IX@G__w1o4RpQ z;uS>E$NmxfPXG@9006)gg822khw#|0)!cBJVw+w>#b+qd(XZx&Qwre?f7ojG!(f{j>pAv7Szh+-W12d*> zlnms)vwZGz3fA}Y`B}BLJ}w`s7a{!B zM*pvK_j;BF`>VD6X;FHkBt2exZ=Otj7WGih7wrZB0P?X|M(ZxG?J`S*Ne-Tb-wYUrYT)J?NtU*O_`f3;hKxN7o{{!veH_`0k9q<4E0DuD}g49+ovUo@QJ?(e0Yj1x^$@k=z z5aAu~W6{H(+Be3=eH^|2ftEd*e;NNe2;c$0Atp^kV>!qH9w}PCT|k#fb^KHqzXb6^ z+UL&6?JKWe2JdmsaSO+bwMC?A@V59LC*C{S;g6;5SCzhwg76Ip;cosFVf-s1fCm6) zv@aY0E!rUxut!?Ir9N-V-@gm|D(d%LVf%AId~KzVzw7O5uV0ezb4xo)y)tBQ95jOW w%>6IDea+v*iMai7-LZxOVz`_C8UJej19Nm}a(qhoF#rGn07*qoM6N<$g6YFi@&Et; literal 0 HcmV?d00001 diff --git a/main-src/Icons/zone_sel.dmi b/main-src/Icons/zone_sel.dmi new file mode 100644 index 0000000000000000000000000000000000000000..5dab56eab10ad16afee6efbc0139677b4d5eafe3 GIT binary patch literal 1713 zcmcIkL2DCH5dJ1jcGINMm_lfq9uhBt)Jr!WJSP`hgrc<95}Mu3YSWZ7b`iXI5r0A8 zfoGusPu}b$C#5Lj&k)g*%Dixzj zgaBDb-Kia$Z7eW!3G(|?Xb)~X3a5ZVQ0@Ij?Wm48uN5G_X=@axHKG`eEc=@5gg`um zVV61%eSm}y@M{`?GX+3Hd%xCh^0UZhf3BmHVzu42=D zw$1t2Ud_m+b8l9w)j^W!^58qNp|4VcR*4pfE&tPZ5P)%^p`m*F7K448SN3g9*r#TB zXxd2m-O25_+G`=3&1GYgG?!)Mph`7M#g-nj?aamYct*Aa%xC5amYD1sntVSCT7fOk z^kGp+xUOdFX{UhD1e4W$Q%hh4Nd`!F{xA|Qm#bf z<;tU77Sq~OkKMcMyRK`$6pd4Ux`8i*i2669epfi*xNBRU8|=4~s1+a2W;h|7k>B-v zh3Ln-jtc)f-+t3$u||CM+57YJ-X*{L;jGuYxUA3pD4xH*;PjyW|Lu3hDeI7rkHNC` XSpD-DKd;DfR?E?_VZ_wO`ET?$Qix9V literal 0 HcmV?d00001 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. +